2022年C++小型学生成绩管理系统 .pdf

上传人:C****o 文档编号:39887205 上传时间:2022-09-08 格式:PDF 页数:24 大小:1.02MB
返回 下载 相关 举报
2022年C++小型学生成绩管理系统 .pdf_第1页
第1页 / 共24页
2022年C++小型学生成绩管理系统 .pdf_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《2022年C++小型学生成绩管理系统 .pdf》由会员分享,可在线阅读,更多相关《2022年C++小型学生成绩管理系统 .pdf(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、高级程序设计实践报告课题名称:小型学生成绩管理系统姓名:小戴专业班级:电气1207 学号:0909120700 指导老师:向老师上课时间:6.247.4 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 24 页 -一 课程设计目的1、使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;2、使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力;3、使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。二设计要求1、需要处理的基础数据1)学生基本信息:如班级、学号、姓名、性别、

2、年龄、宿舍号码、电话号码等。2)学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。2、系统的基本功能*数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息;*数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其选修课程信息;*数据的插入:插入某个学生信息;*数据的查询:如按学号查询、按姓名查询等;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 24 页 -*数据的删除:如删除指定学号、或者指定姓名的学生及其选修课程信息;*平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息;*列出不及格

3、学生清单(学号、姓名、不及格的课程和成绩)。*考虑用文件把数据保存起来(可选)。三 概要设计1.整体框架:整个学生成绩管理系统采用链表作为基本数据结构,创建一个类student 用于保存学生的数据且是链表中的一个节点。类list 作为保存整个链表之用。主函数通过 switch 语句来根据用户的需要连接各个模块,以实现用户的需要。2.模块基本介绍:1).用户输入模块在此模块中,用户将根据菜单提示结合自己的需求输入一个 08 的值,来实现一定的功能。2).学生信息录入模块名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 24 页 -此模块可以让用户从键盘输入每个学生的信息:学号、姓名、

4、性别、各门课程的成绩。用户可插入一个或多个学生信息到当前编辑的班级数据中。用户可删除一个或多个学生信息。3).文件保存功能模块用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一个数据文件。用户输入的学生信息可随时保存数据文件。4).文件打开功能模块用户可以用此模块将数据文件在程序中打开、编辑,程序只能对当前打开的数据文件进行编辑。5).查询功能模块在此模块里,用户可实现以下操作:1.浏览所有学生信息;2.按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩;5.查询一个班某一门课每个人的总成绩和平均成绩;6.列出不及格清单。6).报表输出功能模块在

5、此模块中,用户可以浏览所有学生的信息,或者可以按学号输出一个班学生信息:学号、姓名、性别、各门课成绩和总成绩,到屏幕和文件。也可以按平均成绩输出从高到低输出学号、姓名信息。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 24 页 -3.模块图:四详细设计主要功能模块的算法设计思路:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 24 页 -1.用户输入模块设计提示用户输入一个08 的值,并存储在一个整型变量 m 中。2.学生信息录入模块设计通过应用 list 中的 instu()函数,来新建一个链表中的节点,即一个新的学生信息,来进行成绩的录入功能。成绩修改功能,可

6、以根据姓名或学号进行查询并修改相应的课程的成绩,使用了void search(char s10,int)和void search1(char s20,int)函数进行操作。search 函数根据姓名查找,search1 函数根据学号进行查找。因为学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进行查找的。然后根据整形参数进行对应的课程成绩的修改。成绩删除功能,也是可以根据姓名或学号进行删除,查询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,因为节点都是在堆内存中保存的,所以可以直接delete 掉,并将前一个节点的 next 指针指向被删掉的节点的next 指针所指

7、向的节点。3.文件保存功能模块先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过ofstream 变量 output 来进行学生信息的输出,一项一项名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 24 页 -的输出,并设定格式,直到输出节点为NULL为止,之后关闭 output。4.查询功能模块可以根据姓名或学号进行查找,搜索方法和前几个模块相同。通过 outstu1(char*n)和 outstu(char*n)来进行输出。总成绩和平均成绩的查询通过函数void outsum(char*)和 void outsum1(char*)来完成

8、。通过函数scanall()来浏览所有学生的信息。通过函数think()来进行成绩的统计分析。5.报表输出功能模块通过建立一个新的类class stucopy 用于拷贝student 的数据,并实现排序功能。创建一个stucopy stuM 数组,将原链表的数据拷贝与数组中,然后用选择排序方法将数组排序,然后用output 按照标准的格式输出或保存为数据文件。五运行结果(1)信息的录入名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 24 页 -(2)成绩的查询(3)成绩的修改名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 24 页 -(4)数据的删除(5)列出不及格

9、清单名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 24 页 -(6)浏览所有学生信息(7)保存文件名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 24 页 -(8)按平均成绩排序输出学生信息六心得体会虽说已经有过一次程序设计的经历,但这次的难度显然是比上次要大的多的。本此程序设计所用时间较长,工作量很大,且所涉及的知识很多,光凭我们在课堂上学的知识是远远不够的。开始的时候我还是很期待这次挑战的,但当我真正着手策划设计的时候,才发现有些东西已经超过了自己的能力范围了,但这并不意味着我会名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 24 页 -因此

10、放弃,接着我就去接了几本相关的书籍,在遇到问题的时候我就会去查阅,也确实解决了一些问题,但显然还有许多问题无从下手,这时就不得不向大神求助了。我觉得在编写程序时需要的是灵感,有时苦坐数个小时什么都没做,但有时在夜深人静的时候却一下子解决了好多问题,虽然熬得很晚,却很值得。为了这个程序设计确实是忙活了好久,总算勉强完成了。我相信我收获的绝不仅仅是一个程序,还有在思维上的锻炼,以及编写能力的提高。总而言之,我觉得这次课程设计很有意义,很有价值。附录:#include#include#include#include int grade_number;/课程数const int M=20;class

11、stucopy/此类用于拷贝student 的数据,用于排序功能的实现 public:char id20;char sex10;char name10;char course5;/课程编号double grade25;double sumsum;/总成绩double average;/平均成绩double xuefen;char age5;名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 24 页 -char dorm5;char tele20;class student/用于保存学生信息的类 friend class list;public:char id20;/保存学号cha

12、r sex10;/保存性别char name10;/保存名字double grade25;/保存成绩char course5;/保存课程编号double xuefen;char age5;char dorm5;char tele20;student()next=0;for(int i=0;i20;i+)idi=0;for(int i=0;i10;i+)sexi=0;for(int i=0;i10;i+)namei=0;for(int i=0;i5;i+)agei=0;for(int i=0;i5;i+)dormi=0;for(int i=0;i20;i+)telei=0;void s();vo

13、id setid(char id120)for(int i=0;i20;i+)idi=id1i;void setsex(char sex110)for(int i=0;i10;i+)sexi=sex1i;void setname(char name110)for(int i=0;i10;i+)namei=name1i;void setage(int age15)名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 24 页 -for(int i=0;i5;i+)agei=age1i;void setdorm(int dorm15)for(int i=0;i5;i+)dormi=dor

