任务描述
(1)赛事信息管理:从team.txt中读取参赛队伍的基本信息,用二叉排序树查找参赛队伍的基本信息,能实现对参赛队伍的增加、修改和浏览。为参赛队伍分配一个分数为60~100之间的初赛成绩,并能实现参赛队伍的成绩查询(实现基于二叉排序树的查找)。设计合适的输入输出,根据提示输入参赛队编号,查询队伍的初赛成绩,若查找成功,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和初赛成绩信息)。另外,输出全部参赛队的平均查找长度ASL。
(2)决赛现场模拟:首先进行决赛分组,生成决赛秩序册,供参赛队查询。根据赛事类别将参赛队伍分配到17个决赛室(编号为1~17)。秩序册中每个决赛室的进场顺序为初赛成绩降序排列。(排序算法从选择排序、插入排序、希尔排序、归并排序、堆排序中选择一种,并为选择该算法的原因做出说明)然后,模拟决赛秩序。比赛现场会设置大型候赛区,场地中有大屏以时间线动态展示各决赛室中正在决赛的队伍,侯赛的队伍及比赛结束的队伍信息。请编写程序模拟候赛区大屏上动态展示各参赛队候场、比赛中、比赛结束的状态。
(3)决赛地图导览:为参赛者提供决赛主办地的各种路径导航的查询服务,以我校长山校区提供比赛场地为例,为参赛者提供不少于12个目标地的导航。为参赛者提供校园地图中任意目标地(建筑物)相关信息的查询;提供图中任意目标地(建筑物)的问路查询。
定义一个class对象Team来定义参赛队编号,参赛作品名称,参赛学校,赛事类别,参赛者,指导老师等基本信息
class Team {
private:
//基本信息
string TeamID; //参赛队编号
string workname; //参赛作品名称
string school; //参赛学校
string eventCate; //赛事类别 赛事类别共11项
string participants; //参赛者
string teachers; //指导老师
public:
//构造Team
Team() = default;
Team(string id, string Workname, string schoolname, string eventcatename, string Participant, string Teacher)
进行对参赛队伍的删减
void addteam(string id, string project,string schoolname,string event,string participants,string teacher)
{
ofstream file("F:\\team.txt", ios::app);
file << id <<" #" <<project<<" #" << " #" <<schoolname<< " #" <<event<< " #"<<participants<< " #" <<teacher<<endl;
file.close();
}
void addteam2(vector<Team>& team, Team a)
{
team.push_back(a);
}
//删除参赛队伍
void deleteteam(vector<Team>& team, string id)
{
for (int i = 0; i < team.size(); i++)
{
if (team[i].getTeamID() == id)
{
team.erase(team.begin() + i);
cout << "删除成功!" << endl;
根据提示输入参赛编号
插入排序的查询输出(根据学校名称查询)对于按参赛学校查询,我们需要遍历完整容器来寻找符合条件的参赛团队;对于按赛事类别查询,我们可以直接使用teamID容器根据键值查找符合条件的参赛团队,我们按赛事类别有序输出结果,可以使用插入排序算法将参赛团队按赛事类别排序后输出结果。
读取赛事组织文件中的参赛队信息,将其按照赛事类别分到各个决赛室的待叫号队列中。
先选择赛区,看看是要拿输出哪个赛区。
此时输出赛区的数字,然后输出赛区的叫号顺序,然后开始叫号后,一秒一秒地输出赛区的参赛队伍编号。
先在函数外面创建17个决赛区
把31个项目分别分成17个决赛区
先输出进场顺序
.最后模拟叫号,一秒一秒地输出赛区的参赛队伍编号,只到最后输出完毕为止。然后返回系统界面。
void eventCate_separate(vector<Team> team)
{
vector<string> teameventCate;
for (int i = 0; i < team.size(); i++)
{
if (std::find(teameventCate.begin(), teameventCate.end(), team[i].geteventCate()) == teameventCate.end())
{
teameventCate.push_back(team[i].geteventCate());
}
校园导游系统
class Floyd {
private:
unsigned n; // 结点数
vector<vector<double>> mat; // 邻接矩阵
vector<vector<unsigned>> pre; // 前驱结点表
void floyd() { // Floyd算法具体实现
for (unsigned k = 0; k < n; ++k) // 依次作为中继结点
for (unsigned i = 0; i < n; ++i)
for (unsigned j = 0; j < n; ++j)
if (mat[i][j] > mat[i][k] + mat[k][j]) { // 以中继更新其他点
mat[i][j] = mat[i][k] + mat[k][j];
pre[i][j] = k;
}