任务描述
(1)赛事信息管理:从team.txt中读取参赛队伍的基本信息,用二叉排序树查找参赛队伍的基本信息,能实现对参赛队伍的增加、修改和浏览。为参赛队伍分配一个分数为60~100之间的初赛成绩,并能实现参赛队伍的成绩查询(实现基于二叉排序树的查找)。设计合适的输入输出,根据提示输入参赛队编号,查询队伍的初赛成绩,若查找成功,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和初赛成绩信息)。另外,输出全部参赛队的平均查找长度ASL。
(2)决赛现场模拟:首先进行决赛分组,生成决赛秩序册,供参赛队查询。根据赛事类别将参赛队伍分配到17个决赛室(编号为1~17)。秩序册中每个决赛室的进场顺序为初赛成绩降序排列。(排序算法从选择排序、插入排序、希尔排序、归并排序、堆排序中选择一种,并为选择该算法的原因做出说明)然后,模拟决赛秩序。比赛现场会设置大型候赛区,场地中有大屏以时间线动态展示各决赛室中正在决赛的队伍,侯赛的队伍及比赛结束的队伍信息。请编写程序模拟候赛区大屏上动态展示各参赛队候场、比赛中、比赛结束的状态。
(3)决赛地图导览:为参赛者提供决赛主办地的各种路径导航的查询服务,以我校长山校区提供比赛场地为例,为参赛者提供不少于12个目标地的导航。为参赛者提供校园地图中任意目标地(建筑物)相关信息的查询;提供图中任意目标地(建筑物)的问路查询。
参赛队基本信息
先定义一个结构体team来定义参赛队编号,参赛作品名称,参赛学校,赛事类别,参赛者,指导老师等基本信息
//参赛队伍的基本信息
struct Team{
string number; //参赛队编号
string workname;//参赛作品名称
string school; //参赛学校
string category;//赛事类别
string contestion;//参赛者
string instructor; //指导老师
};
文件操作模块
1.定义一个二叉排序树的结点类型:
struct BiNode{
Team data;
BiNode *lchild,*rchild;
};
2.定义一个类,对参赛队伍进行相关操作
//管理参赛队伍的类
class TeamManager{
public:
void add_team(const Team& team);//添加一个参赛队
int find_team(const string& name);//根据参赛编号查找参赛队
void change(string& number);//修改参赛队信息
void remove_team(const string& number); //删除参赛队信息
double calculateASL(BiNode*node);//计算二叉排序树查找成功时的平均查找长度ASL
};
(1)增加参赛队伍信息
接受用户输入的参赛队信息,创建一个新的参赛队对象,并将输入的信息赋值给相应的属性并将新的参赛队对象添加到数据结构中。
(2)修改参赛队伍信息
接收用户输入的参赛队编号,在数据结构中查找对应的参赛队对象,如果找到匹配的参赛队对象,提供用户选择要修改的属性,接受用户输入的新值,并将其赋值给相应的属性。
(3)删除参赛队伍信息
队伍查询模块
1.输入参赛编号
2.插入排序的查询输出(根据学校名称查询)对于按参赛学校查询,我们需要遍历完整容器来寻找符合条件的参赛团队;对于按赛事类别查询,我们可以直接使用teamID容器根据键值查找符合条件的参赛团队,我们按赛事类别有序输出结果,可以使用插入排序算法将参赛团队按赛事类别排序后输出结果。
决赛叫号系统
读取赛事组织文件中的参赛队信息,将其按照赛事类别分到各个决赛室的待叫号队列中。
先选择赛区,看看是要拿输出哪个赛区。
此时输出赛区的数字,然后输出赛区的叫号顺序,然后开始叫号后,一秒一秒地输出赛区的参赛队伍编号。
1.先在函数外面创建十七个决赛区
vector<Team> a1;
vector<Team> a2;
vector<Team> a3;
vector<Team> a4;
vector<Team> a5;
vector<Team> a6;
vector<Team> a7;
vector<Team> a8;
vector<Team> a9;
vector<Team> a10;
vector<Team> a11;
vector<Team> a12;
vector<Team> a13;
vector<Team> a14;
vector<Team> a15;
vector<Team> a16;
vector<Team> a17;
2.把31个项目分别分成17个决赛区
3.先输出进场顺序
4.最后模拟叫号,一秒一秒地输出赛区的参赛队伍编号,只到最后输出完毕为止。然后返回系统界面。
校园导游系统
目的地查询:需要提供目的地名称、代号、简称、两地之间路径长度等信息。
将地图中的相关信息存储到一个结构体中,并根据地图的数据对其初始化,使用Dijkstra算法,单源路径最短搜索,再打印出其最短路径
Campus_navigation() {
Building building[10];
building[0] = { "3号组团",0 };
building[1] = { "西苑食堂",1 };
building[2] = { "明德楼",2 };
building[3] = { "大学生活动中心",3 };
building[4] = { "足球场",4 };
building[5] = { "文理大楼",5 };
building[6] = { "行政大楼",6 };
building[7] = { "求索园",7 };
building[8] = { "东苑食堂",8 };
building[9] = { "图书馆",9 };
building[10] = { "材料学院楼",10 };
building[11] = { "北门",11 };
for (int i = 0; i < 12; i++) {
vertex(building[i]);
}
addPath("3号组团", "西苑食堂", 100);
addPath("3号组团", "大学生活动中心", 200);
addPath("西苑食堂", "明德楼", 80);
addPath("西苑食堂", "大学生活动中心", 150);
addPath("明德楼", "足球场", 120);
addPath("明德楼", "文理大楼", 110);
addPath("大学生活动中心", "足球场", 50);
addPath("大学生活动中心", "材料学院楼", 200);
addPath("足球场", "求索园", 150);
addPath("足球场", "东苑食堂", 230);
addPath("足球场", "材料学院楼", 180);
addPath("文理大楼", "行政大楼", 80);
addPath("文理大楼", "求索园", 60);
addPath("行政大楼", "图书馆", 100);
addPath("行政大楼", "北门", 50);
addPath("求索园", "东苑食堂", 90);
addPath("求索园", "图书馆", 70);
addPath("东苑食堂", "图书馆", 50);
}