演讲比赛流程管理系统

news2024/11/26 9:44:54

1. 演讲比赛程序需求

1.2程序功能

 2. 项目创建

创建名为speech_contest的目录名称

3. 创建管理类

功能描述:
        提供菜单界面与用户交互
        对演讲比赛流程进行控制
        与文件的读写交互

3.1 创建文件

在头文件和源文件的文件夹下分别创建speechManager.h和speechManager.cpp文件

speechManager.h

#ifndef SPEECHMANAGER_H
#define SPEECHMANAGER_H
#include <iostream>
#pragma once

//设计演讲管理类
class SpeechManager
{
public:
    SpeechManager();
    ~SpeechManager();
};

#endif // SPEECHMANAGER_H

 speechManager.cpp

#include "speechManager.h"

SpeechManager::SpeechManager()
{
}
SpeechManager::~SpeechManager()
{
}

 4. 菜单功能

功能描述:与用户的沟通界面

4.1 添加成员函数

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

5. 显示菜单

//菜单功能
void SpeechManager::show_Menu()
{
    while (true) {

        cout << "=================" << endl;
        cout << "欢迎参加演讲比赛" << endl;
        cout << "1.开始演讲比赛" << endl;
        cout << "2.查看往届记录" << endl;
        cout << "3.清空比赛记录" << endl;
        cout << "0.退出比赛程序" << endl;
        cout << "=================" << endl;
        cout << "请输入你的选择: " << endl;
        int select;
        cin >> select;
        switch (select) {
        case 1:
            cout << "开始" << endl;
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            exit(0);
        default:
            system("cls");

            break;
        }
    }
}

6. 演讲比赛功能

6.1 功能分析

比赛流程分析:
        抽签 -》开始演讲比赛 -》显示第一轮比赛结果 -》
        抽签 -》开始演讲比赛 -》显示前三名结果 -》保存分数

6.2 创建选手类

选手类中的属性包括:选手姓名、分数
头文件中创建speaker.h文件,并添加代码:

#ifndef SPEAKER_H
#define SPEAKER_H
#include <iostream>
using namespace std;

class Speaker
{
public:
    Speaker();
    string m_Name; //姓名
    double m_Score[2]; //分数 最多有两轮得分
};

#endif // SPEAKER_H

6.3 比赛

6.3.1 成员属性添加

//设计演讲管理类
class SpeechManager {
public:
    SpeechManager();
    ~SpeechManager();
    void show_Menu();

    //初始化属性和容器
    void initSpeech();
    //添加成员属性
    //保存第一轮比赛的选手编号的容器
    vector<int> v1;

    //第一轮晋级选手编号容器
    vector<int> v2;

    //胜出前三名选手编号容器
    vector<int> vVictory;

    //存放编号以及对应选手的容器
    map<int, Speaker> m_Speaker;

    //存放比赛轮数
    int m_Index;
};
//初始化
void SpeechManager::initSpeech()
{
    //容器为空
    this->v1.clear();
    this->v2.clear();
    this->vVictory.clear();
    this->m_Speaker.clear();
    //初始化比赛轮数
    this->m_Index = 1;
}
SpeechManager::SpeechManager()
{
    this->initSpeech();
}

6.3.3 创建选手

提供比赛的成员函数void createSpeaker();

void SpeechManager::createSpeaker()
{
    string nameSeed = "ABCDEFGHIJKL";
    for (int i = 0; i < (int)nameSeed.size(); i++) {
        string name = "选手";
        name += nameSeed[i];
        Speaker sp;
        sp.m_Name = name;
        for (int j = 0; j < 2; j++) {
            sp.m_Score[j] = 0;
        }
        // 12名选手编号
        this->v1.push_back(i + 10001);

        //选手编号 以及对应的选手,放到map容器中
        this->m_Speaker.insert(make_pair(i + 10001, sp));
    }
}

6.3.4 开始比赛成员函数添加

