基于STL泛化编程的演讲比赛.cpp
比赛规则:
- 学校举办一场演讲比赛,共12个人参加,比赛共两轮,第一轮为淘汰赛,第二轮为决赛
- 每名选手都有对应得编号,如 10001 ~ 10012
- 比赛方式:分组比赛,每组6个人
- 第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲
- 十个评委分别给每名选手打分,去除最高和最低分,求平均分为本轮选手的成绩
- 当小组演讲完后,淘汰组内排名最后三个选手,前三名晋级,进入下一轮比赛
- 第二轮为决赛,前三名胜出
- 每轮比赛后需要显示晋级选手的信息
程序功能:
- 开始演讲比赛:完成整届比赛流程,每个比赛阶段需要给用户一个提示,用户按下任意键后进行下一个阶段
- 查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
- 清空比赛记录:将文件中数据清空
- 退出比赛程序:可以退出当前程序
源码:
#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <deque>
#include <functional>
#include <numeric>
#include <ctime>
#include <cstdlib>
#include <fstream>
#define FILENAME "speech.csv"
//选手类
class Speaker
{
public:
string m_Name;//姓名
double m_Score[2];//分数 最多两轮得分
};
//演讲管理类
class SpeechManager
{
public:
//构造函数
SpeechManager()
{
//初始化容器和属性
this->initSpeech();
//创建12名选手
this->createSpeaker();
//读取文件
this->loadRecord();
}
//菜单功能
void showMenu()
{
cout << "******************************" << endl;
cout << "****** 欢迎参加演讲比赛 ******" << endl;
cout << "****** 1. 开始演讲比赛 *******" << endl;
cout << "****** 2. 查看往届记录 *******" << endl;
cout << "****** 3. 清空比赛记录 *******" << endl;
cout << "****** 0. 退出比赛程序 *******" << endl;
cout << "******************************" << endl;
cout << endl;
}
//0. 退出系统
void exitSystem()
{
cout << "欢迎下次使用" << endl;
system("pause");
exit(0);
}
//析构函数
~SpeechManager()
{
}
//初始化容器和属性
void initSpeech()
{
//容器置空
this->v1.clear();
this->v2.clear();
this->vVictory.clear();
this->m_Speaker.clear();
this->m_Record.clear();
//初始化比赛轮数
this->m_Index = 1;
}
//创建12名选手
void createSpeaker()
{
string nameSeed = "ABCDEFGHIJKL";
for(int i = 0; i < nameSeed.size(); i++)
{
string name = "选手";
name +=nameSeed[i];
//姓名 初始化
Speaker sp;
sp.m_Name = name;
//分数初始化
for(int j = 0; j < 2; j++)
{
sp.m_Score[j] = 0;
}
//选手容器编号 放入v1
this->v1.push_back(i + 1001);
//选手编号以及对应选手 放到map容器
this->m_Speaker.insert(make_pair(i + 1001, sp));
}
}
//开始比赛
void startSpeech()
{
//第一轮
//1.抽签
this->speechDraw();
//2.比赛
this-></