ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:303.09KB ,
资源ID:13805446      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13805446.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大型实验报告材料歌手比赛系统.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

大型实验报告材料歌手比赛系统.docx

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

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

3、)数据查询; (5)追加学生数据; (6)写入数据文件;(7)退出系统。2、选手模块存储选手的姓名、编号、一个评委类,以及该选手的平均分和总分。3、评委模块存储10个评委对一个选手的打分情况。计算总分功能:根据10个评委的打分(去掉最高分和最低分),计算选手的总分。计算平均分功能:根据10个评委的打分(去掉最高分和最低分),计算选手的平均分。还有2个辅助功能:寻找最高分和最低分。3.2 系统分析及设计系统涉及对象有两个基本类:选手类和评委类。还有一个菜单类。可以采用面向对象的方式实现歌手比赛系统,根据不同的需求,分为选手类和评委类。其中选手类中以评委类为成员变量。系统的主要的类结构如图2所示。

4、图2 系统主要类结构图分别设计菜单类、选手类、评委类,菜单类提供选择功能。用文本文件进行数据的保存,需要保存的数据主要包括选手的编号、信息、平均分和排名等。 3.3系统的实现 (1)类的编写 系统工程名为:Test。包含了Student类(选手类),Judge类(图书类)两个基本类,另设menu类,进行具体功能的选择及实现。 Student类包含选手的编号、姓名、评委的打分(Judge声明的对象obj)、选手的总分和平均分。Judge类包含10个评委的打分。具体类结构声明如下: Student类:class Studentpublic: void setID(string ID); void

5、setName(string name); void setObj(Judge& j); voiid setSUM(double sum); void setAVE(double ave); string getID(); string getName(); Judge getObj(); double getSUM(); double getAVE(); Student(Student&); Student(void); Student(void);private: string ID; string name; Judge obj; double SUM; double AVE; Judg

6、e类class Judgepublic: void setGrade(double g10); double* getGrade(); void display(); double sumGrade();/计算总分 double aveGrade();/计算平均分 double getMax();/辅助函数,寻找最高分 double getMin();/辅助函数,寻找最低分 Judge(void); Judge(Judge&); Judge(void);private: double grade10; Menu类:class menupublic: void select();/选择操作 vo

7、id inputMessage();/输入选手信息 void inputGrade();/评委打分 void sort();/根据选手成绩进行排序 void consult();/查询某个选手的成绩 void insert();/插入新选手的信息和成绩 void input();/将选手数据写入文件 menu(void); menu(void);private: int count ;/计数,共有多少组数据 Student stuMAX; Judge judMAX; (3)交互界面以及登录菜单的实现 系统运行开始的界面如图5所示:图5 开始登录界面 主要通过选择结构和循环结构实现界面的前进和后

8、退。例如,第一个登录界面出现7个选择:1.输入选手数据,2.评委打分,3.成绩排序(按平均分)4.数据查询5.追加选手数据6.写入数据文件7.退出系统。用switch case分别实现,选择之后转到下一个界面。四、 实验调试、测试、运行记录及分析 系统在调试测试过程中遇到若干问题,不过经过仔细反复的检查已经消除各种bug。 主要的测试经过如下:开始页面: 在开始界面输入“1”即可跳转到输入选手信息界面,输入选手信息。输入选手信息完毕后,自动返回开始页面。输入“2”,即可跳转到评委打分页面。为各选手打分。输入分数完毕后,自动返回至开始页面。输入“3”,跳转到排序页面,根据选手的平均分进行排名。排

9、序完毕后,自动返回到开始页面。输入“4”,跳转到数据查询页面。输入想查询的选手的编号,即可得知该选手的10位评委的打分。查询完毕后,自动跳转到开始页面。输入“5”,跳转到追加选手数据页面。输入新插入的选手的编号及姓名,以及10个评委对该选手的打分。为验证选手数据已更新,进行查询操作及排序操作。输入“6”,将所有选手的信息,包括编号、信息、10个评委的打分,写入数据文件。输入“7”,退出系统。容错测试:1.如果输入相同ID的选手:2.如果插入相同的选手:3.如果输入了选手ID和姓名,但还未进行打分就进行排序:4.程序开始就选择5,追加选手数据,测试插入是否成功(数据查询和排序) 遇到的问题及解决

10、方法如下: 问题1:问题描述:很少使用文件的读取方法,因此一开始在实现将信息写入文件的功能时遇到了困难,不知如何下手。解决方法:利用网络资源,搜索c+的读写文件方式,在稍作修改后,应用到本次实验中。成功实现了文件的读写。图6 调试测试问题1五、 实验总结我设计的歌手比赛系统基本满足任务书的功能要求,类的结构和关系清晰,功能完善,完成了歌手比赛系统的基本功能,能正常运行。存在的缺点主要是数据存储方面,因评委只有十人,不存在大批量的数据,因此采用基本的数组结构存储数据。其次在存储选手信息方面,采用了类的数组方式,有浪费内存的弊端,并且,一旦选手人数过多,也会影响程序效率。可以用更好的数据存储方式来

11、存储数据,例如vector等。 通过这次C+的大型实验,我深刻的明白到:课本知识与实践能力相结合的重要性。要想把一门专业课程学好,必须增强自己的动手实践能力,更多的实践才能让我们的编程能力有更多的提高。并且,我们也要充分利用好网络资源,写代码的过程其实是一个复习旧知识、学习新知识的过程,当我们遇到不明白的地方,或者对程序功能抱有疑问时,要学会自己去查找资料并且解决问题,而网络资源能帮我们解答很多基本的疑问。充分利用好网络的代码资源,不断充实自己、丰富自己的代码知识。六、 附录:源代码Judge.h#include using namespace std;class Judgepublic: v

