59,综合案例-演讲比赛流程管理系统
演讲比赛流程管理系统
- 59.1案例描述
- 59.1.1比赛规则
- 59.1.2程序功能
- 59.2创建管理类
- 59.3菜单功能
- 59.3.1添加成员函数
- 59.3.2菜单功能实现
- 59.4退出功能
- 59.4.1提供功能接口
- 59.4.2实现退出功能
- 59.5演讲比赛功能
- 59.5.1创建选手类
- 59.5.2比赛
- 59.5.2.1成员属性添加
- 59.5.2.2初始化属性
- 59.5.2.3创建选手
- 59.5.2.4开始比赛成员函数的添加
- 59.5.2.5抽签
- 59.5.2.6开始比赛
- 59.5.2.7显示比赛分数
- 59.5.2.8第二轮比赛
- 59.5.3保存分数
- 59.6查看记录
- 59.6.1读取记录分数
- 59.6.2查看记录功能
- 59.6.3解决bug
- 59.6.3.1bug1
- 59.6.3.2bug2
- 59.6.3.3bug3
- 59.6.3.4bug4
- 59.7清空记录
- 59.8全部代码
59.1案例描述
59.1.1比赛规则
学习举行一场演讲比赛,共12个人参加,比赛共两轮,第一轮为淘汰赛,第二轮为决赛
每名选手都有对应的编号,如10001·10012
比赛方式:分组比赛,每组6个人
第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲
十个评委分别给每名选手打分,去除最高分和最低分,求的平均分为本轮选手的成绩
当小组演讲完后,淘汰组内排名最后三个选手,前三名晋级,进入下一轮的比赛
第二轮为决赛,前三名胜出
每轮比赛过后需要显示晋级选手的信息
59.1.2程序功能
开始演讲比赛:完成整届比赛的流程,每个比赛阶段需要给用户一个提示,用户按任意键后继续下一个阶段
查看往届记录:查看之前比赛前三名结果,每次比赛都会记录到文件中,文件用.csv后缀名保存
清空比赛记录:将文件中数据清空
退出比赛程序:可以退出当前程序
59.2创建管理类
功能描述:
提供菜单界面与用户交互
对演讲比赛流程进行控制
与文件的读写交互
speechManager.h
#pragma once
#include <iostream>
using namespace std;
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//析构函数~SpeechManager();
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{}
//析构函数
SpeechManager::~SpeechManager()
{}
59.3菜单功能
功能描述:与用户沟通的界面
59.3.1添加成员函数
在管理类speechManager.h中添加成员函数void show_Menu();
59.3.2菜单功能实现
在管理类speedManager.cpp中实现show_Menu()函数
演讲比赛流程管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{//创建管理类对象SpeechManager sm;sm.show_Menu();system("pause");return 0;
}
speechManager.h
#pragma once
#include <iostream>
using namespace std;
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//菜单功能void show_Menu();//析构函数~SpeechManager();
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{}
//菜单功能
void SpeechManager::show_Menu()
{cout << "-------------------------------------" << endl;cout << "-----------欢迎参加演讲比赛----------" << endl;cout << "-----------1,开始演讲比赛-----------" << endl;cout << "-----------2,查看往届记录-----------" << endl;cout << "-----------3,清空比赛记录-----------" << endl;cout << "-----------0,退出比赛程序-----------" << endl;cout << "-------------------------------------" << endl;cout << endl;
}
//析构函数
SpeechManager::~SpeechManager()
{}
59.4退出功能
功能描述:实现退出程序
59.4.1提供功能接口
在main函数中提供分支选择,提供每个功能接口
59.4.2实现退出功能
在speechManager.h中提供退出系统的成员函数void exitSystem();
在speechManager.cpp中提供局体的功能实现
演讲比赛流程管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
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://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speechManarge.h
#pragma once
#include <iostream>
using namespace std;
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//菜单功能void show_Menu();//退出系统void exitSystem();//析构函数~SpeechManager();
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{}
//菜单功能
void SpeechManager::show_Menu()
{cout << "-------------------------------------" << endl;cout << "-----------欢迎参加演讲比赛----------" << endl;cout << "-----------1,开始演讲比赛-----------" << endl;cout << "-----------2,查看往届记录-----------" << endl;cout << "-----------3,清空比赛记录-----------" << endl;cout << "-----------0,退出比赛程序-----------" << endl;cout << "-------------------------------------" << endl;cout << endl;
}
//退出功能
void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}
//析构函数
SpeechManager::~SpeechManager()
{}
59.5演讲比赛功能
功能分析:
比赛流程:
抽签-》开始演讲比赛-》显示第一轮结果-》抽签-》开始演讲比赛-》显示前三名结果-》保存分数
59.5.1创建选手类
选手类中的属性包含:选手姓名,分数
头文件中创建speaker.h文件,并添加代码;
59.5.2比赛
59.5.2.1成员属性添加
在speechManager.h中添加属性
59.5.2.2初始化属性
在speechManager.h中提供开始比赛的成员函数void initSpeech();
在speechManager.cpp中实现void initSpeech();
SpeechManager狗赞函数中调用void initSpeech();
59.5.2.3创建选手
在speechManager.h中提供开始比赛的成员函数void createSpeaker();
在speechManager.cpp中实现void createSpeaker();
SpeechManager类的构造函数中调用void createSpeaker();
59.5.2.4开始比赛成员函数的添加
在speechManager.h中提供开始比赛的成员函数void starSpeech();
该函数功能是主要控制比赛的流程
在speechManager.cpp中将startSpeech的空实现写入
我们可以先将整个比赛的流程 写到函数中
演讲比赛流程管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{//创建管理类对象SpeechManager sm;/*测试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;}*/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://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speaker.h
#pragma once
#include<iostream>
using namespace std;
class Speaker
{
public:string m_Name;//姓名double m_Score[2];//分数 最多有两轮得分
};
speechManager.h
#pragma once
#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include "speaker.h"
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//菜单功能void show_Menu();//退出系统void exitSystem();//记录比赛轮数int m_Insex;//初始化属性void initSpeech();//初始化创建12名选手void createSpeaker();//开始比赛-比赛流程控制void startSpeech();//抽签void speechDraw();//成员属性//比赛选手 容器 12人vector<int>v1;//第一轮晋级 容器 6人vector<int>v2;//胜利前三名 容器 3人vector<int>vVictory;//存放编号 以及对应的 具体选手 容器map<int, Speaker>m_Speaker;//析构函数~SpeechManager();
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{//初始化容器和属性this->initSpeech();//创建12名选手this->createSpeaker();
}//菜单功能
void SpeechManager::show_Menu()
{cout << "-------------------------------------" << endl;cout << "-----------欢迎参加演讲比赛----------" << endl;cout << "-----------1,开始演讲比赛-----------" << endl;cout << "-----------2,查看往届记录-----------" << endl;cout << "-----------3,清空比赛记录-----------" << endl;cout << "-----------0,退出比赛程序-----------" << endl;cout << "-------------------------------------" << endl;cout << endl;
}//退出功能
void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}void SpeechManager::initSpeech()
{//容器都置空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Insex = 1;
}void SpeechManager::createSpeaker()
{string nameSpeed = "ABCDEFGHIJKL";for (int i = 0; i < nameSpeed.size(); i++){string name = "选手:";name += nameSpeed[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,抽签//2,比赛//3,显示晋级结果 //第二轮比赛//1,抽签//2,比赛//3,显示晋级结果 //4,保存分数
}//析构函数
SpeechManager::~SpeechManager()
{}
59.5.2.5抽签
功能描述:
正式比赛签,所有选手的比赛顺序需要打乱,我们只需要两存放选手编号的容器 打乱次序即可
在speechManager.h中提供抽取的成员函数void speechDraw();
在speechManager.cpp中实现成员函数void speechDraw();
演讲比赛管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{srand((unsigned int)time(NULL));//创建管理类对象SpeechManager sm;/*测试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;}*/int choice = 0;//用于存储用户输入while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 1://开始比赛sm.startSpeech();break;case 2://查看往届比赛记录break;case 3://清空比赛记录break;case 0://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speechManager.h
#pragma once
#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include "speaker.h"
#include <algorithm>
#include <ctime>
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//菜单功能void show_Menu();//退出系统void exitSystem();//记录比赛轮数int m_Insex;//成员属性//比赛选手 容器 12人vector<int>v1;//第一轮晋级 容器 6人vector<int>v2;//胜利前三名 容器 3人vector<int>vVictory;//存放编号 以及对应的 具体选手 容器map<int, Speaker>m_Speaker;//初始化属性void initSpeech();//初始化创建12名选手void createSpeaker();//开始比赛-比赛流程控制void startSpeech();//抽签void speechDraw();//析构函数~SpeechManager();
};
speaker.h
#pragma once
#include<iostream>
using namespace std;
class Speaker
{
public:string m_Name;//姓名double m_Score[2];//分数 最多有两轮得分
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{//初始化容器和属性this->initSpeech();//创建12名选手this->createSpeaker();
}//菜单功能
void SpeechManager::show_Menu()
{cout << "-------------------------------------" << endl;cout << "-----------欢迎参加演讲比赛----------" << endl;cout << "-----------1,开始演讲比赛-----------" << endl;cout << "-----------2,查看往届记录-----------" << endl;cout << "-----------3,清空比赛记录-----------" << endl;cout << "-----------0,退出比赛程序-----------" << endl;cout << "-------------------------------------" << endl;cout << endl;
}//退出功能
void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}void SpeechManager::initSpeech()
{//容器都置空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Insex = 1;
}void SpeechManager::createSpeaker()
{string nameSpeed = "ABCDEFGHIJKL";for (int i = 0; i < nameSpeed.size(); i++){string name = "选手:";name += nameSpeed[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,比赛//3,显示晋级结果 //第二轮比赛//1,抽签//2,比赛//3,显示最终结果 //4,保存分数到文件中
}void SpeechManager::speechDraw()
{cout << "第 << " << this->m_Insex << " >> 轮选手正在抽签" << endl;cout << "------------------------------------------------------" << endl;cout << "抽签后演讲顺序如下:" << endl;if (this->m_Insex == 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;}cout<< "------------------------------------------------------" << endl;system("pause");//按任意键后进入下一个环节cout << endl;
}//析构函数
SpeechManager::~SpeechManager()
{}
59.5.2.6开始比赛
在speechManager.h提供比赛的成员函数void speechContest();
在speechManager.cpp中实现成员函数void speechContest();
演讲比赛管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{srand((unsigned int)time(NULL));//创建管理类对象SpeechManager sm;/*测试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;}*/int choice = 0;//用于存储用户输入while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 1://开始比赛sm.startSpeech();break;case 2://查看往届比赛记录break;case 3://清空比赛记录break;case 0://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speaker.h
#pragma once
#include<iostream>
using namespace std;
class Speaker
{
public:string m_Name;//姓名double m_Score[2];//分数 最多有两轮得分
};
speechManager.h
#pragma once
#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include "speaker.h"
#include <algorithm>
#include <ctime>
#include <deque>
#include <numeric>
#include <functional>
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//菜单功能void show_Menu();//退出系统void exitSystem();//记录比赛轮数int m_Insex;//成员属性//比赛选手 容器 12人vector<int>v1;//第一轮晋级 容器 6人vector<int>v2;//胜利前三名 容器 3人vector<int>vVictory;//存放编号 以及对应的 具体选手 容器map<int, Speaker>m_Speaker;//初始化属性void initSpeech();//初始化创建12名选手void createSpeaker();//开始比赛-比赛流程控制void startSpeech();//抽签void speechDraw();//开始比赛void speechContest();//析构函数~SpeechManager();
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{//初始化容器和属性this->initSpeech();//创建12名选手this->createSpeaker();
}//菜单功能
void SpeechManager::show_Menu()
{cout << "-------------------------------------" << endl;cout << "-----------欢迎参加演讲比赛----------" << endl;cout << "-----------1,开始演讲比赛-----------" << endl;cout << "-----------2,查看往届记录-----------" << endl;cout << "-----------3,清空比赛记录-----------" << endl;cout << "-----------0,退出比赛程序-----------" << endl;cout << "-------------------------------------" << endl;cout << endl;
}//退出功能
void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}void SpeechManager::initSpeech()
{//容器都置空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Insex = 1;
}void SpeechManager::createSpeaker()
{string nameSpeed = "ABCDEFGHIJKL";for (int i = 0; i < nameSpeed.size(); i++){string name = "选手:";name += nameSpeed[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,显示晋级结果 //第二轮比赛//1,抽签//2,比赛//3,显示最终结果 //4,保存分数到文件中
}//抽签
void SpeechManager::speechDraw()
{cout << "第 << " << this->m_Insex << " >> 轮选手正在抽签" << endl;cout << "------------------------------------------------------" << endl;cout << "抽签后演讲顺序如下:" << endl;if (this->m_Insex == 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;}cout<< "------------------------------------------------------" << endl;system("pause");//按任意键后进入下一个环节cout << endl;
}//开始比赛
void SpeechManager::speechContest()
{cout << "--------------第 << " << this->m_Insex << " >> 轮比赛开始--------------" << endl;multimap<double, int, greater<double>>groupScore;//临时容器 保存key粉丝 value选手编号int num = 0;//记录人员数,6个为1组vector<int>v_Src;//比赛的人员容器if (this->m_Insex == 1){v_Src = v1;}else{v_Src = 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用更大的倍数再除以10是因为更容易出现小数d.push_back(score);}sort(d.begin(), d.end(), greater<double>());//排序d.pop_front();//去掉最高分d.pop_back();//去掉最低分double sum = accumulate(d.begin(), d.end(), 0.0f);//获取总分double avg = sum / (double)d.size();//获取平均分,d.size()是整数所以强转成(double)类型//※测试打印平均分//cout << "编号:" << *it << " 选手:" << this->m_Speaker[*it].m_Name << " 平均分:" << avg << endl;this->m_Speaker[*it].m_Score[this->m_Insex - 1] = avg;//*it代表编号,通过*it拿到这个人[this->m_Insex - 1]位置上的avg得分//6个人一组,用临时容器保存groupScore.insert(make_pair(avg, *it));//key为avg平均分,value为*it选手编号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_Insex - 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_Insex == 1){v2.push_back((*it).second);}else{vVictory.push_back((*it).second);}}groupScore.clear();//小组容器清空cout << endl;}}cout << "--------------第 << " << this->m_Insex << " >> 轮比赛完毕--------------" << endl;system("pause");
}//析构函数
SpeechManager::~SpeechManager()
{}
59.5.2.7显示比赛分数
在speechManager.h中提供显示分数的成员函数void showScore();
在speechManager.cpp中实现成员函数void showScore();
speechManager.h
//显示比赛分数void showScore();
speechManager.cpp
void SpeechManager::startSpeech()
{//第一轮比赛//1,抽签this->speechDraw();//2,比赛this->speechContest();//3,显示晋级结果 this->showScore();//第二轮比赛//1,抽签//2,比赛//3,显示最终结果 //4,保存分数到文件中
}
//显示比赛分数
void SpeechManager::showScore()
{cout << "--------------第 << " << this->m_Insex << " >> 轮比赛晋级选手信息如下:--------------" << endl;vector<int>v;if (this->m_Insex == 1){v = v2;}else{v = vVictory;}for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << "选手编号:" << *it << " 姓名:" << m_Speaker[*it].m_Name << " 得分:" << m_Speaker[*it].m_Score[this->m_Insex - 1] << endl;}cout << endl;system("pause");//按任意键继续system("cls");//清屏
}
59.5.2.8第二轮比赛
第二轮比赛流程同第一轮,只是比赛的轮是+1,其余流程不变
在startSpeech比赛流程控制的函数中,加入第二轮的流程
speechManager.cpp
void SpeechManager::startSpeech()
{//第一轮比赛//1,抽签this->speechDraw();//2,比赛this->speechContest();//3,显示晋级结果 this->showScore();//第二轮比赛this->m_Insex++;//1,抽签this->speechDraw();//2,比赛this->speechContest();//3,显示最终结果 this->showScore();//4,保存分数到文件中
}
59.5.3保存分数
功能描述:
将每次演讲比赛的得分记录到文件中
功能实现:
在speechManager.h中添加保存记录的成员函数void saveRecord();
在speechManager.cpp中实现成员函数void saveRecord();
speechManager.h
//保存分数void saveRecord();
speechManager.cpp
//保存分数
void SpeechManager::saveRecord()
{ofstream ofs;ofs.open("演讲比赛管理系统.csv", ios::out|ios::app);//用追加的方式写文件//将每个选手数据 写入到文件中for (vector<int>::iterator it = vVictory.begin(); it != vVictory.end(); it++){ofs << "编号" << "," << *it << "," <<"得分" << "," << m_Speaker[*it].m_Score[1] << ",";//用,分割每个数据}ofs << endl;ofs.close();cout << "记录已经保存" << endl;
}
59.6查看记录
59.6.1读取记录分数
在speechManager.h中添加保存记录的成员函数void loadRecord();
添加判断文件是否为空的标志bool fileIsEmpty;
添加往届记录的容器map<int,vector< string>>m_Record;
在speechManager.cpp中实现成员函数void loadRecord();
演讲比赛管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{srand((unsigned int)time(NULL));//创建管理类对象SpeechManager sm;/*测试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;}*/int choice = 0;//用于存储用户输入while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 1://开始比赛sm.startSpeech();break;case 2://查看往届比赛记录sm.loadRecord();break;case 3://清空比赛记录break;case 0://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speechManager.h
//读取记录分数void loadRecord();//判断文件是否为空bool fileIsEmpty;//存放往届记录的容器map<int, vector<string>>m_Record;
speechManager.cpp
//构造函数
SpeechManager::SpeechManager()
{//初始化容器和属性this->initSpeech();//创建12名选手this->createSpeaker();//获取往届记录this->loadRecord();
}
//读取记录分数
void SpeechManager::loadRecord()
{ifstream ifs("演讲比赛管理系统.csv", ios::in);if (!ifs.is_open())//打开失败{this->fileIsEmpty = true;cout << "文件不存在" << endl;ifs.close();return;}//文件清空情况char ch;ifs >> ch;if(ifs.eof()){cout << "文件为空" << endl;this->fileIsEmpty = true;ifs.close();return;}//文件不为空this->fileIsEmpty = false;ifs.putback(ch);//读取的单个字符放回去string data;int insex = 0;while (ifs >> data)//ifs >> data 表示从文件流 ifs 中读取数据,并将读取到的数据存储在变量 data 中。{vector<string>v;//存放6个string字符串int pos = -1;//查到','位置的变量int start = 0;while (true){pos = data.find(",", start);//从0开始查找','if (pos == -1){break;//找不到break返回}string temp = data.substr(start, pos - start);v.push_back(temp);//cout << temp << endl;start = pos + 1;}this->m_Record.insert(make_pair(insex, v));insex++;}ifs.close();/*for (map<int, vector<string>>::iterator it = m_Record.begin(); it != m_Record.end(); it++){cout << it->first << "冠军编号:" << it->second[0] << " 分数:" << it->second[1] << endl;}*/
}
59.6.2查看记录功能
在speechManager.h中添加保存记录的成员函数void showRecord();
在speechManager.cpp中实现成员函数void showRecord();
演讲比赛管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{srand((unsigned int)time(NULL));//创建管理类对象SpeechManager sm;/*测试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;}*/int choice = 0;//用于存储用户输入while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 1://开始比赛sm.startSpeech();break;case 2://查看往届比赛记录sm.loadRecord();sm.showReord();break;case 3://清空比赛记录break;case 0://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speechManager.h
//查看记录功能void showReord();
speechManager.cpp
//查看记录功能
void SpeechManager::showReord()
{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");
}
59.6.3解决bug
59.6.3.1bug1
查看往届记录,若文件不存在或为空,并未提示
解决方式:
在showRecord函数中,开始判断文件状态并加以判断
speechManager.cpp
//查看记录功能
void SpeechManager::showReord()
{if (this->fileIsEmpty){cout << "文件不存在,或记录为空!" << endl;}else {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");
}
59.6.3.2bug2
若记录为空或不存在,比完赛后依然提示记录为空
解决方式:
saveRecord中更新文件为空的标志
speechManager.cpp
//保存分数
void SpeechManager::saveRecord()
{ofstream ofs;ofs.open("演讲比赛管理系统.csv", ios::out|ios::app);//用追加的方式写文件//将每个选手数据 写入到文件中for (vector<int>::iterator it = vVictory.begin(); it != vVictory.end(); it++){ofs << *it << "," << m_Speaker[*it].m_Score[1] << ",";//用,分割每个数据}ofs << endl;ofs.close();cout << "记录已经保存" << endl;//有记录了,文件不为空this->fileIsEmpty = false;
}
59.6.3.3bug3
比赛完后查不到本届比赛的记录,没有实时更新
解决方式:
比赛完毕后,所有数据重置
speechManager.cpp
void SpeechManager::startSpeech()
{//第一轮比赛//1,抽签this->speechDraw();//2,比赛this->speechContest();//3,显示晋级结果 this->showScore();//第二轮比赛this->m_Insex++;//1,抽签this->speechDraw();//2,比赛this->speechContest();//3,显示最终结果 this->showScore();//4,保存分数到文件中this->saveRecord();//重置比赛//初始化属性this->initSpeech();//创建选手this->createSpeaker();//获取往届记录this->loadRecord();cout << "本届比赛完毕!" << endl;system("pause");system("cls");
}
59.6.3.4bug4
在初始化时,没有初始化记录容器
解决方式:
initSpeech中添加 初始化记录容器
speechManager.cpp
void SpeechManager::initSpeech()
{//容器都置空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Insex = 1;//初始化记录容器this->m_Record.clear();
}
59.7清空记录
演讲比赛管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{srand((unsigned int)time(NULL));//创建管理类对象SpeechManager sm;/*测试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;}*/int choice = 0;//用于存储用户输入while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 1://开始比赛sm.startSpeech();break;case 2://查看往届比赛记录sm.loadRecord();sm.showReord();break;case 3://清空比赛记录sm.clearRecord();break;case 0://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speechManager.h
//清空记录功能实现void clearRecord();
speechManager.cpp
//清空记录功能实现
void SpeechManager::clearRecord()
{cout << "确认清空?" << endl;cout << "1,确认" << endl;cout << "2,返回" << endl;int select = 0;cin >> select;if (select == 1){//打开模式 ios::trunc如果存在删除文件并重新创建ofstream ofs("演讲比赛管理系统.csv", ios::trunc);ofs.close();//初始化属性this->initSpeech();//创建12名选手this->createSpeaker();//获取往届记录this->loadRecord();cout << "清空成功!" << endl;}system("pause");system("cls");
}
59.8全部代码
演讲比赛管理系统.cpp
#include <iostream>
#include"speechManager.h"
using namespace std;
int main()
{srand((unsigned int)time(NULL));//创建管理类对象SpeechManager sm;/*测试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;}*/int choice = 0;//用于存储用户输入while (true){sm.show_Menu();cout << "请输入您的选择:" << endl;cin >> choice;switch (choice){case 1://开始比赛sm.startSpeech();break;case 2://查看往届比赛记录sm.showReord();break;case 3://清空比赛记录sm.clearRecord();break;case 0://退出系统sm.exitSystem();break;default:system("cls");//清屏break;}}system("pause");return 0;
}
speaker.h
#pragma once
#include<iostream>
using namespace std;
class Speaker
{
public:string m_Name;//姓名double m_Score[2];//分数 最多有两轮得分
};
speechManager.h
#pragma once
#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include "speaker.h"
#include <algorithm>
#include <ctime>
#include <deque>
#include <numeric>
#include <functional>
#include <fstream>
#include <string>
//设计演讲比赛管理类
class SpeechManager
{
public://构造函数SpeechManager();//菜单功能void show_Menu();//退出系统void exitSystem();//记录比赛轮数int m_Insex;//成员属性//比赛选手 容器 12人vector<int>v1;//第一轮晋级 容器 6人vector<int>v2;//胜利前三名 容器 3人vector<int>vVictory;//存放编号 以及对应的 具体选手 容器map<int, Speaker>m_Speaker;//初始化属性void initSpeech();//初始化创建12名选手void createSpeaker();//开始比赛-比赛流程控制void startSpeech();//抽签void speechDraw();//开始比赛void speechContest();//显示比赛分数void showScore();//保存分数void saveRecord();//读取记录分数void loadRecord();//判断文件是否为空bool fileIsEmpty;//存放往届记录的容器map<int, vector<string>>m_Record;//查看记录功能void showReord();//清空记录功能实现void clearRecord();//析构函数~SpeechManager();
};
speechManager.cpp
#include "speechManager.h"
//构造函数
SpeechManager::SpeechManager()
{//初始化容器和属性this->initSpeech();//创建12名选手this->createSpeaker();//获取往届记录//this->loadRecord();
}//菜单功能
void SpeechManager::show_Menu()
{cout << "-------------------------------------" << endl;cout << "-----------欢迎参加演讲比赛----------" << endl;cout << "-----------1,开始演讲比赛-----------" << endl;cout << "-----------2,查看往届记录-----------" << endl;cout << "-----------3,清空比赛记录-----------" << endl;cout << "-----------0,退出比赛程序-----------" << endl;cout << "-------------------------------------" << endl;cout << endl;
}//退出功能
void SpeechManager::exitSystem()
{cout << "欢迎下次使用" << endl;system("pause");exit(0);
}void SpeechManager::initSpeech()
{//容器都置空this->v1.clear();this->v2.clear();this->vVictory.clear();this->m_Speaker.clear();//初始化比赛轮数this->m_Insex = 1;//初始化记录容器this->m_Record.clear();
}void SpeechManager::createSpeaker()
{string nameSpeed = "ABCDEFGHIJKL";for (int i = 0; i < nameSpeed.size(); i++){string name = "选手:";name += nameSpeed[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->showScore();//第二轮比赛this->m_Insex++;//1,抽签this->speechDraw();//2,比赛this->speechContest();//3,显示最终结果 this->showScore();//4,保存分数到文件中this->saveRecord();//重置比赛//初始化属性this->initSpeech();//创建选手this->createSpeaker();//获取往届记录this->loadRecord();cout << "本届比赛完毕!" << endl;system("pause");system("cls");
}//抽签
void SpeechManager::speechDraw()
{cout << "第 << " << this->m_Insex << " >> 轮选手正在抽签" << endl;cout << "------------------------------------------------------" << endl;cout << "抽签后演讲顺序如下:" << endl;if (this->m_Insex == 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;}cout<< "------------------------------------------------------" << endl;system("pause");//按任意键后进入下一个环节cout << endl;
}//开始比赛
void SpeechManager::speechContest()
{cout << "--------------第 << " << this->m_Insex << " >> 轮比赛开始--------------" << endl;multimap<double, int, greater<double>>groupScore;//临时容器 保存key粉丝 value选手编号int num = 0;//记录人员数,6个为1组vector<int>v_Src;//比赛的人员容器if (this->m_Insex == 1){v_Src = v1;}else{v_Src = 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用更大的倍数再除以10是因为更容易出现小数d.push_back(score);}sort(d.begin(), d.end(), greater<double>());//排序d.pop_front();//去掉最高分d.pop_back();//去掉最低分double sum = accumulate(d.begin(), d.end(), 0.0f);//获取总分double avg = sum / (double)d.size();//获取平均分,d.size()是整数所以强转成(double)类型//※测试打印平均分//cout << "编号:" << *it << " 选手:" << this->m_Speaker[*it].m_Name << " 平均分:" << avg << endl;this->m_Speaker[*it].m_Score[this->m_Insex - 1] = avg;//*it代表编号,通过*it拿到这个人[this->m_Insex - 1]位置上的avg得分//6个人一组,用临时容器保存groupScore.insert(make_pair(avg, *it));//key为avg平均分,value为*it选手编号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_Insex - 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_Insex == 1){v2.push_back((*it).second);}else{vVictory.push_back((*it).second);}}groupScore.clear();//小组容器清空cout << endl;}}cout << "--------------第 << " << this->m_Insex << " >> 轮比赛完毕--------------" << endl;system("pause");
}//显示比赛分数
void SpeechManager::showScore()
{cout << "--------------第 << " << this->m_Insex << " >> 轮比赛晋级选手信息如下:--------------" << endl;vector<int>v;if (this->m_Insex == 1){v = v2;}else{v = vVictory;}for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << "选手编号:" << *it << " 姓名:" << m_Speaker[*it].m_Name << " 得分:" << m_Speaker[*it].m_Score[this->m_Insex - 1] << endl;}cout << endl;system("pause");//按任意键继续system("cls");//清屏
}//保存分数
void SpeechManager::saveRecord()
{ofstream ofs;ofs.open("演讲比赛管理系统.csv", ios::out|ios::app);//用追加的方式写文件//将每个选手数据 写入到文件中for (vector<int>::iterator it = vVictory.begin(); it != vVictory.end(); it++){ofs << *it << "," << m_Speaker[*it].m_Score[1] << ",";//用,分割每个数据}ofs << endl;ofs.close();cout << "记录已经保存" << endl;//有记录了,文件不为空this->fileIsEmpty = false;
}//读取记录分数
void SpeechManager::loadRecord()
{ifstream ifs("演讲比赛管理系统.csv", ios::in);if (!ifs.is_open())//打开失败{this->fileIsEmpty = true;cout << "文件不存在" << endl;ifs.close();return;}//文件清空情况char ch;ifs >> ch;if(ifs.eof()){cout << "文件为空" << endl;this->fileIsEmpty = true;ifs.close();return;}//文件不为空this->fileIsEmpty = false;ifs.putback(ch);//读取的单个字符放回去string data;int insex = 0;while (ifs >> data)//ifs >> data 表示从文件流 ifs 中读取数据,并将读取到的数据存储在变量 data 中。{vector<string>v;//存放6个string字符串int pos = -1;//查到','位置的变量int start = 0;while (true){pos = data.find(",", start);//从0开始查找','if (pos == -1){break;//找不到break返回}string temp = data.substr(start, pos - start);v.push_back(temp);//cout << temp << endl;start = pos + 1;}this->m_Record.insert(make_pair(insex, v));insex++;}ifs.close();/*for (map<int, vector<string>>::iterator it = m_Record.begin(); it != m_Record.end(); it++){cout << it->first << "冠军编号:" << it->second[0] << " 分数:" << it->second[1] << endl;}*/
}//查看记录功能
void SpeechManager::showReord()
{if (this->fileIsEmpty){cout << "文件不存在,或记录为空!" << endl;}else {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");
}//清空记录功能实现
void SpeechManager::clearRecord()
{cout << "确认清空?" << endl;cout << "1,确认" << endl;cout << "2,返回" << endl;int select = 0;cin >> select;if (select == 1){//打开模式 ios::trunc如果存在删除文件并重新创建ofstream ofs("演讲比赛管理系统.csv", ios::trunc);ofs.close();//初始化属性this->initSpeech();//创建12名选手this->createSpeaker();//获取往届记录this->loadRecord();cout << "清空成功!" << endl;}system("pause");system("cls");
}//析构函数
SpeechManager::~SpeechManager()
{}
相关文章:
59,综合案例-演讲比赛流程管理系统
演讲比赛流程管理系统 59.1案例描述59.1.1比赛规则59.1.2程序功能 59.2创建管理类59.3菜单功能59.3.1添加成员函数59.3.2菜单功能实现 59.4退出功能59.4.1提供功能接口59.4.2实现退出功能 59.5演讲比赛功能59.5.1创建选手类59.5.2比赛59.5.2.1成员属性添加59.5.2.2初始化属性59…...
前端JS 展示上传图片缩略图(本地图片读取)
需求: 点击上传图片按钮,选择图片以后,不请求后端接口,直接将图片展示在缩略图中。 解决方案: 使用 FileReader 和 FileReader 中的 readAsDataURL 方法。 第一步 从input[type“file”] (上传文件标签) 里面拿到fil…...
Vue中$route和$router的区别
$router:用来操作路由,$route:用来获取路由信息 $router其实就是VueRouer的实例,对象包括了vue-router使用的实例方法,还有实例属性,我们可以理解为$router有一个设置的含义,比如设置当前的跳转…...
基于多任务学习卷积神经网络的皮肤损伤联合分割与分类
文章目录 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network摘要本文方法实验结果 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network 摘要 在…...
串口环形缓冲区
文章目录 一、串口环形缓冲区概念二、STC12例程(1)环形串口缓冲区结构体(2)串口环形缓冲区存和取数据(3)完整工程demo 一、串口环形缓冲区概念 串口环形缓冲区应用于嵌入式、物联网开发中处理接收串口数据…...
【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio完成简易通讯录
目录 🔆Cloud Studio 简介 操作步骤 1.登录 2.创建工作空间 3.初始界面 4.开发空间 5.保存自定义模板 🔆简易通讯录 1.实验要求 2.操作环境 3.源代码介绍 3.1 定义通讯录类 3.2 定义通讯录列表 3.3 添加联系人功能 3.4 修改联系人 3.5 …...
【技术积累】Vue.js中的核心知识
Vue的生命周期 Vue中的生命周期是指组件从创建到销毁的整个过程中,会触发一系列的钩子函数 Vue2中的生命周期 Vue2中的生命周期钩子函数是在组件的不同阶段执行的特定函数。这些钩子函数允许开发者在组件的不同生命周期阶段执行自定义的逻辑。 Vue2中的生命周期钩…...
flutter开发实战-显示本地图片网络图片及缓存目录图片
flutter开发实战-显示本地图片网络图片及缓存目录图片 在最近开发中碰到了需要显示缓存目录图片,这里顺便整理一下,显示本地图片、网络图片、缓存目录图片的方法。 一、工程本地图片显示 1 在项目根目录下创建名为 images文件夹,也可以将i…...
面对未来的算法备案法规:企业需要做哪些准备?
在信息时代,算法已经成为我们生活的一部分,涵盖了诸如搜索引擎、社交媒体、电子商务、广告投放等各个方面。然而,随着算法的广泛应用,其带来的问题也日益凸显。这引发了全球范围内的关注,未来的算法备案法规正在酝酿之…...
iptables的备份和还原
iptables的备份和还原 1、写在命令行当中的都是临时设置 2、把规则配置写在服务的文件当中,形成永久有效 备份:把iptables里面所有的配置都保存在/opt/ky30.bak中 iptables-save > /opt/ky30.bak 例: 默认配置文件在/etc/sysconfig/ip…...
easyUI框架学习
文章目录 一、前言二、引入使用easyUI 三、用法3.1 Dialog(对话框窗口)3.1.1 示例13.1.2 示例2 3.2 Layout(布局)3.2.1 示例1——通过标签创建布局3.2.2 示例2—— 创建嵌套布局 3.3 DateBox(日期输入框)3.…...
加入气压计模组,星斗3号将实现快速三维定位
随着信息技术的飞速发展,人们的生活正在发生巨大改变,人们对基于位置服务的需求越来越迫切,尤其是室内位置服务。 室外定位系统中BDS系统、GPS系统等受室内复杂环境条件限制精度大幅下降甚至失效,难以在室内定位中发挥作用,而室内二维定位技术缺乏高程信息,也难以满足人们对室…...
华为HCIP第二节-------------------------ISIS
IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionLessNetwork Protocol&…...
在Mac系统下搭建Selenium环境并驱动Chrome浏览器
本文带领那些使用Mac的童鞋们实现Selenium驱动Chrome浏览器,虽然会有坑,但是我们可以凭借敏捷的身手躲过。下面就开始吧: 安装selenium 打开终端 ->pip安装(安装命令:pip3 install selenium) 安装浏览…...
通过RPM方式安装,升级,卸载,以及配置使用MySQL
通过RPM方式安装,升级,卸载,以及配置使用MySQL 一、下载 MySQL是一种开源的关系数据库管理系统,被广泛应用于各种业务应用中。本文将讲解如何下载和安装MySQL的rpm安装包。 下载rmp安装包有多种方式: 1、官网下载 …...
六边形架构和分层架构的区别?
六边形架构和分层架构是什么? 六边形架构(Hexagonal Architecture)和分层架构(Layered Architecture)是两种常见的软件架构模式。六边形架构强调将核心业务逻辑与外部依赖解耦,通过接口与外部世界进行通信。…...
一封来自Java学姐的信
黑马JavaEE学科学姐想对学弟学妹们说:勤学如春起之苗,不见其增,日有所长。 辍学如磨刀之石,不见其损,日有所亏。 学科 | JavaEE 校区 | 太原 亲爱的学弟学妹们,在学校“混日子”的时间很快就过去了&…...
Mybatis增强版MyBatis-Flex简介
Mybatis增强版:Mybatis-Plus(使用的最多,老牌Mybatis增强框架,2016年开源)、Fluent-MyBatis(阿里云开发的Mybatis增强框架,来自阿里云.云效产品团队)、Mybatis-Flex。 Flex英文单词意思是灵活,Mybatis-Flex官方文档中多…...
MFC第二十一天 CS架构多页面开发与数据交互、CImageList图像列表介绍 、CListCtrl-SetItem设置列表项的方法
文章目录 CImageList图像列表介绍CListCtrl图标的原理CListCtrl列表图标设置CListCtrl-SetItem设置列表项的方法 CS架构多页面开发与数据交互添加用户实现向导多页数据交互pch.hCLientXq.h CAppCPage1.hCPage1.cppCPage2.hCPage2.cppCWorkerDlg .hCWorkerDlg.cpp 多页数据修改C…...
spring boot--自动化注入组件原理、内嵌tomcat-1
前言 我们知道开发spring boot项目,在启动类上添加注解SpringBootApplication ,然后引入要自动注入的组件依赖,然后现application.properties中加上相应配置就可以自动注入这个组件,那么下面看看自动注入组件是如何实现的 一、S…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...
