学号:C语言课程设计设计说明书学生成绩管理系统起止日期:2016年12月12日至2016年12月23日学生姓名班级成绩指导教师电子信息工程系年月日目录:1、课程设计题目要求………………..32、课程设计应完成的工作…………..33、总体设计要求…………...………....33.1总体功能要求………………….33.2主要模块功能包括…………….44、程序流程图…………………...........55、源代码及注释……………………..56、代码运行效果说明…………...........137、总结……...…..……………………..15一、课程设计题目要求:学生信息包括学号、姓名、3门考试成绩。试设计一学生成绩管理系统,使之能提供以下功能:1、学生成绩录入功能(成绩信息用文件保存,也可不用)2、统计:1)输入学生的学号统计该生的总分及平均分;2)输入课程求该门课程的平均分。3、排序:按学号4、查找:输入一个学生学号,输出其姓名及平均成绩5、修改、删除学生信息(任选一项)调试环境:VC++6.0二、课程设计应完成的工作:(1)编写算法(2)算法测试,并有具体的测试结果和结果分析(3)撰写课程设计报告。内容包括:a.封面扉页b.设计任务书c.目录d.设计总体方案(包括流程图)e.使用说明及运行实例(包括界面)f.源程序代码注释三、总体设计总体功能要求:(1)链表的建立,每个节点包括:学号、姓名、性别、语文、数学、英语、总分。(2)节点的插入,按学号的顺序插入。(3)删除链表中的节点,按学号或者姓名。链表的输出。按学号排序、按总分排序功能模块图、流程图(要求有总体的功能模块图、各部分流程图):主要功能模块包括:1、成绩录入功能2、成绩输出功能3、成绩查询功能4、删除功能5、排序功能6、统计功能四、程序流程图:五、源代码及注释:#includestdio.h#includestdlib.h#includemalloc.h#defineLENsizeof(Student)#defineNULL0typedefstructstudent{intnum;/*学号*/charname[20];/*姓名*/charsex[2];/*性别*/intscore[3];/*成绩*/intsum;/*总成绩*/structstudent*next;}Student;intn;/*声明一个全局变量*/Student*cin(void);Student*sort_1(Student*head,int);/*声明按学号排序函数*/voidsort_2(Student*head);/*声明按总分排序函数*/voidprint(Student*head);/*声明显示函数*/Student*sort_all(Student*head);/*声明排序函数*/voidfind(Student*head);/*声明查询函数*/Student*add_new(Student*head);Student*cin(){intflag;Student*head,*p1,*p2;n=0;head=(Student*)malloc(LEN);p2=head;printf(\n请输入第%d名学生的学号,学号为0表示结束输入:,n+1);scanf(%d,&flag);while(getchar()!='\n');for(;flag;)/*输入每个学生的信息*/{n++;p1=(Student*)malloc(LEN);p1-num=flag;printf(请输入第%d名学生的姓名:,n);/*输入姓名*/scanf(%s,p1-name);printf(请输入第%d学生的性别:,n);/*输入性别*/scanf(%s,p1-sex);printf(请输入第%d名学生的语文成绩:,n);/*输入语文成绩*/scanf(%d,&p1-score[0]);printf(请输入第%d名学生的数学成绩:,n);/*输入数学成绩*/scanf(%d,&p1-score[1]);printf(请输入第%d名学生的英语成绩:,n);/*输入英语成绩*/scanf(%d,&p1-score[2]);p1-sum=p1-score[0]+p1-score[1]+p1-score[2];p2-next=p1;p2=p1;printf(\n请输入第%d名学生的学号,没有此学生则输入0表示结束:,n+1);scanf(%d,&flag);}p2-next=NULL;printf(\n\n);returnhead;}Student*sort_all(Student*head)/*定义排序函数*/{intchoose;for(;;){printf(\n\t\t#####学生成绩统计排序####\n);printf(\t\t#\t1.按学生学号排序\t#\n);printf(\t\t#\t2.按学生总分排序\t#\n);printf(\t\t#\t7.单科高分及均分\t#\n);printf(\t\t#\t8.显示当前学生成绩\t#\n);printf(\t\t#\t0.返回上一级菜单\t#\n);printf(请输入你要执行的操作:);scanf(%d,&choose);while(getchar()!='\n');switch(choose){case1:case2:case3:case4:case5:case6:head=sort_1(head,choose);break;case7:print(head);sort_2(head);break;case8:print(head);break;case0:returnhead;default:printf(\n\n您的输入有误!请重新输入:\n\n);break;}}}Student*sort_1(Student*head,intchoose)/*定义按学号排序函数*/{Student*p1,*p2=head-next,*pm,*px;Studentmid;if(!p2)returnhead;for(p1=p2;p1-next!=NULL;p1=p1-next){pm=p1;for(p2=p1-next;p2!=NULL;p2=p2-next)switch(choose){case1:if(pm-nump2-num)pm=p2;break;case2:if(pm-sump2-sum)pm=p2;break;case3:if(pm-score[0]p2-score[0])pm=p2;break;case4:if(pm-score[1]p2-score[1])pm=p2;break;case5:if(pm-score[2]p2-score[2])pm=p2;break;}if(pm!=p1){mid=*pm;*pm=*p1;*p1=mid;px=pm-next;pm-next=p1-next;p1-next=px;}}printf(\n排序后的成绩表为:\n);print(head);returnhead;}voidsort_2(Student*head)/*定义按总分排序函数*/{Student*p=head-next;intmax_1,max_2,max_3,min_1,min_2,min_3;intmax_sum,min_sum;intsum_1=0,sum_2=0,sum_3=0;floataver_1,aver_2,aver_3,aver_sum;if(!p)return;max_1=min_1=p-score[0];max_2=min_2=p-score[1];max_3=min_3=p-score[2];max_sum=min_sum=p-sum;for(;p;p=p-next){if(max_1p-score[0])max_1=p-score[0];elseif(min_1p-score[0])min_1=p-score[0];if(max_2p-score[1])max_2=p-score[1];elseif(min_2p-score[1])min_2=p-score[1];if(max_3p-score[2])max_3=p-score[2];elseif(min_3p-score[2])min_3=p-score[2];if(max_sump-sum)max_sum=p-sum;elseif(min_sump-sum)min_sum=p-sum;sum_1+=p-score[0];sum_2+=p-score[1];sum_3+=p-score[2];}aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_sum=aver_1+aver_2+aver_3;printf(总共%d名学生,具体数据为:\n,n);printf(总分最高分为%d,最低分位%d,平均分为%.2f\n,max_sum,min_sum,aver_sum);}voidfind(Student*head)/*定义查询函数*/{Student*p;intchoose,fnum;chartem[20];if(n==0){printf(\n当前系统没有任何学生数据!\n);return;}for(;;){printf(\n请输入您要查询学生的方式:\n\n);printf(1、按学号查询;2、按姓名查询;0、我不查询了。\n\n);printf(请选择:);scanf(%d,&choose);while(getchar()!='\n');if(choose==1){printf(\n请输入你要查询的学生的学号,输入0退出学号查询:);scanf(%d,&fnum);for(;fnum;){for(p=head-next;p!=NULL&&p-num!=fnum;p=p-next);if(!p){printf(\n\n找不到你要查询的学号,请重新输入,输入0表示结束:);scanf(%d,&fnum);}elseif(p-num==fnum){printf(\n学号为%d学生的数据为:\n,p-num);printf(学号\t姓名\t性别\t语文成绩数学成绩英语成绩总分\n);/*输出所有的学生信息*/printf(%d\t%s\t%s\t%d%d%d%d\n,p-num,p-name,p-sex,p-score[0],p-score[1],p-score[2],p-sum);printf(\n\n请输入你还要查询的学生的学号,输入0表示不按学号查询了:);scanf(%d,&fnum);}}}elseif(choose==2){printf(\n请输入你要查询的学生的姓名,输入0退出姓名查询:);scanf(%s,tem);for(;strcmp(tem,0);){for(p=head-next;p!=NULL&&strcmp(p-name,tem);p=p-next);if(!p){printf(\n\n找不到你要查询的姓名,请重新输入,输入0表示结束:);scanf(%s,tem);}elseif(!strcmp(p-name,tem)){printf(\n姓名为%s学生的数据为:\n,p-name);printf(学号\t姓名\t性别\t语文成绩数学成绩英语成绩总分\n);printf(%d\t%s\t%s\t%d%d%d%d\n,p-num,p-name,p-sex,p-score[0],p-score[1],p-score[2],p-sum);printf(\n\n请输入你还要查询的学生的姓名,输入0表示不按姓名查询了:);scanf(%s,tem);}}}elseif(choose==0){