赛事管理系统

问题定义

本次课程设计要求协助中国大学生计算机设计大赛江苏省组委会,设计一款赛事管理系统,实现赛务相关的数据管理及信息服务,该系统能够为省级赛事管理解决以下问题:

(1)能够管理各参赛队的基本信息(包含参赛队编号,参赛作品名称,参赛学校,赛事类别,参赛者,指导老师),赛事类别共11项(参见大赛官网jsjds.blcu.edu.cn);包括增加、删除、修改参赛队伍的信息。

(2)从team.txt中读取参赛队伍的基本信息,实现基于二叉排序树的查找。根据提示输入参赛队编号,若查找成功,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和指导老师信息),同时,输出查找成功时的平均查找长度ASL;否则,输出“查找失败!”。
(3)能够提供按参赛学校查询参赛团队(或根据赛事类别查询参赛团队),即,根据提示输入参赛学校名称(赛事类别),若查找成功,输出该学校参赛的(该赛事类别的)所有团队的基本信息,输出的参赛团队按赛事类别有序输出。(排序算法可从选择排序、插入排序、希尔排序、归并排序、堆排序中任意选择,并为选择算法的原因做出说明。)

(4)为省赛现场设计一个决赛叫号系统。所有参赛队按赛事组织文件中的赛事类别分到9个决赛室,决赛室按顺序叫号,被叫号参赛队进场,比赛结束后,下一参赛队才能进赛场。请模拟决赛叫号系统,演示省赛现场各决赛室的参赛队进场情况。(模拟时,要能直观展示叫号顺序与进场秩序一致)

(5)赛事系统为参赛者提供赛地的校园导游程序,为参赛者提供各种路径导航的查询服务。以我校长山校区提供比赛场地为例,(请为参赛者提供不少于10个目标地的导航。可为参赛者提供校园地图中任意目标地(建筑物)相关信息的查询;提供任意两个目标地(建筑物)的导航查询,即查询任意两个目的地(建筑物)之间的一条最短路径。

问题分析

一.管理参赛队伍的基本信息

1)定义参赛队的数据结构:   

  • 创建一个类或结构体来表示参赛队的基本信息。
  • 定义属性,包括参赛队编号、参赛作品名称、参赛学校、赛事类别、参赛者和指导老师等。

2)数据存储和管理:

  • 设计一个适合存储参赛队信息的数据结构,如数组。
  • 初始化一个空的数据结构来存储参赛队信息。
  • 实现操作函数来增加、删除和修改参赛队的信息。

3)用户界面:

  • 设计一个用户界面,使用户可以与系统进行交互。
  • 提供选项让用户选择要执行的操作,如增加、删除和修改参赛队的信息。
  • 根据用户选择,调用相应的操作函数来执行相应的操作

4)增加参赛队信息:

  • 接收用户输入的参赛队信息,包括参赛队编号、参赛作品名称、参赛学校、赛事类别、参赛者和指导老师等。
  • 创建一个新的参赛队对象,并将输入的信息赋值给相应的属性。
  • 将新的参赛队对象添加到数据结构中。

5)删除参赛队信息:

  • 接收用户输入的参赛队编号或其他标识符。
  • 在数据结构中查找对应的参赛队对象。
  • 如果找到匹配的参赛队对象,将其从数据结构中删除。

6)修改参赛队信息:

  • 接收用户输入的参赛队编号或其他标识符。
  • 在数据结构中查找对应的参赛队对象。
  • 如果找到匹配的参赛队对象,提供用户选择要修改的属性。
  • 接收用户输入的新值,并将其赋值给相应的属性。

 二.从team.txt中读取参赛队伍的基本信息,实现基于二叉排序树的查找
1)读取参赛队伍信息:

  • 从文本文件(如team.txt)中读取参赛队伍的基本信息。
  • 解析文本文件,将每个参赛队伍的信息提取出来,并创建相应的参赛队对象。
  • 将参赛队伍对象存储在数据结构中,以便后续查找操作使用。

2)二叉排序树的构建:

  • 使用参赛队编号作为关键字,构建二叉排序树。
  • 将参赛队伍对象按照参赛队编号的大小顺序插入二叉排序树中。

3)查找参赛队伍信息:

  • 提示用户输入要查找的参赛队编号。
  • 在二叉排序树中进行查找操作,根据用户输入的参赛队编号找到相应的参赛队伍对象。
  • 如果找到匹配的参赛队伍对象,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和指导老师信息)。
  • 计算查找成功时的平均查找长度(ASL)并输出。
  • 如果未找到匹配的参赛队伍对象,输出"查找失败!"的提示信息。

