数据结构课程设计奥运会奖牌管理程序.docx
- 文档编号:29254627
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:31
- 大小:629.06KB
数据结构课程设计奥运会奖牌管理程序.docx
《数据结构课程设计奥运会奖牌管理程序.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计奥运会奖牌管理程序.docx(31页珍藏版)》请在冰豆网上搜索。
数据结构课程设计奥运会奖牌管理程序
1.选题背景与意义
背景:
奥运会历来是一场国际性质的全球体育盛会,2008北京奥运俨然已经成为中国的骄傲,中国运动健儿历来在奥运会上有突出的运动成绩,为国家带来很多荣誉。
08奥运已经远去,12伦敦将要来临,届时,奥运会将会又成为全球人瞩目的焦点。
主办国毫无例外将成为主角,它也成为显示综合国力的舞台。
虽然外人在看那一幕幕的精彩冲刺,那些漂亮的烟花和惊喜的圣火点燃,但是奥运管理者却要为大赛的任何情况,任何时刻做好相应的准备。
其中,奥运的金牌、奖牌管理必将是重中之重,在开赛之前其有关程序必须准确无误的运行,才能保证奥运畅通无阻的进行。
在这种很受欢迎的情况下,我们选择编写跟奥运有关的奖牌管理程序,必将受到有关管理者的欢迎,虽然我们不是专业的编程人员,但是可以为他们提供一些参考。
意义:
编写与奖牌管理有关的程序后,管理者不用再为某一次的运动员获奖或者某一个国家的获奖而分散注意力,只需要在特定时刻、特定的项目、特定的运动员获奖时,将信息输入电脑中,此时计算机已经将数据记录,从而避免了靠人来记忆的局限性,保证了结果的准确,也是一种公平的体现。
当然,编写完的程序会有很强大的功能,比如,当一个项目的决赛比完以后,需要进行颁奖典礼,此时只需要在电脑中输入此项目,立刻便有相应的获奖运动员及信息输出,再将此信息传送到后勤处,颁奖典礼便能顺利进行。
另外,在每一天的比赛完成或者每一场比赛完成,都会有奖牌榜、金牌榜的更新,此时,此程序便起了很大作用,不需要刻意编写,系统会在存储完成后自动的生成奖牌榜和金牌榜。
这只是列举了此程序的部分作用,具体的很多实用性的价值会在程序中体现。
需求分析
1.目的要求:
要实现快速的存储,方便的查找,精确地排序过程。
2.具体过程:
(1)存储操作。
存储奖牌有关的信息,此时要存储国家、金牌数、奖牌数。
(2)排序操作。
对存储的金牌数和奖牌数运用两种不同的排序方式,分别把它们排序后输出,也就是金牌榜和奖牌榜。
(3)查找操作。
按照输入的国家,可以运用一种查找方式找到对应国家的金牌数、奖牌数以及在榜单上的排名;按照输入的金牌数可以按照另一种查找方式找到对应的国家以及此国家的奖牌数;按照一种查找方式根据奖牌数找到对应的国家以及此国家的金牌数。
(1)存储操作。
与上不同,此部分存储获得金牌的运动员、获奖时间、项目和国籍。
(2)查找操作。
输入获得金牌运动员的名字,能查找到他的国籍,所参加的项目以及获奖时间;输入国家,所有获得金牌的运动员及其获奖时间和所参加的项目全部可以输出;输入时间,当天的获得金牌的运动员及其国籍和所参加的运动项目均可以输出;输入运动项目,所有在该项上获得金牌的运动员及其国籍和获奖时间均可以找到。
3.分析结果:
此程序能准确无误的实现以上操作,所以实用性很高,它不仅可以应用到奥运会,在大小型的运动会等都可以用的到,而且方便快捷,是很多大赛组织者希望看到和采用的,可以带来方便。
概要设计
详细设计
#include
#include
#include
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineEQ(a,b)((a)==(b))
#defineLT(a,b)((a)<(b))
typedefintStatus;
typedefstructLNode1{/*存储国家、金牌数、奖牌数*/
structdata1{/*数据域*/
charcountry[50][50];/*存储国家的二维数组*/
intgolden[50];/*金牌数*/
intmedal[50];/*奖牌数*/
}data1;
structLNode1*next;
}LNode1,*LinkList1;
StatusStorage_Sort_Search(LinkList1L1)/*输入存储(Storage),同时插入排序
{(Sort),查找(Search)*/
inti,j,n,k,m,z,l,low,high,mid;
intM[50];/*将存储的金牌存入此数组*/
intN[50];/*将存储的奖牌存入此数组*/
intG[50];
intH[50];
intQ[50];
intZ[50];
intF[50];
charW[50][50];
L1=(LNode1*)malloc(sizeof(LNode1));
L1->next=NULL;
printf("
(1).存储(国家、金牌数、奖牌数)\n\n");
printf("请输入要存储的国家个数n\n");
scanf("%d",&n);
printf("请依次输入%d个国家的名字\n",n);
for(i=0;i scanf("%s",L1->data1.country[i]); printf("请依次输入%d个国家的金牌数\n",n); for(i=0;i {的数存入M[1……n]中*/ scanf("%d",&(L1->data1.golden[i])); M[i+1]=L1->data1.golden[i]; } printf("请依次输入%d个国家的奖牌数\n",n); for(i=0;i {medal[0……n-1]中的数存入N[1……n]中*/ scanf("%d",&Q[i]); while(Q[i] {奖牌值小于对应国家的金牌数值,则需重新输入*/ printf("您刚才输入的奖牌数小于金牌数! ! 请重新输入奖牌数值\n"); scanf("%d",&Q[i]); } N[i+1]=L1->data1.medal[i]=Q[i]; } printf("\n\n (2).排序(金牌榜)\n\n");/*直接插入排序*/ for(i=2;i<=n;++i)/*在数组M中按照插入排序从小到大排列金牌数*/ if(M[i] { M[0]=M[i];/*M[[i]中的值放到M[0]中作为监视哨*/ M[i]=M[i-1]; for(j=i-2;M[0] M[j+1]=M[0];/*插入到正确位置*/ } printf("\n\n下面是金牌排序显示: \n\n"); for(i=1;i<=n;i++) printf("%d",M[i]); for(i=0;i { G[i]=50; H[i]=50; } printf("\n\n\n金牌榜\n\n\n"); printf("国家金牌奖牌\n\n"); for(i=n;i>=1;i--)/*用两个for循环找到金牌数由多到少的国家在原来存储中for(j=0;j if((G[j]! =j)&&(M[i]==(L1->data1.golden[j]))) { printf("\t%s\t%d\t%d\n",L1->data1.country[j],L1->data1.golden[j],L1->data1.medal[j]); G[j]=j;/*j值放于数组G中相应的位置,使j在 }下一次循环时不能等于以前找过的值*/ printf("\n\n排序(奖牌榜)\n\n");/*折半插入排序*/ for(i=2;i<=n;++i) { N[0]=N[i];/*放于N[0]中起监视作用*/ low=1; high=i-1; while(low<=high)/*在N[low……high]中,折半查找有序插 {入位置*/ mid=(low+high)/2;/*折半*/ if(LT(N[0],N[mid]))/*插入点在低半区*/ high=mid-1; elselow=mid+1;/*插入点在高半区*/ } for(j=i-1;j>=high+1;--j)/*记录后移*/ N[j+1]=N[j]; N[high+1]=N[0];/*插入*/ } printf("\n\n下面是奖牌排序显示: \n\n"); for(i=1;i<=n;i++) printf("%d",N[i]); printf("\n\n\n奖牌榜\n\n\n"); printf("国家金牌奖牌\n\n"); for(i=n;i>=1;i--)/*用两个for循环找到奖牌数由多到少的国家在原来存储中 for(j=0;j =j)&&(N[i]==(L1->data1.medal[j]))) { printf("\t%s\t%d\t%d\n",L1->data1.country[j],L1->data1.golden[j],L1->data1.medal[j]); H[j]=j;/*j值放于数组H中相应的位置,使j在}下一次循环时不能等于以前找过的值*/ printf("\n\n(3).查找(国家—>金牌数)\n\n"); printf("请输入要查找的国家个数k\n"); scanf("%d",&k); while(k>n)/*此部分为判断要查找的国家数目是否 {超出范围,若超出,需要重新输入*/ printf("您要查找的国家个数大于存储个数,请重新输入\n"); scanf("%d",&k); } printf("请依次输入这个%d国家的名字\n",k); for(i=0;i { l=0; scanf("%s",W[i]); for(j=0;j strcmp(W[i],L1->data1.country[j]))较,找到国家对应的位置*/ { printf("\n此国家的金牌数为%d,奖牌数为%d\n\n",L1->data1.golden[j],L1->data1.medal[j]); l=1; } while(l==0)/*若j循环一趟没有找到与W[i]相同的 {值,则运行while*/ printf("\n没有查找到您要找的这个国家,请重新输入\n\n"); scanf("%s",W[i]); for(j=0;j if(! strcmp(W[i],L1->data1.country[j])) { printf("\n此国家的金牌数为%d,奖牌数为%d\n\n",L1->data1.golden[j],L1->data1.medal[j]); l=1;/*给l赋值1,保证只要输错就一直进行}while循环*/ } } printf("\n\n查找(金牌数—>国家)\n\n");/*有序数组M中二分法查找金牌的过printf("请输入您要查找的次数\n");程*/ scanf("%d",&m); printf("请连续%d次输入金牌数\n",m); for(i=0;i { l=0; scanf("%d",&F[i]); low=1; high=n; while(low<=high) { mid=(low+high)/2; if(EQ(F[i],M[mid])) { for(j=0;j if(M[mid]==(L1->data1.golden[j])) /*由有序组中的金牌找到其在原来存储中的位置*/ printf("\n此金牌数对应的国家为%s,奖牌数为%d\n\n",L1->data1.country[j],L1->data1.medal[j]); l=1; break;/*若在M中找到了相应的金牌数,在输}出后要跳出if,不然为死循环*/ else { if(LT(F[i],M[mid])) high=mid-1; elselow=mid+1; } } while(l==0) { printf("\n没有找到该奖牌数所对应的国家,请重新输入\n\n"); scanf("%d",&F[i]); low=1; high=n; while(low<=high) { mid=(low+high)/2; if(EQ(F[i],M[mid])) { for(j=0;j if(M[mid]==(L1->data1.golden[j])) printf("\n此金牌数对应的国家为%s,奖牌数为%d\n\n",L1->data1.country[j],L1->data1.medal[j]); l=1; break; } else { if(LT(F[i],M[mid])) high=mid-1; elselow=mid+1; } } } } printf("\n\n查找(奖牌—>国家)\n\n");/*直接查找过程*/ printf("请输入您要查找的次数\n"); scanf("%d",&z); printf("请连续%d次输入奖牌数\n",z); for(i=0;i { l=0; scanf("%d",&Z[i]); for(j=0;j if(Z[i]==L1->data1.medal[j])数值比较,找到奖牌对应的位置*/ { printf("\n此奖牌数对应的国家为%s,金牌数为%d\n\n",L1->data1.country[j],L1->data1.golden[j]); l=1; } while(l==0) { printf("\n没有存储你输入的奖牌数,请重新输入\n\n"); scanf("%d",&Z[i]); for(j=0;j if(Z[i]==L1->data1.medal[j]) { printf("\n此奖牌数对应的国家为%s,金牌数为%d\n\n",L1->data1.country[j],L1->data1.golden[j]); l=1; } } } } typedefstructLNode2{/*存储获得金牌的运动员姓名、国籍、获奖时间*/ structdata2{/*数据域*/ charathlete[50][50];/*存储运动员的二维数组*/ charcountry[50][50];/*存储国籍的二维数组*/ chartime[50][50];/*存储时间的二维数组*/ charproject[50][50];/*存储项目的二维数组*/ }data2; structLNode2*next; }LNode2,*LinkList2; StatusStorage_Search(LinkList2L2)/*存储(Storage),查找(Search)*/ { inti,j,m,k,l; charF[50][50]; charG[50][50]; charH[50][50]; charK[50][50]; L2=(LNode2*)malloc(sizeof(LNode2)); L2->next=NULL; printf("\n\n (1).存储(获金牌的运动员及其国籍、获奖时间、所参加的项目)\n\n"); printf("请输入要存储的获金牌的运动员的人数m\n"); scanf("%d",&m); printf("请依次输入这%d个运动员的姓名\n",m); for(i=0;i scanf("%s",L2->data2.athlete[i]); printf("请依次输入这%d个运动员的国籍\n",m); for(i=0;i scanf("%s",L2->data2.country[i]); printf("请依次输入这%d个运动员的获奖时间\n",m); for(i=0;i scanf("%s",L2->data2.time[i]); printf("请依次输入这%d个运动员所参加的项目\n",m); for(i=0;i scanf("%s",L2->data2.project[i]); printf("\n\n (2).查找(运动员—>项目+国籍+时间)\n\n"); printf("请输入你要查找的运动员的人数k\n"); scanf("%d",&k); printf("请依次输入这%d个运动员的姓名\n",k); for(i=0;i { l=0; scanf("%s",F[i]); for(j=0;j if(! strcmp(F[i],L2->data2.athlete[j]))比较,找到对应的位置*/ { printf("\n这名运动员国籍是%s,获金牌时间是%s,所参加的项目是%s\n\n",L2->data2.country[j],L2->data2.time[j],L2->data2.project[j]); l=1; } while(l==0) { printf("\n没有查找到您要找的这个运动员,请重新输入\n\n"); scanf("%s",F[i]); for(j=0;j if(! strcmp(F[i],L2->data2.athlete[j])) { printf("\n这名运动员国籍是%s,获金牌时间是%s,所参加项目是%s\n\n",L2->data2.country[j],L2->data2.time[j],L2->data2.project[j]); l=1; } } } printf("\n\n查找(国家—>获金牌运动员+时间+项目)\n\n"); printf("请输入您要查找的次数\n"); scanf("%d",&k); printf("请连续%d次输入国家的名字\n",k); for(i=0;i { l=0; scanf("%s",G[i]); for(j=0;j if(! strcmp(G[i],L2->data2.country[j]))比较,找到对应的位置*/ { printf("\n此国家获得金牌的运动员有%s,所参加的项目间是%s\n\n",L2->data2.athlete[j],L2->data2.project[j],L2->data2.time[j]); l=1; } while(l==0) { printf("\n没有存储您要查找的国家,请重新输入\n\n"); scanf("%s",G[i]); for(j=0;j if(! strcmp(G[i],L2->data2.country[j])) {printf("\n此国家获得金牌的运动员有%s,所参加的项目是%s,获奖时间是%s\n\n",L2->data2.athlete[j],L2->data2.project[j],L2->data2.time[j]); l=1; } } } printf("\n\n查找(时间—>获金牌的运动员+国籍+项目)\n\n"); printf("请输入您要查找的次数\n"); scanf("%d",&k); printf("请连续%d次输入获奖时间\n",k); for(i=0;i { l=0; scanf("%s",H[i]); for(j=0;j if(! strcmp(H[i],L2->data2.time[j]))比较,找到时间对应的位置*/ { printf("\n这天获金牌的运动员有%s,国籍为%s,所参加的项目是%s\n\n",L2->data2.athlete[j],L2->data2.country[j],L2->data2.project[j]); l=1; } while(l==0) { printf("\n没有存储您输入的时间,请重新输入\n\n"); scanf("%s",H[i]); for(j=0;j if(! strcmp(H[i],L2->data2.time[j])) { printf("\n这天获金牌的运动员有%s,国籍为%s,所参加的项目%s\n\n",L2->data2.athlete[j],L2->data2.country[j],L2->data2.project[j]); l=1; } } } printf("\n\n查找(项目—>获金牌的运动员+国籍+时间)\n\n"); printf("请输入您要查找的次数\n"); scanf("%d",&k); printf("请连续%d次输入项目名称\n",k); for(i=0;i { l=0; scanf("%s",K
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 奥运会 奖牌 管理程序