草庐IT

C++实例2--职工管理系统

LYH-win 2023-03-28 原文

职工管理系统

1.  头文件

1.1 workerManager.h

  系统类

 1 #pragma once  // 防止头文件重复包含
 2 #include<iostream>  // 包含输入输出流头文件
 3 #include<fstream>  // 文件读写头文件
 4 using namespace std;  // 使用标准命名空间
 5 #include "worker.h"
 6 #include "employee.h"
 7 #include "manager.h"
 8 #include "boss.h"
 9 
10 #define FILENAME "employee.txt"
11 
12 class WorkerManager {
13 public:
14 
15     // 构造函数
16     WorkerManager();
17 
18     // 展示菜单
19     void Show_Menu();
20 
21     // 退出系统
22     void exitSystem();
23 
24     // 记录文件中人数的个数
25     int m_EmpNum;
26 
27     // 员工数组的指针
28     Worker** m_EmpArray;
29 
30     // 增加职工
31     void Add_Emp();
32 
33     // 保存文件
34     void save();
35 
36     // 标志文件是否为空
37     bool m_FileIsEmpty;
38 
39     // 统计人数
40     int get_EmpNum();
41 
42     // 初始化员工
43     void init_Emp();
44 
45     // 显示职工
46     void Show_Emp();
47 
48     // 判断职工是否存在(未删除做准备)
49     int IsExit(int id);
50 
51     // 删除职工
52     void Del_Emp();
53 
54     // 修改职工
55     void Mod_Emp();
56 
57     // 查找职工
58     void Find_Emp();
59 
60     // 排序职工
61     void Sort_Emp();
62 
63     // 清空文件
64     void Clean_File();
65 
66     // 析构函数
67     ~WorkerManager();
68 
69 
70 };

 

1.2 worker.h

  员工基类(抽象类)

 1 #pragma once
 2 #include <iostream>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 // 职工抽象类
 8 class Worker {
 9 public:
10 
11     // 显示个人信息
12     virtual void showInfo() = 0;
13 
14     // 获取岗位信息
15     virtual string getDeptName() = 0;
16 
17     int m_Id;  // 职工编号
18     string m_Name;  // 职工姓名
19     int m_DeptId;  // 职工所在部门名称编号
20 };

 

1.3 employee.h

  员工类

 1 #pragma once
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 
 6 #include "worker.h"
 7 
 8 // 员工类
 9 class Employee : public Worker {
10 public:
11     // 构造函数
12     Employee(int id, string name, int dId);
13 
14     // 显示个人信息
15     virtual void showInfo();
16 
17     // 获取职工岗位名称
18     virtual string getDeptName();
19 
20 };

 

1.4 manager.h

  经理类

 1 #pragma once
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 
 6 #include "worker.h"
 7 
 8 // 经理类
 9 class Manager: public Worker {
10 public:
11     // 构造函数
12     Manager(int id, string name, int dId);
13 
14     // 显示个人信息
15     virtual void showInfo();
16 
17     // 获取职工岗位名称
18     virtual string getDeptName();
19 
20 };

 

1.5 boss.h

  老板类

 1 #pragma once
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 
 6 #include "worker.h"
 7 
 8 // 经理类
 9 class Boss : public Worker {
10 public:
11     // 构造函数
12     Boss(int id, string name, int dId);
13 
14     // 显示个人信息
15     virtual void showInfo();
16 
17     // 获取职工岗位名称
18     virtual string getDeptName();
19 
20 };

 

2. 源文件

