机电工程学院中南大学本科生C语言课程设计题目学生成绩管理系统一、课程设计题目:学生成绩管理系统给出n个学生的4门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。
对学生的考试成绩进行有关统计:按某一科分数或平均分数高低次序,列出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。
三、概要设计程序要有的功能:1. 输入学生成绩2. 保存成绩3. 学生成绩排序4. 学生成绩查询5. 学生成绩清单6. 退出管理系统程序运行当中,通过选择对应的功能序号来实现所需功能。
对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“数据不存在”。
再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要继续输入。
在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。
四、设计任务将程序分为六个方面:1. 输入学生成绩、2. 保存成绩、3. 学生成绩排序、4. 学生成绩查询、5. 学生成绩清单、6. 退出管理系统。
每个人负责两个方面的程序,其中侯蒙召负责1、2两个程序,杨天静负责3、4两个,张振陆负责5、6两个,最后交由组长侯蒙召组合整理,形成现在的总的程序。
流程图:四、详细设计源程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>struct Student{char name[20];int no;int math;int program;int english;int chinese;int aver;}stu[100],t;int num=0;int menu(){int a;char s[20];system("cls");/*程序介绍*/printf(" 欢迎使用学生成绩管理系统,该系统包括以下几项功能,请根据提示做相应操作\n");printf(" 1->输入学生成绩\n");printf(" 2->保存成绩\n");printf(" 3->学生成绩排序\n");printf(" 4->学生成绩查询\n");printf(" 5->学生成绩清单\n");printf(" 6->退出管理系统\n");/*选择操作*/printf("\n");printf(" 请选择要进行操作的编号:\n");do{printf("Enter you choice(0~6):");scanf("%s",s);a=atoi(s);}while (a<0 || a>6);return a;}int enter(){int i=0;printf("请输入学生信息\n");printf("NO.:");scanf("%d",&stu[num].no);printf("姓名:");scanf("%10s",stu[num].name);printf("数学:");scanf("%4d",&stu[num].math);printf("程序设计:");scanf("%4d",&stu[num].program);printf("英语:");scanf("%4d",&stu[num].english);printf("语文:");scanf("%4d",&stu[num].chinese);stu[num].aver=(stu[num].math+stu[num].program+stu[num].e nglish+stu[num].chinese)/4;num=num+1;printf("是否继续输入?(y/n):\n");if(getch()=='y'||getch()=='Y')enter();elsereturn(0);}void save(){;int i;if((fp=fopen("stu.dat","wb"))==NULL){printf("The fire can not open\n");return;}for(i=0;i<num;i++)if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1){printf("The wirte error\n");return;}printf("数据保存成功\n");system("pause");fclose(fp);}void sort(){int i, j, k;int sort_no;printf("1--按数学成绩排\n");printf("2--按程序设计成绩排\n");printf("3--按英语成绩排\n");printf("4--按语文成绩排\n");printf("5--按平均分成绩排\n");printf("6--返回主菜单\n");scanf("%d",&sort_no);if(sort_no==1) // 数学成绩排序{for(i=0; i<num-1; i++){k = i;for(j=i+1; j<num; j++)if(stu[j].math>stu[k].math)k=j;{t=stu[k];stu[k]=stu[i];stu[i]=t;}}printf("学号姓名数学程序英语语文平均分\n");for(i=0; i<num; i++){printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}}else if(sort_no == 2) // 程序设计成绩排序{for(i=0; i<num-1; i++){k = i;for(j=i+1; j<num; j++){if(stu[j].program>stu[k].program)k=j;}t=stu[k];stu[k]=stu[i];stu[i]=t;}printf("学号姓名数学程序英语语文平均分\n");for(i=0; i<num; i++){printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}}else if(sort_no == 3) // 英语成绩排序{for(i=0; i<num-1; i++){k = i;for(j=i+1; j<num; j++){if(stu[j].english>stu[k].english)k=j;}t=stu[k];stu[k]=stu[i];stu[i]=t;}printf("学号姓名数学程序英语语文平均分\n");for(i=0; i<num; i++){printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}}else if(sort_no == 4) // 语文绩排序{for(i=0; i<num-1; i++){k = i;for(j=i+1; j<num; j++){if(stu[j].chinese>stu[k].chinese)k=j;}t=stu[k];stu[k]=stu[i];stu[i]=t;}printf("学号姓名数学程序英语语文平均分\n");for(i=0; i<num; i++){printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}}else if(sort_no==5) // 平均分排序{for(i=0; i<num-1; i++){k = i;for(j=i+1; j<num; j++){if(stu[j].aver>stu[k].aver)k=j;}t=stu[k];stu[k]=stu[i];stu[i]=t;}printf("学号姓名数学程序英语语文平均分\n");for(i=0; i<num; i++){printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}}else if(sort_no==6) // 返回上层{return;}else{printf("错误的排序方式!\n");return;}}void list(){int i;printf("学生成绩清单\n");printf("学号姓名数学程序英语语文平均分\n");for(i=0; i<num; i++){printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}}void search(){char NAME[20];int search_no;int no,i;printf(" 请选择以下的方式对学生数据进行查询:\n");printf(" 1->学号查询\n");printf(" 2->姓名查询\n");printf(" 3->返回主菜单\n");printf(" 请选择要进行查询内容的编号:\n");scanf(" %d", &search_no);if(search_no==1){printf(" 请输入要查询的学号\n");scanf("%d", &no);for(i=0; i<num; i++){if(no==stu[i].no){printf("学号姓名数学程序英语语文平均分\n");printf("%4d %5s %5d", stu[i].no, stu[i].name, stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english,stu[i].chinese, stu[i].program, stu[i].aver);}elseprintf("数据不存在");return;}}else if(search_no==2){printf(" 请输入要查询的姓名\n");scanf("%s", NAME);for(i=0; i<num; i++){if(strcmp(NAME,stu[i].name)==0){printf("学号姓名数学程序设计英语语文平均分\n");printf("%4d %5s %5d", stu[i].no, stu[i].name,stu[i].math);printf("%5d %5d %4d %4d\n",stu[i].english, stu[i].chinese, stu[i].program, stu[i].aver);}elseprintf("数据不存在");return;}}elsereturn;}void main(){menu();while(1){switch(menu()){ case 1:{enter();break;}case 2:{save();break;}case 3:{sort();system("pause");break;}case 4:{search();system("pause");break;}case 5:{list();system("pause");break;}case 6:{printf("baibai!\n");exit(0);break;}}}}五、程序使用说明、测试分析及结果程序的主要功能:1->输入学生成绩2->保存成绩3->学生成绩排序4->学生成绩查询5->学生成绩清单6->退出管理系统输入程序对应功能的相应序号,选择相应功能,然后根据提示继续。