运动会分数统计系统的简单实现_第1页
运动会分数统计系统的简单实现_第2页
运动会分数统计系统的简单实现_第3页
运动会分数统计系统的简单实现_第4页
运动会分数统计系统的简单实现_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上学院_专业_班级_本专 学号_姓名_ 密封线 学生须将文字写在此线以下鲁东大学 数学与信息学院 20102011学年第1学期数据结构专题设计课程论文课程号: 任课教师 陈军 成绩 论文题目:(可指定题目,也可说明题目范围。)从给出的参考选题中选(或自选)一个能体现数据结构课程特点的课题,用C语言(TC或VC+)编程实现所述功能,用论文形式描述整个工作。详见数据结构专题设计 课程任务和要求文档。论文要求:(对论文题目、内容、行文、字数等作出判分规定。)按右边给定的模板要求写作,字数4000字以上(不含附录)。评分采用五级制:优秀、良好、中等、及格、不及格。评分依据包括题

2、目难易程度、程序运行情况、数据结构和算法设计合理与否、算法注释的清晰程度;论文的规范程度、撰写质量(条理清晰,内容充实,文字通顺,图表恰当);总结的深刻程度、工作量和创新性;交作业的及时程度、独立完成情况,以及其它参考因素。不同同学可以选择同类题目,但在具体功能、程序代码、论文写作上都要有所不同,若发现雷同,均判为不及格。教师评语: 教师签字: 2010 年 11 月 2 日运动会分数统计系统的简单实现1、引言每个学校都有运动会的举办,而运动会最重要的就是对于分数的统计,对于运动会来说,不同名次的不同积分,每个项目的分数累计,每个学校(或班级)获奖的情况,每个学校(或班级)总分的状况,数据的整

3、理非常麻烦和琐碎,如果是场大型的运动会,数据的处理量是很大的,仅靠人工处理时往往不够的。所以一个可以简单统计分析运动会分数的分数管理系统是很重要的,它可以为用户提供的服务有:(1) 数据的输入。(2) 数据的统计,包括分类,统计各项积分,总分等。(3) 数据的排序。(4) 有关数据的输出,查询。 简单的分数统计系统可以简化人工操作,使数据处理的更为简便和快捷,省去大量冗余时间和人工劳力。运动会分数统计系统处理的数据相对简单,数据量相对较小,操作简单,但所用结构丰富,可以用来作为练习C语言的编程。利用C语言实现对数据的整理,包括输入、储存、编辑、简单的运算和数据的查找。2、需求分析本次设计任务是

4、统计运动会分数,即总分、女子总分、男子总分。输入各个学校的名称,各个项目的名称,获得每个项目前三名的学校编号,分数按第一名3分、第二名2分、第三名1分的积分计算成绩。最后输出各学校的总分、女子总分、男子总分,及总分排名、女子总分排名、男子总分排名,和所要查找的学校总分、女子总分、男子总分。任务:一共有n个学校参加运动会(n小于20),编号1n,分成m个男子项目和w个女子项目,不同项目取前三名的积分为:3、2、1(m<20,n<20)。功能要求:1.能统计各个学校的总分。2.可以按学校总分、男子总分、女子总分输出。3.可以查找某个学校的总分、男子总分、女子总分的情况。3、概要设计(或

5、总体设计)3.1数据结构描述实现以上算法必须定义两个结构体,一个项目结构体,一个学校结构体。truct pro /项目结构体;char nameN; /项目名称;int nums4; /前三名学校编号;p21;struct school /学校结构体;int num;char nameN; /学校名称;int sums; /学校总分;int girl; /女子总分;int boy; /男子总分;sch21;主要有五个模块:1.主函数模块;选择操作。即选择要实现的功能。2.总分排序模块;Sumsrank(),将参加运动会的学校按总分大小排列。3.女子总分排序模块;Girlrank()将参加运动会

6、的学校按女子总分大小排列。4.男子总分排序模块;Boyrank()将参加运动会的学校按男子总分大小排列。5.查找模块;Search()查找某学校的分数情况。ADT定义ADT Yundong数据对象:D=e1,e2,e3,e4 | e1,e2,e3,e4ElemSet基本操作: Input(&A,x1,x2,x3.) 促使条件:A为n维数组,x1,x2,x3为变量。 操作结果:将变量赋值给A中元素。 Rank(&A)操作结果:将数组A中元素排序并列出。ADT Yundong3.2模块设计储存设计主菜单1234560输入各学校的名称、个项目的名称及获得前三名的学校编号,并储存。输出

7、各个学校的总分、女子总分、男子总分。按编号输出按学校总分排名输出成绩。按学校女子总分排名输出成绩。按学校男子总分排名输出成绩输出查找某个学校的总分、女子总分、男子总分。退出程序。1输入各学校及各项目成绩并储存输入女子项目个数w输入男子项目个数m输入参加运动会的学校总数n女子项目男子项目输入项目编号(如1)输入项目编号(如w)输入项目编号(如1)输入项目编号(如m)输入第一的学校编号(编号为:)输入第三名学校的编号(编号为:)输入第一的学校编号(编号为:)输入第三的学校编号(编号为:)输入第一的学校编号(编号为:)输入第三的学校编号(编号为:)输入第一的学校编号(编号为:)输入第三的学校编号(编

8、号为:)2.统计各学校总分情况,按编号输出按各学校编号显示分数情况按数字键继续选择操作。3.统计各学校总分排名显示各学校总分按数字键继续选择操作。4.统计各学校女子总分排名显示各学校女子总分按数字键继续选择操作。5.统计各学校男子总分排名显示各学校男子总分按数字键继续选择操作。6.按学校编号查询某个学校的得分情况输入要查询的学校编号显示该学校的编号、名称、总分、女子总分、男子总分0.退出程序按任意键可以退出。主函数流程main()4、详细设计及实现4.1 input() 4.2 sumsrank() 4.3 girlrank()4.4 boyrank() 4.5 search()5、调试分析1

9、.input() 输入函数 输入函数中出现的主要错误有错误信息的循环编写的不是很好,经常出现死循环,有时易跳不出循环总在重复同一操作。while循环中的控制语句中的变量值在循环中的位置设置的不对以致在后面循环的时候出现无法实现循环,和循环出错,形成死循环的现象。例如控制语句中的y变量就出现了错误,混淆了退出循环是的值。 为了将提示信息写进循环,可以将操作重复,所以出现了,报错不正确的现象。if 语句中的判断语句出现错误,逻辑关系不清等错误也常常出现。例如混淆了“&&”和“|”的用法,导致了判断错误输入时出现了很多错误。 出现这种情况后的解决办法,通过反复的修改和调试。换用不同的

10、循环体找寻适合的控制语句。实现在输入错误时,出现错误提醒及修改操作。对于逻辑关系的换乱,可以试着用不同的判断语句来实现,或者不断试验判断正确逻辑。 在C+环境中单击程序运行按钮。 测试:屏幕显示菜单,输入1,回车。输入各个学校的名称和各个项目的名称及前三名的学校。2.排序函数在排序函数中,程序使用了冒泡排序法。但是中间出现了对结构体中的元素的不正确引用。致使后面输出时的编号和排名时的数据错误。在排序中if 语句判断好大小后,最开始只是对当前的元素进行了排序,以致后面再输出结果时,输出错误,排序混乱。例如在总分排序中,只是将schj.sum与schj+1.sum进行了交换,致使后面排序的输出时完

11、全错误。解决方法,仔细查找结构体。正确引用结构体元素。排序时应将结构体整体排序,而不是简单的将某个结构体中的某个元素排序。排序中还出现了循环错误。对于双层循环的控制出现错误,外层循环和内层循环没有很好的协调。例如外层循环循环变量为i,内层循环循环变量为j,i与j的关系没有弄清,使后面的结果发生了错误。解决方式,修改循环。检查外层循环和内层循环的控制语句,调试出最佳的循环关系。发现错误并修改。测试:输入2或3,回车。 按学校的最初编号排列,输出学校名称、团体总分、女子总分、男子总分。按学校的团体总分排列,输出学校编号,学校名称、团体总分。调试分析:缺点是每次执行后无法返回主菜单,查找功能每次只能

12、查找一个学校,不能循环使用。每次查找一个学校后就退出循环,不能继续操作。6、结论及体会1.课题小结:对于这次的实验题目,事先想象的很简单,自己认为只是几个简单的小模块,简单的排序和数据统计问题,想要实现是很简单的事情。可是没有想到做起来还是蛮辛苦的,有好多模块之间的联系自己事先都没有想清楚,导致做的时候很是手忙脚乱。事先所查的资料也是寥寥无几,能给自己提供的信息也很少。在编程序的时候遇到了很多困难,从而也发现了自己对之前C语言及数据结构的知识掌握的不是很理想。简单的做题还是可以,但是如果结合起来做一个简单的系统还真是困难。自己对于各个算法之间的联系还是模棱两可的,很多东西不是自己想象的那样简单

13、。明白了,要想把一个系统做好需要了解很多东西,也要有全局的观念,自己做的是一个系统而不是一个简单的算法。仅仅了解书本上简单的程序是不够的,还要将这些只是用到实际的程序上,这一点中遇到的困难是我始料未及的。通过这次设计实验,让我对原来所学的知识有了更深刻的理解,尤其是原来并不是很懂得结构体知识,还有对于数据排序的知识。在写论文的时候也对于数据的流程图有了新的认识,原来学习的时候不是很喜欢画流程图,但是通过这次试验,让我发现流程图的重要性。这次实验让我学到了很多,不仅仅是知识,还有查找资料,编写程序、调试程序等能力,同时也让我明白了,只要决定做一件事,下定决心通过努力是可以成功的,虽然可能和自己的

14、想象有些差距,但是如果不去做是连一点点的收获都得不到的,我们可以通过以后的努力使它更加完善和理想。这也是我这次试验的最大收获,这次试验让我获益匪浅。 2.对系统的评价及改进设想我的系统自认为不是很理想的,因为自己有很多的想法没有被实现。时间复杂度和空间复杂度没很好的被考虑在内。所以算法的分析做的不是很够,自己只是将简单的计算思想和简单的程序功能体现出来。虽然程序上还有很多的地方不足,但是简单的功能,如分数输入、数据整理、数据排序、数据输出等功能都可以实现,基本的要求和功能都已实现,这是我比较满意的。还有让自己觉得程序还不错的地方是错误提示做的比较满意,在反复修改了程序循环之后可以正确的提示错误

15、,并且可以退出循环重新输入。我认为这个系统还有很多需要改进的地方,有些功能没有完全的体现。原本我对于这个程序的设想是,除了数据的输入、整理、排序之外,查找功能是除了可以按学校查询,还可以按项目查询各学校的得分情况,但是这一点我的程序无法实现,还是因为结构体的运用上有些不清,无法达到这项功能。这是我对于这个程序最大的遗憾。也是最需要改进的地方。因为自己的编程能力真的不是很好,很多地方无法顾及,许多的东西无法实现,程序有很多的瑕疵和不足。所以希望在老师看过我的程序后,请老师多多批评指正,谢谢老师!参考文献1 严蔚敏,吴伟民数据结构题集(C语言版)北京:清华大学出版社,1999.2 徐孝凯. 数据结

16、构课程实验. 北京:清华大学出版社,2002. 附录主要的源程序代码。#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <conio.h>#define OK 1#define ERROR 0#define N 20int n; /n个学校;int m; /m个男子项目;int w; /w个女子项目; struct pro /项目结构体;char nameN; /项目名称;int nums4; /前三名学校编号;p21;s

17、truct school /学校结构体;int num;char nameN; /学校名称;int sums; /学校总分;int girl; /女子总分;int boy; /男子总分;sch21;int mins3=3,2,1; /前三名成绩的积分;void input() /输入各项目成绩; int i,j,x,y; printf("请输入学校的数目。(大于0,小于20)!"); y=0; while(1) scanf("%d",&n); if(n>=0 && n<=20) y=1; if(y=1) break;

18、else printf("输入有误,输入应大于零小于20,请重新输入!"); for(i=1;i<=n;i+) printf("请输入第%d个学校的名字。",i);scanf("%s",);schi.sums=0;schi.boy =0;schi.girl=0;schi.num=i; printf("请输入男子和女子项目数(大于0,小于20):"); y=0; while(1) scanf("%d %d",&m,&w); if(m<=20&&

19、amp;m>=1&&w<=20&&w>=1) y=1; if(y=1) break; else printf("输入有误,输入应大于零小于20,请重新输入!"); for(i=1;i<=m+w;i+) printf("请输入第%d个项目的名称:n",i); scanf("%s",); printf("请输入该项目前三名学校的编号(数字编号):n"); for(j=1;j<=3;j+) y=0; while(1) scanf("%d

20、",&x); if(x>=1 && x<=20) y=1; if(y=1) break; else printf("输入数据有误,请重新输入:"); pi.numsj=x; schx.sums+=minsj-1; if(i<=m)schx.boy+=minsj-1; else schx.girl+=minsj-1; void sumsrank() /总分排序;int i,j;school a;for(i=0;i<n;i+)for(j=1;j<=n-i;j+)if(schj.sums<schj+1.sums

21、)a=schj;schj=schj+1;schj+1=a;void girlrank() /女子排序;int i,j;school a;for(i=0;i<n;i+)for(j=1;j<=n-i;j+)if(schj.girl<schj+1.girl)a=schj;schj=schj+1;schj+1=a;void boyrank() /男子排序int i,j;school a;for(i=0;i<n-i;i+)for(j=1;j<=n;j+)if(schj.boy<schj+1.boy)a=schj;schj=schj+1;schj+1=a;void sc

22、hrank() /学校排名int i;printf(" 学校分数统计 n"); printf("n");printf("学校编号 学校名称 团体总分 女子总分 男子总分 n"); for(i=1;i<=n;i+)printf(" %d %s %d %d %d n",schi.num,,schi.sums,schi.girl,schi.boy);printf("n");printf("n");void Sumrank() /团体分数排名int i;pri

23、ntf(" 团体分排名 n"); sumsrank();printf("名次 学校编号 学校名称 团体总分 n");for(i=1;i<=n;i+)printf(" %d %d %s %d n",i,schi.num,,schi.sums);printf("n");printf("n");void Girlrank()int i;printf(" 女子总分排名 n"); /女子总分排名girlrank();printf("名次 学校编号 学校

24、名称 女子总分 n");for(i=1;i<=n;i+)printf(" %d %d %s %d n",i,schi.num,,schi.girl);printf("n");printf("n");void Boyrank()int i; printf(" 男子总分排名 n"); /男子总分排名 boyrank(); printf("名次 学校编号 学校名称 男子总分 n");for(i=1;i<=n;i+) printf(" %d %d %s

25、%d n",i,schi.num,,schi.boy);printf("n");printf("n");void search()/查找功能int x;printf("请输入要查询的学校编号:"); /学校查找scanf("%d",&x);printf("学校编号 学校名称 团体总分 女子总分 男子总分 n");printf(" %d %s %d %d %d",schx.num,,schx.sums,schx.girl,schx.boy);printf("n");void main()int x;printf("*n");printf(" 运动会分数统计系统 n")

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论