大型实验报告(歌手比赛系统).docx

上传人:夺命阿水 文档编号:557970 上传时间:2023-08-27 格式:DOCX 页数:33 大小:165.59KB
返回 下载 相关 举报
大型实验报告(歌手比赛系统).docx_第1页
第1页 / 共33页
大型实验报告(歌手比赛系统).docx_第2页
第2页 / 共33页
大型实验报告(歌手比赛系统).docx_第3页
第3页 / 共33页
大型实验报告(歌手比赛系统).docx_第4页
第4页 / 共33页
大型实验报告(歌手比赛系统).docx_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《大型实验报告(歌手比赛系统).docx》由会员分享,可在线阅读,更多相关《大型实验报告(歌手比赛系统).docx(33页珍藏版)》请在课桌文档上搜索。

1、选H工学大个大类基础课程大型实验2022/2022(2)实验题目歌手比赛系统学生姓名学生学号学生班级任课教师提交日期计算机科学与技术学院歌手比赛系统实验报告一、大型实验的内容歌手比赛系统(SCS:SingerContestSystem)用于对一次歌手比赛的成绩进行管理,要求完成的主要的功能包括选手信息管理、评委打分管理。可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等工作。要求使用学习过的C/C+程序设计的知识完成歌手比赛系统的设计与实现。二、运彳再境歌手比赛系统(SCS)在ViSUaIStUdiO2022平台下开辟,操作系统:Windows8.1。硬件环境:处理器:I

2、nteI(R)Core(TM)2.70GHz内存:8.00GB系统类型:64位操作系统三、 实验课题分析(主要的模块功能、流程图)3.1 歌手比赛系统的主要功能歌手比赛系统(SCS)主要功能为:选手信息管理、评委打分管理。可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等。详细的系统功能结构为图1所示。图1系统结构图系统各模块的功能具体描述为:1、菜单模块根据用户需求进行选择。菜单模块包括:(1)输入选手数据;(2)评委打分;(3)成绩排序(按平均分);(4)数据查询;(5)追加学生数据;(6)写入数据文件;(7)退出系统。2、选手模块存储选手的姓名、编号、一个评委类,以

3、及该选手的平均分和总分。3、评委模块存储10个评委对一个选手的打分情况。计算总分功能:根据10个评委的打分(去掉最高分和最低分),计算选手的总分。计算平均分功能:根据10个评委的打分(去掉最高分和最低分),计算选手的平均分。还有2个辅助功能:寻觅最高分和最低分。3.2 系统分析及设计系统涉及对象有两个基本类:选手类和评委类。还有一个菜单类。可以采用面向对象的方式实现歌手比赛系统,根据不同的需求,分为选手类和评委类。其中选手类中以评委类为成员变量。系统的主要的类结构如图2所示。图2系统主要类结构图分别设计菜单类、选手类、评委类,菜单类提供选择功能。用文本文件进行数据的保存,需要保存的数据主要包括

4、选手的编号、信息、平均分和排名等。3.3 系统的实现(1)类的编写系统工程名为:Testo包含了StUdem类(选手类),JUdge类(图书类)两个基本类,另设menu类,进行具体功能的选择及实现。StUdent类包含选手的编号、姓名、评委的打分(JUdge声明的对象obj)、选手的总分和平均分。JUdge类包含10个评委的打分。具体类结构声明如下:Student类:classStudentpublic:voidsetID(stringID);voidsetName(stringname);voidsetbj(Judge&j);voiidsetSUM(doublesum);voidsetAVE

