目录
一、问题描述和基本要求
【问题描述】
参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。
【基本要求】
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
【设计要求】
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,可以完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
【测试数据】
要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保证程序的稳定。
【实现提示】
假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩。
二、问题分析和任务定义
【问题分析】
因为需要数据存入文件支持随时查询,所以在一开始录入比赛结果信息是就应将其写入指定文件中,便于以后的查看。
对比赛结果的计算,输出等操作,都可以在录入数据,文件写好后,再对其进行读取,获取数据,进行操作。
【功能分析】
(1)能够随时添加相关信息;
(2)照学校编号或名称查询,学校的总分输出;
(3)按学校编号查询学校某个项目的获奖情况;
(4)可以按项目编号查询取得前三名的学校(注意并列的情况);
(5)可以查询任意项目的总分;
三、逻辑设计
【数据结构选择】
定义一个School类,作为每个学校的数据结构,内含学校ID,学校名称,学校参赛队伍个数,总分等字段;
定义一个Team类,作为每支队伍的数据结构,内含所属学校ID,队伍名称,参加项目和所得分数等字段;
定义一个Event类,作为每个项目的数据结构,内含一个存储Team类对象的集合表示参加该项目的队伍以及项目id和名称;
定义一个类,作为功能实现的主类。其内容有,一个存储所有参赛项目的集合events、一个存储所有参赛学校的集合 schools,这里不设置队伍存储集合的原因是所有的队伍在创建项目时已在项目类中有专门的存储集合teams;
【主要算法函数】
a.项目添加函数:用于添加相应的项目;
b.学校添加函数:用于添加参赛学校;
c.队伍添加函数:用于添加参赛队伍,此函数为主要添加函数,若在添加过程中发现不存在当前所要添加的项目或学校,则弹出信息窗口提示错误,若学校参赛队伍达到上限,同上;
d.学校总分计算函数:计算某学校的总分;
e.以学校总分排名的函数:调用d函数,并按总分进行排序,排序结果仍储存在schools集合中;
f.某学校的项目总分排名函数:返回一个res的字典集合,内含项目id和项目总分;
g.单个项目获奖情况函数:对项目内的队伍按分数进行排名,索引为0,1,2即为前三;
h.学校各项目获奖情况函数
四、物理结构
1.存储结构
(1)定义结构体school类和team类,并在school类中存放team类数组
(2)定义结构体project类表示项目
2.伪代码
(1)添加比赛信息;
(2)对sch[n].sum降序输出;
(3)按编号查询学校总分;
(4)按项目编号查询取得前三名的学校;
(5)计算项目总分;
(6)按学校编号查询学校某个项目的获奖情况;