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

下载本文档

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

文档简介

1、目录1 实习目的12 问题描述13 需求分析14 概要设计25 详细设计55.1数据结构定义55.2各个函数分析56 调试与测试196.1调试196.2 测试197 使用说明228 总结239 参考文献2310 附录23运动会分数统计系统的设计与实现1 实习目的通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。2 问题描述 参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取

2、前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)实现如下功能:(1)可以输入各个项目的前三名或前五名的成绩;(2)能统计各学校总分;(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;(5)数据存入文件并能随时查询。3 需求分析3.1功能需求本系统主要是运动会分数统计方案设计。运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。3.2 数据

3、需求需要输入学校编号,项目编号,取得的名次,以及哪些名次。3.3 性能需求本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,就需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。4 概要设计4.1系统设计方案本方案要求准备结构体数组、读写文件。还能把信息直接输入存储到文件中,读取文件中信息,从而得到结果。(1) 菜单设计分为主函数菜单、比赛成绩输出菜单、查询分数统计结果菜单、查询方式子菜单。(2) 数据保存方式建立文件,数据保存在文件中。运动运分数统计程序(3) 数据类型采用结构体类型。(4) 存储结构采用结构体类型数组存储结构存储。(5

4、) 算法设计输入比赛结果模块中运用了冒泡算法将输入的数据排序。4.2 数据库设计系统用到的抽象数据类型定义:typedef struct int itemnum; /项目编号 int top; /取名次的数目 int range5; /名次 int mark5; /分数itemnode; /定义项目结点的类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组headnode;/定义头结点类型基本操作:(1)主函数:void m

5、ain();(2)比赛成绩输入:void inputinformation();(3)比赛成绩输出:void output();(4)查询比赛成绩:void inquiry() ;(5)将数据存储在文件中:void writedata();(6)调用统计结果void readdata();4.3功能模块设计根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。该系统分为比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。比赛成绩输出模块有四个子模块,分别是:按学校编号输出模块、按学校总分输出模块、安南员总分输出模块和按女团总分输出模块;查询比赛成绩模块分为按学校编号查询模块河岸项目

6、编号查询两个子模块。功能模块图如图1所示。 图1功能模块图(1) 比赛成绩输入模块比赛成绩输入模块分为:创建信息部分,该部分需输入学校编号,项目编号,取得的名次,以及哪些名次;算法部分,得到排序结果。 (2) 比赛成绩输出模块将以输入的数据按照输出比赛菜单的选择输出相应的数据。(3) 查询比赛成绩模块按照查询比赛结果菜单和其查询方式子菜单查询需要的数据。(4) 调用统计结果将输入的各学校运动会成绩排序输出。5 详细设计根据题目要求及本次课程设计的目的,采用结构体来存储每组数据,定义运动会类和调用库函数进行相应的操作。现把相应的设计思路及各个函数解析如下。5.1数据结构定义建立结构体如下:typ

7、edef struct int itemnum; /项目编号 int top; /取名次的数目 int range5; /名次 int mark5; /分数itemnode; /定义项目结点的类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组headnode;/定义头结点类型5.2 各个函数分析5.2.1 主函数函数原型:void main()main()函数主要是整个系统的控制端,主要功能是控制整个程序的运行。从主函数开

8、始调用各相关函数来达到相应的功能。void main() int choice;printf(=欢迎使用=n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息*n);printf(*2.输出信息*n);printf(*3.查询信息*n); printf(*4.调用信息*n); printf(*5.退出系统*nnn);printf(=nn);printf(*请选择要实现步骤的编号:nn);scanf(%d,&choice);switch(choice) case 1: inputinformation();writedata();readdata();main

9、(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); case 5: exit(0); default: exit(0); 5.2.2 比赛成绩输入模块比赛成绩输入模块需要输入学校编号,项目编号,取得的名次,以及哪些名次 。void inputinformation() /输入信息,建立系统int i,j,k,s; for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; /初始化头结点 for(i=0;in;i+) printf(*学校

10、编号:); scanf(%d,&hi.schoolnum); /输入头结点信息 for(j=0;jm+w;j+) printf(*项目编号:); scanf(%d,&hi.cj.itemnum); printf(*取前3名or前5名:); scanf(%d,&hi.cj.top); printf(*获得几个名次:); scanf(%d,&k); /输入项目信息 for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数 for(s=0;sk;s+) printf(*名次:); scanf(%d,&hi.cj.ranges); /输入所获名次信

11、息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: 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; br

12、eak; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.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); 此模块定义变量i,j,k,s;先初始化储存分数的数组各元素,for循环实现各学校信息的输入,包括学校编号、项目编号、取前3名or前

