欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:1123975       资源大小:129.73KB        全文页数:22页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    -歌手比赛系统 实验报告一、 大型实验的容 歌手比赛系统SCS:Singer Contest System用于对一次歌手比赛的成绩进展管理,要求完成的主要的功能包括选手信息管理、评委打分管理。可以完成成绩排序按平均分,选手数据查询,追加学生数据,写入数据文件等工作。要求使用学习过的C/C+程序设计的知识完成歌手比赛系统的设计与实现。二、 运行环境 歌手比赛系统SCS在Visual Studio 2010平台下开发,操作系统:Windows8.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 Studentpublic: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 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;l Menu类:class menupublic: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; 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 Judgepublic:void 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.h"Judge:Judge(void)for(int i = 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<<"位评委的打分是:"<<gradei<<endl;double Judge: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 + gradei;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 < 10; i+)if(min > gradei)min = gradei;return min;int Judge:judgeN()if(grade0=0)return 1;else return 0;Student.h#include <iostream>using namespace std;#include <string>#include "Judge.h"class 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();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 1000using namespace std;class menupublic: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"#include "menu.h"menu:menu(void)count = 0;newcount=0;ifstream f("C:UsersappleDesktopdata.txt");if(!f)cout<<"open error!"<<endl;exit(1);f>>count;for(int i = 0; i < count; i+)string fID,fname;f>>fID>>fname;stui.setID(fID);stui.setName(fname);double x10;for(int j = 0; j < 10; j+)f>>xj;judi.setGrade(x);stui.setObj(judi);stui.setAVE(judi.aveGrade();stui.setSUM(judi.sumGrade();f.close();menu:menu(void)void menu:select()while(1)char n;cout<<"*"<<"欢送进入歌手比赛系统"<<"*"<<endl<<endl;cout<<"ttt1.输入选手数据"<<endl;cout<<"ttt2.评委打分"<<endl;cout<<"ttt3.成绩排序按平均分"<<endl;cout<<"ttt4.数据查询"<<endl;cout<<"ttt5.追加选手数据"<<endl;cout<<"ttt6.写入数据文件"<<endl;cout<<"ttt7.退出系统"<<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=stuj.getID()pank=false;cout<<"已存在ID一样的选手,请重新输入!"<<endl;return;stui.setID(ID);stui.setName(name);/count = n+count;newcount=n;cout<<endl<<endl<<endl;void menu:inputGrade()if(stu0.judgeNull()cout<<"无选手信息!操作错误!返回开场页面。"<<endl<<endl<<endl;elsecout<<"*"<<"欢送进入评委打分页面"<<"*"<<endl<<endl;cout<<"请各位评委打分共10位评委:"<<endl;for(int i = count; i < (count+newcount); i+)double grade10;cout<<"编号为"<<stui.getID()<<"的选手的分数:"<<endl;for(int j = 0; j < 10; j+)cin>>gradej;judi.setGrade(grade);stui.setObj(judi);stui.setAVE(judi.aveGrade();stui.setSUM(judi.sumGrade();count = count+newcount;cout<<endl<<endl<<endl;void menu:sort()if(jud0.judgeN()cout<<"无选手分数信息!操作错误!返回开场页面。"<<endl<<endl<<endl;elsecout<<"*"<<"欢送进入排序页面!"<<"*"<<endl<<endl;cout<<"各选手按照平均分从高到低的排序如下"<<endl;/以下进展冒泡排序Student temp;Student *newStu = new Studentcount;/排序用的新的数组for(int p = 0; p < count; p+)newStup = stup;for(int i = 0; i < count-1; i+)for(int j = i+1; j <count; j+)double ave1 = newStui.getAVE();double ave2 = newStuj.getAVE();if(ave1 < ave2)temp = newStui;newStui = newStuj;newStuj = temp;for(int k = 0 ; k < count; k+)string ID = newStuk.getID();string name = newStuk.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 = stui.getID()index = i;if(stui.judgeNull()cout<<"无选手分数信息!操作错误!返回开场页面。"<<endl<<endl<<endl;elsecout<<"编号为:"<<ID<<"的选手的成绩如下"<<endl<<endl;stuindex.getObj().display();cout<<"总分(去掉最高分和最低分)为:"<<stuindex.getObj().sumGrade()<<endl;cout<<"平均分(去掉最高分和最低分)为:"<<stuindex.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 = stui.getID()cout<<"已存在ID一样的选手,请重新输入!"<<endl;pank = false;return;if(pank)stucount.setID(ID);stucount.setName(name);cout<<"请各位评委打分"<<endl;double grade10;for(int i = 0; i < 10; i+)cin>>gradei;Judge j;j.setGrade(grade);stucount.setAVE(j.aveGrade();stucount.setSUM(j.sumGrade();stucount.setObj(j);judcount.setGrade(grade);count+;newcount+;cout<<endl<<endl<<endl;void menu:input()ofstream f("C:UsersappleDesktopdata.txt");if(!f)cout<<"open error!"<<endl;exit(1);f<<count<<endl;for(int i = 0; i < count; i+)f<<stui.getID()<<" "<<stui.getName()<<" "for(int j = 0; j < 10; j+)f<<judi.getGrade()j<<" "f<<endl;f.close();Test.cpp#include "menu.h"int _tmain(int argc, _TCHAR* argv)menu m;m.select();return 0;. z.

    注意事项

    本文(大型实验报告歌手比赛系统.doc)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开