C++成绩管理系统实验报告(含源代码).docx

上传人:1564****060 文档编号:94997540 上传时间:2023-08-13 格式:DOCX 页数:27 大小:69.83KB
返回 下载 相关 举报
C++成绩管理系统实验报告(含源代码).docx_第1页
第1页 / 共27页
C++成绩管理系统实验报告(含源代码).docx_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《C++成绩管理系统实验报告(含源代码).docx》由会员分享,可在线阅读,更多相关《C++成绩管理系统实验报告(含源代码).docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、学生成绩治理系统设计报告一、需求分析:用数组或链表数据构造完成一个学生成绩治理系统,此系统的具体功能要求如下:(1) 学生信息录入功能1) 用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理五门课成绩.2) 可插入一个或多个学生信息到当前编辑的班级数据中.3) 可删除一个或多个学生信息。(2文件保存功能1) 学生信息每一班存为一个数据文件,数据文件可在程序中翻开、编辑和重保存。2用户输入学生信息可随时保存数据文件。(3文件翻开功能1程序只能对当前翻开的数据文件进展编辑。(4查询功能1扫瞄全部学生信息;2) 按学号查询学生信息;3) 按姓名查询学生信息;4 查询

2、一个班总成绩和平均成绩;5) 查询一个班某一门课总成绩和平均成绩;6查询某一门课分数段( 90学生数。(5) 报表输出功能1 按学号输出一个班学生信息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理成绩和总成绩,到屏幕和文件。2) 按总成绩输出从高到低输出学号、姓名信息。注:以上功能以菜单形式供用户使用,并有确定的容错功能. 二、概要设计整体框架:整个学生成绩治理系统承受链表作为根本数据构造,创立一个类student 用于保存学生的数据且是链表中的一个节点。类list 作为保存整个链表之用。主函数通过switch 语句来依据用户的需要连接各个模块,以实现用户的需要。模块根本介绍:1.

3、用户输入模块在此模块中,用户将依据菜单提示结合自己的需求输入一个 011 的值,来实现确定的功能。2. 学生信息录入模块此模块可以让用户从键盘输入每个学生的信息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理五门课成绩.用户可插入一个或多个学生信息到当前编辑的班级数据中. 用户可删除一个或多个学生信息。3. 文件保存功能模块用户在确定以录入的成绩无误之后,可以将学生信息以每一班为单位存为一个数据文件。用户输入的学生信息可随时保存数据文件.4. 文件翻开功能模块用户可以用此模块将数据文件在程序中翻开、编辑,程序只能对当前翻开的数据文件进展编辑。5. 查询功能模块在此模块里,用户可实现以下

4、操作: 1.扫瞄全部学生信息; 2。按学号查询学生信息;3.按姓名查询学生信息;4.查询一个班每个人的总成绩和平均成绩; 5。查询一个班某一门课每个人的总成绩和平均成绩;6进展成绩的统计分析:包括总人数,每门课的最高成绩、最低成绩、平均成绩、各个分数段的人数100-90、8980、7970、6960、59-50、50 以下)、及格人数。6. 报表输出功能模块在此模块中,用户可以扫瞄全部学生的信息,或者可以按学号输出一个班学生信 息:学号、姓名、性别、数学、英语、政治、程序设计根底、物理成绩和总成绩, 到屏幕和文件.也可以按总成绩输出从高到低输出学号、姓名信息。模块图:开头m值 1,3,4值 8

