本次课程设计旨在开发一款赛事管理系统,用于管理中国大学生计算机设计大赛江苏省组委会的省级赛事。该系统旨在实现赛务相关的数据管理和信息服务,解决以下问题:
参赛队伍基本信息管理:包括参赛队编号、参赛作品名称、参赛学校、赛事类别、参赛者和指导老师。系统需要支持增加、删除和修改参赛队伍信息。
参赛队伍查询:从team.txt文件中读取参赛队伍的基本信息,并通过基于二叉排序树的查找功能实现按参赛队编号查找参赛队伍信息。如果查找成功,输出对应赛事类别的基本信息和平均查找长度(ASL);否则输出"查找失败!"。
参赛团队查询:提供按参赛学校或赛事类别查询参赛团队的功能。根据输入的参赛学校名称或赛事类别,输出该学校参赛的所有团队的基本信息,并按赛事类别有序输出。选择合适的排序算法(选择排序、插入排序、希尔排序、归并排序、堆排序)并给出选择该算法的原因。
决赛叫号系统:设计一个决赛叫号系统,模拟省赛现场的参赛队进场情况。参赛队根据赛事组织文件中的赛事类别分配到9个决赛室,按顺序叫号进场,比赛结束后才能进入下一参赛队。
校园导游程序:提供赛地的校园导游程序,为参赛者提供路径导航的查询服务。以某校长山校区为例,提供不少于10个目标地的导航查询。参赛者可以查询任意两个目的地之间的最短路径,并查询校园地图中任意目标地的相关信息。
为了实现上述功能,我们将系统分为以下五个模块:
参赛队伍管理模块:
数据结构:链表或数组用于参赛队伍信息的管理,每个节点或元素代表一个参赛队伍。
功能:增加、删除和修改参赛队伍的信息。
//参赛队伍类
public class ParticipatingTeams {
String id;//队伍编号
String name;//作品名称
String school;//参赛学校
String category;//参赛类别
String competitor;//参赛者
String teacher;//指导老师
public ParticipatingTeams(String id, String name, String school, String category, String competitor, String teacher) {
this.id = id;
this.name = name;
this.school = school;
this.category = category;
this.competitor = competitor;
this.teacher = teacher;
}
}
使用ArrayList< >储存参赛队伍的信息
ArrayList<ParticipatingTeams> PList= new ArrayList<>();
PList.add(newParticipatingTeams(message[0],message[1],message[2],message[3],
message[4],message[5]));
参赛队伍查询模块:
数据结构:基于二叉排序树(Binary Search Tree)。
功能:从文件中读取参赛队伍的基本信息,并构建二叉排序树。实现按参赛队编号查找参赛队伍信息的功能。如果查找成功,输出对应赛事类别的基本信息和平均查找长度(ASL);否则输出"查找失败!"。
//节点类
public class Node {
String value;
int level;
Node left;
Node right;
public Node(String value){
this.value=value;
this.level=1;
}
public void add(Node node){
if(node==null)
return;
if (node.value.compareTo(this.value)<0)
if(this.left==null)
this.left=node;
else
this.left.add(node);
else{
if (this.right==null)
this.right=node;
else
this.right.add(node);
}
}
}
//二叉排序树
public class BSortTree {
Node root;
int [ ]Asl=new int[200];
public void add(Node node){
if(root==null)
root=node;
else
root.add(node);
}
参赛团队查询模块:
数据结构:根据选择的排序算法,可以使用数组或链表进行参赛团队信息的管理。
功能:按参赛学校查询参赛团队的功能。按赛事类别查询参赛团队的功能。输出该学校参赛的所有团队的基本信息,并按赛事类别有序输出。
//插入排序
for (int i = 1; i < idList.length; i++) {
for (int j = i; j >0 ; j--) {
if (idList[j].compareTo(idList[j-1])<0){
String temp =idList[j-1];
idList[j-1]=idList[j];
idList[j]=temp;
}
}
}
决赛叫号系统模块:
数据结构:队列(Queue)用于参赛队伍的进场顺序管理。
功能:按赛事类别将参赛队伍分配到9个决赛室。按顺序叫号进场。等待比赛结束后,才能进入下一参赛队。
//决赛室类
public class FinalsRoom {
String[] id=new String[100];
String name;
int number;
public FinalsRoom(String name) {
this.name = name;
this.number = 0;
}
}
校园导游程序模块:
数据结构:图(Graph)表示校园地图,每个目的地节点之间的路径权重代表距离。
功能:提供路径导航的查询服务。查询任意两个目的地之间的最短路径。查询校园地图中任意目标地的相关信息。
通过以上模块的设计和实现,我们将能够构建一款赛事管理系统,满足江苏省组委会对省级赛事管理的需求。
//建筑物类
public class Building {
int id;
String name;
public Building(int id, String name) {
this.id = id;
this.name = name;
}
}
//图类
public class MGraph {
int vertex;
int edge;
public MGraph(int vertex, int edge) {
this.vertex = vertex;
this.edge = edge;
}
}