还剩31页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计报告课程名称面向对象程序设计C++设计题目学生成绩管理系统专业计算机科学与技术姓名学号指导教师李晓虹2015年1月6日目录TOC\o1-3\h\z\u
1.系统需求分析
21.1功能需求分析
21.2性能需求分析
21.
2.1硬件环境22.总体设计
32.
1.对系统的操作
32.
2.系统结构
32.
2.1程序流程图
32.
2.2各个子函数功能及流程图
43.详细设计
64.系统调试
84.1调试信息
84.2源代码
105.结果分析
245.1进入学生成绩管理系统的主菜单
245.2数据录入
245.3增加学生
255.4删除学生
265.5修改学生
275.6总成绩查询
275.7按姓名输出
285.8输出所有学生的数据
285.9各个学生的平均成绩
295.10各科不及格人
295.11总分查询排名
305.12退出
306.总结
311.系统需求分析
1.1功能需求分析用数组或链表数据结构完成一个学生成绩管理系统,此系统的具体功能要求:
(1)学生信息录入功能1)用户从键盘输入每个学生的信息姓名、学号、数学成绩、C++成绩、英语成绩2)可插入一个或多个学生信息到当前编辑的班级数据中3)可删除一个或多个学生信息
(2)查询功能1)浏览所有学生信息;2)按学号查询学生信息;3)按姓名查询学生信息;4查询一个班总成绩和平均成绩;5查询一个班某一门课总成绩和平均成绩;6)查询某一门课分数段(6060-6970-7980-8990)学生数
(3)成绩统计1)按学号输出一个班学生信息学号、姓名、数学成绩、C++成绩、英语2按总成绩输出从高到低输出学号、姓名信息注以上功能以菜单形式供用户使用,并有一定的容错功能
1.2性能需求分析
1.
2.1硬件环境处理器inside或是更高内存128MB(建议196MB)硬盘空间20MB
1.2.2软件环境操作系统:Windows98/XP或是Windows2000/WindowsNTServer
4.02.总体设计
2.
1.对系统的操作1)数据录入、增加人员、删除人员、查询、修改数据、2)查询包括总成绩查询、按姓名查询、输出所有学生成绩3排名按总分排名、按英语成绩排名、按C++成绩排名
2.
2.系统结构
2.
2.1程序流程图
2.
2.3各个子函数功能及流程图1)用于添加学生信息的函数包括学号姓名成绩等的内容2用于输出学生信息,包括学号姓名各科及总分平均成绩3)用于查找学生各项信息4)用于修改学生各项信息5)删除学生信息
3.详细设计在main()函数中主要是通过”switchmenu”选择判断来调用相关功能模块系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出本系统”时,才会跳出永真循环,并退出程序主函数代码为voidmain/*主函数*/{for;;{switchmenu/*选择判断*/{case1:Inputstud;/*输入学生成绩*/break;case2:Statisticstud;/*输出学生统计数据*/break;case3:Lookupstud;/*查找学生成绩*/cout\t\t\t;systempause;break;case4:Modifystud;/*修改学生成绩*/cout\t\t\t;systempause;break;case5:Deletestud;/*按学号查找,删除学生信息*/cout\t\t\t;systempause;break;case6:Outputstud;/*显示全部学生成绩*/cout\t\t\t;systempause;break;case0:coutendlcout\t\t\t;systempause;exit0;}}}
4.系统调试
4.1调试信息1主界面2添加学生信息3)查询信息4)显示学生成绩
4.2源代码#includeiostream#includestring#includefstream#includesstream#includeiomanipusingnamespacestd;classTstu//通过定义一个类来定义数据录入的函数{charname
[20];intnumber;floatmathcppenglishaveragesum;public:Tstu{};Tstucharn
[20]intnumfloatmafloatcjfloateng;floatgetsum;//得到总分的函数floatgetaver;//得到平均分的函数friendvoidmain;//将主函数定义为友元函数,方便访问类中的成员};Tstu::Tstucharn
[20]intnumfloatmafloatcjfloateng{strcpynamen;//得到姓名number=num;//得到学号math=ma;//得到数学成绩cpp=cj;//得到c++成绩english=eng;//得到英语成绩}floatTstu::getsum//得到总分的函数{sum=cpp+english+math;returnsum;}floatTstu::getaver//得到平均分的函数{average=getsum/3;returnaverage;}voidmain{cout*****************欢迎来到学生成绩查询系统*****************endl;cout请选择您需要的操作!endl;//菜单的输出cout操作endl;cout1数据录入endl;cout2增加学生endl;cout3删除学生endl;cout4修改数据endl;cout查询endl;cout5按总成绩查询endl;cout6按姓名查询endl;cout7输出所有学生的数据endl;cout成绩统计:endl;cout8每个学生的平均成绩endl;cout9各科不及格人数endl;cout排名:endl;cout10按总分查询排名endl;cout11退出endl;cout选择相关操作请输入相对的括号里的阿拉伯数字及字母!endl;intp=0;//全局变量,用于选择菜单时的输入charw;//全局变量,用于在大项中选择是否继续操作Tstu*s
[100];//类定义的指针将所录入的数据按类中的形式分别存储ofstream*file
[100];inti=0;//全局变量,用于做每个录入数据的下标intj=0;intchris1=0;//用于判断do—while语句do//判断输入是否正确{cinp;ifp=1p=11chris1=1;elsecout指令错误!请重新输入endl;}whilechris1==0;do{switchp{case1://数据的录入{charc;//用于在小项中选择是否继续操作charname
[20];intnumber;floatmathcppenglish;do{cout请输入姓名:endl;cinname;cout请输入学号:endl;cinnumber;cout请输入数学成绩endl;cinmath;cout请输入C++成绩endl;cincpp;cout请输入英语成绩endl;cinenglish;fstreamoutfileinfile;//作一个文本文档在文件夹中用于显示所录入的数据outfile.openf
1.txtios::out|ios::app;if!file{coutf
1.txtcannotopen.\n;return;}outfilename学号:number数学成绩:mathC++成绩:cpp外语成绩:englishendl;outfile.close;infile.openf
1.txtios::in;if!file//判断文件是否打开{coutf
1.txtcannotopen.\n;return;}charch;whileinfile.getchcoutch;coutendl;infile.close;j++;s[i]=newTstunamenumbermathcppenglish;i++;cout数据录入成功,想继续录入吗y/nendl;cinc;chris1=0;do{ifc!=yc!=n{cout指令错误!请重新输入!endl;cinc;}elsechris1=1;}whilechris1==0;}whilec==y;//重复输入break;}case2://增加学生数据{charname
[20];intnumber;floatmathcppenglish;charc;do{cout请输入您要增加的学生的姓名endl;cinname;cout请输入你要增加的学生的学号:endl;cinnumber;cout请输入数学成绩endl;cinmath;cout请输入C++成绩endl;cincpp;cout请输入英语成绩endl;cinenglish;fstreamoutfileinfile;outfile.openf
1.txtios::out|ios::app;if!file{coutf
1.txtcannotopen.\n;return;}outfilename学号:number数学成绩:mathC++成绩:cpp外语成绩:englishendl;outfile.close;infile.openf
1.txtios::in;if!file{coutf
1.txtcannotopen.\n;return;}charh;whileinfile.gethcouth;coutendl;infile.close;j++;s[i]=newTstunamenumbermathcppenglish;i++;cout数据录入成功,想继续录入吗y/nendl;cinc;ifc!=yc!=n{cout指令错误!请重新输入!endl;cinc;}}whilec==y;break;}case3://删除学生信息{charc;stringxingminglinestrname;do{ifstreamfinf
1.txt;fstreamoutfilef
2.txtios::trunc|ios::out;//作一个文本文档在文件夹中用于显示所录入的数据cout请输入您要删除的学生的姓名endl;cinxingming;while!fin.eof{getlinefinline;istringstreamstreamline;name=line.substr0line.find0;//找到名字,判断是否相等ifname!=xingmingoutfilelineendl;}outfile.close;fin.close;fstreamff
1.txtios::trunc|ios::out;ifstreamoutff
2.txt;foutf.rdbuf;outf.close;f.close;cout数据删除成功,想继续删除吗y/nendl;cinc;ifc!=yc!=n{cout指令错误!请重新输入!endl;cinc;}}whilec==y;break;}case4://修改数据{stringsnamelinestrname;intnu;floatengmacom;intflag;charc;ifi==0{cout系统中没有输入数据请先输入数据!endl;break;}do{flag=0;cout请输入您要修改的学生的姓名:;cinname;fstreamfinf
1.txtios::in;ofstreamoutfilef.txtios::trunc|ios::out;coutendl;while!fin.eof//在文件中查找{getlinefinline;istringstreamstreamline;sname=line.substr0line.find0;ifname!=sname{outfilelineendl;}elseflag=1;}fin.close;ifflag=1{cout请输入修改学生姓名及其新学号,数学,c++和英语成绩:;cinnamenumacomeng;coutendl;outfilename学号:nu数学成绩:maC++成绩:com外语成绩:engendl;outfile.close;fstreamoutff
1.txtios::trunc|ios::out;fstreaminff.txtios::in;outfinf.rdbufendl;outf.close;inf.close;}ifflag=0cout对不起,您要修改的学生不存在!请查证后输入!endl;cout想继续修改吗y/n:;cinc;coutendl;ifc!=yc!=n{cout指令错误!请重新输入!endl;cinc;}}whilec==y;break;}case5://按总分查询{intj=0;floatSUM;charc;intflag;ifi==0{cout系统中没有输入数据请先输入数据!endl;break;}do{flag=0;cout请输入您要查询的学生的总成绩endl;cinSUM;forintj=0;ji;j++{ifs[j]-getsum==SUM{flag=1;cout您要查询的学生是:*s[j].nameendl;cout该生的信息为:endl;cout学号:*s[j].number数学分数:*s[j].mathc++分数:*s[j].cpp英语分数*s[j].englishendl;}}ifflag==0cout对不起!您要查询的学生不存在!endl;cout是否继续查y/n:;cinc;ifc!=yc!=n{cout指令错误!请重新输入!endl;cinc;};}whilec==y;break;}case6://按姓名查询{charn
[20];charc;intj=0;intflag;ifi==0{cout系统中没有输入数据请先输入数据!endl;break;}do{flag=0;cout请输入要查询的名字:endl;cinn;forintj=0;ji;j++{ifstrcmpn*s[j].name==0{flag=1;cout您要查询的学生是:*s[j].nameendl;cout该生的信息是:学号:*s[j].number数学分数:*s[j].mathc++分数:*s[j].cpp英语分数:*s[j].englishendl;}}ifflag==0cout对不起您要查询的学生不存在请查证后再输入!endl;cout您想继续查询吗y/n:;cinc;ifc!=yc!=n{cout指令错误!请重新输入:endl;cinc;}}whilec==y;break;}case7://输出所有学生数据{cout所有学生数据如下:endl;ifstreamfile;file.openf
1.txtios::in;coutfile.rdbuf;file.close;break;}case8://统计每个学生的平均成绩{ifi==0{cout系统中没有输入数据请先输入数据!endl;break;}forintm=0;mi;m++{cout*s[m].name学号:*s[m].number总分:*s[m].getsum均分:*s[m].getaverendl;}break;}case9://统计各学科不及格人数{ifi==0{cout系统中没有输入数据请先输入数据!endl;break;}intmnkj;m=0;n=0;k=0;forj=0;ji;j++{ifs[j]-math60m++;ifs[j]-cpp60n++;ifs[j]-english60k++;}cout数学不及格人数为:mendl;coutc++不及格人数为:nendl;cout英语不及格人数为:kendl;break;}case10://按总分排名{ifi==0{cout系统中没有输入数据请先输入数据!endl;break;}inthgn;intj=0;floata
[100]temp;forg=0;gi;g++{a[j]=*s[g].getsum;j++;}forh=0;hi;h++{forn=0;ni-h;n++ifa[n]a[n+1]{temp=a[n];a[n]=a[n+1];a[n+1]=temp;}}forn=1;n=i;n++couta[n]endl;break;}}cout您想继续进行其他操作吗y/n:;intflag=0;do{cinw;coutendl;ifw!=yw!=ncout指令错误!请重新输入!endl;elseflag=1;}whileflag==0;ifw==y{cout*****************欢迎来到学生成绩查询系统*****************endl;cout请选择您需要的操作!endl;//菜单的输出cout操作endl;cout1数据录入endl;cout2增加学生endl;cout3删除学生endl;cout4修改数据endl;cout查询endl;cout5按总成绩查询endl;cout6按姓名查询endl;cout7输出所有学生的数据endl;cout成绩统计:endl;cout8每个学生的平均成绩endl;cout9各科不及格人数endl;cout排名:endl;cout10按总分查询排名endl;cout11退出endl;cout选择相关操作请输入相对的括号里的阿拉伯数字及字母!endl;cinp;}}whilew==y;}
5.结果分析
5.1进入学生成绩管理系统的主菜单
5.2数据录入
5.3增加学生
5.4删除学生
5.5修改学生
5.6总成绩查询
5.7按姓名输出
5.8输出所有学生的数据
5.9各个学生的平均成绩
5.10各科不及格人
5.11总分查询排名
5.12退出
6.总结这是一个综合性较强,很实际的一个编程实例刚学C++时候,感觉类和对象还挺有意思的,刚接触到这个题目时,觉得应该没什么大问题吧,因为,我自认为一些基本知识点都已经掌握了可是,真的当我动手编程的时候,才发现并没有想象中的那么简单单个知识点是弄清了,但是,将所有的知识点综合起来运用时,就碰到了各种各样的问题了有时候,一个错误得找好久,才能发现通过这个实验的练习,我也学到了很多东西,特别是加了对类和对象理解和应用方面,也很谢谢老师给我的帮助。