参考链接

  1. https://www.bilibili.com/video/BV1et411b73Z?p=264

演讲比赛流程管理系统

演讲比赛程序需求

比赛规则

  1. 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛
  2. 每名选手都有对应的编号,如10001-10012
  3. 比赛方式:分组比赛,每组6个人
  4. 第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲
  5. 十个评委分别给每名选手打分,去除最高分和最低分,求的平均分为本轮选手的成绩
  6. 当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛
  7. 第二轮为决赛,前三名胜出
  8. 每轮比赛过后需要显示晋级选手的信息

程序功能

  1. 开始演讲比赛:完成整届比赛的流程,每个比赛阶段需要给用户一个提示,用户按任意键后继续下一个阶段
  2. 查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
  3. 清空比赛记录:将文件中数据清空
  4. 退出比赛程序:可以退出当前程序

创建管理类

功能描述

  1. 提供菜单界面与用户交互
  2. 对演讲比赛流程进行控制
  3. 与文件的读写交互

创建文件

在头文件和源文件的文件夹下分别创建speechManager.h和speechManager.cpp文件

class SpeechManager
{public:// 构造函数SpeechManager();// 析构函数~SpeechManager();
};
#include "speechManager.h"// 构造函数
SpeechManager::SpeechManager()
{}
// 析构函数
SpeechManager::~SpeechManager()
{}

菜单功能

添加成员函数

在管理类speechManager.h中添加成员函数void show_Menu();

// 菜单功能
void show_Menu();

菜单功能实现

在管理类speechManager.cpp中实现show_Menu()函数

// 菜单功能
void SpeechManager::show_Menu()
{cout << "*****************************************" << endl;cout << "***********  欢迎参加演讲比赛  ************" << endl;cout << "***********  1.开始演讲比赛  **************" << endl;cout << "***********  2.查看往届记录  **************" << endl;cout << "***********  3.清空比赛记录  **************" << endl;cout << "***********  0.退出比赛程序  **************" << endl;cout << endl;
}

测试菜单功能

在演讲比赛流程管理系统.cpp中测试菜单功能

#include <iostream>
using namespace std;
#include "speechManager.h"int main()
{// 创建管理类SpeechManager sm;sm.show_Menu();system("pause");return 0;
}

退出功能

提供功能接口

在main函数中提供分支选择,提供每个功能接口

int main()
{// 创建管理类SpeechManager sm;int choice = 0; // 用来存储用户的选项while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice; // 接受用户的选项switch (choice){case 1: // 开始比赛break;case 2: // 查看记录break;case 3: // 清空记录break;case 0: // 退出系统break;default:system("cls"); // 清屏break;}}system("pause");return 0;
}

实现退出功能

在speechManager.h中提供退出系统的成员函数void exitSystem();
在speechManager.cpp中提供具体的功能实现

void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}

演讲比赛功能

功能分析

比赛流程分析:
抽签–>开始演讲比赛–>显示第一轮比赛结果–>
抽签–>开始演讲比赛–>显示前三名结果–>保存分数

创建选手类

选手类中的属性包含:选手姓名、分数
头文件中创建speaker.h文件,并添加代码:

class Speaker
{public:string m_Name; // 姓名double m_Score[2]; // 分数 最多有两轮得分
};

比赛

成员属性添加

在speechManager.h中添加属性

// 比赛选手 容器  12人
vector<int> v1;// 第一轮晋级容器  6人
vector<int> v2;//胜利前三名容器  3人
vector<int> vVictory;// 存放编号以及对应的具体选手
map<int, Speaker> m_Speaker;// 记录比赛轮数
int m_Index;
初始化属性

在speechManager.h中提供开始比赛的成员函数void initSpeech();

//初始化属性
void initSpeech();

在speechManager.cpp中实现void initSpeech();

void SpeechManager::initSpeech()
{// 容器保证为空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Index = 1;
}

