《黑马程序员》演讲比赛管理系统实战,mysql数据库调优面试

在管理类speechManager.h中添加成员函数 void show_Menu();

在这里插入图片描述

4.2 菜单功能实现

  • 在管理类speechManager.cpp中实现 show_Menu()函数

void SpeechManager::show_Menu()

{

cout << “********************************************” << endl;

cout << “************* 欢迎参加演讲比赛 ************” << endl;

cout << “************* 1.开始演讲比赛 *************” << endl;

cout << “************* 2.查看往届记录 *************” << endl;

cout << “************* 3.清空比赛记录 *************” << endl;

cout << “************* 0.退出比赛程序 *************” << endl;

cout << “********************************************” << endl;

cout << endl;

}

4.3 测试菜单功能

  • 在演讲比赛流程管理系统.cpp中测试菜单功能

代码:

#include

using namespace std;

#include “speechManager.h”

int main() {

SpeechManager sm;

sm.show_Menu();

system(“pause”);

return 0;

}

  • 运行效果如图:

在这里插入图片描述

  • 菜单界面搭建完毕

5、 退出功能


5.1 提供功能接口

  • 在main函数中提供分支选择,提供每个功能接口

代码:

int main() {

SpeechManager sm;

int choice = 0; //用来存储用户的选项

while (true)

{

sm.show_Menu();

cout << "请输入您的选择: " << endl;

cin >> choice; // 接受用户的选项

switch (choice)

{

case 1: //开始比赛

break;

case 2: //查看记录

break;

case 3: //清空记录

break;

case 0: //退出系统

break;

default:

system(“cls”); //清屏

break;

}

}

system(“pause”);

return 0;

}

5.2 实现退出功能

在speechManager.h中提供退出系统的成员函数 void exitSystem();

在speechManager.cpp中提供具体的功能实现

void SpeechManager::exitSystem()

{

cout << “欢迎下次使用” << endl;

system(“pause”);

exit(0);

}

5.3测试功能

在main函数分支 0 选项中,调用退出程序的接口

在这里插入图片描述

运行测试效果如图:

在这里插入图片描述

6、演讲比赛功能


6.1 功能分析

比赛流程分析:

抽签 → 开始演讲比赛 → 显示第一轮比赛结果 →

抽签 → 开始演讲比赛 → 显示前三名结果 → 保存分数

6.2 创建选手类

  • 选手类中的属性包含:选手姓名、分数

  • 头文件中创建 speaker.h文件,并添加代码:

#pragma once

#include

using namespace std;

class Speaker

{

public:

string m_Name; //姓名

double m_Score[2]; //分数 最多有两轮得分

};

6.3 比赛

6.3.1 成员属性添加
  • 在speechManager.h中添加属性

//比赛选手 容器 12人

vectorv1;

//第一轮晋级容器 6人

vectorv2;

//胜利前三名容器 3人

vectorvVictory;

//存放编号 以及对应的 具体选手 容器

map<int, Speaker> m_Speaker;

6.3.2 初始化属性
  • 在speechManager.h中提供开始比赛的的成员函数 void initSpeech();

//初始化属性

void initSpeech();

  • 在speechManager.cpp中实现void initSpeech();

void SpeechManager::initSpeech()

{

//容器保证为空

this->v1.clear();

this->v2.clear();

this->vVictory.clear();

this->m_Speaker.clear();

//初始化比赛轮数

this->m_Index = 1;

}

  • SpeechManager构造函数中调用void initSpeech();

SpeechManager::SpeechManager()

{

//初始化属性

this->initSpeech();

}

6.3.3 创建选手
  • 在speechManager.h中提供开始比赛的的成员函数 void createSpeaker();

//初始化创建12名选手

void createSpeaker();

  • 在speechManager.cpp中实现void createSpeaker();

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;

}

//12名选手编号

this->v1.push_back(i + 10001);

//选手编号 以及对应的选手 存放到map容器中

this->m_Speaker.insert(make_pair(i + 10001, sp));

}

}

  • SpeechManager类的 构造函数中调用void createSpeaker();

