数据结构世界杯.docx

上传人:b****4 文档编号:5415943 上传时间:2022-12-16 格式:DOCX 页数:24 大小:808.19KB
下载 相关 举报
数据结构世界杯.docx_第1页
第1页 / 共24页
数据结构世界杯.docx_第2页
第2页 / 共24页
数据结构世界杯.docx_第3页
第3页 / 共24页
数据结构世界杯.docx_第4页
第4页 / 共24页
数据结构世界杯.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据结构世界杯.docx

《数据结构世界杯.docx》由会员分享,可在线阅读,更多相关《数据结构世界杯.docx(24页珍藏版)》请在冰豆网上搜索。

数据结构世界杯.docx

数据结构世界杯

 

2014世界杯信息查询系统

 

学号:

姓名:

指导教师:

1需求分析

1.1程序功能

1)添加及修改球队、球员、比赛和得分信息;

2)查询球队的基本信息(英文名、主教练、明星球员、世界杯最好战绩、历史名将等)、球队球员总名单、统计球队参加的所有比赛;

3)查询某场比赛的信息(对阵信息和哪位球员在何时进球);

4)按球队名及姓名或球员编号查找球员信息(包含其所属球队、位置、排名及比赛信息等);

1.2需要处理的数据

1)球队的队名、英文名、主教练、明星球员、世界杯最佳战绩、历史名将、排名;

2)球员的姓名、编号、所属球队、位置、现役俱乐部、国家队出场次数/进球数、本赛季俱乐部出场次数/进球数、本次世界杯进球数;

3)对阵信息;

4)得分信息:

球队、球员、进球时刻、对阵球队等。

1.3程序开发运行选用的环境

本程序使用VS编写。

1.4用户界面的设计

 

2数据结构设计

2.1ADT定义

2.1.1图

classGraph{

public:

intnumVertex;//顶点数

intnumEdge;//边数

int*Mark;//入度访问,访问过为1,未访问为0

int*Indegree;//顶点入度

Graph(intnumVert);//构造函数

~Graph();//析构函数

intVerticesNum();//返回顶点数

intEdgesNum();//返回边数

boolIsEdge(EdgeoneEdge);//判断是否是边

};

2.1.2相邻矩阵存储图

classGraphm:

publicGraph{

private:

int**matrix;//指向相邻矩阵的指针

public:

Graphm(intnumVert);//构造函数

virtual~Graphm();//析构函数

EdgeFirstEdge(intoneVertex);//返回依附于顶点oneVertex的第一条边

EdgeNextEdge(EdgepreEdge);//返回preEdge的下一条边

voidSetEdge(intfrom,intto,intweight);//设置一条边

voiddelEdge(intfrom,intto);//删除边

intGetEdge(intfrom,intto);//获得一条边};

2.1.3快速排序

voidQuickSort(RecordArray[],intleft,intright);//快速排序

voidswap(RecordArray[],intpivot,intright);//轴值交换到数组末端

intSelectPivot(intleft,intright);//选择轴值

intPartition(RecordArray[],intleft,intright);//分割函数,分割后轴值已到达正确位置

2.2主程序流程

CWorldCupApp()CWorldCupDoc()

~CWorldCupDoc()

GetData(intn)

GetTeam(CStringt)

CWorldCupDoc()GetTeam(intnum)

OnNewDocument()

OnOpenDocument(LPCTSTRIpszPathName)

Serialize(CArchive&ar)

TeamAdd(Team*t)

CMainFrame()TeamDelete(Team*t)

CWorldCupView()

~CWorldCupView()

GetDocument()

OnAddMatch()

OnAddPlayer()

OnAddScore()

OnAddTeam()

CWorldCupView()OnDraw(CDC*pDC)

OnLookMatch()

OnLookPlayer()

OnLookPlayername()

OnLookplayernumberh()

OnLookTeam()

OnLookTeamBasic()

OnLookTeamMatch()

OnLookTeamplayers()

3详细设计

3.1各程序模块间的调用关系

voidOnAddTeam();

voidOnAddPlayer();

voidOnAddMatch();添加信息

voidOnAddScore();

voidOnLookTeam();

voidOnLookMatch()

CWorldCupViewvoidOnLookPlayer()

voidOnLookPlayername()

voidOnLookplayernumberh()查询信息

voidOnLookTeam()

voidOnLookTeamBasic()

voidOnLookTeamMatch()

voidOnLookTeamplayers()

voidOnDraw(CDC*pDC)显示输出信息

 

3.2函数调用关系图

QuickSort(Arraya[],intleft.Intright)

QuickSort()Swap(Arraya[],intpivot.Intright)

SelectPivot(intleft.Intright)

Partition(Arraya[],intleft.Intright)

 

3.2.1voidCWorldCupView:

:

OnAddTeam(){

AddTeamaboutDlg;//关联对话框

booli;

CWorldCupDoc*pDoc=GetDocument();//获得文件指针

if(aboutDlg.DoModal()==IDOK){

UpdateData(TRUE);

Team*t=newTeam();

t->SetTeamName(aboutDlg.m_teamname);//添加球队信息

t->SetRanking(aboutDlg.m_teamranking);

t->SetVertex(aboutDlg.m_teamranking);

t->SetTeamEnglishName(aboutDlg.m_englishname);

t->SetTeamHeadCoach(aboutDlg.m_headcoach);

t->SetTeamStarPlayer(aboutDlg.m_starplayer);

t->SetTeamBestResult(aboutDlg.m_bestresult);

t->SetTeamHistory(aboutDlg.m_history);

i=pDoc->TeamAdd(t);

}

else{}

if(i==true){

AfxMessageBox("添加成功!

");//提示添加成功

}

Invalidate();//视窗重画

}

OnAddPlayer()、OnAddMatch()、OnAddScore()同上;

3.2.2voidCWorldCupView:

:

OnLookMatch(){

match=false;

LookMatchaboutDlg;

CWorldCupDoc*pDoc=GetDocument();//获得文件指针

if(aboutDlg.DoModal()==IDOK){

UpdateData(TRUE);

team1=aboutDlg.m_team1;//查找对阵的球队

team2=aboutDlg.m_team2;

t1=pDoc->GetTeam(aboutDlg.m_team1);//查不到的情况

if(t1==NULL)AfxMessageBox("没有此场比赛信息!

");

else{

t2=pDoc->GetTeam(aboutDlg.m_team2);

if(t2==NULL)AfxMessageBox("没有此场比赛信息!

");

else{//输出图结构相应边的权值即为比分信息

weight1=pDoc->g->GetEdge(t1->vertex,t2->vertex);

weight2=pDoc->g->GetEdge(t2->vertex,t1->vertex);

match=true;

players=false;//只显示输出比赛信息,其他信息不能输出

playername=false;

playernumber=false;

team=false;

teaminformation=false;

teambasic=false;

teammatch=false;

rule=false;

worldcuphistory=false;

jixiangwu=false;

}

}

}

else{}

Invalidate();//视窗重画

}

OnLookTeam();OnLookPlayerName();OnLookPlayerNumber();OnLookTeamPlayers();OnLookTeamMatch();OnLookTeamBasic();OnLookPlayer()同上;

3.2.3OnDraw(CDC*pDC);

if(team){

pDC->TextOut(130,10,"32强排行榜");

pDC->TextOut(20,45,"队伍");

pDC->TextOut(120,45,"排名");

while(i

te=pDoc->GetData(i);//获得指向球队的指针

if(i<20){

pDC->TextOut(20,h1,te->GetTeamName());

ran.Format("%d",te->GetRanking());

pDC->TextOut(120,h1,ran);

h1+=20;

}else{

pDC->TextOut(220,45,"队伍");

pDC->TextOut(320,45,"排名");

pDC->TextOut(220,h2,te->GetTeamName());

ran.Format("%d",te->GetRanking());

pDC->TextOut(320,h2,ran);

h2+=20;}

i++;

}

}

4用户说明

1.打开程序;

2.在界面中点击打开按钮,选择worldCup;

3.可以选择添加、查询来添加查询自己想要的信息;

4.如有错误信息,修改(重新键入即可)后保存即可。

 

5测试结果

5.1添加与修改

1添加球队信息

2添加球员信息

3添加比赛信息

4添加球员信息

5.2查询

5.2.1查询队伍信息

1查询球队基本信息

2查询球员名单

3查询球队比赛统计

5.2.2查询对阵信息

5.2.2查询球员信息

1通过姓名查询

2通过号码查询

5.3排行榜

5.3.132强排行榜

5.3.2射手榜

5.4错误的输入与输出

5.4.1球队基本信息

5.4.2球队对阵信息

5.4.2球员信息

6源程序(主要类)

6.1Score类

classScore:

publicCObject

{

DECLARE_SERIAL(Score)

public:

Score(constScore&s);

voidSerialize(CArchive&ar);

Score*operator=(Score&s1);

CStringTiming;

CStringEvent;

CStringAgainst;

Score();

virtual~Score();

};

6.2Team类

classTeam:

publicCObject

{

DECLARE_SERIAL(Team)

public:

voidSetPlayersScore(intsc,intn);

PlayersGetPlayer(intnum);

PlayersGetPlayer(CStringpn);

CStringEnglishName;

CStringHeadCoach;

CStringStarPlayer;

CStringBestResult;

CStringHistory;

intvertex;

CStringTeamName;

Playersp[24];

intRanking;

Playerspl;

Team();

~Team();

intGetVertex();

voidSetVertex(intv);

Team*operator=(Team&t);

voidSerialize(CArchive&ar);

voidSetTeamEnglishName(CStringenName){EnglishName=enName;}

voidSetTeamHeadCoach(CStringCoach){HeadCoach=Coach;}

voidSetTeamStarPlayer(CStringsPlayer){StarPlayer=sPlayer;}

voidSetTeamBestResult(CStringbResult){BestResult=bResult;}

voidSetTeamHistory(CStringHis){History=His;}

voidSetTeamName(CStringsName){TeamName=sName;}

voidSetRanking(intranking){Ranking=ranking;}

voidSetPlayersName(CStringpName,intn){p[n].Name=pName;}

voidSetPlayersNumber(intpNumber,intn){p[n].Number=pNumber;}

voidSetPlayersRanking(intpRanking,intn){p[n].Ranking=pRanking;}

voidSetPlayersTeam(CStringpTeam,intn){p[n].Team=pTeam;}

voidSetPlayersPosition(CStringpPosition,intn){p[n].Position=pPosition;}

voidSetPlayersGoalTiming(CStringtiming,intn){p[n].SetTiming(timing);}

voidSetPlayersGoalAgainst(CStringagainst,intn){p[n].SetAgainst(against);}

voidSetPlayersNationAppearance(CStringa,intn){p[n].SetNationAppearance(a);}

voidSetPlayersClub(CStringc,intn){p[n].SetClub(c);}

voidSetPlayersClubAppearance(CStringa,intn){p[n].SetClubAppearance(a);}

CStringGetTeamName(){returnTeamName;}

//PlayersGetPlayers(intn){returnp[n];}

intGetRanking(){returnRanking;}

CStringGetPlayersName(intn){returnp[n].Name;}

intGetPlayersNumber(intn){returnp[n].Number;}

intGetPlayersRanking(intn){returnp[n].Ranking;}

CStringGetPlayersTeam(intn){returnp[n].Team;}

CStringGetPlayersPosition(intn){returnp[n].Position;}

CStringGetPlayersGoalTiming(CStringt,intn){returnp[n].GetTiming(t);}

//CStringGetPlayersGoalEvent(intn){/*returnp[n].Event;*/}

};

6.2Player类

classPlayers:

publicCObject

{

DECLARE_SERIAL(Players)

public:

voidSetClub(CStringa);

voidSetClubAppearance(CStringa);

voidSetNationAppearance(CStringa);

Players(Players&p2);

CStringGetAgainst(CStringa);

CStringGetTiming(CStringa);

voidSetAgainst(CStringa);

voidSetTiming(CStringt);

CStringName;

intNumber;

intRanking;

CStringTeam;

CStringPosition;

CStringNationAppearance;

CStringClub;

CStringClubAppearance;

ints;

Scoresc[20];

voidSerialize(CArchive&ar);

Players();

virtual~Players();

Players*operator=(Players&p2);};

7心得体会

经过这次的课设,我对数据结构有了更深层次的了解,深入了解了逻辑结构与存储结构的差别,尤其是通过这次世界杯信息查询系统,深入了解了图结构以及存储结构邻接矩阵。

由于对编程语言的不熟悉,课设进行的很艰难。

预想的数据结构在编程中可能是不切实际的、难以实现的,只能更改思路。

一开始有想过以冠军为根采用树来设计程序,发现此方法难以实现,冠军赛前有很多半决赛、1/4决赛、小组赛等等,冠军与很多与根相距较远的队伍也进行了比赛,树的猜想是不可行的一种方案。

因此选用无向图来作为逻辑结构,以队伍名作为节点,节点之间的边存储比分,队员作为队伍的一部分信息存储。

以此为大的框架进行编程。

接下来的一些细节也遇到了很多困难,与同学交流一起完成了这次课设。

这次课设受益良多,积累了很多经验,下次再遇到也不会手忙脚乱。

希望下次我会做的更好。

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

当前位置:首页 > 解决方案 > 学习计划

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

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