5、(doubleave);stringgetID();stringgetName();Judgegetbj();doublegetSUM();doublegetAVE();Student(Studentft);Student(void);Student(void);private:stringID;stringname;Judgeobj;doubleSUM;doubleAVE;);Menu类:classmenu(public:voidSeIeCt();选择操作voidInputMessageO;输入选手信息voidinputGradc();评委打分voidSOrt();根据选手成绩进行排序voi

6、dCOnSUlt();/查询某个选手的成绩voidinsert();插入新选手的信息和成绩voidinput();将选手数据写入文件menu(void);menu(void);private:intCoUnt;计数,共有多少组数据StudentstuMAX;JudgejudMAX;;(3)交互界面以及登录菜单的实现系统运行开始的界面如图5所示:图5开始登录界面主要通过选择结构和循环结构实现界面的前进和后退。例如,第一个登录界面浮现7个选择:1.输入选手数据,2.评委打分,3.成绩排序(按平均分)4.数据查询5.追加选手数据6.写入数据文件7.退出系统。用switchcase分别实现,选择之后转

7、到下一个界面。四、 实验调试、测试、运行记录及分析系统在调试测试过程中遇到若干问题,无非经过子细反复的检查已经消除各种bug。主要的测试经过如下:开始页面:C:Windowssystem32cmd.exeMAamaaaaaaammrrmamARMAAa Xa也进入蚊手匕寒.系冼KKK*a*MltKaaKKa木*内i输入选手数据2评委打分3.成绩排序(按平均分)4.数据式询5追加选手数据6.写入数据文件1.退出系统语选择操作项目:在开始界面输入“1”即可跳转到输入选手信息界面,输入选手信息。输入选手信息完毕后,自动返回开始页面。输入“2”,即可跳转到评委打分页面。为各选手打分。输入分数完毕后,自

8、动返回至开始页面。C:Windowssystem32cmd.exe-iXAlfI分贝下各位一委打分(在10位曲S勺9Ol的通干的分Ibr99rsEi弓与O8的通手的分依:1231S5321曲与力m的汉F跑分收,235Crt912三号勺M的甘至的分敷|B65TrS3版9TWS的口平的分用344)565)M麻号为WniE千的力如12345678919W4为M的dF的分垢235(T1919输入“3”,跳转到排序页面,根据选手的平均分进行排名。排序完毕后,自动返回到开始页面。aC:Windowssystem32cmd.exe一0IB宸杆外作0目3”右理史Jfttt炉二字突灰 t,R*王MP江 人 8

9、S 2 2 I t 2 办各名名名名各3 3n姓ttnft娃输入“4”,跳转到数据查询页面。输入想查询的选手的编号,即可得知该选手的10位评委的打分。查询完毕后,自动跳转到开始页面。MC:Windowssystem32cmd.exe-01.a.k?Si(I-向输入牛育闺的靠手的0号第9位怦委的H 第二件曲! fi5t(M19嚣分)为:M平均分(皂棹品苔分和胃分)为55输入“5”,跳转到追加选手数据页面。输入新插入的选手的编号及姓名,以及10个评委对该选手的打分。为验证选手数据已更新,进行查询操作及排序操作。,欢理近人Iti人贝激m在人为羊侑0号及姓名OS bttr)ut tr席昌府工委打分收理

10、城人敏子比签累蔬,1怯入好手效娓2W委打分,.反较可序(量平均分)-5.:eueT*写入我国文传惊?MK0目MaJe人杳询贝武;ta:3的凶下的代填如下IM位讦舞而你忖2”委力;|什中3的可.:*.*:.nPP5,.-.*F芽C1WFU第7工匈J*忤讦要”什第,沙委普,、髭:M10化评委的打5GHAl*a.-i*3f,j1中:,委II分1。第T位评叠命J分g;9位讦Wem分星:1。年9?讦器的打分外,第1位评珈打分新!的分(去惊第吕分*谒代分)为”卬整讲奏的打分g,1界2憧田晏的力分区:9第B位件与的打分后1第T1我的打什杜:,第S位,委/Tj和9案位严受的打分g:Ie帚十?坪委的打分爰:同,

11、名娄的打分如早9仁产委由“为&9卑10归.千矍武打分为5t数施询5道施为手我再耳人致械文可7.AtbKtt情思择序作坨目:3国观比人特序.口面?cttttr一字堂4t 大 zxbu .隰;一Ql 江 必!.:-? 113J5Q京-fct%l M 弊M4iHnn9iMn *tMM 康黑M2 JiJtttllft遇到的问题及解决方法如下:问题1:问题描述:很少使用文件的读取方法,因此一开始在实现将信息写入文件的功能时遇到了艰难,不知如何下手。解决方法:利用网络资源,搜索c+的读写文件方式,在稍作修改后,应用到本次实验中。成功实现了文件的读写。图6调试测试问题1五、实验总结我设计的歌手比赛系统基本满

12、足任务书的功能要求,类的结构和关系清晰,功能完善,完成为了歌手比赛系统的基本功能,能正常运行。存在的缺点主要是数据存储方面,因评委惟独十人,不存在大批量的数据,因此采用基本的数组结构存储数据。其次在存储选手信息方面,采用了类的数组方式,有浪费内存的弊端,并且,一旦选手人数过多,也会影响程序效率。可以用更好的数据存储方式来存储数据,例如vector等。通过这次C+的大型实验,我深刻的明白到:课本知识与实践能力相结合的重要性。要想把一门专业课程学好,必须增强自己的动手实践能力,更多的实践才干让我们的编程能力有更多的提高。并且,我们也要充分利用好网络资源,写代码的过程其实是一个复习旧知识、学习新知识

13、的过程,当我们遇到不明白的地方,或者对程序功能抱有疑问时,要学会自己去查找资料并且解决问题,而网络资源能帮我们解答不少基本的疑问。充分利用好网络的代码资源,不断充实自己、丰富自己的代码知识。六、附录:源代码Judge,h#includeusingnamespacestd;classJudgepublic:voidsetGrade(doubleg10);double*getGrade();voiddisplay();doubleSUInGrade();计算总分doubleaveGrade();计算平均分doublegetMax();辅助函数,寻觅最高分doublegetMin();辅助函数,寻觅

14、最低分intjudgeN();Judge(void);Judge(Judgefe);zvJudge(void);private:doublegrade10;);Judge,cpptfinclude*Judge,h*Judge:Judge(void)for(inti=0;i10;i+)gradei=0;)Judge:Judge(Judge&j)for(inti=0;i10;i+)gradei=j.gradei;)Judge:Judge(void)voidJudge:SetGrade(doubleg10)for(inti=0;i10;i+)gradei=gi;)double*Judge:getGr

