C++演讲比赛项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++演讲比赛项目相关的知识,希望对你有一定的参考价值。


1.项目需求

1.1比赛规则

C++演讲比赛项目_ios

1.2程序功能

C++演讲比赛项目_c语言_02

1.3程序效果图

C++演讲比赛项目_p2p_03

2.项目创建

创建项目步骤如下:

  • 创建新项目
  • 添加文件

2.1创建项目

打开vs2017后,点击创建新项目,创建新的C++项目

如图:

C++演讲比赛项目_p2p_04

3.创建管理类

C++演讲比赛项目_c语言_05

3.1创建文件

C++演讲比赛项目_p2p_06

4.菜单功能

  • 功能描述:与用户的沟通界面

4.1添加成员函数

C++演讲比赛项目_p2p_07

4.2菜单功能实现

在管理类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;

cout << endl;

4.3运行效果图

C++演讲比赛项目_c++_08

5.退出功能

功能描述:实现退出程序

5.1提供功能接口

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

代码:

//退出系统

void SpeechManager::exitSystem()



cout << "欢迎下次使用" << endl;

system("pause");

exit(0);

6.演讲比赛功能

6.1功能分析

比赛流程分析:

C++演讲比赛项目_p2p_09

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中添加属性

6.3.4开始比赛成员函数添加


完整代码:

speechManger.cpp

#include "speechManger.h"

//构造函数

SpeechManager::SpeechManager()

//初始化容器和属性

this->initSpeech();

//创建12名选手

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;

cout << endl;



//开始比赛 比赛整个流程控制函数

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();

//重置比赛,获取记录

//初始化容器和属性

this->initSpeech();

//创建12名选手

this->createSpeaker();

//加载往届记录

this->loadRecord();

cout << "本届比赛已完毕!" << endl;

system("pause");

system("cls");



//抽签

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;

cout << "--------------------------" << endl;

//准备临时容器 存放 小组成绩

multimap<double, int, greater<double>> groupScore;

int num = 0; //用于记录人员 的个数 6 人一组

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 ~ 1000 除以 10.f 得出最终分数

//cout << score << " ";

d.push_back(score);



//cout << endl;

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(); //平均分

//打印平均分

//cout << "编号: " << " 姓名: " << this->m_Speaker[*it].m_Name << " 平均分: " << avg << endl;

//将平均分放入到 map容器中

this->m_Speaker[*it].m_Score[this->m_Index - 1] = avg;

//将打分的数据 放入到临时小组中

groupScore.insert(make_pair(avg, *it)); //key是得分, value是具体选手编号

//每6人取出前三名

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 << "姓名:" << this->m_Speaker[*it].m_Name << "得分:"

<< this->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 << "," << this->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)

//cout << data << endl;

vector<string> v; //存放6个string字符串

int pos = -1; //查到","位置的变量

int start = 0;

while (true)

pos = data.find(",", start);

if (pos == -1)

//没有找到情况

break;



string temp = data.substr(start, pos - start);

//cout << temp << endl;

v.push_back(temp);

start = pos + 1;



this->m_Record.insert(make_pair(index, v));

index++;



ifs.close();

/*for (map<int, vector<string>>::iterator it = m_Record.begin(); it != m_Record.end(); it++)

cout << it->first << "冠军编号: " << it->second[0] << " 分数: " << it->second[1] << endl;

*/



//显示往届记录

void SpeechManager::showRecord()

if (this->fileIsEmpty)

cout << "文件不存在,或记录为空!" << endl;



else

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)

//确认清空

ofstream ofs("speech.csv", ios::trunc);

ofs.close();

//初始化容器和属性

this->initSpeech();

//创建12名选手

this->createSpeaker();

//加载往届记录

this->loadRecord();

cout << "清空成功!" << endl;



system("pause");

system("cls");



//退出系统

void SpeechManager::exitSystem()

cout << "欢迎下次使用!" << endl;

system("pause");

exit(0);



//初始化容器和属性

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 i = 0; i < 2; i++)

sp.m_Score[i] = 0;



//创建选手编号 并且放入到v1容器中

this->v1.push_back(i + 10001);

//选手编号以及对应的选手放入map容器中

this->m_Speaker.insert(make_pair(i + 10001, sp));





//析构函数

SpeechManager::~SpeechManager()







基于STL的演讲流程管理系统.cpp

#include <iostream>

using namespace std;

#include "speechManger.h"

#include <string>

#include <ctime>

int main()



//随机数种子

srand((unsigned int)time(NULL));

//创建管理类对象

SpeechManager sm;

//测试12名选手创建

//for (map<int, Speaker>::iterator it = sm.m_Speaker.begin(); it != sm.m_Speaker.end(); it++)

//

// cout << "选手编号:" << it->first

//<< " 姓名:" << it->second.m_Name

// << " 分数:" << it->second.m_Score[0]<< endl;

//

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;

speechManger.h

#pragma once

#include <iostream>

#include <vector>

#include <map>

#include "speaker.h"

#include <algorithm>

#include <deque>

#include <functional>

#include <numeric>

#include <string>

#include <fstream>

using namespace std;

//设计演讲管理类

class SpeechManager

public:

//构造函数

SpeechManager();

//开始比赛 比赛整个流程控制函数

void startSpeech();

//抽签

void speechDraw();

//比赛

void speechContest();

//显示比赛结果

void showScore();

//保存记录

void saveRecord();

//读取记录

void loadRecord();

//判断文件是否为空

bool fileIsEmpty;

//存放往届记录的容器

map<int, vector<string>> m_Record;

//显示往届记录

void showRecord();

//清空记录

void clearRecord();

//菜单功能

void show_Menu();

//退出系统

void exitSystem();

//析构函数

~SpeechManager();

//初始化容器和属性

void initSpeech();

//创建12名选手

void createSpeaker();

//成员属性

//保存第一轮比赛选手编号容器

vector<int> v1;

//第一轮晋级选手编号容器

vector<int> v2;

//胜出前三名选手编号容器

vector<int> vVictory;

//存放编号以及对应具体选手容器

map<int, Speaker> m_Speaker;

//存放比赛轮数

int m_Index;

;

speaker.h

#pragma once

#include <iostream>

using namespace std;

class Speaker



public:

string m_Name; //姓名

double m_Score[2]; //分数 最高有两轮得分

;

以上是关于C++演讲比赛项目的主要内容,如果未能解决你的问题,请参考以下文章

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

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

2022华为机试真题 C++ 实现统计射击比赛成绩

C++演讲比赛

C++演讲比赛

陈立杰演讲稿