2.1 workerManager.cpp

  系统类

  1 #include "workerManager.h"
  2 
  3 
  4 WorkerManager::WorkerManager() {
  5 
  6     ifstream ifs;
  7     ifs.open(FILENAME, ios::in);  // 读文件
  8 
  9     // 1.文件不存在情况
 10     if (!ifs.is_open()) {
 11         cout << "文件不存在" << endl;  // 测试输出
 12         this->m_EmpNum = 0;  // 初始化人数
 13         this->m_FileIsEmpty = true;  // 初始化文件为空标志
 14         this->m_EmpArray = NULL;  // 初始化数组指针
 15         ifs.close();  // 关闭文件
 16         return;
 17     }
 18 
 19     // 2.文件存在情况
 20     char ch;
 21     ifs >> ch;
 22     if (ifs.eof()) {
 23         cout << "文件为空" << endl;
 24         this->m_EmpNum = 0;
 25         this->m_FileIsEmpty = true;
 26         this->m_EmpArray = NULL;
 27         ifs.close();
 28         return;
 29     }
 30 
 31     // 3.文件存在,并且记录数据
 32     int num = this->get_EmpNum();
 33     //cout << "职工个数为:" << num << endl;  // 测试代码
 34     this->m_EmpNum = num; // 更新成员属性
 35 
 36     // 根据职工数创建数组(开辟空间)
 37     this->m_EmpArray = new Worker * [this->m_EmpNum];
 38     // 初始化职工(将文件中的数据,存放到数组中)
 39     init_Emp();
 40 
 41 
 42 }
 43 
 44 WorkerManager::~WorkerManager() {
 45     if (this->m_EmpArray != NULL) {
 46         delete[] this->m_EmpArray;
 47         this->m_EmpArray = NULL;
 48     }
 49 }
 50 
 51 // 展示菜单
 52 void WorkerManager::Show_Menu() {
 53 
 54     cout << "***************************************************" << endl;
 55     cout << "**************  欢迎使用职工管理系统  *************" << endl;
 56     cout << "*****************  0.退出管理系统  ****************" << endl;
 57     cout << "*****************  1.增加职工信息  ****************" << endl;
 58     cout << "*****************  2.显示职工信息  ****************" << endl;
 59     cout << "*****************  3.删除离职职工  ****************" << endl;
 60     cout << "*****************  4.修改离职职工  ****************" << endl;
 61     cout << "*****************  5.查找职工信息  ****************" << endl;
 62     cout << "*****************  6.按照编号排序  ****************" << endl;
 63     cout << "*****************  7.清空所有文档  ****************" << endl;
 64     cout << "***************************************************" << endl;
 65     cout << endl;
 66 
 67 }
 68 
 69 // 退出系统
 70 void WorkerManager::exitSystem()
 71 {
 72     cout << "欢迎下次使用!" << endl;
 73     system("pause");
 74     exit(0);  // 退出系统
 75 }
 76 
 77 // 保存文件
 78 void WorkerManager::save() {
 79     ofstream ofs;
 80     ofs.open(FILENAME, ios::out);
 81 
 82     for (int i = 0; i < this->m_EmpNum; i++) {
 83 
 84         ofs << this->m_EmpArray[i]->m_Id << " "
 85             << this->m_EmpArray[i]->m_Name << " "
 86             << this->m_EmpArray[i]->m_DeptId << endl;
 87     }
 88 
 89     ofs.close();
 90 
 91 }
 92 
 93 // 增加职工
 94 void WorkerManager::Add_Emp() {
 95     cout << "请输入增加职工的数量:" << endl;
 96     int addNum = 0;
 97     cin >> addNum;
 98 
 99     if (addNum > 0) {
100         // 计算新空间大小
101         int newSize = this->m_EmpNum + addNum;  // 新空间人数 = 原来记录人数 + 新增人数
102 
103         // 开辟新空间
104         Worker** newSpace = new Worker * [newSize];
105 
106         // 将原空间下的内容放到新空间下
107         if (this->m_EmpArray != NULL) {
108             for (int i = 0; i < this->m_EmpNum; i++) {
109                 newSpace[i] = this->m_EmpArray[i];
110             }
111         }
112 
113         // 添加新数据
114         for (int i = 0; i < addNum; i++) {
115             int id;  // 职工编号
116             string name;  // 职工姓名
117             int dSelect;  // 部门选择
118 
119             cout << "请输入第" << i + 1 << "个新职工编号:" << endl;
120             cin >> id;
121 
122             cout << "请输入第" << i + 1 << "个新职工姓名:" << endl;
123             cin >> name;
124 
125             cout << "请选择该职工的岗位:" << endl;
126             cout << "1、普通员工" << endl;
127             cout << "2、经理" << endl;
128             cout << "3、老板" << endl;
129             cin >> dSelect;
130 
131             Worker* worker = NULL;
132             switch (dSelect)
133             {
134             case 1:  // 普通员工
135                 worker = new Employee(id, name, 1);
136                 break;
137             case 2:  // 经理
138                 worker = new Manager(id, name, 2);
139                 break;
140             case 3:  // 老板
141                 worker = new Boss(id, name, 3);
142                 break;
143             default:
144                 break;
145             }
146 
147             newSpace[this->m_EmpNum + i] = worker;
148 
149         }
150 
151         // 释放原有空间
152         delete[] this->m_EmpArray;
153 
154         // 更改新空间的指向
155         this->m_EmpArray = newSpace;
156 
157         // 更新新的个数
158         this->m_EmpNum = newSize;
159 
160         // 更新职工不为空标志
161         this->m_FileIsEmpty = false;
162 
163         // 提示信息
164         cout << "成功添加" << addNum << "名新职工!" << endl;
165 
166         // 保存到文件中
167         this->save();
168 
169     }
170     else
171     {
172         cout << "输入有误!" << endl;
173     }
174 
175     // 按任意键后,清屏,返回到上级目录
176     system("pause");
177     system("cls");
178 
179 }
180 
181 // 获取当前职工数量
182 int WorkerManager::get_EmpNum() {
183     ifstream ifs;
184     ifs.open(FILENAME, ios::in);
185 
186     int id;
187     string name;
188     int dId;
189 
190     int num = 0;
191 
192     while (ifs >> id && ifs >> name && ifs >> dId) {
193 
194         // 记录人数
195         num++;
196     }
197     ifs.close();
198 
199     return num;
200 }
201 
202 // 初始化员工
203 void WorkerManager::init_Emp() {
204     ifstream ifs;
205     ifs.open(FILENAME, ios::in);
206 
207     int id;
208     string name;
209     int dId;
210 
211     int index = 0;
212     while (ifs >> id && ifs >> name && ifs >> dId)
213     {
214         Worker* worker = NULL;
215         // 根据不同的部门ID创建不同对象
216 
217         if (dId == 1) {  // 1 普通员工
218             worker = new Employee(id, name, dId);
219         }
220         else if (dId == 2) {  // 2 经理
221             worker = new Manager(id, name, dId);
222         }
223         else {  // 3 老板
224             worker = new Boss(id, name, dId);
225         }
226 
227         // 存放在数组中
228         this->m_EmpArray[index] = worker;
229         index++;
230     }
231 
232     // 关闭文件
233     ifs.close();
234 }
235 
236 // 显示职工
237 void WorkerManager::Show_Emp() {
238     if (this->m_FileIsEmpty) {
239         cout << "文件不存在或记录为空!" << endl;
240     }
241     else {
242         for (int i = 0; i < m_EmpNum; i++) {
243             // 利用多态调用接口
244             this->m_EmpArray[i]->showInfo();
245         }
246     }
247 
248     system("pause");
249     system("cls");
250 }
251 
252 // 判断职工是否存在
253 int WorkerManager::IsExit(int id) {
254     // 按照职工编号判断职工是否存在
255     // 存在则返回职工在数组中的位置,不存在返回-1
256     int index = -1;
257 
258     for (int i = 0; i < this->m_EmpNum; i++) {
259         if (this->m_EmpArray[i]->m_Id == id) {
260             index = i;
261             break;
262         }
263     }
264     return index;
265 }
266 
267 // 删除职工
268 void WorkerManager::Del_Emp() {
269     if (this->m_FileIsEmpty) {
270         cout << "文件不存在或者记录为空!" << endl;
271     }
272     else
273     {
274         // 按照职工编号删除
275         cout << "请输入想要删除员工编号:" << endl;
276         int id = 0;
277         cin >> id;
278 
279         int index = this->IsExit(id);
280 
281         if (index != -1) {  // 说明职工存在,并且要删除掉index位置上的职工
282             for (int i = 0; i < this->m_EmpNum - 1; i++) {
283                 // 数据前移操作(覆盖删除)
284                 this->m_EmpArray[i] = this->m_EmpArray[i + 1];
285             }
286             this->m_EmpNum--;  // 更新数组中记录的人员个数
287 
288             // 数据同步更新到文件中
289             this->save();
290             cout << "删除成功!" << endl;
291 
292         }
293         else
294         {
295             cout << "职工不存在,删除失败!" << endl;
296         }
297 
298         system("pause");
299         system("cls");
300     }
301 }
302 
303 // 修改职工
304 void WorkerManager::Mod_Emp() {
305     if (this->m_FileIsEmpty) {
306         cout << "文件不存在或记录为空!" << endl;
307     }
308     else
309     {
310         cout << "请输入修改职工的编号:" << endl;
311         int id;
312         cin >> id;
313 
314         int ret = this->IsExit(id);
315         if (ret != -1) {
316             // 查找到编号职工
317             delete this->m_EmpArray[ret];
318 
319             int newId = 0;
320             string newName = "";
321             int dSelect = 0;
322 
323             cout << "查到:" << id << "号职工,请输入信职工编号:" << endl;
324             cin >> newId;
325 
326             cout << "请输入新姓名:" << endl;
327             cin >> newName;
328 
329             cout << "请选择新岗位:" << endl;
330             cout << "1、普通员工" << endl;
331             cout << "2、经理" << endl;
332             cout << "3、老板" << endl;
333             cin >> dSelect;
334 
335             Worker* worker = NULL;
336             switch (dSelect)
337             {
338             case 1:  // 普通员工
339                 worker = new Employee(newId, newName, dSelect);
340                 break;
341             case 2:  // 经理
342                 worker = new Manager(newId, newName, dSelect);
343                 break;
344             case 3:  // 老板
345                 worker = new Boss(newId, newName, dSelect);
346                 break;
347             default:
348                 break;
349             }
350 
351             // 更改数据到数组中
352             this->m_EmpArray[ret] = worker;
353 
354             cout << "修改成功!" << this->m_EmpArray[ret]->m_DeptId << endl;
355 
356             // 保存到文件中
357 
358             this->save();
359         }
360         else
361         {
362             cout << "修改失败,查无此人!" << endl;
363         }
364     }
365     system("pause");
366     system("cls");
367 }
368 
369 // 查找职工
370 void WorkerManager::Find_Emp() {
371     if (this->m_FileIsEmpty) {
372         cout << "文件不存在或记录为空!" << endl;
373     }
374     else
375     {
376         cout << "请输入查找的方式:" << endl;
377         cout << "1.按职工编号查找" << endl;
378         cout << "2.按职工姓名查找" << endl;
379 
380         int select = 0;
381         cin >> select;
382 
383         if (select == 1) {  // 按职工编号查找
384             int id;
385             cout << "请输入查找的职工编号:" << endl;
386             cin >> id;
387 
388             int ret = IsExit(id);
389             if (ret != -1) {
390                 cout << "查找成功!该职工信息如下:" << endl;
391                 this->m_EmpArray[ret]->showInfo();
392             }
393             else {
394                 cout << "查找失败,查无此人!" << endl;
395             }
396         }
397         else if(select == 2) {  // 按姓名查找
398             string name;
399             cout << "请输入查找的姓名:" << endl;
400             cin >> name;
401 
402             bool flag = false;  // 查找到的标注
403             for (int i = 0; i < m_EmpNum; i++) {
404                 if (m_EmpArray[i]->m_Name == name) {
405                     cout << "查找成功,职工编号为:"
406                         << m_EmpArray[i]->m_Id
407                         << "号的信息如下:" << endl;
408 
409                     flag = true;
410 
411                     this->m_EmpArray[i]->showInfo();
412                 }
413             }
414             if (flag == false) {
415                 cout << "查找失败,查无此人!" << endl;
416             }
417         }
418         else {
419             cout << "输入选项有误!" << endl;
420         }
421     }
422     system("pause");
423     system("cls");
424 }
425 
426 // 职工排序
427 void WorkerManager::Sort_Emp() {
428     if (this->m_FileIsEmpty) {
429         cout << "文件不存在或记录为空!" << endl;
430         system("pause");
431         system("cls");
432     }
433     else {
434         cout << "请选择排序方式:" << endl;
435         cout << "1.按照职工工号升序" << endl;
436         cout << "1.按照职工工号降序" << endl;
437 
438         int select = 0;
439         cin >> select;
440 
441         for (int i = 0; i < m_EmpNum; i++) {
442             int MinOrMax = i;
443             for (int j = i + 1; j < m_EmpNum; j++) {
444                 if (select == 1) {  // 升序
445                     if (m_EmpArray[MinOrMax]->m_Id > m_EmpArray[j]->m_Id) {
446                         MinOrMax = j;
447                     }
448                 }
449                 else {  // 降序
450                     if (m_EmpArray[MinOrMax]->m_Id < m_EmpArray[j]->m_Id) {
451                         MinOrMax = j;
452                     }
453                 }
454             }
455 
456             if (i != MinOrMax) {
457                 Worker* temp = m_EmpArray[i];
458                 m_EmpArray[i] = m_EmpArray[MinOrMax];
459                 m_EmpArray[MinOrMax] = temp;
460             }
461         }
462         cout << "排序成功,排序后的结果为:" << endl;
463         this->save();
464         this->Show_Emp();
465     }
466 }
467 
468 // 情况文件
469 void WorkerManager::Clean_File() {
470     cout << "确认情况?" << endl;
471     cout << "1.确认" << endl;
472     cout << "2.返回" << endl;
473 
474     int select = 0;
475     cin >> select;
476 
477     if (select == 1) {
478         // 打开模式 ios::trunc 如果文件存在,删除文件,并重新加载
479         ofstream ofs(FILENAME, ios::trunc);
480         ofs.close();
481 
482         // 同时保证内存清空
483         if (this->m_EmpArray != NULL) {
484             for (int i = 0; i < this->m_EmpNum; i++) {
485                 if (this->m_EmpArray[i] != NULL) {
486                     delete this->m_EmpArray[i];
487                 }
488             }
489             this->m_EmpNum = 0;
490             delete[] this->m_EmpArray;
491             this->m_EmpArray = NULL;
492             this->m_FileIsEmpty = true;
493         }
494         cout << "清空成功!" << endl;
495     }
496     system("pause");
497     system("cls");
498 }

 

