c++课程设计报告模板.docx
- 文档编号:28482355
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:14
- 大小:335.64KB
c++课程设计报告模板.docx
《c++课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告模板.docx(14页珍藏版)》请在冰豆网上搜索。
c++课程设计报告模板
成绩
课程名称:
C++课程设计
设计题目:
足球联赛积分
姓名:
贾坤
学号:
1208020229
专业班级:
网络1202班
完成日期:
2013年7月4日
1设计任务
1.1设计目的
《C++面向对象程序设计》是计算机专业中一门重要的专业课。
这次课程设计的
目的是以程序设计语言为基础,通过完成一些程序设计,运用所学理论知识掌握
面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相
结合。
从而提高自我分析问题、解决问题的能力。
通过课程设计,我们应该得到
了一些有利锻炼:
进一步加深我们对所学知识的理解、分析以及运用的灵活性。
全面提高我
们的综合能力,解决问题的能力。
2.理论与实际相互交涉,既检验了对理论的掌握又检验了理论与实际相结合
使用的能力。
这不仅可以使我们充分理解理论,还可以提高我们的思考能力。
3.掌握类与对象的知识,熟练使用数组。
4.掌握面向对象程序的设计方法。
5.进一步掌握编写、调试、运行各种能力的综合运用。
1.2设计内容
足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。
试编写一个足球联赛积分排名程序,程序统计最近一轮比赛后,各队积分及排名。
2设计过程
2.1程序功能
每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。
2.2算法原理
1
问题分析:
为了实现足球联赛积分,首先要定义一个球队类和对象数组,每个球队均是球队类的对象。
由于联赛中参赛的队伍数是固定的,因此将每个球队存放在对象数组的一个数组元素中。
每输入两个对的比赛成绩,则相应的队的有关数据(补赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等),即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数,积分为排列元素)排除名次并输出。
2.
结构分析:
在Team球队类中,设置一个外部接口,对比赛的进球数,失球数,净胜球数,赢球、输球、平局,积分先进行初始化为0。
存放类的相应函数,在类外再分别实现相应的函数。
其中goaling类是实现比赛队伍本身的进球、失球、净胜球的信息;而在类matching中,实现的是两个不同的比赛队伍之间的比赛成绩。
通过a与b的大小来对win、score,Lost和equal进行相应的运算。
这两个类均使用了this指针来保存这些值。
Match类中用户输入主队和客队的名字并调用goaling、matching函数。
Setname、getS、getPG函数是返回队伍的名字、积分和净胜球数,getteamlist的作用是文件以二进制的方法储存在D盘,并可读和写。
3.
实现流程分析:
创建一个Team球队类,该类中具有进球数、失球数、净胜球数、赢球、输球、平局和积分的数据成员。
在该类中定义成员函数实现相关信息的输出,函数的原型声明放在类的定义中,用构造函数初始化每个成员,显示信息函数要求将对象中的完整信息打印出来。
2.3程序流程图
2.4程序主要模块或者函数
classTeam{
private:
intgoal;
intcgoal;
intpgoal;
intwin;
intlost;
intequal;
intscorce;
public:
charname[20];
Team(){
goal=0;
cgoal=0;
pgoal=0;
win=0;
lost=0;
equal=0;
scorce=0;
}
voidDisplay(){
cout< } voidgoaling(inta); voidmatching(inta,intb); voidmatch(Team&t); voidsetname(); intgetS(); intgetPG(); }; voidTeam: : goaling(inta){ if(a>0) this->goal+=a; if(a<0) this->cgoal-=a; pgoal=goal-cgoal; } voidTeam: : matching(inta,intb){ if(a>b){ this->win+=1; this->scorce+=3; } if(a this->lost+=1; } if(a==b){ this->equal+=1; this->scorce+=1; } } voidTeam: : match(Team&t){ inta,b; cout<<"presshome'sgoal: "; cin>>a; if(a<0){ cout<<"warning"< exit (1); } cout<<"pressihome'sgoal: "; cin>>b; if(b<0){ cout<<"warning"< exit (1); } this->goaling(a); this->goaling(0-b); t.goaling(b); t.goaling(0-a); this->matching(a,b); t.matching(b,a); } voidTeam: : setname(){ cout<<"team'sname: "; cin>>this->name; } intTeam: : getS(){ returnthis->scorce; } intTeam: : getPG(){ returnthis->pgoal; } voidgetteamlist(); fstreamteam("d: \\teams.txt",ios: : in|ios: : out|ios: : binary); intmain(){ charname[20]; Teamt[5]; intt1,t2; charn; inti; if(! team){ cout<<"lostfile"< exit (1); } while (1){ cout<<"doyouhavesettheteamname? (Y)"< cin>>n; if(n=='Y'||n=='y') break; for(inti=0;i<=4;i++){ t[i].setname(); team.write((char*)&t[i],sizeof(t[i])); } break; } team.seekg(0,ios: : beg); for(i=0;i<5;i++) team.read((char*)&t[i],sizeof(t[i])); while (1){ cout<<"isanymatchnow? (N)"< cin>>n; if(n=='N'||n=='n') break; do{ cout<<"hometeamname: "; cin>>name; for(i=0;i<5;i++){ if(strcmp(name,t[i].name)==0){ t1=i; break; } else continue; } }while(i==5); do{ cout<<"keteamname: "; cin>>name; for(i=0;i<5;i++){ if(strcmp(name,t[i].name)==0){ t2=i; break; } else continue; } }while(i==5); t[t1].match(t[t2]); } team.seekg(0,ios: : beg); for(i=0;i<5;i++) team.write((char*)&t[i],sizeof(t[i])); getteamlist(); return0; } voidgetteamlist(){ Teamt1[5]; Teamhao; fstreamgamelist("d: \\teamlist.txt",ios: : in|ios: : out|ios: : binary); if(! gamelist){ cout<<"wrong! ! "< exit (1); } team.seekg(0,ios: : beg); for(inti=0;i<5;i++){ team.read((char*)&t1[i],sizeof(t1[i])); } for(intj=0;j<4;j++) for(inti=0;i<4-j;i++){ if(t1[i].getS() hao=t1[i]; t1[i]=t1[i+1]; t1[i+1]=hao; } if(t1[i].getS()==t1[i+1].getS()){ if(t1[i].getPG() hao=t1[i]; t1[i]=t1[i+1]; t1[i+1]=hao; } } } cout<<"球队"<<"进球数"<<"失球数"<<"净胜球"<<"胜"<<"负"<<"平"<<"积分"< for(i=0;i<5;i++){ gamelist.write((char*)&t1[i],sizeof(t1[i])); t1[i].Display(); gamelist.close(); } } 3软件运行或者测试结果 (1)程序运行前没有建teams.txt和taemlist.txt这两个文本文档 (2)程序运行钱建了team.txt和teamlist.txt这两个文本文档 (3)输入Y后的结果 (4)输入N时的结果,程序无限循环下去 (5)在3之后,输入N之后的结果 (6)在()之后的输入非Y后的结果 (7)输入N后的结果 (8)在(6)后输入非N的结果 (9)在(8)输入N的结果 (10)在(9)后输入非N的结果 4软件设计过程中遇到的问题以及解决办法 当自己写一个类的时候,有些功能只依赖于类的public接口函数。 当需要用函数封装该功能时,是写成成员函数、友元函数还是普通函数? 解决方法: 查阅C++课本,使用普通函数。 这样增强了类的封装性,实现新功能也更灵活。 相关功能的普通函数还可以声明到一个namespace中作进一步打包封装。 用namespace可以在很多文件中实现向同一个namespace添加功能函数,扩展灵活,编译依存度更低,使用起来语意像类的静态成员函数一样清晰。 有百利而无一害。 为什么将自定义代码放在std命名空间里会出错? 问题原因: 因为std的所有成员,都能且只能由C++标准委员会指定。 5总结 经历这次的课程设计,对自己的学习有很多帮助,在平时的很少有那么多的时间去学习c++,这次的课程设计使我有了一个相对比较集中的时间去练习我的编程,特别是我的动手能力有了极大的提高,因为这次的课程设计几乎涉及到了C++语言程序设计的整本书的重要内容,让我从中受益,有了一次巩固知识的机会。 同时还让自己平时不怎么注意的问题得到了自己足够的关注,为以后写程序奠定下了坚实的基础,让自己对这门课的课程有了更深刻的认识。 这次写完程序后,等到自己能顺利运行时,我觉得自己的任务才刚刚开始,我的目标是在没有我的讲解下,还能够顺利的运行我的程序。 因为我觉得自己写程序就是给别人用的,自己运行的再好也没有什么用,只有别人运行的舒服,才能够说明你的程序取得了一定的成功。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程设计 报告 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)