前言
本文我们介绍如何在指定的位置添加学生的信息,还有main函数里面相关函数调用我们也展示给大家。
一、指定位置添加学生信息
在指定位置添加学生的信息首先要得到指定的位置。
这个时候我们采用之前学的查找函数查找到我们想要的位置,然后把得到的位置当成参数传入函数,若指定位置在尾节点处那么就和前面我们所讲尾添加是一样的操作。
如果不在尾节点处而是在中间位置那么我们就得按照下面方法插入。
//指定位置插入节点 void insertnote(STUNODE*Ptemp, char arrStunum[10], char arrStuname[10], int iStuSorce) { //创建节点 STUNODE*Pnewtemp = malloc(sizeof(STUNODE)); strcpy(Pnewtemp->arrStuname, arrStuname); strcpy(Pnewtemp->arrStunum, arrStunum); Pnewtemp->iStuSorce = iStuSorce; Pnewtemp->pNext = NULL; if (Ptemp == g_pEnd) //指定节点为尾节点 { g_pEnd->pNext = Pnewtemp; g_pEnd = Pnewtemp; } else { Pnewtemp->pNext = Ptemp->pNext; //先让指定位置下一个节点和插入节点连上 Ptemp->pNext = Pnewtemp; } }
二、main函数里面的函数调用
在主函数里面我们主要是进行一些参数的初始化以及使用switch case结构进行命令的使用。
int main(void) { int norder = -1; char arrStunum[10] = { '\0' }; char arrStuname[10]= { '\0' }; int iStuSorce=-1; char nflag = 1; char xorder = 0; STUNODE *Ptemp = NULL; showorder(); //读取学生信息 readstuformfile(); while (nflag) { printf("请输入指令:\n"); scanf_s("%d", &norder); switch (norder) { case 1://头添加 //添加一个学生信息 printf("输入学号:"); scanf("%s", arrStunum); printf("输入姓名:"); scanf("%s", arrStuname); printf("输入分数:"); scanf("%d", &iStuSorce); AddstuMSG(arrStunum, arrStuname, iStuSorce); break; case 11://尾添加 //添加一个学生信息 printf("输入学号:"); scanf("%s", arrStunum); printf("输入姓名:"); scanf("%s", arrStuname); printf("输入分数:"); scanf("%d", &iStuSorce); AddstuMSGtolinkhead(arrStunum, arrStuname, iStuSorce); break; case 12://中间添加 printf("输入指定学号:"); scanf("%s", arrStunum); Ptemp = Findstunum(arrStunum); //将找到的节点传递给Ptemp if (NULL != Ptemp) { //TODO:插入 //添加一个学生信息 printf("输入学号:"); scanf("%s", arrStunum); printf("输入姓名:"); scanf("%s", arrStuname); printf("输入分数:"); scanf("%d", &iStuSorce); insertnote(Ptemp, arrStunum, arrStuname, iStuSorce); } break; case 2://打印指定学生信息 //输入一个学号 printf("输入指定学号:\n"); scanf("%s",arrStunum); //查找 Ptemp = Findstunum(arrStunum); //打印 if (NULL != Ptemp) { printf("学号:%s,分数:%d,姓名:%s\n",Ptemp->arrStunum, Ptemp->iStuSorce, Ptemp->arrStuname); } break; case 3://修改指定学生信息 //输入一个学号 printf("输入指定学号:\n"); scanf("%s", arrStunum); //查找 Ptemp = Findstunum(arrStunum); //修改 if (NULL != Ptemp) { printf("修改学号按:%d 修改姓名按:%d 修改分数按:%d 退出修改按%d\n", 1, 2, 3,0); while (scanf("%d", &xorder)&&xorder!=0) { switch (xorder) { case 1: //修改学号 printf("输入学号:"); scanf("%s", arrStunum); strcpy(Ptemp->arrStunum, arrStunum); break; case 2: //修改姓名 printf("输入姓名:"); scanf("%s", arrStuname); strcpy(Ptemp->arrStuname, arrStuname); break; case 3: //修改分数 printf("输入分数:"); scanf("%d", &iStuSorce); Ptemp->iStuSorce = iStuSorce; break; } } } printf("修改完成!\n"); break; case 6://删除指定学生信息 //输入一个学号 printf("输入要删除学生学号:\n"); scanf("%s", arrStunum); //查找 Ptemp = Findstunum(arrStunum); //删除 if (NULL != Ptemp) { //删除指定学生 delectstunode(Ptemp); printf("删除完成!\n"); } break; case 7://恢复学生信息 //释放链表 FreeLinkDate(); //恢复学生信息 readstuformfile(); break; case 4://保存学生信息 savestutofile(); printf("保存完成!\n"); break; case 9: //显示链表信息 showdate(); break; case 10: //显示指令 showorder(); break; case 0: //退出系统 nflag = 0; break; default: printf("输入的指令不对!\n"); break; } } //保存学生信息 savestutofile(); //清空链表 FreeLinkDate(); return 0; }
总结
学了这么多大家应该发现了学生管理系统主要就是链表的添加、遍历、查找这些操作了。