数据结构课程设计运动会分数统计系统完整报告word文档Word格式.doc
《数据结构课程设计运动会分数统计系统完整报告word文档Word格式.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计运动会分数统计系统完整报告word文档Word格式.doc(26页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计运动会分数统计系统完整报告word文档Word格式.doc](https://file1.bdocx.com/fileroot1/2022-10/14/bd3a68c8-e5f8-4c96-98f8-81779e4f3c37/bd3a68c8-e5f8-4c96-98f8-81779e4f3c371.gif)
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;
取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;
哪些取前五名或前三名由学生自己设定。
(m<
=20,n<
=20,)
功能要求:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;
可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
输出形式:
有中文提示,各学校分数为整形;
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求;
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;
2、整体非法数据;
3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
时间:
2011年6月22日—2011年6月28日星期二
a)需求分析
程序功能:
系统主要用于运动会分数统计方案;
输入方式:
键盘输入整形数据
输出方式:
屏幕显示
用户界面:
中文菜单提示操作
存储方式:
存储结构为链表
b)设计概要
本程序中学校的存储结构为链表:
Prevschool1next
头结点
Prevschool(最后)next
…………
……
school类为:
classschool:
publicathlete/*学校*/
{
public:
intcount;
/*学校获奖数*/
intserial;
/*学校编号*/
intmenscore;
/*男选手总分*/
intwomenscore;
/*女选手总分*/
inttotalscore;
/*总分*/
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)
关键算法:
{……
添加项目号
for(i=1;
i<
=n;
i++)
{输入第i名运动员的学校编号temp
while(first!
=head) //遍历链表,直到找到编号为serial的学校所在结点,或first指向表头head
{ if(first->
serial==要添加的编号)
{
(first->
ath[first->
count]).item=要添加的项目号;
count]).range=i(名次)
First指向的学校的项目加一;
更新总分
break;
}
first=first->
next;
……}
c)
详细设计
开始
输入项目编号temp
是数字
N
Y
0<
temp<
18
输出“项目不存在”
学校遍历结束
temp存在
Nextschool
temp是奇数
取5名
取3名
输入获奖的学校编号se
1<
se<
15
项目号、名次、运动员名字添进学校所在结点
继续添加
结束
查询操作:
while(first!
=head)
{……
if(输入的项目编号==学校第i位运动员的项目)
{
把第i位运动员的项目,学校编号、名次、得分信息压入向量;
}……
输出向量中的内容
//按学校编号顺序输出所有参赛学校运动会成绩
voidserialSort(vector<
v)
for(inti=0;
i<
v.size();
i++)
{
cout<
<
*v[i];
}
}
1.按学校编号统计
2.按学校名次统计
3.按男团总分统计
4.按女团总分统计
5.返回查询菜单
6.返回主菜单
1.所有学校总分统计表
2.学校成绩查询
3.项目情况查询
4.返回主菜单
详细代码:
#include<
stdio.h>
stdlib.h>
string.h>
io.h>
//#include<
conio.h>
/*屏幕操作函数*/
#defineMAX50
//#defineNULL0
typedefstructnode1{
intschool;
/*学校编号*/
intrecord;
/*项目成绩*/
structnode1*next;
/*链域*/
}Schools;
typedefstruct{
intitem;
/*项目编号*/
Schools*firstschool;
/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;
/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;
/*该学校获奖的项目*/
intrecord;
structnode2*next;
}Items;
intscore;
/*学校总分*/
intboys;
/*男团体总分*/
intgirls;
/*女团体总分*/
Items*firstitem;
/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
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);
\n\n"
);
printf("
\n******输入各个项目信息******\n\n"
输入男子项目总数m:
"
scanf("
%d"
&
m);
if(m<
0||m>
20)
{printf("
输入有误,m是20以内的整数,请重新输入:
scanf("
}
输入女子项目总数w:
w);
if(w<
0||w>
输入有误,w是20以内的整数,请重新输入:
输入参加运动会的学校总数n:
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****记录运