基于STL泛化编程的演讲比赛.cpp

基于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-></
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值