1.1比赛规则
·学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。
·每名选手都有对应的编号,如10001~10012
·比赛方式:分组比赛,每组6个人;
·第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲。
·十个评委分别给每名选手打分,去除最高分和最低分,求的平均分为本轮选手的成绩·当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛。
·第二轮为决赛,前三名胜出
·每轮比赛过后需要显示晋级选手的信息
·开始演讲比赛:完成整届比赛的流程,每个比寒阶段需要给用户一个提,用户按任意键后继续下一个阶段
·查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
·清空比寒记录:将文件中数据清空。退出比赛程序:可以退出当前程序
初步顺序:
1.建立一个管理类的头文件和cpp文件
包括构造函数,析构函数,展示函数
2.建立主函数文件,测试管理文件中的函数
3.在主函数建立switch,在管理文件中写退出功能
4.建立一个选手的.h文件,里面包含选手类
5.在管理的文件中添加4个容器,分别存放比赛选手,第一轮晋级的选手,获胜的选手,以及最后带编号存放到文件excel中的选手。并写一个初始化函数对这些容器进行清零初始化,还要将轮数初始化为1,记得把初始化函数写到构造函数中
6.在管理中写一个创建选手的函数,添加选手姓名,分数,并且在第一个容器中插入12名选手的编号,在map容器中添加选手编号和类,最后在构造函数中调用这个接口,进行测试
7.在管理中写一个开始比赛的函数,在函数中依次 抽签–比赛–显示结果 抽签单独再设计一个函数,回头在比赛函数中调用
8.提示第几轮比赛的开始,创建容器,根据比赛轮数的不同将该容器指向v1或者v2,遍历该容器,并在遍历中创建双头数组容器deque,用于给选手打分–sort排序(难)–去掉最高分和最低分–accumulate获取总分–获取平均分–打印输出–将平均分放到map容器中(难)–创建一个按照降序排列的map容器,用来打印小组名次并取出前三名放到v2或者victory容器中,最后把它清空
9.最后记得加入暂停清空
演讲比赛系统主文件.cpp文件:
#include<iostream>
using namespace std;
#include<string>
#include"speakerManager.h"
#include"speaker.h"
#include<ctime>
int main ()
{
srand((unsigned int)time(NULL));//!不要把time和null的顺序写错了!
speakerManager sp;
/*for(map<int,speaker>::iterator it=sp.m_speaker.begin();it!=sp.m_speaker.end();it++)
{
cout<<"选手编号:"<<it->first<<" "<<"选手姓名:"<<it->second.name<<" "<<"选手分数"<<it->second.score[1]<<endl;;
}*/
int choice =0;
while(true)
{
sp.showMeu();
cout<<"请输入您的选择:";
cin>>choice;
switch(choice)
{
case 1://开始比赛
sp.startSpeech();
break;
case 2://查看比赛记录
sp.ShowRecord();
break;
case 3://清空比赛记录
sp.clearRecord();
break;
case 0:
sp.Exit();
break;
default:
system("cls");
break;
}
}
system("pause");
return 0;
}
speakerManager.h文件
#pragma once
#include<iostream>
using namespace std;
#include"speaker.h"
#include<vector>
#include<map>
class speakerManager
{
public:
//四个容器
vector<int>v1;
vector<int>v2;
vector<int>victory;
map<int,speaker>m_speaker;
speakerManager();
//比赛轮数
int index;
void init();
void showMeu();
void createSpeaker();
void Exit();
voi