5、值 9值 7,2,6,5值 10,11学生信息录入模块文件保存功能模块文件翻开功能模块查询功能模块报表输出功能模块用户输入,并将值保存至 m 中m完毕三、具体设计主要功能模块的算法设计思路:1。用户输入模块设计提示用户输入一个 011 的值,并存储在一个整型变量 m 中。2. 学生信息录入模块设计通过应用 list 中的 instu)函数,来建一个链表中的节点,即一个的学生信息,来进展成绩的录入功能 .成绩修改功能,可以依据姓名或学号进展查询并修改相应的课程的成绩,使用了void searchchar s10,int和 void search1(char s20,int函数进展操作。searc

6、h 函数依据姓名查找,search1 函数依据学号进展查找。由于学号和姓名,都是存储在字符数组中的,所以都是通过字符串的比较进展查找的。然后依据整形参数进展对应的课程成绩的修改。成绩删除功能,也是可以依据姓名或学号进展删除,查询的算法和成绩修改功能的查询方法是一样的,当找到要删除的节点时,由于节点都是在堆内存中保存的,所以可以直接delete 掉,并将前一个节点的 next 指针指向被删掉的节点的next 指针所指向的节点.3. 文件保存功能模块先提示用户输入保存文件的文件名及班级名称。文件的前两行分别是班级名称和成绩单的开头,然后通过 ofstream 变量 output 来进展学生信息的输

7、出,一项一项的输出,并设定格式,直到输出节点为 NULL 为止,之后关闭 output.4。 文件翻开功能模块先提示用户输入要翻开的数据文件的名称,然后通过一个 ifstream 变量 input 来进展文件操作。首先推断文件是否存在,假设不存在则输出 “File does not exist,”并跳出 switch 语句.文件存在的话,则可以进展数据的存入了。由于数据文件具有固定的格 式,即开 头两行是 班级名称和 表头, 则可以先用 两次input.getlinetemp,80;语句来将 input 设置到第三行,此时可以将数据通过 input 读入链表中。先用input.eof推断文件中

8、是否有数据,假设有数据,则进展数据的读入,直到文件完毕.5. 查询功能模块可以依据姓名或学号进展查找,搜寻方法和前几个模块一样。通过outstu1(char *n)和 outstuchar *n)来进展输出。总成绩和平均成绩的查询通过函数 void outsum(char 和 void outsum1(char *)来完成。通过函数 scanall)来浏览全部学生的信息。通过函数 think(来进展成绩的统计分析.6. 报表输出功能模块通过建立一个的类 class stucopy 用于拷贝 student 的数据,并实现排序功能。创立一个 stucopy stuM数组,将原链表的数据拷贝与数组

9、中,然后用选择排序方法将数组排序,然后用 output 依据标准的格式输出或保存为数据文件。四、程序构造源代码:include #includestring.hincludeiomanip.hincludefstream。hconst int M = 20;class stucopy/此类用于拷贝 student 的数据,用于排序功能的实现public:char id20; char sex10; char name10; double grade5;double sumsum;/总成绩double average;/平均成绩;class student/用于保存学生信息的类friend cl

10、ass list; public:char id20;/保存学号char sex10;/保存性别char name10;/保存名字double grade5;/保存成绩student)next=0;for (int i=0;i20;i+) for i=0;i10;i+ for (i=0;i10;i+idi=0; sexi=0; namei=0;void s);void setidchar id120)for(int i=0;i20;i+ idi=id1i;void setsex(char sex110for(int i=0;i10;i+) sexi=sex1i;void setnamechar

11、 name110forint i=0;i10;i+) namei=name1i;void setgradedouble grade15)forint i=0;i5;i+ gradei=grade1i;student next;/next 指向下一个学生,构成链表char * outid)return id;char outsex)return sex;char outnamereturn name; double outsum)double sum=0; forint i=0;i5;i+sum+=this-outgradei); return sum;double outav)return t

12、his-outsum/5; double outgradeint ireturn gradei; void intgradeint;;void student: intgradeint j)/用于修改学生的成绩switch jcase 1:case 2:case 3:case 4:coutgrade0;break;coutgrade1;break;coutgrade2;break;cout “请输入程序设计根底成绩:n”; cingrade3;break;case 5:coutgrade4;break;void student::s(/用于录入学生的信息coutid; coutname;cou

13、tsex;coutgrade0; coutgrade1;cout”请输入政治成绩:n“; cingrade2;cout “请输入程序设计根底成绩:n”; cingrade3;cout “请输入物理成绩:n”; cingrade4;class list/此类为链表private:double high5,low5; public:student *last,first;/链表的开头和结尾double totoal;list)last=0;first=0;;list);void instu);/建一个学生的数据void outstu(char );/依据姓名输出一个学生的信息int delstu(

14、char n);/依据姓名删除一个学生的信息void outstu1char *);/依据学号输出一个学生的信息int delstu1(char n);/依据学号删除一个学生的信息void outsumchar );/依据姓名输出一个学生的总成绩和平均成绩void outsum1char *);/依据学号输出一个学生的总成绩和平均成绩void think;/用于输出班级成绩的统计分析void searchchar s10,int;/依据姓名修改一个学生的成绩 void search1(char s20,int);/依据学号修改一个学生的成绩double hi(int i);/求某门课的最高分d

