数据结构课程设计运动会分数统计C语言版文档格式.docx
《数据结构课程设计运动会分数统计C语言版文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计运动会分数统计C语言版文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
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++集成开发环境。
Blocks是开放源码软件。
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<
school*>
&
v,intfirst,intlast)
总分基数排序tbaseSort(vector<
v,intd)
4.2结构体定义
typedefstructnode1{
intschool;
intrecord;
/*项目成绩*/
structnode1*next;
/*链域*/
}Schools;
typedefstruct{
/*项目编号*/
Schools*firstschool;
/*链域指向链表中第一个结点*/
}ITEM;
intz;
/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
/*该学校获奖的项目*/
structnode2*next;
}Items;
Items*firstitem;
/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
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(1.前三名2.前五名)
图4-4
然后输入项目:
0返回到菜单主页面
图4-5
4.3.3.统计各学校总分
2进入统计各学校总分
图4-6
4.3.4按学校编号排序输出
按按任意键继续返回到菜单主界面请选择(0~8):
图4-7
4.3.5.按学校总分排序输出
4
图4-8
4.3.6.按男团体总分排序输出
5
图4-9
4.3.7.按女团体总分排序输出
6
图4-10
4.3.8.按学校编号查询学校某个项目情
7
图4-11
4.3.9.按项目编号查询取得名次的学校
8
图4-12
第五章结束语
5.1课程设计总结
经过此次的课程设计,可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。
通过此次课程设计也学会综合运用理论知识来分析和解决实际问题的能力、养成严谨的科学态度和良好的程序设计习惯,实现由知识向智能的初步转化;
学会遵循软件开发过程的基本规,运用结构化程序设计的方法,按照课程设计的题目要求,并与同组成员共同完成设计、编写、调试和测试应用程序及编写文档的任务。
5.2致
本设计的完成是在我们的导师菁老师的细心指导下进行的。
在每次设计遇到问题时老师不辞辛苦的讲解才使得我的设计顺利的进行。
从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了郭老师很多的宝贵时间和精力,在此向导师表示衷心地感!
导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!
还要感帮助我的几位同学,是你们在我平时设计中和我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进行下去,没有你们的帮助我不可能这样顺利地结稿,在此表示深深的意。
参考文献:
[1]严蔚敏吴伟民著.《数据结构(C语言版)》[M].:
清华大学.1997.4.;
[2]小红惠鹏等著.《C语言大学实用教程(第2版)》[M].:
电子工业;
[3]小红惠鹏等著.《C语言大学实用教程学习指导(第2版)》.电子工业。
附录
详细代码:
#include<
stdio.h>
stdlib.h>
string.h>
io.h>
//#include<
conio.h>
/*屏幕操作函数*/
#defineMAX50
//#defineNULL0
}ALLitems;
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)
{
输入有误,m是20以的整数,请重新输入:
}
输入女子项目总数w:
w);
if(w<
0||w>
{
输入有误,w是20以的整数,请重新输入:
输入参加运动会的学校总数n:
scanf("
g2->
n);
if(g2->
n<
0||g2->
n>
输入有误,n是20以的整数,请重新输入:
g1->
z=m+w;
则项目编号为男子1-%d,女子%d-%d"
m,m+1,g1->
z);
\n\n****记录运动会成绩****"
\n\n(输入0标志结束)\n"
for(k=1;
k<
=g1->
z;
k++)
g1->
a[k].item=k;
a[k].firstschool=NULL;
=g2->
n;
b[k].school=k;
g2->
b[k].firstitem=0;
b[k].score=0;
b[k].boys=0;
b[k].girls=0;
b[0].score=0;
b[0].boys=0;
b[0].girls=0;
while(i!
=0)
\n项目:
i);
if(i!
1.前三名2.前五名\n"
请选择:
j);
if(j!
=1&
j!
=2)
输入有误,请重新选择:
if(j==1)
{
h=3;
do{printf("
第%d名:
学校(学校编号为数字)"
h);
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=3;
if(h==1)p2->
record=5;
next=g1->
a[i].firstschool;
a[i].firstschool=p1;
next=g2->
b[x].firstitem;
b[x].firstitem=p2;
b[x].score=g2->
b[x].score+p2->
record;
/*累计总分*/
if(i<
=m)g2->
b[x].boys=g2->
b[x].boys+p2->
/*累计男团体总分*/
elseg2->
b[x].girls=g2->
b[x].girls+p2->
/*累计女团体总分*/
h--;
}while(x!
=0&
h!
=0);
if(j==2)
h=5;
do{
if(h==5)p2->
record=1;
if(h==4)p2->
record=7;
/*累计女团体总分*/
}
voidsave()
FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("
sports1"
"
wb"
))==NULL)
cannotopenfile.\n"
return;
}
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
filewriteerror.\n"
fclose(fp1);
if((fp2=fopen("
sports2"
{printf("
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
fclose(fp2);
voidfunct2(ALLNode*g2)/*输出各学校总分*/
intk;
\n\n******输出各学校总分******\n"
学校编号\t总分\n"
%d\t\t\t%d\n"
k,g2->
b[k].score);
\n"
system("
pause"
按任意键返回主菜单......"
getchar();
voidfunct3(ALLNode*g2)/*按学校编号排序输出*/
Items*p2;
\n\n******按学校编号排序输出******\n"
学校编号\t\t\t获奖情况\n"
k);
for(k=1;
\t\t\t\t\t\t%d\t"
k);
p2=g2->
b[k].firstitem;
while(p2!
=NULL)
项目%d:
得%d分"
p2->
item,p2->
record);
p2=p2->
next;
按任意键返回主菜单......"
voidfunct4(ALLNode*g2)/*