本次课程设计要求协助中国大学生计算机设计大赛江苏省组委会,设计一款赛事管理系统,实现赛务相关的数据管理及信息服务。
一.问题定义
(1)从team.txt中读取参赛队伍的基本信息,能够管理各参赛队的基本信息(包含参赛队编号,参赛作品名称,参赛学校,赛事类别,参赛者,指导老师),赛事类别共11项(参见大赛官网jsjds.blcu.edu.cn);包括增加、删除、修改参赛队伍的信息。
(2)实现基于二叉排序树的查找。根据提示输入参赛队编号,若查找成功,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和指导老师信息),同时,输出查找成功时的平均查找长度ASL;否则,输出“查找失败!”。请输出ASL(成功)的计算表达式和结果值。
(3)能够提供按参赛学校查询参赛团队,根据提示输入参赛学校名称,若查找成功,输出该学校参赛的所有团队的基本信息,输出的参赛团队需有序输出(按参赛队编号)。(排序算法可从选择排序、插入排序、希尔排序、归并排序、堆排序中任意选择,并为选择算法的原因做出说明。)
(4)为省赛现场设计一个决赛叫号系统。所有参赛队按赛事组织文件中的赛事类别分到9个决赛室,决赛室按顺序叫号,被叫号参赛队进场,比赛结束后,下一参赛队才能进赛场。请模拟决赛叫号系统,演示省赛现场各决赛室的参赛队进场情况。(模拟时,各参赛队进场比赛时间可设为0.5秒)
(5)赛事系统为参赛者提供赛地的校园导游程序。为参赛者提供各种路径导航的查询服务。以我校长山校区提供比赛场地为例,(请为参赛者提供不少于10个目标地的导航。可为参赛者提供校园地图中任意目标地(建筑物)相关信息的查询;提供图中任意目标地(建筑物)的问路查询,即查询任意两个目的地(建筑物)之间的一条最短的简单路径。
二.问题分析
1.能从txt文件中读取参赛队伍信息,能实现增加删除修改参赛队伍信息
创建Team类,定义队伍属性,创建TeamManagement类包含队伍管理和控制功能,包含addTeam,deleteTeam,updateTeam等方法
2.使用二叉排序树查找,二叉排序树的特点是每个节点的左子树的所有节点值都小于该节点的值,而右子树的所有节点值都大于该节点的值,符合队伍编号的大小关系。构建二叉树,合理利用递归调用函数查找正确位置。
3.能根据参赛学校查询参赛信息,若查找成功则输出参赛信息,参赛团队信息根据参赛队编号输出,这里我选择插入排序算法,插入排序算法易于操作。
4.决赛叫号系统:首先定义了一个决赛室类,包括属性(赛事类别、当前类别下的队伍、叫号队伍的队列)和方法(给每个队伍分配入场的号码,和叫号的方法),其次定义一个叫号模拟类,使用队列(Queue)来表示每个决赛室的参赛队伍队列,保证先进先出的顺序
5.校园导游系统:准备校园地图和建筑物的相关信息,包括建筑物名称、位置坐标等。设计一个路径导航功能,使参赛者能够查询从一个建筑物到另一个建筑物的最短路径。提供建筑物相关信息的查询服务:提示用户输入要查询的建筑物名称。根据用户输入的建筑物名称,在校园地图中查找相应的建筑物信息。输出建筑物的相关信息,如名称、位置坐标等。提供任意两个目标地的导航查询:提示用户输入起始建筑物和目标建筑物的名称。利用合适的算法(如最短路径算法,如Dijkstra算法)计算起始建筑物到目标建筑物的最短路径。
输出最短路径上的建筑物信息,以指导参赛者从起始建筑物到目标建筑物的导航。
三.概要设计
创建Team类
定义了参赛队编号,参赛作品,参赛学校,赛事类别,参赛者,指导老师的属性,并构造相应的get set函数
/** * 存储队伍的基本信息 */ public class Team { private String teamId;//参赛队伍编号 private String teamProject;//参赛作品 private String teamSchool; //参赛队伍学校 private String catagory;//参赛类别 private String participant;//参赛者 private String instructor;//指导老师 //构造函数 public Team(String teamId, String teamProject, String teamSchool, String catagory, String participant, String instructor) { this.teamId = teamId; this.teamProject = teamProject; this.teamSchool = teamSchool; this.catagory = catagory; this.participant = participant; this.instructor = instructor; } //建立get set函数 public String getTeamId() { return teamId; } public void setTeamId(String teamId) { this.teamId = teamId; } public String getTeamProject() { return teamProject; } public void setTeamProject(String teamProject) { this.teamProject = teamProject; } public String getTeamSchool() { return teamSchool; } public void setTeamSchool(String teamSchool) { this.teamSchool = teamSchool; } public String getCatagory() { return catagory; } public void setCatagory(String catagory) { this.catagory = catagory; } public String getParticipant() { return participant; } public void setParticipant(String participant) { this.participant = participant; } public String getInstructor() { return instructor; } public void setInstructor(String instructor) { this.instructor = instructor; } public String toString(){ return "参赛信息:" + "参赛队编号:"+ teamId+'\n'+"参赛队伍学校:"+teamSchool+'\n'+"参赛类别:"+catagory+'\n'+"参赛作品:"+teamProject+'\n'+"参赛者:"+participant+'\n'+"指导老师:"+instructor+'\n'; } }
以下是校园图及其无向带权图: