运动会分数统计系统 数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
经济学院华信学院
课程设计报告
学院:
专业:
班级:
学号:
姓名:
运动会分数统计系统的设计与实现
一.问题描述
大学作为一个提供学生全面发展的高等教育机构,不仅要培养学生的学习能力,而且更要注重学生的德智体美全面发展。在大学中有很多丰富多彩的比赛和活动,例如运动会,演讲比赛,歌唱比赛,书法比赛等,在比赛和竞争中,我们的这些素质和能力更容易得到培养提升。但是比赛最后的分数统计和查询往往是举办者头疼的事情,分数的统计和查询需要快速准确,因此我们设计了这个运动会分数统计系统,以便分数的统计查询。
参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。
二.需求分析
系统功能描述:
(1)可以输入各个项目的前三名或前五名的成绩;
(2)能统计各学校总分;
(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五
名的学校。
三.概要设计
3.1链表结构的ADT的定义
ADT List{
数据对象:D={a i|a i∈ElemSet,i=1,2,…,n,n≥0}
数据关系:R1={|a i-1,a i∈D,i=2,…,n}
基本操作:
InitList(&L)
操作结果:构造一个空的线性表L。
GetElem(L,i,&e)
初始条件:线性表L已存在,1≦i≦ListLength(L)
操作结果:用e返回L中第i个数据元素的值。
LocateElem(L,e,compare())
初始条件:线性表L已存在,compare()是数据元素判定函
数。
操作结果:返回L中第1个与e满足关系compare()的数据
元素的位序。若这样的数据元素不存在,则返回值
为0。
PriorElem(L,cur_e,&pre_e)
初始条件:线性表L已存在。
操作结果:若cur_e是L的数据元素,且不是第一个,则用
pre_e返回它的前驱,否则操作失败,pre_e无定
义。
NextElem(L,cur_e,&next_e)
初始条件:线性表L已存在。
操作结果:若cur_e是L的数据元素,且不是最后一个,则
用next_e返回它的后继,否则操作失败,next_e
无定义。
ListInser t(&L,I,e)
初始条件:线性表L已存在,1≦i≦ListLength(L)+1
操作结果:在L中第i个位置之前插入新的元素e,L是表长
度加1
ListTraverse(L,visit())
初始条件:线性表L已存在。
操作结果:依次对L的每个数据元素调用函数visit()。一旦
visit()失败,则操作失败。
}ADT List
3.2系统功能模块设计
3.4主界面设计
为了实现运动会分数统计系统,需要设计一个含有多菜单项的主控菜单子程序,以系统中各个子项目的调用,为了便用户使用本系统,本系统主控菜单的运行界面如图3-3所示。
四.详细设计
实现运动会分数统计系统的开发,采用链表结构类型存储运动会学校名称、男子女子运动项目以及男子女子项目成绩的信息。
4.1数据类型定义
图 3-3主菜单运行界面
图 3-2系统函数调用关系图
//每一个学校的信息
typedef struct Lnode//结点
{
char data[20];//学校名称
int da,d1,d2; //学校编号、学校总分、
男女团体分
struct Lnode *next;//指向下一学校
} Lnode,*LinkList;
int sz[20];
//每一个项目的信息存取
typedef struct Lnode1
{
char data[20],data1[20],data2[20],data3[20],data4[20],data5[20];
//该项目前五名学校的名称
int da1,da2,da3,da4,da5;//该项目前五名学校的编号
struct Lnode1 *next;//指向下一项目
} Lnode1,*LinkList1;
4.2 系统子程序详细设计
输入各学校名称的算法:
//按从头到尾的顺序依次建立线性链表L1共有n个节点
void schoolname(LinkList &L1,int n)
{
int i;
LinkList p,q;
//输入头结点信息,即输入第一个学校的名字
L1=(LinkList)malloc(sizeof(Lnode));// malloc是动态开辟存,函数返回为void 型指针(指向开辟的存空间);(LinkList)定义的指针的类型;(sizeof(Lnode)malloc 开辟的存空间的大小
printf("请输入这%d 个学校的名字:\n",n);
p=(LinkList)malloc(sizeof(Lnode));//指向一个有意义的地
L1->next=p;//把p的值赋给next next指向实际的空间p时指针
scanf("%s",&p->data);//修改空间的值,&取p的数据域的地址
//从第二个节点开始依次输入到第n个节点信息
for(i=2;i<=n;i++)//p是第一个,所以i=2从2开始先指出第一个,然后第一个在指出剩下的
{
q=p; //q指向p开辟的空间即q指向p指向的地
p=(LinkList)malloc(sizeof(Lnode));//给新开辟的空间赋值