用C++写足球联赛积分的.docx

上传人:b****2 文档编号:24152754 上传时间:2023-05-24 格式:DOCX 页数:19 大小:19.35KB
下载 相关 举报
用C++写足球联赛积分的.docx_第1页
第1页 / 共19页
用C++写足球联赛积分的.docx_第2页
第2页 / 共19页
用C++写足球联赛积分的.docx_第3页
第3页 / 共19页
用C++写足球联赛积分的.docx_第4页
第4页 / 共19页
用C++写足球联赛积分的.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

用C++写足球联赛积分的.docx

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

用C++写足球联赛积分的.docx

用C++写足球联赛积分的

足球联赛积分

问题描述:

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

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

基本要求:

设积分表结构如下:

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

积分表放在正文文件中。

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

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

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

测试数据:

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

实现提示:

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

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

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

选做内容:

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

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

//以下是FootBallTeam.h的头文件代码

#pragmaonce

classFootBallTeam

{

public:

charname[15];

intwin_num;//胜场

intlose_num;//败场

intdraw_num;//平场

intgame_num;//比赛场次

intgoal_num;//进球数

intmiss_num;//失球数

intscore;//积分

intindex;//球队编号,这个是方便输入用的

intgrade;//球队名次

boolLoadData(intg_num,intl_num,intis_win);

FootBallTeam(void);

FootBallTeam(intw,intl,intd,intgm,intgl,intm,ints,inti,char*n,intg);

~FootBallTeam(void);

};

//以下是FootBallTeam.cpp文件代码

#include"FootBallTeam.h"

#include

usingnamespacestd;

FootBallTeam:

:

FootBallTeam():

win_num(0),lose_num(0),draw_num(0),

game_num(0),goal_num(0),miss_num(0),score(0),grade

(1)

{

}

FootBallTeam:

:

FootBallTeam(intw,intl,intd,intgm,intgl,intm,ints,inti,char*n,intg)

{

win_num=w;

lose_num=l;

draw_num=d;

game_num=gm;

goal_num=gl;

miss_num=m;

score=s;

index=i;

grade=g;

strcpy(name,n);

}

boolFootBallTeam:

:

LoadData(intg_num,intl_num,intis_win)

{

game_num++;

goal_num+=g_num;

miss_num+=l_num;

if(is_win>0)

{

win_num++;

score+=3;

}

elseif(is_win==0)

{

draw_num++;

score+=1;

}

else

{

lose_num++;

}

returntrue;

}

FootBallTeam:

:

~FootBallTeam(void)

{

}

//以下是运行文件代码,你自己随便起名字把x.cpp

#include

#include"FootBallTeam.h"

usingnamespacestd;

#defineTeamNum10//假设有10个球队,你自己可以根据你们实际的表里的数目定义

voidSortList(FootBallTeamlist[],intn)//参数list[]为最新球队数据,n为球队数目

