收藏 分享(赏)

运动会比赛计分系统 --1.doc

上传人:精品资料 文档编号:8365726 上传时间:2019-06-22 格式:DOC 页数:18 大小:209KB
下载 相关 举报
运动会比赛计分系统 --1.doc_第1页
第1页 / 共18页
运动会比赛计分系统 --1.doc_第2页
第2页 / 共18页
运动会比赛计分系统 --1.doc_第3页
第3页 / 共18页
运动会比赛计分系统 --1.doc_第4页
第4页 / 共18页
运动会比赛计分系统 --1.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、运动会比赛计分系统一、设计目的和任务要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数各项目名次取法有如下几种:取前 5 名:第一名得分 7 分,第二名得分 5,第三名得分 3,第四名得分 2,第五名得分1;取前 3 名:第一名得分 5,第二名得分 3,第三名得分 2;功能要求:(1)系统以菜单方式工作(2)由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。(3)所有信息记录完毕后,用户可以查询各个学校的比赛成绩(4)查看参赛学校信息和比赛项目信息等。二、总体设计编写目的:根据要求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面

2、文档总体设计说明书,为下一步进行详细设计做准备。2.1 总体设计 该系统可以按功能进行模块划分,其模块图如下:菜单模块计分模块输入模块输出模块文件读入模块查找模块结束系统模块图其中:*菜单选择模块完成用户命令的接收,此模块是运动会比赛计分系统的入口,用户所要进行的各种操作均需在此模块中进行选择而调用其他模块实现相应的功能;*信息输入模块完成学校、比赛项目(以及运动员的信息)输入功能,输入信息包括各参赛学校的编号、名称和每个学校在各比赛项目的编号、类型、名称、获奖次数、排名,以及(运动员姓名)等必要信息;*计分模块是对输入信息的处理,是一种必要的辅助模块;*输出模块包括:1 不输出信息,读入文件

3、中;2 输出信息,不读入文件。其中输出的信息有:学校编号、名称以及其所获奖项的项目编号、类型、名称、排名、男子总分、女子总分还有学校的总分等;*文件读入模块是为了满足客户需要,为了储存信息,方便使用;*信息查询模块完成对各信息的查询,查询时对应有两种选择以确定用户进行哪种查询。2.2 数据结构本系统中主要的数据结构就是以学校为结点建立一个链式存储结构,结点中包括学校编号、学校名称、男子项目总分、女子项目总分、学校总分;再定义一个新的结构体是以项目信息为基础,通过指针实现学校来对项目信息的调用,无论是计分,输出还是查找均以链式存储结构来实现。数据结构:学校信息:typedef struct sc

4、hoolint sclnum;/学校编号char sclname20;/学校名称sc am+w;int mscore;/男子团体总分int wscore;/女子团体总分int sum;/学校项目总分struct school *next;scl;scl *p,*q,*head,*g,*s,*u;/全局指针变量项目信息(及运动员信息):typedef struct scoint mark5;/分数int itmnum;/项目编号int itmkind;/项目类型char itmname20;/项目名称char name10;/运动员姓名int l; /获奖名次数int range5;/排名sc;

5、2.3 程序流程系统的执行应从输入信息功能开始,再执行菜单功能,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下:开始执行菜单模块选择输入学校编号、名称输入项目编号、名称、获奖名次数排名、运动员姓名选择按学校信息输出其获奖项目信息按学校排名输出学校和项目信息按项目信息输出各个获奖学校信息计分函数n0?文件读入函数结束编写目的:根据项目概要设计说明书,在项目概要设计的基础之上,对系统进行详细设计,以便下一步进行程序编码工作。三、详细设计:对于总设计时的系统模块功能图,各个功能模块的处理逻辑如下:1)菜单选择模块:调用 void me