编写startSpeech();
函数作用是控制比赛的流程

//控制比赛流程
void SpeechManager::startSpeech()
{
    //第一轮比赛
    // 1.抽签
    
    // 2.比赛
    // 3.显示晋级结果
    //第二轮比赛
    // 1.抽签
    // 2.比赛
    // 3.显示最终结果
    // 4.保存分数
}

6.3.5 抽签

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<int>::iterator it = v1.begin(); it != v1.end(); it++) {
            cout << *it << " ";
        }
        cout << endl;
    } else {
        random_shuffle(v2.begin(), v2.end());

        for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++) {
            cout << *it << " ";
        }
        cout << endl;
    }
    system("pause");
    system("cls");
}

 6.3.3 开始比赛

在头文件中添加比赛的成员函数void speechContest();

void SpeechManager::speechContest()
{
    cout << "----------第<<" << this->m_Index << ">>轮比赛正式开始:------------" << endl;
    multimap<double, int, greater<double>> groupScore; //临时容器,保存key分数 value 选手编号
    int num = 0; //记录人员个数 6人一组
    vector<int> v_Src; //比赛选手容器
    if (this->m_Index == 1) {
        v_Src = this->v1;
    } else {
        v_Src = this->v2;
    }
    //遍历所有的参赛选手进行比赛
    for (vector<int>::iterator it = v_Src.begin(); it != v_Src.end(); it++) {
        num++;
        //进行打分
        deque<double> d;
        for (int i = 0; i < 10; i++) {
            double score = (rand() % 401 + 600) / 10.f; // 600~1000
            //            cout << "分数" << score << " ";
            d.push_back(score);
        }
        //        cout << endl;
        sort(d.begin(), d.end(), greater<double>()); //排序
        d.pop_back(); //去除尾
        d.pop_front(); //去除头
        double sum = accumulate(d.begin(), d.end(), 0.0f); //获取总分
        double avg = sum / (double)d.size(); //平均分 size应该是容器的大小,这里应该为8
        //打印平均分
        //        cout << "编号" << *it << " "
        //             << "姓名:" << this->m_Speaker[*it].m_Name << "平均分:" << avg << endl;
        //将平均分放入map容器中
        this->m_Speaker[*it].m_Score[this->m_Index - 1] = avg; //根据键获取到值,在给属性赋值

        //将打分的数据放入临时小组容器
        groupScore.insert(make_pair(avg, *it)); //平均分 和编号  设置了greater 插入数据会自动排序
        //每6人取出前三名
        if (num % 6 == 0) {
            cout << "第" << num / 6 << "小组名次如下:" << endl;
            for (multimap<double, int, greater<double>>::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<double>>::iterator it = groupScore.begin(); it != groupScore.end() && count < 3; it++, count++) {
                if (this->m_Index == 1) {
                    v2.push_back((*it).second);
                } else {
                    this->vVictory.push_back((*it).second);
                }
            }
            //清空
            groupScore.clear();
            cout << endl;
        }
    }
    cout << "第" << this->m_Index << "轮比赛完毕" << endl;
    system("pause");
    system("cls");
}

6.3.7 显示比赛分数

void show_Score();实现

void SpeechManager::show_Score()
{
    cout << "-------第" << this->m_Index << "轮晋级选手信息如下:--------" << endl;
    vector<int> v;
    if (this->m_Index == 1) {
        v = v2;
    } else {
        v = this->vVictory;
    }
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << "选手编号:" << *it << "姓名:" << m_Speaker[*it].m_Name << "分数:" << m_Speaker[this->m_Index - 1].m_Score << endl;
    }
    cout << endl;
    system("pause");
    system("cls");
    this->show_Menu();
}

6.3.8 第二轮比赛

第二轮比赛流程同第一轮,只是比赛的轮+1,其余流程不变

