C语言学生成绩管理系统设计说明书_第1页
C语言学生成绩管理系统设计说明书_第2页
C语言学生成绩管理系统设计说明书_第3页
C语言学生成绩管理系统设计说明书_第4页
C语言学生成绩管理系统设计说明书_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.../XX航空航天大学课程设计报告大作业名称:C语言课程设计大作业题目:学生成绩管理系统设计院〔系:计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:完成日期:2016年12月24日...目录TOC\o"1-3"\h\z第1章概要设计11.1题目的内容与要求11.2总体结构1第2章详细设计22.1主模块22.2输入模块32.3显示模块32.4修改模块42.5删除模块42.6查询模块52.7统计模块6第3章调试分析7第4章使用说明8参考文献12附录〔程序清单10...第1章概要设计1.1题目的内容与要求内容:学生成绩信息包括:姓名、学号、语文、数学、英语。实现的主要功能有:1信息维护。包括学生成绩的输入、按学号删除、按学号修改等。2>信息查询。输入学号或姓名,显示出该生三个科目的成绩,计算出三科总分并显示,按总分将所有学生成绩排序,显示出该生的名次。3成绩统计。先输入任意一个科目,接着选择a或b来分别显示平均分或统计分数段学生,若选择a,则直接显示出该科目的平均分;若选择b,则提示用户输入一个分数段,显示所有该科目属于该分数段内的学生信息,并给出学生总数。要求:1系统以菜单方式工作。在不同的界面为用户给出具体提示。2系统利用C语言实现,源程序要有适当的注释。3采用VC环境进行运行调试。1.2总体结构本程序主要分为七个模块〔功能模块图见图1.1:结构体模块,输入模块,显示模块,修改模块,删除模块,查询模块,统计模块。结构体模块:建立一个结构体模块,为链表存信息用。输入模块:键盘输入每个学生的信息,并保存在文件中。显示模块:显示全部学生的具体信息。修改模块:修改某个学生的成绩信息。删除模块:删除某个学生的全部信息。查询模块:查询某个学生的具体信息。统计模块:通过功能选择,统计并显示某一科目的平均分或某分数段学生的具体信息。学生成绩管理系统学生成绩管理系统输入模块修改模块统计模块查询模块删除模块显示模块主模块输入模块修改模块统计模块查询模块删除模块显示模块主模块图1.1功能模块图第2章详细设计2.1主模块开始控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。开始显示主菜单显示主菜单选0退出Y选0退出选1-6NN选1-6执行具体功能Y执行具体功能显示结果显示结果结束结束图2.1主模块流程图注释:显示主菜单;选择不同序号执行不同功能;2.2输入模块input<>输入所有学生信息并保存,流程如图2.2所示。input<>printf<"输入学号:">;printf<"输入学号:">;printf<"输入姓名:">;printf<"输入姓名:">;printf<"第%d门成绩的分数:",j+1>;printf<"第%d门成绩的分数:",j+1>;计算总分、平均分计算总分、平均分printf<"\n\n信息保存成功!恭喜!!\n\n">;printf<"\n\n信息保存成功!恭喜!!\n\n">;结束结束图2.2输入模块流程图注释:循环输入每个学生的信息;保存所有信息2.3显示模块Print<>显示所有学生的具体信息,流程图如2.3所示。Print<>显示信息显示信息结束图2.3显示模块流程图结束注释:选择号好功能;显示全部学生的具体信息。2.4修改模块xiugai<>修改某个学生各个科目的成绩,流程图如2.4所示。xiugai<>printf<"\n请输入要修改的同学的学号:">;printf<"\n请输入要修改的同学的学号:">;结束是否继续修改?printf<"\n修改成功!恭喜!!\n">;printf<"\n请输入要修改学生修改后的的信息\n">;结束是否继续修改?printf<"\n修改成功!恭喜!!\n">;printf<"\n请输入要修改学生修改后的的信息\n">;YN图2.4修改模块流程图注释:输入要修改学生的学号;输入要修改的科目信息;修改成功,是否要继续修改。是,继续;否,回到主菜单。2.5删除模块按学号删除某学生的全部信息,流程图如图2.5所示。...printf<"\n请输入要删除的同学的学号:">;shanchu<>printf<"\n请输入要删除的同学的学号:">;shanchu<>是否删除?printf<"\n该同学信息如下:\n">;Y是否删除?printf<"\n该同学信息如下:\n">;是否继续删除?Yprintf<"\n删除成功!恭喜!!\n">;N是否继续删除?Yprintf<"\n删除成功!恭喜!!\n">;结束N结束图2.5删除模块流程图注释:输入要删除的学生的学号;显示该生信息,是否删除。是,删除;否,是否继续操作。是否继续删除。是,重复上述操作;否,退出回到主菜单。2.6查询模块chaxun<>输入要查询学生的学号,显示该生具体信息,流程图如图2.6所示。chaxun<>printf<"\n请输入学生学号:">;printf<"\n请输入学生学号:">;显示该生具体信息是否继续查询?结束显示该生具体信息是否继续查询?结束 Y N 图2.6查询模块流程图注释:输入要查询的学生的学号;显示该生的具体信息;是否继续查询。是,继续查询下一位;否,回到主菜单。2.7统计模块tongji〔通过选择不同功能,显示某个科目的平均分或某分数段学生的具体信息,流程图如图2.7所示。tongji〔结束是否继续查询其他科目?显示属于该分数段的学生;学生总数printf<"\n\n该科目的平均成绩为:%.2f\n",ave>;计算该科目平均分printf<"\n请输入分数段:__空格__\n">;printf<"\n输入一个科目:">;结束是否继续查询其他科目?显示属于该分数段的学生;学生总数printf<"\n\n该科目的平均成绩为:%.2f\n",ave>;计算该科目平均分printf<"\n请输入分数段:__空格__\n">;printf<"\n输入一个科目:">;选择功能a或b case‘a’: case‘b’:选择功能a或b YN图2.7统计模块流程图注释:通过菜单选择科目;通过菜单选择a或b功能,分别显示该科目平均分或某分数段学生信息;3.是否继续查询?是,继续;否,回到主菜单。第3章调试分析在这次课程设计中,程序编写的过程中遇到了很多问题,主要是函数实现方面问题较多。问题1:查询函数chaxun<>中,会造成数据混乱,原因是for循环中某行代码运用错误,如下:for<i=0;i<n;i++> {if<stu[i].num==x>{k=i;/*找到要查询的同学学号,并用k记下其下标*/} OutputOneStudent<k>;}将OutputOneStudent<k>;拿出后,查询功能正常实现。正确编写如下:for<i=0;i<n;i++> {if<stu[i].num==x>{k=i;/*找到要查询的同学学号,并用k记下其下标*/} } OutputOneStudent<k>;问题2:统计函数tongji〔,功能实现完后不能回到主菜单。解决方法是,把功能函数gongneng〔其中的while循环删掉。使用说明运行截图如下:1.输入成绩2.信息显示3.修改信息4.删除信息5.查询信息6.1统计信息科目平均分6.2统计信息科目某分数段学生信息7.退出系统参考文献王敬华,《C语言程序设计教程〔第二版》,清华大学出版社,20XX8月谭浩强,《C语言程序设计教程〔第二版》,清华大学出版社,1999年12月谭浩强,《C语言程序设计题解与上机指导》,清华大学出版社,20XX11月田淑清,《C语言程序设计辅导与习题集》,中国铁道出版社,20XX1月张荣梅、梁晓林,《VisualC++实用教程》,冶金工业出版社,20XX附录〔程序清单程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#defineN3structstudent{ intnum;//学号 charname[20];//姓名 floatscore[3];//三门课成绩 floatsum;//总分 floataver;//平均分}stu[N];voidmenu<>;//主菜单功能voidinput<>;//输入信息到结构体中voidsave<intx>;//保存stud.dat文件函数voidprint<>;//输出显示所有学生信息voidSaveAllStudent<intn>;//保存全部学生信息voidxiugai<intn>;//按学号修改成绩intshanchu<intn>;//按学号删除voidOutputOneStudent<inti>;//查询一个学生的信息voidchaxun<intn>;//按学号查询成绩voidtongji<>;//统计科目信息voidgongneng<intx>;//a或b功能分别显示科目平均分或分数段学生信息intmain<>{printf<"***********************************************************\n">;printf<"**\n">;printf<"*Hwadee&学生成绩管理系统&Hwadee*\n">;printf<"**\n">;printf<"******************************************************\n\n\n">;printf<"****************●●欢迎使用●●*******************\n">; while<1> { menu<>; } return0;}/*主菜单***********************************************************/voidmenu<>{ intchoice;intn=N;printf<"\n请选择功能:\n">; printf<"\n1:输入成绩\n2:显示信息\n3:修改成绩\n4:删除信息\n5:查询成绩\n6:成绩统计\n0:退出系统\n\n">; printf<"\n请选择序号:\n">; scanf<"%d",&choice>; switch<choice> { case1: input<>; save<N>; break; case2: print<>; break; case3: xiugai<n>; break; case4: shanchu<n>; break; case5: chaxun<n>; break; case6: tongji<>; break; case0: printf<"\n谢谢使用,再见!\n\n">; exit<-1>; break; default: printf<"输入错误!\n">; break; }}/*写入函数****************************************************/voidinput<>{ inti,j; printf<"\n输入信息\n">; for<i=0;i<N;i++> { printf<"输入学号:">; scanf<"%d",&stu[i].num>; printf<"输入姓名:">; scanf<"%s",&stu[i].name>; for<j=0;j<N;j++> { printf<"第%d门成绩的分数:",j+1>; scanf<"%f",&stu[i].score[j]>; } stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; stu[i].aver=stu[i].sum/3; printf<"\n">; }}/*写入文件***********************************************************/voidsave<intx>{FILE*fp;/*定义文件指针用于向文件读入数据*/inti;if<<fp=fopen<"student.dat","rb+">>==NULL>/*以二进制读,写方式打开文件*/{printf<"cannotopenfile\n">;exit<1>;}for<i=0;i<N;i++> {if<fwrite<&stu[i],sizeof<structstudent>,1,fp>!=1> {printf<"filewriteerror\n">; } }fclose<fp>;printf<"\n\n信息保存成功!恭喜!!\n\n">;}/*显示全部学生信息**************************************************/voidprint<>{ inti; printf<"学号姓名语文数学英语总分平均分\n">; for<i=0;i<N;i++> printf<"%d%s%.2f%.2f%.2f%.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].aver>;}/*保存全部学生信息******************************************8*/voidSaveAllStudent<intn>{FILE*fp;if<<fp=fopen<"student.dat","wb">>==NULL>{printf<"文件打开失败!\n">;exit<1>;}fwrite<stu,sizeof<structstudent>,n,fp>;fclose<fp>;}/*修改学生信息************************************************/voidxiugai<intn>{structstudenttemp; intk=-1,x,i;charc1='y';while<c1=='y'>{printf<"\n请输入要修改的同学的学号:">;scanf<"%d",&x>;for<i=0;i<n;i++> {if<x==stu[i].num>{k=i;/*找到要修改的同学学号,并用k记下其下标*/break;} }if<k<0> {printf<"\n输入学号有误,请重新输入!">; }else{printf<"\n请输入要修改学生修改后的的信息\n">;printf<"语文〔空格数学〔空格英语\t\n">;scanf<"%f%f%f",&temp.score[0],&temp.score[1],&temp.score[2]>;temp.sum=<temp.score[0]+temp.score[1]+temp.score[2]>;temp.aver=<temp.score[0]+temp.score[1]+temp.score[2]>/3; stu[k].score[0]=temp.score[0];/*修改该学生信息*/stu[k].score[1]=temp.score[1];stu[k].score[2]=temp.score[2]; stu[k].sum=temp.sum; stu[k].aver=temp.aver; printf<"\n修改成功!恭喜!!\n">;break;}SaveAllStudent<k>;printf<"\n继续修改操作吗?">;printf<"\n继续修改请按y;不进行修改请按n\n">; getchar<>;c1=getchar<>;}printf<"\n按任意键继续!\n">;getchar<>;}/*删除学生信息*************************************************/intshanchu<intn>{inti,k=-1,x;charc1='y',c2;while<c1=='y'>{c2='n';printf<"\n请输入要删除的同学的学号:">;scanf<"%d",&x>;for<i=0;i<n;i++> {if<x==stu[i].num>{k=i;/*找到要删除的同学学号,并用k记下其下标*/break;} }if<k<0> {printf<"\n输入学号有误,请重新输入!">; }else{printf<"\n该同学信息如下:\n">;OutputOneStudent<k>;printf<"\n\n确定删除?\n">;printf<"确定进行删除请按y;不进行删除请按n\n">; getchar<>; c2=getchar<>;if<c2=='y'>{for<i=k;i<n;i++> {stu[i]=stu[i+1]; } n--;/*学生人数减1*/printf<"\n删除成功!恭喜!!\n">;}elseprintf<"\n取消删除!\n">;printf<"\n继续删除操作吗?">;printf<"\n继续删除请按y;不进行删除请按n\n">; getchar<>; c1=getchar<>;}}save<n>;printf<"\n按任意键继续!\n">;getchar<>;return<n>;}/*查询一个学生信息********************************************/voidOutputOneStudent<inti>{printf<"学号:%d姓名:%s\n",stu[i].num,stu[i].name>;printf<"语文:%.1f数学:%.1f英语:%.1f总分:%.1f平均分:%.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].aver>;}/*按学号查询学生信息**************************************/voidchaxun<intn>{inti,j,k,x;charc='y';while<c=='y'>{k=-1;printf<"\n请输入学生学号:">;scanf<"%d",&x>; if<x>3||x<1> { break; }for<i=0;i<n;i++> {if<stu[i].num==x>{k=i;/*找到要查询的同学学号,并用k记下其下标*/} } OutputOneStudent<k>;stu[x-1].num=1;//该生排名 for<j=0;j<3;j++> { if<stu[j].sum>stu[x-1].sum> stu[x-1].num++; } printf<"\n该生排名为第%d名。\n",stu[x-1].num>;printf<"\n\n继续查询其他学生信息吗?">;printf<"\n继续查询请按y;不进行查询请按n\n">; getchar<>;c=getchar<>;}printf<"\n按任意键继续!\n">;getchar<>;}/*学生信息统计操作**********************************************/voidtongji<>{ charc='y';while<c=='y'> { intx; printf<"\n输入一个科目:">;printf<"\n\n1:语文\n2:数学\n3:英语\n0:退出">; printf<"\n\n请选择序号:">; scanf<"%d",&x>; if<x>0&&x<6> { switch<x> { case1: gongneng<x>; break; case2: gongneng<x>; break; case3: gongneng<x>; break; case0: exit<-1>; break; default: printf<"输入错误!\n">; } }printf<"\n\n继续查询其他科目信息吗?">;printf<"\n继续查询请按y;不进行查询请按n\n">; getchar<>;c=getchar<>; }}/*选择a或b来分别显示该科平均分或统计分数段学生****************/voidgongneng<intx>{ printf<"\n\n请选择功能:\

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论