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

上传人:b****1 文档编号:13805446 上传时间:2023-06-17 格式:DOCX 页数:34 大小:303.09KB
下载 相关 举报
大型实验报告材料歌手比赛系统.docx_第1页
第1页 / 共34页
大型实验报告材料歌手比赛系统.docx_第2页
第2页 / 共34页
大型实验报告材料歌手比赛系统.docx_第3页
第3页 / 共34页
大型实验报告材料歌手比赛系统.docx_第4页
第4页 / 共34页
大型实验报告材料歌手比赛系统.docx_第5页
第5页 / 共34页
大型实验报告材料歌手比赛系统.docx_第6页
第6页 / 共34页
大型实验报告材料歌手比赛系统.docx_第7页
第7页 / 共34页
大型实验报告材料歌手比赛系统.docx_第8页
第8页 / 共34页
大型实验报告材料歌手比赛系统.docx_第9页
第9页 / 共34页
大型实验报告材料歌手比赛系统.docx_第10页
第10页 / 共34页
大型实验报告材料歌手比赛系统.docx_第11页
第11页 / 共34页
大型实验报告材料歌手比赛系统.docx_第12页
第12页 / 共34页
大型实验报告材料歌手比赛系统.docx_第13页
第13页 / 共34页
大型实验报告材料歌手比赛系统.docx_第14页
第14页 / 共34页
大型实验报告材料歌手比赛系统.docx_第15页
第15页 / 共34页
大型实验报告材料歌手比赛系统.docx_第16页
第16页 / 共34页
大型实验报告材料歌手比赛系统.docx_第17页
第17页 / 共34页
大型实验报告材料歌手比赛系统.docx_第18页
第18页 / 共34页
大型实验报告材料歌手比赛系统.docx_第19页
第19页 / 共34页
大型实验报告材料歌手比赛系统.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《大型实验报告材料歌手比赛系统.docx》由会员分享,可在线阅读,更多相关《大型实验报告材料歌手比赛系统.docx(34页珍藏版)》请在冰点文库上搜索。

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

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

 

大类基础课程大型实验

2014/2015

(2)

 

实验题目歌手比赛系统

学生姓名

学生学号

学生班级

任课教师

提交日期

 

计算机科学与技术学院

 

歌手比赛系统实验报告

一、大型实验的内容

歌手比赛系统(SCS:

SingerContestSystem)用于对一次歌手比赛的成绩进行管理,要求完成的主要的功能包括选手信息管理、评委打分管理。

可以完成成绩排序(按平均分),选手数据查询,追加学生数据,写入数据文件等工作。

要求使用学习过的C/C++程序设计的知识完成歌手比赛系统的设计与实现。

二、运行环境

歌手比赛系统(SCS)在VisualStudio2010平台下开发,操作系统:

Windows8.1。

硬件环境:

处理器:

Intel(R)Core(TM)i5-5257MCPU@2.70GHz2.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)类的编写

系统工程名为:

Test。

包含了Student类(选手类),Judge类(图书类)两个基本类,另设menu类,进行具体功能的选择及实现。

Student类包含选手的编号、姓名、评委的打分(Judge声明的对象obj)、选手的总分和平均分。

Judge类包含10个评委的打分。

具体类结构声明如下:

●Student类:

classStudent

{

public:

voidsetID(stringID);

voidsetName(stringname);

voidsetObj(Judge&j);

voiidsetSUM(doublesum);

voidsetAVE(doubleave);

stringgetID();

stringgetName();

JudgegetObj();

doublegetSUM();

doublegetAVE();

Student(Student&);

Student(void);

~Student(void);

private:

stringID;

stringname;

Judgeobj;

doubleSUM;

doubleAVE;

};

●Judge类

classJudge

{

public:

voidsetGrade(doubleg[10]);

double*getGrade();

voiddisplay();

doublesumGrade();//计算总分

doubleaveGrade();//计算平均分

doublegetMax();//辅助函数,寻找最高分

doublegetMin();//辅助函数,寻找最低分

Judge(void);

Judge(Judge&);

~Judge(void);

private:

doublegrade[10];

};

●Menu类:

classmenu

