主頁 > 後端開發 > C++實體2--職工管理系統

C++實體2--職工管理系統

2022-05-05 06:26:15 後端開發

職工管理系統

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++教程

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/469677.html

標籤:其他

上一篇:祖傳Python代碼,含淚發出

下一篇:淺嘗Spring注解開發_宣告式事務及原理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more