当前位置:网站首页>STL案例-招聘新员工
STL案例-招聘新员工
2022-08-02 17:34:00 【所念非欢】
1.需求分析
- 对新招聘员工信息进行录入(测试时员工可以进行随机生成)
- 对员工部门, 职位和工资随机进行分配
- 根据工资,进行降序排列
- 分部门显示员工信息
- 查找员工信息
- 员工在部门中有不同的职位,要求如下:
- 部门经理只能有一名
- 部门副经理两名
- 三种职位工资只能是降序
- 部门员工若干
2.使用头文件
- string
- map
- vector:
- set
- multiset
3.自定义类
3.1 Worker类
Worker.h
#pragma once
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;
class Worker
{
public:
string name; // 姓名
int age; // 年龄
int depart_no; // 部门编号
int post_no; // 职位编号
double salary; // 工资
Worker(string name, int age); // 员工信息录入
void allocation(map<int, vector<int>>& Count); // 分配部门,职位和工资
};
Worker.cpp
#include "Worker.h"
#include <map>
#include <vector>
Worker::Worker(string name, int age)
{
this->name = name;
this->age = age;
}
void Worker::allocation(map<int, vector<int>>& Count)
{
this->depart_no = rand() % 4 + 1; // 随机部门
this->post_no = (rand() % 3 + 1) * 11; // 随机职位
// 对人数的存储结构是在vector容器的职位编号/11-1的位置存储人数个数
int pos = this->post_no / 11 - 1; // 确定人数存储位置
// 判断人数是否超过限定值
while (Count.at(this->depart_no).at(pos) == (pos + 1)) // 人数限制 = 存储位置 + 1,根据这个关系判断是否超出人员限制
{
if (pos == 2) // 如果是普通员工,则没有人数限制,跳出循环
{
break;
}
this->post_no += 11; // 职位编号增加一个等级
++pos; // 存储位置后移
}
++Count[this->depart_no][pos]; // 确定存储位置后人数加一
this->salary = rand() % 10 * 100 + 5000 - this->post_no * 100; // 随机工资
}
3.2 myCompare类(伪函数)
myCompare.h
#pragma once
#include "Worker.h"
class myCompare
{
public:
bool operator()(Worker w1, Worker w2)const;
};
myCompare.cpp
#include "myCompare.h"
bool myCompare::operator()(Worker w1, Worker w2)const
{
return w1.salary > w2.salary;
}
4.实现代码
main.cpp
#include "Worker.h"
#include "myCompare.h"
#include <map>
#include <set>
#include <vector>
map<int, string> depart_mp; // 部门编号和名称对应关系
map<int, string> post_mp; // 职位编号和名称对应关系
// 声明部门列表
multiset<Worker, myCompare> workList_PartA;
multiset<Worker, myCompare> workList_PartB;
multiset<Worker, myCompare> workList_PartC;
multiset<Worker, myCompare> workList_PartD;
// 定义工人列表
multiset<Worker, myCompare> WorkerInfo[4] = {
workList_PartA, workList_PartB, workList_PartC, workList_PartD};
// 分职位统计部门人数
vector<int> Part_A;
vector<int> Part_B;
vector<int> Part_C;
vector<int> Part_D;
// 部门编号和部门人数的对应关系
map<int, vector<int>> Count;
// 初始化部门对应关系
void Init_Department()
{
depart_mp.insert(make_pair(1, "部门A"));
depart_mp.insert(make_pair(2, "部门B"));
depart_mp.insert(make_pair(3, "部门C"));
depart_mp.insert(make_pair(4, "部门D"));
}
// 初始化职位对应关系
void Init_PostList()
{
post_mp.insert(make_pair(11, "经理"));
post_mp.insert(make_pair(22, "副经理"));
post_mp.insert(make_pair(33, "员工"));
}
// 初始化部门人数列表
void Init_Count()
{
for (int i = 0; i < 3; ++i)
{
Part_A.push_back(0);
Part_B.push_back(0);
Part_C.push_back(0);
Part_D.push_back(0);
}
Count.insert(make_pair(1, Part_A));
Count.insert(make_pair(2, Part_B));
Count.insert(make_pair(3, Part_C));
Count.insert(make_pair(4, Part_D));
}
// 初始化的总函数
void init() // 初始化
{
Init_Department();
Init_PostList();
Init_Count();
}
// 输入工人信息
void inputInfo()
{
int num;
cout << "输入招聘人数:";
cin >> num;
string name;
char nameSeed = 'A';
for (int i = 0; i < num; ++i)
{
name = "工人";
name += nameSeed + i;
Worker temp(name, rand() % 11 + 18);
temp.allocation(Count);
WorkerInfo[temp.depart_no - 1].insert(temp);
}
}
// 重载左移运算符,实现自定义数据类型Worker的cout
ostream& operator<<(ostream& cout, Worker worker)
{
cout << "\t员工姓名:" << worker.name << " 年龄:" << worker.age << " 职位:" << depart_mp[worker.depart_no] << post_mp[worker.post_no] << " 工资:" << worker.salary;
return cout;
}
// 输出所有工人信息
void PrintInfo()
{
for (int i = 0; i < 4; ++i)
{
for (multiset<Worker, myCompare>::iterator it = WorkerInfo[i].begin(); it != WorkerInfo[i].end(); ++it)
{
cout << *it << endl;
}
cout << "========================================================================" << endl;
}
}
// 实现对输入姓名的工人信息的查找
void findWorker()
{
string name;
cout << "请输入员工姓名:";
cin >> name;
bool flag = false;
for (int i = 0; i < 4; ++i)
{
for (multiset<Worker, myCompare>::iterator it = WorkerInfo[i].begin(); it != WorkerInfo[i].end(); ++it)
{
if (name == (*it).name)
{
cout << (*it) << endl;
flag = true;
break;
}
}
if (flag)
{
break;
}
}
if (flag)
{
cout << "查找成功!" << endl;
}
else
{
cout << "查找失败!" << endl;
}
}
int main()
{
// 功能函数的调用
init();
inputInfo();
PrintInfo();
findWorker();
system("pause");
return 0;
}
边栏推荐
- Security First: Tools You Need to Know to Implement DevSecOps Best Practices
- 一朵“云“如何带来产业新变革
- 租房小程序自动定位城市
- 蔚来杯2022牛客暑期多校训练营5 ABCDFGHK
- 分布式 | dble 启动的时候做了什么之配置检测
- H.265视频流媒体播放器EasyPlayer.js集成时报错“SourceBuffer ”如何解决?
- golang源码分析(3):thrift
- navicat creates a connection 2002-can't connect to server on localhost (10061) and the mysql service has started the problem
- 启航
- 再获权威认证!马上消费安逸花APP通过中国信通院“金融APP人脸识别安全能力评测”
猜你喜欢
2022安全员-C证考试题库模拟考试平台操作
全面认识二极管,一篇文章就够了
字节面试官狂问我:你没有高并发、性能调优经验,为什么录取你?
今年上半年,我国公路建设总体形势持续向好
SQL Statement Basics
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
Inconsistency between oracle and mysql statement results
NAACL 2022 | 具有元重加权的鲁棒自增强命名实体识别技术
再获权威认证!马上消费安逸花APP通过中国信通院“金融APP人脸识别安全能力评测”
故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
随机推荐
恒驰5真的没大卖
golang 计算器实现
腾讯架构师是如何解释:Redis高性能通信的原理(精华版)
Kubernetes:(七)优化大法(江湖失传已久的武林秘籍)
golang源码阅读(11)GO中各个目录的功能
Smart Contract Security - delegatecall (1)
php弱类型-攻防世界lottery
SQL 正则解析手机号码提供商
如何生成随机数+原理详细分析
字节面试官狂问我:你没有高并发、性能调优经验,为什么录取你?
Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
嵌入式Qt-做一个秒表
Navicat 连接Oracle时提示oracle library is not loaded的问题解决
NAACL 2022 | 具有元重加权的鲁棒自增强命名实体识别技术
NeRF:火爆科研圈的三维重建技术大揭秘
MySQL常见函数
创新云集技术咖,工赋汇聚实战派:2022工赋开发者峰会
MySQL常用的日期时间函数
navicat creates a connection 2002-can't connect to server on localhost (10061) and the mysql service has started the problem