C++项目之演讲比赛模拟

2024-01-02 17:18
文章标签 c++ 项目 模拟 演讲比赛

本文主要是介绍C++项目之演讲比赛模拟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

演讲系统(SpeechContext)小结

前记

最近把C++ 的知识点过了一遍,虽然说不能完全的了解C++语言的特性,但是也发现了它的美,后面想要学习C++的热情高涨,故完成了一个小项目,来达到温故知新的效果吧。

主要涉及知识点:类、STL等

需求

1.比赛规则
  • 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。
  • 每次比赛共有10名裁判分别对每个选手进行打分。
  • 比赛方式:分组比赛,每组6个人;选手每次要随机分组,进行比赛
  • 每名选手都有对应的编号,如 10001 ~ 10012
  • 第一轮分为两个小组,每组6个人。 整体按照选手编号进行抽签后顺序演讲。
  • 当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛。
  • 第二轮为决赛,前三名胜出
  • 每轮比赛过后需要显示晋级选手的信息
2.程序功能
  • 开始演讲比赛:完成整届比赛的流程,每个比赛阶段需要给用户一个提示,用户按任意键后继续下一个阶段
  • 查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
  • 清空比赛记录:将文件中数据清空
  • 退出比赛程序:可以退出当前程序

需求分析与功能设计

在这之前,我们首先创建两个类:

第一个类表示比赛选手类,记录了当前比赛的选手信息,如选手编号,以及分数等,记作speaker.h,只是需要当作头文件即可;

第二个类表示比赛流程类,记录了整个比赛的信息,如比赛流程,记录显示等等,同样的,我们将其声明和其实现分开,分别记作speechmanager.hspeechmanager.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++项目之演讲比赛模拟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563138

相关文章

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文