void SpeechManager::startSpeech()
{
    //第一轮比赛
    // 1.抽签
    this->speechDraw();
    // 2.比赛
    this->speechContest();
    // 3.显示晋级结果
    this->show_Score();

    //第二轮比赛
    this->m_Index++;
    // 1.抽签
    this->speechDraw();

    // 2.比赛
    this->speechContest();
    // 3.显示最终结果
    this->show_Score();

    // 4.保存分数
}

6.4 保存分数

将每次演讲比赛的得分记录到文件中

void saveRecord();


void SpeechManager::save_Record()
{
    ofstream ofs;
    ofs.open("speech.csv", ios::out | ios::app); // out是出来,写操作 in是进去,读操作 ,追加模式
    //将每个人数据写入
    for (vector<int>::iterator it = this->vVictory.begin(); it != this->vVictory.end(); it++) {
        ofs << *it << "," //编号3
            << m_Speaker[*it].m_Score[1] << ",";
    }
    ofs << endl;
    ofs.close();
    cout << "记录已经保存" << endl;
}

7 查看记录

7.1 读取记录分数

void load_Record();

判断文件是否为空bool fileIsEmpty;

添加往届记录的容器map<int,vector<string>>m_Record;

其中m_Record中key代表第几届,value代表具体的信息。        

void SpeechManager::load_Record()
{
    ifstream ifs;
    ifs.open("speech.csv", ios::in); //读取文件
    if (!ifs.is_open()) {
        this->fileIsEmpty = true;
        cout << "文件不存在" << endl;
        ifs.close();
        return;
    }
    //文件清空
    char ch;
    ifs >> ch;
    if (ifs.eof()) {
        this->fileIsEmpty = true;
        cout << "文件为空" << endl;
        return;
    }
    //文件不为空
    else {
        this->fileIsEmpty = false;
        ifs.putback(ch); //将上面读取的单个字符,放回来
        string data;
        int index = 0;
        while (ifs >> data) {
            cout << "数据为" << data << endl;
            vector<string> v; //存放6个string字符串
            int pos = -1; //查到逗号位置的变量
            int start = 0;
            while (true) {
                pos = data.find(",", start); //查找逗号,从start开始位置,pos返回逗号的位置
                if (pos == -1) { //没有找到
                    break;
                }
                string temp = data.substr(start, pos - start); //获取字串
                //                cout << temp << endl;
                v.push_back(temp); //放入
                start = pos + 1;
            }
            this->m_Record.insert(make_pair(index, v));
            index++;
        }
        ifs.close();
        for (map<int, vector<string>>::iterator it = this->m_Record.begin(); it != this->m_Record.end(); it++) {
            cout << "第" << it->first + 1 << "届冠军编号" << it->second[0] << "分数" << it->second[1] << endl;
        }
    }
    system("pause");
    system("cls");
}

 7.2 查看记录流程

void show_Record();

void SpeechManager::show_Record()
{
    for (int i = 0; i < this->m_Record.size(); i++) {
        cout << "第" << i + 1 << "届"
             << "冠军编号" << this->m_Record[i][0] << "得分" << this->m_Record[i][1]
             << "亚军编号" << this->m_Record[i][2] << "得分" << this->m_Record[i][3]
             << "季军编号" << this->m_Record[i][4] << "得分" << this->m_Record[i][5] << endl;
    }
    system("pause");
    system("cls");
}

7.3 BUG解决

查看往届记录时,若文件不存在或为空,并未提示

解决方式:在showRecord函数中,开始判断文件状态


    if (this->fileIsEmpty) {
        cout << "文件为空,或者文件不存在" << endl;

    } 

若记录为空或不存在,比完赛依然提示记录为空

解决方式:saveRecord中更新文件为空的标志

    this->fileIsEmpty = false;

添加随机数种子

    srand((unsigned int)time(NULL));

8 清空记录

8.1 清空记录功能实现

void clear_Record();


