ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++进阶实例2--员工分组

2022-05-09 09:02:18  阅读:142  来源: 互联网

标签:Salary Name -- C++ 员工 second vector 分组 进阶


C++进阶实例2--员工分组

  1 #include<iostream>
  2 #include<map>
  3 #include<vector>
  4 #include<ctime>
  5 using namespace std;
  6 
  7 #define CEHUA 0
  8 #define MEISHU 1
  9 #define YANFA 2
 10 
 11 // 员工分组
 12 // 
 13 // 案例描述:
 14 //    1. 10名员工(ABCDEFGHIJ)
 15 //    2. 员工信息:姓名,薪资组成;部门:策划、没熟、研发
 16 //    3. 随机给10名员工分配部门和薪资
 17 //    4. 通过multimap进行信息的插入,key(部门编号),value(员工)
 18 //    5. 分部门显示员工信息
 19 // 
 20 // 解决思路:
 21 //    1. 创建10名员工,存入vector
 22 //    2. 遍历vector容器,取出每个员工,进行随机分组
 23 //    3. 分组后,将员工编号作为key,具体员工为value,存放到multimap容器中
 24 //    4. 分部门显示员工信息
 25 //  
 26 
 27 // 创建员工
 28 class Worker
 29 {
 30 public:
 31     string m_Name;
 32     int m_Salary;
 33 };
 34 
 35 void createWorker(vector<Worker>& v) {
 36 
 37     string nameSeed = "ABCDEFGHIJ";
 38     for (int i = 0; i < 10; i++) {
 39         Worker worker;
 40         worker.m_Name = "员工";
 41         worker.m_Name += nameSeed[i];
 42 
 43         worker.m_Salary = rand() % 10000 + 10000;  // 10000 ~ 19999;
 44 
 45         v.push_back(worker);
 46     }
 47 
 48 }
 49 
 50 // 员工分组
 51 void setGroup(vector<Worker>& v, multimap<int, Worker>& m) {
 52     for (vector<Worker>::iterator it = v.begin(); it != v.end(); it++) {
 53         // 产生随机部门编号
 54         int depId = rand() % 3;  // 0, 1, 2
 55 
 56         // 将员工插入到分组中
 57         // key表示部门编号,value表示具体员工
 58         m.insert(make_pair(depId, *it));
 59     }
 60 }
 61 
 62 // 分组显式
 63 void showWorkerByGroup(multimap<int, Worker>&m) {
 64 
 65     cout << "策划部们:" << endl;
 66     multimap<int, Worker>::iterator pos = m.find(CEHUA);
 67     int count = m.count(CEHUA);  // 统计具体人数
 68     int index = 0;
 69     for (; pos != m.end() && index < count; pos++, index++) {
 70         cout << "姓名:" << pos->second.m_Name << " 薪资:" << pos->second.m_Salary << endl;
 71     }
 72 
 73     cout << "-----------------------" << endl;
 74     cout << "美术部门:" << endl;
 75     pos = m.find(MEISHU);
 76     count = m.count(MEISHU);  // 统计具体人数
 77     index = 0;
 78     for (; pos != m.end() && index < count; pos++, index++) {
 79         cout << "姓名:" << pos->second.m_Name << " 薪资:" << pos->second.m_Salary << endl;
 80     }
 81 
 82     cout << "-----------------------" << endl;
 83     cout << "研发部门:" << endl;
 84     pos = m.find(YANFA);
 85     count = m.count(YANFA);  // 统计具体人数
 86     index = 0;
 87     for (; pos != m.end() && index < count; pos++, index++) {
 88         cout << "姓名:" << pos->second.m_Name << " 薪资:" << pos->second.m_Salary << endl;
 89     }
 90 }
 91 
 92 void test01() {
 93 
 94     // 随机数
 95     srand((unsigned int)time(NULL));
 96 
 97     // 1.创建员工
 98     vector<Worker>vWorker;
 99     createWorker(vWorker);
100 
101     // 测试员工信息
102     //for (vector<Worker>::iterator it = vWorker.begin(); it != vWorker.end(); it++) {
103     //    cout << "姓名:" << it->m_Name << " 工资:" << it->m_Salary << endl;
104     //}
105 
106     // 2.员工分组
107     multimap<int, Worker>mWorker;
108     setGroup(vWorker, mWorker);
109 
110     // 3.分组显式员工
111     showWorkerByGroup(mWorker);
112 }
113 
114 int main() {
115 
116     test01();
117 
118     system("pause");
119 
120     return 0;
121 }

 

标签:Salary,Name,--,C++,员工,second,vector,分组,进阶
来源: https://www.cnblogs.com/LYH-win/p/16245837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有