1、演讲比赛程序需求
1.1比赛规则
- 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。
- 每名选手都有对应的编号,如 10001~10012
- 比赛方式:分组比赛,每组6个人;
- 第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲。
- 十个评委分别给每名选手打分,去除最高分和最低分,求的平均分为本轮选手的成绩
- 当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛。
- 第二轮为决赛,前三名胜出
- 每轮比赛过后需要显示晋级选手的信息
1.2程序功能
- 开始演讲比赛:完成整届比赛的流程,每个比赛阶段需要给用户一个提示,用户按任意键后继续下一个阶段
- 查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
- 清空比赛记录:将文件中数据清空
- 退出比赛程序:可以退出当前程序
2、项目创建
都会,不会的都赶快重学吧
3、创建管理类
功能描述:
- 提供菜单界面与用户交互
- 对演讲比赛流程进行控制
- 与文件的读写交互
3.1创建文件
- 在头文件和源文件的文件夹下分别创建speechManager.h和speechManager.cpp文件
3.2头文件实现
#pragma once #include <iostream> using namespace std; //设计演讲管理类 class SpeechManger { public: //构造函数 SpeechManger(); //析构函数 ~SpeechManger(); };
3.3源文件实现
#include "speechManager.h" //构造函数 SpeechManger::SpeechManger() { } //析构函数 SpeechManger::SpeechManger() { }
4、菜单功能
功能描述:与用户的沟通界面
4.1添加成员函数
- 在管理类speechManager.h中添加成员函数 void show_Menu();
#pragma once #include <iostream> using namespace std; //设计演讲管理类 class SpeechManger { public: //构造函数 SpeechManger(); //菜单功能 void show_Menu(); //析构函数 ~SpeechManger(); };
4.2成员函数实现
- 在管理类speechManager.cpp中实现 show_Menu()函数
#include "speechManager.h" //构造函数 SpeechManger::SpeechManger() { } //菜单功能 void SpeechManger::show_Menu() { cout << "********************************************" << endl; cout << "************* 欢迎参加演讲比赛 ************" << endl; cout << "************* 1.开始演讲比赛 *************" << endl; cout << "************* 2.查看往届记录 *************" << endl; cout << "************* 3.清空比赛记录 *************" << endl; cout << "************* 0.退出比赛程序 *************" << endl; cout << "********************************************" << endl; cout << endl; } //析构函数 SpeechManger::SpeechManger() { }
4.3测试菜单代码
- 在演讲比赛流程管理系统.cpp中测试菜单功能
#include <iostream> using namespace std; #include "speechManager.h" int main() { //创建管理类对象 SpeechManger sm; sm.show_Menu(); system("pause"); return 0; }
5、退出功能
5.1提供功能接口
- 在main函数中提供分支选择,提供每个功能接口
#include <iostream> using namespace std; #include "speechManager.h" int main() { //创建管理类对象 SpeechManger sm; cout << "请输入您的选择:" << endl; int choice = 0;//用于存储用户输入 while (true) { sm.show_Menu(); cin >> choice; switch (choice) { case 1: // 开始比赛 break; case 2: // 查看往届比赛记录 break; case 3: // 清空比赛记录 break; case 0: // 退出系统 sm.exitSystem(); break; default: system("cls"); //清屏 break; } } system("pause"); return 0; }
5.2实现退出功能
- 在speechManager.h中提供退出系统的成员函数 void exitsystem();
- 在speechManager.cpp中提供具体的功能实现
//退出系统 void SpeechManger::exitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0); }
5.3测试功能
- 在main函数分支0 选项中,调用退出程序的接口
6、演讲比赛功能
6.1功能分析
比赛流程分析:
抽签 → 开始演讲比赛 → 显示第一轮比赛结果 →抽签 → 开始演讲比赛 → 显示的三名结果 → 保存分数
6.2创建选手类
- 选手类中的属性包含:选手姓名、分数
- 头文件中创建 speaker.h文件,并添加代码
#pragma once #include <iostream> using namespace std; //选手类 class Speaker { public: string m_Name; //姓名 double m_Score[2];//分数 最多有两轮得分 };
6.3比赛
6.3.1成员属性添加
- 在speechManager.h中添加属性
//成员属性 //保存第一轮比赛选手编号容器 vector<int>v1; //第一轮晋级选手编号容器 vector<int>v2; //胜出前三名选手编号容器 vector<int>vVictory; //存放编号以及对应具体选手容器 map<int, Speaker>m_Speaker; //存放比赛论述 int m_Index;
6.3.2初始化属性
- 在speechManager.h中提供开始比赛的的成员的数void initspeech();
//初始化容器和属性 void initSpeech();
- 在speechManager.cpp中实现 void initspeech();
//初始化容器和属性 void SpeechManger::initSpeech() { //容器都置空 this->v1.clear(); this->v2.clear(); this->vVictory.clear(); this->m_Speaker.clear(); //初始化比赛轮数 this->m_Index = 1; }
- SpeechManager构造函数中调用 void initspeech();
//构造函数 SpeechManger::SpeechManger() { //初始化容器和属性 this->initSpeech(); }
6.3.3创建对手
- 在speechManager.h中提供开始比赛的的成员函数 void createspeaker();
//创建12名选手 void createSpeaker();
- 在speechManager.cpp中实现void createspeaker();
//创建12名选手 void SpeechManger::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 + 10001); //选手编号以及对应选手 放入到map容器中 this->m_Speaker.insert(make_pair(i + 10001, sp)); } }
- SpeechManager类的构造函数中调用 void createspeaker();
//构造函数 SpeechManger::SpeechManger() { //初始化容器和属性 this->initSpeech(); //创建12名选手 this->createSpeaker(); }
- 测试 在main函数中,可以在创建完管理对象后,使用下列代码测试12名选手初始状态
//测试12名选手创建 for (map<int, Speaker>::iterator it = sm.m_Speaker.begin(); it != sm.m_Speaker.end(); it++) { cout << "选手编号:" << it->first << " 姓名:" << it->second.m_Name <