数据结构课程设计题目名称:学生成绩管理系统计算机科学与技术学院数据结构综合实验设计———————学生成绩管理系统1.需求分析系统主要管理学生信息及成绩信息排序等事项。根据需要可以查询学生的信息。主要功能包括如下。(1)使用中文菜单,界面升级和用户输入要人性化。(2)将学生信息保存到文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后在对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。(3)具有数据输入功能,输入的数据能最终保存在文件中。(4)具有数据删除功能,能最终从文件中删除。(5)排序功能,根据自己设计的数据结构,升级排序算法。(6)具有多种查询及输出功能。(7)其他功能。(8)学生信息的修改。本程序要求设计一个学生信息管理程序,即用计算机来管理一个学校的各个班级成员的各种信息,实现学生信息管理。(9)数据的输入形式和输入值得范围:首先输入的是菜单的序号,选择你想要进行的操作,其次根据提示输入相关的班级或学生信息。(10)结果的输出形式:输出的是班级信息或学生信息。2.设计概要输入学生成绩输出学生成绩查询学生成绩插入学生成绩按总分排名删除学生信息退出系统3函数StructStudent//结构体{Intterm;//学期Intnum;//学号Charname[12];姓名Floatmrak1;成绩Floatmark2;Floatmark3;Floatsum;//总分Floataverage;//平均分};voidinput(list*head)输入函数voidoutput(list*h)输出函数voidsortsum(list*head)总成绩排名voidsortnum(list*head)按学号排名voidfind(list*h)查找主函数list*del(list*h)删除函数list*insert(list*h)插入函数全部的功能函数可以实现所有的功能4详细设计:程序代码:#includestdio.h#includestdlib.h#includemalloc.h#defineMAXLEN100#defineNull0/**************************/intcount=0;/**************************/typedefstructnode{intnum;//学号charname[MAXLEN];//姓名/******************************/charsex[2];///性别//charsex;/****************************/floatsum;//总分floatave;///平均分intcomputer;///计算机成绩intenglish;///英语成绩intmath;///数学成绩intchinese;//语文分数structnode*next;//指针域}list;/*************************/voidinput(list*head)///输入函数/*************************/{list*p,*r;inti,n;//n为学生人数/*p=(list*)malloc(sizeof(list));p-next=Null;*/r=head;printf(请输入学生人数.\n);scanf(%d,&n);for(i=1;i=n;i++){p=(list*)malloc(sizeof(list));printf(请输入学生学号:\n);scanf(%d,&p-num);printf(请输入学生性别:\n);scanf(%s,&p-sex);printf(请输入学生姓名:\n);scanf(%s,&p-name);printf(请输入语文成绩:\n);scanf(%d,&p-chinese);printf(请输入英语成绩:\n);scanf(%d,&p-english);printf(请输入数学成绩:\n);scanf(%d,&p-math);printf(请输入计算机成绩:\n);scanf(%d,&p-computer);(p-sum)=(p-chinese)+(p-computer)+(p-math)+(p-english);(p-ave)=(p-sum)/4;p-next=Null;r-next=p;r=r-next;/********************/count++;/********************/}}voidoutput(list*h)//输出函数{/************************/if(h==NULL)printf(记录为空!);/*************************/list*p;printf(学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均分\t总成绩\t\n);p=h-next;while(p!=NULL){printf(%d\n\t%s\t%s\t%d\t%d\t%d\t%d\t%5.1f\t%5.1f\n,p-num,p-name,p-sex,p-chinese,p-math,p-english,p-computer,p-ave,p-sum);p=p-next;}}输出函数voidsortsum(list*head)///总成绩排序{//structnodetemp;//constintn=20;//inti,j,k;//printf(按照总成绩排序:\t);//for(i=0;in;i++)//{//k=i;//for(j=i+1;jn;j++)//if(list[j].sumlist[k].sum)//k=j;//temp=list[k];list[k]=list[i];list[i]=temp;//output(p);//}inti=count,j,k;printf(按照总成绩排序:\n);if(count==0||count==1){return;}list*p,*temp;while(i0){p=head;for(j=0;ji-1;j++){if(p-next-sump-next-next-sum){temp=p-next;p-next=p-next-next;temp-next=p-next-next;p-next-next=temp;}p=p-next;}i--;}}/*******************************************/利用了冒泡排序的方法把成绩排序:voidsortnum(list*head){inti=count,j,k;printf(按照学号排序:\n);if(count==0||count==1){return;}list*p,*temp;while(i0){p=head;for(j=0;ji-1;j++){if(p-next-nump-next-next-num){temp=p-next;p-next=p-next-next;temp-next=p-next-next;p-next-next=temp;}p=p-next;}i--;}}/*******************************************//*利用了冒泡排序的方法把学号排序:intsortnum(node*list)///学号排序{structnodetemp;constintn=20;inti,j,k;printf(按照总成绩排序:\t);for(i=0;in;i++){k=i;for(j=i+1;jn;j++)if(list[j].numlist[k].num){k=j;temp=list[k];list[k]=list[i];list[i]=temp;}}return0;}*/voidfind(list*h)///查找函数{intk;//要找的学生学号list*p;p=h-next;printf(请输入要查找的学生学号:\n);scanf(%d,&k);while(p&&p-num!=k)p=p-next;if(p){printf(学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n);printf(%d\t%s\t%s\t%d\t%d\t%d\t%d%5.1f\t%5.1f\n,p-num,p-name,p-sex,p-chinese,p-math,p-english,p-computer,p-ave,p-sum);}elseprintf(目标没找到\n);}利用遍历按要求查找相应的学生:list*del(list*h)///删除函数{intk;//要删除的学生学号list*p,*q;q=h;p=h-next;printf(请输入待删除的学生学号:\n);scanf(%d,&k);while(p&&p-num!=k){q=p;p=p-next;}if(p){q-next=p-next;free(p);count--;}elseprintf(没有此学生的记录,无法删除!\n);return(h);}list*insert(list*h)//插入函数{list*p,*q,*r,*head;head=h;r=h;p=h-next;//下面构造一个学生的信息q=(list*)malloc(sizeof(list));printf(请输入待插入学生的学号:\n);scanf(%d,&q-num);printf(请输入待插入学生性别:\n);scanf(%s,&q-sex);printf(请输入待插入学生的姓名:\n);scanf(%s,&q-name);printf(请输入待插入的语文成绩:\n);scanf(%d,&q-chinese);printf(请输入待插入的英语成绩:\n);scanf(%d,&q-english);printf(请输入待插入的数学成绩:\n);scanf(%d,&q-math);printf(请输入待插入的计算机成绩:\n);scanf(%d,&q-computer);(q-sum)=(q-chinese)+(q-computer)+(q-math)+(q-english);(q-ave)=(q-sum)/4;q-next=Null;//找到链表的结尾结点count--;while(p!=Null){r=p;p=p-next;}//将新结点插入表尾r-next=q;r=r-next;return(head);}voidmain()//主函数{list*p;/*****************************/p=(list*)malloc(sizeof(list));p-next=Null;/*****************************/intk;//控制循环的标志while(1){printf(---------------------------------------\n);printf(|学生成绩管理系统|\n);printf(---------------------------------------\n);printf(|1.登记成绩|\n);printf(|2.查询成绩|\n);printf(|3.插入成绩|\n);printf(|4.删除成绩|\n);printf(|5.按学号排序|\n);printf(|6.按总成绩排序|\n);printf(|7.输出所有学生成绩|\n);printf(|8.退出系统|\n);printf(---------------------------