资源描述
“C语言程序”课程设计
足球联赛积分应用系统
系 别: 机电工程系
专 业:14电气工程及其自动化
班 级: 2班
姓 名: 许博健 陈国梁 林钟源
学 号: 32号 1号 18号
指导教师: 曹 敏
日 期: 2015年12月25号
目录
1、课程设计目的 - 2 -
2、需求分析 - 2 -
2.1、问题描述 - 2 -
2.2、基本要求 - 3 -
3、总体设计思想及分析说明 - 3 -
3.1、总体思想 - 3 -
3.2、图表分析 - 3 -
3.3 、流程图 - 4 -
3.4、系统功能模块图解 - 5 -
3.5、用户使用说明 - 5 -
4、源程序代码 - 5 -
5、程序调试及运行结果 - 18 -
5.1、调试分析 - 18 -
5.2、程序运行结果 - 18 -
6、心得体会 - 22 -
7、参考文献 - 22 -
成绩评定 - 22 -
成绩: - 22 -
教师签字: - 22 -
1、课程设计目的
随着社会发展,人类的生产生活越来越离不开信息。谁拥有了更多更有效的信息,谁就将在竞争中处于有利地位。信息产业正在成为一个国家的支柱。只有拥有了先进的数据库技术,才能有效地管理好浩如烟海的数据,并从中提取出对自己有用的信息来加以利用。
作为计算机应用的一部分,使用计算机对信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高管理的效率,也是正规化管理与世界接轨的重要条件。
本学期我们学习了一门重要的计算机课程——《C++面向对象程序设计》。《C++面向对象程序设计》是计算机专业中一门重要的专业课。这门课程语言为基础,通过完成一些程序设计,运用所学理论知识掌握面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。:
在这里我们将利用本学期学习的c++知识编写一个足球联赛积分系统,借此来检验我们的学习成果,我们也会得到一些锻:
1.进一步加深我们对所学知识的理解、分析以及运用的灵活性。全面提高我们的综合能力,解决问题的能力。
2.理论与实际相互交涉,既检验了对理论的掌握又检验了理论与实际相结合使用的能力。这不仅可以使我们充分理解理论,还可以提高我们的思考能力。
3.掌握类与对象的知识,熟练使用数组。
4.掌握面向对象程序的设计方法。
5.进一步掌握编写、调试、运行各种能力的综合运用。
2、需求分析
2.1、问题描述
足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。试编一程序统计最近一轮比赛后,各队积分及排名。
2.2、基本要求
设积分表结构如下:队名(不超过15个字符)已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。积分表放在正文文件中。最近一轮的结果从键盘输入,其形式为:主队名(可用代码),客队名(可用代码),主队得分(即进球数),客队得分(即进球数)。程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。
选做内容:篮球联赛(如NBA)往往采用胜率来决定名次,胜率就是取胜的场数比赛场数之比。若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。
3、总体设计思想及分析说明
3.1、总体思想
根据要求,设计一个球队类TEAM其中包含了该类对象的私有数据成员,即:已比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。公有成员方面,除了定义该类构造函数外,还将球队名定义为公有的,目的是便于被类外函数调用。除此之外,由于该程序针对单个对象即某个球队进行的操作,故将诸如排名、更新球队数据、排序后输出等函数定义为普通函数。又因为需要调用该类对象的某些私有数据成员,于是将此等函数声明为类的友元函数。
3.2、图表分析
表1——1 类与对象
表1——2 函数
3.3 、流程图
图1——1流程图
3.4、系统功能模块图解
图1——2功能表
3.5、用户使用说明
根据提示操作即可,具体为:
1、程序运行时,首先要求初始化参赛队总数,各队队名等;
2、按提示操作,即可选择性修改最近一轮比赛中主客队得分,也可查看当前各队积分排名。
注意:请输入与程序要求相应的选择以及正确的格式,不要超出程序给定的范围!
4、源程序代码
#include<iostream>
#include<String>
#include<fstream>
#include<iomanip>
using namespace std;
class TEAM
{
private:
int race_num;
int win_num;
int peace_num;
int lose_num;
int ball_win;
int ball_lose;
int score;
public:
char *name;
TEAM();
friend void rank(TEAM array[],int size);
friend void rewrite_data(TEAM Team[],int size);
friend void print(TEAM array[],int size);
friend void print_af_rank(TEAM array[],int size);
};
void project(TEAM T[],int size);
TEAM::TEAM()
{
name="0";
race_num=0;
win_num=0;
peace_num=0;
lose_num=0;
ball_win=0;
ball_lose=0;
score=0;
}
void initical_name(TEAM S[],int size)
{
if(S[0].name=="0")
{
cout<<"Caution:当前无参赛队伍,请建立!(y/n)__";
string s;
cin>>s;
if(s=="y"||s=="Y")
{
cout<<" _______________________________________________________________________ "<<endl<<endl;
int num,i;
do
{
cout<<">>> 请输入参赛队伍总数(2---"<<size<<")__";
cin>>num;
cout<<endl;
if (num<2||num>size)
{
cout<<"Caution:您的输入有误,请重新输入!"<<endl<<endl;
}
}while(num<2||num>size);
for(i=0;i<num;i++)
{
cout<<">>> 请输入第"<<i+1<<"个球队的队名 __";
char str[15];
cin>>str;
S[i].name=new char[strlen(str)+1];
strcpy(S[i].name,str);
cout<<endl;
}
cout<<"____数据初始化成功! ";
cout<<" ________________________________________________________________________ "<<endl;
cout<<endl;
}
else if(s=="n"||s=="N")
{
cout<<">>>>>>>>>>>>>>>>>>>>>>>>>>> 谢谢使用,祝您愉快!再见!<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;
exit(0);
}
project(S,size);
}
else if(S[0].name!="0"){}
return;
}
void project(TEAM T[],int size)
{
int choice;
do
{
cout<<">>>>>>>>>>>>>>>>>>>>>>>>> 请 选 择 您 要 执 行 的 操 作 <<<<<<<<<<<<<<<<<<<<<<<<"<<endl;
cout<<" 1.查看当前球队排名 "<<endl;
cout<<" 2.更新球队比赛数据 "<<endl;
cout<<" 0.退出 ";
cout<<" _____________________________________________________________ "<<endl;
cout<<">>> 请输入您的选择:(0-2)__";
cin>>choice;
cout<<endl;
switch(choice)
{
case 1:
initical_name(T,size);
rank(T,size);
print_af_rank(T,size);
break;
case 2:
initical_name(T,size);
rewrite_data(T,size);
rank(T,size);
print_af_rank(T,size);
break;
case 0:
cout<<">>>>>>>>>>>>>>>>>>>>>>>>>>> 谢谢使用,祝您愉快!再见!<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;
exit(0);
break;
default:
cout<<"Caution:您的输入有误,请重新进行选择!"<<endl<<endl;
break;
}
}
while(choice!=0);
return;
}
void rank(TEAM array[],int size)
{
TEAM temp;
int L=0,k=0;
for(k=0;k<size;k++)
{
ifstream fin("lsjf.txt");
if(array[k].name!="0")L++;
}
int i=0,j=0;
for(i=0;i<L-1;i++)
{
for(j=0;j<L-1-i;j++)
{
if(array[j].score>array[j+1].score){}
else if(array[j].score<array[j+1].score)
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
else if(array[j].score==array[j+1].score)
{
if((array[j].ball_win-array[j].ball_lose)>(array[j+1].ball_win-array[j+1].ball_lose)){}
else if((array[j].ball_win-array[j].ball_lose)<(array[j+1].ball_win-array[j+1].ball_lose))
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
else if((array[j].ball_win-array[j].ball_lose)==(array[j+1].ball_win-array[j+1].ball_lose))
{
if(array[j].ball_win>array[j+1].ball_win){}
else if(array[j].ball_win<array[j+1].ball_win)
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
else if(array[j].ball_win=array[j+1].ball_win){}
}
}
}
}
return;
}
void print_af_rank(TEAM array[],int size)
{
int n;
cout<<" ________________________________________________________________________ "<<endl;
cout<<" 当前各队积分排名 "<<endl;
cout<<"名次\t队名\t 赛\t胜\t平\t负\t进\t失\t净\t积分"<<endl;
for(n=0;n<size;n++)
{
if(array[n].name!="0")
{
cout<<"第"<<n+1<<"名"<<"\t"<<array[n].name<<"\t "<<array[n].race_num<<"\t"<<array[n].win_num<<"\t"<<array[n].peace_num<<"\t"<<array[n].lose_num<<"\t"<<array[n].ball_win<<"\t"<<array[n].ball_lose<<"\t"<<array[n].ball_win-array[n].ball_lose<<"\t"<<array[n].score<<endl<<endl;
}
}
cout<<" ________________________________________________________________________ "<<endl;
return;
}
void rewrite_data(TEAM Team[],int size)
{
int m;
int ht_num,at_num,ht_ball_win,at_ball_win;
cout<<" ________________________________________________________________________ "<<endl<<endl;
cout<<"参赛球队代码:"<<endl<<endl;
for(m=0;m<size;m++)
{
if(Team[m].name!="0")cout<<" "<<m+1<<". "<<Team[m].name<<endl<<endl;
}
cout<<" ________________________________________________________________________ "<<endl;
cout<<">>> 请选择主队代码:__";
cin>>ht_num;
cout<<endl;
cout<<">>> 请选择客队代码:__";
cin>>at_num;
cout<<endl;
Team[ht_num-1].race_num++;
Team[at_num-1].race_num++;
cout<<">>> 请输入主队"<<"""<<Team[ht_num-1].name<<"""<<"的进球数:__";
cin>>ht_ball_win;
cout<<endl;
Team[ht_num-1].ball_win+=ht_ball_win;
Team[at_num-1].ball_lose+=ht_ball_win;
cout<<">>> 请输入客队"<<"""<<Team[at_num-1].name<<"""<<"的进球数:__";
cin>>at_ball_win;
cout<<endl;
Team[at_num-1].ball_win+=at_ball_win;
Team[ht_num-1].ball_lose+=at_ball_win;
if(ht_ball_win>at_ball_win)
{
Team[ht_num-1].win_num++;
Team[at_num-1].lose_num++;
Team[ht_num-1].score=3*Team[ht_num-1].win_num+1*Team[ht_num-1].peace_num;
}
else if(ht_ball_win<at_ball_win)
{
Team[at_num-1].win_num++;
Team[ht_num-1].lose_num++;
Team[at_num-1].score=3*Team[at_num-1].win_num+1*Team[at_num-1].peace_num;
}
else if(ht_ball_win==at_ball_win)
{
Team[at_num-1].peace_num++;
Team[ht_num-1].peace_num++;
Team[at_num-1].score+=1;
Team[ht_num-1].score+=1;
}
return;
}
int main()
{
int c=1234;
int m=2345;
int a;
int n;int i;int s;
for(i=0;i<3;i++)
{ cout<<"请输入用户名:"<<endl;
cin>>n;
if(c==n)
{cout<<"用户名正确,请输入密码"<<endl;i=3;}
else cout<<"用户名错误"<<endl;}
for(s=0;s<3;s++)
{cin>>a;
if(m==a)
{cout<<"恭喜你,密码正确,欢迎来到足球联赛积分系统"<<endl;
s=3;}
else cout<<"密码错误"<<endl;}
TEAM team[18];
cout<<endl;
cout<<endl;
cout<<" ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ "<<endl;
cout<<" ★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★ "<<endl;
cout<<" ★☆ ☆★ "<<endl;
cout<<" ★☆ ☆★ "<<endl;
cout<<" ★☆ * * * * * * * * * * * * * * ☆★ "<<endl;
cout<<" ★☆ * 联 赛 积 分 应 用 系 统 * ☆★ "<<endl;
cout<<" ★☆ * * * * * * * * * * * * * * ☆★ "<<endl;
cout<<" ★☆ ☆★ "<<endl;
cout<<" ★☆ ☆★ "<<endl;
cout<<" ★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★"<<endl;
cout<<" ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ "<<endl;
cout<<endl;
cout<<" ->->->->->->->->->->->->->-> W E L C O M E <-<-<-<-<-<-<-<-<-<-<-<-<- "<<endl;
cout<<endl;
project(team,18);
return 0;
}
5、程序调试及运行结果
5.1、调试分析
经过无数次的调试,该系统正确的排名且能够较好地满足足球爱好者查询联赛排名的需要,能够比较顺利的完成各项功能,能够显示谁赢谁输,还是平局及进球数、失球数、净胜球数、积分。可建立2—18只球队,操作方便。
5.2、程序运行结果
图1——3登陆用户名密码输入界面
图1——4主界面
图1——5建立球队
图1——6查看排名
图1——7设置主客队
图1——8设置主客队及进、失球数
图1——9数据更新
6、心得体会
经过一个多星期的设计和开发,系统基本开发完毕。在本次课程设计中困难遇到不少,比如重新开始,弹出自己创建的对话框,回放等。由于设计时间较短,所以该系统还有许多不尽如人意的地方,如输入姓名的对话框不够美观、回放不能重复两次等多方面问题。在这次系统开发的过程中,我深深体会到了做一个系统,首先进行需求分析的重要性,了解了一个系统的制作,从功能分析到功能模块分析、与其他系统的关系,这些都有待以后进一步改进。通过实践对于我以后的学习是一笔不小的财富!当然最重要的是学会了团队合作。
7、参考文献
教材:龚静、李娟芳主编.《C++语言程序设计》.西北工业大学出版社.2013
参考资料:
[1]郑莉,傅仕星编,《C++面向对象程序设计》,清华大学出版社,2003年9月出
[2]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版 [3]李师贤等译,《C++精髓》,机械工业出版社,2002年8月出版
[4]Davis Chapman,《学用Visual c++ 6.0》,清华大学出版社,2001年7月出版
[5]郑莉,傅仕星编,C++语言面向对象程序设计习题与实验指导,清华大学出版社,2003年9月出版
成绩评定
成绩:
教师签字:
- 23 -
展开阅读全文