大型实验报告歌手比赛系统.docx
- 文档编号:11571183
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:29
- 大小:264.30KB
大型实验报告歌手比赛系统.docx
《大型实验报告歌手比赛系统.docx》由会员分享,可在线阅读,更多相关《大型实验报告歌手比赛系统.docx(29页珍藏版)》请在冰豆网上搜索。
大型实验报告歌手比赛系统
大类基础课程大型实验
2014/2015
(2)
实验题目歌手比赛系统
学生姓名ﻩ
学生学号ﻩ
学生班级ﻩ
任课教师ﻩ
提交日期
ﻩ 计算机科学与技术学院
歌手比赛系统 实验报告
一、大型实验得内容
歌手比赛系统(SCS:
SingerContestSystem)用于对一次歌手比赛得成绩进行管理,要求完成得主要得功能包括选手信息管理、评委打分管理。
可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等工作。
要求使用学习过得C/C++程序设计得知识完成歌手比赛系统得设计与实现。
二、运行环境
歌手比赛系统(SCS)在Visual Studio2010平台下开发,操作系统:
Windows8、1。
硬件环境:
处理器:
Intel(R)Core(TM)i5—5257M CPU2、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个评委得打分。
具体类结构声明如下:
●Student类:
classStudent
{
public:
voidsetID(stringID);
ﻩvoidsetName(stringname);
void setObj(Judge&j);
voiidsetSUM(double sum);
voidsetAVE(double ave);
ﻩstringgetID();
ﻩstringgetName();
JudgegetObj();
ﻩdouble getSUM();
doublegetAVE();
ﻩStudent(Student&);
Student(void);
ﻩ~Student(void);
private:
ﻩstring ID;
ﻩstring name;
ﻩJudgeobj;
ﻩdoubleSUM;
ﻩdouble AVE;
};
●Judge类
class Judge
{
public:
ﻩvoidsetGrade(double g[10]);
double*getGrade();
voiddisplay();
doublesumGrade();//计算总分
doubleaveGrade();//计算平均分
ﻩdouble getMax();//辅助函数,寻找最高分
ﻩdoublegetMin();//辅助函数,寻找最低分
ﻩJudge(void);
Judge(Judge&);
~Judge(void);
private:
doublegrade[10];
};
●Menu类:
classmenu
{
public:
ﻩvoidselect();//选择操作
voidinputMessage();//输入选手信息
voidinputGrade();//评委打分
void sort();//根据选手成绩进行排序
void consult();//查询某个选手得成绩
voidinsert();//插入新选手得信息与成绩
ﻩvoidinput();//将选手数据写入文件
menu(void);
ﻩ~menu(void);
private:
intcount;//计数,共有多少组数据
ﻩStudentstu[MAX];
ﻩJudge jud[MAX];
};
(3)交互界面以及登录菜单得实现
系统运行开始得界面如图5所示:
图5开始登录界面
主要通过选择结构与循环结构实现界面得前进与后退。
例如,第一个登录界面出现7个选择:
1、输入选手数据,2、评委打分,3、成绩排序(按平均分)4、数据查询5、追加选手数据6、写入数据文件7、退出系统。
用switchcase分别实现,选择之后转到下一个界面.
四、实验调试、测试、运行记录及分析
系统在调试测试过程中遇到若干问题,不过经过仔细反复得检查已经消除各种bug。
主要得测试经过如下:
开始页面:
在开始界面输入“1”即可跳转到输入选手信息界面,输入选手信息。
输入选手信息完毕后,自动返回开始页面。
输入“2”,即可跳转到评委打分页面。
为各选手打分.
输入分数完毕后,自动返回至开始页面。
输入“3”,跳转到排序页面,根据选手得平均分进行排名。
排序完毕后,自动返回到开始页面。
输入“4”,跳转到数据查询页面.输入想查询得选手得编号,即可得知该选手得10位评委得打分。
查询完毕后,自动跳转到开始页面。
输入“5”,跳转到追加选手数据页面.输入新插入得选手得编号及姓名,以及10个评委对该选手得打分.为验证选手数据已更新,进行查询操作及排序操作。
输入“6”,将所有选手得信息,包括编号、信息、10个评委得打分,写入数据文件。
输入“7”,退出系统。
容错测试:
1、如果输入相同ID得选手:
2、如果插入相同得选手:
3、如果输入了选手ID与姓名,但还未进行打分就进行排序:
4、程序开始就选择5,追加选手数据,测试插入就是否成功(数据查询与排序)
遇到得问题及解决方法如下:
●问题1:
问题描述:
很少使用文件得读取方法,因此一开始在实现将信息写入文件得功能时遇到了困难,不知如何下手。
解决方法:
利用网络资源,搜索c++得读写文件方式,在稍作修改后,应用到本次实验中。
成功实现了文件得读写。
图6调试测试问题1
五、实验总结
我设计得歌手比赛系统基本满足任务书得功能要求,类得结构与关系清晰,功能完善,完成了歌手比赛系统得基本功能,能正常运行。
存在得缺点主要就是数据存储方面,因评委只有十人,不存在大批量得数据,因此采用基本得数组结构存储数据。
其次在存储选手信息方面,采用了类得数组方式,有浪费内存得弊端,并且,一旦选手人数过多,也会影响程序效率。
可以用更好得数据存储方式来存储数据,例如vector等。
通过这次C++得大型实验,我深刻得明白到:
课本知识与实践能力相结合得重要性。
要想把一门专业课程学好,必须增强自己得动手实践能力,更多得实践才能让我们得编程能力有更多得提高。
并且,我们也要充分利用好网络资源,写代码得过程其实就是一个复习旧知识、学习新知识得过程,当我们遇到不明白得地方,或者对程序功能抱有疑问时,要学会自己去查找资料并且解决问题,而网络资源能帮我们解答很多基本得疑问。
充分利用好网络得代码资源,不断充实自己、丰富自己得代码知识。
六、附录:
源代码
Judge、h
#include〈iostream>
usingnamespacestd;
classJudge
{
public:
voidsetGrade(doubleg[10]);
ﻩdouble*getGrade();
ﻩvoid display();
doublesumGrade();//计算总分
doubleaveGrade();//计算平均分
ﻩdoublegetMax();//辅助函数,寻找最高分
ﻩdoublegetMin();//辅助函数,寻找最低分
ﻩintjudgeN();
ﻩJudge(void);
ﻩJudge(Judge&);
ﻩ~Judge(void);
private:
doublegrade[10];
};
Judge、cpp
#include”Judge、h”
Judge:
:
Judge(void)
{
for(inti = 0;i〈10;i++)
ﻩgrade[i] =0;
}
Judge:
:
Judge(Judge&j)
{
for(inti=0;i<10;i++)
ﻩﻩgrade[i] =j、grade[i];
}
Judge:
:
~Judge(void)
{
}
voidJudge:
:
setGrade(doubleg[10])
{
ﻩfor(inti=0;i〈10;i++)
ﻩ{
grade[i] =g[i];
ﻩ}
}
double*Judge:
:
getGrade()
{
returngrade;
}
voidJudge:
:
display()
{
ﻩfor(int i=0;i<10; i++)
{
ﻩcout〈<”第”〈〈i+1<<"位评委得打分就是:
"<〈grade[i]〈 } } doubleJudge: : sumGrade() { doublemax =getMax(); doublemin=getMin(); doubleSum= 0; ﻩfor(inti =0;i < 10;i++) { ﻩSum=Sum+grade[i]; ﻩ} Sum =Sum-max; Sum = Sum—min; return Sum; } doubleJudge: : aveGrade() { doubleAve; double max= getMax(); doublemin= getMin(); ﻩdoubleSum=0; for(inti =0;i<10;i++) ﻩ{ ﻩSum=Sum +grade[i]; } ﻩSum=Sum— max; Sum=Sum- min; Ave=Sum/8; ﻩreturnAve; } doubleJudge: : getMax()//辅助函数,寻找最高分 { ﻩdoublemax=0; ﻩfor(int i =0;i<10; i++) ﻩ{ ﻩif(max〈grade[i]) ﻩmax =grade[i]; ﻩ} returnmax; } doubleJudge: : getMin()//辅助函数,寻找最低分 { ﻩdoublemin=100; ﻩfor(inti= 0;i〈10; i++) ﻩ{ ﻩﻩif(min〉grade[i]) ﻩﻩmin=grade[i]; } return min; } intJudge: : judgeN() { if(grade[0]==0) ﻩreturn1; ﻩelse ﻩreturn 0; } Student、h #include〈iostream> using namespace std; #include #include”Judge、h" classStudent { public: ﻩvoidsetID(stringID); void setName(stringname); void setObj(Judge&j); void setSUM(doublesum); ﻩvoidsetAVE(double ave); stringgetID(); stringgetName(); ﻩJudgegetObj(); double getSUM(); ﻩdoublegetAVE(); ﻩintjudgeNull();//判断就是否为空 Student(Student&); Student(void); ﻩ~Student(void); private: ﻩstringID; stringname; ﻩJudgeobj; ﻩdoubleSUM; 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(stringid) { ﻩID= id; } voidStudent: : setName(string n) { ﻩname =n; } voidStudent: : setObj(Judge&j) { ﻩobj=Judge(j); } voidStudent: : setSUM(double sum) { SUM =sum; } void Student: : setAVE(doubleave) { AVE=ave; } string Student: : getID() { ﻩreturnID; } string Student: : getName() { ﻩreturnname; } doubleStudent: : getSUM() { ﻩreturnSUM; } doubleStudent: : getAVE() { ﻩreturn AVE; } JudgeStudent: : getObj() { ﻩreturnobj; } int Student: : judgeNull() { ﻩif(ID、empty()&&name、empty()) ﻩreturn1; ﻩelse ﻩreturn 0; } menu、h #include <iostream〉 #include<fstream> #include”Student、h" #defineMAX1000 using namespace std; class menu { public: ﻩvoidselect();//选择操作 void inputMessage();//输入选手信息 ﻩvoid inputGrade();//评委打分 ﻩvoidsort();//根据选手成绩排序(平均分) ﻩvoidconsult();//查询某个选手得成绩 ﻩvoidinsert();//插入某个新选手得信息与成绩 voidinput();//将选手数据写入文件 ﻩ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; ifstreamf("C: \\Users\\apple\\Desktop\\data、txt”); if(! f) { ﻩcout〈〈"openerror! ”<〈endl; ﻩexit (1); } ﻩf>>count; for(inti =0; i〈count;i++) { stringfID,fname; ﻩf〉>fID〉>fname; ﻩstu[i]、setID(fID); stu[i]、setName(fname); ﻩdoublex[10]; ﻩfor(intj=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) { } voidmenu: : select() { while (1) ﻩ{ ﻩchar n; cout<<"************************"<<”欢迎进入歌手比赛系统"〈<"************************”<<endl<〈endl; ﻩcout<<"\t\t\t1、输入选手数据"<<endl; ﻩﻩcout〈<”\t\t\t2、评委打分”< cout<〈”\t\t\t3、成绩排序(按平均分)"〈<endl; ﻩcout<<"\t\t\t4、数据查询”<<endl; cout〈〈"\t\t\t5、追加选手数据”<〈endl; ﻩcout<<"\t\t\t6、写入数据文件"<<endl; cout<<"\t\t\t7、退出系统"< cout〈 ﻩ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〈<”请输入共有几位选手: "; intn; ﻩcin〉〉n; ﻩcout<<endl〈〈endl<<endl; ﻩcout〈<"请输入各选手信息(包括编号及姓名)"<<endl; stringID ; stringname; ﻩfor(int i=count;i< (n+count);i++) {ﻩ ﻩcin>〉ID〉>name; ﻩ//以下判断ID就是否重复 ﻩboolpank=true; for(intj = 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; } voidmenu: : inputGrade() { ﻩif(stu[0]、judgeNull()) { ﻩﻩcout〈〈"无选手信息! 操作错误! 返回开始页面。 "< ﻩ} else { ﻩcout<<"************************”<〈"欢迎进入评委打分页面”〈<"************************”〈 ﻩcout<<"请各位评委打分(共10位评委): "<〈endl; ﻩﻩfor(inti=count;i 〈(count+newcount);i++) ﻩﻩ{ ﻩﻩdoublegrade[10]; ﻩcout〈〈"编号为”< ”〈<endl; ﻩfor(intj= 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〈 } } voidmenu: : sort() { ﻩif(jud[0]、judgeN()) ﻩ{ cout〈<”无选手分数信息! 操作错误! 返回开始页面。 ”<<endl〈〈endl<〈endl; ﻩ} else { ﻩcout〈<"************************"<<"欢迎进入排序页面! "<〈”************************”<〈endl〈〈endl; ﻩcout<〈"各选手按照平均分从高到低得排序如下"〈〈endl;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 实验 报告 歌手 比赛 系统