搜索
您的当前位置:首页运动会分数统计

运动会分数统计

时间:2022-01-19 来源:乌哈旅游


运动会分数统计

【问题描述】

参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。 项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分; 取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2; 哪些取前五名或前三名由学生自己设定。〔m<=20,n<=20〕 【任务要求】 功能要求:

1).可以输入各个项目的前三名或前五名的成绩; 2).能统计各学校总分,

3).可以按学校编号、学校总分、男女团体总分排序输出;

4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

规定:输入数据形式和范围:20以内的整数〔如果做得更好可以输入学校的名称,运动项目的名称〕

输出形式:有中文提示,各学校分数为整形

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

〔数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决〕 请在最后的上交资料中指明你用到的存储结构;

测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。 进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 【测试数据】

自行设定,注意边界等特殊情况。 */

1 / 22

目 录

一、需求分析 ............................................................................................................ 3

二、概要设计 ............................................................................................................ 1

三、详细设计 ............................................................................................................ 3

四、程序调试与实现 ................................................................................................ 7

五、用户使用说明 .....................................................................错误!未定义书签。

六、附录 .....................................................................................错误!未定义书签。

2 / 22

一、需求分析

(一) 问题分析

该系统所应包含的信息为:学校编号、学校名称、运动项目编号、

运动项目名称、学校总分、男团总分和女团总分等。 (二) 系统功能分析

1.根据基本数据输入相关的信息 2.根据要求输出所需信息 3.查找所需信息 4.结束运行

二、概要设计

根据运动会分数统计系统问题的分析和设计要求,可以将该系统分为四大模

块:输入信息模块、输入信息模块、查询信息模块和退出系统模块 〔1〕输入信息模块实现信息的输入和存档

〔2〕输出信息是根据要求实现相关信息的排序输出 〔3〕查询信息根据要求查询信息 〔4〕退出系统结束系统

运动会分数统计系统 输入信息模块 输出信息模块 查询信息模块 退出系统模块 3 / 22

三、详细设计

〔一〕主控模块设计{ main〔〕;}

选择操 作

case1 case2 case3 case4

输出信息 查询信息 输入信息

default

输入有误

〔二〕输出信息模块设计{ design1( );}

开始 退出系统 输入 学校编号 学校名称 项目编号 4 / 22

名次 项目名称

是否循环 Yes No

数据存入文件 统计总分 yes

5 / 22

是否循环 结束

〔三〕输出信息模块设计{ design2( );}

开始 排序 选择 按学校编号排序 按学校总分排序 按男团总分排序 按女团总分排序 Yes 输出

是否继续 结束

6 / 22

〔四〕查询模块{ design3〔〕;}

开始 选择

按按

学项

校目

编编

号号

查查

询 询 Yes 是否继续 是否继续 Yes

No No 输出

结束

7 / 22

四、程序调试与实现

学校编号 学校名称 项目编号1名次 项目编号2名次 项目名称 〔3名〕跳远 1 2 3 北理工 吉大 北师大 1 2 3 〔5名〕100m 2/3 1/5 4 项目编号3名次 〔3名〕跳高 0 1 3 1、全部合法数据

8 / 22

9 / 22

10 / 22

11 / 22

12 / 22

2、整体非法数据

3、局部非法数据

五、用户使用说明

1. 首先,请根据要求输入所需数据。

2. 系统自动设置学校个数:3个;男子项目:2个;女子项目:1个。如果需要更改其个数,只需将#define n 3(学校数目)、#define m 2〔男子项目数目〕、#define

w 1〔女子项目数目〕中的个数进行更改,即可解决问题。

3.输入的数据存入名叫num.txt的文档中,如有需要可以查询。

13 / 22

六、附录

源代码

#include #include #include #include #define n 3//学校数目

#define m 2//男子项目数目 #define w 1//女子项目数目 #define null 0 void design1(); void design2(); void design3(); int choice,sign; typedef struct { int itemnum; //项目编号 char name;//项目名称 int top; //取名次的数目 int range[5]; //名次 int mark[5]; //分数

}itemnode; //定义项目结点的类型 typedef struct { int schoolnum; //学校编号 char schoolname[20];//学校名字 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分 itemnode c[m+w]; //项目数组 }headnode ;//定义头结点类型