14、m1i;void settele(int tele15)for(int i=0;i5;i+)telei=tele1i;void setcourse(int course15)for(int i=0;ioutsum()/grade_number;double outgrade(int i)return grade2i=grade0i*0.3+grade1i*0.7;char outcourse(int i)return coursei;void intgrade(int);double outsum()double sum=0;for(int i=0;ioutgrade(i);return su

15、m;void student:s()/用于录入学生的信息名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 24 页 -cout请输入课程数:grade_number;cout请输入学号:id;cout请输入姓名:name;cout请输入性别:sex;cout请输入年龄:age;cout请输入宿舍号:dorm;cout请输入电话:tele;for(int i=0;igrade_number;i+)cout 请输入课程编号:coursei;cout 学分:xuefen;cout 平时成绩:grade0i;if(grade0i100|grade0i0)cout 请输入 0100 之间的

16、数!endl;cout 请重新输入:grade0i;cout 考试成绩 grade1i;if(grade1i100|grade1i0)cout 请输入 0100 之间的数!endl;cout 请重新输入:grade1i;void student:intgrade(int j)/用于修改学生的成绩 for(int i=0;igrade_number;i+)if(j=i+1)cout 平时成绩 grade0i;名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 24 页 -if(grade0i100|grade0i0)cout 请输入 0100 之间的数!endl;cout 请重新输入

17、:grade0i;cout考试成绩 grade1i;if(grade1i100|grade1i0)cout 请输入 0100 之间的数!endl;cout 请重新输入:grade1i;class list/此类为链表 public:student*last,*first;/链表的开头和结尾double totoal;list()last=0;first=0;list();void instu();/新建一个学生的数据void outstu(char*);/根据姓名输出一个学生的信息int delstu(char*n);/根据姓名删除一个学生的信息void outstu1(char*);/根据学

18、号输出一个学生的信息int delstu1(char*n);/根据学号删除一个学生的信息void outsum(char*);/根据姓名输出一个学生的总成绩和平均成绩void outsum1(char*);/根据学号输出一个学生的总成绩和平均成绩void think();/用于输出班级成绩的统计分析void search(char s10,int);/根据姓名修改一个学生的成绩void search1(char s20,int);/根据学号修改一个学生的成绩void scanall();/输出所有学生的信息;list:list()/析构函数,将所有创建的学生对象删掉 if(first!=0)s

19、tudent*p=first,*temp;while(p!=NULL)temp=p;p=p-next;delete temp;名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 24 页 -coutoks();if(first=0)first=last=p;elselast-next=p;last=p;void list:outstu(char*n)/按姓名输出 if(first=0)cout 班级无成员!查无此人!next)if(strcmp(temp-outname(),n)=0)coutsetw(8)学号 setw(8)姓名 setw(8)性别 setw(8)年龄setw(8

20、)宿舍号 setw(8)电话;for(int i=0;igrade_number;i+)coutsetw(8)outcourse(i);coutendl;coutsetw(8)outid()setw(8)outname()setw(8)outsex()setw(8)outage()setw(8)outdorm()setw(8)outtele();for(int i=0;igrade_number;i+)coutsetw(8)outgrade(i);return;cout查无此人!endl;return;void list:outstu1(char*n)/按学号输出 if(first=0)cou

21、t 班级无成员!查无此人!next)if(strcmp(temp-outid(),n)=0)coutsetw(8)学号 setw(8)姓名 setw(8)性别 setw(8)年龄setw(8)宿舍号 setw(14)电话;for(int i=0;igrade_number;i+)coutsetw(8)outcourse(i);coutendl;coutsetw(8)outid()setw(8)outname()setw(8)outsex()setw(8)outage()setw(8)outdorm()setw(14)outtele();名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页

22、,共 24 页 -for(int i=0;igrade_number;i+)coutsetw(8)outgrade(i);return;cout查无此人!endl;return;int list:delstu(char*n)/删除学生成绩 if(first=0)cout 无数据!outname(),n)=0)first=first-next;delete temp;coutnext!=NULL;temp=temp-next)if(strcmp(temp-next-outname(),n)=0)p=temp-next;temp-next=temp-next-next;delete p;coutn

23、 删除成功 n;return 0;coutn 查无此人,删除失败n;return 0;int list:delstu1(char*n)if(first=0)cout 无数据!outid(),n)=0)first=first-next;delete temp;coutnext!=NULL)if(strcmp(temp-next-outid(),n)=0)p=temp-next;temp-next=temp-next-next;delete p;coutnext;coutn 查无此人,删除失败n;return 0;void list:think()/列出不及格清单 coutsetw(8)学号 se

24、tw(8)姓名 setw(14)不及格的课程 setw(8)成绩 setw(8)重修否 next)for(int j=0;jgrade2j60)coutsetw(8)outid()setw(8)outname()setw(14)coursejsetw(8)grade2jsetw(8)重修 next)if(strcmp(temp-outname(),s)=0)temp-intgrade(n);void list:search1(char s20,int n)/根据学号修改 student*temp=first;for(;temp!=NULL;temp=temp-next)if(strcmp(te

25、mp-outid(),s)=0)temp-intgrade(n);void list:scanall()if(first=0)cout 班级无成员!查无此人!next)coutsetw(8)学号 setw(8)姓名 setw(8)性别;for(int i=0;igrade_number;i+)coutsetw(8)outcourse(i);coutendl;名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 24 页 -coutsetw(8)outid()setw(8)outname()setw(8)outsex();for(int i=0;igrade_number;i+)cou