15、adeOreturngrade;)voidJudge:displayOfor(inti=0;i10;i+)*gradeiendl;CoUt第i+k位评委的打分是:)doubleJudge:SumGrade()(doublemax=getMax();doublemin=getMin();doubleSum=0;for(inti=0;i10;i+)(Sum-Sum+gradei;)Sum=Sum-max;Sum=Sum-min;returnSum;)doubleJudge:aveGrade()doubleAve;doublemax=getMax();doublemin=getMin();doubl

16、eSum=0;for(inti=0:i10;i+)Sum-Sum+gradei;Sum=Sum-max;Sum=Sum-min;Ave=Sum/8;returnAve;)doubleJUdge:getMax()辅助函数,寻觅最高分doublemax-0;for(inti=0;i10;i+)if(maxgradei)max=gradei;)returnmax;)doubleJUdge:getMin()辅助函数,寻觅最低分(doublemin=100;for(inti=0;igradei)min=gradei;returnmin;)intJudge:judgeN()(if(grade0=0)ret

17、urn1;elsereturn0;)Student,hincludeusingnamespacestd;#include#includeJudge,h”classStudentpublic:voidsetID(stringID);voidsetName(stringname);voidsetbj(Judge&j);voidsetSUM(doublesum);voidsetAVE(doubleave);stringgetID();stringgetName();Judgegetbj();doublegetSUM();doublegetAVE();intjudgeNull();/判断是否为空Stu

18、dent(Student);Student(void);zvStudent(void);private:stringID;stringname;Judgeobj;doubleSUM;doubleAVE;);Student,cppinclude*Student.hStudent:Student(void)Student:Student(Student&s)(ID=s.getID();name=s.getName();AVE=s.getAVE();SUM=s.getSUM();obj=s.getbj();)Student:zvStudent(void)voidStudent:setID(strin

19、gid)ID=id;)voidStudent:setName(stringn)name=n;)voidStudent:setbj(Judge&j)obj=Judge(j);)voidStudent:setSUM(doublesum)SUM=sum;)voidStudent:setAVE(doubleave)AVE=ave;)stringStudent:getID()returnID;)stringStudent:getName()returnname;doubleStudent:getSUM()(returnSUM;doubleStudent:getAVE()returnAVE;)JudgeS

20、tudent:getbj()returnobj;)intStudent:judgeNull()if(ID.empty()&name.empty()return1;elsereturn0;)menu,h#includettinclude#includeStudent,h*#defineMAX1000usingnamespacestd;classmenupublic:voidSeleCt();选择操作voidinputMessage();输入选手信息voidinputGrade();评委打分voidsort。;根据选手成绩排序(平均分)voidConSUIt();查询某个选手的成绩voidinse

21、rt。;插入某个新选手的信息和成绩voidinput();将选手数据写入文件menu(void);menu(void);private:intCOUrit;计数,共有多少组数据StudentstuMAX;JudgejudMAX;);menu,cpp#includeStdAfx.h#include*menu.h*menu:menu(void)count=0;newcount=0;ifstreamf(*C:UsersappleDesktopdata.txt*);if(!f)(cout*openerror!*count;for(inti=0;ifIDfname;stui.setID(fID);stu

