当前位置:文档之家› 数据结构课程设计-运动会分数统计(C语言版)

数据结构课程设计-运动会分数统计(C语言版)

目录第一章绪论 (1)运动会分数统计系统的背景 (1)运动会分数统计系统的任务和目标 (1)第二章运动会分数统计系统的需求分析 (2)功能需求 (2)功能模块 (2)数据要求 (3)性能要求 (3)第三章系统开发工具及关键技术 (4)系统开发工具 (4)3.1.1 CodeBlocks (4)关键技术 (4)3.2.1 C语言 (4)3.2.2 数组 (4)3.2.3 链表 (4)第四章运动会分数统计系统的实现 (5)数据结构设计 (5)结构定义 (5)系统界面的实现 (6)4.3.1 主菜单窗口 (6)4.3.2 输入各个项目成绩并存储文件 (6)4.3.3 统计各学校总分 (8)4.3.4 按学校编号排序输出 (8)4.3.5 按学校总分排序输出 (8)4.3.6 按男团体总分排序输出 (9)4.3.7 按女团体总分排序输出 (9)4.3.8 按学校编号查询学校某个项目情况 (10)4.3.9 按项目编号查询取得名次的学校 (10)第五章结束语 (11)课程设计总结 (11)致谢 (11)参考文献 (12)附录 (13)第一章绪论运动会分数统计系统的背景在信息技术已经深入人类工作生活的今天,计算机软件得到了广泛的应用,越来越多的政府和企业将其业务纳入计算机软件系统。

随着社会进步,体育事业的发展,为了提高运动会成绩统计准确,减少设计者们的工作量,开发了本系统。

运动会分数统计系统的任务和目标任务:参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前前三名积分;前三名的积分分别为:5、3、2。

(m、w<=20,n<=10)。

目标:1.可以输入各个项目的前三名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)。

第二章运动会分数统计系统的需求分析功能需求运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。

功能模块根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。

该系统分为比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。

比赛成绩输出模块有四个子模块,分别是:按学校编号输出模块、按学校总分输出模块、安南员总分输出模块和按女团总分输出模块;查询比赛成绩模块分为按学校编号查询模块河岸项目编号查询两个子模块。

功能模块图如图2-1所示。

图2-1功能模块图(1)比赛成绩输入模块:比赛成绩输入模块分为:创建信息部分,该部分需输入学校编号,项目编号,取得的名次,以及哪些名次;算法部分,得到排序结果。

(2)比赛成绩输出模块:将以输入的数据按照输出比赛菜单的选择输出相应的数据。

(3)查询比赛成绩模块:按照查询比赛结果菜单和其查询方式子菜单查询需要的数据。

(4)调用统计结果:将输入的各学校运动会成绩排序输出。

数据需求需要输入学校编号,项目编号,取得的名次,以及哪些名次。

性能需求本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,就需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。

第三章系统开发工具及关键技术系统开发工具3.1.1 Code::BlocksCode::Blocks是一个开放源码的全功能的跨平C/C++集成开发环境。

Code::Blocks是开放源码软件。

Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。

对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受的庞大和高昂的价格。

关键技术3.2.1 C语言C语言是一种计算机程序设计语言它既具有高级语言的特点,又具有汇编语言的特点。

它由美国贝尔研究所的于1972年推出。

1978后,C语言已先后被移植到大、中、小及微型机上。

它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。

具体应用比如单片机以及嵌入式系统开发。

3.2.2 数组数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。

这些按序排列的同类数据元素的集合称为数组。

在C语言中,数组属于构造数据类型。

一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。

因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

3.2.3 链表链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。

使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。

链表可以在多种编程语言中实现。

像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。

程序语言或面向对象语言,如C/C++和Java依靠易变工具来生成链表。