15、ouble loint i;/求某门课的最低分void avint i);/求某门课的平均分void ev(int i;/用于班级成绩统计分析的人数分布输出 void scanall;/输出全部学生的信息;list:list(/析构函数,将全部创立的学生对象删掉iffirst!=0student p=first,*temp; while(p!=NULL temp=p;p=p-next; delete temp; coutnext=p;last=p;void list::outstu(char niffirst=0 cout“班级无成员!查无此人!”next) ifstrcmp(tempoutn

16、ame(,n=0coutsetw8)”学号”setw8)“姓名“setw(6)“性别”setw(6) ”数学“setw(6“英语“setw(6 “政治”setw14)”程序设计根底“ setw(6”物理“endl;coutsetw8)temp-outidsetw(8tempoutname(setw6 temp-outsex(setw6tempoutgrade(0)setw6 temp-outgrade(1)setw(6)temp- outgrade2)setw(14)tempoutgrade3setw(6tempoutgrade(4);return; cout“查无此人!” endl;retu

17、rn;void list::outstu1char n)if(first=0) cout”班级无成员!查无此人!”outid,n=0coutsetw8 “学号”setw8”姓名“ setw6”性别“setw6”数学”setw6)“英语“setw6 “政治“ setw(14)“程序设计根底“setw6”物理”endl;coutsetw(8)outidsetw(8tempoutname setw6)tempoutsex setw(6outgrade(0)setw(6) tempoutgrade1)setw(6) temp-outgrade2) setw(14 temp-outgrade(3)set

18、w(6temp-outgrade(4);return; cout”查无此人!“endl;return;int list:delstu(char niffirst=0 cout”很多据!“endl;return 0; student *temp=first;student p;if(strcmpfirstoutname),n=0 first=first-next;delete temp; coutnext!=NULL;temp=tempnext)ifstrcmptemp-nextoutname(,n=0p=temp-next;tempnext=temp-next-next;delete p; c

19、out”n 删除成功n”;return 0;cout“n 查无此人,删除失败n“; return 0;int list::delstu1(char n)iffirst=0) coutoutid),n=0 first=firstnext;delete temp;cout “n 删除成功n“;return 0; else whiletempnext!=NULLif(strcmptempnext-outid),n)=0)p=temp-next;tempnext=tempnext-next;delete p; cout“n 删除成功n“;return 0;else temp=temp-next;cou

20、t”n 查无此人,删除失败n“; return 0;void list::think(if(first=0) cout “很多据!“endl;return; int i=0;student p=first;while p!=NULLp=pnext; i+;totoal=i;cout”人数:”iendl; cout”数学n“;cout”最高分:”hi0)” “”最低分:”lo0)” av(0;ev0); cout”英语n”;“平均分:“;cout”最高分:“hi(1” ”最低分:“lo(1)” “”平均分:”; av(1);ev(1); cout”政治n”;cout”最高分:” hi2) “ “

21、 “最低分:”lo(2” “平均分:“; av(2);ev2);cout“程序设计根底n“;cout”最高分:”hi3)” ”“最低分:“lo(3) “ “”平均分:“; av3);ev(3);cout“物理n“;cout”最高分:“hi(4 “ “最低分:“ lo4)” “highi highi=tempoutgradei); temp=tempnext;return highi;double list::loint ilowi=100;student *temp=first;whiletemp!=0iftempoutgrade(ilowi lowi=tempoutgradei; temp=

22、temp-next;return lowi;void list:avint i)double aver=0;student temp=first;whiletemp!=NULL)aver+=temp-outgradei); temp=tempnext;cout aver/totoal endl;void list:ev(int i int a=0,b=0,c=0,d=0,e=0,f=0; student temp=first;while(temp!=0switch int)temp-outgradei/10)case 10:a+;break;case 9:a+;break; case 8:b+