22、i.setName(fname);doublex10;for(intj=0;jxj;judi.setGrade(x);stui.setbj(judi);stui.setAVE(judi.aveGrade();stui.setSUM(judi.SumGrade();f.close();)menu:menu(void)voidmenu:selectOwhile(l)charn;cout*欢迎进入歌手比赛系统*j*endlendl;cout*tttl.输入选手数据“endl;cout*ttt2.评委打分endl;cout*ttt3.成绩排序(按平均分)*endl;cout*ttt4.数据查询endl

23、;cout*ttt5.追加选手数据endl;cout*ttt6.写入数据文件endl;cout*ttt7.退出系统endl;coutendlendlendl;COUtn;switch(n)case,:inputMessage();break;case,2,:inputGrade();break;case,3,:sortO;break;case4:consult();break;case,5,:insertO;break;case6:input();break;case,7,:return;break;default:COUt。输入指令错误endl;)voidmenu:InputMessage(

24、)COUt*欢迎进入*endlendl;coutn;coutendlendlendl;cout请输入各选手信息(包括编号及姓名)endl;stringID;stringname;for(inti=count;iIDname;以下判断ID是否重复boolpank=true;for(intj=0;jcount;j+)(if(ID=stuj.getID()(pank=false;CoUt”已存在ID相同的选手,请重新输入!选手信息页面“endl;return;stui.SetID(ID);stui.setName(name);)/count=n+count;newcount=n;coutendlen

25、dlendl;voidmenu:inputGrade()if(stu0.judgeNull()COUt”无选手信息!操作错误!返回开始页面。*endlendlendl;elsecout*欢迎进入评委打分页面*endlendl;CoUt”请各位评委打分(共10位评委):endl;for(inti=count;i(count+newcount);i+)doublegrade10;CoUt编号为stui.getID()”的选手的分数:endl;for(intj=0;jgradej;)judi.SetGrade(grade);stui.setbj(judi);stui.setAVE(judi.aveG

26、rade();stui.setSUM(judi.SumGrade0);count=count+newcount;coutendlendlendl;)voidmenu:sortOif(judO.judgeN()(CoUt”无选手分数信息!操作错误!返回开始页面。*endlendlendl;elseCOUta*。欢迎进入排序页面!“”*endend;CoUt”各选手按照平均分从高到低的排序如下endl;以下进行冒泡排序Studenttemp;Student*newStu=newStUdentcount;排序用的新的数组for(intp=0;pcount;p+)(newStup=stup;)for(

27、inti=O;icount-1;i+)for(intj=i+1;jcount;j+)(doubleavel=newStui.getAVE();doubleave2=newStuj.getAVE();if(avelave2)(temp=newStui;newStui=newStuj;newStuj=temp;for(intk=0;kcount;k+)(stringID=newStuk.getID();stringname=newStuk.getName();CoUt编号:*ID姓名:*nameendl;coutendlendlendl;)voidmenu:consultO(cout*欢迎进入查询

28、页面*endlendl;cout”请输入想查询的选手的编号:*ID;intindex;标记查询到的该选手的下标coutendl;for(inti=0;icount;i+)(if(ID=stui.getID()(index=i;if(stui.judgeNull()(coutC无选手分数信息!操作错误!返回开始页面。*endlendlendl;else(CoUt编号为:的选手的成绩如下”endlendl;stuindex,getbj().display();cout*总分(去掉最高分和最低分)为:*stuindex,getbjO.SumGradeOendl;cout*平均分(去掉最高分和最低分)

29、为:stuindex.getbjO.aveGradeOendl;break;if(i=count-1)COUt不存在该选手,输入错误,返回开始页面!;coutendlendlendl;voidmenu:insert()cout*欢迎进入插入页面“*,e11d1endl;COUt请输入选手的编号及姓名ID;cinname;boolpank=true;for(inti=0;icount;i+)if(ID=stui.getID()cout*已存在ID相同的选手,请重新输入!endl;Pank=false;return;if(pank)stucount.setID(ID);stucount.setNa

30、me(name);COUt”请各位评委打分endl;doublegrade10;for(inti=0;igradei;Judgej;j.SetGrade(grade);stucount.setAVE(j.aveGradeO);stucount.setSUM(j.sumGrade();stucount,setbj(j);judcount.SetGrade(grade);count+;newcount+;coutendlendlendl;)voidmenu:input()(ofstreamf(*C:UsersappleDesktopdata.txt*);if(!f)cout*openerror!*

31、endl;exit(l);fcountendl;for(inti=O;icount;i+)fstui.getID()*stui.getName()”;for(intj=O;j10;j+)(fjudi.getGrade()j*”;fendl;)f.close();)Test,cpp#include*menu.h*int_tmain(intargc,_TCHAR*argv)(menum;m.select();return0;Judge类classJudge(public:voidSetGrade(doubleg10);double*getGrade();voiddisplay();doubleSUnlGrade();计算总分doubleaveGrade();计算平均分doublegetMax();辅助函数,才觅最高分doublegetMin();辅助函数,寻觅最低分Judge(void);Judge(JudgeA);-Judge(void);private:doublegrade10;);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号