SpeechManager::SpeechManager()

{

//初始化属性

this->initSpeech();

//创建选手

this->createSpeaker();

}

  • 测试 在main函数中,可以在创建完管理对象后,使用下列代码测试12名选手初始状态

for (map<int, Speaker>::iterator it = sm.m_Speaker.begin(); it != sm.m_Speaker.end(); it++)

{

cout << “选手编号:” << it->first

<< " 姓名: " << it->second.m_Name

<< " 成绩: " << it->second.m_Score[0] << endl;

}

在这里插入图片描述

  • 测试效果如图:

在这里插入图片描述

  • 测试完毕后,可以将测试代码删除或注释。
6.3.4 开始比赛成员函数添加
  • 在speechManager.h中提供开始比赛的的成员函数 void startSpeech();

  • 该函数功能是主要控制比赛的流程

//开始比赛 - 比赛流程控制

void startSpeech();

  • 在speechManager.cpp中将startSpeech的空实现先写入

  • 我们可以先将整个比赛的流程 写到函数中

//开始比赛

void SpeechManager::startSpeech()

{

//第一轮比赛

//1、抽签

//2、比赛

//3、显示晋级结果

//第二轮比赛

//1、抽签

//2、比赛

//3、显示最终结果

//4、保存分数

}

6.3.5 抽签

功能描述:

  • 正式比赛前,所有选手的比赛顺序需要打乱,我们只需要将存放选手编号的容器 打乱次序即可

  • 在speechManager.h中提供抽签的的成员函数 void speechDraw();

//抽签

void speechDraw();

  • 在speechManager.cpp中实现成员函数 void speechDraw();

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::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”);

cout << endl;

}

  • 在startSpeech比赛流程控制的函数中,调用抽签函数

在这里插入图片描述

  • 在main函数中,分支1选项中,调用开始比赛的接口

在这里插入图片描述

  • 测试

在这里插入图片描述

6.3.6 开始比赛
  • 在speechManager.h中提供比赛的的成员函数 void speechContest();

//比赛

void speechContest();

  • 在speechManager.cpp中实现成员函数 void speechContest();

void SpeechManager::speechContest()

{

cout << “------------- 第”<< this->m_Index << "轮正式比赛开始:------------- " << endl;

multimap<double, int, greater> groupScore; //临时容器,保存key分数 value 选手编号

int num = 0; //记录人员数,6个为1组

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++;

//评委打分

dequed;

for (int i = 0; i < 10; i++)

{

double score = (rand() % 401 + 600) / 10.f; // 600 ~ 1000

//cout << score << " ";

d.push_back(score);

}

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(); //获取平均分

//每个人平均分

//cout << "编号: " << *it << " 选手: " << this->m_Speaker[*it].m_Name << " 获取平均分为: " << avg << endl; //打印分数

this->m_Speaker[*it].m_Score[this->m_Index - 1] = avg;

//6个人一组,用临时容器保存

groupScore.insert(make_pair(avg, *it));

if (num % 6 == 0)

{

cout << “第” << num / 6 << “小组比赛名次:” << endl;

for (multimap<double, int, greater>::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>::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”);

}

  • 在startSpeech比赛流程控制的函数中,调用比赛函数

在这里插入图片描述

  • 再次运行代码,测试比赛

在这里插入图片描述

6.3.7 显示比赛分数
  • 在speechManager.h中提供比赛的的成员函数 void showScore();

//显示比赛结果

void showScore();

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

e_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0F1Z2Vuc3Rlcm5fUVhM,size_16,color_FFFFFF,t_70#pic_center)

  • 再次运行代码,测试比赛

在这里插入图片描述

6.3.7 显示比赛分数
  • 在speechManager.h中提供比赛的的成员函数 void showScore();

//显示比赛结果

void showScore();

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-DLwohl7y-1710900378425)]
[外链图片转存中…(img-uO72yFHE-1710900378426)]
[外链图片转存中…(img-GlidLNHm-1710900378426)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-P13lXNbA-1710900378427)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值