1、2.1 功能需求本系统主要是运动会分数统计方案设计。运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。 2.2数据需求需要输入学校编号,项目编号,取得的名次,以及哪些名次。2.3 性能需求本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,就需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。3总体设计3.1系统设计方案本方案要求准备结构体数组、读写文件。还能把信息直接输入存储到文件中,读取文件中信息,从而得到结果。 (1) 菜单设计分为主函数菜单、比赛成绩
2、输出菜单、查询分数统计结果菜单、查询方式子菜单。 (2) 数据保存方式建立文件,数据保存在文件中。运动运分数统计程序(3) 数据类型采用结构体类型。(4) 存储结构采用结构体类型数组存储结构存储。(5) 算法设计输入比赛结果模块中运用了冒泡算法将输入的数据排序。3.2功能模块设计根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。该系统分为比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。比赛成绩输出模块有四个子模块,分别是:按学校编号输出模块、按学校总分输出模块、安南员总分输出模块和按女团总分输出模块;查询比赛成绩模块分为按学校编号查询模块河岸项目编号查询两个子模块。功能模块
3、图如图1所示。 图1功能模块图(1) 比赛成绩输入模块比赛成绩输入模块分为:创建信息部分,该部分需输入学校编号,项目编号,取得的名次,以及哪些名次;算法部分,得到排序结果。(2) 比赛成绩输出模块将以输入的数据按照输出比赛菜单的选择输出相应的数据。(3) 查询比赛成绩模块按照查询比赛结果菜单和其查询方式子菜单查询需要的数据。(4) 调用统计结果将输入的各学校运动会成绩排序输出。4详细设计4.1 数据结构定义建立结构体如下:typedef struct int itemnum; /项目编号 int top; /取名次的数目 int range5; /名次 int mark5; /分数itemno
4、de; /定义项目结点的类型 int schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组headnode;/定义头结点类型4.2比赛成绩输入模块 比赛成绩输入模块需要输入学校编号,项目编号,取得的名次,以及哪些名次。算法模块流程图如图2所示. 图2比赛成绩输入模块流程图 此模块定义变量i,j,k,s;先初始化储存分数的数组各元素,for循环实现各学校信息的输入,包括学校编号、项目编号、取前3名or前5名、获得几个名次,使用switch语句实现对输入的各个名次赋予
5、对应的分数。4.3比赛成绩输出比赛成绩输出模块实现按要求输出相应的数据。有以下输出选项:按学校编号输出、按学校总分输出、按男团总分输出、按女团总分输出。图3比赛成绩输出模块流程图模块定义了int choice,i,j,k;int remembern;int sign变量,dowhile包括switch语句,选择输出按学校编号输出、按学校总分输出、按男团总分输出、按女团总分输出相应的数据。for循环实现输出各个方式输出的每个数据。4.4查询比赛成绩模块查询比赛成绩模块包括:按学校编号查询,按项目编号查询。其算法原理相同,例举按学校项目编号查询模块。如图4所示。图4按项目编号查询模块流程图此模块定
6、义了int choice; int i,j,k,s; switch(choice)实现查询的两种方式的选择,当in时输出错误:这个学校没有参加此次运动会! 否则,输入项目编号,如果jm+w|j=0,输出此次运动会没有这个项目。否则,使用for循环输出相关数据,从而实现查询功能。4.5调用统计结果模块调用统计模块从文件中读取数据输出,流程图如图5所示。 图5调用统计结果模块流程图 此模块定义了FILE *report; for循环中套用for循环,for循环分别对学校编号、学校总分、男团总分、女团总分进行输出,在使用for循环对各学校的项目编号、所取名次数量、各个名次输出,实现对文件中的数据的调
7、用。5调试与测试5.1 调试调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。调试过程中出现的问题和处理方式:(1) 程序出现语法错误发现是输入名次信息的地方忘带地址符&。 添加取地址符。 printf(*名次:); scanf(%d,&hi.cj.ranges);(2)在输出模块不能将全部的学校信息输出,属于算法编写错误,正确的程序应该为:if(hrememberi.mscorehj.mscore) k=rememberi;rememberi=rememberj;rememberj=k;5.2 测试软件
8、测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。测试数据过程如下。(1) 输入功能测试输入数据1:1 1 1 3 3 1 2 3 2 3 2 2 3 2 1 3 2 1 3 2 3 3 1 2 3预期结果:学校编号:1
9、学校总分:15男团总分:10女团总分:5项目编号:所取名次数:3名次:2分数:177运行结果:按照要求输入的数据能够显示正确的结果。6结论课程设计顺利完成,任务书中所提出的要求全部实现不过这个程序还有些不够完善,例如:输入学校各舒适与现在宏定义中确定的,不能改变,有待进一步完善。结束语因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有困难。今后我必需扎实基础理论、认真思考,而且要践行我的承诺,一步一个脚印的走下去,才可以达到我们预期的彼岸!仔细回顾数据结构的学习过程,发现其实他也并不是想象中的那么难。只要肯去攀登!参考文献1 谭浩强.C语言程序设计(第三版).清华大学出
10、版社,20072 姜灵芝,余健.C语言课程设计案例精编.清华大学出版社,20083 吴伟民,严蔚敏.数据结构.清华大学出版社,20084 李廉治,姜文清,郭福顺.数据结构.大连理工大学出版社,1989年5 网上相关资料附录1用户手册(1)首先运行文件运动会统计分数7.exe:如图6所示:图6运行运动会分数统计界面(2) 输入信息:程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。输入1得到进入输入信息模块。如图7所示:图7输入学校运动会分数界面按回车键可得到学校的得分信息和按编号获得的所以信息。(3)输出信息输入2进入输出信息模块,该模块分四项: 如图8所示:图8输出运动会分数界
11、面1 按学校编号输出: 如图9所示:图9按学校编号输出分数界面2 按学校总分输出:如图10所示:图9按学校总分输出分数界面3 按男团总分输出:如图11所示:图11按学校编号男团总分输出分数界面4 按女团总分输出:如图12所示:图12按女团总分输出分数界面5 输入2返回输出信息模块,输入0返回主菜单。(4)查询信息:如图13所示:输入3进入信息查询模块:图13查询界面1 按学校编号查询:如图14所示:图14按学校编号查询界面2 按项目编号查询:如图15所示:图15按项目编号查询界面3 输入错误信息时给出提示:如图16、17所示:图16错误提示界面图17错误提示界面4 输入2继续查询,输入0返回主
12、菜单(5) 调用信息输入4时显示出所有的信息:如图18、19所示:图18调用信息界面图19调用信息界面附录2源程序#includemath.h#include process.h#define n 2/学校数目 #define m 1/男子项目数目 #define w 1/女子项目数目#define null 0headnode hn;/定义一个头结点数组void inputinformation() /输入信息,建立系统 for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; /初始化头结点 printf(*学校编号:hi.schoolnum
13、); /输入头结点信息 for(j=0;jm+w;j+) printf(*项目编号:hi.cj.itemnum);*取前3名or前5名:hi.cj.top);*获得几个名次:k); /输入项目信息 for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数k; printf( /输入所获名次信息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; case 2: hi.cj.marks=3; case 3: hi.c
14、j.marks=2; else hi.cj.marks=7; case 4: case 5: hi.cj.marks=1; hi.score=hi.score+hi.cj.marks;/按取前三名还是取前五名分别记分 if(j=m-1) hi.mscore=hi.mscore+hi.cj.marks;/是男子项目则记到男子分数里面去 hi.wscore=hi.wscore+hi.cj.marks;/是女子项目则记到女子项目里面去 nvoid output() /输出函数 int choice,i,j,k; int remembern; int sign; do*1.按学校编号输出.*n*2.按
15、学校总分输出.*n*3.按男团总分输出.*n*4.按女团总分输出.*nnn* 请选择编号*nn:choice); switch(choice) case 1: for(i=0;nn*学校编号:%dn,hi.schoolnum);*学校总分: ,hi.score);*男团总分:,hi.mscore);*女团总分: %dnnn,hi.wscore); /按编号顺序输出 break; rememberi=i; for(j=i+1; if(hrememberi.scorehj.score) k=rememberi;rememberi=rememberj,rememberj=k; / 用冒泡排序方法,用
16、辅助数组记住头结点下标 Printf(“nn*学校编号:%dn”,hrememberi.schoolnum); ,hrememberi.score);,hrememberi.mscore);,hrememberi.wscore);/按所记下标顺序输出 /按学校总分输出 rememberi=i; if(hrememberi.mscore k=rememberi;,hrememberi.schoolnum); /按男团总分输出 for(i=0; rememberi=i; for(j=i+1; if(hrememberi.wscoren)错误:nnn else 要查询的项目编号:j); if(jm+w|j=0)此次运动会没有这个项目nnn/学校编号超出范围,则输出警告 else printf(这个项目取前 %d名,该学校的成绩如下:, h0.cj-1.top); for(k=0;km+w|s=0)此次运动会不包括这个项目.nnn/项目编号超出范围则输出警告该项目取前 %d名,取得名次的学校n,h0.cs-1.top); for(i=0; i for(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1