首页 > 其他分享 >演讲比赛流程管理系统

演讲比赛流程管理系统

时间:2024-11-14 13:17:22浏览次数:3  
标签:begin cout 管理系统 ++ 流程 vector include void 演讲比赛

1. 演讲比赛程序需求

1.1 比赛规则

  • 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛
  • 每名选手都有对应的编号,如10001~10012
  • 比赛方式:分组比赛,每组6个人
  • 第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲
  • 十个评委分别给每名选手打分,去除最高分和最低分,求的平均分为本轮选手的成绩
  • 当小组演讲完后,淘汰组内排名最后的三个选手,前三名晋级,进入下一轮的比赛
  • 第二轮为决赛,前三名胜出
  • 每轮比赛过后需要显示晋级选手的信息

1.2 程序功能

  • 开始演讲比赛:完成整届比赛的流程,每个比赛阶段需要给用户一个提示,用户按任意键后继续下一个阶段
  • 查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
  • 清空比赛记录:将文件中数据情况
  • 退出比赛程序:可以退出当前程序

2. 代码

player.h

#pragma once
#include<iostream>
#include<cstring>
using namespace std;

class Player
{
public:
    int m_Index; //选手编号
    string m_Name; //选手姓名
    double m_Score; //选手得分
public:
    Player(int index, string name, double score);
    ~Player();
};

player.cpp

#include "player.h"

Player::Player(int index, string name, double score)
{
    this->m_Index = index;
    this->m_Name = name;
    this->m_Score = score;
}

Player::~Player()
{

}

speechManager.h

#pragma once
#include <iostream>
#include <vector>
#include "player.h"
using namespace std;

class SpeechManager
{
public:
    //构造函数
    SpeechManager();
    //析构函数
    ~SpeechManager();

public:
    //展示菜单
    void show_Menu();

    //第一轮抽签
    void first_Chouqian(vector<Player>& v);

    //打分
    void SetScore(vector<Player>& v);

    //分组 排序
    void MySort(vector<Player>& v);

    //打印第一轮比赛结果
    void show_first_result(vector<Player>& v1, vector<Player>& v2);

    //第二轮抽签
    void second_Chouqian(vector<Player>& v);

    //打印第二轮比赛结果
    void show_second_result(vector<Player>& v);

    //写文件
    void Save(const vector<Player>& v2);

    //读文件
    void Output();

    //清空比赛记录
    void Clear();
};

speechManager.cpp

#include "speechManager.h"
#include "player.h"

#include <vector>
#include <algorithm>
#include <functional>
#include <ctime>
#include <deque>
#include <fstream>

SpeechManager::SpeechManager(){}

SpeechManager::~SpeechManager(){}

//打印菜单
void SpeechManager::show_Menu()
{
    cout << "-------------------------------" << endl;
    cout << "------- 欢迎参加演讲比赛 -------" << endl;
    cout << "------- 1. 开始演讲比赛  -------" << endl;
    cout << "------- 2. 查看往届记录  -------" << endl;
    cout << "------- 3. 清空比赛记录  -------" << endl;
    cout << "------- 0. 退出比赛程序  -------" << endl;
    cout << "-------------------------------" << endl;
}

//打印vector
void printVector(const vector<Player>& v)
{
    for(vector<Player>::const_iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << "编号" << it->m_Index << "\t姓名: " << it->m_Name
            << "\t成绩: " << it->m_Score << endl;
    }
}

//第一轮抽签
void SpeechManager::first_Chouqian(vector<Player>& v)
{
    srand((unsigned)time(NULL));
    cout << "第 << 1 >> 轮比赛选手正在抽签" << endl;
    random_shuffle(v.begin(), v.end());
    cout << "---------------------------" << endl;
    cout << "抽签后演讲顺序如下: " << endl;
    for(vector<Player>::const_iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << it->m_Index << " ";
    }
    cout << endl;
    cout << "---------------------------" << endl;
    system("pause");
}

//按照成绩降序排列
class MyCompare
{
public:
    bool operator()(Player &p1, Player &p2)
    {
        return p1.m_Score > p2.m_Score;
    }
};

//打分
void SpeechManager::SetScore(vector<Player>& v)
{
    srand((unsigned)time(NULL));
    
    int temp_score = 0; //打分
    
    //评委打分完毕
    for(vector<Player>::iterator it = v.begin(); it != v.end(); ++it)
    {
        deque<int> d; //用来保存10位评委的评分
        double score = 0; //最终得分
        for(int i = 0; i < 10; ++i)
        {
            temp_score = 60 + rand() % 41;
            d.push_back(temp_score);
        }
        sort(d.begin(), d.end());
        d.pop_back(); //去掉一个最高分
        d.pop_front(); //去掉一个最低分
        for(deque<int>::iterator dit = d.begin(); dit != d.end(); ++dit)
        {
            score += *dit;
        }
        score /= 8;
        it->m_Score = score;
    }
}

//分组  排序
void SpeechManager::MySort(vector<Player>& v)
{
    //对结果需要进行排序 按照选手得分进行降序排序
    //排序之前先要将12个人分成两组,每组6个人,组内进行排序
    vector<Player>::iterator it = v.begin();
    for(int i = 0; i < 6; ++i)
    {
        it++;
    }
    sort(v.begin(), it, MyCompare()); //对1-6名进行排序
    
    sort(it, v.end(), MyCompare()); //对7-12名进行排序
}

//打印第一轮比赛结果 并淘汰每组最后三名选手
void SpeechManager::show_first_result(vector<Player>& v1, vector<Player>& v2)
{
    cout << "------- 第1轮比赛正式开始 -------" << endl;
    cout << "第1小组比赛名次: " << endl;
    vector<Player>::iterator it = v1.begin();
    for(int i = 0; i < 6; ++i)
    {
        if(i < 3) //每一组的前三名晋级
        {
            v2.push_back(*it); 
        }
        cout << "编号" << it->m_Index << "\t姓名: " << it->m_Name
            << "\t成绩: " << it->m_Score << endl;
        it++;
    }
    cout << endl;

    cout << "第2小组比赛名次: " << endl;
    for(int i = 0; i < 6; ++i)
    {
        if(i < 3) //每一组的前三名晋级
        {
            v2.push_back(*it);
        }
        cout << "编号" << it->m_Index << "\t姓名: " << it->m_Name
            << "\t成绩: " << it->m_Score << endl;
        it++;
    }
    cout << endl;
    cout << "------- 第1轮比赛完毕 -------" << endl;
    system("pause");
    cout << "------- 第1轮晋级选手信息如下: -------" << endl;
    for(vector<Player>::iterator it = v2.begin(); it != v2.end(); ++it)
    {
        cout << "编号" << it->m_Index << "\t姓名: " << it->m_Name
            << "\t成绩: " << it->m_Score << endl;
    }
    cout << endl;
    system("pause");
}

//第二轮抽签
void SpeechManager::second_Chouqian(vector<Player>& v)
{
    srand((unsigned)time(NULL));
    cout << "第 << 2 >> 轮比赛选手正在抽签" << endl;
    random_shuffle(v.begin(), v.end());
    cout << "---------------------------" << endl;
    cout << "抽签后演讲顺序如下: " << endl;
    for(vector<Player>::const_iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << it->m_Index << " ";
    }
    cout << endl;
    cout << "---------------------------" << endl;
    system("pause");
}

//打印第二轮比赛结果
void SpeechManager::show_second_result(vector<Player>& v)
{
    sort(v.begin(), v.end(), MyCompare()); 
    cout << "------- 第2轮比赛正式开始 -------" << endl;
    cout << "第1小组比赛名次: " << endl;
    printVector(v);
    cout << endl;
    cout << "------- 第2轮比赛完毕 -------" << endl;

    v.pop_back();
    v.pop_back();
    v.pop_back();
    system("pause");
    cout << "------- 第2轮晋级选手信息如下: -------" << endl;
    for(vector<Player>::iterator it = v.begin(); it != v.end(); ++it)
    {
        cout << "编号" << it->m_Index << "\t姓名: " << it->m_Name
            << "\t成绩: " << it->m_Score << endl;
    }
    system("pause");
}

//保存文件
void SpeechManager::Save(const vector<Player>& v)
{
    ofstream ofs;
    ofs.open("speech.csv", ios::out | ios::app);
    for(vector<Player>::const_iterator it = v.begin(); it != v.end(); ++it)
    {
        ofs << it->m_Index << "," << it->m_Score << ",";
    }
    ofs << endl;
    ofs.close();
    cout << "记录已经保存" << endl;
    cout << "本届比赛完毕!" << endl;
    system("pause");
}

//读文件
void SpeechManager::Output()
{
    ifstream ifs;
    ifs.open("speech.csv", ios::in);
    if(!ifs.is_open())
    {
        cout << "文件打开失败" << endl;
    }
    string buf;
    int counter = 1; //记录一共有多少行
    while(getline(ifs, buf))
    {
        string index;
        string score;
        for(int i = 0; i < 3; ++i)
        {
            
            int pos = buf.find(',');
            index = buf.substr(0, pos);
            buf = buf.erase(0, pos + 1);

            pos = buf.find(',');
            score = buf.substr(0, pos);
            buf = buf.erase(0, pos + 1);
            
            if(i == 0)
            {
                cout << "第" << counter << "届 冠军编号: " << index << "\t 得分: " << score << " ";
            }
            if(i == 1)
            {
                cout << "\t亚军编号: " << index << "\t 得分: " << score << " ";
            }
            if(i == 2)
            {
                cout << "\t季军编号: " << index << "\t 得分: " << score << endl;
            }
        }
        counter++;
    }
    system("pause");
    system("cls");
}

//清空比赛记录
void SpeechManager::Clear()
{
    cout << "--- 确认清空? ---" << endl;
    cout << "--- 1. 确认 ---" << endl;
    cout << "--- 2. 返回 ---" << endl;
    int choice;
    cin >> choice;
    if(choice == 1)
    {
        //打开模式 ios::trunc 如果文件存在,先删除,再重建
        ofstream ofs("speech.csv", ios::trunc);
        ofs.close();
        cout << "清空成功!" << endl;
    }
    system("pause");
    system("cls");
}

