IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 基于STL的演讲比赛流程管理系统(C++STL实战) -> 正文阅读

[C++知识库]基于STL的演讲比赛流程管理系统(C++STL实战)

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 SpeechManager
{
public:
	//构造函数
	SpeechManager()
	{

	}
	//析构函数
	~SpeechManager()
	{

	}
};

3.3源文件实现

#include"speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{

}
//析构函数
SpeechManager::~SpeechManager()
{

}

4.菜单功能

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

4.1添加成员函数

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

//展示菜单
	void show_Menu();

4.2菜单功能实现

在管理类speechManager.cpp中实现成员函数void 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测试菜单功能

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

5.退出功能

功能实现:实现退出程序

5.1提供功能接口

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

代码:

#include <iostream>
using namespace std;
#include"speechManager.h"
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;
}

5.2实现退出功能

在speechManager.h中提供成员函数void exitSystem();

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

//退出系统
	void exitSystem();
//退出系统
void SpeechManager::exitSystem()
{
	cout << "欢迎下次使用!" << endl;
	system("pause");
	exit(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 initSpeaker();

	//初始化容器和属性
	void initSpeech();

在speechManager.cpp中实现初始化属性函数void initSpeaker();

//初始化容器和属性
void SpeechManager::initSpeech()
{
	//容器置空
	v1.clear();
	v2.clear();
	vVictory.clear();
	m_Speaker.clear();
	//初始化比赛轮数
	m_Index = 1;
}

在speechmanager.cpp构造函数中调用void initSpeech();

SpeechManager::SpeechManager()
{
	//初始化容器和属性
	initSpeech();
}

6.3.3创建选手

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

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

在speechManager.cpp中 实现开始比赛的成员函数void creatSpeaker();

//初始化创建12名选手
void SpeechManager::creatSpeaker()
{
	string nameSeed = "ABSDEFGHIJKL";
	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的容器中
		v1.push_back(i + 10001);
		//选手编号以及对应选手 放入到map容器中
		m_Speaker.insert(make_pair(i + 10001, sp));
	}
}

在speechmanager.cpp构造函数中调用void creatSpeaker();

//创建12名选手
	creatSpeaker();

在main函数中,测试

//测试12名选手创建
	for (map<int, Speaker>::iterator it = sm.m_Speaker.begin(); it != sm.m_Speaker.end(); it++)
	{
		cout << "编号:" << it->first << "\t姓名:" << it->second.m_name << "\t分数:" << it->second.m_score << endl;
	}

6.3.4开始比赛成员函数添加

  • 在speechManager.h中提供开始比赛的成员函数void startSpeech();
    	//开始比赛
    	void startSpeech();
  • 该函数的主要功能是控制比赛流程
  • 在speechManager.cpp中将startSpeech的空实现先写入
  • 将整个比赛的流程写入到函数中
//开始比赛 
void SpeechManager::startSpeech()
{
	//第一轮开始比赛
	//1.抽签
	speechDraw();
	//2.比赛

	//3.显示晋级结果

	//第二轮开始比赛

	//1.抽签

	//2.比赛

	//3.显示最终结果
}

6.3.5抽签

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

//抽签
	void speechDraw();

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

//开始比赛 
void SpeechManager::startSpeech()
{
	//第一轮开始比赛
	//1.抽签
	speechDraw();
	//2.比赛

	//3.显示晋级结果

	//第二轮开始比赛

	//1.抽签

	//2.比赛

	//3.显示最终结果
}
//抽签
void SpeechManager::speechDraw()
{
	cout << "第<<" << m_Index << ">>轮比赛选手正抽签" << endl;
	cout << "---------------------------------------------------" << endl;
	cout << "抽签后演讲顺序如下: " << endl;
	if (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 = v1.begin(); it != v1.end(); it++)
		{
			cout << *it << " ";
		}
		cout << endl;
	}
	cout << "---------------------------------------------------------" << endl;
	system("pause");
	cout << endl;
}

6.3.6开始比赛

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 11:49:20  更:2021-08-30 11:51:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/15 23:53:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码