1 / 29
文档名称:

课程设计报告-学生成绩管理系统.pdf

格式:pdf   大小:2,152KB   页数:29页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

课程设计报告-学生成绩管理系统.pdf

上传人:青山代下 2024/5/13 文件大小:2.10 MB

下载得到文件列表

课程设计报告-学生成绩管理系统.pdf

相关文档

文档介绍

文档介绍:该【课程设计报告-学生成绩管理系统 】是由【青山代下】上传分享,文档一共【29】页,该文档可以免费在线阅读,需要了解更多关于【课程设计报告-学生成绩管理系统 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..课程设计报告课题名称:学生成绩管理管理**:田宇班级:通信1412**:8指导教师:.:..(1)录入每个学生的**、**和各科考试成绩1(2)计算每门课程的总分和平均分1(3)计算每个学生的总分和平均分1(4)按每个学生的总分由高到低排出名次表1(5)按每个学生的总分由低到高排出名次表1(6)按**由小到大排出成绩表1(7)按**的字典顺序排出成绩表1(8)按**查询学生排名及其考试成绩1(9)按**查询学生排名及其考试成绩1(10)按优秀(90-100)、良好(89-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比1(11)输出每个学生的**、**、各科考试成绩,以及每门课程的总分和平均分1(12)将每个学生的记录信息写入文件1(13).:..**、**和各科考试成绩8计算总分和平均分9计算每门课程的总分和平均分测试9计算每个学生的总分和平均分测试9学生成绩排名10按每个学生总分由高到低排名10按每个学生总分由低到高排名10按**由大到小排名10按**.:..**查询学生排名及其考试成绩测试11按**查询学生排名及其考试成绩测试11学生成绩统计11各等级学生的百分比11学生信息的输入输出11输出每个学生的**、**、各科考试成绩,.:..*班有最多不超过30人(具体人数键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。学生成绩管理系统是一个非常实用的程序,如果能够把用户输入的数据存盘,下次运行时读出,就更有用了。编程实现如下菜单驱动的学生成绩管理系统(1)录入每个学生的**、**和各科考试成绩(2)计算每门课程的总分和平均分(3)计算每个学生的总分和平均分(4)按每个学生的总分由高到低排出名次表(5)按每个学生的总分由低到高排出名次表(6)按**由小到大排出成绩表(7)按**的字典顺序排出成绩表(8)按**查询学生排名及其考试成绩(9)按**查询学生排名及其考试成绩(10)按优秀(90-100)、良好(89-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比(11)输出每个学生的**、**、各科考试成绩,以及每门课程的总分和平均分(12)将每个学生的记录信息写入文件(13),.:..再运用文件存储数据便于以后查询,对于数据查询,则同样需要运用循环语句将要查询的**或**与已储存的信息进行对比,直至找到要查询的信息。.:..1系统功能模块图录入每个学生的**、**和各科考试成绩计算排名查询统计输入输出按按对输从每每每以出文按按将计计个个门及每件按****每算算学学按课每个中**查查个每每生生**及程门学读的询询学门个的的由所分课生出字学学生课学总总小占别程的每典生生的程生分分到的统的**示个顺排排记的的由由大百计总、学序名名**录总总高低排分每分生排及及、信分分到到出比个和的出其其各息和和低高成类平记成考考科写平平排排绩别均录绩试试考入均均出出表的分信表成成试文分分名名人息绩绩成件次次数并绩表表以显,.:..,由C语言数据体表示{charname[NUM_N];//**intscore[SCORE_N];//学生成绩(物理数学英语)floataverstudent;//平均成绩}STUDENT;,程序处理主函数以外,共设计了13个函数,函数的原型及功能说明如表所示序号函数原型功能说明1intInput()输入学生信息2voidPrint()输出学生信息3voidSum()计算学生总成绩4voidAverage()计算学生平均成绩5voidHigh()按每个学生的总分由高到低排出名次表6voidDown()按每个学生的总分由低到高排出名次表7voidScore()将学生成绩由小到大排序8voidSortString()按**的字典顺序排出成绩表9intRefernum()按**查询学生排名及其考试成绩10intRefername()按**查询学生排名及其考试成绩对每门课程分别统计每个类别的人数以及所占的百11voidCount()分比12voidWritetofile()将每个学生的记录信息写入文件13voidReadfromfile(),为保证程序有效性,先选择1项录入学生各项信息,再进入其他功能选择。.:..,以及函数声明、数据结构定义、数据存储二进制文件共两个,程序文件清单如表所示。*,.:..学生成绩排名按每个学生的总分由高到低排出名次表进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。再应用比较语句进行比较总分大小,按照从高到低进行输出显示N是否有学生信息Y输入成绩应用do,for语句循环和按每个学生的总分由低到高排出名次表if语句比较总分高低进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。再应用比较语句进行比较总分大小,按照从低到高进行按总分由高到低输出显示输出结果开始N是否有学生信息结束Y输入成绩应用do,for语句循环和按**由小到大排出名次表if语句比较总分高低进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。再应用比较语句进行比较**大小,按照**:..N是否有学生信息Y输入成绩应用do,for语句循环和按**的在字典顺序排出成绩表if语句比较**大小进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。再应用比较语句进行比较**在字典顺序,按照**在字典按**由小到大输顺序进行输出显示出结果开始N是否有学生信息结束Y输入成绩应用for循环语句和if语句比较**,用switch语句进行各项等级累加,在将各项累加的按照**在字典顺数量处于总人数算出百分比,:..,可以有多项选择,选择录入学生信息后进行其他从菜单功能的选择进行该项功能。进行完此项功能后有选择是否继续的功能,可以进行选择继续返回主菜单在进行其他功能的选择。,选择想要执行的功能图输入学生信息录入每个学生的**、**和各科考试成绩先选择1进入录入信息界面,再按要求输入总人数,然后根据弹出的格式依次输入学生信息,按回车结束输入后可选择是否继续进行其他功能。.:..计算每门课程的总分和平均分测试输入成绩后,在菜单界面选择计算成绩功能进入二级菜单,选择计算每门课程的总分和平均分,则功能完成,然后可选择是否继续实现其他功能。图计算每个学生的总分和平均分测试输入成绩后,在菜单界面选择计算成绩功能进入二级菜单,选择计算每个学生的总分和平均分,则功能完成,然后可选择是否继续实现其他功能。.:..按每个学生总分由高到低排名先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续图按每个学生总分由低到高排名先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续图按**由大到小排名先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续图按**的在字典顺序排名先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,.:..按**查询学生排名及其考试成绩测试输入成绩后,在菜单界面选择查询功能进入二级菜单,选择按**查询学生排名及其考试成绩,输入要查询的**,则功能完成,然后可选择是否继续实现其他功能。图按**查询学生排名及其考试成绩测试输入成绩后,在菜单界面选择查询功能进入二级菜单,选择按**查询学生排名及其考试成绩,输入要查询的**,则功能完成,然后可选择是否继续实现其他功能。图学生成绩统计各等级学生的百分比先输入学生信息,在一级菜单选择统计进入该功能,可以选择是否继续图学生信息的输入输出输出每个学生的**、**、各科考试成绩,以及每门课程的总分和平均分测试输入学生个人信息后,进入菜单选择界面,选择菜单代码1,则完成此功能。.:..,进入菜单选择界面,选择菜单代码2,则完成此功能。选择是否继续,进行其他操作。图从文件中读出每个学生的记录信息并显示测试输入学生个人信息后,进入菜单选择界面,选择菜单代码3,则完成此功能。选择是否继续,进行其他操作。图5课程设计遇到的问题及解决方法(1)在建立二级菜单是定义错误问题内容:在switch选择语句中定义变量,导致程序出错;问题分析:switch选择语句中不能定义变量;解决方法:重新定义变量在switch选择语句前,同时修改二级菜单选择的变量与一级菜单选择的变量不同。(2)输出统计成绩百分比时错误问题内容:将第一门成绩输出错误,而后面课程的成绩百分比变为前一门成绩的百分比问题分析:学生成绩与**的混淆,系统错将**为学生成绩;.z.:..j=0改为j=1,输出的j<3改为j<4。6课程设计总结在结束了一个学年的C语言学****后,在下学期结束后我们迎来了为期一周的C语言程序设计的实训,尝试去编辑一个比以前复杂而且较长的程序。在和同学讨论、分工合作,终于做出了这个让我们满意的成果。短短的一个星期的设计让我有了和以前的不一样的感受。以前做的程序短小而且内容少,就一两个知识点。而这次的程序整整结合一个学年所学到知识,要在其中选择最好最方便的方法。通过C语言实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。不过,通过几天的实训,逐渐积攒了一些经验,有些错误可以很快就看出来。对于这次的实训,我有很大的收获,对于C语言有了更深度的了解,平时在课堂上学****的理论知识可以转化为一些实际的技能。但一个程序出错时,会去仔细的观察,思考,找出程序的错误点并修改;但程序成功运行时会有一种自豪感。通过短短的几天,我认识到了我以前学****的不足之处,处在的问题,在老师和同学的帮助下去改正。我相信这将是我学****C语言中的一个里程碑,它将促进我以后的学****陶恂,,.:..*include<>*include<>*include<>*defineNUM_N30*defineN100*defineSCORE_N7*defineCOURSE_N6typedefstructstudent/*声明一个结构体模板STUDENT*/{charname[NUM_N];intscore[SCORE_N];floataverstudent;}STUDENT;intInput(STUDENTstu[],intn);/*函数原型声明*/intRefernum(STUDENTstu[],intn);intRefername(STUDENTstu[],intn);voidPrint(STUDENTstu[],intn);voidHigh(STUDENTstu[],STUDENTb[],intn);voidDown(STUDENTstu[],STUDENTb[],intn);voidScore(STUDENTstu[],STUDENTb[],intn);voidSortString(STUDENTstu[],STUDENTb[],intn);voidSum(STUDENTstu[],intn,intcoursesum[]);voidCount(STUDENTstu[],intn);voidPrintf(STUDENTstu[],intn,floatavercourse[],intcoursesum[]);voidAverage(STUDENTstu[],intn,floatavercourse[],intcoursesum[]);voidWritetofile(STUDENTstu[],FILE*fp,intn);voidReadfromfile(FILE*fp,intn);voidmain(){intcoursesum[COURSE_N]={0},count[NUM_N][COURSE_N]={0};floatavercourse[NUM_N];inti,j,p,n,op,r=0,m;charanswer='Y';FILE*fp;STUDENTstu[NUM_N];STUDENTb[NUM_N];menu:;.z.:..*欢迎使用学生成绩管理系统欢迎使用如下菜单录入每个学生的**、**、各科考试成绩计算成绩排名查询统计输入输出退出choose:;请输入你的选择if(op!=1&&op!=13&&r==0){请先输入**、**、各科成绩r++;gotochoose;}else{r++;gotostart;}do{answer='N';请输入你的选择start:;switch(op){case1:n=Input(stu,n);break;/*调用Input函数*/case2:计算每门课程的总分和平均分计算每个学生的总分和平均分请输入你的选择switch(m){case1:计算每门课程的总分和平均分/*调用Sum和Average函数*/Sum(stu,n,coursesum);.z.:..for(i=0;i<3;i++)课程[%d]总分Average(stu,n,avercourse,coursesum);for(i=0;i<3;i++)课程[%d]平均分break;case2:计算每个学生的总分和平均分/*调用Sum和Average函数*/Sum(stu,n,coursesum);for(i=0;i<n;i++)学生%d总分Average(stu,n,avercourse,coursesum);for(i=0;i<n;i++)学生%d平均分break;}break;case3:按每个学生的总分由高到低排出名次表按每个学生的总分由低到高排出名次表按**由小到大排出成绩表按**的字典顺序排出成绩表请输入你的选择switch(m){case1:按每个学生的总分由高到低排出名次表/*调用Sum、High函数*/Sum(stu,n,coursesum);High(stu,b,n);Print(stu,n);break;case2:按每个学生的总分由低到高排出名次表/*调用Sum、Down函数*/Sum(stu,n,coursesum);Down(stu,b,n);Print(stu,n);break;case3:按**由小到大排出成绩表/*调用Score函数*/Score(stu,b,n);Print(stu,n);.z.:..break;case4:按**的字典顺序排出成绩表/*调用Sum、SortString函数*/Sum(stu,n,coursesum);SortString(stu,b,n);物理数学英语总分for(i=0;i<n;i++){puts(stu[i].name);for(j=0;j<5;j++){}}break;}break;case4:按**查询学生排名及其考试成绩按**查询学生排名及其考试成绩请输入你的选择switch(m){case1:Sum(stu,n,coursesum);/*调用Sum、High和Refernum函数*/High(stu,b,n);按**查询学生排名及其考试成绩i=Refernum(stu,n);if(i!=-1){物理数学英语总分名次for(j=0;j<5;j++)}查无此人break;case2:按**查询学生排名及其考试成绩/*调用Sum、High和Refername函数*/Sum(stu,n,coursesum);High(stu,b,n);.z.:..i=Refername(stu,n);if(i!=-1){物理数学英语总分名次for(j=0;j<5;j++)}查无此人break;}break;case5:按优秀、良好、中等、及格、不及格对每门课程分别统计人数及其所占百分比/*调用Count函数*/Count(stu,n);break;case6:输出每个学生的**、**、各科考试成绩,每门课程的总分和平均分将每个学生的记录信息写入文件文件中读出每个学生的记录信息并显示请输入你的选择switch(m){case1:输出每个学生的**、**、各科考试成绩,每门课程的总分和平均分/*调用Sum、Average函数*/Sum(stu,n,coursesum);Average(stu,n,avercourse,coursesum);Printf(stu,n,avercourse,coursesum);break;case2:将每个学生的记录信息写入文件/*调用Sum、Average和Writeotfile函数*/Sum(stu,n,coursesum);Average(stu,n,avercourse,coursesum);Writetofile(stu,fp,n);break;case3:文件中读出每个学生的记录信息并显示/*调用Readfromeile函数*/Readfromfile(fp,n);break;.z.:..}break;case0:if(op==0)gotoend;break;}您还需要继续吗(回答Y或N)if(answer=='N')gotoend;elsegotomenu;}while(op!=0);end:;感谢您的使用,下次再见!}intInput(STUDENTstu[],intn)/*输入函数*/{inti;总人数while(n>30){人数应小于总人数}物理数学英语for(i=0;i<n;i++){core[3]);}return(n);}voidPrint(STUDENTstu[],intn)/*输出函数*/{inti,j;物理数学英语总分for(i=0;i<n;i++){for(j=0;j<5;j++){.z.:..}}}voidSum(STUDENTstu[],intn,intcoursesum[])/*计算成绩总和*/{inti,j;for(j=1;j<4;j++)/*计算每门课程成绩总和*/{coursesum[j-1]=0;for(i=0;i<n;i++){coursesum[j-1]=coursesum[j-1]+stu[i].score[j];}}for(i=0;i<n;i++)/*计算每个学生成绩总和*/{stu[i].score[4]=0;for(j=1;j<4;j++){stu[i].score[4]=stu[i].score[4]+stu[i].score[j];}}}voidAverage(STUDENTstu[],intn,floatavercourse[],intcoursesum[])/*计算平均分数*/{inti;for(i=0;i<3;i++){avercourse[i]=(float)coursesum[i]/n;/*计算每门课程平均分*//*强制类型转换*/stu[i].averstudent=(float)stu[i].score[4]/3;/*计算每个学生平均分*//*强制类型转换*/}}voidHigh(STUDENTstu[],STUDENTb[],intn)/*按总分由高到低排列*/{inti,s=0;do{for(i=0;i<n-1;i++){if(stu[i].score[4]<stu[i+1].score[4]){b[i]=stu[i];stu[i]=stu[i+1];stu[i+1]=b[i];.z.:..}}s++;}while(s<n);}voidDown(STUDENTstu[],STUDENTb[],intn)/*按学生成绩由低到高排列*/{inti,s=0;do{for(i=0;i<n-1;i++){if(stu[i].score[4]>stu[i+1].score[4]){b[i]=stu[i];stu[i]=stu[i+1];stu[i+1]=b[i];}}s++;}while(s<n);}voidScore(STUDENTstu[],STUDENTb[],intn)/*按**由小到大排列*/{inti,s=0;do{for(i=0;i<n-1;i++){if(stu[i].score[0]>stu[i+1].score[0]){b[i]=stu[i];stu[i]=stu[i+1];stu[i+1]=b[i];}}s++;}while(s<n);}voidSortString(STUDENTstu[],STUDENTb[],intn)/*按**的字典顺序排出成绩表*/{inti,j;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){.z.:..if(strcmp(stu[j].name,stu[i].name)<0){b[i]=stu[i];stu[i]=stu[i+1];stu[i+1]=b[i];}}}}intRefernum(STUDENTstu[],intn)/*按**查询学生排名及其各科考试成绩*/{inti=0,t,num1;请输入所要查询的**:do{if(i<=n){if(stu[i].score[0]==num1){returni;t=1;}elset=0;i++;}else{t=1;return-1;}}while(t==0);}intRefername(STUDENTstu[],intn)/*按**查询学生排名及其各科考试成绩*/{inti=0,j,t;charprt[NUM_N];请输入需要查找的gets(prt);do{if(i<=n){if(strcmp(stu[i].name,prt)==0){returni;.z.:..t=1;}elset=0;i++;}else{t=1;return-1;}}while(t==0);}voidCount(STUDENTstu[],intn)/*按优秀、良好、中等、及格、不及格对每门课程分别统计人数及其所占百分比*/{inti,j,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,grade;doublen1,n2,n3,n4,n5;for(j=1;j<4;j++){for(i=0;i<n;i++){grade=stu[i].score[j]/10;switch(grade){case10:case9:sum1=sum1+1;break;case8:sum2=sum2+1;break;case7:sum3=sum3+1;break;case6:sum4=sum4+1;break;case5:case4:case3:case2:case1:case0:sum5=sum5+1;break;}}n1=(double)sum1/(double)n;n2=(double)sum2/(double)n;n3=(double)sum3/(double)n;n4=(double)sum4/(double)n;n5=(double)sum5/(double)n;第%d门优秀为:%d,百分比良好为:%d,.:..中等为:%d,百分比及格为:%d,百分比不及格为:%d,百分比sum1=0;sum2=0;sum3=0;sum4=0;sum5=0;}}voidPrintf(STUDENTstu[],intn,floatavercourse[],intcoursesum[])/*输出每个学生的**、**、各科考试成绩,课程的总分和平均分*/{inti,j;物理数学英语总分平均分for(i=0;i<n;i++){for(j=0;j<5;j++){}}}voidWritetofile(STUDENTstu[],FILE*fp,intn)/*将每个学生的信息写入文件*/{inti;{e*it(0);}for(i=0;i<n;i++){stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].averstudent);}fclose(fp);文件录入完成}voidReadfromfile(FILE*fp,intn)/*从文件中读出学生的信息*/{STUDENTb[N];inti;{.z.:..尚未生成此文件e*it(0);}for(i=0;!feof(fp);i++){&b[i].score[0],&b[i].score[1],&b[i].score[2],&b[i].score