4)数据处理和分析:

  • 对数据进行适当的处理和分析,如统计参赛队伍的数量、赛事类别的数量等。
  • 可以利用数据结构和算法知识,进行其他有关数据的操作和分析,以满足具体需求。

三.能够提供按参赛学校查询参赛团队(或根据赛事类别查询参赛团队) 
1)根据参赛学校查询参赛团队:

  • 提示用户输入要查询的参赛学校名称。
  • 遍历存储参赛队伍信息的数据结构,找到与输入的参赛学校名称匹配的参赛队伍对象。
  • 输出该学校参赛的所有团队的基本信息,并按照赛事类别进行排序输出。

2)根据赛事类别查询参赛团队:

  • 提示用户输入要查询的赛事类别。
  • 遍历存储参赛队伍信息的数据结构,找到与输入的赛事类别匹配的参赛队伍对象。
  • 输出该赛事类别的所有参赛团队的基本信息,并按照指定的排序算法对参赛团队进行排序输出(可选择选择排序、插入排序、希尔排序、归并排序、堆排序等)。
  • 在选择排序算法时,对选择的原因进行说明。

3)排序算法选择和排序输出:

  • 选择合适的排序算法来对参赛团队进行排序。例如,可以选择归并排序算法。
  • 实现选择的排序算法,并对参赛团队按照赛事类别进行排序。
  • 输出排序后的参赛团队基本信息,按照排序结果有序输出。

4)校验和错误处理:

  • 在查询过程中,校验用户输入的参赛学校名称和赛事类别是否有效,如确保输入不为空或存在于参赛队伍数据中。
  • 如果查询结果为空,输出相应的提示信息。

四.决赛叫号系统 
1)设计决赛叫号系统:

  • 根据赛事组织文件中的赛事类别,将参赛队伍分配到不同的决赛室。
  • 创建一个队列数据结构来模拟决赛室中参赛队伍的顺序。

2)决赛叫号和参赛队进场:

  • 按照指定的顺序(赛事类别),逐个决赛室进行叫号和参赛队伍进场。
  • 输出当前叫号的参赛队伍信息,并将其从队列中移除。
  • 等待比赛结束后,再叫号下一个参赛队伍进场。

3)模拟决赛叫号系统:

  • 模拟整个决赛过程,包括参赛队伍的叫号和进场顺序。
  • 可以通过时间间隔或手动操作来模拟比赛过程中的时间流逝。

4)直观展示叫号顺序和进场秩序:

  • 在叫号时,输出当前叫号的参赛队伍信息,以展示叫号顺序。
  • 在参赛队伍进场时,输出进场的参赛队伍信息,以展示进场秩序。


五.校园导游 
 

概要设计

一个Team类,用于管理队伍的基本信息:

public class Team {
    private int teamId;
    private String projectName;
    private String school;
    private String category;
    private String participants;
    private String guideTeacher;

    // 构造函数
    public Team(int teamId, String projectName, String school, String category, String participants, String guideTeacher) {
        this.teamId = teamId;
        this.projectName = projectName;
        this.school = school;
        this.category = category;
        this.participants = participants;
        this.guideTeacher = guideTeacher;
    }

    // getter和setter方法
    public int getTeamId() {
        return teamId;
    }

    public void setTeamId(int teamId) {
        this.teamId = teamId;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String getParticipants() {
        return participants;
    }

    public void setParticipants(String participants) {
        this.participants = participants;
    }

    public String getGuideTeacher() {
        return guideTeacher;
    }

    public void setGuideTeacher(String guideTeacher) {
        this.guideTeacher = guideTeacher;
    }

}

BinarySearchTree(二叉排序树)类,用于实现查找功能。

public class BinarySearchTree {
    private Node root;

    private class Node {
        private Team team;
        private Node left;
        private Node right;

        public Node(Team team) {
            this.team = team;
            this.left = null;
            this.right = null;
        }
    }

    public void insert(Team team) {
        root = insertNode(root, team);
    }

    private Node insertNode(Node root, Team team) {

        return root;
    }

    public Team search(int teamId) {
        return searchNode(root, teamId);
    }

    private Team searchNode(Node root, int teamId) {

    }

    public void inOrderTraversal() {
        inOrderTraversal(root);
    }

    private void inOrderTraversal(Node root) {

    }
}

下面给出校园景点的无向带权图: 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值