• C++学习笔记(三十二)


    在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理C++知识点的第三十二篇博客。

    本篇博客用C++实现了演讲比赛流程管理系统,本文是上半部分。

    本系列博客所有C++代码都在Visual Studio 2022环境下编译运行。程序为64位。

    目录

    演讲比赛流程管理系统

    比赛规则与程序功能

    演讲比赛管理类

    菜单功能界面搭建

    退出系统功能实现

    选手类创建

    容器的设计以及初始化操作

    创建选手


    演讲比赛流程管理系统

    接下来是一个演讲比赛流程管理系统,这部分分为两篇博客来完成。

    比赛规则与程序功能

    学校举行了一场演讲比赛,有12个人参加,比赛分为两轮,第一轮是淘汰赛,第二轮是决赛。每位选手有自己对应的编号。

    比赛第一轮分组比赛,每组6人,按照选手抽签顺序演讲。有十位评委打分,去掉最高分和最低分后取剩下的平均分作为本轮成绩。每组的前三名晋级。

    第二轮是决赛,评分规则同第一轮,前三名胜出。

    要求程序在每轮比赛过后显示晋级选手的信息。

    程序需要有以下四个功能:

    开始演讲比赛,完成整场比赛的流程,每个比赛阶段给用户一个提示,按任意键进入下一个阶段。

    查看往届记录,查看之前每届比赛前三名结果,每次比赛结果记录到文件中,文件后缀csv。

    清空比赛记录,删除文件中记录。

    退出比赛程序:退出当前程序。

    本程序用了四个文件。speaker.h有speaker类,存放选手信息。speechmanager.h和speechmanager.cpp存放了关于比赛流程的speechmanager类的所有内容。speechcontest.cpp有程序的main函数。

    演讲比赛管理类

    1. #pragma once
    2. #include
    3. #include
    4. #include"speaker.h"
    5. class speechmanager
    6. {
    7. public:
    8. speechmanager();
    9. void show_menu();
    10. void exit_system();
    11. ~speechmanager();
    12. void init_speaker();
    13. void make_speaker();
    14. void start_contest();
    15. void draw_speaker();
    16. void speech_contest();
    17. void save_result();
    18. void read_result();
    19. void clear_result();
    20. vector<int> v1;
    21. vector<int> v2;
    22. vector<int> v3;
    23. map<int, speaker> m;
    24. int index;
    25. };

    这是speechmanager.h的所有内容,里面的成员函数以及成员变量的作用在下文会解释。

    菜单功能界面搭建

    1. #include
    2. #include"speechmanager.h"
    3. using namespace std;
    4. int main(void)
    5. {
    6. speechmanager sm;
    7. while (true)
    8. {
    9. sm.show_menu();
    10. int choice;
    11. cout << "Please enter the choice: ";
    12. cin >> choice;
    13. switch (choice)
    14. {
    15. case 0:
    16. sm.exit_system();
    17. break;
    18. case 1:
    19. sm.start_contest();
    20. break;
    21. case 2:
    22. sm.read_result();
    23. break;
    24. case 3:
    25. sm.clear_result();
    26. break;
    27. default:
    28. cout << "Please enter 0,1,2 or 3" << endl;
    29. system("pause");
    30. system("cls");
    31. break;
    32. }
    33. if (choice == 0) {
    34. break;
    35. }
    36. }
    37. return 0;
    38. }

    这是speechcontest.cpp的内容,创建一个speechmanager类对象sm,随后使用用死循环。每次循环先给出菜单,然后要求输入选项,不同选项进入sm的不同成员函数。输入0退出循环并结束程序,输入其他选项要求重新输入。

    1. void speechmanager::show_menu()
    2. {
    3. cout << "****************************************" << endl;
    4. cout << "********** 1. begin the contest ********" << endl;
    5. cout << "********** 2. watch the result *********" << endl;
    6. cout << "********** 3. clear the result *********" << endl;
    7. cout << "********** 0. exit the program *********" << endl;
    8. cout << "****************************************" << endl;
    9. }

    这是speechmanager类的show_menu成员函数,输出菜单。

    退出系统功能实现

    1. void speechmanager::exit_system()
    2. {
    3. cout << "Welcome to use again" << endl;
    4. system("pause");
    5. system("cls");
    6. }

    这是speechmanager类的exit_system成员函数,输出Welcome to use again。

    选手类创建

    1. #pragma once
    2. #include
    3. #include
    4. using namespace std;
    5. class speaker
    6. {
    7. public:
    8. string name;
    9. double scorea;
    10. double scoreb;
    11. };

    这是speaker.h的内容,创建了一个speaker类,是选手类。成员变量name表示姓名,成员变量scorea表示第一轮成绩,成员变量scoreb表示第二轮成绩。

    容器的设计以及初始化操作

    v1 v2 v3存放的是选手编号,v1是所有选手,v2是第一轮晋级选手,v3是胜出选手。m的键是选手编号,值是编号对应的学生类。

    1. speechmanager::speechmanager()
    2. {
    3. srand((unsigned int)time(NULL));
    4. init_speaker();
    5. make_speaker();
    6. }

    这是speechmanager类的构造函数。调用了init_speaker成员函数和make_speaker类成员函数。初始化随机种子是因为本程序的分数是利用了随机数。

    1. void speechmanager::init_speaker()
    2. {
    3. v1.clear();
    4. v2.clear();
    5. v3.clear();
    6. m.clear();
    7. }

    init_speaker成员函数清空v1 v2 v3和m的内容,此函数结束后这四个容器全部为空置状态。

    创建选手

    1. void speechmanager::make_speaker()
    2. {
    3. speaker sp1;
    4. sp1.name = "Guillermo";
    5. sp1.scorea = 0;
    6. sp1.scoreb = 0;
    7. v1.push_back(2022072701);
    8. m.insert(make_pair(2022072701, sp1));
    9. speaker sp2;
    10. sp2.name = "Grace";
    11. sp2.scorea = 0;
    12. sp2.scoreb = 0;
    13. v1.push_back(2022072702);
    14. m.insert(make_pair(2022072702, sp2));
    15. speaker sp3;
    16. sp3.name = "Georgette";
    17. sp3.scorea = 0;
    18. sp3.scoreb = 0;
    19. v1.push_back(2022072703);
    20. m.insert(make_pair(2022072703, sp3));
    21. speaker sp4;
    22. sp4.name = "Gaston";
    23. sp4.scorea = 0;
    24. sp4.scoreb = 0;
    25. v1.push_back(2022072704);
    26. m.insert(make_pair(2022072704, sp4));
    27. speaker sp5;
    28. sp5.name = "Greg";
    29. sp5.scorea = 0;
    30. sp5.scoreb = 0;
    31. v1.push_back(2022072705);
    32. m.insert(make_pair(2022072705, sp5));
    33. speaker sp6;
    34. sp6.name = "Gert";
    35. sp6.scorea = 0;
    36. sp6.scoreb = 0;
    37. v1.push_back(2022072706);
    38. m.insert(make_pair(2022072706, sp6));
    39. speaker sp7;
    40. sp7.name = "Gilma";
    41. sp7.scorea = 0;
    42. sp7.scoreb = 0;
    43. v1.push_back(2022072707);
    44. m.insert(make_pair(2022072707, sp7));
    45. speaker sp8;
    46. sp8.name = "Gordon";
    47. sp8.scorea = 0;
    48. sp8.scoreb = 0;
    49. v1.push_back(2022072708);
    50. m.insert(make_pair(2022072708, sp8));
    51. speaker sp9;
    52. sp9.name = "Gil";
    53. sp9.scorea = 0;
    54. sp9.scoreb = 0;
    55. v1.push_back(2022072709);
    56. m.insert(make_pair(2022072709, sp9));
    57. speaker sp10;
    58. sp10.name = "Gabrielle";
    59. sp10.scorea = 0;
    60. sp10.scoreb = 0;
    61. v1.push_back(2022072710);
    62. m.insert(make_pair(2022072710, sp10));
    63. speaker sp11;
    64. sp11.name = "Genevieve";
    65. sp11.scorea = 0;
    66. sp11.scoreb = 0;
    67. v1.push_back(2022072711);
    68. m.insert(make_pair(2022072711, sp11));
    69. speaker sp12;
    70. sp12.name = "Gonzalo";
    71. sp12.scorea = 0;
    72. sp12.scoreb = 0;
    73. v1.push_back(2022072712);
    74. m.insert(make_pair(2022072712, sp12));
    75. }

    make_speaker成员函数创建了十二个speaker类对象,每个对象的name都是单独给出,而scorea和scoreb都置为0。随后将每个选手的编号加入v1容器,编号为键对象为值加入m容器。

  • 相关阅读:
    Waymo dataset+mmdet3d的坐标系问题
    【算法合集】学习算法第三天(二叉树遍历篇)
    异或和大小比较类问题——抓住最高位:CF1863F
    [附源码]java毕业设计汽车租赁管理系统论文
    详细图解 Netty Reactor 启动全流程
    STM32问题记录-S50卡只能读取id,不能读取数据(未解决)
    对角线的输出
    分享一种Android端IM即时通讯智能心跳算法
    在列表中按照概率抽样choice()
    【Linux】400行纯C语言代码带你【手撕线程池】
  • 原文地址:https://blog.csdn.net/m0_71007572/article/details/126447364