收藏 分销(赏)

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

上传人:鼓*** 文档编号:12149331 上传时间:2025-09-17 格式:DOC 页数:28 大小:394.50KB 下载积分:8 金币
下载 相关 举报
大型实验报告(歌手比赛系统).doc_第1页
第1页 / 共28页
大型实验报告(歌手比赛系统).doc_第2页
第2页 / 共28页


点击查看更多>>
资源描述
大类基础课程大型实验  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; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 实验设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服