文章目录
一、问题描述
二、基本要求与设计要求
1、基本要求
2、设计要求
三、问题分析和任务定义
四、逻辑设计
五、物理设计
六、程序编码
一、问题描述
参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1 ~m。比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。
二、基本要求与设计要求
1、基本要求
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;每个学校的每个参赛队伍只能参加一个赛事项目;
2)能统计各学校的总分;
3)可以按照学校编号或名称查询,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
2、设计要求
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
【测试数据】
要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保证程序的稳定。
【实现提示】
假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩。
三、问题分析和任务定义
1、分析:n个学校,m个赛事项目(3<m<=10),每个比赛有a支参赛队(a>=10),每个学校有b个队伍参赛(b<=6),n个学校有nb个参赛队伍,m个项目有am个参赛队伍,且每个学校的每个参赛队伍只能参加一个赛事项目;
获奖状态有四种:一等奖(first),二等奖(second),三等奖(third),没获奖(none)。
2、需要统计的数据: (1)每个学校的总分 ; (2)每种比赛项目的分数排名; (3)每个学校的获奖情况 ; (4)每种比赛项目的获奖情况。
3、需要完成的测试功能: (1)按照学校编号或名称查询学校的总分、各项目的总分排序输出;
(2)按学校编号查询学校某个项目的获奖情况; (3)可以按项目编号查询取得前三名的学校(注意并列的情况);
四、逻辑设计
1)变量的类型说明:
用School结构体
学校名称string型
学校编号string型
参赛的队伍数量int型
用结构体Team
队伍所在学校string型
获得的成绩int型
项目为string型
2)变量说明:
school[n]表示参加的学校数组(School类型);
project[m]表示比赛项目(string);
team[a]表示参加的队伍(Team类型)。
perpro_people[m]记录参加各项目的人数;
ranking[m]记录各项目的排名(Team);
all[n]记录学校的总分。
(a=各学校参赛队伍总和,每个项目>=10,每个学校<=6)
3)函数说明:
Prim()函数用来对处理的数据进行初始化;
用sort()函数进行排序;
Sum()函数进行学校求总分并输出;
Print1()对各项目排序输出;
Acquire()函数用来学校查询;
Print2()用于项目三种等奖的输出;
main()主函数用于界面设计和各种函数调用。
五、物理设计
伪代码:
结构体Team:string 项目,学校;int 成绩
结构体School:string 名字 编码;int 队伍数
School school[n];
string project[m];
int perpro_people[m];
Team team[a];
Prim(){初始化 school[n],project[m],team[a];计算出 perpro_people[m];}
sort(){对team[a]中的数据按项目排序成perpro_people[m]}
Sum(){按学校对c[k]中的数据进行求和再输出}
Print1(){对ranking[m]进行输出}
Acquire(){用来学校在ranking[m]中进行获奖情况查询}
Print2(){用ranking[m]对三种等奖进行输出}
main(){调用Prim();调用sort();界面设计;进行交互根据需要调用Sum(),Print1(),Print2(),Acquire();}