数据结构课程设计运动会分数统计C语言版.docx

上传人:b****6 文档编号:3844387 上传时间:2022-11-25 格式:DOCX 页数:27 大小:280.19KB
下载 相关 举报
数据结构课程设计运动会分数统计C语言版.docx_第1页
第1页 / 共27页
数据结构课程设计运动会分数统计C语言版.docx_第2页
第2页 / 共27页
数据结构课程设计运动会分数统计C语言版.docx_第3页
第3页 / 共27页
数据结构课程设计运动会分数统计C语言版.docx_第4页
第4页 / 共27页
数据结构课程设计运动会分数统计C语言版.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数据结构课程设计运动会分数统计C语言版.docx

《数据结构课程设计运动会分数统计C语言版.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计运动会分数统计C语言版.docx(27页珍藏版)》请在冰豆网上搜索。

数据结构课程设计运动会分数统计C语言版.docx

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

 

第一章绪论1

1.1运动会分数统计系统的背景1

1.2运动会分数统计系统的任务和目标1

第二章运动会分数统计系统的需求分析2

2.1功能需求2

2.2功能模块2

2.3数据要求3

2.4性能要求3

第三章系统开发工具及关键技术4

3.1系统开发工具4

3.1.1CodeBlocks4

3.2关键技术4

3.2.1C语言4

3.2.2数组4

3.2.3链表4

第四章运动会分数统计系统的实现5

4.1数据结构设计5

4.2结构定义5

4.3系统界面的实现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

5.1课程设计总结11

5.2致11

参考文献12

附录13

第一章绪论

1.1运动会分数统计系统的背景

在信息技术已经深入人类工作生活的今天,计算机软件得到了广泛的应用,越来越多的政府和企业将其业务纳入计算机软件系统。

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

1.2运动会分数统计系统的任务和目标

任务:

参加运动会有n个学校,学校编号为1……n。

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

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

不同的项目取前前三名积分;前三名的积分分别为:

5、3、2。

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

目标:

1.可以输入各个项目的前三名或前五名的成绩;

2.能统计各学校总分;

3.可以按学校编号、学校总分、男女团体总分排序输出;

4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

规定:

输入数据形式和围:

20以的整数(如果做得更好可以输入学校的名称,运动项目的名称)。

 

第二章运动会分数统计系统的需求分析

2.1功能需求

运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:

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

2.2功能模块

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

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

比赛成绩输出模块有四个子模块,分别是:

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

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

图2-1功能模块图

(1)比赛成绩输入模块:

比赛成绩输入模块分为:

创建信息部分,该部分需输入学校编号,项目编号,取得的名次,以及哪些名次;算法部分,得到排序结果。

(2)比赛成绩输出模块:

将以输入的数据按照输出比赛菜单的选择输出相应的数据。

(3)查询比赛成绩模块:

按照查询比赛结果菜单和其查询方式子菜单查询需要的数据。

(4)调用统计结果:

将输入的各学校运动会成绩排序输出。

2.3数据需求

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

2.4性能需求

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

 

第三章系统开发工具及关键技术

3.1系统开发工具

3.1.1Code:

:

Blocks

Code:

:

Blocks是一个开放源码的全功能的跨平C/C++集成开发环境。

Code:

:

Blocks是开放源码软件。

Code:

:

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

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

3.2关键技术

3.2.1C语言

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

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

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

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

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

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

3.2.2数组

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

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

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

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

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

3.2.3链表

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

由于不必须按顺序存储,链表在插入的时候可以达到O

(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O

(1)。

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

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

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

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

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

 

第四章运动会分数统计系统的实现

4.1数据结构设计

学校的存储结构为链表,

Prevschool1next

头结点

Prevschool(最后)next

…………

……

其中

school类为:

classschool:

publicathlete/*学校*/

{……

public:

intitem;/*学校获奖数*/

intschool;/*学校编号*/

intboys;/*男团体总分*/

intgirls;/*女团体总分*/

intscore;/*学校总分*/

athleteath[MaxSize];/*获奖运动员信息数组,包括分数,名次,项目*/

school*prev;//前指针

school*next;//后指针

}

其中部分主要的函数:

添加操作add(school*&head)

查询操作checkFunc(school*head,int&n)

文件保存save(school*head)

总分快速排序tquicksort(vector&v,intfirst,intlast)

总分基数排序tbaseSort(vector&v,intd)

4.2结构体定义

typedefstructnode1{

intschool;/*学校编号*/

intrecord;/*项目成绩*/

structnode1*next;/*链域*/

}Schools;

typedefstruct{

intitem;/*项目编号*/

Schools*firstschool;/*链域指向链表中第一个结点*/

}ITEM;

typedefstruct{

intz;/*项目总数*/

ITEMa[MAX];

}ALLitems;

typedefstructnode2{

intitem;/*该学校获奖的项目*/

intrecord;/*项目成绩*/

structnode2*next;/*链域*/

}Items;

typedefstruct{

intschool;/*学校编号*/

intscore;/*学校总分*/

intboys;/*男团体总分*/

intgirls;/*女团体总分*/

Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/

}SCHNode;

typedefstruct{

intn;/*学校总数*/

SCHNodeb[MAX];

}ALLNode;

4.3系统界面的实现

4.3.1主菜单窗口

图4-1

4.3.2.输入各个项目成绩并存储文件

请选择(0~8):

1进入输入各个项目成绩并存储文件

图4-2

1.输入男子项目总数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-6

4.3.4按学校编号排序输出

按按任意键继续返回到菜单主界面请选择(0~8):

3

图4-7

4.3.5.按学校总分排序输出

按按任意键继续返回到菜单主界面请选择(0~8):

4

图4-8

 

4.3.6.按男团体总分排序输出

按按任意键继续返回到菜单主界面请选择(0~8):

5

图4-9

4.3.7.按女团体总分排序输出

按按任意键继续返回到菜单主界面请选择(0~8):

6

图4-10

4.3.8.按学校编号查询学校某个项目情

按按任意键继续返回到菜单主界面请选择(0~8):

7

图4-11

4.3.9.按项目编号查询取得名次的学校

按按任意键继续返回到菜单主界面请选择(0~8):

8

图4-12

第五章结束语

5.1课程设计总结

经过此次的课程设计,可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。

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

5.2致

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

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

从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了郭老师很多的宝贵时间和精力,在此向导师表示衷心地感!

导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!

还要感帮助我的几位同学,是你们在我平时设计中和我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进行下去,没有你们的帮助我不可能这样顺利地结稿,在此表示深深的意。

参考文献:

[1]严蔚敏吴伟民著.《数据结构(C语言版)》[M].:

清华大学.1997.4.;

 

[2]小红惠鹏等著.《C语言大学实用教程(第2版)》[M].:

电子工业;

[3]小红惠鹏等著.《C语言大学实用教程学习指导(第2版)》.电子工业。

 

附录

详细代码:

#include

#include

#include

#include

//#include/*屏幕操作函数*/

#defineMAX50

//#defineNULL0

typedefstructnode1{

intschool;/*学校编号*/

intrecord;/*项目成绩*/

structnode1*next;/*链域*/

}Schools;

typedefstruct{

intitem;/*项目编号*/

Schools*firstschool;/*链域指向链表中第一个结点*/

}ITEM;

typedefstruct{

intz;/*项目总数*/

ITEMa[MAX];

}ALLitems;

typedefstructnode2{

intitem;/*该学校获奖的项目*/

intrecord;/*项目成绩*/

structnode2*next;/*链域*/

}Items;

typedefstruct{

intschool;/*学校编号*/

intscore;/*学校总分*/

intboys;/*男团体总分*/

intgirls;/*女团体总分*/

Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/

}SCHNode;

typedefstruct{

intn;/*学校总数*/

SCHNodeb[MAX];

}ALLNode;

ALLitems*g1;

ALLNode*g2;

voidfunct1(ALLitems*g1,ALLNode*g2)

{

Schools*p1;

Items*p2;

inti,j,k,m,w,h,x;

p1=(Schools*)malloc(sizeof(Schools));

p2=(Items*)malloc(sizeof(Items));

if(!

p1||!

p2)

exit

(1);

printf("\n******输入各个项目信息******\n\n");

printf("输入男子项目总数m:

");

scanf("%d",&m);

if(m<0||m>20)

{

printf("输入有误,m是20以的整数,请重新输入:

");

scanf("%d",&m);

}

printf("输入女子项目总数w:

");

scanf("%d",&w);

if(w<0||w>20)

{

printf("输入有误,w是20以的整数,请重新输入:

");

scanf("%d",&w);

}

printf("输入参加运动会的学校总数n:

");

scanf("%d",&g2->n);

if(g2->n<0||g2->n>20)

{

printf("输入有误,n是20以的整数,请重新输入:

");

scanf("%d",&g2->n);

}

g1->z=m+w;

printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);

printf("\n\n****记录运动会成绩****");

printf("\n\n(输入0标志结束)\n");

for(k=1;k<=g1->z;k++)

{

g1->a[k].item=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;/*累计男团体总分*/

elseg2->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;/*累计男团体总分*/

elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/

h--;

}while(x!

=0&&h!

=0);

}

}

}

}

voidsave()

{

FILE*fp1,*fp2;

fp1=(FILE*)malloc(sizeof(FILE));

fp2=(FILE*)malloc(sizeof(FILE));

if((fp1=fopen("sports1","wb"))==NULL)

{

printf("cannotopenfile.\n");

return;

}

if(fwrite(g1,sizeof(ALLitems),1,fp1)!

=1)

printf("filewriteerror.\n");

fclose(fp1);

if((fp2=fopen("sports2","wb"))==NULL)

{printf("cannotopenfile.\n");

return;

}

if(fwrite(g2,sizeof(ALLNode),1,fp2)!

=1)

printf("filewriteerror.\n");

fclose(fp2);

}

voidfunct2(ALLNode*g2)/*输出各学校总分*/

{

intk;

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();

}

voidfunct3(ALLNode*g2)/*按学校编号排序输出*/

{

intk;

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();

}

voidfunct4(ALLNode*g2)/*

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

当前位置:首页 > 高中教育 > 语文

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

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