一、项目需求分析
1、某机构举办演讲比赛,在第一轮比赛中有12名选手参赛,并随机分组,6人为一组。
2、第一轮比赛后,由10位评委进行打分,打分规则为去掉最高分和最低分后计算平均分,筛选出小组前三名进入下一轮。
3、第二轮比赛后,用同样的方法打分,选出前三名,比赛结束。
4、下一次举行可以查看往届的比赛记录。
二、代码实现
首先来创建选手类 speaker.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
//选手类
class Speaker
{
public:
string m_Name; //姓名
double m_Score[2]; //分数,最多两轮得分
};
再来创建具体流程 speechManager.h
#pragma once
//#include <iostream>
#include <vector>
#include <map>
#include <deque>
//#include <string>
#include <algorithm>
#include <functional>
#include <numeric>
#include <fstream>
#include "speaker.h"
using namespace std;
//实现类
class SpeechManage
{
public:
//构造函数
SpeechManage();
//显示菜单
void showMenu();
//退出系统
void exitSystem();
//析构函数
~SpeechManage();
//初始化容器和属性
void initSpeech();
//创建12名选手
void createSpeaker();
//开始比赛 比赛整个流程控制函数
void startSpeech();
//抽签
void speechDraw();
//比赛
void speechContest();
//显示得分
void showScore();
//保存记录
void saveRecord();
//读取记录
void loadRecord();
//显示往届记录
void showRecord();
//清空文件
void clearRecord();
//判断文件是否为空
bool fileIsEmpty;
//存放往届记录的容器
map<int,vector<string>> m_Record;
//成员属性
//保存第一轮比赛选手编号容器
vector<int> v1;
//第一轮晋级选手编号容器
vector<int> v2;
//胜出前三名选手编号容器
vector<int> vVictory;
//存放编号以及对应具体选手容器
map<int,Speaker> m_Speaker;
//存放比赛轮数
int m_Index;
};
所有准备工作完成后,先编写主函数,即业务整体框架 mainSystem.cpp
//#include <iostream>
#include <ctime>
#include "speechManager.h"
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
//创建管理类对象
SpeechManage *sm = new SpeechManage();
int choice = 0; //用户输入
while(true)
{
sm->showMenu();
cout<<"请输入你的选择:";
cin>>choice;
switch(choice)
{
case 1: //开始比赛
sm->startSpeech();
break;
case 2: //查看往届比赛记录
sm->showRecord();
break;
case 3: //清空比赛记录
sm->clearRecord();
break;
case 0: //退出系统
sm->exitSystem();
break;
default:
system("cls");
break;
}
}
delete sm;
system("pause");
return 0;
}
最后,就是具体的业务功能实现 speechManager.cpp
#include "speechManager.h"
SpeechManage::SpeechManage()
{
this->initSpeech(