运动会分数统计
【问题描述】
参加运动会有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 #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;i 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;s 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;i } 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;i } for(i=0;i } for(i=0;i 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; i } } main(); } 22 / 22 因篇幅问题不能全部显示,请点此查看更多更全内容