void SpeechManager::clear_Record()
{
    cout << "确认清空?" << endl;
    cout << "1.确认" << endl;
    cout << "2.取消" << endl;
    int select = 0;
    cin >> select;
    if (select == 1) {
        //打开方式以ios::trunc,如果文件存在删除文件并重新创建新文件
        ofstream ofs("speech.csv", ios::trunc);
        ofs.close();
        //初始化属性
        this->initSpeech();
        //创建选手
        this->createSpeaker();
        cout << "清空成功" << endl;
    }
    system("pause");
    system("cls");
}

9 全部的代码

9.1项目结构如下

speaker.h文件内容

#ifndef SPEAKER_H
#define SPEAKER_H
#include <iostream>
using namespace std;

class Speaker {
public:
    Speaker();
    string m_Name; //姓名

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

#endif // SPEAKER_H

speaker.cpp文件内容

#include "speaker.h"

Speaker::Speaker()
{
}

speechManager.h文件内容

#ifndef SPEECHMANAGER_H
#define SPEECHMANAGER_H
#include <iostream>
#pragma once //防止头文件重复包含
#include <algorithm>
#include <deque>
#include <fstream>
#include <functional>
#include <map>
#include <numeric>
#include <speaker.h>
#include <vector>
using namespace std;

//设计演讲管理类
class SpeechManager {
public:
    SpeechManager();
    ~SpeechManager();
    void show_Menu();

    //初始化属性和容器
    void initSpeech();
    //添加成员属性
    //保存第一轮比赛的选手编号的容器
    vector<int> v1;

    //第一轮晋级选手编号容器
    vector<int> v2;
    //胜出前三名选手编号容器
    vector<int> vVictory;

    //存放编号以及对应选手的容器
    map<int, Speaker> m_Speaker;

    //存放比赛轮数
    int m_Index;

    //创建演讲人
    void createSpeaker();
    //控制比赛流程
    void startSpeech();

    //打乱顺序
    void speechDraw();
    //比赛成员函数
    void speechContest();
    //显示比赛结果
    void show_Score();
    //保存
    void save_Record();

    //获取数据
    void load_Record();
    bool fileIsEmpty;

    //存放往届记录的容器
    map<int, vector<string>> m_Record;
    //查看记录功能
    void show_Record();
    //清空记录
    void clear_Record();
};

#endif // SPEECHMANAGER_H

speechManager.cpp文件内容

#include "speechManager.h"
SpeechManager::SpeechManager()
{
    this->initSpeech();

    this->createSpeaker();
    //加载往届记录
    //    this->load_Record();
}
SpeechManager::~SpeechManager()
{
}
//菜单功能
void SpeechManager::show_Menu()
{
    int select;
    while (true) {

        cout << "=================" << endl;
        cout << "欢迎参加演讲比赛" << endl;
        cout << "1.开始演讲比赛" << endl;
        cout << "2.查看往届记录" << endl;
        cout << "3.清空比赛记录" << endl;
        cout << "0.退出比赛程序" << endl;
        cout << "=================" << endl;
        cout << "请输入你的选择: " << endl;
        cin >> select;
        switch (select) {
        case 1:
            this->startSpeech();
            break;
        case 2:
            //            cout << "查看比赛记录" << endl;
            this->load_Record();
            this->show_Record();
            break;
        case 3:
            this->clear_Record();
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            exit(0);
        default:
            system("cls");

            break;
        }
    }
}

//初始化
void SpeechManager::initSpeech()
{
    //容器为空
    this->v1.clear();
    this->v2.clear();
    this->vVictory.clear();
    this->m_Speaker.clear();
    //初始化比赛轮数
    this->m_Index = 1;

    //记录数据也需要清空
    this->m_Record.clear();
}

//创建人物
void SpeechManager::createSpeaker()
{
    string nameSeed = "ABCDEFGHIJKL";
    for (int i = 0; i < (int)nameSeed.size(); i++) {
        string name = "选手";
        name += nameSeed[i];
        Speaker sp;
        sp.m_Name = name;
        for (int j = 0; j < 2; j++) {
            sp.m_Score[j] = 0;
        }
        // 12名选手编号
        this->v1.push_back(i + 10001);

        //选手编号 以及对应的选手,放到map容器中
        this->m_Speaker.insert(make_pair(i + 10001, sp));
    }
}

//控制比赛流程
void SpeechManager::startSpeech()
{
    //第一轮比赛
    // 1.抽签
    this->speechDraw();
    // 2.比赛
    this->speechContest();
    // 3.显示晋级结果
    this->show_Score();

    //第二轮比赛
    this->m_Index++;
    // 1.抽签
    this->speechDraw();

    // 2.比赛
    this->speechContest();
    // 3.显示最终结果
    this->show_Score();

    // 4.保存分数
    this->save_Record();

    //进行数据重置
    this->initSpeech();

    this->createSpeaker();
    //加载往届记录
    //    this->load_Record();

    cout << "本届比赛完毕!" << endl;
    system("pause");
    system("cls");
}
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<int>::iterator it = v1.begin(); it != v1.end(); it++) {
            cout << *it << " ";
        }
        cout << endl;
    } else {
        random_shuffle(v2.begin(), v2.end());

        for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++) {
            cout << *it << " ";
        }
        cout << endl;
    }
    system("pause");
    cout << "==================" << endl;
}

