diff --git a/main.cpp b/main.cpp index 7607a0d..864fbba 100644 --- a/main.cpp +++ b/main.cpp @@ -1,52 +1,193 @@ /* - * 代码说明 - * 代码由 筱锋xiao_lfeng 编写 - * 其开发者由此互联网ICP备案作者编写:粤ICP备2022014822号 + * ˵ + * xiao_lfeng д + * 俪ɴ˻ICP߱дICP2022014822 */ #include +#include +#include typedef struct { - char no[8]; //8位学号 - char name[20]; //姓名 - int score; //成绩 + int no; //8λѧ + char name[20]; // + int score; //ɼ } Student; typedef struct Node { - Student data; //数据域 - struct Node *next; //指针域 + Student data; // + struct Node *next; //ָ } LNode; -//初始化一个学生信息链表,根据指定学生个数,逐个输入学生信息 +//ʼһѧϢָѧѧϢ void CreatStuList(LNode *&list) { - list = new LNode; + LNode *p, *temp; + int intUser; + printf("[INFO] ҪӶû"); + scanf_s("%d", &intUser); + getchar(); + p = new LNode; + list = p; + for (int i = 0; i < intUser; ++i) { + temp = new LNode; + printf("[INSERT] ӵ %d û\n", i + 1); + printf("\t[INFO] ѧţ"); + scanf_s("%d",&temp->data.no); + getchar(); + printf("\t[INFO] "); + fgets(temp->data.name, 20, stdin); + printf("\t[INFO] "); + scanf_s("%d", &temp->data.score); + getchar(); + temp->next = nullptr; + p->next = temp; + p = p->next; + } + printf("\n"); } -//逐个显示学生表中所有学生的相关信息 -void show(LNode *&list); +//ʾѧѧϢ +void show(LNode *list) { + int i; + printf("[SELECT] ûϢ\n"); + for (i = 0; list->next != nullptr; i++) { + list = list->next; + printf("\t[INFO] %d û\n", i+1); + printf("\t\tѧţ%d\n",list->data.no); + printf("\t\t%s",list->data.name); + printf("\t\t%d\n",list->data.score); + } + printf("\n"); +} -//根据姓名进行查找,若存在则输出此学生的信息,并返回逻辑序号,否则输出“无此人”并返回0; -int findByName(LNode *&list, char name[]); +//вңѧϢ߼ţ޴ˡ0 +int findByName(LNode *list, char name[]) { + printf("[SELECT] ڲû\n"); + for (int i = 0; list->next != nullptr; i++) { + list = list->next; + if (strcmp(list->data.name,name) == 0) { + return i+1; + } + } + return 0; +} -//输出逻辑序号pos相应的学生信息(学号,姓名,成绩) -int Position(int pos, LNode *&list); +//߼posӦѧϢѧţɼ +int Position(LNode *list, int pos) { + printf("[SELECT] ڲѯ±Ϊ %d û\n", pos); + for (int i = 0; i <= pos; ++i) { + if (list->next == nullptr) { + printf("[FAIL] ѯʧܣûжӦ±û"); + return 0; + } + if (i == pos) { + printf("\t[SUCCESS] ѯɹ\n"); + printf("\t\tѧţ%d\n",list->data.no); + printf("\t\t%s",list->data.name); + printf("\t\t%d\n",list->data.score); + } + list = list->next; + } + return 1; +} -//给定一个学生信息,插入到表中指定的位置 -int PInsert(int pos, LNode *&list, Student student); +//һѧϢ뵽ָλ +int PInsert(LNode *&list, int pos) { + LNode *temp,*p; + p = list; + for (int i = 0; i < pos; ++i) { + if (p->next == nullptr) return 0; + p = p->next; + } + temp = new LNode; + printf("[INSERT] û\n"); + printf("\t[INFO] ѧţ"); + scanf_s("%d",&temp->data.no); + getchar(); + printf("\t[INFO] "); + fgets(temp->data.name, 20, stdin); + printf("\t[INFO] "); + scanf_s("%d", &temp->data.score); + getchar(); + temp->next = p->next; + p->next = temp; + return 1; +} -// 删除指定位置的学生记录 -int Delete(int pos, LNode *&list); +// ɾָλõѧ¼ +int Delete(LNode *&list, int pos) { + printf("[DELETE] ɾ±Ϊ %d û\n", pos); + LNode *p,*temp; + p = list; + for (int i = 0; i < pos-1; ++i) { + if (p->next == nullptr) { + printf("[FAIL] ɾʧܣûжӦ±û"); + return 0; + } + p = p->next; + } + temp = p->next; + p->next = temp->next; + free(temp); + printf("[SUCCESS] ɾɹ\n"); + return 1; +} -//统计表中学生人数 -int Count(LNode *&list); +//ͳƱѧ +int Count(LNode *list) { + int i; + for (i = 0; list->next != nullptr; ++i) { + list = list->next; + } + return i; +} -//释放链表 -void DestroyList(LNode *&list); +//ͷ +void DestroyList(LNode *&list) { + LNode *temp,*p; + temp = list; + while (temp->next != nullptr) { + p = temp->next; + free(temp); + temp = p; + } + free(temp); +} int main() { - // 创建链表节点 + // ڵ + char name[20]; LNode *lNode; + CreatStuList(lNode); + printf("[SELECT] Ҫѯû"); + fgets(name,20,stdin); + int intName = findByName(lNode, name); + if (intName > 0) + printf("\t[SUCCESS] ѯɹ±꣩%d\n", intName); + else + printf("\t[FAIL] ûжӦû\n"); + printf("\n"); + + show(lNode); + + PInsert(lNode,2); + printf("\n"); + + show(lNode); + + printf("[SELECT] ܼѧ %d \n", Count(lNode)); + printf("\n"); + + Position(lNode,2); + printf("\n"); + + Delete(lNode,3); + printf("\n"); + + show(lNode); + + DestroyList(lNode); } \ No newline at end of file