下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 对参赛结果分数进行分析C++

对参赛结果分数进行分析C++.doc

对参赛结果分数进行分析C++

俄是有多爱迩_
2017-10-20 0人阅读 举报 0 0 暂无简介

简介:本文档为《对参赛结果分数进行分析C++doc》,可适用于IT/计算机领域

对参赛结果分数进行分析C课程设计题目:对参赛结果分数进行分析学生姓名:专业:班级:指导教师:年月日东华理工大学课程设计评分表学生姓名:朱秀刚班级:学号:课程设计题目:对参赛结果分数进行分析项目内容满分实评能结合所学课程知识、有一定的能力训练。符合选题要求选(人一题)题工作量适中难易度合理能熟练应用所学知识有一定查阅文献及运用文献资料能力能理论依据充分数据准确公式推导正确力能应用计算机软件进行编程、资料搜集录入、加工、排版、水制图等平能体现创造性思维或有独特见解总体设计正确、合理各项技术指标符合要求。说明书综述简练完整概念清楚、立论正确、技术用语准确、结论严谨合理分析处理科学、条理分明、语言流畅、结构成严谨、版面清晰果设计说明书栏目齐全、合理符号统一、编号齐全。格式、质绘图、表格、插图等规范准确符合国家标准量有一定篇幅字符数不少于总分指导教师评语:指导教师签名:年月日目录一、问题分析二、结构分析三、实现流程分析四、个性功能介绍五、课程设计小结一、问题描述及分析、问题描述参赛选手n人(n>)评委m人(m>)评委给每一选手打一个分数score(分数scor为小于等于的一个正实数)。选手的最后得分lastScore计算方法为()m<时去掉一个最高分和一个最低分后另m个得分的平均值。()m时去掉两个最高分和两个最低分后另m个得分的平均值。假设事先已经建立了text型的数据文件ftxt其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。请编制程序依次从数据文件ftxt中读入n个选手的有关信息而后按上述规定方法计算出每一个选手的最后得分而且往屏幕上以及另一个text型文件ftxt中同时输出如下形式的结果信息。假设参赛选手人数n=评委人数m=磁盘文件ftxt中的初始数据为:zhangjinlintaoguojianmalingliuyifan那么程序执行后屏幕显示结果以及磁盘文件ftxt中的结果均应该为:参赛号姓名最高分最低分累积分最后得分zhangjinlintaoguojianmalingliuyifan思考:可进一步考虑找出比赛的第至第k名也在屏幕以及ftxt中同时输出相关的结果信息(k小于等于n并规定若多个选手最后得分相同时则有效分(即已删除原来的最高分后)中最高分高者名次优先)。、问题分析()、要对参赛结果的数据进行分析首先要有数据的来源在面向对象的设计中数据来源于对象在这里我们可以构建一个类Competition(参赛选手),作为数据的来源建一个Competition的友元类Judge(评委)通过其成员函数给Competition的数据成员初始化这就有了数据的来源。()、对数据的处理可以通过对Competition类设计功能函数来实现其数据处理功能有:对每个选手的得分按从高分到低分排序、求最高分、最低分、累计得分、最后得分和对所有选手进行名次排序等。()、因为题目要求把原始数据和处理后的结果分别存放到ftxt,f,txt文件因此可建立一个Competition的基类Compbase(选手基类)其数据成员只有number(编号),name(姓名),maxscore(最高分),minscore(最低分),sumscore(累计得分)lastscore(最后得分)用来存储处理后的结果这样就可以方便地把处理后的结果存入到ftxt文件。二、结构分析通过以上的分析可以得出系统类Compbase,Competition,Judge之间的关系如下UML图:Competition是Compbsae的派生类CompetitionCompbasenumber:intnumber:intname:stringname:string*score:doublemaxscore:doublemaxscore:doubleminscore:doubleminscore:doublelastscore:doublelasescore:doublesunscore:doublesumscore:doubleCompbase()n:int~Compbase()Competition()Compbaseinput(*p:Compebase,n:int):voidCompetition(number:int,name:string,*score:double,n:int)operator=(p:Compbase):void~Competition()Compinput(*p:Competition,n:int):voidCompset(number:int,name:string,*score:double,n:int):viodScoreorder():voidJudge是Maxscore():doubleCompetitionMinscore():double的友元Sumscore():doubleLastscore():doubleComporder(*p,const:Competition,n:int):voidJudgeCompshow():voidnumber:intclassJudge:frindname:stringScoreset():voidJudge()operator=(p:Competition):vJudge(number:int,name:string)Givescore(*x:Competition,*y:Judge,z:int,h:int):void~Judge()classCompetition:friend三、函数实现流程分析、Compbase类函数的流程图i=()信息输入函数falsei<ntruecout<<"请输入第"<<i<<"号选手的编号:"cin>>pinumbercout<<endl<<"请输入第"<<i<<"号选手的姓名:"cin>>pinamecout<<endli()符号重载实现对象的拷贝number=pnumbername=pnamemaxscore=pmaxscoreminscore=pminscorelastscore=plastscoresumscore=psumscore、Competition类函数的流程图()无参数的构造函数number=name="无"score=newdoublemaxscore=minscore=sumscore=lastscore=含参数的构造函数()n=nnumber=numbername=namescore=newdoublenscore=score()从键盘录入信息函数i=falsei<ntruecout<<"请输入第"<<i<<"号选手的编号:"cin>>pinumbercout<<endl<<"请输入第"<<i<<"号选手的姓名:"cin>>pinamecout<<endli()每个选手的得分数从最高分到最低分排序函数Competitiontempinti=falsei<ntrueintj=j<nifasletruefaslescorej<scorejtruetemp=scorejscorej=scorejscorej=tempji()求最高分函数调用分数排序函数returnmaxscore=score()求最低分函数Scoreorder()returnminscore=scoren()求总累计得分函数定义doublesum=存储累计得分调用分数排序函数false评委个n数大于true去掉两个最高分和两个最低分求累计得分Sumscorefalse评委个数n大于且小于ture去掉一个最高分和一个最低分求累计得分Sumscore()求最后得分函数调用求累计得分函数评委个数n大于false个ture最后得分等于累计得分除以评委个数n大于且小于false最后得分等于累计得分除以()按得分把所有选手的名次排序函数定义一个Competition类的对象tempinti=turefalsei小于选手个数减tureintj=falsej小于选手个数减(i)true第j个选手的最后得分小于false第j个选手的最后得分true交换第j个选手与第j个选手的顺序第j个选手的最后得分等于第j个选手的最后得分且第j个选手的最高得分小于第falsej个选手的最高得分truej交换第j个选手与第j个选手的顺序i()向屏幕输出信息函数cout<<setiosflags(iosbase::left)cout<<setw()<<number<<setw()<<name<<setw()<<maxscore<<setw()<<minscore<<setw()<<sumscore<<setw()<<lastscore<<endlresetiosflags(iosbase::left)()符号重载实现深拷贝函数n=pnnumber=pnumbername=pnamescore=newdoublen*score=*pscoremaxscore=pmaxscoreminscore=pminscorelastscore=plastscoresumscore=psumscore、Judge类成员函数的()构造函数number=numbername=name()评委给分函数inti=falsei小于选手个数true把评委个数n赋值给对象的数据成员nintj=falsej小于评委个数truecout<<"第"<<j<<"号评委给"<<i<<"号选手评分(分值大于小于):"doublescore从键盘输入score的值score<||score>falsetruecout<<"输入错误请重新输入:"i、main函数定义一个Competition类指针对其动态分配内存并且对Cper其初始化定义一个输出流把Cper指向的内容写入文件ftxt定义一个输入流从文件ftxt中读出数据存在Competition指针Cper调用Competition的函数成员对Cper的每个元素求分数排序最高分最低分累计得分最后得分和名次排序。定义一个Compbase类的指针Cper,把Cper处理后的结果赋值给Cper。定义一个输出流把Cper的信息输出到磁盘文件ftxt和屏幕定义一个Comptition类的指针和Judge类的指针调用从键盘输入信息函数和评分函数、程序的具体实现()建立一个工程Competition()在工程中分别建立一个Comph、Competitioncpp文件和一个testcpp文件。()Comph中的代码如下:***********************************程序名称:评分系统**作者:朱秀刚**学号:**编制时间:年月**程序功能:对参赛结果分数进行处理***********************************#include<string>usingnamespacestdclassJudgeclassCompbase选手基类{public:Compbase(){}~Compbase(){}voidCompbaseinput(Compbase*p,intn)信息输入函数voidoperator=(Compbasep)符号重载private:intnumber参赛号stringname姓名doublemaxscore最高分doubleminscore最低分doublesumscore总得分doublelastscore最后得分}********************************************************************************classCompetition:publicCompbase参赛选手的派生类{public:Competition()构造函数Competition(intnumber,stringname,double*score,intn)参赛选手构造函数~Competition()析构函数{deletescore}voidCompinput(Competition*p,intn)信息从键盘录入函数voidCompset(intnumber,stringname,double*score,intn)信息录入函数voidScoreorder()分数排序函数doubleMaxscore()求最高分函数doubleMinscore()求最低分函数doubleSumscore()求总得分函数doubleLastscore()求最后得分函数voidComporder(Competition*p,constintn)参赛人员名次排序voidCompshow()显示信息函数friendclassJudge声明评委类为选手类的友元类voidScoreset()voidoperator=(Competitionp)private:intnumber参赛号stringname姓名double*score定义一个指针指向裁判给的分数doublemaxscore最高分doubleminscore最低分doublesumscore总得分doublelastscore最后得分intnn表示评委的个数}*********************************************************************************classJudge定义评委类{public:Judge(){}Judge(intnumber,stringname)Judge的构造函数voidGivescore(Competition*x,Judge*y,intz,inth)评委给分函数~Judge(){}析构函数friendclassCompetitionCompetition为Judge的友元类private:intnumber评委号stringname评委姓名}()Competitioncpp文件中的代码如下:#include"Comph"#include<string>#include<iostream>#include<iomanip>基类Compbase成员函数的实现voidCompbase::Compbaseinput(Compbase*p,intn)信息输入函数{for(inti=i<ni){cout<<"请输入第"<<i<<"号选手的编号:"cin>>pinumbercout<<endl<<"请输入第"<<i<<"号选手的姓名:"cin>>pinamecout<<endl}}voidCompbase::operator=(Compbasep)符号重载实现对象的拷贝{number=pnumbername=pnamemaxscore=pmaxscoreminscore=pminscorelastscore=plastscoresumscore=psumscore}*******************************************************************************派生类Competition成员函数的实现Competition::Compet构造函数{number=name="无"score=newdoublemaxscore=minscore=sumscore=lastscore=}Competition::Competition(intnumber,stringname,double*score,intn)参赛选手构造函数{n=nnumber=numbername=namescore=newdoublenscore=score}voidCompetition::Compinput(Competition*p,intn)信息从键盘录入函数{n=nfor(inti=i<ni){cout<<"请输入第"<<i<<"号选手的编号:"cin>>pinumbercout<<endl<<"请输入第"<<i<<"号选手的姓名:"cin>>pinamecout<<endl}}voidCompetition::Compset(intnumber,stringname,double*score,intn)信息录入函数{n=nnumber=numbername=namescore=newdoublenscore=score}voidCompetition::Scoreorder()每个选手的得分{从最高分到最低分排序函数doubletemp=for(inti=i<ni)for(intj=j<nij){if(scorej<scorej){temp=scorejscorej=scorejscorej=temp}}}doubleCompetition::Maxscore()求最高分函数{Scoreorder()returnmaxscore=score}doubleCompetition::Minscore()求最低分函数{Scoreorder()returnminscore=scoren}doubleCompetition::Sumscore()求总得分函数{doublesum=Scoreorder()if(n>)评委个数大于时去掉两for(inti=i<ni)个最高分和两个最低分sum=scoreielseif(n<=n>)评委个数小于等于个且大于个for(intj=j<nj)时去掉一个最高分和一个最低分sum=scorejreturnsumscore=sum}doubleCompetition::Lastscore()求最后得分函数{doublesumscoresumscore=Sumscore()if(n>)lastscore=sumscore(n)if(n<=n>)lastscore=sumscore(n)returnlastscore}voidCompetition::Comporder(Competition*p,constintn)按得分把所有{选手的名次排序Competitiontempfor(inti=i<ni)for(intj=j<nij){if(pjlastscore<pjlastscore)按最后得分排序{temp=pjpj=pjpj=temp}elseif(pjlastscore=pjlastscore)最后得分相等时比较最高分if(pjmaxscore<pjmaxscore){temp=pjpj=pjpj=temp}}}voidCompetition::Compshow()显示信息函数{cout<<setiosflags(iosbase::left)cout<<setw()<<number<<setw()<<name<<setw()<<maxscore<<setw()<<minscore<<setw()<<sumscore<<setw()<<lastscore<<endlresetiosflags(iosbase::left)}voidCompetition::operator=(Competitionp)符号重载实现深拷贝{n=pnnumber=pnumbername=pnamescore=newdoublen*score=*pscore传指针指向内存里的值maxscore=pmaxscoreminscore=pminscorelastscore=plastscoresumscore=psumscore}*****************************************************************Judge类成员函数的实现Judge::Judge(intnumber,stringname)Judge类的构造函数{number=numbername=name}voidJudge::Givescore(Competition*x,Judge*y,intz,inth)评委给分函数{for(inti=i<zi){xin=hfor(intj=j<hj){cout<<"第"<<j<<"号评委给"<<i<<"号选手评分(分值大于小于):"doublescoredo{cin>>scoreif(score<||score>)cout<<"输入错误请重新输入:"}while(score<||score>)xiscorej=score}cout<<endl}}()testcpp文件中是代码如下:#include<iostream>#include"Comph"#include<fstream>#include<string>#include<iomanip>intmain(){constintn=,m=n为参赛者人数m为评委人数Competition*Cper定义一个Competition类存储参赛者信息Cper=newCompetitionnintnumbern={,,,,}参赛者号stringnamen={"zhangjin","lintao","gaojian","maling","liuyifan"}参赛者姓名doublescore={{,,,,,,},{,,,,,,}评委给的分数,{,,,,,,},{,,,,,,},{,,,,,,}}for(inti=i<ni){CperiCompset(numberi,namei,scorei,m)录入参赛者的信息}ofstreamfile定义一个输出流把参赛者的信息写入的磁盘fileopen("ftxt",iosbase::out)filewrite(reinterpretcast<char*>(Cper),n*sizeof(Competition))fileclose()Competition*Cper=newCompetitionn*Cper用来存储从文件中读出的数据ifstreamisisopen("ftxt",iosbase::in)定义一个输入流ftxt中的信息读入内存if(is){isread(reinterpretcast<char*>(Cper),n*sizeof(Competition))}isclose()cout<<""<<endlcout<<setiosflags(iosbase::left)控制输出格式为左对齐<<setw()<<"参赛号"<<setw()<<"姓名"<<setw()<<"最高得分"<<setw()<<"最低得分"<<setw()<<"累计得分"<<setw()<<"最后得分"<<endlcout<<""<<endlresetiosflags(iosbase::left)关闭左对齐格式for(intj=j<nj)把从磁盘文件读出的数据进行处理{CperjMaxscore()求最高分CperjMinscore()求最低分CperjSumscore()求累计得分CperjLastscore()求最后得分CperjCompshow()把选手的主要信息输出的屏幕}Compbase*Cper=newCompbasen定义一个选手基类,用来存储处理后的数据结果Cper=Cper把处理后的结果赋值给Cperofstreamfilefileopen("ftxt",iosbase::out)定义一个输出流把参赛者的信息写入的磁盘文件filewrite(reinterpretcast<char*>(Cper),n*sizeof(Compbase))fileclose()CperComporder(Cper,n)cout<<"按最后得分排名后的结果为"<<endlfor(intk=k<nk){CperkCompshow()把处理过的信息输出的屏幕}增加功能从键盘输入选手的信息对其结果进行处理ints,ds为参赛者数d为评委数Competition*Cper定义一个参赛选手的指针Judge*Jud定义一个评委的指针cout<<"输入参赛者数:"cin>>scout<<endl<<"输入评委人数:"cin>>dCper=newCompetitionsJud=newJudgedfor(i=i<si)CperCompinput(Cper,s)JudGivescore(Cper,Jud,s,d)调用评分函数ofstreamfile定义一个输出流把参赛者的信息写入的磁盘文件fileopen("ftxt",iosbase::out|iosbase::ate)filewrite(reinterpretcast<char*>(Cper),s*sizeof(Competition))fileclose()Competition*Cper=newCompetitions*Cper用来存储从文件中读出的数据ifstreamisisopen("ftxt",iosbase::in)定义一个输入流ftxt中的信息读入内存if(is){isread(reinterpretcast<char*>(Cper),s*sizeof(Competition))}isclose()cout<<""<<endlcout<<setiosflags(iosbase::left)控制输出格式为左对齐<<setw()<<"参赛号"<<setw()<<"姓名"<<setw()<<"最高得分"<<setw()<<"最低得分"<<setw()<<"累计得分"<<setw()<<"最后得分"<<endlcout<<""<<endlresetiosflags(iosbase::left)关闭左对齐格式for(j=j<sj)把从磁盘文件读出的数据进行处理{CperjMaxscore()求最高分CperjMinscore()求最低分CperjSumscore()求累计得分CperjLastscore()求最后得分CperjCompshow()把选手的主要信息输出的屏幕}Compbase*Cper=newCompbases定义一个选手基类,用来存储处理后的数据结果Cper=Cper把处理后的结果赋值给Cperofstreamfilefileopen("ftxt",iosbase::out|iosbase::ate)定义一个输出流把参赛者filewrite(reinterpretcast<char*>(Cper),s*sizeof(Compbase))fileclose()的信息写入的磁盘文件CperComporder(Cper,s)cout<<"按最后得分排名后的结果为"<<endlfor(k=k<sk){CperkCompshow()把处理过的信息输出的屏幕}return}、程序运行时的结果四、个性功能介绍本程序实现了题目的要求:对选手是比赛分数进行了求最大值最小值累计得分最后得分选手名次排序。在本程序中运行后用户可以手动根据提示输入参赛选手的信息和评委的给分系统会自动处理信息并把处理结果保存到文件和向屏幕输出。五、课程设计小结经过一个星期的面向对象课程设计在老师的悉心指导下我终于完成了一个小小的程序设计虽然这个小程序的功能不是很强大但是从开始分析问题、提出问题、结构设计、类的设计、到他是实现和调试整个过程都是我自己在老师的指导下亲手完成的我的收获不小。从中我体会到了程序设计的整个过程是怎样实现的学到了一些面向对象程序设计的一些思想算法和程序调试的一些方法。在这里感谢老师们对我的悉心指导教我解决了设计过程中的很多问题让我学到了很多有用的东西。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/33

对参赛结果分数进行分析C++

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利