版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、运动会比赛计分系统一、设计目的和任务要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数各项目名次取法有如下几种:取前5名:第一名得分7分,第二名得分5,第三名得分3,第四名得分2,第五名得分1;取前3名:第一名得分5,第二名得分3,第三名得分2;功能要求:(1)系统以菜单方式工作(2)由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。(3)所有信息记录完毕后,用户可以查询各个学校的比赛成绩(4)查看参赛学校信息和比赛项目信息等。二、总体设计编写目的:根据要求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面文档总体设计说明书,为下
2、一步进行详细设计做准备。2.1总体设计 该系统可以按功能进行模块划分,其模块图如下:菜单模块 计分模块 输入模块输出模块文件读入模块查找模块结束 系统模块图 其中:*菜单选择模块完成用户命令的接收,此模块是运动会比赛计分系统的入口,用户所要进行的各种操作均需在此模块中进行选择而调用其他模块实现相应的功能;*信息输入模块完成学校、比赛项目(以及运动员的信息)输入功能,输入信息包括各参赛学校的编号、名称和每个学校在各比赛项目的编号、类型、名称、获奖次数、排名,以及(运动员姓名)等必要信息;*计分模块是对输入信息的处理,是一种必要的辅助模块;*输出模块包括:1不输出信息,读入文件中;2输出信息,不读
3、入文件。其中输出的信息有:学校编号、名称以及其所获奖项的项目编号、类型、名称、排名、男子总分、女子总分还有学校的总分等;*文件读入模块是为了满足客户需要,为了储存信息,方便使用;*信息查询模块完成对各信息的查询,查询时对应有两种选择以确定用户进行哪种查询。2.2 数据结构本系统中主要的数据结构就是以学校为结点建立一个链式存储结构,结点中包括学校编号、学校名称、男子项目总分、女子项目总分、学校总分;再定义一个新的结构体是以项目信息为基础,通过指针实现学校来对项目信息的调用,无论是计分,输出还是查找均以链式存储结构来实现。数据结构:学校信息:typedef struct school int sc
4、lnum;/学校编号 char sclname20;/学校名称 sc am+w; int mscore;/男子团体总分 int wscore;/女子团体总分 int sum;/学校项目总分 struct school *next;scl; scl *p,*q,*head,*g,*s,*u;/全局指针变量项目信息(及运动员信息):typedef struct sco int mark5;/分数 int itmnum;/项目编号 int itmkind;/项目类型 char itmname20;/项目名称 char name10;/运动员姓名 int l; /获奖名次数 int range5;/排
5、名sc;2.3程序流程系统的执行应从输入信息功能开始,再执行菜单功能,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下:开始执行菜单模块选择输入学校编号、名称输入项目编号、名称、获奖名次数排名、运动员姓名选择按学校信息输出其获奖项目信息按学校排名输出学校和项目信息按项目信息输出各个获奖学校信息计分函数n0?文件读入函数结束编写目的:根据项目概要设计说明书,在项目概要设计的基础之上,对系统进行详细设计,以便下一步进行程序编码工作。三、详细设计:对于总设计时的系统模块功能图,各个功能模块的处理逻辑如下:1)菜单选择模块:调用void
6、menu() /菜单函数给出信息提示;绘制菜单(包含查询、退出);提示菜单选择并输入变量;根据输入变量的值调用不同的模块函数;以下是截取的菜单函数: 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分 1分*n); p
7、rintf(*女子前三名依次得分:5分 3分 2分 *n); printf(*n); printf(=n); 2) 信息输入模块:调用scl *input() /信息输入函数在输入信息时要求按照文字提示进行输入,要输入的信息包括:参赛学校编号,名称以及比赛项目的编号,名称,获奖名次,排名,(运动员姓名)。建立单链表,以链式存储结构来存放学校,项目等数据;以下是输入的内容与形式:scanf(%d,&p-sclnum);/输入学校编号 scanf(%s,p-sclname);/输入学校名称 for(x=0;xax.itmnum);/输入项目编号 scanf(%d,&p-ax.itmkind);/输
8、入项目类型 scanf(%s,p-ax.itmname);/输入项目名称 scanf(%d,&p-ax.l);/输入获奖名次数 for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei);/输入运动员的名次scanf(%s,); /运动员姓名 输入结束;在输入结束结束后要调用计分模块。3)计分模块:计分模块主要是依据输入信息的不同予以判断,并以不同的计分方式来计数将节点中的数据改变,并保存。 if(k=3) /女子项目取前三名else /男子项目取前五名4)信息输出模块:根据用户的需要与选择,给出两种方式:1、存入文件,不输出;2、输出,不存入文件。pr
9、intf(*1-不输出,存入文件n); printf(*2-输出,不存入文件n); scanf(%d,&co); switch(co) Case 1:运用文件存储内容;break; Case 2:输出相应信息;break;5)文件读入模块: !此模块只是用来读入文件中的信息,无实际意义,只是满足题目要求,需谨慎使用。6)信息查询模块:和输出模块相似,同样有两种选择:1、按学校编号查询;2、按项目编号查询。printf(按学校查找请输入1,按项目查找请输入2n); scanf(%d,&cha); if(cha=1) printf(请输入你要查询的学校编号:); scanf(%d,&num);wh
10、ile(q!=NULL) 按学校输出相应信息;if(cha=2)printf(请输入你要查询的项目编号:); scanf(%d,&xiang);while(q!=NULL) 按项目输出相应信息;四、调试与测试1.调试方法;上机运行各个模块,分别调试,最后综合运行;2.测试结果的讨论与分析;首先必须要对程序进行数据信息输入,对于所需不同的信息程序会自动提示用户进行相关操作,再输出相关信息,对于一些错误的操作可能会造成程序运行错误的后果,因此在输入信息的时候用户请务必细心操作。其数据与运行结果如下图:运行结果:输入1输入:1huada1 111 taiqiu 3 1 zhao 2 qian 3 s
11、un2 222 ticao 1 2 li2dongda1 111 taiqiu 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 sco int mark5;/
12、分数 int itmnum;/项目编号 int itmkind;/项目类型 char itmname20;/项目名称 char name10;/运动员姓名 int l; /获奖名次数 int range5;/排名sc;typedef struct school int sclnum;/学校编号 char sclname20;/学校名称 sc am+w; int mscore;/男子团体总分 int wscore;/女子团体总分 int sum;/学校项目总分 struct school *next;scl; scl *p,*q,*head,*g,*s,*u;/全局指针变量 /*/ /*菜 单
13、函 数*/ 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分 1分*n); printf(*女子前三名依次得分:5分 3分 2分 *n); printf(*n); printf(=n); /*/*计 分 函 数*/
14、void compute(int i,int x,int k) if(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); else switch(p-ax.rangei) /男子项目取前五名 case 0: p-ax.
15、markp-ax.rangei=0;break; case 1: p-ax.markp-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*)
16、malloc(sizeof(scl); /头结点的初始化 printf(n*按如下格式输入(相同学校编号不重复输入)*n); printf(*项目类型有:111-男子 222-女子 *n); printf(*学校编号n*学校名称n*项目编号项目类型项目名称获得名次数名次姓名n); p-mscore=0;p-wscore=0; scanf(%d,&p-sclnum);/输入学校编号 scanf(%s,p-sclname);/输入学校名称 for(x=0;xax.itmnum);/输入项目编号 scanf(%d,&p-ax.itmkind);/输入项目类型 scanf(%s,p-ax.itmnam
17、e);/输入项目名称 scanf(%d,&p-ax.l);/输入获奖名次数 for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei);/输入运动员的名次scanf(%s,); /运动员姓名 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; else p-mscore+=p-ax.mark
18、p-ax.rangei; p-sum=p-mscore+p-wscore; /求学校总成绩 head=p; q=p; /*/ while(ymscore=0;p-wscore=0; scanf(%d,&p-sclnum); scanf(%s,p-sclname); for(x=0;xax.itmnum); scanf(%d,&p-ax.itmkind); scanf(%s,p-ax.itmname); scanf(%d,&p-ax.l); for(i=0;iax.l;i+) scanf(%d,&p-ax.rangei); scanf(%s,); if(p-ax.itmkind
19、=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; else p-mscore+=p-ax.markp-ax.rangei; 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
20、co; printf(*1-不输出,存入文件n); printf(*2-输出,不存入文件n); scanf(%d,&co); switch(co) case 1: fp=fopen(d:abc.txt,w+); if(fp=NULL)printf(无法打开文件!);exit(0); while(q!=NULL) 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
21、; 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.itmnum); 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
22、,q-ax.rangei); printf(nn); printf(男子团体项目总分:t%dn,q-mscore); printf(女子团体项目总分:t%dn,q-wscore); printf( 学校项目总得分:t%dnn,q-sum); printf(n); q=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(
23、d:abc.txt,r+);/打开文件 if(fpa=NULL) puts(对不起,无法打开文件!);exit(0); fscanf(fpa,%d,&p-sclnum); for(x=0;xax.itmnum,&p-ax.itmkind,&p-ax.l); for(i=0;iax.l;i+) fscanf(fpa,%d,&p-ax.rangei); 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; e
24、lse p-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,&p-sclnum); for(x=0;xax.itmnum,&p-ax.itmkind); fscanf(fpa,%d,&p-ax.l); for(i=0;iax.l;i+) fscanf(fpa,%d,&p-ax.rangei); if(p-ax.itmkind=222) k=3; else k=5; for(i=0;iax.l;i+) compute(i,x
25、,k); if(p-ax.itmkind=222) p-wscore+=p-ax.markp-ax.rangei; else p-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(按学校查找请输入1,按项目查找请输入2n); scanf(%d,&cha);
26、if(cha=1) printf(请输入你要查询的学校编号:); scanf(%d,&num); 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.rangei); printf(nn); printf(男子团体项目总分:%dn,q-m
27、score); 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,&xiang); while(q!=NULL) for(x=0;xax.itmnum&q-ax.itmkind=111) printf(获得前5名的学校为:n); for(i=0;isclnum,q-sclname); flag=1; break; else if(xiang=q-ax.it
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储物流人员聘用合同模板
- 陶瓷槽探施工合同
- 建筑幕墙设备安全文明施工协议
- 建材供应预付款保证协议
- 供应链管理服务合同管理纲要
- 供应链管理会计岗位招聘合同
- 交通运输顾问合同模板
- 2025年度消防工程分包合同样本(包含消防设备维修)3篇
- 2025年度国有企业人才招聘与培养合同样本3篇
- 舞台灯光简单租赁合同
- 楚雄师范学院-18级-葡萄酒专业-葡萄酒工艺学复习题及答案
- 高速公路机电工程标准化施工管理质量控制
- 助产士的述职报告
- 医保缴费问题排查整改报告
- 2024年黑龙江高中学业水平合格性考试数学试卷试题(含答案详解)
- 2024年度医院财务部述职报告课件
- 浙江省杭州市余杭区2023-2024学年五年级上学期1月期末道德与法治试题
- 工程管理培训教案
- agv无人运输车维修保养合同
- 2023-2024学年二年级数学上册期末乐考非纸笔测试题(一)苏教版
- 学生信息技术应用实践
评论
0/150
提交评论