SpeechManager构造函数中调用void initSpeech();

SpeechManager::SpeechManager()
{// 初始化属性this->initSpeech();
}
创建选手

在speechManager.h中提供开始比赛的成员函数void createSpeaker();

// 初始化创建12名选手
void createSpeaker();

在speechManager.cpp中实现void createSpeaker();

void SpeechManager::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; i++){sp.m_Score[i] = 0;}// 12名选手编号this->v1.push_pack(i + 10001);// 选手编号以及对应的选手存放到map容器中this->m_Speaker.insert(make_pair(i + 10001, sp));}
}

SpeechManager类的构造函数中调用void createSpeaker();

SpeechManager::SpeechManager()
{// 初始化属性this->initSpeech();// 创建选手this->createSpeaker();
}
开始比赛成员函数添加

在speechManager.h中提供开始比赛的成员函数void startSpeech();
该函数功能是控制比赛的流程

// 开始比赛-比赛流程控制
void startSpeech();

在speechManager.cpp中将startSpeech的空实现先写入

void SpeechManager::startSpeech()
{// 第一轮比赛// 1. 抽签// 2. 比赛// 3. 显示晋级结果// 第二轮比赛// 1. 抽签// 2. 比赛// 3. 显示最终结果// 4. 保存分数}
抽签

在speechManager.h中提供抽签的成员函数void speechDraw();

// 抽签
void speechDraw();

在speechManager.cpp中实现成员函数void speechDraw();

void SpeechManager::speechDraw()
{cout << "第 << " << this->m_Index << " >> 轮比赛选手正在抽签" << endl;cout << "----------------------" << endl;cout << "抽签后演讲顺序如下:" << endl;if (this->m_Index == 1){random_shuffle(v1.begin(), v1.end());for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++){cout << *it << " ";}cout << endl;}else{random_shuffle(v2.begin(), v2.end());for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++){cout << *it << " ";}cout << endl;}cout << "--------------------" << endl;system("pause");cout << endl;
}

在startSpeech比赛流程控制的函数中,调用抽签函数

// 1. 抽签
speechDraw();

在main函数中,分支1选项中,调用开始比赛的接口

case 1: // 开始比赛sm.startSpeech();break;
开始比赛

在speechManager.h中提供比赛的成员函数void speechContest();

// 比赛
void speechContest();

在speechManager.cpp中实现成员函数void speechContest();

void SpeechManager::speechContest()
{cout << "--------------第" << this->m_Index << "轮正式比赛开始: --------------" << endl;multimap<double, int, greater<double>> groupScore; // 临时容器,保存key分数 value选手编号int num = 0; // 记录人员数,6个为1组vector<int> v_Src; // 比赛的人员容器if (this->m_Index == 1){v_Src = v1;}else{v_Src = v2;}// 遍历所有参数选手for (vector<int>::iterator it = v_Src.begin(); it != v_Src.end(); it++){num++;// 评委打分deque<double> d;for (int i = 0; i < 10; i++){double score = (rand() % 401 + 600) / 10.f; // 600~1000d.push_back(score);}sort(d.begin(), d.end(), greater<double>());d.pop_front();d.pop_back();double sum = accumulate(d.begin(), d.end(), 0.0f);double avg = sum / (double)d.size();// 每个人平均分this->m_Speaker[*it].m_Score[this->m_Index - 1] = avg;// 6个人一组,用临时容器保存groupScore.insert(make_pair(avg, *it));if (num % 6 == 0){cout << "第" << num / 6 << "小组比赛名次: " << endl;for (multimap<double, int, greater<double>>::iterator it = groupScore.begin(); it != groupScore.end(); it++){cout << "编号:" << it->second << "姓名:" << this->m_Speaker[it->second].m_Name << " 成绩:" << this->m_Speaker[it->second].m_Score[this->m_Index - 1] << endl;}int count = 0;// 取前三名for (multimap<double, int, greater<double>>::iterator it = groupScore.begin(); it != groupScore.end() && count < 3; it++, count++){if (this->m_Index == 1){v2.push_back((*it).second);}else{vVictory.push_back((*it).second);}}groupScore.clear();cout << endl;}}cout << "-------------- 第" << this->m_Index << "轮比赛完毕 ---------------" << endl;system("pause");
}
显示比赛分数

