足球联赛积分c++程序.docx

上传人:b****7 文档编号:10278410 上传时间:2023-02-09 格式:DOCX 页数:26 大小:71.25KB
下载 相关 举报
足球联赛积分c++程序.docx_第1页
第1页 / 共26页
足球联赛积分c++程序.docx_第2页
第2页 / 共26页
足球联赛积分c++程序.docx_第3页
第3页 / 共26页
足球联赛积分c++程序.docx_第4页
第4页 / 共26页
足球联赛积分c++程序.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

足球联赛积分c++程序.docx

《足球联赛积分c++程序.docx》由会员分享,可在线阅读,更多相关《足球联赛积分c++程序.docx(26页珍藏版)》请在冰豆网上搜索。

足球联赛积分c++程序.docx

足球联赛积分c++程序

足球联赛积分

问题描述

足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。

试编一程序统计最近一轮比赛后,各队积分及排名。

基本要求

设积分表结构如下:

队名(不超过15个字符),已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。

积分表放在正文文件中。

最近一轮的结果从键盘输入,其形式为:

主队名(可用代码),客队名(可用代码),主队得分(即进球数),客队得分(即进球数)。

程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。

测试数据

可选择我国当年的甲A或甲B联赛的数据输入,并检查与报章公布的数据是否一致。

实现提示

定义一个球队类,每个球队是均是此类的对象。

由于联赛中参赛的队伍数是固定的,因此可用对象数组来实现(当然也可以用链表结构)。

每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。

选做内容

篮球联赛(如NBA)往往采用胜率来决定名次,胜率就是取胜的场数比赛场数之比。

若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。

 

(一)目的:

(1)要求学生达到熟练掌握C++语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

(二)基本要求:

(1)要求利用面向对象的方法以及C++的编程思想来完成系统的系统结构;

(2)要求在设计的过程中,建立清晰的UML类关系图,描述出类族之间的关系;

(3)在系统中定义的每个类中要有各自的属性和方法;

(4)在系统的设计中,要用到面向对象的封装、继承和派生、多态的属性。

(三)创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能及设计出比较友好的界面等。

(四)写出设计说明书

 

首先定义一个球队类,每一个球队都属于这个类以下为定义球队类的代码

classqiudui//球队类

{

private:

char*name;//球队名称

intsheng;//胜的场数

intfu;//负的场数

intping;//平的场数

public:

friendvoidpaixu(qiuduic[]);//将联赛排序函数定义为友元函数

char*getname();//获得球队的名称

voidcompare(qiudui&c);//经行胜负平的判断

intscore;//比分

intjifen;//积分

intgetsheng();//获得胜的场数

intgetfu();//获得负的场数

intgetping();//获得平的场数

intjingsheng;//净胜球

intgetjingsheng();//获得净胜球的个数

voidset(char*n,intsheng1,intfu1,intping1);//设置球队信息

intchangshu;//比赛的场数

intgetchangshu();//获得比赛的场数

intjinqiu;//进球数

intgetjifen();//获得积分

intgetjinqiu();//获得进球数

intgetshiqiu();//获得失球数

intgetscore();//获得分数

intshiqiu;//失球数

voidshow();//输出球队的信息

voidjieguo();//给球队类中的一些数据成员赋值

};

以下为各个函数的实现

char*qiudui:

:

getname()//获取名称的函数的实现

{

returnname;

}

/*假设第一个队作为对象去调用这个函数,用第二个队作为参数,如果第一个队的比分大于第二个队的比分

则第一个队的胜的场数加1,第二个队的负的场数加1;如果比分相等,则两个队的平局的场数都加1;如果第

二个的比分大于第一个队,则第二个队的胜的场数加1,第一个队的负的场数加1.这就是两个队经行比较的函

数*/

voidqiudui:

:

compare(qiudui&c)//两个队经行比较的函数

//计算两个队的胜负平的场数,用引用做参数,是经行地址传递

{

if(score>c.score)

{

sheng++;

c.fu++;

}

elseif(score==c.score)

{

ping++;

c.ping++;

}

else

{

fu++;

c.sheng++;

}

}

/*以下的函数是为类中的一些成员赋值的函数,某个队经行的场数为这个队胜的场数加负的场数加平的场数。

该队的积分为胜一场得3分,负一场得0分,平一场的1分。

净胜球的个数为进球的个数减去失球的个数*/

voidqiudui:

:

jieguo()

{

changshu=sheng+fu+ping;

jifen=sheng*3+ping;

jingsheng=jinqiu-shiqiu;

}

voidqiudui:

:

set(char*n,intsheng1,intfu1,intping1)//设置球队的信息

{

name=newchar[];//动态申请内存

strcpy(name,n);

sheng=sheng1;

fu=fu1;

ping=ping1;

}

voidqiudui:

:

show()//显示球队的信息函数的实现

{

cout<

}