2.2 employee.cpp

  员工类

 1 #include "employee.h"
 2 
 3 Employee::Employee(int id, string name, int dId) {
 4     this->m_Id = id;
 5     this->m_Name = name;
 6     this->m_DeptId = dId;
 7 }
 8 
 9 void Employee::showInfo() {
10     cout << "职工编号:" << this->m_Id 
11         << "\t职工姓名:" << this->m_Name
12         << "\t职工岗位:" << this->getDeptName()
13         << "\t岗位职责:完成经理交给的任务" << endl;
14 }
15 
16 string Employee::getDeptName() {
17     return string("员工");
18 }

 

2.3 manager.cpp

  经理类

 1 #include "manager.h"
 2 
 3 Manager::Manager(int id, string name, int dId) {
 4     this->m_Id = id;
 5     this->m_Name = name;
 6     this->m_DeptId = dId;
 7 }
 8 
 9 void Manager::showInfo() {
10     cout << "职工编号:" << this->m_Id
11         << "\t职工姓名:" << this->m_Name
12         << "\t职工岗位:" << this->getDeptName()
13         << "\t岗位职责:完成老板交给的任务,并下发任务给员工" << endl;
14 }
15 
16 string Manager::getDeptName() {
17     return string("经理");
18 }

 

2.4 Boss.cpp

  老板类

 1 #include "boss.h"
 2 
 3 Boss::Boss(int id, string name, int dId) {
 4     this->m_Id = id;
 5     this->m_Name = name;
 6     this->m_DeptId = dId;
 7 }
 8 
 9 void Boss::showInfo() {
10     cout << "职工编号:" << this->m_Id
11         << "\t职工姓名:" << this->m_Name
12         << "\t职工岗位:" << this->getDeptName()
13         << "\t岗位职责:管理公司所有事物" << endl;
14 }
15 
16 string Boss::getDeptName() {
17     return string("老板");
18 }