main.cpp

#include <iostream>
#include <vector>
#include "speechManager.h"
#include "player.h"
using namespace std;


int main()
{
    vector<Player>v1; //第一轮比赛选手
    vector<Player>v2; //第二轮比赛选手 获胜选手也保存在v2中
    string nameside = "ABCDEFGHIJKL";
    int index = 10001;
    for(int i = 0; i < 12; ++i)
    {
        string name = "选手";
        name += nameside[i];
        Player p(index, name, 0);
        v1.push_back(p);
        index++;
    }
    SpeechManager s;
    while(1)
    {
        s.show_Menu();
        cout << "请输入您的选择: ";
        int choice = 0;
        cin >> choice;
        switch(choice){
            case 0:
                cout << "成功退出!" << endl;
                exit(0);
                break;

            case 1:
            {
                s.first_Chouqian(v1); //第一轮抽签
                s.SetScore(v1); //打分
                s.MySort(v1); //分组 排序
                s.show_first_result(v1, v2); //第一轮比赛结果

                s.second_Chouqian(v2); //第二轮抽签
                s.SetScore(v2); //打分
                s.show_second_result(v2); //第二轮比赛结果
                s.Save(v2); //保存文件
            }
                break;

            case 2:
                s.Output();
                break;

            
            case 3:
                s.Clear();
                break;

            default:
                break;

        }
    }
}

3. 效果演示

主菜单
第一轮抽签
第一轮比赛结果
第二轮抽签
第二轮比赛结果
比赛结果保存
查看以前的比赛记录
比赛结果保存在.csv文件中

标签:begin,cout,管理系统,++,流程,vector,include,void,演讲比赛
From: https://blog.csdn.net/qq_42494870/article/details/143768497

相关文章

  • python毕设仓库管理系统的设计程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于仓库管理系统的研究,现有研究多以特定行业或大规模企业的需求为主,专门针对用Python实现涵盖多种角色(如仓管员、采购员、财务员等)和......
  • 基于微信小程序的智慧小区服务管理系统(源码+LW++远程调试+代码讲解等)
    摘 要使用旧方法对小区服务管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在小区服务管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的小区服务管理系统对安保管理、安保分配......
  • Java流程控制(三.一)
    publicclassoperator{publicstaticvoidmain(String[]args){//打印九九乘法表for(inti=1;i<10;i++){for(intj=1;j<=i;j++){System.out.print(i+"*"+j+"="+i*j+"\t&q......
  • Springboot酒店管理系统b1g8z
    Springboot酒店管理系统b1g8z本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,客房类型,酒店简介,酒店客房,客房预定,入住安排,员工开题报告内容一、项目背景与意义在快速发展的旅游与酒店行业......
  • Springboot酒店管理系统35294
    Springboot酒店管理系统35294本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表 项目功能:用户,客房类型,酒店客房,菜品分类,菜品信息开题报告内容一、项目背景与意义随着旅游业的蓬勃发展,酒店行业作为旅游产......
  • 设备管理系统功能拆解——设备点检管理
    大家都知道,在生产过程中确保设备运行顺畅的重要性,但具体要怎么做呢?设备点检管理就是这样一项关键活动,它能够帮助企业在日常运营中主动发现问题,避免设备故障带来的连锁反应。如果没有有效的点检管理,一台设备的故障可能会导致整个生产线停滞,甚至影响到后续的交付和客户满意度。而通......
  • 设备管理系统功能拆解——设备档案管理
    设备档案管理是设备管理系统中的一个核心组成部分,简单来说,它就是对设备的所有信息进行系统化的记录与管理,包括设备的基本数据、使用情况以及维护历史等。如果一个工厂里数十台设备同时运转,没有准确的设备档案——设备出现故障时,管理者如何能迅速找到相关信息?当需要进行维护时,又......
  • 微店商品详情数据接口探秘:从接入到数据获取全流程
    以下是微店商品详情数据接口从接入到数据获取的全流程:注册成为微店开发者:访问微店开放平台:首先,需要访问微店的开放平台官方网站。这是接入微店商品详情数据接口的入口,在浏览器中输入正确的网址即可进入。注册账号:在开放平台上进行账号注册,填写必要的信息,如用户名、密码、......
  • 【SSM框架-毕业程序设计】-166-基于ssm线上花店管理系统
    系列文章【SSM框架-毕业程序设计】166-基于ssm线上花店管理系统文章目录系列文章【SSM框架-毕业程序设计】一、项目描述二、运行环境三、项目技术四、主要功能五、项目截图六、获取源码一、项目描述线上花店管理系统是基于java编程语言,ssm框架,mysql数据库开发的......
  • 仓储管理系统-综合管理(源码+文档+部署+讲解)
    本文将深入解析“仓储管理系统-综合管理”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。系统概述仓储管理系统-综合管理是一个全面的仓库管理解决方案,旨在通过集成多种功能模块来优化仓库操作和管理流程。该系统提供了从设备管理、工单处理、报表生成到库......