资源描述
课程设计报告
课程设计题目:对参赛结果分数进行处理
目录
一 目的 ************************* 2
二 基本要求 ************************* 2
三 创新要求 ************************* 2
三 创新要求 ************************* 2
四 写出设计说明书 ************************* 2
五 实验题目 ************************* 2
六 实现流程分析 ************************* 3
七 程序源代码 ************************* 5
八 运行结果 ************************* 13
九 问题分析 ************************* 15
十 结构分析 ************************* 15
十一 个性功能介绍 *********************** 15
十二 课程设计的目的与要求******************** 15
十三 课程设计小结 ************************ 16
C++课程设计
一 目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
二 基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的系统结构;
(2)要求在设计的过程中,建立清晰的类关系图,描述出类族之间的关系;
(3)在系统中定义的每个类中要有各自的属性和方法;
(4)在系统的设计中,要用到面向对象的封装、继承和派生、多态的属性。
三 创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能及设计出比较友好的界面等。
四 写出设计说明书
程序源代码大致有三部分,计算除掉一个最高分和一个最低分之后的平均分,计算除掉一个最高分和一个最低分之后的总分,最后是排序,程序主要是实现了这几个功能,说起来很容易的过程,但写起来一点都不容易。
五 实验题目:对参赛结果分数进行处理
参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score(分数score为小于等于10的一个正实数)。选手的最后得分lastScore计算方法为
(1)m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。
(2)m≥9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。
假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。
请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。
假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为:
1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2
2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3
3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6
4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3
5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9
那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:
----------------------------------------------------------
参赛号 姓 名 最高分 最低分 累积分 最后得分
----------------------------------------------------------
1 zhangjin 9.7 7.9 44.9 8.98
2 lintao 9.3 8.2 43.9 8.78
3 guojian 8.9 8.4 42.9 8.58
4 maling 8.9 7.9 42.2 8.44
5 liuyifan 9.8 8.9 46.3 9.26
----------------------------------------------------------
思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。
六 流程图
建立参赛选手类
初始化选手信息
选手比赛得分score[m]从大到小排序
m>=9
计算Score[2] 到score[m]的和
评委数量m
M<9
计算score[1]到score[m]的和
输出比赛选手信息和比赛结果到屏幕
保存比赛选手信息和比赛结果到文件
结束
七 程序源代码
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
using namespace std;
const int N = 20;
class competitor
{
private:
int NO; //选手号码
int judge_amount; //裁判人数
string name; //选手姓名
double score[N]; //选手得分
public:
competitor(string na,int no,int ju,double s[N]); //构造函数
int get_no();
string get_name();
int get_judge_amount();
double *get_score();
void sort(); //将选手得分从大到小排序
double max(); //选手得分最大值
double min(); //选手得分最小值
double last_score(); //除去最大最小分数后的平均分数
double total_score(); //除去最大最小分数后的累计得分
void show_date(); //显示选手信息
};
competitor::competitor(string na,int no,int ju,double s[N])//构造函数
{
name = na;
NO = no;
judge_amount = ju;
for(int i = 0;i<judge_amount;i++)
score[i] = s[i];
for(int j = judge_amount;j<N;j++)
score[judge_amount] = s[judge_amount];
}
int competitor::get_no()
{ return NO;}
string competitor::get_name()
{ return name;}
int competitor::get_judge_amount()
{ return judge_amount;}
double *competitor::get_score()
{ return score;}
void competitor::sort()//将选手得分从大到小排序
{
int i,j,k,temp;
for(i = 0;i<judge_amount-1;i++)
{
k = i;
for(j = i;j<judge_amount;j++)
{
if(score[k] < score[j])
k = j;
}
if(k != i)
{
temp = score[i];
score[i] = score[k];
score[k] = temp;
}
}
}
double competitor::last_score()//除去最大最小分数后的平均分数
{
double sum = 0;
if(judge_amount < 9)
{
for(int i=1;i < judge_amount-1;i++)
sum+=score[i];
return sum/(judge_amount-2) ;
}
if(judge_amount>=9)
{
for(int i=2;i < judge_amount-2;i++)
sum = sum+score[i];
return sum/(judge_amount-4);
}
}
double competitor::total_score()//除去最大最小分数后的累计得分
{
double sum = 0;
if(judge_amount < 9)
{
for(int i=1;i < judge_amount-1;i++)
sum+=score[i];
return sum;
}
if(judge_amount>=9)
{
for(int i=2;i < judge_amount-2;i++)
sum+=score[i];
return sum;
}
}
double competitor::max()//选手得分最大值
{
return score[0];
}
double competitor::min()//选手得分最小值
{
return score[judge_amount-1];
}
void competitor::show_date()//显示参赛选手信息子程序
{
cout<<NO;
cout<<setw(10)<<name;
for(int i = 0;i<judge_amount;i++)
cout<<setw(5)<<setprecision(2)<<score[i]<<" ";
cout<<endl;
}
void show_rerult(competitor &player)//计算并显示参赛选手比赛结果子程序
{
player.sort();
cout<<player.get_no();
cout<<setw(12)<<player.get_name();
cout<<setw(12)<<setprecision(2)<<player.max();
cout<<setw(12)<<setprecision(2)<<player.min();
cout<<setw(14)<<setprecision(2)<<player.total_score();
cout<<setw(13)<<setprecision(2)<<player.last_score()<<endl;
}
ofstream & operator<<(ofstream & base,competitor & a)//运算符重载,向指定文件输入选手的资料
{
base<<a.get_no()<<" "<<a.get_name()<<" ";
for(int i=0;i<a.get_judge_amount();i++)
base<<" "<<a.get_score()[i];
base<<endl;
return base;
}
void out_to_file(competitor a)//将比赛结果保存到文件d:\\competitor result.txt中
{
ofstream outfile1;
outfile1.open("d:\\competitor result.txt",ios::app);
outfile1<<" "<<a.get_no()<<" "<<setw(-5)<<a.get_name()<<" "<<a.max()<<" "<<a.min();
outfile1<<" "<<a.total_score()<<" "<<a.last_score()<<endl;
outfile1.close();//关闭文件
}
int main()
{
double t1[20]={8.8,9.3,7.9,8.7,8.9,9.7,9.2};//选手1得分
double t2[20]={8.9,8.2,8.6,8.8,8.5,9.1,9.3};//选手2得分
double t3[20]={8.9,8.4,8.7,8.6,8.6,8.4,8.6};//选手3得分
double t4[20]={7.9,8.3,8.5,8.6,8.5,8.9,8.3};//选手4得分
double t5[20]={9.5,9.1,9.8,9.2,9.0,9.5,8.9};//选手5得分
competitor player1("zhangjin",1,7,t1);//调用player1构造函数
competitor player2("lintao",2,7,t2);//调用player2构造函数
competitor player3("guojian",3,7,t3);//调用player3构造函数
competitor player4("maling",4,7,t4);//调用player4构造函数
competitor player5("liuyifan",5,7,t5);//调用player5构造函数
player1.show_date();//显示选手1比赛信息
player2.show_date();//显示选手2比赛信息
player3.show_date();//显示选手3比赛信息
player4.show_date();//显示选手4比赛信息
player5.show_date();//显示选手5比赛信息
cout<<"NO"<<setw(10)<<"Name"<<setw(16)<<"Max score"<<setw(13)<<"Min score";//向显示屏输出
cout<<setw(15)<<"Total score"<<setw(12)<<"Last score"<<endl;
show_rerult(player1);//显示选手1比赛结果
show_rerult(player2);//显示选手2比赛结果
show_rerult(player3);//显示选手3比赛结果
show_rerult(player5);//显示选手5比赛结果
show_rerult(player4);//显示选手4比赛结果
ofstream outfile1("d:\\competitor data.txt");//保存到D盘competitor data.txt
outfile1<<player1<<player2<<player3<<player4<<player5;//将选手player1到player5的数据保存到文件competitor data.txt中
outfile1.close();//关闭文件
ofstream outfile2;
outfile2.open("d:\\competitor result.txt",ios::app);
outfile2<<" "<<"NO"<<setw(10)<<"Name"<<setw(15)<<"Max score"<<setw(12)<<"Min score";//向显示屏输出
outfile2<<setw(14)<<"Total score"<<setw(13)<<"Last score"<<endl;
out_to_file(player1);//将player1比赛结果保存到文件d:\\competitor result.txt
out_to_file(player2);//将player2比赛结果保存到文件d:\\competitor result.txt
out_to_file(player3);//将player3比赛结果保存到文件d:\\competitor result.txt
out_to_file(player4);//将player4比赛结果保存到文件d:\\competitor result.txt
out_to_file(player5);//将player5比赛结果保存到文件d:\\competitor result.txt
return 1;
}
八 运行结果
程序所创建的两个文件competitor data.txt和competitor result.txt:
文件competitor data.txt内容
文件competitor result.txt内容
九 问题分析
1.课题内容
本课题对参赛选手分数进行处理,就像我们平时比赛中评分一样,去掉最高分和最低分,剩下的分数的和的平均分就是最后的分。
在程序设计过程中比较繁杂,有很多变量和函数,很容易出错。所以在写的过程中要特别细心。
2.功能结构
有对数据的输入,输入之后要进行计算,计算过程中涉及很多的方法和函数,例如重载,析构函数,构造函数等等。
十 结构分析
程序源代码大致有三部分,计算除掉一个最高分和一个最低分之后的平均分,计算除掉一个最高分和一个最低分之后的总分,最后是排序,程序主要是实现了这几个功能,说起来很容易的过程,但写起来一点都不容易。
十一 个性功能介绍
1.本程序实现了题目的要求:对选手是比赛分数进行了,求最大值,最小值,累计得分,最后得分,选手名次排序。
2.在本程序中运行后,用户可以手动根据提示输入,参赛选手的信息和评委的给分,系统会自动处理信息,并把处理结果保存到文件和向屏幕输出。
十二 课程设计的目的与要求
1教学目的
在《面向对象程序设计》课程教学的基础上,根据软件工程的方法与流程,在相对集中的实训教学时间内,通过一个功能较完整的小型应用系统的设计与开发,深入复习并进一步掌握面向对象的程序设计思想与方法。同时,作为整个实践教学体系一部分,系统培养学生采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能。
2教学要求
从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:
1)根据实现的功能,划分出合理的对象类,明确对象类间的关系。
2) 为每个对象类设计正确的域和方法,为每个方法设计合理的方法体。同时,为对象类及内部的域和方法运用正确的修饰符,如访问控制符等。
3)编程简练,程序功能齐全,能正确运行。
4)说明书、流程图要清楚,规范
5)课题完成后必须按要求提交课程设计报告,格式规范,内容详实。
十三 课程设计小结
1.在课程设计过程中,问题百出,这主要是自己对这门课程的掌握的不够熟练,C++中新增了很多新词和语法,由于理解不够,所以在做的过程中常常会遇到很多问题,并且不能及时得到解答,在写代码中我才意识到自己对这门课程的掌握有多少,例如,刚开始,缺省我基本都不会用,还有析构函数、构造函数拷贝构造函数都搞不清楚,这是我在课程设计中遇到的问题,所以我觉得如果要想学好这门课,还需要继续努力。
2.除了上述的问题外,在课程设计中也学到了很多,对这门课有了更多的了解,面对对象程序设计的方法更直观,把对象定义成问题的概念,问题的抽象,或者具有明确边界和意义的事物。将问题分成对象的方法与对问题的判断和问题的性质有关。
17
展开阅读全文