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

本文介绍了使用C++实现的演讲比赛模拟系统,涵盖了比赛规则、程序功能设计,包括抽签、比赛、显示晋级结果和保存分数等功能。通过该项目,作者复习了C++的类和STL,并提供了功能实现的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

演讲系统(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值