{

//这里就用最简单算法为O(n2)的冒泡排序吧,你自己要提升算法的话,试着自己使用

//2分或快速

for(inti=1;i

{

intj=i-1;

intstart=i;

while(j>=0)

{

if(list[start].score>list[j].score)

{

FootBallTeamtemp=list[j];

list[j]=list[i];

list[i]=temp;

start=j;

}

j--;

}

j=i;

}

//这里自己写输入代码把,很简单,循环着输出你想要的结果就行了。

}

voidmain()

{

char*path="D:

//test.txt";//这个你根据你们积分表的文件名和路径自己写清楚

//如果你们老师没给提供原始文件的话,你就自己编一个吧

/*

同样的定义一个FootBallTeamList[TeamNum];

for(intk=0;k

{

FootBallTeamf(.......);//....省略号是你自己要的数据,具体参数看代码的构造函数列表。

就那个多参数的构造函数。

List[k]=f;

}

char*path="D:

//test.txt";

FILE*fp=fopen(path,"w");

fwrite(&List,sizeof(FootBallTeam)*TeamNum,TeamNum,fp);

fclose(fp);

这样就存储进去了,然后下面继续。

*/

FootBallTeamScoreList[TeamNum];

//首先从积分表文件中读取原始数据

FILE*fp=fopen(path,"r");

if(fp==NULL)

return;

if(fread(&ScoreList,sizeof(FootBallTeam)*TeamNum,TeamNum,fp)==-1);

return;

fclose(fp);

for(inti=0;i

ScoreList[i].index=i;//把当前球队名次作为索引号

for(inti=0;i

{

inti1,i2;//分别记录两个输入球队的索引号

intg1,g2;//分别记录两个球队的进球数

char*input;

while

(1)

{

cout<<"请输入第"<

\n"

"(输入格式为球队A索引号vs球队B索引号-A得分:

B得分1vs2-1:

0)\n";

cin>>input;

chartemp[2];//球队索引号最多为2位数,进球数一般也不超过2位数,篮球的自己改

intnum=strlen(input);

intindex=0;//记录input的索引

inttemp_index=0;//记录temmp的索引

while(input[index]!

='v'||input[index]!

='s')

{

//这里自己加对输入的判断,比如把数字输入成字母了,

//我这里就不罗嗦了,下面几个while里卖弄是一样的。

如果不写,就保证别输入错

temp[temp_index++]=input[index++];

}

if(index>=num)

{

cout<<"你输入的数据有错请重新输入";

continue;

}

i1=atoi(temp);

temp_index=0;

while(input[index]!

='-')

{

temp[temp_index++]=input[index++];

}

if(index>=num)

{

cout<<"你输入的数据有错请重新输入";

continue;

}

i2=atoi(temp);

temp_index=0;

while(input[index]!

=':

')

{

temp[temp_index++]=input[index++];

}

if(index>=num)

{

cout<<"你输入的数据有错请重新输入";

continue;

}

g1=atoi(temp);

temp_index=0;

while(input[index]!

='\0')

{

temp[temp_index++]=input[index++];

}

g2=atoi(temp);

ScoreList[i1].LoadData(g1,g2,g1-g2);

ScoreList[i2].LoadData(g2,g1,g2-g1);

break;

}

}

SortList(ScoreList,TeamNum);

system("pause");

}

补充回答:

不好意思,忘记判断积分相同的情况了,给你加上了,用这个吧

//以下是FootBallTeam.h的头文件代码

#pragmaonce

classFootBallTeam

{

public:

charname[15];

intwin_num;//胜场

intlose_num;//败场

intdraw_num;//平场

intgame_num;//比赛场次

intgoal_num;//进球数

intmiss_num;//失球数

intscore;//积分

intindex;//球队编号,这个是方便输入用的

intgrade;//球队名次

boolsame;//所有比较都一样的时候为真,用于排名用

boolLoadData(intg_num,intl_num,intis_win);

FootBallTeam(void);

FootBallTeam(intw,intl,intd,intgm,intgl,intm,ints,inti,char*n,intg);

~FootBallTeam(void);

};

//以下是FootBallTeam.cpp文件代码

#include"FootBallTeam.h"

#include

usingnamespacestd;

FootBallTeam:

:

FootBallTeam():

win_num(0),lose_num(0),draw_num(0),

game_num(0),goal_num(0),miss_num(0),score(0),grade

(1),same(false)

{

}

FootBallTeam:

:

FootBallTeam(intw,intl,intd,intgm,intgl,intm,ints,inti,char*n,intg)

{

win_num=w;

lose_num=l;

draw_num=d;

game_num=gm;

goal_num=gl;

miss_num=m;

score=s;

index=i;

grade=g;

same=false;

strcpy(name,n);

}

boolFootBallTeam:

:

LoadData(intg_num,intl_num,intis_win)

{

game_num++;

goal_num+=g_num;

miss_num+=l_num;

if(is_win>0)

{

win_num++;

score+=3;

}

elseif(is_win==0)

{

draw_num++;

score+=1;

}

else

{

lose_num++;

}

returntrue;

}

FootBallTeam:

:

~FootBallTeam(void)

{

}

//以下是运行文件代码,你自己随便起名字把x.cpp

#include

#include"FootBallTeam.h"

usingnamespacestd;

#defineTeamNum10//假设有10个球队,你自己可以根据你们实际的表里的数目定义

voidSortList(FootBallTeamlist[],intn)//参数list[]为最新球队数据,n为球队数目

{

//这里就用最简单算法为O(n2)的冒泡排序吧,你自己要提升算法的话,试着自己使用

//2分或快速

for(inti=1;i

{

intj=i-1;

intstart=i;

while(j>=0)

{

if(list[start].score>list[j].score)

{

FootBallTeamtemp=list[j];

list[j]=list[i];

list[i]=temp;

start=j;

}

if(list[start].score==list[j].score)//积分相同

{

intm=list[start].goal_num-list[start].miss_num-(list[j].goal_num-list[j].miss_num);

if(m>0)//净胜球多

{

FootBallTeamtemp=list[j];

list[j]=list[i];

list[i]=temp;

start=j;

}

if(m==0)

{//净胜球也一样,看进球数

if(list[start].goal_num>list[j].goal_num)

{

FootBallTeamtemp=list[j];

list[j]=list[i];

list[i]=temp;

start=j;

}

if(list[start].goal_num==list[j].goal_num)

{

list[start].same=true;

}

}

}

j--;

}

j=i;

}

intt=1;

for(inti=0;i

{

if(list[i].same)//和前面球队名次一样

list[i].grade=t;

else

list[i].grade=++t;

}

//这里自己写输入代码把,很简单,循环着输出你想要的结果就行了。

}

voidmain()

{

char*path="D:

//test.txt";//这个你根据你们积分表的文件名和路径自己写清楚

//如果你们老师没给提供原始文件的话,你就自己编一个吧

/*

同样的定义一个FootBallTeamList[TeamNum];

for(intk=0;k

{

FootBallTeamf(.......);//....省略号是你自己要的数据,具体参数看代码的构造函数列表。

就那个多参数的构造函数。

List[k]=f;

}

char*path="D:

//test.txt";

FILE*fp=fopen(path,"w");

fwrite(&List,sizeof(FootBallTeam)*TeamNum,TeamNum,fp);

fclose(fp);

这样就存储进去了,然后下面继续。

*/

FootBallTeamScoreList[TeamNum];

//首先从积分表文件中读取原始数据

FILE*fp=fopen(path,"r");

if(fp==NULL)

return;

if(fread(&ScoreList,sizeof(FootBallTeam)*TeamNum,TeamNum,fp)==-1);

return;

fclose(fp);

for(inti=0;i

ScoreList[i].index=i;//把当前球队名次作为索引号

for(inti=0;i

{

inti1,i2;//分别记录两个输入球队的索引号

intg1,g2;//分别记录两个球队的进球数

char*input;

while

(1)

{

cout<<"请输入第"<

\n"

"(输入格式为球队A索引号vs球队B索引号-A得分:

B得分1vs2-1:

0)\n";

cin>>input;

chartemp[2];//球队索引号最多为2位数,进球数一般也不超过2位数,篮球的自己改

intnum=strlen(input);

intindex=0;//记录input的索引

inttemp_index=0;//记录temmp的索引

while(input[index]!

='v'||input[index]!

='s')

{

//这里自己加对输入的判断,比如把数字输入成字母了,

//我这里就不罗嗦了,下面几个while里卖弄是一样的。

如果不写,就保证别输入错

temp[temp_index++]=input[index++];

}

if(index>=num)

{

cout<<"你输入的数据有错请重新输入";

continue;

}

i1=atoi(temp);

temp_index=0;

while(input[index]!

='-')

{

temp[temp_index++]=input[index++];

}

if(index>=num)

{

cout<<"你输入的数据有错请重新输入";

continue;

}

i2=atoi(temp);

temp_index=0;

while(input[index]!

=':

')

{

temp[temp_index++]=input[index++];

}

if(index>=num)

{

cout<<"你输入的数据有错请重新输入";

continue;

}

g1=atoi(temp);

temp_index=0;

while(input[index]!

='\0')

{

temp[temp_index++]=input[index++];

}

g2=atoi(temp);

ScoreList[i1].LoadData(g1,g2,g1-g2);

ScoreList[i2].LoadData(g2,g1,g2-g1);

break;

}

}

SortList(ScoreList,TeamNum);

system("pause");

}

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

当前位置:首页 > 成人教育 > 电大

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

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