大型实验报告(歌手比赛系统).doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 实验 报告 歌手 比赛 系统
- 资源描述:
-
大类基础课程大型实验 2014/2015(2) 实验题目 歌手比赛系统 学生姓名ﻩ 学生学号ﻩ 学生班级 ﻩ 任课教师 ﻩ 提交日期 ﻩ 计算机科学与技术学院 歌手比赛系统 实验报告 一、 大型实验得内容 歌手比赛系统(SCS:Singer Contest System)用于对一次歌手比赛得成绩进行管理,要求完成得主要得功能包括选手信息管理、评委打分管理。可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等工作。要求使用学习过得C/C++程序设计得知识完成歌手比赛系统得设计与实现。 二、 运行环境 歌手比赛系统(SCS)在Visual Studio 2010平台下开发,操作系统:Windows 8、1 。 硬件环境: 处理器:Intel(R) Core(TM) i5—5257M CPU 2、70GHz 2、70GHz 内存:8、00GB 系统类型:64位操作系统 三、 实验课题分析(主要得模块功能、流程图) 3、1 歌手比赛系统得主要功能 歌手比赛系统(SCS)主要功能为:选手信息管理、评委打分管理。可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等。详细得系统功能结构为图1所示。 歌手比赛系统SCS 菜单模块 评委模块 选手模块 图1 系统结构图 系统各模块得功能具体描述为: 1、菜单模块 根据用户需求进行选择。菜单模块包括:(1)输入选手数据;(2)评委打分; (3)成绩排序(按平均分);(4)数据查询; (5)追加学生数据; (6)写入数据文件;(7)退出系统。 2、 选手模块 存储选手得姓名、编号、一个评委类,以及该选手得平均分与总分。 3、评委模块 存储10个评委对一个选手得打分情况。 计算总分功能:根据10个评委得打分(去掉最高分与最低分),计算选手得总分。 计算平均分功能:根据10个评委得打分(去掉最高分与最低分),计算选手得平均分. 还有2个辅助功能:寻找最高分与最低分。 3、2 系统分析及设计 系统涉及对象有两个基本类:选手类与评委类。还有一个菜单类。 可以采用面向对象得方式实现歌手比赛系统,根据不同得需求,分为选手类与评委类。其中选手类中以评委类为成员变量.系统得主要得类结构如图2所示. 菜单类 选手类 评委类 图2 系统主要类结构图 分别设计菜单类、选手类、评委类,菜单类提供选择功能。 用文本文件进行数据得保存,需要保存得数据主要包括选手得编号、信息、平均分与排名等。 3、3系统得实现 (1)类得编写 系统工程名为:Test.包含了Student类(选手类),Judge类(图书类)两个基本类,另设menu类,进行具体功能得选择及实现。 Student类包含选手得编号、姓名、评委得打分(Judge声明得对象obj)、选手得总分与平均分。Judge类包含10个评委得打分。 具体类结构声明如下: l Student类: class Student { public: void setID(string ID); ﻩvoid 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; }; l Judge类 class Judge { public: ﻩvoid setGrade(double g[10]); double* getGrade(); void display(); double sumGrade();//计算总分 double aveGrade();//计算平均分 ﻩdouble getMax();//辅助函数,寻找最高分 ﻩdouble getMin();//辅助函数,寻找最低分 ﻩJudge(void); Judge(Judge&); ~Judge(void); private: double grade[10]; }; l Menu类: class menu { public: ﻩvoid select();//选择操作 void inputMessage();//输入选手信息 void inputGrade();//评委打分 void sort();//根据选手成绩进行排序 void consult();//查询某个选手得成绩 void insert();//插入新选手得信息与成绩 ﻩvoid input();//将选手数据写入文件 menu(void); ﻩ~menu(void); private: int count ;//计数,共有多少组数据 ﻩStudent stu[MAX]; ﻩJudge jud[MAX]; }; (3)交互界面以及登录菜单得实现 系统运行开始得界面如图5所示: 图5 开始登录界面 主要通过选择结构与循环结构实现界面得前进与后退。例如,第一个登录界面出现7个选择:1、输入选手数据,2、评委打分,3、成绩排序(按平均分)4、数据查询5、追加选手数据6、写入数据文件7、退出系统。用switch case分别实现,选择之后转到下一个界面. 四、 实验调试、测试、运行记录及分析 系统在调试测试过程中遇到若干问题,不过经过仔细反复得检查已经消除各种bug。 主要得测试经过如下: 开始页面: 在开始界面输入“1”即可跳转到输入选手信息界面,输入选手信息。 输入选手信息完毕后,自动返回开始页面。 输入“2”,即可跳转到评委打分页面。为各选手打分. 输入分数完毕后,自动返回至开始页面。 输入“3”,跳转到排序页面,根据选手得平均分进行排名。排序完毕后,自动返回到开始页面。 输入“4”,跳转到数据查询页面.输入想查询得选手得编号,即可得知该选手得10位评委得打分。查询完毕后,自动跳转到开始页面。 输入“5”,跳转到追加选手数据页面.输入新插入得选手得编号及姓名,以及10个评委对该选手得打分.为验证选手数据已更新,进行查询操作及排序操作。 输入“6”,将所有选手得信息,包括编号、信息、10个评委得打分,写入数据文件。 输入“7”,退出系统。 容错测试: 1、如果输入相同ID得选手: 2、如果插入相同得选手: 3、如果输入了选手ID与姓名,但还未进行打分就进行排序: 4、程序开始就选择5,追加选手数据,测试插入就是否成功(数据查询与排序) 遇到得问题及解决方法如下: l 问题1: 问题描述:很少使用文件得读取方法,因此一开始在实现将信息写入文件得功能时遇到了困难,不知如何下手。 解决方法:利用网络资源,搜索c++得读写文件方式,在稍作修改后,应用到本次实验中。成功实现了文件得读写。 图6 调试测试问题1 五、 实验总结 我设计得歌手比赛系统基本满足任务书得功能要求,类得结构与关系清晰,功能完善,完成了歌手比赛系统得基本功能,能正常运行。 存在得缺点主要就是数据存储方面,因评委只有十人,不存在大批量得数据,因此采用基本得数组结构存储数据。其次在存储选手信息方面,采用了类得数组方式,有浪费内存得弊端,并且,一旦选手人数过多,也会影响程序效率。可以用更好得数据存储方式来存储数据,例如vector等。 通过这次C++得大型实验,我深刻得明白到:课本知识与实践能力相结合得重要性。要想把一门专业课程学好,必须增强自己得动手实践能力,更多得实践才能让我们得编程能力有更多得提高。并且,我们也要充分利用好网络资源,写代码得过程其实就是一个复习旧知识、学习新知识得过程,当我们遇到不明白得地方,或者对程序功能抱有疑问时,要学会自己去查找资料并且解决问题,而网络资源能帮我们解答很多基本得疑问。充分利用好网络得代码资源,不断充实自己、丰富自己得代码知识。 六、 附录:源代码 Judge、h #include 〈iostream> using namespace std; class Judge { public: void setGrade(double g[10]); ﻩdouble* getGrade(); ﻩvoid display(); double sumGrade();//计算总分 double aveGrade();//计算平均分 ﻩdouble getMax();//辅助函数,寻找最高分 ﻩdouble getMin();//辅助函数,寻找最低分 ﻩint judgeN(); ﻩJudge(void); ﻩJudge(Judge&); ﻩ~Judge(void); private: double grade[10]; }; Judge、cpp #include ”Judge、h” Judge::Judge(void) { for(int i = 0; i 〈 10; i++) ﻩ grade[i] = 0; } Judge::Judge(Judge& j) { for(int i = 0; i < 10; i++) ﻩﻩgrade[i] = j、grade[i]; } Judge::~Judge(void) { } void Judge::setGrade(double g[10]) { ﻩfor(int i = 0; i 〈 10; i++) ﻩ{ grade[i] = g[i]; ﻩ} } double* Judge::getGrade() { return grade; } void Judge::display() { ﻩfor(int i = 0; i< 10; i++) { ﻩ cout〈<”第”〈〈i+1<<"位评委得打分就是:"<〈grade[i]〈<endl; } } double Judge::sumGrade() { double max = getMax(); double min = getMin(); double Sum = 0; ﻩfor(int i = 0; i < 10; i++) { ﻩ Sum = Sum + grade[i]; ﻩ} 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 + grade[i]; } ﻩ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 〈 grade[i]) ﻩmax = grade[i]; ﻩ} return max; } double Judge::getMin()//辅助函数,寻找最低分 { ﻩdouble min = 100; ﻩfor(int i = 0; i 〈 10; i++) ﻩ{ ﻩﻩif(min 〉 grade[i]) ﻩﻩ min = grade[i]; } return min; } int Judge::judgeN() { if(grade[0]==0) ﻩ return 1; ﻩelse ﻩ return 0; } Student、h #include 〈iostream> using namespace std; #include <string> #include ”Judge、h" class Student { public: ﻩ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(); double 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、h” Student::Student(void) { } Student::Student(Student &s) { ID = s、getID(); name = s、getName(); ﻩAVE = s、getAVE(); 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; } string 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 <iostream〉 #include <fstream> #include ”Student、h" #define MAX 1000 using namespace std; class menu { public: ﻩvoid select();//选择操作 void inputMessage();//输入选手信息 ﻩvoid inputGrade();//评委打分 ﻩvoid sort();//根据选手成绩排序(平均分) ﻩvoid consult();//查询某个选手得成绩 ﻩvoid insert();//插入某个新选手得信息与成绩 void input();//将选手数据写入文件 ﻩmenu(void); ~menu(void);private: ﻩint count ;//计数,共有多少组数据 ﻩStudent stu[MAX]; Judge jud[MAX]; }; menu、cpp #include "StdAfx、h” #include "menu、h" menu::menu(void) { count = 0; ﻩnewcount=0; ifstream f("C:\\Users\\apple\\Desktop\\data、txt”); if(!f) { ﻩcout〈〈"open error!”<〈endl; ﻩexit(1); } ﻩf>>count; for(int i = 0; i 〈 count; i++) { string fID,fname; ﻩ f〉>fID〉>fname; ﻩ stu[i]、setID(fID); stu[i]、setName(fname); ﻩdouble x[10]; ﻩ for(int j = 0; j 〈 10; j++) ﻩ { ﻩﻩﻩf〉>x[j]; ﻩ} ﻩjud[i]、setGrade(x); ﻩstu[i]、setObj(jud[i]); ﻩ stu[i]、setAVE(jud[i]、aveGrade()); ﻩ stu[i]、setSUM(jud[i]、sumGrade()); } f、close(); } menu::~menu(void) { } void menu::select() { while(1) ﻩ{ ﻩ char n; cout<<"************************"<<”欢迎进入歌手比赛系统"〈<"************************”<<endl<〈endl; ﻩ cout<<"\t\t\t1、输入选手数据"<<endl; ﻩﻩcout〈<”\t\t\t2、评委打分”<<endl; cout<〈”\t\t\t3、成绩排序(按平均分)"〈<endl; ﻩ cout<<"\t\t\t4、数据查询”<<endl; cout〈〈"\t\t\t5、追加选手数据”<〈endl; ﻩcout<<"\t\t\t6、写入数据文件"<<endl; cout<<"\t\t\t7、退出系统"<<endl; cout〈<endl<<endl〈〈endl; ﻩ cout〈〈”请选择操作项目: "; ﻩﻩcin>>n; switch(n) ﻩ { ﻩ case '1': ﻩﻩ ﻩinputMessage();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<〈"************************”<〈”欢迎进入选手信息页面"<<”************************"<〈endl<〈endl; ﻩcout〈<”请输入共有几位选手: "; int n; ﻩcin〉〉n; ﻩcout<<endl〈〈endl<<endl; ﻩcout〈<"请输入各选手信息(包括编号及姓名)"<<endl; string ID ; string name; ﻩfor(int i = count; i < (n+count); i++) {ﻩ ﻩ cin>〉ID〉>name; ﻩ//以下判断ID就是否重复 ﻩbool pank=true; for(int j = 0; j 〈 count; j++) ﻩﻩ{ if(ID==stu[j]、getID()) ﻩ { ﻩﻩﻩ pank=false; ﻩ ﻩcout<<"已存在ID相同得选手,请重新输入!"〈〈endl; ﻩﻩ ﻩreturn; ﻩﻩ } ﻩﻩ} stu[i]、setID(ID); stu[i]、setName(name); } // count = n+count; ﻩnewcount=n; ﻩcout<〈endl<〈endl<〈endl; } void menu::inputGrade() { ﻩif(stu[0]、judgeNull()) { ﻩﻩcout〈〈"无选手信息!操作错误!返回开始页面。"<<endl<<endl<〈endl; ﻩ} else { ﻩ cout<<"************************”<〈"欢迎进入评委打分页面”〈<"************************”〈<endl<<endl; ﻩ cout<<"请各位评委打分(共10位评委):"<〈endl; ﻩﻩfor(int i = count; i 〈 (count+newcount); i++) ﻩﻩ{ ﻩ ﻩdouble grade[10]; ﻩ cout〈〈"编号为”<<stu[i]、getID()<<"得选手得分数:”〈<endl; ﻩfor(int j = 0; j < 10; j++) ﻩ{ ﻩ cin〉>grade[j]; ﻩﻩ} ﻩﻩjud[i]、setGrade(grade); ﻩ ﻩstu[i]、setObj(jud[i]); ﻩstu[i]、setAVE(jud[i]、aveGrade()); ﻩ stu[i]、setSUM(jud[i]、sumGrade());ﻩﻩ ﻩ} ﻩcount = count+newcount; cout<〈endl<<endl〈<endl; } } void menu::sort() { ﻩif(jud[0]、judgeN()) ﻩ{ cout〈<”无选手分数信息!操作错误!返回开始页面。”<<endl〈〈endl<〈endl; ﻩ} else { ﻩ cout〈<"************************"<<"欢迎进入排序页面!"<〈”************************”<〈endl〈〈endl; ﻩcout<〈"各选手按照平均分从高到低得排序如下"〈〈endl; //以下进行冒泡排序 Student temp; ﻩﻩStudent *newStu = new Student[count];//排序用得新得数组 ﻩfor(int p = 0; p < count; p++) ﻩ { ﻩ newStu[p] = stu[p]; ﻩ } ﻩfor(int i = 0; i 〈 count-1; i++) ﻩﻩ{ ﻩ ﻩfor(int j = i+1; j <count; j++) ﻩ { double ave1 = newStu[i]、getAVE(); ﻩﻩ double ave2 = newStu[j]、getAVE(); ﻩﻩﻩif(ave1 < ave2) ﻩ ﻩ{ ﻩ ﻩﻩﻩtemp = newStu[i]; ﻩ ﻩﻩnewStu[i] = newStu[j]; ﻩ newStu[j] = temp; ﻩ ﻩ} ﻩ} ﻩ } ﻩfor(int k = 0 ; k 〈 count; k++) { string ID = newStu[k]、getID(); ﻩ string name = newStu[k]、getName(); cout<〈”编号:”<<ID〈〈” 姓名:"<<name<〈endl; ﻩ } ﻩcout〈〈endl〈〈endl<<endl; } } void menu::consult() { cout〈<”************************"<<”欢迎进入查询页面"〈〈"************************"<<endl〈<endl; ﻩﻩcout<〈”请输入想查询得选手得编号: "〈<endl; ﻩstring ID; ﻩﻩcin>>ID; ﻩﻩint index;//标记查询到得该选手得下标 ﻩﻩcout<<endl; ﻩfor(int i = 0; i < count; i++) { ﻩﻩﻩif(ID == stu[i]、getID()) ﻩﻩ{ ﻩﻩ index = i; ﻩﻩﻩif(stu[i]、judgeNull()) ﻩ ﻩﻩ{ ﻩ ﻩﻩ cout〈〈"无选手分数信息!操作错误!返回开始页面。"〈〈endl<〈endl<〈endl; ﻩ ﻩ} ﻩ ﻩelse ﻩﻩﻩﻩ { ﻩ cout〈〈”编号为:"〈<ID<〈"得选手得成绩如下"〈<endl<〈endl; ﻩ stu[index]、getObj()、display(); ﻩ ﻩﻩcout<〈”总分(去掉最高分与最低分)为:”〈<stu[index]、getObj()、sumGrade()<<endl; ﻩ ﻩﻩcout<〈"平均分(去掉最高分与最低分)为:"<<stu[index]、getObj()、aveGrade()〈<endl; ﻩﻩ ﻩbreak; ﻩ } ﻩﻩﻩ} ﻩﻩﻩif(i == count - 1) ﻩ ﻩ cout〈<"不存在该选手,输入错误,返回开始页面!”; ﻩﻩ} cout<<endl<<endl〈<endl; } void menu::insert() { cout<<"************************"<〈”欢迎进入插入页面"〈<"************************"〈<endl<〈endl; ﻩcout<〈"请输入选手得编号及姓名"〈<endl; ﻩstring ID; string name; ﻩcin>>ID; cin〉>name; bool pank = true;; for(int i = 0; i 〈count; i++) ﻩ{ ﻩ if(ID == stu[i]、getID()) ﻩ{ cout<<"已存在ID相同得选手,请重新输入!”<〈endl; ﻩﻩpank = false; ﻩﻩreturn; ﻩ} } ﻩif(pank) ﻩ{ ﻩ stu[count]、setID(ID); ﻩstu[count]、setName(name); ﻩcout〈<"请各位评委打分"<<endl; ﻩﻩdouble grade[10]; ﻩfor(int i = 0; i < 10; i++) ﻩ{ cin>>grade[i]; ﻩ} ﻩJudge j; ﻩ j、setGrade(grade); ﻩﻩstu[count]、setAVE(j、aveGrade()); stu[count]、setSUM(j、sumGrade()); stu[count]、setObj(j); jud[count]、setGrade(grade); count++; ﻩnewcount++; ﻩ cout<<endl<〈endl<<endl; } } void menu::input() { ﻩofstream f(”C:\\Users\\apple\\Desktop\\data、txt”); if(!f) { cout<〈”open error!"<<endl; exit(1); } f<<count<<endl; for(int i = 0; i < count; i++) { f〈<stu[i]、getID()〈<" ”<〈stu[i]、getName()<〈" "; ﻩfor(int j = 0; j < 10; j++) { ﻩﻩf<<jud[i]、getGrade()[j]<<" "; ﻩ} ﻩf<〈endl; ﻩ} ﻩf、close(); } Test、cpp #include "menu、h” int _tmain(int argc, _TCHAR* argv[]) { ﻩmenu m; m、select(); ﻩreturn 0; }展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




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



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/12149331.html