第四章运动会分数统计系统的实现数据结构设计学校的存储结构为链表,其中school类为:class school:public athlete /*学校*/{ ……public:int item; /*学校获奖数*/int school; /*学校编号*/int boys; /*男团体总分*/int girls; /*女团体总分*/int score; /*学校总分*/athlete ath[MaxSize]; /*获奖运动员信息数组,包括分数,名次,项目*/ school *prev;4.3.1 4.3.2输入各个项目成绩并存储文件请选择(0~8):1进入输入各个项目成绩并存储文件图4-21.输入男子项目总数m;12.输入男子项目总数m;13.输入参加运动会的学校总数3图4-3输入项目:1 请选择1(1.前三名2.前五名)第3名:学校<学校编号为数字>3第2名:学校<学校编号为数字>2第1名:学校<学校编号为数字>1项目:2 请选择1(1.前三名2.前五名)第3名:学校<学校编号为数字>1第2名:学校<学校编号为数字>2第1名:学校<学校编号为数字>3项目:3 请选择1(1.前三名2.前五名)第3名:学校<学校编号为数字>1第2名:学校<学校编号为数字>3第1名:学校<学校编号为数字>2图4-4然后输入项目:0 返回到菜单主页面图4-5 4.3.3. 统计各学校总分请选择(0~8):2进入统计各学校总分图4-64.3.4 按学校编号排序输出按按任意键继续返回到菜单主界面请选择(0~8):3图4-74.3.5. 按学校总分排序输出按按任意键继续返回到菜单主界面请选择(0~8):4图4-84.3.6. 按男团体总分排序输出按按任意键继续返回到菜单主界面请选择(0~8):5图4-94.3.7. 按女团体总分排序输出按按任意键继续返回到菜单主界面请选择(0~8):6图4-104.3.8. 按学校编号查询学校某个项目情按按任意键继续返回到菜单主界面请选择(0~8):7图4-114.3.9. 按项目编号查询取得名次的学校按按任意键继续返回到菜单主界面请选择(0~8):8图4-12第五章结束语课程设计总结经过此次的课程设计,可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。

通过此次课程设计也学会综合运用理论知识来分析和解决实际问题的能力、养成严谨的科学态度和良好的程序设计习惯,实现由知识向智能的初步转化;学会遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,并与同组成员共同完成设计、编写、调试和测试应用程序及编写文档的任务。

致谢本设计的完成是在我们的导师李菁老师的细心指导下进行的。

在每次设计遇到问题时老师不辞辛苦的讲解才使得我的设计顺利的进行。

从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了郭老师很多的宝贵时间和精力,在此向导师表示衷心地感谢!导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!还要感谢帮助我的几位同学,是你们在我平时设计中和我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进行下去,没有你们的帮助我不可能这样顺利地结稿,在此表示深深的谢意。

参考文献:[1] 严蔚敏吴伟民著.《数据结构(C语言版)》[M].北京:清华大学出版社. .;[2] 苏小红陈惠鹏等著.《C语言大学实用教程(第2版)》[M].北京:电子工业出版社;[3] 苏小红陈惠鹏等著.《C语言大学实用教程学习指导(第2版)》.电子工业出版社。

附录详细代码:#include <>#include <>#include <>#include <>tem=k;g1->a[k].firstschool=NULL;}for(k=1;k<=g2->n;k++){g2->b[k].school=k;g2->b[k].firstitem=0;g2->b[k].score=0;g2->b[k].boys=0;g2->b[k].girls=0;}g2->b[0].score=0;g2->b[0].boys=0;g2->b[0].girls=0;while(i!=0){printf("\n 项目:");scanf("%d",&i);if(i!=0){printf(" 1.前三名 2.前五名\n");printf(" 请选择:");scanf("%d",&j);if(j!=1&&j!=2){printf(" 输入有误,请重新选择:");scanf("%d",&j);}if(j==1){h=3;do{ printf(" 第%d名:学校(学校编号为数字)",h);scanf("%d",&x);p1=(Schools *)malloc(sizeof(Schools));p1->school=x;p2=(Items *)malloc(sizeof(Items));p2->item=i;if(h==3) p2->record=p1->record=2;if(h==2) p2->record=p1->record=3;if(h==1) p2->record=p1->record=5;p1->next=g1->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record; /* 累计总分*/if(i<=m) g2->b[x].boys=g2->b[x].boys+p2->record; /* 累计男团体总分*/else g2->b[x].girls=g2->b[x].girls+p2->record; /* 累计女团体总分*/h--;}while(x!=0&&h!=0);}if(j==2)h=5;do{printf(" 第%d名:学校(学校编号为数字)",h);scanf("%d",&x);p1=(Schools *)malloc(sizeof(Schools));p1->school=x;p2=(Items *)malloc(sizeof(Items));p2->item=i;if(h==5) p2->record=p1->record=1;if(h==4) p2->record=p1->record=2;if(h==3) p2->record=p1->record=3;if(h==2) p2->record=p1->record=5;if(h==1) p2->record=p1->record=7;p1->next=g1->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record; /* 累计总分*/if(i<=m) g2->b[x].boys=g2->b[x].boys+p2->record; /* 累计男团体总分*/else g2->b[x].girls=g2->b[x].girls+p2->record; /* 累计女团体总分*/h--;}while(x!=0&&h!=0);}}}}void save(){FILE *fp1,*fp2;fp1=(FILE *)malloc(sizeof(FILE));fp2=(FILE *)malloc(sizeof(FILE));if((fp1=fopen("sports1","wb"))==NULL){printf("cannot open file.\n");return;}if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1)printf("file write error.\n");fclose(fp1);if((fp2=fopen("sports2","wb"))==NULL){ printf("cannot open file.\n");return;}if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1)printf("file write error.\n");fclose(fp2);}void funct2(ALLNode *g2) /* 输出各学校总分*/{int k;printf("\n\n ****** 输出各学校总分******\n");printf(" 学校编号\t 总分\n");for(k=1;k<=g2->n;k++)printf(" %d\t\t\t %d\n",k,g2->b[k].score);printf("\n");system("pause");printf(" 按任意键返回主菜单......");getchar();}void funct3(ALLNode *g2) /* 按学校编号排序输出*/{Items *p2;p2=(Items *)malloc(sizeof(Items));printf("\n\n ****** 按学校编号排序输出******\n"); printf(" 学校编号\t\t\t获奖情况\n");scanf("%d",&k);for(k=1;k<=g2->n;k++){printf("\t\t\t\t\t\t%d\t",k);p2=g2->b[k].firstitem;while(p2!=NULL){printf("项目%d:得%d分",p2->item,p2->record);p2=p2->next;}printf("\n");}printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}void funct4(ALLNode *g2) /* 按学校总分排序输出*/ {int i,j,k;Items *p2;printf("\n\n ****** 按学校总分排序输出******\n"); printf(" 学校编号\t\t总分\n");scanf("%d",&k);irstitem;while(p2!=NULL){printf("%d \t\t%d\n",g2->b[k].school,g2->b[k].score);p2=p2->next;}printf("\n");g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;g2->b[0].girls=g2->b[i].girls;g2->b[0].school=g2->b[i].school;j=i-1;while(g2->b[0].score<g2->b[j].score&&j>0){g2->b[j+1].score=g2->b[j].score;g2->b[j+1].boys=g2->b[j].boys;g2->b[j+1].girls=g2->b[j].girls;g2->b[j+1].school=g2->b[j].school;j--;}g2->b[j+1].score=g2->b[0].score;g2->b[j+1].boys=g2->b[0].boys;g2->b[j+1].girls=g2->b[0].girls;g2->b[j+1].school=g2->b[0].school;}for(k=1;k<=g2->n;k++)printf("%d \t\t%d\n",g2->b[k].school,g2->b[k].score);system("pause");printf("按任意键返回主菜单......");getchar();}void funct5(ALLNode *g2) /* 按男团体总分排序输出*/ {int i,j,k;Items *p2;p2=(Items *)malloc(sizeof(Items));printf("\n\n ****** 按男团体总分排序输出******\n"); printf("学校编号\t\t男团体总分\n");scanf("%d",&k);irstitem;while(p2!=NULL){ printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].boys);p2=p2->next;}printf("\n");g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;g2->b[0].girls=g2->b[i].girls;g2->b[0].school=g2->b[i].school;j=i-1;while(g2->b[0].boys<g2->b[j].boys&&j>0){g2->b[j+1].score=g2->b[j].score;g2->b[j+1].boys=g2->b[j].boys;g2->b[j+1].girls=g2->b[j].girls;g2->b[j+1].school=g2->b[j].school;j--;}g2->b[j+1].score=g2->b[0].score;g2->b[j+1].boys=g2->b[0].boys;g2->b[j+1].girls=g2->b[0].girls;g2->b[j+1].school=g2->b[0].school;}for(k=1;k<=g2->n;k++)printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].boys);system("pause"); ....");getchar();}void funct6(ALLNode *g2) /* 按女团体总分排序输出*/ {int i,j,k;Items *p2;p2=(Items *)malloc(sizeof(Items));printf("\n\n ****** 按女团体总分排序输出******\n"); printf("学校编号\t\t女团体总分\n");scanf("%d",&k);irstitem;while(p2!=NULL){ printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].girls);p2=p2->next;}printf("\n");g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;g2->b[0].girls=g2->b[i].girls;g2->b[0].school=g2->b[i].school;while(g2->b[0].girls<g2->b[j].girls&&j>0){ g2->b[j+1].score=g2->b[j].score;g2->b[j+1].boys=g2->b[j].boys;g2->b[j+1].girls=g2->b[j].girls;g2->b[j+1].school=g2->b[j].school;j--;}g2->b[j+1].score=g2->b[0].score;g2->b[j+1].boys=g2->b[0].boys;g2->b[j+1].girls=g2->b[0].girls;g2->b[j+1].school=g2->b[0].school;}for(k=1;k<=g2->n;k++)printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].girls);system("pause");printf("按任意键返回主菜单......");getchar();}void funct7(ALLNode *g2) /* 按学校编号查询学校某个项目情况*/{int i,j;Items *p2;printf("\n ****** 按学校编号查询学校某个项目情况******\n");printf(" 输入要查询的学校编号:");scanf("%d",&i);printf(" 输入要查询的项目编号:");scanf("%d",&j);p2=g2->b[i].firstitem;while(p2!=NULL){if(p2->item==j)printf(" 学校编号:%d\t项目%d:得%d分\n",i,p2->item,p2->record);p2=p2->next;}printf("\n");system("pause");printf(" 按任意键返回主菜单......");getchar();}void funct8(ALLitems *g1) /* 按项目编号查询取得名次的学校*/{int i;Schools *p1;printf("\n*** 按项目编号查询取得名次的学校***\n");printf("输入要查询的项目编号:");scanf("%d",&i);printf("项目编号\t\t\t取得名次的学校\n");printf("%d\t",i);p1=g1->a[i].firstschool;while(p1!=NULL){ printf(" 学校%d:得%d分",p1->school,p1->record);p1=p1->next;}printf("\n\n");system("pause");printf("按任意键返回主菜单......");getchar();}{int t;g2=(ALLNode*)malloc(sizeof(ALLNode));g1=(ALLitems*)malloc(sizeof(ALLitems));if(!g2||!g1)exit(1);入各个项目成绩并存储文件*\t \n");printf("\t\t* 2.统计各学校总分*\t \n");printf("\t\t* 3.按学校编号排序输出*\t \n");printf("\t\t* 4.按学校总分排序输出*\t \n");printf("\t\t* 5.按男团体总分排序输出*\t \n");printf("\t\t* 6.按女团体总分排序输出*\t \n");printf("\t\t* 7.按学校编号查询学校某个项目情况*\t \n");printf("\t\t* 8.按项目编号查询取得名次的学校*\n");printf("\t\t* 0.退出*\n");printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");printf("\t\t \n");printf("\t\t \n");printf("\t\t \n");printf("\t\t 请选择(0-8):");loop:scanf("%d",&t);system("cls");switch(t){case 1:funct1(g1,g2);save();break;case 2:funct2(g2);break;case 3:funct3(g2);break;case 4:funct4(g2);break;case 5:funct5(g2);break;case 6:funct6(g2);break;case 7:funct7(g2);break;case 8:funct8(g1);break;case 0:exit(0);default:{ printf("输入有误,请重新选择:");goto loop;}}//clrscr();system("cls");}}。

相关主题