运动会分数系统
1 题目与要求
参加运动会有 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 功能要求:
1). 可以输入各个项目的前三名或前五名的成绩;
2). 能统计各学校总分,
3). 可以按学校编号、学校总分、男女团体总分排序输出;
4). 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前
五名的学校。
规定:输入数据形式和范围:20 以内的整数(如果做得更好可以输入学校的
名称,运动项目的名称)
输出形式:有英文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相
关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数
据要存储在数据文件中。(数据文件的数据读写方法等相关内容在 c 语言程序设计
的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用 1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2 概要设计
2.1 算法设计
本方案要求准备结构体数组、读写文件。还能把信息直接输入存储到文件中,
读取文件中信息,从而得到结果。
(1) 菜单设计
分为主函数菜单、比赛成绩输出菜单、查询分数统计结果菜单、查询方式子
菜单。
- 1 -
(2) 数据保存方式
建立文件,数据保存在文件中。运动运分数统计程序
(3) 数据类型
采用结构体类型。
(4) 存储结构
采用结构体类型数组存储结构存储。
(5) 算法设计
输入比赛结果模块中运用了冒泡算法将输入的数据排序。
2.2 功能模块设计
根据分析整个系统主要划分为 4 个功能模块,分别执行要求中的功能。该系
统分为比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。比赛成绩
输出模块有四个子模块,分别是:按学校编号输出模块、按学校总分输出模块、
安南员总分输出模块和按女团总分输出模块;查询比赛成绩模块分为按学校编号
查询模块河岸项目编号查询两个子模块。
(1) 比赛成绩输入模块
比赛成绩输入模块分为:创建信息部分,该部分需输入学校编号,项目
编号,取得的名次,以及哪些名次;算法部分,得到排序结果。
(2) 比赛成绩输出模块
将以输入的数据按照输出比赛菜单的选择输出相应的数据。
(3) 查询比赛成绩模块
按照查询比赛结果菜单和其查询方式子菜单查询需要的数据。
(4) 调用统计结果
将输入的各学校运动会成绩排序输出。
2.3 模块图
功能模块图如图 1 所示。
- 2 -
图 1 功能模块图
3 详细设计
内容:分模块简述其功能;模块中使用的各变量的类型及作用,包括声明数
据类型(如结构体);设计过程;并列出该模块(函数)的代码。
本系统主要包括三个数据表:
○1 项目数据表:运动会开始前必须详细制定本次运动会所需的参赛项目为接下来
报名、场地的准备提供依据。本数据表根据要求设计存储每个项目的编号、名称、
要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名
称及要取的名次,而各名次对应的学校编号将由系统自动统计。这也有利于以后
项目情况的查询。
typedef struct
{
int itemnum; //项目编号
- 3 -
int top;
//取名次的数目
int range[5]; //名次
int mark[5];
//分数
}itemnode;
//定义项目结点的类型
○2 学校数据表:本数据表储存了各个参赛学校的总体情况,包括学校的编号、名
称、男子团体总分、女子团体总分和学校总分。其中学校编号和名称是提前输入
的,而其他三项内容将由系统进行自动统计。
typedef struct
{
int schoolnum;
//学校编号
int score;
//学校总分
int mscore;
//男团体总分
int wscore;
//女团体总分
itemnode c[m+w];
//项目数组
}headnode;//定义头结点类型
○3 单项数据表:本数据表是对各个学校的报名情况及成绩进行汇总,为了操作方
便,本数据表只包含了学校的编号、项目的编号以及其在比赛中的成绩。
typedef struct
/*单项成绩*/
{
int schoolnum;
/*学校编号*/
int itemnum;
/* 项目编号*/
int xmch;
/*项目成绩*/
}danx;
danx dx[Y];
这三个数据表之间由项目编号和学校编号进行相关联接,形成一个整
1)函数原形:void input(struct student stu[ ],int n)
体。
- 4 -
2)功 能:利用 for 循环语句和 scanf、gets、getchar 函数完成对结构数组的输
入,存放 n 个学生的信息(学号、姓名、性别、4 门成绩)。
4 调试分析
(1)首先运行文件运动会统计分数 7.exe:如图 2 所示:
图 2 运行运动会分数统计界面
(2) 输入信息:程序首先赋初值,定义学校的个数为 2,男生项目为 1,
女生项目为 1。输入 1 得到进入输入信息模块。如图 3 所示:
图 3 输入学校运动会分数界面
(3)输出信息
输入 2 进入输出信息模块,该模块分四项: 如图 4 所示:
- 5 -
图 4 输出运动会分数界面
1 按学校编号输出:
如图 5 所示:
图 5 按学校编号输出分数界面
2 按学校总分输出:如图 6 所示:
- 6 -
图 6 按学校总分输出分数界面
3 按男团总分输出:如图 7 所示:
图 7 按学校编号男团总分输出分数界面
4 按女团总分输出:如图 8 所示:
图 8 按女团总分输出分数界面
5 输入 2 返回输出信息模块,输入 0 返回主菜单。
(4)查询信息:如图 9 所示:
输入 3 进入信息查询模块:
- 7 -
1 按学校编号查询:如图 10 所示:
图 9 查询界面
2 按项目编号查询:如图 11 所示:
图 10 按学校编号查询界面
3 输入错误信息时给出提示:如图 12、13 所示:
图 11 按项目编号查询界面
- 8 -