12、oid setGrade(double g10); double* getGrade(); void display(); double sumGrade();/计算总分 double aveGrade();/计算平均分 double getMax();/辅助函数,寻找最高分 double getMin();/辅助函数,寻找最低分 int judgeN(); Judge(void); Judge(Judge&); Judge(void);private: double grade10;Judge.cpp#include Judge.hJudge:Judge(void) for(int i =

13、0; i 10; i+) gradei = 0;Judge:Judge(Judge& j) for(int i = 0; i 10; i+) gradei = j.gradei;Judge:Judge(void)void Judge:setGrade(double g10) for(int i = 0; i 10; i+) gradei = gi; double* Judge:getGrade() return grade;void Judge:display() for(int i = 0; i 10; i+) cout第i+1位评委的打分是:gradeiendl; double Judge

14、:sumGrade() double max = getMax(); double min = getMin(); double Sum = 0; for(int i = 0; i 10; i+) Sum = Sum + gradei; Sum = Sum - max; Sum = Sum - min; return Sum;double Judge:aveGrade() double Ave; double max = getMax(); double min = getMin(); double Sum = 0; for(int i = 0; i 10; i+) Sum = Sum + g

15、radei; Sum = Sum - max; Sum = Sum - min; Ave = Sum / 8; return Ave;double Judge:getMax()/辅助函数,寻找最高分 double max = 0; for(int i = 0; i 10; i+) if(max gradei) max = gradei; return max;double Judge:getMin()/辅助函数,寻找最低分 double min = 100; for(int i = 0; i gradei) min = gradei; return min;int Judge:judgeN()

16、 if(grade0=0) return 1; else return 0;Student.h#include using namespace std;#include #include Judge.hclass Studentpublic: void setID(string ID); void setName(string name); void setObj(Judge& j); void setSUM(double sum); void setAVE(double ave); string getID(); string getName(); Judge getObj(); doubl

17、e getSUM(); double getAVE(); int judgeNull();/ 判断是否为空 Student(Student&); Student(void); Student(void);private: string ID; string name; Judge obj; double SUM; double AVE;Student.cpp#include Student.hStudent:Student(void)Student:Student(Student &s) ID = s.getID(); name = s.getName(); AVE = s.getAVE();

18、 SUM = s.getSUM(); obj = s.getObj();Student:Student(void)void Student:setID(string id) ID = id;void Student:setName(string n) name = n;void Student:setObj(Judge &j) obj = Judge(j);void Student:setSUM(double sum) SUM = sum;void Student:setAVE(double ave) AVE =ave;string Student:getID() return ID;stri

19、ng Student:getName() return name;double Student:getSUM() return SUM;double Student:getAVE() return AVE;Judge Student:getObj() return obj;int Student:judgeNull() if(ID.empty()&name.empty() return 1; else return 0;menu.h#include #include #include Student.h#define MAX 1000using namespace std;class menu

20、public: void select();/选择操作 void inputMessage();/输入选手信息 void inputGrade();/评委打分 void sort();/根据选手成绩排序(平均分) void consult();/查询某个选手的成绩 void insert();/插入某个新选手的信息和成绩 void input();/将选手数据写入文件 menu(void); menu(void);private: int count ;/计数,共有多少组数据 Student stuMAX; Judge judMAX;menu.cpp#include StdAfx.h#incl

21、ude menu.hmenu:menu(void) count = 0; newcount=0; ifstream f(C:UsersappleDesktopdata.txt); if(!f) coutopen error!count; for(int i = 0; i fIDfname; stui.setID(fID); stui.setName(fname); double x10; for(int j = 0; j xj; judi.setGrade(x); stui.setObj(judi); stui.setAVE(judi.aveGrade(); stui.setSUM(judi.

22、sumGrade(); f.close(); menu:menu(void)void menu:select() while(1) char n; cout*欢迎进入歌手比赛系统*endlendl; coutttt1.输入选手数据endl; coutttt2.评委打分endl; coutttt3.成绩排序(按平均分)endl; coutttt4.数据查询endl; coutttt5.追加选手数据endl; coutttt6.写入数据文件endl; coutttt7.退出系统endl; coutendlendlendl; coutn; switch(n) case 1: inputMessage

23、();break; case 2: inputGrade();break; case 3: sort();break; case 4: consult();break; case 5: insert();break; case 6: input();break; case 7: return ;break; default: cout输入指令错误endl; void menu:inputMessage() cout*欢迎进入选手信息页面*endlendl; coutn; coutendlendlendl; cout请输入各选手信息(包括编号及姓名)endl; string ID ; strin

24、g name; for(int i = count; i IDname; /以下判断ID是否重复 bool pank=true; for(int j = 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; coutendlendlendl;void menu:inputGrade() if(stu0.judgeNull() cout无选手信息!操作错误

25、!返回开始页面。endlendlendl; else cout*欢迎进入评委打分页面*endlendl; cout请各位评委打分(共10位评委):endl; for(int i = count; i (count+newcount); i+) double grade10; cout编号为stui.getID()的选手的分数:endl; for(int j = 0; j gradej; judi.setGrade(grade); stui.setObj(judi); stui.setAVE(judi.aveGrade(); stui.setSUM(judi.sumGrade(); count = count+newcount; coutendlendlendl; void menu:sort() if(jud0.judgeN() cout无选手分数信息!操作错误!返回开始页面。endlendlendl; else cout*欢迎进入排序页面!*endlendl; cout各选手按照平均分从高到低的排序如下endl; /以下进行冒泡排序 Student t

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2