headnode h[n];//定义一个头结点数组 void main() //主函数 { printf(\"============欢送使用运动会分数统计系统===========\\n\"); printf(\"***************** 1.输入信息*********************\\n\"); printf(\"***************** 2.输出信息*********************\\n\"); printf(\"***************** 3.查询信息*********************\\n\"); printf(\"***************** 4.退出系统*********************\\n\"); printf(\"=================================================\\n\"); printf(\"\\n\");

14 / 22

printf(\"请选择要实现步骤的编号:\"); scanf(\"%d\ printf(\"\\n\"); switch(choice) { case 1: //输入信息 design1(); break; case 2: //输出信息 design2(); break; case 3: //查询信息 design3(); break; case 4://退出系统 printf(\"使用结束\\n\"); break; default://输入有误 printf(\"输入有误,请选择一个正确的编号\\n\"); main(); break; } }

void design1() //输入信息 { FILE *fp1; int i,j,k,s; for(i=0;i15 / 22

scanf(\"%s\ printf(\" 取前几名(5/3)\"); scanf(\"%d\

printf(\" 取得几个名次:\"); scanf(\"%d\输入项目信息 for(s=0;s<5;s++) h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数 for(s=0;s16 / 22

case 2: h[i].c[j].mark[s]=5; break; case 3: h[i].c[j].mark[s]=3; break; case 4: h[i].c[j].mark[s]=2; break; case 5: h[i].c[j].mark[s]=1; break; } } else { printf(\"输入有误,请重新输入!\\n\"); design1(); } h[i].score=h[i].score+h[i].c[j].mark[s]; //记录总分 if(j<=m-1) //记录男团总分 h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; else //记录女团总分 h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; } printf(\"\\n\"); } } fp1=fopen(\"num.txt\ fprintf(fp1,\"************************运动会分数统计系统**********************\\n\"); fprintf(fp1,\"学校编号 学校名字 学校总分 男团总分 女团总分 \\n\"); fprintf(fp1,\"****************************************************************\\n\"); for(i=0;i17 / 22

} fclose(fp1); main(); }

void design2() //输出函数 { int i,j,k; int remember[n]; int sign; do { printf(\"*******************1.按学校编号输出.\\n\"); printf(\"*******************2.按学校总分输出.\\n\"); printf(\"*******************3.按男团总分输出.\\n\"); printf(\"*******************4.按女团总分输出.\\n\"); printf(\"\\n\"); printf(\"请选择编号:\"); scanf(\"%d\ switch(choice) { case 1: //按学校编号输出 for(i=0;i18 / 22

} for(i=0;icase 3: //按男团总分输出 for(i=0;icase 4: //按女团总分输出 for(i=0;i19 / 22

} for(i=0;ivoid design3() //查询函数 { int i,j,k,s; printf(\"*******************1.按学校编号查询.\\n\"); printf(\"*******************2:按项目编号查询.\\n\"); printf(\"\\n\"); printf(\"请选择查询方式:\"); scanf(\"%d\ printf(\"\\n\"); switch(choice) { case 1: { do { printf(\"请输入查询的学校编号:\"); scanf(\"%d\ printf(\"\\n\"); if(i>n) printf(\"错误:这个学校没有参加此次运动会!\\n\"); else { printf(\" 项目编号:\"); scanf(\"%d\ printf(\"\\n\"); printf(\"\\n\");

20 / 22

if(j>m+w||j==0) printf(\"此次运动会没有这个项目\\n\\n\\n\"); //学校编号超出范围,则输出警告 else { printf(\" 该项目取前%d名,学校编号为%d的成绩如下:\\n\h[0].c[j-1].top,i); for(k=0;k<5;k++) if(h[i-1].c[j-1].range[k]!=0) { printf(\" 名次:%d\\n\输出要查询学校项目的成绩 } } } printf(\"\\n\"); printf(\"请选择(1.继续;2.跳出)\\n\"); scanf(\"%d\ }while(sign==1); break; } case 2: { do { printf(\"请输入查询的项目编号:\"); scanf(\"%d\ printf(\"\\n\"); if(s>m+w||s==0) //项目编号超出范围则输出警告 printf(\"此次运动会不包括这个项目.\\n\\n\\n\"); else //输出该项目取得名次学校的成绩 { printf(\"该项目取前%d名,取得名次的学校\\n\ for(i=0; i21 / 22

} } main(); }

22 / 22

因篇幅问题不能全部显示,请点此查看更多更全内容

Top