数据结构世界杯.docx
- 文档编号:6969312
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:24
- 大小:808.19KB
数据结构世界杯.docx
《数据结构世界杯.docx》由会员分享,可在线阅读,更多相关《数据结构世界杯.docx(24页珍藏版)》请在冰点文库上搜索。
数据结构世界杯
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决赛、小组赛等等,冠军与很多与根相距较远的队伍也进行了比赛,树的猜想是不可行的一种方案。 因此选用无向图来作为逻辑结构,以队伍名作为节点,节点之间的边存储比分,队员作为队伍的一部分信息存储。 以此为大的框架进行编程。 接下来的一些细节也遇到了很多困难,与同学交流一起完成了这次课设。 这次课设受益良多,积累了很多经验,下次再遇到也不会手忙脚乱。 希望下次我会做的更好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 世界杯