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

news/2025/2/1 11:42:49/文章来源:https://www.cnblogs.com/lotuslaw/p/18696228

1.需求

2.文件目录

3.代码

3.1Speaker.h

#pragma once
#include<iostream>
using namespace std;class Speaker {public:string m_Name;double m_Score[2];};

3.2SpeechManager.h

#pragma once
#include<iostream>
#include<vector>
#include "Speaker.h"
#include<map>
#include<algorithm>
#include<functional>
#include<deque>
#include<numeric>
#include<fstream>
using namespace std;class SpeechManager {public:vector<int> v1;vector<int> v2;vector<int> vVictory;map<int, Speaker> m_Speaker;int m_Index;bool fileIsEmpty;map<int, vector<string>> m_Record;public:SpeechManager();void showMenu();void exitSystem();void initSpeech();void createSpeaker();void startSpeech();void speechDraw();void speechContest();void showScore();void saveRecord();void loadRecord();void showRecord();void clearRecord();~SpeechManager();};

3.3SpeechManager.cpp

#include "SpeechManager.h"SpeechManager::SpeechManager() {this->initSpeech();this->createSpeaker();this->loadRecord();
}SpeechManager::~SpeechManager() {}void SpeechManager::showMenu() {cout << "********************************************" << endl;cout << "*************  欢迎参加演讲比赛 ************" << endl;cout << "*************  1.开始演讲比赛  *************" << endl;cout << "*************  2.查看往届记录  *************" << endl;cout << "*************  3.清空比赛记录  *************" << endl;cout << "*************  0.退出比赛程序  *************" << endl;cout << "********************************************" << endl;cout << endl;
}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;}this->v1.push_back(i + 10001);this->m_Speaker.insert(make_pair(i + 10001, sp));}
}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());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;int num = 0;vector<int> v_Src;if (this->m_Index == 1) {v_Src = this->v1;}else {v_Src = this->v2;}for (vector<int>::iterator it = v_Src.begin(); it != v_Src.end(); it++) {num++;deque<double> d;for (vector<int>::iterator it = v_Src.begin(); it != v_Src.end(); it++) {double score = (rand() % 401 + 600) / 10.f;d.push_back(score);}sort(d.begin(), d.end(), greater<double>());d.pop_back();d.pop_front();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;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->showMenu();
}void SpeechManager::saveRecord() {ofstream ofs;ofs.open("speech.csv", ios::out | ios::app);for (auto idx : this->vVictory) {ofs << idx << "," << this->m_Speaker[idx].m_Score[1] << ",";}ofs << endl;ofs.close();cout << "记录已经保存" << endl;this->fileIsEmpty = false;
}void SpeechManager::startSpeech() {// 第一轮抽签this->speechDraw();// 第一轮比赛this->speechContest();// 显式晋级结果this->showScore();// 第二轮比赛this->m_Index++;// 第二轮抽签this->speechDraw();// 第二轮比赛this->speechContest();// 显式最终结果this->showScore();// 保存分数this->saveRecord();// 初始化属性this->initSpeech();this->createSpeaker();this->loadRecord();cout << "本届比赛完毕" << endl;system("pause");system("cls");
}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);if (pos == -1) {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;}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();this->createSpeaker();this->loadRecord();cout << "清空成功!" << endl;}system("pause");system("cls");
}

3.4演讲比赛管理系统.cpp