26、tsetw(8)outgrade(i);coutendl;int main()stucopy stuM;/复制整个链表的数据于数组,用于排序stucopy stutemp;/临时变量list will;/整个链表student*p,*p1=new student(),*q;/临时变量ifstream input;/输入ofstream output;/输出char file20,classname20,temp80,id20,name9,sex110,age5,dorm5,tele20;/临时变量int m=0,n=0,j=0,i=0;/临时变量double grade125;/临时变量cha

27、r course110;for(i=0;i20;i+)idi=0;for(i=0;i9;i+)namei=0;/初始化docout 小型学生成绩管理系统endl;cout*endl *1 成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入。*endl *2 成绩的查询:可以根据学号或姓名查询某个学生的成绩。*endl *3 成绩的修改:可以根据学号或姓名来修改相应的学生的成绩。*endl *4 数据的删除:可以根据学号或姓名指定删除某个学生的数据。*endl *5 列出不及格学生清单(学号、姓名、不及格的课程和成绩)。*endl *6 浏览所有学生信息。*endl *7 将所有学生信息保

28、存成文件。*endl *8 按平均成绩排序输出学生信息。名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 24 页 -*endl *endl;coutendlm;switch(m)case 1:will.instu();break;case 2:cout1.根据学号查询2.根据姓名查询endln;switch(n)case 1:coutid;will.outstu1(id);coutendl;break;case 2:coutname;will.outstu(name);coutendl;break;break;case 3:do cout1.根据学号修改2.根据姓名修改endl

29、n;switch(n)case 1:coutid;will.outstu1(id);coutendl;coutj;will.search1(id,j);break;case 2:coutname;will.outstu(name);coutendl;for(int i=0;igrade_number;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 24 页 -cout 请输入课程名:p-coursei;cout平时成绩 p-grade0i;cout 考试成绩 p-grade1i;coutj;will.search(name,j);break;coutendl 输入 1:继

30、续修改输入 0:退出修改 m;while(m=1);break;case 4:cout1.根据学号删除2.根据姓名删除endln;switch(n)case 1:coutid;will.outstu1(id);will.delstu1(id);break;case 2:coutname;will.outstu(name);will.delstu(name);break;break;case 5:will.think();break;case 6:will.scanall();break;case 7:cout请输入文件名:file;cout请输入班级名称:classname;名师资料总结-精品

31、资料欢迎下载-名师精心整理-第 22 页,共 24 页 -output.open(file);p=will.first;outputclassname 成绩单 endlsetw(8)学号 setw(8)姓名setw(8)性别;for(int k=0;kgrade_number;k+)outputsetw(8)outcourse(k);outputsetw(8)平均成绩 next)outputsetw(8)outid()setw(8)outname()setw(8)outsex();for(int i=0;igrade_number;i+)outputsetw(8)outgrade(i);out

32、putsetw(8)outav()endl;output.close();break;case 8:p=will.first;coutsetw(8)学号 setw(8)姓名 setw(8)性别 setw(8)年龄 setw(8)宿舍号 setw(14)电话 setw(14)平均成绩 endl;for(i=0;inext)for(j=0;jidj;for(j=0;jnamej;for(j=0;jsexj;for(j=0;jagej;for(j=0;jdormj;for(j=0;jtelej;stui.sumsum=p-outsum();stui.average=p-outav();for(j=0

33、;jgrade2j;for(n=0;ni-1;n+)for(j=1;ji;j+)if(stun.averagestuj.average)stutemp=stuj;stuj=stun;stun=stutemp;for(j=0;ji;j+)coutsetw(8)stuj.idsetw(8)stuj.namesetw(8)stuj.sexsetw(8)stuj.agesetw(8)stuj.dormsetw(14)stuj.telesetw(14)stuj.averageendl;break;coutendl 输入 1:继续;输入 0:退出 m;while(m=1);名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 24 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