赛事管理系统(C++)

目录

 一问题定义

问题分析

、概要设计

、整体的代码



 

一,问题定义

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

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

2.从team.txt中读取参赛队伍的基本信息,实现基于二叉排序树的查找。根据提示输入参赛队编号,若查找成功,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和指导老师信息),同时,输出查找成功时的平均查找长度ASL;否则,输出“查找失败!”。

3.能够提供按参赛学校查询参赛团队(或根据赛事类别查询参赛团队),即,根据提示输入参赛学校名称(赛事类别),若查找成功,输出该学校参赛的(该赛事类别的)所有团队的基本信息,输出的参赛团队按赛事类别有序输出。(排序算法可从选择排序、插入排序、希尔排序、归并排序、堆排序中任意选择,并为选择算法的原因做出说明。)

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

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

二,问题分析

1.参赛队伍信息管理系统可以通过数据库或者文件存储的方式来存储参赛队伍的信息。对于增加、删除、修改参赛队伍的信息,可以提供相应的操作界面,让用户输入信息进行相应的操作。增加参赛队伍的信息时,用户需要输入参赛队编号、参赛作品名称、参赛学校、赛事类别、参赛者和指导老师等信息,并将其保存到数据库或文件中。删除参赛队伍的信息时,用户需要输入参赛队编号或其他信息来确定要删除的参赛队伍,在确认后进行删除操作。修改参赛队伍的信息时,用户需要输入要修改的参赛队伍的信息,以及需要修改的内容,在确认后进行修改操作

2.数据存储结构选择:由于参赛队伍信息需要进行查找操作,可以选择使用二叉排序树(也称为二叉搜索树)来存储参赛队伍的基本信息。二叉排序树的特点是左子树上的所有节点都小于根节点,右子树上的所有节点都大于根节点,这样可以方便进行查找操作。

3.按参赛学校查询参赛团队时,用户需要输入参赛学校名称,程序会按照赛事类别进行排序,输出该学校参赛的所有团队的基本信息。排序算法可以选择选择排序、插入排序、希尔排序、归并排序、堆排序中的任意一种算法。选择排序算法需要进行多次遍历,时间复杂度较大,不适用于数据量过大的情况。插入排序算法比较适合小规模的数据集,但是在大规模数据集下,时间复杂度会很高。希尔排序算法可以提高插入排序的效率,但是实现较为复杂。归并排序算法的时间复杂度为O(nlogn),适合处理大规模数据集,但是需要占用额外的内存空间。堆排序算法的时间复杂度也为O(nlogn),但是需要进行多次数据交换,在数据规模较小的情况下效率较慢。因此,在满足要求的前提下,可以根据实际情况选择排序算法。

4.决赛叫号系统可以设置一个队列来存储参赛队伍的编号,按照赛事类别将参赛队伍分配进9个决赛室。每个决赛室设置一个标志位,用于表示当前是否有参赛队伍正在比赛中。当一个参赛队伍完成比赛后,再从队列中获取下一个参赛队伍的编号,依此类推,直到所有的参赛队伍完成比赛。可以通过时钟等方式模拟时间流逝和叫号顺序,并在屏幕上展示各个决赛室的参赛队伍进场情况。

5.校园导游咨询:使用了图的数据结构和Floyd算法来计算最短路径。其中,建筑物用Building结构体表示,每个建筑物有一个名称和编号。边用Edge结构体表示,每个边有目的地建筑物的索引和路径长度。Campus_navigation类实现了导航功能,通过添加建筑物和路径来构建整个校园的邻接矩阵。在导航函数中,先判断输入的起始地和目的地是否存在,然后使用Floyd算法计算最短路径和下一个节点,并输出最短路径长度以及路径导航。print函数是递归打印Floyd算法计算的最短路径,从源节点到目的节点,输出路径上经过的建筑物名称。

三、概要设计

1.定义了一个结构体Project,包含了项目的各种信息,如ID、名称、所在大学、课程等。程序通过函数实现读取、写入、添加、删除和修改项目等功能。(在进行该部分的代码编写时出现了一个问题:控制台中出现的是乱码,后面发现是因为控制台和程序使用了不同的字符编码,导致中文字符无法正常显示。我通过设置字符编码为UTF-8方式得以解决。)

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <unordered_map>
#include <climits>
#include<algorithm>

using namespace std;

struct Project {
    string id;
    string name;
    string university;
    string course;
    string student;
    string teacher;
};

// 读取项目信息
vector<Project> readData(string filename);

// 写入项目信息
void writeData(string filename, const vector<Project>& projects);

// 添加新项目
void addProject(vector<Project>& projects);

// 删除指定的项目
void deleteProject(vector<Project>& projects);

// 修改指定的项目
void modifyProject(vector<Project>& projects);

int main() {
    vector<Project> projects; // 存储所有项目信息

    while (true) { // 主循环
        cout << "请选择操作:" << endl;
        cout << "1.读取项目信息" << endl;
        cout << "2.添加新项目" << endl;
        cout << "3.删除指定项目" << endl;
        cout << "4.修改指定项目" << endl;
        cout << "0.退出程序" << endl;
        int choice;
        cin >> choice;

        switch (choice) {
        case 1:
            // 读取项目信息
            break;
        case 2:
            // 添加新项目
            break;
        case 3:
            // 删除指定项目
            break;
        case 4:
            // 修改指定项目
            break;
        case 0:
            // 退出程序
            exit(0);
            break;
     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值