欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

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

    • 资源ID:5852720       资源大小:165.59KB        全文页数:33页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    选H工学大个大类基础课程大型实验2022/2022(2)实验题目歌手比赛系统学生姓名学生学号学生班级任课教师提交日期计算机科学与技术学院歌手比赛系统实验报告一、大型实验的内容歌手比赛系统(SCS:SingerContestSystem)用于对一次歌手比赛的成绩进行管理,要求完成的主要的功能包括选手信息管理、评委打分管理。可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等工作。要求使用学习过的C/C+程序设计的知识完成歌手比赛系统的设计与实现。二、运彳再境歌手比赛系统(SCS)在ViSUaIStUdiO2022平台下开辟,操作系统:Windows8.1。硬件环境:处理器:InteI(R)Core(TM)2.70GHz内存:8.00GB系统类型:64位操作系统三、 实验课题分析(主要的模块功能、流程图)3.1 歌手比赛系统的主要功能歌手比赛系统(SCS)主要功能为:选手信息管理、评委打分管理。可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等。详细的系统功能结构为图1所示。图1系统结构图系统各模块的功能具体描述为:1、菜单模块根据用户需求进行选择。菜单模块包括:(1)输入选手数据;(2)评委打分;(3)成绩排序(按平均分);(4)数据查询;(5)追加学生数据;(6)写入数据文件;(7)退出系统。2、选手模块存储选手的姓名、编号、一个评委类,以及该选手的平均分和总分。3、评委模块存储10个评委对一个选手的打分情况。计算总分功能:根据10个评委的打分(去掉最高分和最低分),计算选手的总分。计算平均分功能:根据10个评委的打分(去掉最高分和最低分),计算选手的平均分。还有2个辅助功能:寻觅最高分和最低分。3.2 系统分析及设计系统涉及对象有两个基本类:选手类和评委类。还有一个菜单类。可以采用面向对象的方式实现歌手比赛系统,根据不同的需求,分为选手类和评委类。其中选手类中以评委类为成员变量。系统的主要的类结构如图2所示。图2系统主要类结构图分别设计菜单类、选手类、评委类,菜单类提供选择功能。用文本文件进行数据的保存,需要保存的数据主要包括选手的编号、信息、平均分和排名等。3.3 系统的实现(1)类的编写系统工程名为:Testo包含了StUdem类(选手类),JUdge类(图书类)两个基本类,另设menu类,进行具体功能的选择及实现。StUdent类包含选手的编号、姓名、评委的打分(JUdge声明的对象obj)、选手的总分和平均分。JUdge类包含10个评委的打分。具体类结构声明如下:Student类:classStudentpublic:voidsetID(stringID);voidsetName(stringname);voidsetbj(Judge&j);voiidsetSUM(doublesum);voidsetAVE(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();根据选手成绩进行排序voidCOnSUlt();/查询某个选手的成绩voidinsert();插入新选手的信息和成绩voidinput();将选手数据写入文件menu(void);menu(void);private:intCoUnt;计数,共有多少组数据StudentstuMAX;JudgejudMAX;;(3)交互界面以及登录菜单的实现系统运行开始的界面如图5所示:图5开始登录界面主要通过选择结构和循环结构实现界面的前进和后退。例如,第一个登录界面浮现7个选择:1.输入选手数据,2.评委打分,3.成绩排序(按平均分)4.数据查询5.追加选手数据6.写入数据文件7.退出系统。用switchcase分别实现,选择之后转到下一个界面。四、 实验调试、测试、运行记录及分析系统在调试测试过程中遇到若干问题,无非经过子细反复的检查已经消除各种bug。主要的测试经过如下:开始页面:C:Windowssystem32cmd.exeMAamaaaaaaammrrmamARMAAa Xa也进入蚊手匕寒.系冼KKK*a*MltKaaKKa木*内i输入选手数据2评委打分3.成绩排序(按平均分)4.数据式询5追加选手数据6.写入数据文件1.退出系统语选择操作项目:在开始界面输入“1”即可跳转到输入选手信息界面,输入选手信息。输入选手信息完毕后,自动返回开始页面。输入“2”,即可跳转到评委打分页面。为各选手打分。输入分数完毕后,自动返回至开始页面。C:Windowssystem32cmd.exe-iXAlf<I分贝®下各位一委打分(在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”右理史<!75I11Q!序*>Jfttt炉二字突灰 t,R*王MP江 人 8 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席昌府工委打分收理城人敏子比签累蔬,1怯入好手效娓2W委打分,.反较可序(量平均分)-5.:eueT»*写入我国文传惊?MK0目MaJe人杳询贝武;ta:3的凶下的代填如下IM位讦舞而你忖2”委力;|什中3'的可.:*.*:.¾nPP5,.-.*F'芽C1WFU第7"工匈J*忤讦要”"什第,沙委普,、髭:M10化评委的打5¾GHAl*a<平均分(宏0金各分4输入“6”,将所有选手的信息,包括编号、信息、10个评委的打分,写入数据文件k座1S人敏畀比密掌llMMMllMMMltKMRMMMMKRMMMMMM12 .律要升分3,戊快拚停性干的分Q数相窖比3 .3加运平致隔.写人奴据文件7,出常统data.txt记事本文件时献I(E)格式(。)M(V)特助(三)RO O 9 511341 8O 62993918 73875898 84786788 95686679 95575569 84453459 73364349 62264239 51超5312 r 红灰突然毛宇三tte 李江王陈毛金张bll 回003004005006湍输入“7”,退出系统。容错测试:1.如果输入相同ID的选手:C:Windowssystem32cmd.exetfMMMKMtfMMMKMMMMMMKMMWMMM(工筌进人掌千之冬MMKMMMMMVWMMHKNMMWMMVMMBi1 .输入选手变密2才委红分.*HH(技平均分J*AM1S.追骐限手数堀G;二1清城、昌送FG70片IB弓及做名,BOi”Ero*xr.请鼾*人!2 .如果插入相同的选手:C:Windowssystem32cmd.exe1询人G年收感3 .也找媒可L搐千峋分*.IUfl备询5*r:-L6耳人Jwi文存LiS出演噎3 .如果输入了选手ID和姓名,但还未进行打分就进行排序:4 .程序开始就选择5,追加选手数据,测试插入是否成功(数据查询和排序)C:Windowssystem32cmd.exe2工委fj*九成5排序按平均分)AAtt50D020rxc向各位部妾打分!e919109IO9g曲当入题WiLW筝柒“3,IA棒并作成目.,致阿忐人IF的页面号的,2or.*r1i.I郡靡::l*5 Vf*1位I;拿曾门分4:1。中干美KHJ分9s>'.-i*3f>,<j1中':",委I"I分1。第T位评叠命J分g;9位讦Wem分星:1。年9?讦器的打分外,第1位评珈打分新!的分(去惊第吕分*谒代分)为”卬整讲奏的打分g,1界2憧田晏的力分区:9第B位件与的打分后1第T1我的打什杜:,第S位,委/Tj和9案位严受的打分g:Ie帚十?坪委的打分爰:同,名娄的打分如早9仁产委由“为&9卑10归.千矍武打分为5t<rF5tFBfc÷t)M于均分(去掉艮16分和最长牙)为1«观理遗人取平此委系为1 M1珞手收据2 +委打分3 .贰贞巧厚I/干均分>数施询5道施为手我再耳人致械文可7.AtbKtt情思择序作坨目:3国观比人特序.口面?cttttr一字堂4"t 大 zxbu .隰;一£Ql 江 必!>.:-?> 113J5Q>京-fct%l M 弊«M«4iHnn9iMn *tMM 康黑M2 JiJttt>llft½遇到的问题及解决方法如下:问题1:问题描述:很少使用文件的读取方法,因此一开始在实现将信息写入文件的功能时遇到了艰难,不知如何下手。解决方法:利用网络资源,搜索c+的读写文件方式,在稍作修改后,应用到本次实验中。成功实现了文件的读写。图6调试测试问题1五、实验总结我设计的歌手比赛系统基本满足任务书的功能要求,类的结构和关系清晰,功能完善,完成为了歌手比赛系统的基本功能,能正常运行。存在的缺点主要是数据存储方面,因评委惟独十人,不存在大批量的数据,因此采用基本的数组结构存储数据。其次在存储选手信息方面,采用了类的数组方式,有浪费内存的弊端,并且,一旦选手人数过多,也会影响程序效率。可以用更好的数据存储方式来存储数据,例如vector等。通过这次C+÷的大型实验,我深刻的明白到:课本知识与实践能力相结合的重要性。要想把一门专业课程学好,必须增强自己的动手实践能力,更多的实践才干让我们的编程能力有更多的提高。并且,我们也要充分利用好网络资源,写代码的过程其实是一个复习旧知识、学习新知识的过程,当我们遇到不明白的地方,或者对程序功能抱有疑问时,要学会自己去查找资料并且解决问题,而网络资源能帮我们解答不少基本的疑问。充分利用好网络的代码资源,不断充实自己、丰富自己的代码知识。六、附录:源代码Judge,h#include<iostream>usingnamespacestd;classJudgepublic:voidsetGrade(doubleg10);double*getGrade();voiddisplay();doubleSUInGrade();计算总分doubleaveGrade();计算平均分doublegetMax();辅助函数,寻觅最高分doublegetMin();辅助函数,寻觅最低分intjudgeN();Judge(void);Judge(Judgefe);zvJudge(void);private:doublegrade10;);Judge,cpptfinclude*Judge,h*Judge:Judge(void)for(inti=0;i<10;i+)gradei=0;)Judge:Judge(Judge&j)for(inti=0;i<10;i+)gradei=j.gradei;)Judge:Judge(void)voidJudge:SetGrade(doubleg10)for(inti=0;i<10;i+)gradei=gi;)double*Judge:getGradeOreturngrade;)voidJudge:displayOfor(inti=0;i<10;i+)*<<gradei<<endl;CoUt«"第"<<i+k<"位评委的打分是:)doubleJudge:SumGrade()(doublemax=getMax();doublemin=getMin();doubleSum=0;for(inti=0;i<10;i+)(Sum-Sum+gradei;)Sum=Sum-max;Sum=Sum-min;returnSum;)doubleJudge:aveGrade()doubleAve;doublemax=getMax();doublemin=getMin();doubleSum=0;for(inti=0:i<10;i+)Sum-Sum+gradei;Sum=Sum-max;Sum=Sum-min;Ave=Sum/8;returnAve;)doubleJUdge:getMax()辅助函数,寻觅最高分doublemax-0;for(inti=0;i<10;i+)if(max<gradei)max=gradei;)returnmax;)doubleJUdge:getMin()辅助函数,寻觅最低分(doublemin=100;for(inti=0;i<10;i+)(if(min>gradei)min=gradei;returnmin;)intJudge:judgeN()(if(grade0=0)return1;elsereturn0;)Student,hinclude<iostream>usingnamespacestd;#include<string>#include"Judge,h”classStudentpublic:voidsetID(stringID);voidsetName(stringname);voidsetbj(Judge&j);voidsetSUM(doublesum);voidsetAVE(doubleave);stringgetID();stringgetName();Judgegetbj();doublegetSUM();doublegetAVE();intjudgeNull();/判断是否为空Student(Student);Student(void);zvStudent(void);private:stringID;stringname;Judgeobj;doubleSUM;doubleAVE;);Student,cppinclude*Student.h"Student: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(stringid)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;)JudgeStudent:getbj()returnobj;)intStudent:judgeNull()if(ID.empty()&&name.empty()return1;elsereturn0;)menu,h#include<iostream>ttinclude<fstream>#include"Student,h*#defineMAX1000usingnamespacestd;classmenupublic:voidSeleCt();选择操作voidinputMessage();输入选手信息voidinputGrade();评委打分voidsort。;根据选手成绩排序(平均分)voidConSUIt();查询某个选手的成绩voidinsert。;插入某个新选手的信息和成绩voidinput();将选手数据写入文件menu(void);menu(void);private:intCOUrit;计数,共有多少组数据StudentstuMAX;JudgejudMAX;);menu,cpp#include"StdAfx.h"#include*menu.h*menu:menu(void)count=0;newcount=0;ifstreamf(*C:UsersappleDesktopdata.txt*);if(!f)(cout<<*openerror!*<<endl;exit(l);)f>>count;for(inti=0;i<count;i+)stringfID,fname;f>>fID>>fname;stui.setID(fID);stui.setName(fname);doublex10;for(intj=0;j<10;j+)f>>xj;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*<<endl<endl;cout<<*tttl.输入选手数据“<<endl;cout<<*ttt2.评委打分"<<endl;cout<<*ttt3.成绩排序(按平均分)*<<endl;cout<<*ttt4.数据查询"<<endl;cout<<*ttt5.追加选手数据"<<endl;cout<<*ttt6.写入数据文件"<<endl;cout<<*ttt7.退出系统"<<endl;cout<<endl<<endl<<endl;COUt<<”请选择操作项目:”;cin>>n;switch(n)case,:inputMessage();break;case,2,:inputGrade();break;case,3,:sortO;break;case'4':consult();break;case,5,:insertO;break;case'6':input();break;case,7,:return;break;default:COUt。"输入指令错误"<<endl;)voidmenu:InputMessage()COUt«*<<*欢迎进入*<<*<<endl<<endl;cout<<”请输入共有几位选手:”;intn;cin>>n;cout<<endl<<endl<<endl;cout<<"请输入各选手信息(包括编号及姓名)"<<endl;stringID;stringname;for(inti=count;i<(n+count);i+)cin>>ID>>name;以下判断ID是否重复boolpank=true;for(intj=0;j<count;j+)(if(ID=stuj.getID()(pank=false;CoUt«”已存在ID相同的选手,请重新输入!选手信息页面“<<endl;return;stui.SetID(ID);stui.setName(name);)/count=n+count;newcount=n;cout<<endl<<endl<<endl;voidmenu:inputGrade()if(stu0.judgeNull()COUt«”无选手信息!操作错误!返回开始页面。*<<endl<<endl<<endl;elsecout<<*<<*欢迎进入评委打分页面*<<*<<endl<<endl;CoUt<<”请各位评委打分(共10位评委):"<<endl;for(inti=count;i<(count+newcount);i+)doublegrade10;CoUt<<"编号为"<<stui.getID()<<”的选手的分数:"<<endl;for(intj=0;j<10;j+)(cin>>gradej;)judi.SetGrade(grade);stui.setbj(judi);stui.setAVE(judi.aveGrade();stui.setSUM(judi.SumGrade0);count=count+newcount;cout<<endl<<endl<<endl;)voidmenu:sortOif(judO.judgeN()(CoUt«”无选手分数信息!操作错误!返回开始页面。*<<endl<<endl<<endl;elseCOUta"*"。"欢迎进入排序页面!“<”*"«endend;CoUt<<”各选手按照平均分从高到低的排序如下"<<endl;以下进行冒泡排序Studenttemp;Student*newStu=newStUdentcount;排序用的新的数组for(intp=0;p<count;p+)(newStup=stup;)for(inti=O;i<count-1;i+)for(intj=i+1;j<count;j+)(doubleavel=newStui.getAVE();doubleave2=newStuj.getAVE();if(avel<ave2)(temp=newStui;newStui=newStuj;newStuj=temp;for(intk=0;k<count;k+)(stringID=newStuk.getID();stringname=newStuk.getName();CoUt<<"编号:*<<ID<<<姓名:*<<name<<endl;cout<<endl<<endl<<endl;)voidmenu:consultO(cout<<*<<*欢迎进入查询页面*<<*<<endl<<endl;cout«”请输入想查询的选手的编号:*<<endl;stringID;cin>>ID;intindex;标记查询到的该选手的下标cout<<endl;for(inti=0;i<count;i+)(if(ID=stui.getID()(index=i;if(stui.judgeNull()(cout<C无选手分数信息!操作错误!返回开始页面。*<<endl<<endl<<endl;else(CoUt<<"编号为:的选手的成绩如下”<<endl<<endl;stuindex,getbj().display();cout<<*总分(去掉最高分和最低分)为:*«stuindex,getbjO.SumGradeO<<endl;cout<<*平均分(去掉最高分和最低分)为:"<<stuindex.getbjO.aveGradeO<<endl;break;if(i=count-1)COUt<<不存在该选手,输入错误,返回开始页面!;cout<<endl<<endl<<endl;voidmenu:insert()cout<<*<<*欢迎进入插入页面“<<*,<<e11d1«endl;COUt«"请输入选手的编号及姓名"<<endl;stringID;stringname;cin>>ID;cin>>name;boolpank=true;for(inti=0;i<count;i+)if(ID=stui.getID()cout<<*已存在ID相同的选手,请重新输入!"<<endl;Pank=false;return;if(pank)stucount.setID(ID);stucount.setName(name);COUt«”请各位评委打分"<<endl;doublegrade10;for(inti=0;i<10;i+)cin>>gradei;Judgej;j.SetGrade(grade);stucount.setAVE(j.aveGradeO);stucount.setSUM(j.sumGrade();stucount,setbj(j);judcount.SetGrade(grade);count+;newcount+;cout<<endl<<endl<<endl;)voidmenu:input()(ofstreamf(*C:UsersappleDesktopdata.txt*);if(!f)cout<<*openerror!*<<endl;exit(l);f<<count<<endl;for(inti=O;i<count;i÷+)f<<stui.getID()«*<<stui.getName()<<<”;for(intj=O;j<10;j+)(f<<judi.getGrade()j«*”;f<<endl;)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;);

    注意事项

    本文(大型实验报告(歌手比赛系统).docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开