本文主要是介绍C++项目之演讲比赛模拟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
演讲系统(SpeechContext)小结
前记
最近把C++
的知识点过了一遍,虽然说不能完全的了解C++
语言的特性,但是也发现了它的美,后面想要学习C++
的热情高涨,故完成了一个小项目,来达到温故知新的效果吧。
主要涉及知识点:类、STL等
需求
1.比赛规则
- 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。
- 每次比赛共有10名裁判分别对每个选手进行打分。
- 比赛方式:分组比赛,每组6个人;选手每次要随机分组,进行比赛
- 每名选手都有对应的编号,如 10001 ~ 10012
- 第一轮分为两个小组,每组6个人。 整体按照选手编号进行抽签后顺序演讲。
- 当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛。
- 第二轮为决赛,前三名胜出
- 每轮比赛过后需要显示晋级选手的信息
2.程序功能
- 开始演讲比赛:完成整届比赛的流程,每个比赛阶段需要给用户一个提示,用户按任意键后继续下一个阶段
- 查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
- 清空比赛记录:将文件中数据清空
- 退出比赛程序:可以退出当前程序
需求分析与功能设计
在这之前,我们首先创建两个类:
第一个类表示比赛选手类,记录了当前比赛的选手信息,如选手编号,以及分数等,记作speaker.h
,只是需要当作头文件即可;
第二个类表示比赛流程类,记录了整个比赛的信息,如比赛流程,记录显示等等,同样的,我们将其声明和其实现分开,分别记作speechmanager.h
和speechmanager.cpp
1.总体功能面板的设计
首先,观察可知,比赛总共的可以分为四个分支,那么总体main函数里面可以采用分支结构,switch…case…语句来完成,可以按照项目所给的需求得到顺序(也可以按照自己喜欢的)。
switch(choice){case 1: //开始比赛break;case 2: //查看记录break;case 3: //清空记录break;case 0: //退出系统break;default:system("cls"); //清屏break;}
得到了上面的这个流程,我们需要给用户提示功能,可以设计一个展示这个数字的含义的方法,可以将其加入到头文件中声明,cpp文件中实现:
void SpeechManager::showMenu() {cout << "********************************************" << endl;cout << "************* 欢迎参加演讲比赛 ************" << endl;cout << "************* 1.开始演讲比赛 *************" << endl;cout << "************* 2.查看往届记录 *************" << endl;cout << "************* 3.清空比赛记录 *************" << endl;cout << "************* 0.退出比赛程序 *************" << endl;cout << "********************************************" << endl;cout << endl;
}
2.退出系统功能设计
我们首先设计的是退出系统功能的设计,相对于来说,这个功能是比较好实现的,只需要一个方法即可。可以将其声明在比赛的流程类的头文件中,然后在cpp文件中去实现这个方法,方法的简单实现如下:
void SpeechManager::systemExit() {exit(0);
}
3.开始比赛功能设计
这一块主要的功能是能够分析清楚比赛的整体流程,按照项目的要求,来模拟整个比赛的流程:
可以分析如下:
首先是存在12名选手,然后随机将其分为2组,每组6个人(抽签分组),完成了这个内容之后,那么可以开始第一轮比赛,每个小组取前三名选手进入第二轮比赛,现在总共的就是存在6名选手,再次抽签,进行第二轮比赛,然后等到第二轮比赛结束之后,记录前三名选手的信息(编号,以及分数),保存到文件中。这个就是整体的流程,将上面的文字使用方法的流程体现出来如下:
// 比赛流程实现
void SpeechManager::startSpeech() {//第一轮比赛//1、抽签//2、比赛//3、显示晋级结果//第二轮比赛//1、抽签//2、比赛//3、显示最终结果//4、保存分数
}
在这个里面,我们就是需要设计四个方法,分别是抽签、比赛、显示晋级结果、保存分数,有了整体的流程,那么可以开始来实现单个方法。
3.1 抽签
模拟抽签的话,就是将选手的编号信息即可。我们可以采用vector
来存储选手,然后将vector shuffle即可。
void SpeechManager::speechDraw(){// 只是需要将选手的序号打乱即可cout << "第 << " << this->m_index << " >> 轮比赛选手正在抽签"<<endl;cout << "---------------------" << endl;cout << "抽签后演讲顺序如下:" << endl;if (this->m_index == 1){random_shuffle(v1
这篇关于C++项目之演讲比赛模拟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!