13、5名、获得几个名次,使用switch语句实现对输入的各个名次赋予对应的分数。5.2.3 比赛成绩输出比赛成绩输出模块实现按要求输出相应的数据。有以下输出选项:按学校编号输出、按学校总分输出、按男团总分输出、按女团总分输出。void output() /输出函数 int choice,i,j,k;int remembern;int sign; do printf(*1.按学校编号输出.*n); printf(*2.按学校总分输出.*n); printf(*3.按男团总分输出.*n); printf(*4.按女团总分输出.*n); printf(nn* 请选择编号*nn:); scanf(%d,&

14、choice); switch(choice) case 1:for(i=0;in;i+) printf(nn*学校编号:%dn,hi.schoolnum); printf(*学校总分:%dn ,hi.score); printf(*男团总分:%dn,hi.mscore); printf(*女团总分: %dnnn,hi.wscore); /按编号顺序输出 break;case 2: for(i=0;in;i+)rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+)if(hrememberi.scorehj.score) k=rememberi;remember

15、i=rememberj;rememberj=k; / 用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;in;i+) printf(“nn*学校编号:%dn”,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore);/按所记下标顺序输出 /按学校总分输出 break; case 3: for(i=0;in;i+) rememberi=i; for(i=0;in;i+) fo

16、r(j=i+1;jn;j+)if(hrememberi.mscorehj.mscore)k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in;i+) printf(nn*学校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore); /按男团总分输出 break;case 4: for(i=0;in;i+) re

17、memberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.wscorehj.wscore) k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in)printf(错误:这个学校没有参加此次运动会!nnn); elseprintf(要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告 else printf(这个项目取前 %d名,该学校的成绩如下:n, h0.cj-1.top); fo

18、r(k=0;km+w|s=0)printf(此次运动会不包括这个项目.nnn);/项目编号超出范围则输出警告elseprintf(该项目取前 %d名,取得名次的学校n,h0.cs-1.top);for(i=0; in;i+) for(j=0;jn)printf(错误:这个学校没有参加此次运动会!nnn); elseprintf(要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告 else printf(这个项目取前 %d名,该学校的成绩如下:n, h0.cj-1.top); for(k=0;

19、km+w|s=0)printf(此次运动会不包括这个项目.nnn);/项目编号超出范围则输出警告elseprintf(该项目取前 %d名,取得名次的学校n,h0.cs-1.top);for(i=0; in;i+) for(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf(学校编号:%d,名次:%dn,hi.schoolnum,hi.cs-1.rangej); /输出该项目取得名次学校的成绩 printf(nnn继续 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2); break;void writedata() /把数据存储

20、在文件中 file *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(不能打开文件n); exit(1); for(i=0;in时输出错误:这个学校没有参加此次运动会! 否则,输入项目编号,如果jm+w|j=0,输出此次运动会没有这个项目。否则,使用for循环输出相关数据,从而实现查询功能。5.2.5 将数据存储在文件中void writedata() /把数据存储在文件中 file *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(不能打开文

21、件n); exit(1); for(i=0;in;i+)fwrite(&hi,sizeof(headnode),1,report); fclose(report); /按头结点块写入 5.2.6 调用统计结果模块调用统计模块从文件中读取数据输出。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;in;i+) printf(*学校编号:); fread(&k,

22、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,sizeof(int),1,report); printf(%dn,k); printf(nnn); getch(); for(j=0;jm+w;j+) printf(*项目编号:); fread(&k,sizeof(in

23、t),1,report); printf(%dn,k); printf(*所取名次数量:); fread(&k,sizeof(int),1,report); printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*名次:), printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*分数:), printf(%dn,k); printf(nnn); getch(); fclose(report)

24、; /关闭文件 /按照读一个数据就输出一个数据的方式显示数据内容 此模块定义了file *report; int i,j,k,s; for循环中套用for循环,for循环分别对学校编号、学校总分、男团总分、女团总分进行输出,在使用for循环对各学校的项目编号、所取名次数量、各个名次输出,实现对文件中的数据的调用。6 调试与测试6.1 调试调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。调试过程中出现的问题和处理方式:(1) 程序出现语法错误发现是输入名次信息的地方忘带地址符&。 添加取地址符。 prin

25、tf(*名次:); scanf(%d,&hi.cj.ranges);(2)在输出模块不能将全部的学校信息输出,属于算法编写错误,正确的程序应该为:if(hrememberi.mscorehj.mscore)k=rememberi;rememberi=rememberj;rememberj=k;6.2 测试软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结

26、果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。测试数据过程如下。(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学校总分:15男团总分:10女团总分:5项目编号:1所取名次数:3名次:1名次:2名次:3分数:5分数:3分数:2项目编号:2所取名次数:3名次:2名次:3分数:3分数:2学校编号:2学校总分:17男团总分:7女团总分:10项目编号:1所取名次数:3名次:1名次:3分数:5分数:2项目编号:2所取名次数:3名次:1名次:2名次:3分数:5分数:3分数:2运行结果:学校编号:1学校总分:15男团总分:10女团总分:5项目编号:1所取名次数:3名次:1名次:2名次:3分数:5分数:3分数:2项目编号:2所取名次数:3名次:2名次:3分数:3分数:2学校编号:2学校总分:17男团总分:7女团总分:10项目编号:1所取名次数:3名次:1名次:3分数:5分数:2项目编号:2所取名次

温馨提示

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

评论

0/150

提交评论