/*此函数的排序方法我用的是冒泡排序法。

一般来说,球队积分高的在前面,如果积分相同的情况下,比较两个队的净胜球的个数,净胜球多的在前,(净胜球为进球数减去失球数),如果净胜球相同的话就经行抽签决定,在这里抽签我用的是随机函数经行判断,在0和1两个数之间经行随机,当为1时,一个队排前,为0时,另一个队排前,以下为排序函数*/

voidpaixu(qiuduic[])//联赛排序的实现

{

intn;

n=sizeof(c);

for(intj=0;j

{

for(inti=0;i

{

if(c[i].jifen!

=c[i+1].jifen)//先判断两个队的积分是否相同

{

if(c[i].jifen

{

qiuduipt=c[i];

c[i]=c[i+1];

c[i+1]=pt;

}

}

else

{

if(c[i].jingsheng!

=c[i+1].jingsheng)//如果积分相同再比较净胜球的个数是否相同

{

if(c[i].jingsheng

{

qiuduipt=c[i];

c[i]=c[i+1];

c[i+1]=pt;

}

}

else//净胜球相同的情况再经行抽签(随机)决定

{

srand(time(NULL));

intx=rand();

if(x==1)

{

qiuduipt=c[i];

c[i]=c[i+1];

c[i+1]=pt;

}

}

}

}

}

}

类中的每个成员都介绍完了,下面来讲解主函数的代码

voidmain()

{

qiuduiq[5];//由于球队的个数为固定的值,所以定义对象数组

//以下给每一个对象赋值

q[0].set("山狗队",3,5,2);

q[0].jinqiu=20;q[0].shiqiu=16;q[0].jieguo();

q[1].set("老虎队",5,3,2);

q[1].jinqiu=14;q[1].shiqiu=16;q[1].jieguo();

q[2].set("阿猫队",4,4,2);

q[2].jinqiu=21;q[2].shiqiu=13;q[2].jieguo();

q[3].set("猛牛队",7,1,2);

q[3].jinqiu=18;q[3].shiqiu=21;q[3].jieguo();

q[4].set("雄鹿队",6,2,2);

q[4].jinqiu=10;q[4].shiqiu=19;q[4].jieguo();

ofstreamf1("第五题1.txt");//定义一个文件输出流对象,将刚才的对象数组全部写入文件中

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

{

f1.write((char*)(&q[i]),sizeof(q[i]));//write是以二进制方式写入文件的函数

}

f1.close();//文件操作完了要及时的关闭文件,否则会造成未知的错误

ifstreamf2("第五题1.txt");//定义一个文件的输入流对象,将文件的内容全部读出来

cout<<"--------------------------主客场双循环赛制的比赛结果-----------------------"<

cout<

cout<<"队名\t场次\t胜\t平\t负\t进球\t失球\t净胜球\t积分"<

for(i=0;i<5;i++)

{

f2.read((char*)(&q[i]),sizeof(q[i]));//read函数和write是一对的,它是文件的内容以二进制的方式读出

q[i].show();//文件中的内容读入q[i]数组中,再用类中的show函数显示文件中的内容

}

cout<

cout<<"---------------------------------------------------------------------------"<

cout<<"按任意键开始排名"<

getch();

system("cls");

cout<<"----------------------------主客场双循环赛的赛后排名-----------------------"<

cout<

paixu(q);//用排序函数对五个球队经行排名

ofstreamf3("第五题2.txt");

for(i=0;i<5;i++)

{

f3.write((char*)(&q[i]),sizeof(q[i]));//将排名后的函数写进另外一个文件中

}

f3.close();

ifstreamf4("第五题2.txt");

cout<<"名次\t队名\t场次\t胜\t平\t负\t进球\t失球\t净胜球\t积分"<

for(i=0;i<5;i++)

{

f4.read((char*)(&q[i]),sizeof(q[i]));//读出文件”第五题2.txt”中排序好的内容

cout<

q[i].show();//将排好序的文件中的内容显示在屏幕中

}

f4.close();

cout<

cout<<"---------------------------------------------------------------------------"<

cout<<"按任意键开始比赛"<

getch();

system("cls");

cout<<"---------------------正在经行比赛,比赛结果请耐心等待-----------------------"<

for(intj=0;j<5;j++)

{

for(inti=1+j;i<5;i++)

{

intx,y;

srand(time(NULL));

/*获取随机种子,不同的时间产生的数是不同的,每两个队都要经行比赛,用键盘输入有些繁琐,所以直接用随机数给两个队的比分赋值*/

x=rand()%6;//rand()%MAX,产生的随机数的范围是0~MAX

y=rand()%6;

cout<

Sleep(350);//Sleep()是API的延时函数,起暂停的功能,Sleep(1000)为暂停1秒

cout<<".";

Sleep(350);

cout<<".";

Sleep(350);

cout<<".";

Sleep(350);

cout<<"\b\b\b\b\b\b\b\b\b\b\b\b\b";//\b为转义字符,退格的意思

cout<<"比分为:

"<

"<

q[j].score=x;

q[i].score=y;

q[j].compare(q[i]);

q[i].jinqiu=q[i].jinqiu+y;

q[i].shiqiu=q[i].shiqiu+x;

q[j].jinqiu=q[j].jinqiu+x;

q[j].shiqiu=q[j].shiqiu+y;

q[i].jieguo();q[j].jieguo();

}

}

paixu(q);

cout<<"最后一场比赛已经结束,按任意键开始排名"<

getch();

system("cls");

cout<<"--------------------------最后一场比赛前的排名情况-------------------------"<

cout<

ofstreamf5("第五题3.txt");

for(i=0;i<5;i++)

{

f5.write((char*)(&q[i]),sizeof(q[i]));//将比赛完后的内容再写入一个文件中去

}

f5.close();

qiuduiq1[5];

ifstreamf6("第五题2.txt");

cout<<"名次\t队名\t场次\t胜\t平\t负\t进球\t失球\t净胜球\t积分"<

for(i=0;i<5;i++)

{

f6.read((char*)(&q1[i]),sizeof(q1[i]));

cout<

q1[i].show();//由上可知,文件"第五题2.txt"是最后一轮比赛之前的信息,所以输出屏幕上的为最后一轮比赛前的成绩

}

f6.close();

cout<

cout<<"---------------------------------------------------------------------------"<

cout<<"-------------------------最后一场比赛后的排名更新情况----------------------"<

cout<

ifstreamf7("第五题3.txt");

cout<<"名次\t队名\t场次\t胜\t平\t负\t进球\t失球\t净胜球\t积分"<

for(i=0;i<5;i++)

{

f7.read((char*)(&q1[i]),sizeof(q1[i]));

cout<

q1[i].show();//显示的是比赛后的成绩

}

cout<

cout<<"---------------------------------------------------------------------------"<

f7.close();

cout<<"按任意键开始颁奖"<

getch();

system("cls");

cout<

cout<<"冠军为:

"<

"<

cout<

cout<<"亚军为:

"<

"<

cout<

cout<<"季军为:

"<

"<

cout<

cout<<"本场足球联赛告一段落,按任意键退出联赛"<

getch();

}

本程序就讲解到这了

 

以下为改程序的完整代码

#include

#include

#include

#include

#include

usingnamespacestd;

classqiudui;//对类的声明

voidpaixu(qiuduic[]);//对友元函数的声明

classqiudui

{

private:

char*name;//球队名称

intsheng;//胜的场数

intfu;//负的场数

intping;//平的场数

public:

friendvoidpaixu(qiuduic[]);//将联赛排序定义为友元函数

char*getname();

voidcompare(qiudui&c);//经行胜负平的判断

intscore;//比分

intjifen;//积分

intgetsheng();//获得胜的场数

intgetfu();//获得负的场数

intgetping();//获得平的场数

intjingsheng;//净胜球

intgetjingsheng();

voidset(char*n,intsheng1,intfu1,intping1);//设置球队信息

intchangshu;//比赛的场数

intgetchangshu();//获得比赛的场数

intjinqiu;//进球数

intgetjifen();//获得积分

intgetjinqiu();//获得进球数

intgetshiqiu();//获得失球数

intgetscore();//获得分数

intshiqiu;//失球数

voidshow();//输出信息

voidjieguo();//

};

char*qiudui:

:

getname()

{

returnname;

}

voidqiudui:

:

compare(qiudui&c)//计算两个队的胜负平的场数,用引用做参数

{

if(score>c.score)

{

sheng++;

c.fu++;

}

elseif(score==c.score)

{

ping++;

c.ping++;

}

else

{

fu++;

c.sheng++;

}

}

voidqiudui:

:

jieguo()

{

changshu=sheng+fu+ping;

jifen=sheng*3+ping;

jingsheng=jinqiu-shiqiu;

}

voidqiudui:

:

set(char*n,intsheng1,intfu1,intping1)

{

name=newchar[];

strcpy(name,n);

sheng=sheng1;

fu=fu1;

ping=ping1;

}

intqiudui:

:

getjinqiu()

{

returnscore;

}

intqiudui:

:

getscore()

{

returnscore;

}

voidqiudui:

:

show()

{

cout<

}

voidpaixu(qiuduic[])//联赛排序的实现

{

intn;

n=sizeof(c);

for(intj=0;j

{

for(inti=0;i

{

if(c[i].jifen!

=c[i+1].jifen)

{

if(c[i].jifen

{

qiuduipt=c[i];

c[i]=c[i+1];

c[i+1]=pt;

}

}

else

{

if(c[i].jingsheng!

=c[i+1].jingsheng)

{

if(c[i].jingsheng

{

qiuduipt=c[i];

c[i]=c[i+1];

c[i+1]=pt;

}

}

else

{

srand(time(NULL));

intx=rand();

if(x==1)

{

qiuduipt=c[i];

c[i]=c[i+1];

c[i+1]=p

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1