德州学院计算机系课程设计报告纸第-1-页共30页目录——学生成绩管理程序题目要求···················2设计目的···················2总体设计···················3详细设计···················3调试与测试·················12源程序···················14总结···················30学生成绩管理程序德州学院计算机系课程设计报告纸第-2-页共30页一.题目要求1.问题描述:对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放.2.要求:(1)一个文件按以班为单位存储学生记录.(2)将允许的操作分为四种,以A,B,C,D,E,F为标志:A:插入一个学生记录;B:修改学生记录;C:删除一个学生记录;D:查找一个学生记录;E:浏览学生成绩:F:退出3.计算学生的总成绩.4.按学号排序输出全班学生成绩表.二.设计目的根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.三.总体设计根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块.德州学院计算机系课程设计报告纸第-3-页共30页学生成绩管理系统数据输入数据显示数据修改数据删除数据查找四.详细设计1.主函数:主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.流程图:显示一系列功能模块N输入n,判断n是否是A--FY根据n的值调用各功能模块函数[程序]://#includehead.hintmenu_select(){charc;printf(\n\n);printf(|1.增加学生记录5.统计信息|\n);printf(|2.查询学生记录6.打开文件|\n);printf(|3.修改学生记录7.保存文件|\n);printf(|4.学生纪录排序8.显示记录|\n);printf(|0.退出系统|\n);printf(\n\n);printf(请选择(0-8):);c=getchar();getchar();return(c-'0');}2.输入模块:德州学院计算机系课程设计报告纸第-4-页共30页[分析]:单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.如果要存放若干学生信息就用结构体数组:voidaddrecord(studentstud[]){inti=0,j,num;charstr[5];if(numstus!=0){printf(已有记录存在是否覆盖?(y/n)\n);gets(str);if(str[0]=='Y'||str[0]=='y')i=0;elsei=numstus;}printf(请输入增加的学生信息条目数:);scanf(%d,&num);if(i==0)numstus=num;elsenumstus+=num;if(numstuslens){lens+=50;pointer=(student*)realloc(pointer,lens*LEN);}printf(请输入学生信息:\n);for(;inumstus;i++){getchar();printf(请输入学号:);gets(pointer[i].number);printf(请输入姓名:);gets(pointer[i].name);printf(请输入性别(男/女1/0):);gets(pointer[i].sex);if(pointer[i].sex[0]=='0')strcpy(pointer[i].sex,女);elsestrcpy(pointer[i].sex,男);printf(请输入各科成绩:(按“语文,数学,英语,历史,政治”的顺序):);德州学院计算机系课程设计报告纸第-5-页共30页stud[i].score=0;for(j=0;jnumsubs;j++){scanf(%f,&stud[i].subject[j]);/*计算总分*/stud[i].score+=stud[i].subject[j];}stud[i].average=stud[i].score/numsubs;/*计算平均分*/}count(stud);/*附名次*/display(stud,0,numstus-1);getchar();}intnumstus;intlens;student*pointer;voidmain(){inti=1;charstr[2];lens=100;pointer=(student*)malloc(lens*LEN);/*分配内存*/numstus=0;welcome();/*欢迎界面*/while(i0){i=menu_select();/*控制菜单*/switch(i){case1:addrecord(pointer);break;/*增加学生信息*/case2:findrecord(pointer);break;/*查询学生信息*/case3:amendrecord(pointer);break;/*修改学生信息*/case4:sort(pointer);break;/*学生信息排序*/case5:statistic(pointer);break;/*统计信息*/case6:openfile(pointer);break;/*打开文件*/case7:writetotext(pointer);break;/*保存文件*/case8:display(pointer,0,numstus-1);break;/*显示记录*/case0:if(numstus!=0)printf(是否保存当前记录?(y/n));gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(pointer);i=-1;break;/*退出系统*/default:printf(请输入数字0~8:\n);i=1;/*输入错误*/}德州学院计算机系课程设计报告纸第-6-页共30页}printf(\t\t欢迎再次使用本系统。\n\n);display1();}3.修改模块:[分析]:用户输入要修改学生的学号,根据学生的学号等信息查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息.[流程图]:输入要修改的学号YNYN[程序]:voidxiugai(){找到?显示记录,调用修改函数提示没有找到继续?返回主菜单德州学院计算机系课程设计报告纸第-7-页共30页if((fp=fopen(s_score.txt,rb+))==NULL||(fp1=fopen(temp.txt,wb+))==NULL)/*检查是否出错*/{printf(Cannotopenthisfile.\n);exit(0);}printf(\nPLeaseshuruxiugaixuehao:);scanf(%d,&i);getchar();while((fread(&data,sizeof(data),1,fp))==1){j=atoi(data.xuehao);if(j==i){printf(xuehao:%s\nmingzi:%s\nnianling:%s\n,data.xuehao,data.mingzi,data.nianling);printf(Pleaseshurumingzi:);gets(data.mingzi);printf(Pleaseshurushuxuescore:);gets(temp);data.score[0]=atof(temp);printf(Pleaseinputyingyuscore:);gets(temp);data.score[1]=atof(temp);printf(Pleaseinputwuliscore:);gets(temp);data.score[2]=atof(temp);data.score[3]=data.score[0]+data.score[1]+data.score[2];}fwrite(&data,sizeof(data),1,fp1);}fseek(fp,0L,0);/*将位置指针移到离头文件0个字节处*/fseek(fp1,0L,0);while((fread(&data,sizeof(data),1,fp1))==1){fwrite(&data,sizeof(data),1,fp);}fclose(fp);fclose(fp1);}4.删除模块:德州学院计算机系课程设计报告纸第-8-页共30页[分析]:该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除.[流程图]:输入要删除的学号YNYN[程序]:voiddeleterecord(studentstu[],inti)/*删除信息*/{intj;while(i=0){for(j=i;jnumstus;j++)stu[j]=stu[j+1];numstus--;printf(删除成功!\n);}}voidcount(studentstud[])找到?显示记录,调用删除函数提示没有找到继续?返回主菜单德州学院计算机系课程设计报告纸第-9-页共30页{inti,j;for(i=0;inumstus;i++){stud[i].index=1;for(j=0;jnumstus;j++)if(stud[j].scorestud[i].score)stud[i].index++;}}5.查找模块:[需求分析]:该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息.[流程图]:YNNY[程序]://#includehead.h输入学生学号是否找到学生记录显示找到的记录提示没有找到询问是否继续返回主菜单德州学院计算机系课程设计报告纸第-10-页共30页intfindrecord(studentstud[])/*查找信息*/{charstr[2];inti,num;if(numstus==0){printf(没有可被查找的记录\n);return-1;}else{printf(以何种方式查找?\n1.学号\t2.姓名\t3.名次\n);gets(str);if(str[0]=='1')/*按学号查找*/{printf(请输入学号:);gets(str);for(i=0;i=numstus;i++)if(strcmp(str,stud[i].number)==0){display(stud,i,i);break;}elsecontinue;}elseif(str[0]=='2')/*按姓名查找*/{printf(请输入姓名:);gets(str);for(i=0;i=numstus;i++)if(strcmp(str,stud[i].name)==0){display(stud,i,i);break;}elsecontinue;}elseif(str[0]=='3')/*按名次查找*/{printf(请输入名次:);scanf(%d,&num);getchar();for(i=0;i=numstus;i++)if(num==stud[i].index)德州学院计算机系课程设计报告纸第-11-页共30页{display(stud,i,i);break;}elsecontinue;}if(inumstus){printf(没有查找所要的信息。\n);return-1;}returni;}}6.显示模块:[需求分析]:该模块的功能是显示所有学生记录信息.[程序]:voidwelcome(){printf(\t***********