运动会分数统计系统 数据结构课程设计(20页).doc
《运动会分数统计系统 数据结构课程设计(20页).doc》由会员分享,可在线阅读,更多相关《运动会分数统计系统 数据结构课程设计(20页).doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-运动会分数统计系统 数据结构课程设计-第 20 页石家庄经济学院华信学院 课程设计报告学 院: 专 业: 班 级: 学 号: 姓 名: 运动会分数统计系统的设计与实现一问题描述大学作为一个提供学生全面发展的高等教育机构,不仅要培养学生的学习能力,而且更要注重学生的德智体美全面发展。在大学中有很多丰富多彩的比赛和活动,例如运动会,演讲比赛,歌唱比赛,书法比赛等,在比赛和竞争中,我们的这些素质和能力更容易得到培养提升。但是比赛最后的分数统计和查询往往是举办者头疼的事情,分数的统计和查询需要快速准确,因此我们设计了这个运动会分数统计系统,以方便分数的统计查询。参加运动会的n个学校编号为1n。比赛分
2、成m个男子项目和w个女子项目,项目编号分别为1m和m+1m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。二需求分析 系统功能描述: (1)可以输入各个项目的前三名或前五名的成绩;(2)能统计各学校总分;(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。三概要设计3.1链表结构的ADT的定义ADT List 数据对象:D=ai|aiElemSet,i=1,2,n,n0 数据关系:R1
3、=|ai-1,aiD,i=2,n 基本操作: InitList(&L) 操作结果:构造一个空的线性表L。 GetElem(L,i,&e) 初始条件:线性表L已存在,1iListLength(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的数据元素,且不是第一个,则
4、用pre_e返回它的前驱,否则操作失败,pre_e无定义。 NextElem(L,cur_e,&next_e) 初始条件:线性表L已存在。 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义。 ListInsert(&L,I,e) 初始条件:线性表L已存在,1iListLength(L)+1 操作结果:在L中第i个位置之前插入新的元素e,L是表长度加1 ListTraverse(L,visit() 初始条件:线性表L已存在。 操作结果:依次对L的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。ADT Li
5、st3.2系统功能模块设计运动会分数统计系统输入各学校名称输入男子运动项目 输入女子运动项目输入男子项目的成绩输入女子项目的成绩查询某校各个项目的成绩查询某校各个项目的成绩图 3-1运动会分数统计系统功能模块图 main()womansports(LinkList&L,intn) 循环语句依次输入每个值 ListTraverse(L,visit() schoolname(LinkList&L,intn) mansports(LinkList&L,intn) 循环语句依次输入每个值 ListTraverse(L,visit() ListTraverse(L,visit() ListTravers
6、e(L,visit() 3.3主要函数调用关系图图 3-2系统函数调用关系图3.4主界面设计为了实现运动会分数统计系统,需要设计一个含有多菜单项的主控菜单子程序,以链接系统中各个子项目的调用,为了方便用户使用本系统,本系统主控菜单的运行界面如图3-3所示。图 3-3主菜单运行界面 四详细设计实现运动会分数统计系统的开发,采用链表结构类型存储运动会学校名称、男子女子运动项目以及男子女子项目成绩的信息。4.1数据类型定义/每一个学校的信息typedef struct Lnode/结点char data20; /学校名称int da,d1,d2; /学校编号、学校总分、男女团体分struct Lno
7、de *next; /指向下一学校 Lnode,*LinkList;int sz20;/每一个项目的信息 存取typedef struct Lnode1char data20,data120,data220,data320,data420,data520;/该项目前五名学校的名称int da1,da2,da3,da4,da5; /该项目前五名学校的编号struct Lnode1 *next; /指向下一项目 Lnode1,*LinkList1;4.2 系统子程序详细设计输入各学校名称的算法:/按从头到尾的顺序依次建立线性链表L1共有n个节点void schoolname(LinkList &L
8、1,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);/修改空
9、间的值,&取p的数据域的地址/从第二个节点开始依次输入到第n个节点信息for(i=2;in将第i个结点加入链表L结束NYscanf(%s,&p-data);q-next=p;输入男子运动项目名字的算法:/按从头到尾的顺序依次建立线性链表L2共有n2个节点void mansports(LinkList1 &L2,int n2) /输入第一个节点的信息,即第一个男子项目的名字int i;LinkList1 r,s;L2=(LinkList1)malloc(sizeof(Lnode1);printf(请输入这%d 个项目的名字:n,n2);r=(LinkList1)malloc(sizeof(Lno
10、de1);/把新开辟的空间data1-5初始化for(int t=0;tdata1t = 0; for( t=0;tdata2t = 0;for( t=0;tdata3t = 0;for( t=0;tdata4t = 0;for( t=0;tdata5t = 0;L2-next=r;scanf(%s,&r-data);/从第二个节点开始输入到第n2个节点的信息for(i=2;i=n2;i+)s=r; /s指向r指向的地方r=(LinkList1)malloc(sizeof(Lnode1);for(int t=0;tdata1t = 0;for( t=0;tdata2t = 0;for( t=0
11、;tdata3t = 0;for( t=0;tdata4t = 0;for( t=0;tdata5t = 0;scanf(%s,&r-data);s-next=r;开始输入n个男子项目的名字i=0in将第i个结点加入链表L结束NY输入女子运动项目名字的算法:/按从头到尾的顺序依次建立线性链表L3共有n1个节点void womansports(LinkList1 &L3,int n1) /输入第一个节点的信息,即第一个女子项目的名字int i;LinkList1 r,s;L3=(LinkList1)malloc(sizeof(Lnode1);printf(请输入这%d 个项目的名字:n,n1);
12、r=(LinkList1)malloc(sizeof(Lnode1);L3-next=r;scanf(%s,&r-data);/从第二个节点开始依次输入到第n1个节点信息for(i=2;idata);s-next=r;开始输入n个女子项目的名字i=0in将第i个结点加入链表L结束NY参加比赛的学校的总分排名的算法:void schoolrankings(LinkList &L1,int n)LinkList p; 学校的数据类型 上边int z,i,j,y; printf(参加这次比赛的学校的总分排名:n);p=L1-next; /下一个地方的指针给p p是学校的数据类型 p是一个节点,L1下
13、一个节点给p/先把每个学校的总分依次遍历,存放在数组sz中。 一个一个取,一个一个找先让p指向一个链表for(i=0;ida; /节点的信息指向一个数组,data学校总数的数据域, 把所有的学校的总分p=p-next;/再对数组sz用冒泡排序法进行从小到大排序for(i=1;i=n-1;i+)for(j=1;jszj)y=szj-1;szj-1=szj;szj=y;z=1; /初始化/把线性链表L1按项目总分从大到小的顺序排列,并打印名次for(i=n-1;i=0;i-)p=L1-next; / L1表示一个节点,取出里面一个数据,那个数据的名字是next,next也是一个节点,p也是一个节点
14、,if(i0) / 意义是判断下一个是不是/如果值相等则链表指针直接指向下一个,不用交换位置while(szi=szi-1) 相邻的两个数组素不素相等i-; /从大到小,从最后一个比较/在链表L1中找到与szi 相等的节点的位置,并打印出名次信息for(j=1;jda) /数组里面的值从最后一个开始取 printf(第%d 名%s :%d 分n,z,p-data,p-da);z+;p=p-next;开始结束i=0i+inYN将每个学校的总分赋给数组szn对数组szn进行冒泡排序遍历链表L找到与szi相等的结点并输出总分参加这次比赛的学校的男子项目的成绩排名的算法:/男子项目排名算法代码与上述学
15、校总分的排名算法完全一致,其中男子项目排序的过程为比较男子项目总分void manrankings(LinkList &L1,int n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的男子项目的成绩排名:n);p=L1-next;/先把每个学校的男子项目总分依次遍历,存放在数组sz中。for(i=0;id1;p=p-next;/再对数组sz用冒泡排序法进行从小到大排序 for(i=1;i=n-1;i+)for(j=1;jszj)y=szj-1;szj-1=szj;szj=y;z=1;/把线性链表L1按男子项目总分从大到小的顺序排列,并打印名次for(i=n-1
16、;i=0;i-)p=L1-next;if(i0)while(szi=szi-1)i-;/在链表L1中找到与szi 相等的节点的位置,并打印出名次信息for(j=1;jd1)printf(第%d 名%s :%d 分n,z,p-data,p-d1);z+;p=p-next;开始结束i=0i+inYN将男子项目的总分赋给数组szn对数组szn进行冒泡排序遍历链表L找到与szi相等的结点并输出总分参加这次比赛的学校的女子项目的成绩排名的算法:/女子项目排名算法代码与上述学校总分的排名算法完全一致,其中女子项目排序的过程为比较女子项目总分void womanrankings(LinkList &L1,i
17、nt n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的女子项目的成绩排名:n);p=L1-next;/先把每个学校的女子项目总分依次遍历,存放在数组sz中for(i=0;id2;p=p-next;/再对数组sz用冒泡排序法进行从小到大排序for(i=1;i=n-1;i+)for(j=1;jszj)y=szj-1;szj-1=szj;szj=y;z=1;/把线性链表L1按女子项目总分从大到小的顺序排列,并打印名次for(i=n-1;i=0;i-)p=L1-next;if(i0)/如果值相等则链表指针直接指向下一个,不用交换位置while(szi=szi-1)i
18、-;/在链表L1中找到与szi 相等的节点的位置,并打印出名次信息for(j=1;jd2)printf(第%d 名%s :%d 分n,z,p-data,p-d2);z+;p=p-next;开始结束i=0i+inYN将女子项目的总分赋给数组szn对数组szn进行冒泡排序遍历链表L找到与szi相等的结点并输出总分五编码实现及系统测试图 5-1输入基本信息图 5-2学校及项目排名图 5-3查询某校各个项目的成绩图 5-4查询某个项目的比赛结果图 5-5结束本程序六结果分析表 6-1时间、空间复杂度 操作时间复杂度空间复杂度1O(n+m)O(1)2O(n)O(1)3O(m)O(1)注:m为学校个数,n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会分数统计系统 数据结构课程设计20页 运动会 分数 统计 系统 数据结构 课程设计 20
限制150内