在speechManager.h中提供显示分数的成员函数void showScore();

// 显示比赛结果
void showScore();

在speechManager.cpp中实现成员函数void showScore();

void SpeechManager::showScore()
{cout << "-------------- 第" << this->m_Index << "轮晋级选手信息如下:--------------------" << endl;vector<int> v;if (this->m_Index == 1){v = v2;}else{v = vVictory;}for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << "选手编号:" << *it << "姓名:" << m_Speaker[*it].m_Name << " 得分:" << m_Speaker[*it].m_Score[this->m_Index - 1] << endl;}cout << endl;system("pause");system("cls");this->show_Menu();
}

在startSpeech比赛流程控制的函数中,调用显示比赛分数函数

第二轮比赛

在startSpeech比赛流程控制的函数中,加入第二轮的流程

void SpeechManager::startSpeech()
{// 第一轮比赛// 1. 抽签this->speechDraw();// 2. 比赛this->speechContest();// 3. 显示晋级结果this->showScore();// 第二轮比赛this->m_Index++;// 1. 抽签this->speechDraw();// 2. 比赛this->speechContest();// 3. 显示最终结果this->showScore();// 4. 保存分数}

保存分数

在speechManager.h中添加保存记录的成员函数void saveRecord();

// 保存记录
void saveRecord();

在speechManager.cpp中实现成员函数void saveRecord();

void SpeechManager::saveRecord()
{ofstream ofs;ofs.open("speech.csv", ios::out | ios::app); // 用输出的方式打开文件// 将每个人数据写入到文件中for (vector<int>::iterator it = vVictory.begin(); it != vVictory.end(); it++){ofs << *it << ","<< m_Speaker[*it].m_Score[1] << ",";}ofs << endl;// 关闭文件ofs.close();cout << "记录已经保存" << endl;this->fileIsEmpty = false;
}

在startSpeech比赛流程控制的函数中,最后调用保存记录分数函数

// 4. 保存分数
this->saveRecord();cout << "本届比赛完毕!" << endl;
system("pause");
system("cls");

查看记录

读取记录分数

在speechManager.h中添加读取记录的成员函数void loadRecord();
添加判断文件是否为空的标志bool fileIsEmpty;
添加往届记录的容量map<int, vector> m_Record;

其中m_Record中的key代表第几界,value记录具体的信息

// 读取记录
void loadRecord();// 文件为空的标志
bool fileIsEmpty;// 往届记录
map<int, vector<string>> m_Record;

在speechManager.cpp中实现成员函数void_loadRecord();

void SpeechManager::loadRecord()
{ifstream ifs("speech.csv", ios:in); // 输入流对象 读取文件if (!ifs.is_open()){this->fileIsEmpty = true;cout << "文件不存在!" << endl;ifs.close();return;}char ch;ifs >> ch;if (ifs.eof()){cout << "文件为空!" << endl;this->fileIsEmpty = true;ifs.close();return;}// 文件不为空this->fileIsEmpty = false;ifs.putback(ch); // 读取的单个字符放回去string data;int index = 0;while (ifs >> data){vector<string> v;int pos = -1;int start = 0;while (true){pos = data.find(",", start); // 从0开始查找','if (pos == -1){break; // 找不到break返回}string tmp = data.substr(start, pos - start); //找到了,进行分割v.push_back(tmp);start = pos + 1;}this->m_Record.insert(make_pair(index, v));index++;}ifs.close();
}

在SpeechManager构造函数中调用获取往届记录函数

// 获取往届记录
this->loadRecord();

查看记录功能

在speechManager.h中添加保存记录的成员函数void showRecord();

// 显示往届得分
void showRecord();

在speechManager.cpp中实现成员函数void showRecord();

void SpeechManager::showRecord()
{if (this->fileIsEmpty){cout << "文件为空或文件不存在!" << endl;}for (int i = 0; i < this->m_Record.size(); i++){cout << "第" << i + 1 << "届 " <<"冠军编号:" << this->m_Record[i][0] << " 得分:" << this->m_Record[i][1] << " " <<"亚军编号: " << this->m_Record[i][2] << " 得分: " << this->m_Record[i][3] << " " <<"季军编号: " << this->m_Record[i][4] << " 得分: " << this->m_Record[i][5] << endl;}system("pause");system("cls");
}

清空记录

情况记录功能实现

在speechManager.h中添加保存记录的成员函数void clearRecord();

// 清空记录
void clearRecord();

在speechManager.cpp中实现成员函数void clearRecord();

void SpeechManager::clearRecord()
{cout << "确认清空?" << endl;cout << "1、确认" << endl;cout << "2、返回" << endl;int select = 0;cin >> select;if (select == 1){// 打开模式 ios::trunc 如果存在删除文件并重新创建ofstream ofs("speech.csv", ios:trunc);ofs.close();//初始化属性this->initSpeech();//创建选手this->createSpeaker();//获取往届记录this->loadRecord();cout << "清空成功!" << endl;}system("pause");system("cls");
}

在main函数分支3中,调用清空比赛记录的接口

case 3: // 清空记录sm.clearRecord();break;

完整代码

speechManager.h

#pragma once
#include <iostream>
#include <vector>
#include <map>
#include "speaker.h"
#include <algorithm>
#include <functional>
#include <numeric>
#include <string>
#include <fstream>
using namespace std;// 设计演讲管理类
class SpeechManager
{public:// 构造函数SpeechManager();// 菜单功能void show_Menu();// 初始化属性void initSpeech();// 初始化创建12名选手void createSpeaker();// 开始比赛-比赛流程控制void startSpeech();// 抽签void speechDraw();// 比赛void speechContest();// 显示比赛结果void showScore();// 保存记录void saveRecord();// 读取记录void loadRecord();// 显示往届得分void showRecord();// 清空记录void clearRecord();// 退出系统void exitSystem();// 析构函数~SpeechManager();// 比赛选手 容器  12人vector<int> v1;// 第一轮晋级容器  6人vector<int> v2;//胜利前三名容器  3人vector<int> vVictory;// 存放编号以及对应的具体选手map<int, Speaker> m_Speaker;// 记录比赛轮数int m_Index;// 文件为空的标志bool fileIsEmpty;// 往届记录map<int, vector<string>> m_Record;
};

speechManager.cpp

#include "speechManager.h"// 构造函数
SpeechManager::SpeechManager()
{// 初始化属性this->initSpeech();// 创建选手this->createSpeaker();// 获取往届记录this->loadRecord();
}// 菜单功能
void SpeechManager::show_Menu()
{cout << "*****************************************" << endl;cout << "***********  欢迎参加演讲比赛  ************" << endl;cout << "***********  1.开始演讲比赛  **************" << endl;cout << "***********  2.查看往届记录  **************" << endl;cout << "***********  3.清空比赛记录  **************" << endl;cout << "***********  0.退出比赛程序  **************" << endl;cout << endl;
}void SpeechManager::initSpeech()
{// 容器保证为空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Index = 1;//初始化记录容器this->m_Record.clear();
}void SpeechManager::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; i++){sp.m_Score[i] = 0;}// 12名选手编号this->v1.push_back(i + 10001);// 选手编号以及对应的选手存放到map容器中this->m_Speaker.insert(make_pair(i + 10001, sp));}
}// 开始比赛
void SpeechManager::startSpeech()
{// 第一轮比赛// 1. 抽签this->speechDraw();// 2. 比赛this->speechContest();// 3. 显示晋级结果this->showScore();// 第二轮比赛this->m_Index++;// 1. 抽签this->speechDraw();// 2. 比赛this->speechContest();// 3. 显示最终结果this->showScore();// 4. 保存分数this->saveRecord();cout << "本届比赛完毕!" << endl;system("pause");system("cls");// 重置比赛,获取记录// 初始化属性this->initSpeech();// 创建选手this->createSpeaker();// 获取往届记录this->loadRecord();
}// 抽签
void SpeechManager::speechDraw()
{cout << "第 << " << this->m_Index << " >> 轮比赛选手正在抽签" << endl;cout << "----------------------" << endl;cout << "抽签后演讲顺序如下:" << endl;if (this->m_Index == 1){random_shuffle(v1.begin(), v1.end());for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++){cout << *it << " ";}cout << endl;}else{random_shuffle(v2.begin(), v2.end());for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++){cout << *it << " ";}cout << endl;}cout << "--------------------" << endl;system("pause");cout << endl;
}void SpeechManager::speechContest()
{cout << "--------------第" << this->m_Index << "轮正式比赛开始: --------------" << endl;multimap<double, int, greater<double>> groupScore; // 临时容器,保存key分数 value选手编号int num = 0; // 记录人员数,6个为1组vector<int> v_Src; // 比赛的人员容器if (this->m_Index == 1){v_Src = v1;}else{v_Src = v2;}// 遍历所有参数选手for (vector<int>::iterator it = v_Src.begin(); it != v_Src.end(); it++){num++;// 评委打分deque<double> d;for (int i = 0; i < 10; i++){double score = (rand() % 401 + 600) / 10.f; // 600~1000d.push_back(score);}sort(d.begin(), d.end(), greater<double>());d.pop_front();d.pop_back();double sum = accumulate(d.begin(), d.end(), 0.0f);double avg = sum / (double)d.size();// 每个人平均分this->m_Speaker[*it].m_Score[this->m_Index - 1] = avg;// 6个人一组,用临时容器保存groupScore.insert(make_pair(avg, *it));if (num % 6 == 0){cout << "第" << num / 6 << "小组比赛名次: " << endl;for (multimap<double, int, greater<double>>::iterator it = groupScore.begin(); it != groupScore.end(); it++){cout << "编号:" << it->second << "姓名:" << this->m_Speaker[it->second].m_Name << " 成绩:" << this->m_Speaker[it->second].m_Score[this->m_Index - 1] << endl;}int count = 0;// 取前三名for (multimap<double, int, greater<double>>::iterator it = groupScore.begin(); it != groupScore.end() && count < 3; it++, count++){if (this->m_Index == 1){v2.push_back((*it).second);}else{vVictory.push_back((*it).second);}}groupScore.clear();cout << endl;}}cout << "-------------- 第" << this->m_Index << "轮比赛完毕 ---------------" << endl;system("pause");
}void SpeechManager::showScore()
{cout << "-------------- 第" << this->m_Index << "轮晋级选手信息如下:--------------------" << endl;vector<int> v;if (this->m_Index == 1){v = v2;}else{v = vVictory;}for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << "选手编号:" << *it << "姓名:" << m_Speaker[*it].m_Name << " 得分:" << m_Speaker[*it].m_Score[this->m_Index - 1] << endl;}cout << endl;system("pause");system("cls");this->show_Menu();
}void SpeechManager::saveRecord()
{ofstream ofs;ofs.open("speech.csv", ios::out | ios::app); // 用输出的方式打开文件// 将每个人数据写入到文件中for (vector<int>::iterator it = vVictory.begin(); it != vVictory.end(); it++){ofs << *it << ","<< m_Speaker[*it].m_Score[1] << ",";}ofs << endl;// 关闭文件ofs.close();cout << "记录已经保存" << endl;this->fileIsEmpty = false;
}void SpeechManager::loadRecord()
{ifstream ifs("speech.csv", ios:in); // 输入流对象 读取文件if (!ifs.is_open()){this->fileIsEmpty = true;cout << "文件不存在!" << endl;ifs.close();return;}char ch;ifs >> ch;if (ifs.eof()){cout << "文件为空!" << endl;this->fileIsEmpty = true;ifs.close();return;}// 文件不为空this->fileIsEmpty = false;ifs.putback(ch); // 读取的单个字符放回去string data;int index = 0;while (ifs >> data){vector<string> v;int pos = -1;int start = 0;while (true){pos = data.find(",", start); // 从0开始查找','if (pos == -1){break; // 找不到break返回}string tmp = data.substr(start, pos - start); //找到了,进行分割v.push_back(tmp);start = pos + 1;}this->m_Record.insert(make_pair(index, v));index++;}ifs.close();
}void SpeechManager::showRecord()
{if (this->fileIsEmpty){cout << "文件为空或文件不存在!" << endl;}for (int i = 0; i < this->m_Record.size(); i++){cout << "第" << i + 1 << "届 " <<"冠军编号:" << this->m_Record[i][0] << " 得分:" << this->m_Record[i][1] << " " <<"亚军编号: " << this->m_Record[i][2] << " 得分: " << this->m_Record[i][3] << " " <<"季军编号: " << this->m_Record[i][4] << " 得分: " << this->m_Record[i][5] << endl;}system("pause");system("cls");
}void SpeechManager::clearRecord()
{cout << "确认清空?" << endl;cout << "1、确认" << endl;cout << "2、返回" << endl;int select = 0;cin >> select;if (select == 1){// 打开模式 ios::trunc 如果存在删除文件并重新创建ofstream ofs("speech.csv", ios:trunc);ofs.close();//初始化属性this->initSpeech();//创建选手this->createSpeaker();//获取往届记录this->loadRecord();cout << "清空成功!" << endl;}system("pause");system("cls");
}// 退出系统
void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}// 析构函数
SpeechManager::~SpeechManager()
{}

