运动会分数统计系统 数据结构课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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));//给新开辟的空间赋值

相关文档
最新文档