23、;break;case 7:c+;break; case 6:d+;break;case 5:e+;break;default:f+;temp=temp-next;cout”100-90 的人数:” a“8980 的人数:“b”7970 的人数:“ c” 69-60 的人数:“d”59-50 的人数:“e”50 以下的人数:“f” 及格的人数:“ (a+b+c+d “不及格的人数:“(e+f)next) ifstrcmptemp-outname,s=0tempintgrade(n;void list:search1(char s20,int nstudent *temp=first;for;t

24、emp!=NULL;temp=tempnext ifstrcmptemp-outid,s)=0temp-intgrade(n);void list:outsumchar nif(first=0 cout”很多据!”next)ifstrcmptemp-outname),n=0)coutsetw(8)“学号“setw(8) “姓名”setw8)”性别“ setw(8)”总成绩“setw(10”平均成绩”“n“;setw8)outav);coutsetw(8tempoutidsetw8tempoutnameoutsexoutsumsetw(10temp-return;cout”查无此人!“ endl

25、; return;void list: outsum1char *n)double sum=0; int i=0;double av=0;iffirst=0 cout “很多据!”outid,n)=0cout setw(8”学号“setw(8)”姓名”setw(8)“性别“setw8”总成绩”setw(10)”平均成绩”n“;coutsetw(8 temp-outid(setw8 tempoutname)setw8)outav);outsex setw(8) tempoutsum( setw10tempreturn;cout”查无此人!” endl; return;void list::sca

26、nall(student *temp;for(temp = first;temp!=NULL;temp=tempnext)coutoutid(outnamesetw6outsex(setw6outgrade(0)setw6 temp-outgrade1endl;setw(6)temp-outgrade(2) setw14)temp-outgrade(3setw(6tempoutgrade(4outsumsetw(10)outavvoid main(stucopy stuM;/复制整个链表的数据于数组,用于排序 stucopy stutemp;/临时变量list will;/整个链表studen

27、t *p, p1=new student(,q;/临时变量 ifstream input;/输入ofstream output;/输出char file20,classname20,temp80,id20,name9,sex110;/临时变量int m=0,n=0,j=0,i=0;/临时变量double grade15;/临时变量fori=0;i20;i+) idi=0;fori=0;i9;i+ namei=0;/初始化do cout”/-n” 0、 退出系统。n”“ 1、 成绩的录入:包括学生学号、姓名、性别和各门课程成绩的录入.n”“ 2、 成绩的查询:可以依据学号或姓名查询某个学生的成绩

28、。n”“ 3、 成绩的修改:可以依据学号或姓名来修改相应的学生的成绩。n“ 4、 数据的删除:可以依据学号或姓名指定删除某个学生的数据。n” 5、 成绩的统计分析:包括总人数、最高成绩、最低成绩、平均成绩、n”“各个分数段的人数10090、89-80、7970、6960、5950、50 以下、及格率.n“” 6、 总成绩和平均成绩的查询:可以依据学号或姓名查询。n“” 7、 扫瞄全部学生信息。n” 8、 将全部学生信息保存成文件。n“” 9、 翻开指定的数据文件。n“ 10、 按总成绩排序输出学生信息.n” 11、 按学号挨次输出学生信息,并可保存成文件.n” “/-n”coutendlm;s

29、witch(mcase 1:will。instu; break;case 2:cout”1.依据学号查询2.依据姓名查询“endl“请输入:”; cin n;switch(n) case 1:coutid;will。outstu1id); cout“n“;break;case 2:coutname;will。outstuname; cout”n“;break;break;case 3:cout“1。依据学号查询2。依据姓名查询”endln;switchn case 1:coutid;will。outstu1(id); cout”n“;coutsetw6) “1.数学“setw6”2.英语”se

30、tw(6“3.政治 “setw14”4.程序设计根底“setw6)“5。物理“ endl; coutj; will.search1(id,j;break;case 2:coutname;will。outstu(name); cout ”n”cout setw(6”1。数学“setw6”2。英语”setw(6”3。政治 ” setw14“4.程序设计根底“setw(6”5。物理“ endl;cout“请输入课程编号:”; cin j;will。search(name,j;break;break;case 4:cout“1.依据学号删除2.依据姓名删除“endlid;will。outstu1id)

31、; will.delstu1(id;break;case 2:cout“请输入姓名n”; cin name;will。outstu(name; will.delstu(name);break;break;case 5: will.think(; break;case 6:cout”1。依据学号查询2。依据姓名查询“ endln;switch(n case 1:coutid;will。outsum1id;break; case 2:coutname;will。outsumname;break;break;case 7:coutsetw(8”学号“setw(8”姓名”setw(6“性别“ setw

32、(6) “数学“setw(6”英语”setw6“政治”setw(14)“程序设计根底“setw6)”物理”setw8 “总成绩”setw10”平均成绩”“n“; will。scanall(;break;case 8:cout”请输入文件名:“file;coutclassname; output。openfile); p = will。first;output classname“成绩单“ endlsetw(8)“学号“setw(8)”姓名”setw(6”性别“ setw(6) “数学“setw(6)“英语” setw(6“政治”setw(14)”程序设计根底”setw6“物理“setw(8“总

33、成绩“1)case 9:setw10) “平均成绩“next)outputsetw(8)p-outidsetw8outnamesetw6)p-outsex)setw6)p-outgrade0)setw6)poutgrade setw6) poutgrade2)setw(14)outgrade3)setw(6)p-outgrade4 setw(8) poutsum)setw(10) poutav)endl; output.close);break;cout“请输入文件名:”file;input.open(file;if input.failcout ”File does not exist“en

34、dl;break;input。getline(temp,80; input。getline(temp,80;if(input。eof) cout“文件中很多据!”id namesex1grade10grade11grade12grade13grade14; inputtemp;inputtemp;/将总成绩和平均成绩输入进临时变量p1setid(id);p1setname(name); p1setsexsex1; p1setgrade(grade1); will.first=p1;will。last=will。first;while(!input。eof)p=new student; q=will。last; will.last-next=p; will.last=p;inputidnamesex1grade10grade11grade12 grade13grad

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

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

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

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