speaker.h

#pragma once
#include <iostream>
using namespace std;class Speaker
{public:string m_Name; // 姓名double m_Score[2]; // 分数 最多有两轮得分
};

演讲比赛流程管理系统.cpp

#include <iostream>
using namespace std;
#include "speechManager.h"
#include <ctime>int main()
{//随机数种子srand((unsigned int)time(NULL));// 创建管理类SpeechManager sm;int choice = 0; // 用来存储用户的选项while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;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;}}system("pause");return 0;
}

C++入门——演讲比赛流程管理系统相关推荐

  1. C++阶段06笔记01【基于STL的演讲比赛流程管理系统】

    C++匠心之作-从0到1入门学编程[视频+课件+笔记+源码] 目录 1.演讲比赛程序需求 1.1.比赛规则 1.2.程序功能 1.3.程序效果图 2.项目创建 2.1.创建项目 2.2.添加文件 3. ...

  2. C++提高编程(六)—— 案例 :演讲比赛流程管理系统(上)

    C++系列内容的学习目录 → \rightarrow →C++学习系列内容汇总. 1. 演讲比赛程序需求 1.1 比赛规则 1.2 程序功能 1.3 程序效果图 2. 创建项目 3. 创建管理类 3. ...

  3. C++基于STL的演讲比赛流程管理系统

    目录 介绍 speaker.h speechManager.h speechManager.cpp 演讲比赛流程管理系统.cpp 介绍 学校举行一场演讲比赛,共有12个人参加.比宴共两轮,第一轮为淘汰 ...

  4. 演讲比赛流程管理系统C++

    参考B站黑马视频 演讲比赛流程管理系统 1.1.比赛规则 学校举行演讲比赛,共有12人参加.比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如10001 ~ 10012 比赛方式:分 ...

  5. 【带你敲】演讲比赛流程管理系统

    CSDN话题挑战赛第2期 参赛话题:学习笔记 1. 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛,共有12个人参加.比赛共两轮,第一轮为淘汰赛,第二轮为决赛. 比赛方式:分组比赛,每组6个 ...

  6. C++ 演讲比赛流程管理系统

    文章目录 演讲比赛流程管理系统 一. 程序需求 1. 比赛规则 2. 程序功能 二. 创建管理类 1. 创建文件 2. 头文件实现 3. 源文件实现 三. 菜单功能 1. 添加成员函数 2. 实现函数 ...

  7. C++项目实战 —— 演讲比赛流程管理系统

    演讲比赛流程管理系统 文章目录 演讲比赛流程管理系统 1.演讲比赛程序需求 1.1 比赛规则 1.2 程序功能 2.项目创建 3.创建管理类 3.1 创建文件 3.2 头文件实现 3.3 源文件实现 ...

  8. 演讲比赛流程管理系统(C++)

    各位读者朋友,大家好!本篇文章主要内容是将黑马程序员(C++)的演讲比赛流程管理系统的源代码展现给大家.原码的大部分与黑马程序员老师写的代码一致,我只是对其中的一小部分做了优化,比如用户输入自己的选择 ...

  9. 【49C++项目案例:演讲比赛流程管理系统】

    文章目录 演讲比赛流程管理系统 1.演讲比赛程序需求 1.1 比赛规则 1.2 程序功能 1.3 程序效果图 2.项目创建 2.1 创建项目 2.2 添加文件 3.创建管理类 3.1 创建文件 3.2 ...