void SpeechManager::speechContest()
{
    cout << "----------第<<" << this->m_Index << ">>轮比赛正式开始:------------" << endl;
    multimap<double, int, greater<double>> groupScore; //临时容器,保存key分数 value 选手编号
    int num = 0; //记录人员个数 6人一组
    vector<int> v_Src; //比赛选手容器
    if (this->m_Index == 1) {
        v_Src = this->v1;
    } else {
        v_Src = this->v2;
    }
    //遍历所有的参赛选手进行比赛
    for (vector<int>::iterator it = v_Src.begin(); it != v_Src.end(); it++) {
        num++;
        //进行打分
        deque<double> d;
        for (int i = 0; i < 10; i++) {
            double score = (rand() % 401 + 600) / 10.f; // 600~1000
            //            cout << "分数" << score << " ";
            d.push_back(score);
        }
        //        cout << endl;
        sort(d.begin(), d.end(), greater<double>()); //排序
        d.pop_back(); //去除尾
        d.pop_front(); //去除头
        double sum = accumulate(d.begin(), d.end(), 0.0f); //获取总分
        double avg = sum / (double)d.size(); //平均分 size应该是容器的大小,这里应该为8
        //打印平均分
        //        cout << "编号" << *it << " "
        //             << "姓名:" << this->m_Speaker[*it].m_Name << "平均分:" << avg << endl;
        //将平均分放入map容器中
        this->m_Speaker[*it].m_Score[this->m_Index - 1] = avg; //根据键获取到值,在给属性赋值

        //将打分的数据放入临时小组容器
        groupScore.insert(make_pair(avg, *it)); //平均分 和编号  设置了greater 插入数据会自动排序
        //每6人取出前三名
        if (num % 6 == 0) {
            cout << "第" << num / 6 << "小组名次如下:" << endl;
            for (multimap<double, int, greater<double>>::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<double>>::iterator it = groupScore.begin(); it != groupScore.end() && count < 3; it++, count++) {
                if (this->m_Index == 1) {
                    v2.push_back((*it).second);
                } else {
                    this->vVictory.push_back((*it).second);
                }
            }
            //清空
            groupScore.clear();
            cout << endl;
        }
    }
    cout << "第" << this->m_Index << "轮比赛完毕" << endl;
    system("pause");
    //    system("cls");
}

