#pragma once #includespeechManager.husing namespace std; class Speaker { public: string m_Name; double m_Score[2]; };
#pragma once #includespeechManager.app#include #include #include #include #include
#include "speechManager.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::initSpeech() { this->v1.clear(); this->v2.clear(); this->vVictor.clear(); this->m_Speaker.clear(); this->m_Index = 1; //记录容器清空 this->m_Record.clear(); } //创建12名选手 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; sp.m_Score[0]=0; sp.m_Score[1] = 0; //创建选手的编号放到v1容器中去 this->v1.push_back(i + 10001); 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(); //重置比赛 实时更新 //初始化属性 this->initSpeech(); //创建12名选手 this->createSpeaker(); //加载已存在文件中的数据到内存里面 this->loadRecord(); cout << "本届比赛完毕" << endl; system("pause"); system("cls"); } //1.第一轮比赛 //1.抽签 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演讲比赛流程管理系统.app::iterator it = v1.begin(); it != v1.end(); it++) { cout << *it << " "; } cout << endl; } else { //第二轮比赛 random_shuffle(v2.begin(), v2.end()); for (vector ::iterator it = v2.begin(); it != v2.end(); it++) { cout << *it << " "; } cout << endl; } cout << "-------------------------" << endl; system("pause"); //system("cls"); } //2.比赛 void SpeechManager::speechContest() { cout << "第<<" << this->m_Index << ">>轮的比赛正式开始:" << endl; cout << "-----------------------------" << endl; int num = 0;//记录小组人员的个数 //准备临时容器存放小组成绩 自动从大到小排序 multimap > groupScore; vector v_Src;//存放比赛选手的临时容器 if (this->m_Index == 1) { v_Src = v1;//内置数据类型 不需要重写== } else { v_Src = v2; } //遍历所有的选手开始比赛 for (vector ::iterator it = v_Src.begin(); it != v_Src.end(); it++) { num++;//统计是6个人还是12个人 //评委打分 deque d; //cout << "第" << *it << "编号的选手的10个评委的打分如下:" << endl; for (int i = 0; i < 10; i++) { double score = (rand() % 401 + 600) / 10.f; //cout << score << " "; d.push_back(score); } //cout << endl; //排序 去除最高最低分 然后求平均分 sort(d.begin(), d.end(), greater ()); d.pop_front(); d.pop_back(); double sum = accumulate(d.begin(), d.end(), 0.0f); double avg = sum / (double)d.size(); //将平均分放到map容器中去 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 >::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; } cout << endl; //取走前三名放到下一个容器当中 int count = 0; for (multimap >::iterator it = groupScore.begin(); it != groupScore.end(); it++) { if (count < 3) { if (this->m_Index == 1) { v2.push_back((*it).second); } else { vVictor.push_back((*it).second); } } count++; } groupScore.clear(); } } cout << "-----------第" << this->m_Index << "轮比赛完毕-------" << endl; system("pause"); } //3.显示晋级结果 void SpeechManager::showScore() { cout << "---------第" << this->m_Index << "轮晋级选手信息如下:-----------" << endl; vector v; if (this->m_Index == 1) { v = v2; } else { v = vVictor; } for (vector ::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 ::iterator it = vVictor.begin(); it != vVictor.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容器中去 vector 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); //找到了,进行分割 参数1 起始位置,参数2 截取长度 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) { //打开模式 ios::trunc 如果存在删除文件并重新创建 ofstream ofs("speech.csv", ios::trunc); ofs.close(); //初始化属性 this->initSpeech(); //创建选手 this->createSpeaker(); //获取往届记录 this->loadRecord(); cout << "清空成功!" << endl; } system("pause"); system("cls"); } //退出系统 void SpeechManager::exist_System() { cout << "欢迎下次使用" << endl; system("pause"); exit(0); } //析构函数 SpeechManager::~SpeechManager() { }
#include "speechManager.h" int main() { SpeechManager sm; srand((unsigned int)time(NULL)); 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.exist_System(); break; default: system("cls"); break; } } system("pause"); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)