最新文章

  1. android 监控app卸载,Android应用监听自身卸载
  2. AI 识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走
  3. FreeRTOS 查询任务 剩余的栈空间的 方法
  4. kafka笔记3(生产者)
  5. SpringCloud+Seata1.4+Nacos1.4+MySQL8实现分布式事务(客户端)
  6. 【杂项】原来有两种单引号(单引号和反引号)
  7. 大数据WEB阶段(九)Myeclipse中配置Tomcat并发布项目
  8. qq安全保护进程更改计算机,分享win10电脑系统关闭qq安全防护进程的步骤
  9. javascript --- 优先级执行顺序
  10. 韩寒近期【雷人】语录
  11. [翻译]当SA帐号丢失时怎么办
  12. C#——后台管理端多级菜单的生成方式
  13. 备份校验两不误,MySQL自动备份还原校验设计详解
  14. 图片计算景深matlab程序,在线景深计算器
  15. c语言读取sgy格式文件,用C语言读写SGY格式的地震数据文件
  16. 带你学习《深入理解计算机系统》虚拟存储器(1)——虚存概念及页、页表和地址翻译基础
  17. 蒟蒻的WA之路——二分法学习
  18. 计算机网络基本知识(二):网络拓扑结构
  19. Unity - Timeline 之Creating a Timeline Asset and Timeline instance(创建Timeline Asset和Timeline 实例)
  20. aop:aspectj-autoproxy作用

热门文章

  1. 雅虎与阿里巴巴决裂 对自己很不利
  2. 一次性全部给你,这4款名不见经传的精品软件,用了就放不下
  3. 染书CRMA|一个贴身的智慧校园
  4. Apple Watch耗电快?5个技巧让你的苹果手表超省电
  5. 如何给esxi中的群晖NAS系统添加U盘、USB移动硬盘设备
  6. 浅谈基于流媒体转发技术的IP数字监控系统
  7. C#筛选DataTable的数据
  8. Kotlin学习(二)Kotlin基础语法
  9. 重复性工作再也不用做啦?机器人自动化迎难而上
  10. php简单富文本,JavaScript_Javascript实现简单的富文本编辑器附演示,复制代码 代码如下: span styl - phpStudy...