void SpeechManager::show_Score()
{
    cout << "-------第" << this->m_Index << "轮晋级选手信息如下:--------" << endl;
    vector<int> v;
    if (this->m_Index == 1) {
        v = v2;
    } else {
        v = this->vVictory;
    }
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << "选手编号:" << *it << "姓名:" << m_Speaker[*it].m_Name << "分数:" << m_Speaker[this->m_Index - 1].m_Score << endl;
    }
    cout << endl;
    system("pause");
    system("cls");
    //    this->show_Menu();
}

void SpeechManager::save_Record()
{
    ofstream ofs;
    ofs.open("speech.csv", ios::out | ios::app); // out是出来,写操作 in是进去,读操作 ,追加模式
    //将每个人数据写入
    for (vector<int>::iterator it = this->vVictory.begin(); it != this->vVictory.end(); it++) {
        ofs << *it << "," //编号3
            << m_Speaker[*it].m_Score[1] << ",";
    }
    ofs << endl;
    ofs.close();
    cout << "记录已经保存" << endl;
    this->fileIsEmpty = false;
}

void SpeechManager::load_Record()
{
    ifstream ifs;
    ifs.open("speech.csv", ios::in); //读取文件
    if (!ifs.is_open()) {
        this->fileIsEmpty = true;
        //        cout << "文件不存在" << endl;
        ifs.close();
        return;
    }
    //文件清空
    char ch;
    ifs >> ch;
    if (ifs.eof()) {
        this->fileIsEmpty = true;
        //        cout << "文件为空" << endl;
        return;
    }
    //文件不为空
    else {
        this->fileIsEmpty = false;
        ifs.putback(ch); //将上面读取的单个字符,放回来
        string data;
        int index = 0;
        while (ifs >> data) {
            //            cout << "数据为" << data << endl;
            vector<string> v; //存放6个string字符串
            int pos = -1; //查到逗号位置的变量
            int start = 0;
            while (true) {
                pos = data.find(",", start); //查找逗号,从start开始位置,pos返回逗号的位置
                if (pos == -1) { //没有找到
                    break;
                }
                string temp = data.substr(start, pos - start); //获取字串
                //                cout << temp << endl;
                v.push_back(temp); //放入
                start = pos + 1;
            }
            this->m_Record.insert(make_pair(index, v));
            index++;
        }
        ifs.close();
        //        for (map<int, vector<string>>::iterator it = this->m_Record.begin(); it != this->m_Record.end(); it++) {
        //            cout << "第" << it->first + 1 << "届冠军编号" << it->second[0] << "分数" << it->second[1] << endl;
        //        }
    }
    //    system("pause");
    //    system("cls");
}

void SpeechManager::show_Record()
{
    if (this->fileIsEmpty) {
        cout << "文件为空,或者文件不存在" << endl;

    } else {
        for (int i = 0; i < (int)this->m_Record.size(); i++) {
            cout << "第" << i + 1 << "届"
                 << "冠军编号" << this->m_Record[i][0] << "得分" << this->m_Record[i][1]
                 << "亚军编号" << this->m_Record[i][2] << "得分" << this->m_Record[i][3]
                 << "季军编号" << this->m_Record[i][4] << "得分" << this->m_Record[i][5] << endl;
        }
    }
    system("pause");
    system("cls");
}

void SpeechManager::clear_Record()
{
    cout << "确认清空?" << endl;
    cout << "1.确认" << endl;
    cout << "2.取消" << endl;
    int select = 0;
    cin >> select;
    if (select == 1) {
        //打开方式以ios::trunc,如果文件存在删除文件并重新创建新文件
        ofstream ofs("speech.csv", ios::trunc);
        ofs.close();
        //初始化属性
        this->initSpeech();
        //创建选手
        this->createSpeaker();
        cout << "清空成功" << endl;
    }
    system("pause");
    system("cls");
}

main.cpp文件内容

#include "speechManager.h"
#include <iostream>
using namespace std;
#include <algorithm>
#include <ctime>

