目录
一、问题描述和基本要求
1.问题描述
参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。
2.基本要求
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
3.设计要求
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,可以完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
4.测试数据
要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保证程序的稳定。
5.实现提示
假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩。
二、问题分析和任务定义
项目要求设计一个统计程序最终产生各种成绩单和得分报表,能将数据存入文件且能随时查询。
注意在实现过程中3<赛事项目数量<=10,学校名称长度不超过20个字符。
设计的函数需要实现的功能有:
1.输入学校编号或名称,学校的总分、各项目的总分排序输出;
2.输入学校编号可以查询学校某个项目的获奖情况;
3.能统计各学校的总分;
4.输入项目编号可以查询取得前三名的学校。
三、逻辑设计
问题中涉及到的操作对象相应的数据类型有int、double、string(或char)。
1.定义主程序
按照项目要求在主函数中合理引用类中的函数,要求能够输入一系列的合法数据,能输出正确正确的运行结果,定义的main函数能有效地进行程序测试。
2.类的说明
类 | 说明 |
Team类 | int schoolNum; //参赛队的学校编号 double score; //参赛队的成绩 |
School类 | char schoolName; //学校名称 char projectName; //项目名称 char reward; //获奖情况 |
3.部分函数说明
类 | 所含参数或说明 |
Team();School() | int n, int p, double s,string r |
void setschoolNum(int n) | 设置参赛队的学校编号 |
void setprojectNum(int p) | 设置参赛队的项目编号 |
void setScore(double score) | 设置参赛队的成绩 |
void setSchoolName(char sn) | 设置参赛队的学校名称 |
void setProjectName(char pn) | 设置参赛队的项目名称 |
void setReward(char r) | 设置参赛队的获奖情况 |
char getReward() | 获取获奖情况 |
四、物理设计
1.存储结构
顺序存储:
顺序存储方法是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。
2.算法框架
类:
Team类:string 项目名称,string 学校名称,double 成绩,string 获奖情况,get/set;
School类:string 学校名称,string 项目名称,int 参赛队伍数,get/set;
数组:
schools[n];
teams[i];
函数:
Team(){初始化数据};
School(){初始化数据};
querySum(String str){在teams[i]中查询本校的队伍,并加队伍的总分加起来并输出};
queryScore(String str){从teams[i]挑选出各个项目的队伍,分别计算其总分,最后降序输出};
queryPrize(String str){根据项目查找获奖队伍,若不在,则未获奖};
main(){进行测试}
3.运行环境
Visual Studio 2019