运动会分数统计系统数据结构课程设计报告.doc

上传人:李司机 文档编号:1131287 上传时间:2022-06-29 格式:DOC 页数:23 大小:214.44KB
返回 下载 相关 举报
运动会分数统计系统数据结构课程设计报告.doc_第1页
第1页 / 共23页
运动会分数统计系统数据结构课程设计报告.doc_第2页
第2页 / 共23页
运动会分数统计系统数据结构课程设计报告.doc_第3页
第3页 / 共23页
运动会分数统计系统数据结构课程设计报告.doc_第4页
第4页 / 共23页
运动会分数统计系统数据结构课程设计报告.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《运动会分数统计系统数据结构课程设计报告.doc》由会员分享,可在线阅读,更多相关《运动会分数统计系统数据结构课程设计报告.doc(23页珍藏版)》请在三一办公上搜索。

1、课程设计报告运动会分数统计系统的设计与实现一问题描述大学作为一个提供学生全面开展的高等教育机构,不仅要培养学生的学习能力,而且更要注重学生的德智体美全面开展。在大学中有很多丰富多彩的比赛和活动,例如运动会,演讲比赛,歌唱比赛,书法比赛等,在比赛和竞争中,我们的这些素质和能力更容易得到培养提升。但是比赛最后的分数统计和查询往往是举办者头疼的事情,分数的统计和查询需要快速准确,因此我们设计了这个运动会分数统计系统,以便分数的统计查询。参加运动会的n个学校编号为1n。比赛分成m个男子工程和w个女子工程,工程编号分别为1m和m+1m+w。由于各工程参加人数差异较大,有些工程取前五名,得分顺序为7,5,

2、3,2,1;还有些工程只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。二需求分析系统功能描述:(1)可以输入各个工程的前三名或前五名的成绩;(2)能统计各学校总分;(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校*个工程的情况;可以按工程编号查询取得前三或前五名的学校。三概要设计3.1链表构造的ADT的定义ADT List 数据对象:D=ai|aiElemSet,i=1,2,n,n0 数据关系:R1=|ai-1,aiD,i=2,n根本操作:InitList(&L)操作结果:构造一个空的线性表L。 GetElem(L,i,&e)

3、初始条件:线性表L已存在,1iListLength(L) 操作结果:用e返回L中第i个数据元素的值。LocateElem(L,e,pare() 初始条件:线性表L已存在,pare()是数据元素判定函数。操作结果:返回L中第1个与e满足关系pare()的数据元素的位序。假设这样的数据元素不存在,则返回值为0。PriorElem(L,cur_e,&pre_e)初始条件:线性表L已存在。操作结果:假设cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。Ne*tElem(L,cur_e,&ne*t_e)初始条件:线性表L已存在。操作结果:假设cur_e是

4、L的数据元素,且不是最后一个,则用ne*t_e返回它的后继,否则操作失败,ne*t_e无定义。ListInsert(&L,I,e)初始条件:线性表L已存在,1iListLength(L)+1操作结果:在L中第i个位置之前插入新的元素e,L是表长度加1ListTraverse(L,visit()初始条件:线性表L已存在。操作结果:依次对L的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。ADT List3.2系统功能模块设计运动会分数统计系统输入各学校名称输入男子运动工程 输入女子运动工程输入男子工程的成绩输入女子工程的成绩查询*校各个工程的成绩查询*校各个工程的成绩图

5、3-1运动会分数统计系统功能模块图 main()womansports(LinkList&L,intn) 循环语句依次输入每个值 ListTraverse(L,visit() schoolname(LinkList&L,intn) mansports(LinkList&L,intn) 循环语句依次输入每个值 ListTraverse(L,visit() ListTraverse(L,visit() ListTraverse(L,visit() 3.3主要函数调用关系图图 3-2系统函数调用关系图3.4主界面设计为了实现运动会分数统计系统,需要设计一个含有多菜单项的主控菜单子程序,以系统中各个子

6、工程的调用,为了便用户使用本系统,本系统主控菜单的运行界面如图3-3所示。图 3-3主菜单运行界面四详细设计实现运动会分数统计系统的开发,采用链表构造类型存储运动会学校名称、男子女子运动工程以及男子女子工程成绩的信息。4.1数据类型定义/每一个学校的信息typedef struct Lnode/结点char data20;/学校名称int da,d1,d2; /学校编号、学校总分、男女团体分struct Lnode *ne*t;/指向下一学校 Lnode,*LinkList;int sz20;/每一个工程的信息 存取typedef struct Lnode1char data20,data12

7、0,data220,data320,data420,data520;/该工程前五名学校的名称int da1,da2,da3,da4,da5;/该工程前五名学校的编号struct Lnode1 *ne*t;/指向下一工程 Lnode1,*LinkList1;4.2 系统子程序详细设计输入各学校名称的算法:/按从头到尾的顺序依次建立线性链表L1共有n个节点voidschoolname(LinkList &L1,int n)int i;LinkList p,q;/输入头结点信息,即输入第一个学校的名字L1=(LinkList)malloc(sizeof(Lnode);/malloc是动态开辟存,函数

8、返回为void型指针(指向开辟的存空间);LinkList定义的指针的类型;(sizeof(Lnode)malloc开辟的存空间的大小printf(请输入这%d 个学校的名字:n,n);p=(LinkList)malloc(sizeof(Lnode);/指向一个有意义的地L1-ne*t=p;/把p的值赋给ne*t ne*t指向实际的空间 p时指针scanf(%s,&p-data);/修改空间的值,&取p的数据域的地址/从第二个节点开场依次输入到第n个节点信息for(i=2;in将第i个结点参加链表L完毕NYscanf(%s,&p-data);q-ne*t=p;输入男子运动工程名字的算法:/按从

9、头到尾的顺序依次建立线性链表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(Lnode1);/把新开辟的空间data1-5初始化for(int t=0;tdata1t = 0;for( t=0;tdata2t = 0;for( t=0;tdata3t = 0;for( t=0;tdata4t

10、 = 0;for( t=0;tdata5t = 0;L2-ne*t=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;tdata3t = 0;for( t=0;tdata4t = 0;for( t=0;tdata5t = 0;scanf(%s,&r-data);s-ne*t=r;开场输入n个男子工程的名字i=0in将第i个结点参加

11、链表L完毕NY输入女子运动工程名字的算法:/按从头到尾的顺序依次建立线性链表L3共有n1个节点void womansports(LinkList1 &L3,int n1)/输入第一个节点的信息,即第一个女子工程的名字int i;LinkList1 r,s;L3=(LinkList1)malloc(sizeof(Lnode1);printf(请输入这%d 个工程的名字:n,n1);r=(LinkList1)malloc(sizeof(Lnode1);L3-ne*t=r;scanf(%s,&r-data);/从第二个节点开场依次输入到第n1个节点信息for(i=2;idata);s-ne*t=r;

12、开场输入n个女子工程的名字i=0in将第i个结点参加链表L完毕NY参加比赛的学校的总分排名的算法:void schoolrankings(LinkList &L1,int n)LinkList p; 学校的数据类型 上边int z,i,j,y;printf(参加这次比赛的学校的总分排名:n);p=L1-ne*t;/下一个地的指针给p p是学校的数据类型 p是一个节点,L1下一个节点给p/先把每个学校的总分依次遍历,存放在数组sz中。 一个一个取,一个一个找先让p指向一个链表for(i=0;ida;/节点的信息指向一个数组,data学校总数的数据域, 把所有的学校的总分p=p-ne*t;/再对数

13、组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-ne*t;/ L1表示一个节点,取出里面一个数据,那个数据的名字是ne*t,ne*t也是一个节点,p也是一个节点,if(i0)/ 意义是判断下一个是不是/如果值相等则链表指针直接指向下一个,不用交换位置while(szi=szi-1) 相邻的两个数组素不素相等i-;/从大到小,从最后一个比拟/在链表L1中找到与szi 相等的节点的位置,并

14、打印知名次信息for(j=1;jda)/数组里面的值从最后一个开场取printf(第%d 名%s :%d 分n,z,p-data,p-da);z+;p=p-ne*t;开场完毕i=0i+inYN将每个学校的总分赋给数组szn对数组szn进展冒泡排序遍历链表L找到与szi相等的结点并输出总分参加这次比赛的学校的男子工程的成绩排名的算法:/男子工程排名算法代码与上述学校总分的排名算法完全一致,其中男子工程排序的过程为比拟男子工程总分void manrankings(LinkList &L1,int n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的男子工程的成绩排名

15、:n);p=L1-ne*t;/先把每个学校的男子工程总分依次遍历,存放在数组sz中。for(i=0;id1;p=p-ne*t;/再对数组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-ne*t;if(i0)while(szi=szi-1)i-;/在链表L1中找到与szi 相等的节点的位置,并打印知名次信息for(j=1;jd1)printf(第%d 名%s :%d 分n,z,p-data,p-

16、d1);z+;p=p-ne*t;开场完毕i=0i+inYN将男子工程的总分赋给数组szn对数组szn进展冒泡排序遍历链表L找到与szi相等的结点并输出总分参加这次比赛的学校的女子工程的成绩排名的算法:/女子工程排名算法代码与上述学校总分的排名算法完全一致,其中女子工程排序的过程为比拟女子工程总分void womanrankings(LinkList &L1,int n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的女子工程的成绩排名:n);p=L1-ne*t;/先把每个学校的女子工程总分依次遍历,存放在数组sz中for(i=0;id2;p=p-ne*t;/再对

17、数组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-ne*t;if(i0)/如果值相等则链表指针直接指向下一个,不用交换位置while(szi=szi-1)i-;/在链表L1中找到与szi 相等的节点的位置,并打印知名次信息for(j=1;jd2)printf(第%d 名%s :%d 分n,z,p-data,p-d2);z+;p=p-ne*t; 开场完毕i=0i+inYN将女子工程的总分赋给数

18、组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为工程个数。七学习体会 通过这次数据构造课程设计,我收获了很多: 一经过这几天的学习,进一步提升了C语言的应用能力,稳固了数据构造上课所学习的容,数据构造知识的应用能力有了一定的提升,并且对C语言和数据构造有了更深层次的认识。 二这次课程

19、设计我们选的课题是运动会分数统计,涉及到线性链表以及C语言的一些根本的知识。在以前的学习中,对知识只是掌握了大概的容,根底知识掌握的不结实,所以编写程序的过程非常的困难,通过这次课程设计,让我知道根底知识非常重要。在进展概要设计的时候要注意结合问题的需求分析,函数调用要和系统功能相结合。在书写程序时,要认真细心,很多错误都是因为自己的粗心,调试程序就花费了非常多的时间。 三通过这次课程设计,让我明白了独立思考的重要性。一个东西只有经过自己的思考,自己明白了才是真的明白了。在思考的过程中,对一个问题思考的越深入,可以挖掘的东西就越多。在解决问题时要结合多面的因素,不能只单面思考问题。八源程序清单

20、*include *include *include typedef struct Lnode 类型定义char data20;/学校名称int da,d1,d2; /学校编号、学校总分、男女团体分struct Lnode *ne*t;/指向下一学校 Lnode,*LinkList;int sz20;/每一个工程的信息typedef struct Lnode1char data20,data120,data220,data320,data420,data520;/该工程前五名学校的名称int da1,da2,da3,da4,da5;/该工程前五名学校的编号struct Lnode1 *ne*t

21、;/指向下一工程 Lnode1,*LinkList1;输入各学校名称的算法:/按从头到尾的顺序依次建立线性链表L1共有n个节点void schoolname(LinkList &L1,int n)int i;LinkList p,q;/输入头结点信息,即输入第一个学校的名字L1=(LinkList)malloc(sizeof(Lnode);printf(请输入这%d 个学校的名字:n,n);p=(LinkList)malloc(sizeof(Lnode);L1-ne*t=p;scanf(%s,&p-data);/从第二个节点开场依次输入到第n个节点信息for(i=2;idata);q-ne*t

22、=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(Lnode1);for(int t=0;tdata1t = 0;for( t=0;tdata2t = 0;for( t=0;tdata3t = 0;for( t=0;tdata

23、4t = 0;for( t=0;tdata5t = 0;L2-ne*t=r;scanf(%s,&r-data);/从第二个节点开场输入到第n2个节点的信息for(i=2;i=n2;i+)s=r;r=(LinkList1)malloc(sizeof(Lnode1);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;scanf(%s,&r-data);s-ne*t=r;输入女子运动工程名字的算法:/按从头到尾的顺序依次建立线性链表L3

24、共有n1个节点void womansports(LinkList1 &L3,int n1)/输入第一个节点的信息,即第一个女子工程的名字int i;LinkList1 r,s;L3=(LinkList1)malloc(sizeof(Lnode1);printf(请输入这%d 个工程的名字:n,n1);r=(LinkList1)malloc(sizeof(Lnode1);L3-ne*t=r;scanf(%s,&r-data);/从第二个节点开场依次输入到第n1个节点信息for(i=2;idata);s-ne*t=r;参加比赛的学校的总分排名的算法:void schoolrankings(Link

25、List &L1,int n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的总分排名:n);p=L1-ne*t;/先把每个学校的总分依次遍历,存放在数组sz中。for(i=0;ida;p=p-ne*t;/再对数组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-ne*t;if(i0)/如果值相等则链表指针直接指向下一个,不用交换位置while(szi=szi-1)i

26、-;/在链表L1中找到与szi 相等的节点的位置,并打印知名次信息for(j=1;jda)printf(第%d 名%s :%d 分n,z,p-data,p-da);z+;p=p-ne*t;参加这次比赛的学校的男子工程的成绩排名的算法:/男子工程排名算法代码与上述学校总分的排名算法完全一致,其中男子工程排序的过程为比拟男子工程总分void manrankings(LinkList &L1,int n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的男子工程的成绩排名:n);p=L1-ne*t;/先把每个学校的男子工程总分依次遍历,存放在数组sz中。for(i=0;

27、id1;p=p-ne*t;/再对数组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-ne*t;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-ne*t;参加这次比赛的学校的女子工程的成绩排名的算法:/女子工程排名算法代码

28、与上述学校总分的排名算法完全一致,其中女子工程排序的过程为比拟女子工程总分void womanrankings(LinkList &L1,int n)LinkList p;int z,i,j,y;printf(参加这次比赛的学校的女子工程的成绩排名:n);p=L1-ne*t;/先把每个学校的女子工程总分依次遍历,存放在数组sz中for(i=0;id2;p=p-ne*t;/再对数组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

29、=n-1;i=0;i-)p=L1-ne*t;if(i0)/如果值相等则链表指针直接指向下一个,不用交换位置while(szi=szi-1)i-;/在链表L1中找到与szi 相等的节点的位置,并打印知名次信息for(j=1;jd2)printf(第%d 名%s :%d 分n,z,p-data,p-d2);z+;p=p-ne*t; void main ()int i,j,z,*,n,m,w;/声明学校链表LinkList p,q,L1;/p,q没有实际意义,L1是有实际意义,是储存学校信息/声明工程链表LinkList1 r,s,L2,L3;/ 同上 男子男子链表,女子想么链表doprintf(*

30、n);printf(*1 输入根本信息 *n);printf(*2 查询*校各个工程的成绩 *n);printf(*3 查询*个工程的比赛结果 *n);printf(*4 完毕本程序 *n);printf(*n);printf(请选择您想进展的操作n);/输入1,或2或3 选择功能scanf(%d,&z);/z=2查询*校各个工程的成绩if(z=2)r=L2-ne*t;printf(请输入您想查寻的学校的名字:n);/输入待查询学校的名称s = (LinkList1)malloc(sizeof(Lnode1);/存储学校的名字scanf(%s,&s-data);/输出查询结果/输出查询信息fo

31、r(i=1;idata1,s-data)=0) printf(贵校荣获男子工程%s 的第1名,他该工程的成绩是:%dn,r-data,r-da1);if(strcmp(r-data2,s-data)=0) printf(贵校荣获男子工程%s 的第2名,他该工程的成绩是:%dn,r-data,r-da2);if(strcmp(r-data3,s-data)=0) printf(贵校荣获男子工程%s 的第3名,他该工程的成绩是:%dn,r-data,r-da3);if(strcmp(r-data4,s-data)=0) printf(贵校荣获男子工程%s 的第4名,他该工程的成绩是:%dn,r-d

32、ata,r-da4);if(strcmp(r-data5,s-data)=0) printf(贵校荣获男子工程%s 的第5名,他该工程的成绩是:%dn,r-data,r-da5);r=r-ne*t;/男子工程的链表r=L3-ne*t;for(i=1;idata1,s-data)=0) printf(贵校荣获女子工程%s 的第1名,她该工程的成绩是:%dn,r-data,r-da1);if(strcmp(r-data2,s-data)=0) printf(贵校荣获女子工程%s 的第2名,她该工程的成绩是:%dn,r-data,r-da2);if(strcmp(r-data3,s-data)=0)

33、 printf(贵校荣获女子工程%s 的第3名,她该工程的成绩是:%dn,r-data,r-da3);if(strcmp(r-data4,s-data)=0) printf(贵校荣获女子工程%s 的第4名,她该工程的成绩是:%dn,r-data,r-da4);if(strcmp(r-data5,s-data)=0) printf(贵校荣获女子工程%s 的第5名,她该工程的成绩是:%dn,r-data,r-da5);r=r-ne*t;/查询学校完毕/z=3查询*个工程的比赛结果if(z=3)printf(请输入您想查寻的工程的名字:n);/输入待查询的工程名称s = (LinkList1)mal

34、loc(sizeof(Lnode1);scanf(%s,&s-data);/存data里r=L2-ne*t;for(i=1;idata,s-data)=0)if(strlen(r-data4)=0) printf(第1名%s ,第2名%s,第3名%sn,r-data1,r-data2,r-data3);if(strlen(r-data4)0) printf(第1名%s ,第2名%s,第3名%s,第4名%s,第5名%sn,r-data1,r-data2,r-data3,r-data4,r-data5);r=r-ne*t;r=L3-ne*t;/打印工程比赛结果for(i=1;idata,s-dat

35、a)=0)if(strlen(r-data4)=0) printf(第1名%s ,第2名%s,第3名%sn,r-data1,r-data2,r-data3);/字长 没有输入第四名 strlen(r-data4)=0if(strlen(r-data4)0) printf(第1名%s ,第2名%s,第3名%s,第4名%s,第5名%sn,r-data1,r-data2,r-data3,r-data4,r-data5);r=r-ne*t;if(z=1)/输入局部/输入学校的个数nprintf(请输入参加这次比赛的学校的个数:n);scanf(%d,&n);/构建链表L1,依次输入n个学校的名称。sc

36、hoolname(L1,n);q=L1-ne*t;/把L1链表中的总分da全部初始化为0for(i=1;ida=0;/初始化q-d1=0;q-d2=0;q=q-ne*t;/输入男子个工程总数mprintf(n请输入这次比赛的男子工程的个数:n);scanf(%d,&m);/构建男子工程链表L2输入m个男子运动工程名字mansports(L2,m);r=L2-ne*t;/依次m个男子工程的结果for(i=1;idata);/输入1或2 选择成绩记录的式scanf(%d,&z);printf(请输入第1名所来自的学校的名字和他该工程的成绩:n);/输入第1名学校名称和工程成绩scanf(%s%d,&r-data1,&r-da1);q=L1-ne*t;for(j=1;jdata1,q-data)=0)if(z=1) q-da=q-da+r-da1;q-d1=q-d1+r-da1;/把工程的成绩把对应的工程的成绩加到学校里 先把第一名的成绩加到对应的学校 加到男子工程总分if(z=2) q-da=q-da+r-da1;q-d1=q-d1+r-da1;q=q-ne*t;printf(请输入第2名所来自的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号