1、用C+写足球联赛积分的足球联赛积分问题描述:足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。试编一程序统计最近一轮比赛后,各队积分及排名。基本要求:设积分表结构如下:队名(不超过15个字符),已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。积分表放在正文文件中。最近一轮的结果从键盘输入,其形式为:主队名(可用代码),客队名(
2、可用代码),主队得分(即进球数),客队得分(即进球数)。程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。测试数据:可选择我国当年的甲A或甲B联赛的数据输入,并检查与报章公布的数据是否一致。实现提示:定义一个球队类,每个球队是均是此类的对象。由于联赛中参赛的队伍数是固定的,因此可用对象数组来实现(当然也可以用链表结构)。每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。选做内容:篮球联赛(如NBA)往往采用胜率
3、来决定名次,胜率就是取胜的场数比赛场数之比。若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。/以下是FootBallTeam.h的头文件代码 #pragma once class FootBallTeam public: char name15; int win_num;/胜场 int lose_num;/败场 int draw_num;/平场 int game_num;/比赛场次 int goal_num;/进球数 int miss_num;/失球数 int score; /积分 int index; /球队编号,这个是方便输入用的 int grade; /球队名次 boo
4、l LoadData(int g_num,int l_num,int is_win); FootBallTeam(void); FootBallTeam(int w,int l,int d,int gm,int gl,int m,int s,int i,char* n,int g); FootBallTeam(void); ; /以下是FootBallTeam.cpp文件代码#include FootBallTeam.h#include using namespace std;FootBallTeam:FootBallTeam():win_num(0),lose_num(0),draw_num
5、(0),game_num(0),goal_num(0),miss_num(0),score(0),grade(1)FootBallTeam:FootBallTeam(int w,int l,int d,int gm,int gl,int m,int s,int i,char* n,int g) 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);bool FootBallTeam:LoadData(int g_num,
6、 int l_num, int is_win) game_num+; goal_num+=g_num; miss_num+=l_num; if (is_win0) win_num+; score+=3; else if (is_win=0) draw_num+; score+=1; else lose_num+; return true;FootBallTeam:FootBallTeam(void)/以下是运行文件代码,你自己随便起名字把x.cpp#include #include FootBallTeam.husing namespace std;#define TeamNum 10/假设有
7、10个球队,你自己可以根据你们实际的表里的数目定义void SortList(FootBallTeam list,int n) /参数list为最新球队数据,n为球队数目 /这里就用最简单算法为O(n2)的冒泡排序吧,你自己要提升算法的话,试着自己使用 /2分或快速 for(int i=1;i=0) if(liststart.scorelistj.score) FootBallTeam temp=listj; listj=listi; listi=temp; start=j; j-; j=i; /这里自己写输入代码把,很简单,循环着输出你想要的结果就行了。void main() char* p
8、ath=D:/test.txt;/这个你根据你们积分表的文件名和路径自己写清楚 /如果你们老师没给提供原始文件的话,你就自己编一个吧 /* 同样的定义一个FootBallTeam ListTeamNum; for(int k=0;kTeamNum;k+) FootBallTeam f(.);/.省略号是你自己要的数据,具体参数看代码的构造函数列表。 就那个多参数的构造函数。 Listk=f; char* path=D:/test.txt; FILE* fp=fopen(path,w); fwrite(&List,sizeof(FootBallTeam)*TeamNum,TeamNum,fp);
9、 fclose(fp); 这样就存储进去了,然后下面继续。 */ FootBallTeam ScoreListTeamNum; /首先从积分表文件中读取原始数据 FILE* fp=fopen(path,r); if (fp=NULL) return; if(fread(&ScoreList,sizeof(FootBallTeam)*TeamNum,TeamNum,fp)=-1); return; fclose(fp); for(int i=0;iTeamNum;i+) ScoreListi.index=i; /把当前球队名次作为索引号 for(int i=0;iTeamNum/2;i+) in
10、t i1,i2;/分别记录两个输入球队的索引号 int g1,g2;/分别记录两个球队的进球数 char* input; while(1) cout请输入第iinput; char temp2; /球队索引号最多为2位数,进球数一般也不超过2位数,篮球的自己改 int num=strlen(input); int index=0;/记录input的索引 int temp_index=0;/记录temmp的索引 while(inputindex!=v|inputindex!=s) /这里自己加对输入的判断,比如把数字输入成字母了, /我这里就不罗嗦了,下面几个while里卖弄是一样的。如果不写,
11、就保证别输入错 temptemp_index+=inputindex+; if(index=num) cout=num) cout=num) cout你输入的数据有错请重新输入; continue; g1=atoi(temp); temp_index=0; while(inputindex!=0) temptemp_index+=inputindex+; g2=atoi(temp); ScoreListi1.LoadData(g1,g2,g1-g2); ScoreListi2.LoadData(g2,g1,g2-g1); break; SortList(ScoreList,TeamNum);
12、system(pause); 补充回答:不好意思,忘记判断积分相同的情况了,给你加上了,用这个吧 /以下是FootBallTeam.h的头文件代码 #pragma once class FootBallTeam public: char name15; int win_num;/胜场 int lose_num;/败场 int draw_num;/平场 int game_num;/比赛场次 int goal_num;/进球数 int miss_num;/失球数 int score; /积分 int index; /球队编号,这个是方便输入用的 int grade; /球队名次 bool same
13、; /所有比较都一样的时候为真,用于排名用 bool LoadData(int g_num,int l_num,int is_win); FootBallTeam(void); FootBallTeam(int w,int l,int d,int gm,int gl,int m,int s,int i,char* n,int g); FootBallTeam(void); ; /以下是FootBallTeam.cpp文件代码#include FootBallTeam.h#include using namespace std;FootBallTeam:FootBallTeam():win_nu
14、m(0),lose_num(0),draw_num(0),game_num(0),goal_num(0),miss_num(0),score(0),grade(1),same(false)FootBallTeam:FootBallTeam(int w,int l,int d,int gm,int gl,int m,int s,int i,char* n,int g) 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; str
15、cpy(name,n);bool FootBallTeam:LoadData(int g_num, int l_num, int is_win) game_num+; goal_num+=g_num; miss_num+=l_num; if (is_win0) win_num+; score+=3; else if (is_win=0) draw_num+; score+=1; else lose_num+; return true;FootBallTeam:FootBallTeam(void)/以下是运行文件代码,你自己随便起名字把x.cpp#include #include FootBal
16、lTeam.husing namespace std;#define TeamNum 10/假设有10个球队,你自己可以根据你们实际的表里的数目定义void SortList(FootBallTeam list,int n) /参数list为最新球队数据,n为球队数目 /这里就用最简单算法为O(n2)的冒泡排序吧,你自己要提升算法的话,试着自己使用 /2分或快速 for(int i=1;i=0) if(liststart.scorelistj.score) FootBallTeam temp=listj; listj=listi; listi=temp; start=j; if(liststa
17、rt.score=listj.score)/积分相同 int m=liststart.goal_num-liststart.miss_num-(listj.goal_num-listj.miss_num); if (m0) /净胜球多 FootBallTeam temp=listj; listj=listi; listi=temp; start=j; if (m=0) /净胜球也一样,看进球数 if(liststart.goal_numlistj.goal_num) FootBallTeam temp=listj; listj=listi; listi=temp; start=j; if (l
18、iststart.goal_num=listj.goal_num) liststart.same=true; j-; j=i; int t=1; for(int i=0;iTeamNum;i+) /排名次 if(listi.same)/和前面球队名次一样 listi.grade=t; else listi.grade=+t; /这里自己写输入代码把,很简单,循环着输出你想要的结果就行了。void main() char* path=D:/test.txt;/这个你根据你们积分表的文件名和路径自己写清楚 /如果你们老师没给提供原始文件的话,你就自己编一个吧 /* 同样的定义一个FootBallT
19、eam ListTeamNum; for(int k=0;kTeamNum;k+) FootBallTeam f(.);/.省略号是你自己要的数据,具体参数看代码的构造函数列表。 就那个多参数的构造函数。 Listk=f; char* path=D:/test.txt; FILE* fp=fopen(path,w); fwrite(&List,sizeof(FootBallTeam)*TeamNum,TeamNum,fp); fclose(fp); 这样就存储进去了,然后下面继续。 */ FootBallTeam ScoreListTeamNum; /首先从积分表文件中读取原始数据 FILE*
20、 fp=fopen(path,r); if (fp=NULL) return; if(fread(&ScoreList,sizeof(FootBallTeam)*TeamNum,TeamNum,fp)=-1); return; fclose(fp); for(int i=0;iTeamNum;i+) ScoreListi.index=i; /把当前球队名次作为索引号 for(int i=0;iTeamNum/2;i+) int i1,i2;/分别记录两个输入球队的索引号 int g1,g2;/分别记录两个球队的进球数 char* input; while(1) cout请输入第iinput;
21、char temp2; /球队索引号最多为2位数,进球数一般也不超过2位数,篮球的自己改 int num=strlen(input); int index=0;/记录input的索引 int temp_index=0;/记录temmp的索引 while(inputindex!=v|inputindex!=s) /这里自己加对输入的判断,比如把数字输入成字母了, /我这里就不罗嗦了,下面几个while里卖弄是一样的。如果不写,就保证别输入错 temptemp_index+=inputindex+; if(index=num) cout=num) cout=num) cout你输入的数据有错请重新输入; continue; g1=atoi(temp); temp_index=0; while(inputindex!=0) temptemp_index+=inputindex+; g2=atoi(temp); ScoreListi1.LoadData(g1,g2,g1-g2); ScoreListi2.LoadData(g2,g1,g2-g1); break; SortList(ScoreList,TeamNum); system(pause);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1