#include<iostream>
#include "SpeechManager.h"
#include<ctime>
using namespace std;int main() {srand((unsigned int)time(NULL));SpeechManager sm;int choice = 0;while (true) {sm.showMenu();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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877532.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen2.5-VL:更强大的多模态大模型|附实测结果

模型更新简述 几天前,通义千问更新了最新的多模态大模型Qwen2.5-VL,拥有包含 3B、7B 和 72B 在内的 3 个模型尺寸,同时完全开源,可在huggingface和modelscope下载到所有模型权重。 1. 更灵活的时空维度处理 ● 空间维度上,动态地将不同尺寸的图像转换为不同长度的token,并…

第五节上,图像分类实战,食物分类

随机种子固定随机结果,方便复现 def seed_everything(seed):torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)torch.backends.cudnn.benchmark = Falsetorch.backends.cudnn.deterministic = Truerandom.seed(seed)np.random.seed(seed)o…

对比使用DeepSeek与文新一言,了解DeepSeek的关键技术论文

DeepSeek是国内大模型技术的新秀,最近也在业界和媒体界火爆出圈,所以想学习一下其技术。 大模型时代,学习知识,当然首先想到利用大模型,由于在过去一年,对DeepSeek使用不多,所以想和文新一言(4.0 Turbo)对比使用。 通过对比,针对同一个问题“DeepSeek发扬开源文化,将…

Cisco NX-OS Software Release 10.5(2)F - 网络操作系统软件

Cisco NX-OS Software Release 10.5(2)F - 网络操作系统软件Cisco NX-OS Software Release 10.5(2)F - 网络操作系统软件 NX-OS 网络操作系统 请访问原文链接:https://sysin.org/blog/cisco-nx-os-10/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgCisco NX-OS…

pdf处理--tts(待重写)

1.提取正文2.裁剪页眉 https://smallpdf.com/cn/crop-pdf#r=crop-pages3.拆分4.ocr 效果图--白描:效果图--4Videosoft PDF Converter Ultimate:5.阅读器与tts引擎 开源阅读:https://github.com/gedoor/legado tts-server-android:https://github.com/jing332/tts-server-an…

INFINI Labs 产品更新 | Console 发布 TopN 功能,Easysearch 新增 Rollup 能力等

INFINI Labs 产品全新发布!此次更新为大家带来了 Console 的全新 TopN 功能,让您能够更高效地定位最关键的节点或索引;Easysearch 新增 Rollup 能力,大幅提升监控指标的存储周期并优化分析体验;此外,Framework 还修复了多项缺陷并进行了多处优化。欢迎下载体验,探索更多…

03-一个例子

登录被测系统bysms双击运行runserver.bat 访问页面:http://127.0.0.1/mgr/sign.html 账号:byhy,密码:88888888 可以直接在pycharm的Terminal中运行hytest,不需要打开命令行窗口 浏览器驱动的打印信息: 禁止 chromedriver 日志写屏1 from selenium import webdriver 2 3 …

blog tips

markdown 内嵌 html 使图片并排点击查看代码 <div style="display: flex; gap: 10px; justify-content: space-between;"><img src="图片1地址" style="width: 49%; height: auto;"/><img src="图片2地址" style="…

【数学】已知正方形相邻两点坐标求另外两点坐标

已知正方形相邻两点(a,b)与(c,d)坐标公式: \( (x_3,y_3) = (c + (b-d), d - (a-c)) \\ (x_4,y_4) = (a + (b-d), b - (a-c)) \\ (x_5,y_5) = (a - (b-d), b + (a-c)) \\ (x_6,y_6) = (c - (b-d), d + (a-c)) \)

25.1.31小记

多态类型声明类型 : 定义时候的类型 动态类型 : 运行到那里的时候对应的具体类型 向上造型(cast) : 将子类类型的对象赋给父类的变量 (不能将一个父类的变量赋予一个子类的变量) 赋值运算符 : 将管理者管理的对象进行改变(改变的是指针)其中造型(cast)的意义是将某…

MacOS修改应用快捷键的一般思路

具体步骤为:使用CheatSheet软件查看菜单项名称 在系统设置中修改菜单项的快捷键举个例子:修改Chrome中左右切换tab的快捷键(系统语言为英文,中文同理) 默认采用Ccontrol Tab和Control + Shift + Tab(或Command Shift [和Command Shift ])可以左右切换tab。 现在希望将其…

UE4.27, 模块实践, Slate的UI开发 (一)

1. 基本概念1.1. Slate是虚幻UI框架设计的底层,该框架中最基本的类是SWidget1.1.1.显然,我们容易注意到,直属于该框架的类拥有着指定的命名规则,即以S开头1.2. UMG, UWidget, Slate关联1.2.1. UMG:Unreal Motion Graphics UI Designer 虚幻的图形界面设计工具1.2.2. 单纯Sl…