C++基于单链表实现学生成绩管理系统

本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下

/*程序说明:程序是由单链表实现的学生成绩管理系统,主要功能有输入/查找/删除/修改/排序/显示学生成绩; 输入功能由带头结点的单链表实现,并且使用前插法输入学生信息; 输入功能可以实现插入学生信息的功能,所以无需再专门写一个插入的函数; 删除/修改学生信息要用到查找功能,所以将查找与删除/修改功能写到一起; 查找功能使用顺序查找遍历整个单链表; 使用直接插入法对学生信息排序; 程序主要复习对单链表的使用,所以并没有完整的对错误输入的保护功能; 由于学过的是c++,但教科书是由c语言为主,所以写的代码是混合c与c++; 编译环境:visual studio 20172017.5.13*/#includeusing namespace std; struct Node; typedef struct Node* PNode; struct Node{long int stuId; char name[30]; //成绩float Math; float English; float Chinese; float sum; //总分PNode link; }; typedef struct Node* LinkList; //输入学生信息LinkList Input(LinkList llist){LinkList p; long int n; cout << "\n***********************成绩输入入口***********************\n"; cout << "请输入你想输入的学生信息个数:\n"; cin >> n; for (int i = n; i > 0; i--)//前插法插入信息{p = (LinkList)malloc(sizeof(struct Node)); cout << "输入学生学号:\n"; cin >> p->stuId; cout << "输入学生姓名:\n"; cin >> p->name; cout << "输入学生数学成绩:\n"; cin >> p->Math; cout << "输入学生英语成绩:\n"; cin >> p->English; cout << "输入学生语文成绩:\n"; cin >> p->Chinese; p->sum = p->Math + p->English + p->Chinese; //总分//使用含有头结点的单链表实现信息的输入p->link = llist->link; llist->link = p; }return llist; }//查找/修正学生的信息void Check(LinkList llist){LinkList p, q; long int id; char sName[30]; cout << "\n***********************成绩查改入口***********************\n"; if (llist->link == NULL)cout << "没有学生信息记录\n"; else{cout << "输入查找方式:\n"<< "1.按学号查找\n2.按姓名查找\n"; int a; cin >> a; if (a == 1)//按学号查找{p = llist; q = p->link; cout << "输入学生学号:\n"; cin >> id; while (q->stuId != id&&q->link != NULL)//从单链表表头顺序查找{p = q; q = q->link; }if (q->stuId == id){cout << "学生信息如下:\n"; cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t"<< q->English << "\t" << q->Chinese << "\t" << q->sum << endl; cout << "输入功能序号:\n"<< "1.修改学生信息\n2.删除学生信息\n0.退出\n"; int b; cin >> b; if (b == 1)//修改学生信息{cout << "请输入修正后的学生信息:\n"; cout << "输入学生学号:\n"; cin >> q->stuId; cout << "输入学生姓名:\n"; cin >> q->name; cout << "输入学生数学成绩:\n"; cin >> q->Math; cout << "输入学生英语成绩:\n"; cin >> q->English; cout << "输入学生语文成绩:\n"; cin >> q->Chinese; q->sum = q->Math + q->English + q->Chinese; }else if (b == 2)//删除学生信息{p->link = q->link; free(q); }}elsecout << "查无此人\n"; }else if (a == 2)//按姓名查找{p = llist; q = p->link; cout << "输入学生姓名:\n"; cin >> sName; while (strcmp(sName, q->name) != 0 && q->link != NULL)//从单链表表头顺序查找{p = q; q = q->link; }if (strcmp(sName, q->name) == 0){cout << "学生信息如下:\n"; cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t"<< q->English << "\t" << q->Chinese << "\t" << q->sum << endl; cout << "输入功能序号:\n"<< "1.修改学生信息\n2.删除学生信息\n0.退出\n"; int b; cin >> b; if (b == 1)//修改学生信息{cout << "请输入修正后的学生信息:\n"; cout << "输入学生学号:\n"; cin >> q->stuId; cout << "输入学生姓名:\n"; cin >> q->name; cout << "输入学生数学成绩:\n"; cin >> q->Math; cout << "输入学生英语成绩:\n"; cin >> q->English; cout << "输入学生语文成绩:\n"; cin >> q->Chinese; q->sum = q->Math + q->English + q->Chinese; }else if (b == 2)//删除学生信息{p->link = q->link; free(q); }}elsecout << "查无此人"; }}}//对学生信息排序void Sort(LinkList llist){LinkList p, q, r; cout << "\n***********************成绩排序入口***********************\n"; if (llist->link == NULL)cout << "没有学生信息记录\n"; else{cout << "选择排序方式:\n"<< "1.按学号\n2.按数学成绩\n3.按英语成绩\n4.按语文成绩\n5.按总分\n"; int a; cin >> a; //使用直接插入法进行排序switch (a){case 1://按学号p = llist->link->link; llist->link->link = NULL; while (p != NULL)//学号由小到大排列{r = p->link; q = llist; while (q->link != NULL&&q->link->stuId < p->stuId)//查找插入位置q = q->link; //插入p->link = q->link; q->link = p; p = r; }break; case 2://按数学p = llist->link->link; llist->link->link = NULL; while (p != NULL)//数学成绩由高到低排列{r = p->link; q = llist; while (q->link != NULL&&q->link->Math > p->Math)//查找插入位置q = q->link; //插入p->link = q->link; q->link = p; p = r; }break; case 3://按英语p = llist->link->link; llist->link->link = NULL; while (p != NULL)//英语成绩由高到低排列{r = p->link; q = llist; while (q->link != NULL&&q->link->English > p->English)//查找插入位置q = q->link; //插入p->link = q->link; q->link = p; p = r; }break; case 4://按语文p = llist->link->link; llist->link->link = NULL; while (p != NULL)//语文成绩由高到低排列{r = p->link; q = llist; while (q->link != NULL&&q->link->Chinese > p->Chinese)//查找插入位置q = q->link; //插入p->link = q->link; q->link = p; p = r; }break; case 5://按总分p = llist->link->link; llist->link->link = NULL; while (p != NULL)//总分成绩由高到低排列{r = p->link; q = llist; while (q->link != NULL&&q->link->sum > p->sum)//查找插入位置q = q->link; //插入p->link = q->link; q->link = p; p = r; }break; }}}//显示学生的信息void Display(LinkList llist){LinkList p; p = llist->link; cout << "\n***********************成绩显示入口***********************\n"; if (llist->link == NULL)cout << "没有学生信息记录\n"; else{cout << "学生信息如下:\n"; cout << "学号\t 姓名\t 数学\t 英语\t 语文\t 总分\n"; while (p)//输出学生信息{cout << p->stuId << "\t" << p->name << "\t" << p->Math << "\t"<< p->English << "\t" << p->Chinese << "\t" << p->sum<link; }}}//程序主体int main(){LinkList llist= (LinkList)malloc(sizeof(struct Node)); llist->link = NULL; int a, b=1; while (b)//循环使用菜单{cout << "\n***********************成绩管理系统***********************\n"<< "请选择你所需要的功能:\n"<< "1.输入学生信息\n2.查找/修正学生信息\n3.排序学生信息\n4.显示学生信息\n5.退出\n"; cin >> a; switch (a){case 1:llist=Input(llist); break; case 2:Check(llist); break; case 3:Sort(llist); break; case 4:Display(llist); break; case 5:b = 0; break; }}cout << "\n***********************感谢您的使用***********************\n"; cin.get(); cin.get(); }

【C++基于单链表实现学生成绩管理系统】C++基于单链表实现学生成绩管理系统
文章图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读