我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++演讲比赛管理系统实现流程实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++演讲比赛管理系统实现流程实例

演讲比赛系统

1.需求分析

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

2.程序和功能

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

3.程序逻辑

3.1建立演讲比赛管理类

	void SaveRecord();
	//初始化
	void InitSpeech();
	//判断文件是否为空
	bool File_Is_Empty;
	//往届数据的容器
	map<int, vector<string>>M_Record;
	~Speech_Manager();
	void CreatSpeaker();
	string CreatName(int a);
	void ShowScore();
	void Wait_Revolution();
	//往届记录
	void ShowRecord();
	//清空记录
	void ClearRecord();
	//读取记录
	void LoadRecod();
	//创建轮数
	int Revolution;
	//第一轮比赛人员编号
	vector<int>v1;
	//第二轮比赛人数编号
	vector<int>v2;
	//获胜人编号
	vector<int>vVictory;
	//存放编号和对应具体选手的容器
	map<int, Speaker>M_Speker;
	//存放届数
};

3.2开始演讲比赛程序

比赛流程分析:

抽签—>开始第一轮演讲比赛—>显示第一轮比赛结果—>抽签—>开始第二论比赛—>

显示前三名结果—>保存分数。

void Speech_Manager::SpeechConst()
{
	
	cout << "----------------第" << this->Revolution << "轮比赛开始-----------------" << endl;
	multimap<double, int, greater<double>>GroupScore;
	int num = 0;
	vector<int>V_class="lazy" data-src;//参赛容器
	if (this->Revolution == 1)
	{
		V_class="lazy" data-src = v1;
	}
	else
	{
		V_class="lazy" data-src = v2;
	}
	//遍历选手
	for (vector<int>::iterator it = V_class="lazy" data-src.begin(); it != V_class="lazy" data-src.end(); it++)
	{
		num++;
		deque<double>d;
		for (int i = 0; i < 10; i++)
		{
			double score = (rand() % 401 + 600) / 10.f;
			d.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 average = sum / (double)d.size();//平均分
			//将平均分放入到map容器当中
			this->M_Speker[*it].M_Score[this->Revolution - 1] = average;
			GroupScore.insert(make_pair(average, *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_Speker[it->second].M_Name
						<< "成绩:" << this->M_Speker[it->second].M_Score[this->Revolution - 1] << endl;
				}
				int count = 0;
				for (multimap<double, int, greater<double>>::iterator it = GroupScore.begin(); it != GroupScore.end()&&count<3; it++,count++)
				{
					if (this->Revolution == 1)
					{
						v2.push_back((*it).second);
					}
					else
					{
						vVictory.push_back((*it).second);
					}
				}
				GroupScore.clear();
				cout << endl;
			}
		}
		cout << "-------------第" << this->Revolution << "轮比赛结束-------------" << endl;
	system("pause");
}
void Speech_Manager::ShowScore()
{
	cout << "-------------第" << this->Revolution << "轮晋级选手信息如下:----------" << endl;
	vector<int>v;
	if (this->Revolution == 1)
	{
		v = v2;
	}
	else
	{
		v = vVictory;
	}
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "选手编号:" << *it << "性别:" << this->M_Speker[*it].M_Sex << "姓名:" << this->M_Speker[*it].M_Name
			<< "得分:" << this->M_Speker[*it].M_Score[this->Revolution - 1] << endl;
	}
	cout << endl;
	system("pause");
	system("cls");
	this->ShowmMenu();
}

3.3查看往届比赛结果程序

void Speech_Manager::ShowRecord()
{
	if (this->File_Is_Empty)
	{
		cout << "显示失败!文件为空或者不存在!";
	}
	else
	{ 
		for (int i = 0; i < this->M_Record.size(); i++)
		{
			//cout << this->M_Record.size();
			cout << "第" << i + 1 << "届比赛结果如下:" << endl;
			cout << "冠军编号:" << this->M_Record[i][0] << "\t"<<"   姓名:" << this->M_Record[i][1] 
				<< "\t" <<"性别:" <<this->M_Record[i][2] << "\t" <<"得分:"<< this->M_Record[i][3] <<endl;
			cout << "亚军编号:" << this->M_Record[i][4] << "\t" << "   姓名:" << this->M_Record[i][5]
				<< "\t" << "性别:" << this->M_Record[i][6] << "\t" << "得分:" << this->M_Record[i][7] << endl;
			cout << "季军编号:" << this->M_Record[i][8] << "\t" << "   姓名:" << this->M_Record[i][9]
				<< "\t" << "性别:" << this->M_Record[i][10] << "\t" << "得分:" << this->M_Record[i][11] << endl;
		}
	}
	system("pause");
	system("cls");
}

3.4清空记录

void Speech_Manager::ClearRecord()
{
	cout << "是否清空文件记录" << endl;
	cout << "1.确定" << endl;
	cout << "2.否认" << endl;
	int select = 0;
	cin >> select;
	if (select == 1)
	{
		//确认清空
		ofstream ofs("File_Name.txt",ios::trunc);
		ofs.close();
		this->InitSpeech();
		this->CreatSpeaker();
		//加载往届记录
		this->LoadRecod();
		cout << "清空成功" << endl;
	}
	system("pause");
	system("cls");
	}

3.5等待程序和随机产生姓名程序

oid Speech_Manager::Wait_Revolution()
{
	for (int i = 0; i < 3; i++)
{
	cout << "Wait ";
	for (int j = 0; j < 3; j++)
	{
		Sleep(1500);
		cout << " * ";
	}
	system("cls");
	cout << "正在抽签,请等待" << endl;
}
}
string Speech_Manager::CreatName(int a)//a随机次数,a不同导致不同结果。
{
	string name;
	string NA1[] = { "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋" };
	string NA2[] = { "伟", "刚", "勇", "毅", "俊", "峰","秀", "娟", "英", "华", "慧" };
	srand((unsigned int)(time)(NULL));
	for (int i = 0; i < a; i++)
	{
		name = NA1[rand() % (sizeof(NA1) / sizeof(NA1[0]))];
		name += NA2[rand() % (sizeof(NA2) / sizeof(NA2[0]))];
	}
	return name;
}

4.程序下载

链接: https://pan.baidu.com/s/1f-43Ne9MWCU1kYstJfU5Xg?pwd=nswe

提取码: nswe 

到此这篇关于C++演讲比赛管理系统实现流程实例的文章就介绍到这了,更多相关C++演讲比赛管理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++演讲比赛管理系统实现流程实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++演讲比赛管理系统实现流程实例

这篇文章主要介绍了C++演讲比赛管理系统实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-11-13

C++机房预约系统实现流程实例

这篇文章主要介绍了C++机房预约系统实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-11-13

Python使用pyinstaller实现学生管理系统流程

pyinstaller是一个非常简单的打包python的py文件的库,下面这篇文章主要给大家介绍了关于Python Pyinstaller库安装步骤以及使用方法的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
2023-02-01

C++实现停车场管理系统的示例代码

停车场管理系统就是模拟停车场进行车辆管理的系统,该系统分为汽车信息模块,用户使用模块和管理员用户模块,本文将用C++实现这一简单的系统,希望对大家有所帮助
2023-05-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录