2.5 职工管理系统.cpp

  主函数

 1 #include<iostream>
 2 #include<string>
 3 
 4 #include "workerManager.h"
 5 //#include "employee.h"
 6 //#include "manager.h"
 7 //#include "boss.h"
 8 
 9 using namespace std;
10 
11 // 职工管理系统
12 
13 
14 int main() {
15 
16     WorkerManager wm;
17 
18     int choice = 0;
19 
20     while (true)
21     {
22 
23         // 展示主菜单
24         wm.Show_Menu();
25 
26         cout << "请输入您的选择:" << endl;
27         cin >> choice;
28 
29         switch (choice)
30         {
31         case 0:  // 退出系统
32             wm.exitSystem();
33             break;
34         case 1:  // 添加职工
35             wm.Add_Emp();
36             break;
37         case 2:  // 显示职工
38             wm.Show_Emp();
39             break;
40         case 3:  // 删除职工
41             wm.Del_Emp();
42             break;
43         case 4:  // 修改职工
44             wm.Mod_Emp();
45             break;
46         case 5:  // 查找职工
47             wm.Find_Emp();
48             break;
49         case 6:  // 排序职工
50             wm.Sort_Emp();
51             break;
52         case 7:  // 清空文件
53             wm.Clean_File();
54             break;
55         default:
56             system("cls");
57             break;
58         }
59     }
60 
61     system("pause");
62 
63     return 0;
64 
65 }

 

 

参考:《黑马程序员》C++教程

有关C++实例2--职工管理系统的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  3. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  4. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  5. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  6. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  7. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  8. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  9. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