Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <conio.h>
  5. using namespace std;
  6.  
  7. class NhanVien {
  8. protected:
  9. string _ma_nv;
  10. string _ho_ten;
  11. string _chuc_vu;
  12. string _gioi_tinh;
  13. string _que_quan;
  14. int _nam_vao_lam;
  15. public:
  16. string Get_MaNV() {
  17. return _ma_nv;
  18. }
  19. virtual void NhapThongTin_NV() {
  20. fflush(stdin);
  21. cout << "Ma nhan vien: ";
  22. getline(cin, _ma_nv);
  23. cout << "Ho ten: ";
  24. getline(cin, _ho_ten);
  25. cout << "Chuc vu: ";
  26. getline(cin, _chuc_vu);
  27. cout << "Que quan: ";
  28. getline(cin, _que_quan);
  29. cout << "Nam vao lam: ";
  30. cin >> _nam_vao_lam;
  31. cout << "Gioi tinh : ";
  32. fflush(stdin);
  33. getline(cin,_gioi_tinh);
  34.  
  35. }
  36. virtual void XuatThongTin_NV() {
  37. cout << "Ma nhan vien: " << _ma_nv << endl;
  38. cout << "Ho ten: " << _ho_ten << endl;
  39. cout << "Chuc vu: " << _chuc_vu << endl;
  40. cout << "Que quan: " << _que_quan << endl;
  41. cout << "Nam vao lam: " << _nam_vao_lam << endl;
  42. cout << "Gioi tinh : " << _gioi_tinh<<endl;
  43. }
  44.  
  45. virtual int TinhLuong() = 0;
  46. };
  47.  
  48.  
  49. class NVSanXuat : public NhanVien {
  50. int _so_sp;
  51. public:
  52. void NhapThongTin_NV() {
  53. NhanVien::NhapThongTin_NV();
  54. cout << "So san pham: ";
  55. cin >> _so_sp;
  56. }
  57. void XuatThongTin_NV() {
  58. NhanVien::XuatThongTin_NV();
  59. cout << "So san pham: " << _so_sp << endl;
  60. }
  61.  
  62. int TinhLuong() {
  63. return (_so_sp * 10000 + 100000 + (2017 - _nam_vao_lam) * 20000);
  64. }
  65. };
  66.  
  67.  
  68. class NVVanPhong : public NhanVien {
  69. int _muc_luong;
  70. int _so_ngay_nghi;
  71. public:
  72. void NhapThongTin_NV() {
  73. NhanVien::NhapThongTin_NV();
  74. cout << "Muc luong: ";
  75. cin >> _muc_luong;
  76. cout << "So ngay nghi: ";
  77. cin >> _so_ngay_nghi;
  78. }
  79. void XuatThongTin_NV() {
  80. NhanVien::XuatThongTin_NV();
  81. cout << "Muc luong: " << _muc_luong << endl;
  82. cout << "So ngay nghi: " << _so_ngay_nghi << endl;
  83. }
  84.  
  85. int TinhLuong() {
  86. return (_muc_luong + 100000 - _so_ngay_nghi * 10000 + (2017 - _nam_vao_lam) * 20000);
  87. }
  88. };
  89.  
  90.  
  91. class DSNhanVien {
  92. vector<NhanVien *> _ds;
  93. int MenuNV() {
  94. system("cls");
  95. int c = 0;
  96. cout << "---------------MENU--------------" << "\n1. Nhan vien san xuat\n2. Nhan vien van phong";
  97. while (true) {
  98. cout << "\n\tLua chon (1|2): ";
  99. cin >> c;
  100. if (c == 1 || c == 2)
  101. break;
  102. }
  103. return c;
  104. }
  105. int Menu() {
  106. system("cls");
  107. int c = 0;
  108. cout << "---------------MENU--------------" << "\n1. Them nhan vien\n2. Xem danh sach nhan vien\n3. Tim nhan vien";
  109. while (true) {
  110. cout << "\n\tLua chon (1|2|3): ";
  111. cin >> c;
  112. if (c == 1 || c == 2 || c == 3)
  113. break;
  114. }
  115. return c;
  116. }
  117. int MenuNhanVien() {
  118. int c = 0;
  119. cout << "---------------MENU--------------" << "\n1. Sua nhan vien\n2. Xoa nhan vien\n3. Chen nhan vien\n4. Tiep theo";
  120. while (true) {
  121. cout << "\n\tLua chon (1|2|3|4): ";
  122. cin >> c;
  123. if (c == 1 || c == 2 || c == 3 || c == 4)
  124. break;
  125. }
  126. return c;
  127. }
  128.  
  129. public:
  130. void NhapDSNV() {
  131. NhanVien *nv = NULL;
  132. while (true) {
  133. switch (MenuNV()) {
  134. case 1:
  135. nv = new NVSanXuat;
  136. break;
  137. case 2:
  138. nv = new NVVanPhong;
  139. break;
  140. }
  141. nv->NhapThongTin_NV();
  142. _ds.push_back(nv);
  143.  
  144. cout << "An ESC de ket thuc";
  145. if (getch() == 27)
  146. break;
  147. }
  148. }
  149. // xu?t nhân viên t? v? trí iterator truy?n vào. ý nghia là n?u g?i hàm này c?n ph?i có di?m xu?t phát
  150. void XuatDSNV(vector<NhanVien *>::iterator start) {
  151. NhanVien *nv;
  152. for (vector<NhanVien *>::iterator it = start; it != _ds.end(); it++) {
  153. system("cls");
  154. // hi?n th? thông tin ra màn hình và hi?n th? menu option
  155. (*it)->XuatThongTin_NV();
  156. cout << "Luong: " << (*it)->TinhLuong() << endl;
  157. switch (MenuNhanVien()) {
  158. case 1:
  159. // c?p nh?t lai thông tin
  160. (*it)->NhapThongTin_NV();
  161. break;
  162. case 2:
  163. // xóa v? trí t? it, sau khi xóa gi?m it di 1 don v? d? k?t thúc vòng for nó c?ng l?i 1 don v? (it++),
  164. // nhu v?y thì nó quay l?i v? trí v?a m?i xóa d? ki?m tra cái m?i du?c c?p nhât thay v? trí xóa
  165. _ds.erase(it);
  166. it--;
  167. break;
  168. case 3:
  169. // ki?m tra lo?i nhân viên c?n nh?p
  170. switch (MenuNV()) {
  171. case 1:
  172. nv = new NVSanXuat;
  173. break;
  174. case 2:
  175. nv = new NVVanPhong;
  176. break;
  177. }
  178. // nh?p thông tin cho nhân viên dó và chèn vào v? trí c?a it
  179. // d? tránh l?i v?i it thì return thay cho it-- hay it++
  180. nv->NhapThongTin_NV();
  181. _ds.insert(it, nv);
  182. return;
  183. }
  184.  
  185. }
  186. }
  187. // tr? v? v? trí iterator có mã nhân viên b?ng mã nhân viên truy?n vào
  188. vector<NhanVien *>::iterator TimNV(string ma_nv) {
  189. vector<NhanVien *>::iterator it;
  190. for (it = _ds.begin(); it != _ds.end(); it++) {
  191. if ((*it)->Get_MaNV() == ma_nv)
  192. break;
  193. }
  194. return it;
  195. }
  196.  
  197. // hàm này s? ch?y liên t?c cho d?n khi ?n ESC
  198. void Loop() {
  199. while (true) {
  200. // hi?n th? menu ch?n
  201. switch (Menu()) {
  202. case 1:
  203. // nh?p lu?ng nhân viên không gi?i h?n cho d?n khi ?n ESC
  204. NhapDSNV();
  205. continue;
  206. case 2:
  207. // xu?t danh sách nhân viên b?t d?u t? v? trí d?u danh sách
  208. XuatDSNV(_ds.begin());
  209. break;
  210. case 3:
  211. // Tìm ki?m nhân viên v?i ma_nv
  212. fflush(stdin);
  213. string ma_nv;
  214. cout << "Ma nhan vien: ";
  215. getline(cin, ma_nv);
  216. vector<NhanVien *>::iterator start = TimNV(ma_nv);
  217. // start == _ds.end t?c là không có nhân viên nào trùng v?i ma_nv c?n tìm
  218. if (start == _ds.end()) {
  219. cout << "Khong tim thay" << endl;
  220. }
  221. // tru?ng h?p còn l?i là tìm th?y và b?t d?u xu?t danh sách t? v? trí tìm th?y tr? di
  222. else {
  223. XuatDSNV(start);
  224. }
  225. break;
  226. }
  227.  
  228.  
  229. cout << "Nhan ESC de ket thuc";
  230. if (getch() == 27)
  231. break;
  232. }
  233. }
  234. };
  235.  
  236. int main() {
  237. DSNhanVien ds;
  238. ds.Loop();
  239. return 0;
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement