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

下载本文档

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

文档简介

1、数据结构课程设计题 目: 运动会分数统计系统 的设计与实现 学 院: 理学院 班 级: 统计12-1班 学 生 姓 名: 金志鹏 学 生 学 号: 2012027166 指 导 教 师: 张太发 2013 年 11 月 27 日课程设计任务书姓名金志鹏班级统计12-1班学号 07设计题目运动会分数统计系统的设计与实现理论要点 该系统实现了简单的运动会分数统计,是一个面向对象的设计,使用了结构体,输入文本读取数据以及库函数的调用来完成整个系统的设计,是繁多的数据操作变得简单。该系统为联合运动会提供服务减少了不必要的人力物力的浪费。设计目标1. 具有较高的可靠性和可用性; 2. 系统易于管理维护;

2、3 使用方便,易学易用; 研究方法步骤1. 对运动会分数统计领域实际业务需求的调研。2. 认证信息管理、密码管理、对每个学校进行总分统计、对各个信息进行查询、增加、删除、修改并进行排序。 3.实现文件读取数据以及文件保存数据操作。 用户信息完善、认证信息的查看。预期结果 1.根据指定的输入文件读取数据; 2.输入文件数据格式和文件数目由学生自行设计,主体体现学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名积分; 3.根据输入文件得到各学校总分, 4.可以按学校编号或名称、学校总分、男女团体总分排序; 5.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校

3、。 6.实现数据的增加、删除、修改,并将相关数据进行保存; 7.各操作结果能保存到文件,以便查询。计划与进步的安排 1. 1-2日:查找资料 2. 3-4日:编写代码 3. 5-6日:程序测试目录摘要I1 题目分析12概要设计13详细设计24调试分析35用户使用说明46测试结果67 结论体会108 参考文献119 源程序11摘要针对运动会分数统计系统通过运用结构体、文件读取以及数据保存、定义运动会类、以及调用函数、运用库函数实现了指定的输入文本读取数据;根据输入文件得到各学校的总分;按学校编号、学校总分、男女团体总分排序;查询功能按学校编号查询某个项目的情况、按项目编号查询取得前三或前五名的学

4、校;实现了数据的增加、删除、修改以及对数据的保存的功能。该系统的用户主要是提供给管理、学校的。对于管理用户提供了所有的操作,而对学校拥护只提供查询和查看操作,这样安全性能比较高,该系统是通过输入文本读取来获取数据,较少了输入数据的繁杂通过运用定义运动会类,进行对函数的定义,使整个代码看起来清晰整洁,通过调用库函数,使代码更简洁。该系统为用户提供了总分计算,排序方便,为学校用户提供了查询和查看的方便。关键词:运动会分数统计系统;结构体;排序;查询1、题目分析该系统实现了简单的运动会分数统计,是一个面向对象的设计,使用了结构体,输入文本读取数据以及库函数的调用来完成整个系统的设计,是繁多的数据操作

5、变得简单。该系统为联合运动会提供服务减少了不必要的人力物力的浪费,通过写一段程序实现简单运动会分数统计系统的设计来实现几个功能。该系统实现了以下几个功能: (1)根据指定的输入文件读取数据; (2)输入文件数据格式和文件数目由学生自行设计,主体体现学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名积分; (3)根据输入文件得到各学校总分, (4)可以按学校编号或名称、学校总分、男女团体总分排序; (5)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。(6)实现数据的增加、删除、修改,并将相关数据进行保存;(7)各操作结果能保存到文件,以便查询。通过这次

6、的课程设计,可以加深对库函数,以及结构体的了解,以及各个函数的功能以及实现,更进一步了解其原理。2、概要设计 本课程涉及主要采用了C+。C+语言是在C语言的基础上发展起来的,不仅继承了C语言的所有特点,而且引入了面向对象的程序设计方法。C+改进了程序涉及思路,将编程方式进化到面向对象进行程序设计这一新的思维过程。C+语言代表着对以往语言之精华的发展和提炼,既支持面向对象的程序设计,也支持结构化的程序设计。它修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析,提供了异常处理机制,简化了程序的出错处理,利用throw、try和catch关键字,提高了程序的可靠性和可读性。 函数重载允许相同

7、的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。提供了模板机制。模板包括类模板和函数模板两种,它们将数据类型作为参数。3、详细设计 本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计要求,主要包括三个数据表:3.1项目数据表: 运动会开始前必须详细制定本次运动会所需的参赛项目为接下来报名、场地的准备提供依据。本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。这也有利于以后项目情况的查询。typedef structint itemnum; /项目

8、编号int top; /取名次的数目int range5; /名次int mark5; /分数itemnode; /定义项目结点的类型3.2学校数据表: 本数据表储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分和学校总分。其中学校编号和名称是提前输入的,而其他三项内容将由系统进行自动统计。typedef structint schoolnum; /学校编号int score; /学校总分int mscore; /男团体总分int wscore; /女团体总分itemnode cm+w; /项目数组headnode;/定义头结点类型3.3单项数据表: 本数据表是对各

9、个学校的报名情况及成绩进行汇总,为了操作方便,本数据表只包含了学校的编号、项目的编号以及其在比赛中的成绩。typedef struct /*单项成绩*/ int schoolnum; /*学校编号*/int itemnum; /* 项目编号*/ int xmch; /*项目成绩*/danx; danx dxY; 这三个数据表之间由项目编号和学校编号进行相关联接,形成一个整体。4、调试问题4.1调试过程中出现的问题和处理方式: 为了使系统具有一点的容错性,当输入错误信息时应给出相应提示以正确输入数据,如:printf("要查询的项目编号:");scanf("%d&q

10、uot;,&s);if(s>m+w|s=0)printf("此次运动会不包括这个项目.nnn"); 想在每次查询结束想返回主菜单进行其它项时,应在main( )函数中调用其它函数时再调用main( )函数,如: switch(choice) case 1: inputinformation();writedata();readdata();main(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); 程序出现语法错误,发现是输入名次信息的地方忘带地址符

11、&,或是程序不完整,只写了一个大括号。如: printf("*名次:");4.2 调试分析的过程: (1).函数调用。函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。 (2).对结构体的不熟练。刚开始对结构体不太了解,使调试程序时费了我不少的时间。结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。结构体在我的实习中站了很大的比重,我也很重视它。通过与线性表,循环等的有机搭配,我完成了实习任务。 (3).循环的问题。这是我很苦恼,大量的循环语句的应用,分析。使我很头疼,循环是计算机语言中很重要的部分,

12、什么程序也离不开循环,这个问题的解决使我有了坚实的基础。对多层循环的应用也有了深刻的理解。5、 用户使用5.1主界面说明 当运行系统时,首先进入的是主界面,显示了整个系统所提供的用户选项,在最后一行有提示让您输入你所要选择的功能项。如下所示:5.2 显示用户选择界面说明键入1后,选择是管理用户,进入下面界面中:对于管理用户来说是要密码输入的,密码输入后进入下面管理用户可以操作的功能界面中:如果在主界面中键入2,用户选择中你选择学校用户,将直接进入学校用户的功能操作界面。5.3 管理用户信息界面说明 从管理用户功能操作界面选择第1个功能时,则会出现下面的界面:根据数据说明书进行数据的的输入,输入

13、你要修改的项目编号如:10001根据提示一次进行下列修改操作: 按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“2”进行项目添加操作,进入添加界面,根据提示一次进行添加操作: 按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“3”进行项目删除操作,进入删除界面,根据提示一次进行删除操作:按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“4”进行

14、查询操作,进入查询界面,根据你的需要选择,再根据提示一次进行查询操作: 选择1,则是根据学校的编号来查询学校某个项目的情况,根据提示完成查询操作,出现如下界面: 如果选择“2”则是根据项目编号来查询获得前三或前五的学校情况,根据提示完成本次查询操作,出现界面如下: 按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“5”进行排序操作,进入排序界面,根据你的需要选择,再根据提示一次进行排序操作:(下面的排序进过数据的改变后进行的排序) (1) 如果选择“1”是根据学校编号排序,查看学校总分,男女团体总分: (2)

15、如果选择的是“2”是根据学校总分排序: (3)如果选择的是“3”是根据男子团体总分排序: (4)如果选择的是“4”是根据女子团体总分排序:5.4 学校用户操作信息界面说明从主界面键入2选项,则直接进入学校用户信息操作界面: 如果选择“1”则进行的是查询操作,进入查询界面:选择1,则是根据学校的编号来查询学校某个项目的情况,根据提示完成查询操作,出现如下界面: 如果选择“2”则是根据项目编号来查询获得前三或前五的学校情况,根据提示完成本次查询操作,出现界面如下:按任意键回到学校用户功能操作界面,再进行其他的操作,如果按“2”,则进行查看操作,进入下列查看排名操作界面: (1)如果选择“1”是根据

16、学校编号排序,查看学校总分,男女团体总分: (2)如果选择的是“2”是根据学校总分排序: (3)如果选择的是“3”是根据男子团体总分排序: (4)如果选择的是“4”是根据女子团体总分排序:6、测试结果(1)首先运行文件运动会统计分数系统 图1 运动会统计系统首页面(2) 输入信息: 程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。输入1得到进入输入信息模块。 图2 输入信息(3)输出信息: 输入2进入输出信息模块,该模块分四项: 图3 输出模块 图4 按学校编号输出 图5 按学校总分输出 图6 按男团总分输出 图7 按女团总分输出(4)查询信息: 图8 信息查询模块 图9 按学

17、校编号查询 图10 按项目编号查询 图11 输入错误信息时给出提示 图12 输入2继续查询,输入0返回主菜单7、结论经过几天的忙碌,最终把课程设计任务完成了。要做好一件事,只能一步一步的去做,不可能一下子就完成。本来以为简单的几个功能,要实现以为很容易,首先还构思着,要用链表来做,觉得比较的容易,可是在真正实现起来才知道有些东西用链表实现有些困难,后面还是改用结构体和库函数写比较容易实现、有些库函数是我接触比较少的,为了了解它们我还花了一些时间,在编写的过程中还把题意理解错误,让自己困死在里面,最后还是和其他人一起讨论进一步深刻了解了题目的意思。在写函数的时候,由于对map容器不是很熟悉,以致

18、定义的map类型的变量出错,虽然程序中没有错误但是执行的结果有错误,经过改正,自己对其进一步的了解,是执行结果正确。要做好一个系统,一个严谨的思维是不可以或缺的,每一个联系都要考虑,每个细节都需要注意,每一种错误都要会解决。只有把每一种问题都解决了,才能做出一个完善的系统出来。每做一个项目都会让我学到很多的东西,这些东西是日常的学习中无法获得的。本次课程设计,使我对数据结构线性表,栈的设计方法、步骤、思路、有一定的了解与认识。它相当于实际设计工作的模拟。在课程设计过程中,基本能按照规定的程序进行,先针对表达式算法为背景,建立系统模型;收集、调查有关资料,其间与老师和同学进行几次讨论、修改,再讨

19、论、再修改,最后定案。通过此次课程设计,我了解了编写应用软件的一般步骤,获得了很多宝贵的经验。特别是怎么样通过理论与实践相结合,把书本上的内容应用到我们做的程序上去。怎样使各个子模块实施其的详细功能,特别是各个子模块之间的接口,一定要相当清晰,达到相互协调的作用其次,我熟悉了数据结构知识。学会了很多关于程序设计的经验和技巧,明白了程序的使用性和通用性是程序生存周期长短的关键,学会了调试程序的一般方法。知道应如何在困难重重中一步一步细心的发现问题,解决问题。本次课程设计检验了我的实践能力,感觉自己还有许多东西要学习,并不仅限于课本上的知识,实践才是真理,在学习中实践,实践中去学习。学习的路很长。

20、8、参考文献 1谭浩强.C程序设计(第三版). 北京: 清华大学出版社,20052严蔚敏著.吴伟民.数据结构(C语言版). 北京: 清华大学出版社,20073谭浩强著.C+程序设计. 北京:清华大学出版社,2004.69、源代码源代码:#include<stdio.h>#include<math.h>#include <conio.h>#include <process.h>#define n 2/学校数目 #define m 1/男子项目数目 #define w 1/女子项目数目#define null 0typedef struct int

21、itemnum; /项目编号 int top; /取名次的数目 int range5; /名次 int mark5; /分数itemnode; /定义项目结点的类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组headnode;/定义头结点类型headnode hn;/定义一个头结点数组void inputinformation() /输入信息,建立系统int i,j,k,s; for(i=0;i<n;i+) hi.

22、score=0; hi.mscore=0; hi.wscore=0; /初始化头结点 for(i=0;i<n;i+) printf("*学校编号:"); scanf("%d",&hi.schoolnum); /输入头结点信息 for(j=0;j<m+w;j+) printf("*项目编号:"); scanf("%d",&hi.cj.itemnum); printf("*取前3名or前5名:"); scanf("%d",&hi.cj.top)

23、; printf("*获得几个名次:"); scanf("%d",&k); /输入项目信息 for(s=0;s<5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数 for(s=0;s<k;s+) printf("*名次:"); scanf("%d",&hi.cj.ranges); /输入所获名次信息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1:

24、 hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi

25、.score+hi.cj.marks;/按取前三名还是取前五名分别记分 if(j<=m-1)hi.mscore=hi.mscore+hi.cj.marks;/是男子项目则记到男子分数里面去 else hi.wscore=hi.wscore+hi.cj.marks;/是女子项目则记到女子项目里面去 printf("n"); void output() /输出函数 int choice,i,j,k;int remembern;int sign; do printf("*1.按学校编号输出.*n"); printf("*2.按学校总分输出.*n

26、"); printf("*3.按男团总分输出.*n"); printf("*4.按女团总分输出.*n"); printf("nn* 请选择编号*nn:"); scanf("%d",&choice); switch(choice) case 1:for(i=0;i<n;i+) printf("nn*学校编号:%dn",hi.schoolnum); printf("*学校总分:%dn" ,hi.score); printf("*男团总分:%dn&

27、quot;,hi.mscore); printf("*女团总分: %dnnn",hi.wscore); /按编号顺序输出 break; case 2: for(i=0;i<n;i+)rememberi=i; for(i=0;i<n;i+) for(j=i+1;j<n;j+)if(hrememberi.score<hj.score) k=rememberi;rememberi=rememberj,rememberj=k; / 用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;i<n;i+) printf("nn*学校编号:%dn

28、",hrememberi.schoolnum); printf("*学校总分:%dn" ,hrememberi.score); printf("*男团总分:%dn",hrememberi.mscore); printf("*女团总分: %dnnn",hrememberi.wscore);/按所记下标顺序输出 /按学校总分输出 break; case 3: for(i=0;i<n;i+) rememberi=i; for(i=0;i<n;i+) for(j=i+1;j<n;j+)if(hrememberi.m

29、score<hj.mscore)k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;i<n;i+) printf("nn*学校编号:%dn",hrememberi.schoolnum); printf("*学校总分:%dn" ,hrememberi.score); printf("*男团总分:%dn",hrememberi.mscore); printf("*女团总分: %dnnn",hrememberi.wscore); /按男团总分输出 brea

30、k; case 4: for(i=0;i<n;i+) rememberi=i; for(i=0;i<n;i+) for(j=i+1;j<n;j+) if(hrememberi.wscore<hj.wscore) k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;i<n;i+) printf("nn*学校编号:%dn",hrememberi.schoolnum); printf("*学校总分:%dn" ,hrememberi.score); printf("*男

31、团总分:%dn",hrememberi.mscore); printf("*女团总分: %dnnn",hrememberi.wscore); break; /按女团总分输出 printf("请选择 2 继续,0 跳出n"); scanf("%d",&sign);while(sign=2); /循环执行输出语句void inquiry() /查询函数int choice;int i,j,k,s;printf("n*1:按学校编号查询n");printf("n*2:按项目编号查询n"

32、;);printf("nn*请选择查询方式:"); /提供两种查询方式 scanf("%d",&choice); switch(choice) case 1: do printf("要查询的学校编号:");scanf("%d",&i);if(i>n)printf("错误:这个学校没有参加此次运动会!nnn"); elseprintf("要查询的项目编号:"); scanf("%d",&j); if(j>m+w|j=0)

33、printf("此次运动会没有这个项目nnn");/学校编号超出范围,则输出警告 else printf("这个项目取前 %d名,该学校的成绩如下:n", h0.cj-1.top); for(k=0;k<5;k+) if(hi-1.cj-1.rangek!=0) printf("名次:%dn",hi-1.cj-1.rangek);/输出要查询学校项目的成绩 printf("请选择 2 继续 , 0 跳出n");scanf("%d",&s);printf("nnn"

34、;);while(s=2); /循环执行输出语句 break; case 2: do printf("要查询的项目编号:");scanf("%d",&s);if(s>m+w|s=0)printf("此次运动会不包括这个项目.nnn");/项目编号超出范围则输出警告elseprintf("该项目取前 %d名,取得名次的学校n",h0.cs-1.top);for(i=0; i<n;i+) for(j=0;j<5;j+) if(hi.cs-1.rangej!=0) printf("学校

35、编号:%d,名次:%dn",hi.schoolnum,hi.cs-1.rangej); /输出该项目取得名次学校的成绩 printf("nnn继续 2,跳出 0n");scanf("%d",&i);printf("nnn");while(i=2); break;void writedata() /把数据存储在文件中 FILE *report; int i; if(report=fopen("sportsdata.txt","w")=null) printf("不能打开

36、文件n"); exit(1); for(i=0;i<n;i+)fwrite(&hi,sizeof(headnode),1,report); fclose(report); /按头结点块写入 void readdata() /读出文件中数据的函数 FILE *report; int i,j,k,s; if(report=fopen("sportsdata.txt","r")=null) printf("file can not be openedn"); exit(1); for(i=0;i<n;i+) p

37、rintf("*学校编号:"); fread(&k,sizeof(int),1,report); printf("%dn",k); printf("*学校总分:"); fread(&k,sizeof(int),1,report); printf("%dn",k); printf("*男团总分:"); fread(&k,sizeof(int),1,report); printf("%dn",k); printf("*女团总分:"); fread(&k,si

温馨提示

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

评论

0/150

提交评论