6、nu() /菜单函数给出信息提示;绘制菜单(包含查询、退出) ;提示菜单选择并输入变量;根据输入变量的值调用不同的模块函数;以下是截取的菜单函数:void menu()system(“cls“);printf(“=运动会比赛计分系统=n“);printf(“* welcome *n“);printf(“* * 编制 *n“);printf(“* 1-键盘输入 *n“);printf(“* 2-文件读入 *n“);printf(“* 3-输出 *n“);printf(“* 4-查询 *n“);printf(“* 5-退出 *n“);printf(“*男子前五名依次得分:7 分 5 分 3 分 2

7、 分 1 分 *n“);printf(“*女子前三名依次得分:5 分 3 分 2 分 *n“);printf(“*n“);printf(“=n“);2) 信息输入模块:调用 scl *input() /信息输入函数在输入信息时要求按照文字提示进行输入,要输入的信息包括:参赛学校编号,名称以及比赛项目的编号,名称,获奖名次,排名, (运动员姓名) 。建立单链表,以链式存储结构来存放学校,项目等数据;以下是输入的内容与形式:scanf(“%d“,/输入学校编号scanf(“%s“,p-sclname);/输入学校名称for(x=0;xax.itmnum);/输入项目编号scanf(“%d“,/输入

8、项目类型 scanf(“%s“,p-ax.itmname);/输入项目名称scanf(“%d“,/输入获奖名次数for(i=0;iax.l;i+) scanf(“%d“,/输入运动员的名次scanf(“%s“,p-ax.name); /运动员姓名输入结束;在输入结束结束后要调用计分模块。3)计分模块:计分模块主要是依据输入信息的不同予以判断,并以不同的计分方式来计数将节点中的数据改变,并保存。if(k=3) /女子项目取前三名else /男子项目取前五名4)信息输出模块:根据用户的需要与选择,给出两种方式:1、存入文件,不输出;2、输出,不存入文件。printf(“*1-不输出,存入文件n“)

9、;printf(“*2-输出,不存入文件n“);scanf(“%d“,switch(co)Case 1:运用文件存储内容;break;Case 2:输出相应信息;break;5)文件读入模块:!此模块只是用来读入文件中的信息,无实际意义,只是满足题目要求,需谨慎使用。6)信息查询模块:和输出模块相似,同样有两种选择:1、按学校编号查询;2、按项目编号查询。printf(“按学校查找请输入 1,按项目查找请输入 2n“);scanf(“%d“,if(cha=1)printf(“请输入你要查询的学校编号:“);scanf(“%d“,while(q!=NULL) 按学校输出相应信息;if(cha=2

10、)printf(“请输入你要查询的项目编号:“);scanf(“%d“,while(q!=NULL) 按项目输出相应信息;四、调试与测试1.调试方法;上机运行各个模块,分别调试,最后综合运行;2.测试结果的讨论与分析;首先必须要对程序进行数据信息输入,对于所需不同的信息程序会自动提示用户进行相关操作,再输出相关信息,对于一些错误的操作可能会造成程序运行错误的后果,因此在输入信息的时候用户请务必细心操作。其数据与运行结果如下图:运行结果:输入 1输入:1huada1 111 taiqiu 3 1 zhao 2 qian 3 sun2 222 ticao 1 2 li2dongda1 111 ta

11、iqiu 2 4 zhou 5 wu2 222 ticao 2 1 feng 3 chen输出:输入:3输出:输入:2输出:输入:4输出:输入:1输出:输入;1输出:输入:4输出:输入:2输出:输入:2输出;(因为只定义了两个学校,所以结果只有两个学校的名称)输入:3输出:输出:输入:2输出:结束程序运行!五、源程序清单#include#include#define n 2 /参赛学校数#define m 1 /男子竞赛项目数#define w 1 /女子竞赛项目数typedef struct scoint mark5;/分数int itmnum;/项目编号int itmkind;/项目类型c

12、har itmname20;/项目名称char name10;/运动员姓名int l; /获奖名次数int range5;/排名sc;typedef struct schoolint sclnum;/学校编号char sclname20;/学校名称sc am+w;int mscore;/男子团体总分int wscore;/女子团体总分int sum;/学校项目总分struct school *next;scl;scl *p,*q,*head,*g,*s,*u;/全局指针变量/*/*菜 单 函 数*/void menu()system(“cls“);printf(“=运动会比赛计分系统=n“);

13、printf(“* welcome *n“);printf(“* * 编制 *n“);printf(“* 1-键盘输入 *n“);printf(“* 2-文件读入 *n“);printf(“* 3-输出 *n“);printf(“* 4-查询 *n“);printf(“* 5-退出 *n“);printf(“*男子前五名依次得分:7 分 5 分 3 分 2 分 1 分 *n“);printf(“*女子前三名依次得分:5 分 3 分 2 分 *n“);printf(“*n“);printf(“=n“);/*/*计 分 函 数*/void compute(int i,int x,int k)if(

14、k=3) /女子项目取前三名switch(p-ax.rangei) case 0: p-ax.markp-ax.rangei=0;break;case 1: p-ax.markp-ax.rangei=5;break;case 2: p-ax.markp-ax.rangei=3;break;case 3: p-ax.markp-ax.rangei=2;break;default: puts(“输入有误!“);exit(0);elseswitch(p-ax.rangei) /男子项目取前五名 case 0: p-ax.markp-ax.rangei=0;break;case 1: p-ax.mar

15、kp-ax.rangei=7;break;case 2: p-ax.markp-ax.rangei=5;break;case 3: p-ax.markp-ax.rangei=3;break;case 4: p-ax.markp-ax.rangei=2;break;case 5: p-ax.markp-ax.rangei=1;break;default: puts(“输入有误!“);break; /*输 入 函 数*/scl *input() /创建链表输入函数 int i,x,y=1,k;p=(scl*)malloc(sizeof(scl); /头结点的初始化printf(“n*按如下格式输入

16、(相同学校编号不重复输入)*n“);printf(“*项目类型有:111-男子 222-女子 *n“);printf(“*学校编号n*学校名称n*项目编号项目类型项目名称获得名次数名次姓名n“); p-mscore=0;p-wscore=0;scanf(“%d“,/输入学校编号scanf(“%s“,p-sclname);/输入学校名称for(x=0;xax.itmnum);/输入项目编号scanf(“%d“,/输入项目类型 scanf(“%s“,p-ax.itmname);/输入项目名称scanf(“%d“,/输入获奖名次数for(i=0;iax.l;i+) scanf(“%d“,/输入运动员

17、的名次scanf(“%s“,p-ax.name); /运动员姓名if(p-ax.itmkind=222) /计分方式判断k=3;else k=5;for(i=0;iax.l;i+)compute(i,x,k);if(p-ax.itmkind=222 ) /共两种项目: 111(男子项目) 222(女子项目)p-wscore+=p-ax.markp-ax.rangei;elsep-mscore+=p-ax.markp-ax.rangei;p-sum=p-mscore+p-wscore; /求学校总成绩head=p;q=p;/*/while(ymscore=0;p-wscore=0; scanf(

18、“%d“,scanf(“%s“,p-sclname);for(x=0;xax.itmnum);scanf(“%d“, scanf(“%s“,p-ax.itmname);scanf(“%d“,for(i=0;iax.l;i+) scanf(“%d“, scanf(“%s“,p-ax.name); if(p-ax.itmkind=222) k=3;else k=5;for(i=0;iax.l;i+)compute(i,x,k);if(p-ax.itmkind=222) p-wscore+=p-ax.markp-ax.rangei;elsep-mscore+=p-ax.markp-ax.rangei

19、;p-sum=p-mscore+p-wscore; q-next=p;q=p;p-next=NULL;menu();return head;/*输 出 函 数*/void output(scl *head) /输出成绩scl *q=head;int i,x,y=1;FILE *fp;int co;printf(“*1-不输出,存入文件n“);printf(“*2-输出,不存入文件n“);scanf(“%d“,switch(co)case 1: fp=fopen(“d:abc.txt“,“w+“);if(fp=NULL)printf(“无法打开文件!“);exit(0);while(q!=NUL

20、L) fprintf(fp,“%dn“,q-sclnum);for(x=0;xax.itmkind); fprintf(fp,“%dtn“,q-ax.l);for(i=0;iax.l;i+)fprintf(fp,“%dt“,q-ax.rangei); fprintf(fp,“n“);q=q-next;fclose(fp);break;case 2:while(q!=NULL) printf(“=n“);printf(“ 学校编号:t“);printf(“%dn“,q-sclnum);printf(“ 学校名称:t“);printf(“%sn“,q-sclname);for(x=0;xax.it

21、mnum);printf(“ 项目类型:t“); printf(“%dn“,q-ax.itmkind); printf(“ 项目名称:t“); printf(“%sn“,q-ax.itmname);printf(“ 有%d 个获奖名次:t“,q-ax.l);for(i=0;iax.l;i+) printf(“第%d 名t“,q-ax.rangei); printf(“nn“);printf(“男子团体项目总分:t%dn“,q-mscore);printf(“女子团体项目总分:t%dn“,q-wscore);printf(“ 学校项目总得分:t%dnn“,q-sum);printf(“n“);q

22、=q-next;break;default :puts(“输入有误!“);exit(0);/*文 件 读 入 函 数*/scl *read()FILE *fpa=NULL;int i,x,y=1,k;p=(scl *)malloc(sizeof(scl);p-mscore=0;p-wscore=0;fpa=fopen(“d:abc.txt“,“r+“);/打开文件if(fpa=NULL)puts(“对不起,无法打开文件!“);exit(0);fscanf(fpa,“%d“,for(x=0;xax.itmnum,for(i=0;iax.l;i+)fscanf(fpa,“%d“,if(p-ax.i

23、tmkind=222)k=3;elsek=5; for(i=0;iax.l;i+)compute(i,x,k);if(p-ax.itmkind=222)p-wscore+=p-ax.markp-ax.rangei;elsep-mscore+=p-ax.markp-ax.rangei;p-sum=p-mscore+p-wscore;head=p;q=p;while(ymscore=0;p-wscore=0;fscanf(fpa,“%d“, for(x=0;xax.itmnum,fscanf(fpa,“%d“,for(i=0;iax.l;i+)fscanf(fpa,“%d“,if(p-ax.itm

24、kind=222)k=3;elsek=5; for(i=0;iax.l;i+)compute(i,x,k);if(p-ax.itmkind=222)p-wscore+=p-ax.markp-ax.rangei;elsep-mscore+=p-ax.markp-ax.rangei;p-sum=p-wscore+p-mscore;q-next=p;q=p;p-next=NULL;fclose(fpa);/关闭文件return head;/*查 找 函 数*/void find(scl *head)scl *q=head;int num,x,i,cha,xiang,flag=0;printf(“按学

25、校查找请输入 1,按项目查找请输入 2n“);scanf(“%d“,if(cha=1)printf(“请输入你要查询的学校编号:“);scanf(“%d“,while(q!=NULL) if(num=q-sclnum)printf(“=n“);printf(“学校编号n“);printf(“%dn“,q-sclnum);for(x=0;xax.itmnum);printf(“项目类型n“); printf(“%dtn“,q-ax.itmkind); printf(“有%d 个获奖名次:t“,q-ax.l);for(i=0;iax.l;i+) printf(“第%d 名t“,q-ax.range

26、i); printf(“nn“);printf(“男子团体项目总分:%dn“,q-mscore);printf(“女子团体项目总分:%dn“,q-wscore);printf(“ 学校项目总得分:%dnn“,q-sum);printf(“n“);flag=1;printf(“n“);q=q-next;if(flag=0)puts(“对不起!没有您要查询的对象“);else if(cha=2)printf(“请输入你要查询的项目编号:“);scanf(“%d“,while(q!=NULL) for(x=0;xax.itmnumfor(i=0;isclnum,q-sclname);flag=1;b

27、reak;elseif(xiang=q-ax.itmnumfor(i=0;isclnum,q-sclname);flag=1;break;q=q-next;if(flag=0)puts(“对不起!没有您要查询的对象“);/*主 函 数*/void main() /主函数 1int ch;menu();while(1)printf(“请选择t“);scanf(“%d“,switch(ch)case 1: menu();g=input(); break;case 2: menu();g=read(); break;case 3: menu();output(g); break;case 4: me

28、nu();find(g); break;case 5: menu();puts(“*谢谢您的使用!“);exit(0); default: menu();puts(“对不起!输入有误“);exit(0);六、总结对于这次实验设计,我们小组学会将所学的数据结构理论知识运用到解决实际生活问题的能力,尽管在设计当中我们遇到许多的陌生问题,但通过到图书馆以及请教同学(我们主要的参考文献是严蔚敏的数据结构和谭浩强的C 程序设计 )最终得以解决。设计当中遇到的问题大致如下:结构体的定义与使用,函数的编写与调用,链表的定义和使用,以及文件的使用,这些知识虽然学过,但一直未运用到实践中去,这次设计实验将我们所学的知识得到综合性的调用,我们每个人对所学知识的不足之处也得到纠正。我们的设计是运动会比赛计分系统,在解决这项问题的时候我们采用模块化设计的思想,把整类问题划分成许多小问题去解决,这样每个人会有各自的分工,团队的合作性,以及积极性都得到提高。设计报告的编写也是对我们个人能力的一种考验,学会从理论上去分析验证问题。程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行,这次设计更让我们深刻体会到这一点。我们不仅编程能力得到提高,而且学会掌握通过分析问题,并用专业知识去解决问题。从分析问题到算法编写,中间的过程只有实践才会真正明白。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报