{

public:

voidselect();//选择操作

voidinputMessage();//输入选手信息

voidinputGrade();//评委打分

voidsort();//根据选手成绩进行排序

voidconsult();//查询某个选手的成绩

voidinsert();//插入新选手的信息和成绩

voidinput();//将选手数据写入文件

menu(void);

~menu(void);

private:

intcount;//计数,共有多少组数据

Studentstu[MAX];

Judgejud[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

usingnamespacestd;

classJudge

{

public:

voidsetGrade(doubleg[10]);

double*getGrade();

voiddisplay();

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(inti=0;i<10;i++)

{

cout<<"第"<

"<

}

}

doubleJudge:

:

sumGrade()

{

doublemax=getMax();

doublemin=getMin();

doubleSum=0;

for(inti=0;i<10;i++)

{

Sum=Sum+grade[i];

}

Sum=Sum-max;

Sum=Sum-min;

returnSum;

}

doubleJudge:

:

aveGrade()

{

doubleAve;

doublemax=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(inti=0;i<10;i++)

{

if(max

max=grade[i];

}

returnmax;

}

doubleJudge:

:

getMin()//辅助函数,寻找最低分

{

doublemin=100;

for(inti=0;i<10;i++)

{

if(min>grade[i])

min=grade[i];

}

returnmin;

}

intJudge:

:

judgeN()

{

if(grade[0]==0)

return1;

else

return0;

}

Student.h

#include

usingnamespacestd;

#include

#include"Judge.h"

classStudent

{

public:

voidsetID(stringID);

voidsetName(stringname);

voidsetObj(Judge&j);

voidsetSUM(doublesum);

voidsetAVE(doubleave);

stringgetID();

stringgetName();

JudgegetObj();

doublegetSUM();

doublegetAVE();

intjudgeNull();//判断是否为空

Student(Student&);

Student(void);

~Student(void);

private:

stringID;

stringname;

Judgeobj;

doubleSUM;

doubleAVE;

};

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)

{

}

voidStudent:

:

setID(stringid)

{

ID=id;

}

voidStudent:

:

setName(stringn)

{

name=n;

}

voidStudent:

:

setObj(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:

:

getObj()

{

returnobj;

}

intStudent:

:

judgeNull()

{

if(ID.empty()&&name.empty())

return1;

else

return0;

}

menu.h

#include

#include

#include"Student.h"

#defineMAX1000

usingnamespacestd;

classmenu

{

public:

voidselect();//选择操作

voidinputMessage();//输入选手信息

voidinputGrade();//评委打分

voidsort();//根据选手成绩排序(平均分)

voidconsult();//查询某个选手的成绩

voidinsert();//插入某个新选手的信息和成绩

voidinput();//将选手数据写入文件

menu(void);

~menu(void);private:

intcount;//计数,共有多少组数据

Studentstu[MAX];

Judgejud[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!

"<

exit

(1);

}

f>>count;

for(inti=0;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)

{

charn;

cout<<"************************"<<"欢迎进入歌手比赛系统"<<"************************"<

cout<<"\t\t\t1.输入选手数据"<

cout<<"\t\t\t2.评委打分"<

cout<<"\t\t\t3.成绩排序(按平均分)"<

cout<<"\t\t\t4.数据查询"<

cout<<"\t\t\t5.追加选手数据"<

cout<<"\t\t\t6.写入数据文件"<

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<<"输入指令错误"<

}

}

}

}

voidmenu:

:

inputMessage()

{

cout<<"************************"<<"欢迎进入选手信息页面"<<"************************"<

cout<<"请输入共有几位选手:

";

intn;

cin>>n;

cout<

cout<<"请输入各选手信息(包括编号及姓名)"<

stringID;

stringname;

for(inti=count;i<(n+count);i++)

{

cin>>ID>>name;

//以下判断ID是否重复

boolpank=true;

for(intj=0;j

{

if(ID==stu[j].getID())

{

pank=false;

cout<<"已存在ID相同的选手,请重新输入!

"<

return;

}

}

stu[i].setID(ID);

stu[i].setName(name);

}

//count=n+count;

newcount=n;

cout<

}

voidmenu:

:

inputGrade()

{

if(stu[0].judgeNull())

{

cout<<"无选手信息!

操作错误!

返回开始页面。

"<

}

else

{

cout<<"************************"<<"欢迎进入评委打分页面"<<"************************"<

cout<<"请各位评委打分(共10位评委):

"<

for(inti=count;i<(count+newcount);i++)

{

doublegrade[10];

cout<<"编号为"<

"<

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<

}

}

voidmenu:

:

sort()

{

if(jud[0].judgeN())

{

cout<<"无选手分数信息!

操作错误!

返回开始页面。

"<

}

else

{

cout<<"************************"<<"欢迎进入排序页面!

"<<"************************"<

cout<<"各选手按照平均分从高到低的排序如下"<

//以下进行冒泡排序

Studentt

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

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

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