int main()
{
    //添加随机数种子
    srand((unsigned int)time(NULL));

    SpeechManager sm;
    sm.show_Menu();

    //查看是否创建成功选手
    //    for (map<int, Speaker>::iterator it = sm.m_Speaker.begin(); it != sm.m_Speaker.end(); it++) {
    //        cout << it->first << endl;
    //        cout << it->second.m_Name << it->second.m_Score[0] << endl;
    //    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu 学习笔记

环境&#xff1a;Ubuntu 22.04 桌面版和server版 一、更换国内源&#xff0c;下载更快 1、源文件路径&#xff1a;/etc/apt/sources.list&#xff0c;到这个路径下备份一下源文件。 #备份原有配置文件命令 sudo cp -r /etc/apt/sources.list /etc/apt/sources.list.backup …

C primer plus学习笔记 —— 14、限定关键字(const、volatile、restrict、_Atomic)

文章目录const 关键字修饰变量修饰指针修饰形参修饰全局变量volatile关键字restrict关键字_Atomic关键字&#xff08;c11&#xff09;const 关键字 修饰变量 将变量变为只读 const int nochange; nochange 4; //不允许 const int a 5; //没问题const int a[3] {3, 5, 6};…

Hive--14---使用sum() over() 实现累积求和

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录Hive中使用over()实现累积求和1.总求和sum(需要求和的列) over(partition by 分组列 )数据准备需求1以地区号网点号币种 为唯一键&#xff0c;求总的金额需求2以地区…

python图像处理(高斯滤波)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在谈高斯滤波之前,我们不妨回顾一下之前谈到的均值滤波和中值滤波。均值滤波,就是对像素点以及周围的8个点计算平均值,然后赋值给新像素点。而中值滤波,则是对像素点及周围的8个…

6. 初识多线程编程

1. 多线程 多线程非常重要&#xff0c;工作中用到的也是非常多&#xff0c;面试时也100%会问多线程。 关于多线程的相关知识&#xff0c;可以参考《计算机操作系统(第四版)》&#xff0c;或者自行百度查看有关文章以及视频都可以&#xff0c;此处不再赘述。 2. python中的多…

常用网址-2023整理

办公&效率人民币大写转换 人民币大写 人民币RMB数字转大写汉字工具我的账单 - 支付宝Bypass - 分流抢票Zen Flowchart - 在线流程图MindMaster - 在线思维导图【抠图】在线抠图软件_AI抠图证件照换底色-稿定设计Visio模板推荐与VisualNet图库转化语音转文字iconfont-阿里巴…

LeetCode动态规划经典题目(九):middle

学习目标&#xff1a; 进一步了解并掌握动态规划 学习内容&#xff1a; 4. LeetCode62. 不同路径https://leetcode.cn/problems/unique-paths/ 5. LeetCode63. 不同路径 IIhttps://leetcode.cn/problems/unique-paths-ii/ 6. LeetCode343. 整数拆分https://leetcode.cn/pro…

人工智能学习06--pytorch06--神经网络骨架nn.Module scipy下载 现有网络模型的使用及修改(VGG16)

神经网络骨架nn.Module 括号里nn.Module表示继承Module类init 初始化 调用父类初始化函数forward scipy下载 pip install scipy -i https://pypi.douban.com/simple/ 现有网络模型的使用及修改&#xff08;VGG16&#xff09; pretrained为True时需要下载&#xff0c;在ima…

1. Spring 基础入门

文章目录1. 初识 spring1.1 系统架构1.2 学习路线1.3 核心概念2. IoC 与 DI 入门案例&#xff08;xml版&#xff09;2.1 IoC&#xff08;控制反转&#xff09;2.2 DI&#xff08;依赖注入&#xff09;3. bean 配置3.1 bean 基础配置3.2 bean 别名配置3.3 bean 作用范围配置4. b…

file控件与input标签的属性type=“hidden“标签

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>file控件于与input标签的属性type"hidden"标签</title> </head> <body bgcolor"antiquewhite"> …

k8s中使用Deployment控制器实现升级、回滚、弹性伸缩

前置条件&#xff1a;linux机器已安装k8s集群基于yaml文件创建pod,本次创建pod使用的web.yaml如下apiVersion: apps/v1 kind: Deployment metadata:creationTimestamp: nulllabels:app: webname: web spec:replicas: 2selector:matchLabels:app: webstrategy: {}template:metad…

从零开始的数模(八)TOPSIS模型

一、概念 1.1评价方法概述 1.2概念 TOPSIS &#xff08;Technique for Order Preference by Similarity to an Ideal Solution &#xff09;模型中文叫做“逼近理想解排序方法”&#xff0c;是根据评价对象与理想化目标的接近程度进行排序的方法&#xff0c;是一种距离综合评…

SAP入门技术分享六:搜索帮助

搜索帮助1.概要&#xff08;1&#xff09;利用ABAP数据字典的搜索帮助&#xff08;2&#xff09;利用画面的搜索帮助&#xff08;3&#xff09;Dialog程序中的搜索帮助&#xff08;4&#xff09;报表选择屏幕PARAMETERS的搜索帮助&#xff08;5&#xff09;搜索帮助类型2.创建搜…

plot4gmns:面向通用建模网络范式(GMNS)的快速可视化【v0.1.1】

一款面向通用建模网络范式&#xff08;GMNS&#xff09;的快速可视化工具 目录1. 标准数据框架2. 标准数据框架下的生态2.1 数据解析2.2 数据处理2.3 数据可视化3. 标准数据框架下的可视化3.1 基础语法3.2 进阶语法1. 标准数据框架 制定一套标准的数据框架&#xff0c;可实现不…

python图像处理(中值滤波)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 中值滤波和均值滤波的区别,有点像中位数收入和平均收入的区别。比如有三个人,年收入分别是10万、1万和1千,那么他们的平均收入就是(10+1+0.1)/3,平均数是3.3万左右,但是中位数…

《真象还原》读书笔记——第二章 编写 MBR 主引导记录

2.1 计算机的启动过程 开机后运行的第一个程序是 BIOS 。 BIOS 搬运 MBR 并 跳转运行 MBR… 2.2 软件接力第一棒 BIOS 全名 基本输入输出系统。 2.2.1 实模式下的 1MB 内存分布 2.2.2 BIOS 是如何苏醒的 BIOS本身不需要修改&#xff0c;于是被写入了ROM中&#xff0c;被映…

更换新电脑,如何将旧电脑数据/文件传输到新电脑?

最好的数据迁移工具提供了一种简单的解决方案&#xff0c;可将您的数据从一台 PC 传输到另一台 PC。 如果您以前没有做过&#xff0c;那么数据迁移的整个过程可能看起来很吓人。无论您是企业用户还是家庭用户&#xff0c;尝试将所有文​​件和文件夹从一台计算机迁移到另一台计…

CCPC2022(桂林)

题目链接&#xff1a;https://codeforces.com/gym/104008 G Group Homework 题目大意&#xff1a;在树上选出两条链&#xff0c;使得在两条链选中的点中&#xff0c;只被一条链选中的点的点权和最大。 题解&#xff1a;显然两条链要么不相交&#xff0c;要么只相交于一个点。…

WhiteHole Base beta版本正式发布!

体验 当前版本为基础测试版本&#xff0c;测试效果可以前往演示视频查看&#xff1a;https://www.bilibili.com/video/BV18Y411D7sA/?spm_id_from333.999.0.0&vd_source641e71dfd1a118fb834c4a5d156688d5 在线体验地址为&#xff1a; http://47.100.239.95 数据将保存~ …

BGP基础实验

1.先配置好IP和环回 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [R1-GigabitEthernet0/0/0]int l 0 [R1-LoopBack0]ip add 1.1.1.1 24 其他同理 2.在R2&#xff0c;R3&#xff0c;R4上配置OSPF ospf 1 area 0.0.0.0 network 3.3.3.3…