Advertisement
Guest User

Untitled

a guest
Nov 16th, 2021
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <deque>
  4. #include <map>
  5. #include <algorithm>
  6. #include <conio.h>
  7. enum class Jobs
  8. {
  9. Director = 1,
  10. Papersworker = 2,
  11. Guardian = 3,
  12. Programmer = 4
  13. };
  14. class Employee
  15. {
  16. public:
  17. std::string FirstName;
  18. std::string LastName;
  19. std::string Patronymic;
  20. double Salary;
  21. Employee() {};
  22. explicit Employee(std::string FirstName, std::string LastName,
  23. std::string Patronymic, double Salary)
  24. : FirstName(FirstName), LastName(LastName),
  25. Patronymic(Patronymic), Salary(Salary) {}
  26. bool operator==(Employee other) const
  27. {
  28. if (this->FirstName == other.FirstName &&
  29. this->LastName == other.LastName &&
  30. this->Patronymic == other.Patronymic)
  31. return true;
  32. else
  33. return false;
  34. }
  35. };
  36. class Director : public Employee
  37. {
  38. private:
  39. std::string FirstName;
  40. std::string LastName;
  41. std::string Patronymic;
  42. double Salary;
  43. public:
  44. Director() {};
  45. using Employee::Employee;
  46. const std::string Job = "Director";
  47. std::deque <Employee> Employees;
  48. void IncludeEmployee(Employee Empl)
  49. {
  50. this->Employees.push_back(Empl);
  51. }
  52. void ExcludeEmployee(Employee Empl)
  53. {
  54. Employees.erase(std::remove_if(
  55. Employees.begin(),
  56. Employees.end(),
  57. [&](Employee i) { return i == Empl; }),
  58. Employees.end());
  59. }
  60. void ChangeNameSalary(std::string FirstName, std::string LastName, std::string Patronymic, double Salary)
  61. {
  62. this->FirstName = FirstName;
  63. this->LastName = LastName;
  64. this->Patronymic = Patronymic;
  65. this->Salary = Salary;
  66. }
  67. void PrintDirector()
  68. {
  69. std::cout << "First name\t" << "Lastname\t" << "Patronymic\t" << "Salary\n" << this->FirstName << "\t\t" << this->LastName << "\t\t" << this->Patronymic << "\t" << this->Salary << "\n" << "Employees : \n" << std::flush;
  70. for (Employee emplo : this->Employees)
  71. std::cout << emplo.FirstName << "\t\t" << emplo.LastName << "\t" << emplo.Patronymic << "\t" << emplo.Salary << "\n" << std::flush;
  72. std::cout << "------------------------------------------------------------\n" << std::flush;
  73. }
  74. };
  75. class Papersworker : public Employee
  76. {
  77. private:
  78. std::string FirstName;
  79. std::string LastName;
  80. std::string Patronymic;
  81. double Salary;
  82. public:
  83. Papersworker() {};
  84. using Employee::Employee;
  85. const std::string Job = "Papersworker";
  86. std::map<std::string, double> Coefficient =
  87. {
  88. {"Director", 4.2},
  89. {"Papersworker", 1.2},
  90. {"Guardian", 1.5},
  91. {"Programmer", 2.5}
  92. };
  93. void ChangeCoefficient(std::string Job, double NewCoefficient)
  94. {
  95. Coefficient[Job] = NewCoefficient;
  96. }
  97. void ChangeNameSalary(std::string FirstName, std::string LastName, std::string Patronymic, double Salary)
  98. {
  99. this->FirstName = FirstName;
  100. this->LastName = LastName;
  101. this->Patronymic = Patronymic;
  102. this->Salary = Salary;
  103. }
  104. void PrintPapersworker()
  105. {
  106. std::cout << "First name\t" << "Lastname\t" << "Patronymic\t" << "Salary\n" << this->FirstName << "\t\t" << this->LastName << "\t" << this->Patronymic << "\t" << this->Salary << "\n" << std::flush;
  107. for (const auto& i : this->Coefficient)
  108. {
  109. std::cout << i.first << " = " << i.second << ";\t" << std::flush;
  110. }
  111. std::cout << "\n------------------------------------------------------------\n" << std::flush;
  112. }
  113. double GetSalary(double Salary, std::string Job)
  114. {
  115. return Salary * this->Coefficient[Job];
  116. }
  117. };
  118. class Guardian : public Employee
  119. {
  120. private:
  121. std::string FirstName;
  122. std::string LastName;
  123. std::string Patronymic;
  124. double Salary;
  125. public:
  126. Guardian() {};
  127. using Employee::Employee;
  128. const std::string Job = "Guardian";
  129. std::deque <std::string> Items;
  130. void IncludeItem(std::string Item)
  131. {
  132. this->Items.push_back(Item);
  133. }
  134. void ExcludeItem(std::string it)
  135. {
  136. this->Items.erase(std::remove_if(
  137. this->Items.begin(),
  138. this->Items.end(),
  139. [&](std::string i) { return i == it; }),
  140. this->Items.end());
  141. }
  142. void ChangeNameSalary(std::string FirstName, std::string LastName, std::string Patronymic, double Salary)
  143. {
  144. this->FirstName = FirstName;
  145. this->LastName = LastName;
  146. this->Patronymic = Patronymic;
  147. this->Salary = Salary;
  148. }
  149. void PrintGuardian()
  150. {
  151. std::cout << "First name\t" << "Lastname\t" << "Patronymic\t" << "Salary\n" << this->FirstName << "\t" << this->LastName << "\t" << this->Patronymic << "\t" << this->Salary << "\n" << std::flush;
  152. for (const auto& i : this->Items)
  153. {
  154. std::cout << i << ";\n" << std::flush;
  155. }
  156. std::cout << "------------------------------------------------------------\n" << std::flush;
  157. }
  158. };
  159. class Programmer : public Employee
  160. {
  161. private:
  162. std::string FirstName;
  163. std::string LastName;
  164. std::string Patronymic;
  165. double Salary;
  166. public:
  167. Programmer() {};
  168. using Employee::Employee;
  169. const std::string Job = "Programmer";
  170. enum Level
  171. {
  172. Junior,
  173. Middle,
  174. Senior,
  175. Lead
  176. };
  177. std::deque <std::string> Technologies;
  178. void IncludeTech(std::string Tech)
  179. {
  180. this->Technologies.push_back(Tech);
  181. }
  182. void ExcludeTech(std::string Tech)
  183. {
  184. this->Technologies.erase(std::remove_if(
  185. this->Technologies.begin(),
  186. this->Technologies.end(),
  187. [&](std::string i) { return i == Tech; }),
  188. this->Technologies.end());
  189. }
  190. void ChangeNameSalary(std::string FirstName, std::string LastName, std::string Patronymic, double Salary)
  191. {
  192. this->FirstName = FirstName;
  193. this->LastName = LastName;
  194. this->Patronymic = Patronymic;
  195. this->Salary = Salary;
  196. }
  197. void PrintProgrammer()
  198. {
  199. std::cout << "First name\t" << "Lastname\t" << "Patronymic\t" << "Salary\n" << this->FirstName << "\t" << this->LastName << "\t" << this->Patronymic << "\t" << this->Salary << "\n" << std::flush;
  200. for (const auto& i : this->Technologies)
  201. {
  202. std::cout << i << ";\n" << std::flush;
  203. }
  204. std::cout << "------------------------------------------------------------\n" << std::flush;
  205. }
  206. };
  207.  
  208. int main()
  209. {
  210. Director dir;
  211. Papersworker pwr;
  212. Guardian grd;
  213. Programmer prg;
  214. std::string job = "", item = "";
  215. Jobs jobs_enum;
  216. double coef = 0.0;
  217. std::string fn, ln, pc;
  218. double sr;
  219. // char i = '0', i2 = '0';
  220. //int jobid = 0;
  221. while (true)
  222. {
  223. std::cout << "\n1 - Enter a director name and salary\n2 - Print director's attributes\n3 - Include employee for director\n4 - Exclude employee for director\n5 - Enter papersworker name and salary\n6 - Print papersworker's attributes\n7 - Add or change job's coefficient\n8 - Get salary of worker\nq - Enter a guardian's name and salary\nw - Print guardian's attributes\ne - Include item for guardian\nr - Exclude item for guardian\na - Enter a programmer's name and salary\nw - Print programmer's attributes\ne - Include technology for programmer\nr - Exclude technology for programmer\n" << std::flush;
  224. // i = _getch();
  225.  
  226. // switch (i)
  227. switch(_getch())
  228. {
  229. case '1':
  230. try
  231. {
  232. std::cout << "\nEnter director's first name\t" << std::flush; std::cin >> fn;
  233. std::cout << "\nEnter director's last name\t" << std::flush; std::cin >> ln;
  234. std::cout << "\nEnter director's patronymic\t" << std::flush; std::cin >> pc;
  235. std::cout << "\nEnter director's salary\t" << std::flush; std::cin >> sr;
  236. dir.ChangeNameSalary(fn, ln, pc, sr);
  237. }
  238. catch (...)
  239. {
  240. std::cout << "Bad input.\n" << std::flush;
  241. //system("timeout 5 && cls");
  242. // system("timeout 5");
  243. // system("cls");
  244. }
  245. //system("timeout 5 && cls");
  246. // system("timeout 5");
  247. // system("cls");
  248. break;
  249. case '2':
  250. dir.PrintDirector();
  251. //system("timeout 5 && cls");
  252. // system("timeout 5");
  253. // system("cls");
  254. break;
  255. case '3':
  256. std::cout << "\n1 - Add a Papersworker\t2 - Add a Guardian\t3 - Add a Programmer\t" << std::flush; //i2 = _getch();
  257. // switch (i2)
  258. switch(_getch())
  259. {
  260. case '1':
  261. try
  262. {
  263. std::cout << "\nEnter papersworker's first name\t" << std::flush; std::cin >> fn;
  264. std::cout << "\nEnter papersworker's last name\t" << std::flush; std::cin >> ln;
  265. std::cout << "\nEnter papersworker's patronymic\t" << std::flush; std::cin >> pc;
  266. std::cout << "\nEnter papersworker's salary\t" << std::flush; std::cin >> sr;
  267. dir.IncludeEmployee((Employee)Papersworker(fn, ln, pc, sr));
  268. //system("timeout 5 && cls");
  269. // system("timeout 5");
  270. // system("cls");
  271. }
  272. catch (...)
  273. {
  274. std::cout << "Bad input." << std::flush;
  275. //system("timeout 5 && cls");
  276. // system("timeout 5");
  277. // system("cls");
  278. }
  279. break;
  280. case '2':
  281. try
  282. {
  283. std::cout << "\nEnter guardian's first name\t" << std::flush; std::cin >> fn;
  284. std::cout << "\nEnter guardian's last name\t" << std::flush; std::cin >> ln;
  285. std::cout << "\nEnter guardian's patronymic\t" << std::flush; std::cin >> pc;
  286. std::cout << "\nEnter guardian's salary\t" << std::flush; std::cin >> sr;
  287. dir.IncludeEmployee((Employee)Guardian(fn, ln, pc, sr));
  288. //system("timeout 5 && cls");
  289. // system("timeout 5");
  290. // system("cls");
  291. }
  292. catch (...)
  293. {
  294. std::cout << "Bad input.\n" << std::flush;
  295. //system("timeout 5 && cls");
  296. // system("timeout 5");
  297. // system("cls");
  298. }
  299. break;
  300. case '3':
  301. try
  302. {
  303. std::cout << "\nEnter programmer's first name\t" << std::flush; std::cin >> fn;
  304. std::cout << "\nEnter programmer's last name\t" << std::flush; std::cin >> ln;
  305. std::cout << "\nEnter programmer's patronymic\t" << std::flush; std::cin >> pc;
  306. std::cout << "\nEnter programmer's salary\t" << std::flush; std::cin >> sr;
  307. dir.IncludeEmployee((Employee)Programmer(fn, ln, pc, sr));
  308. //system("timeout 5 && cls");
  309. // system("timeout 5");
  310. // system("cls");
  311. }
  312. catch (...)
  313. {
  314. std::cout << "Bad input.\n" << std::flush;
  315. //system("timeout 5 && cls");
  316. // system("timeout 5");
  317. // system("cls");
  318. }
  319. break;
  320. }
  321. break;
  322. case '4':
  323. try
  324. {
  325. std::cout << "\nEnter excluding employee's first name\t" << std::flush; std::cin >> fn;
  326. std::cout << "\nEnter excluding employee's last name\t" << std::flush; std::cin >> ln;
  327. std::cout << "\nEnter excluding employee's patronymic\t" << std::flush; std::cin >> pc;
  328. dir.ExcludeEmployee(Employee(fn, ln, pc, 0U));
  329. //system("timeout 5 && cls");
  330. // system("timeout 5");
  331. // system("cls");
  332. }
  333. catch (...)
  334. {
  335. std::cout << "Bad input.\n" << std::flush;
  336. //system("timeout 5 && cls");
  337. // system("timeout 5");
  338. // system("cls");
  339. }
  340. break;
  341. case '5':
  342. try
  343. {
  344. std::cout << "\nEnter papersworker's first name\t" << std::flush; std::cin >> fn;
  345. std::cout << "\nEnter papersworker's last name\t" << std::flush; std::cin >> ln;
  346. std::cout << "\nEnter papersworker's patronymic\t" << std::flush; std::cin >> pc;
  347. std::cout << "\nEnter papersworker's salary\t" << std::flush; std::cin >> sr;
  348. pwr.ChangeNameSalary(fn, ln, pc, sr);
  349. //system("timeout 5 && cls");
  350. // system("timeout 5");
  351. // system("cls");
  352. }
  353. catch (...)
  354. {
  355. std::cout << "Bad input.\n" << std::flush;
  356. //system("timeout 5 && cls");
  357. // system("timeout 5");
  358. // system("cls");
  359. }
  360. break;
  361. case '6':
  362. pwr.PrintPapersworker();
  363. break;
  364. case '7':
  365. try
  366. {
  367. std::cout << "Enter a job's name (Director, Papersworker, Guardian, Programmer) or another to add:\t" << std::flush; std::cin >> job;
  368. std::cout << "Enter a job's coefficient:\t" << std::flush; std::cin >> coef;
  369. pwr.ChangeCoefficient(job, coef);
  370. //system("timeout 5 && cls");
  371. // system("timeout 5");
  372. // system("cls");
  373. }
  374. catch (...)
  375. {
  376. std::cout << "Bad input.\n" << std::flush;
  377. //system("timeout 5 && cls");
  378. // system("timeout 5");
  379. // system("cls");
  380. }
  381. break;
  382. case '8':
  383. std::cout << "Enter a job's id (1 - Director, 2 - Papersworker, 3 - Guardian, 4 - Programmer) to get salary:\t" << std::flush;
  384. // jobid = _getch();
  385. // jobs_enum = static_cast<Jobs>(jobid);
  386. //jobs_enum = static_cast<Jobs>(_getch());
  387. switch (static_cast<Jobs>(_getch()))
  388. {
  389. case Jobs::Director:
  390. try
  391. {
  392. std::cout << "\nEnter director's salary\t" << std::flush; std::cin >> sr;
  393. std::cout << "\nSalary\t" << pwr.GetSalary(sr, "Director");
  394. //system("timeout 5 && cls");
  395. // system("timeout 5");
  396. // system("cls");
  397. }
  398. catch (...)
  399. {
  400. std::cout << "Bad input.\n" << std::flush;
  401. //system("timeout 5 && cls");
  402. // system("timeout 5");
  403. // system("cls");
  404. }
  405. break;
  406. case Jobs::Papersworker:
  407. try
  408. {
  409. std::cout << "\nEnter papersworker's salary\t" << std::flush; std::cin >> sr;
  410. std::cout << "\nSalary\t" << pwr.GetSalary(sr, "Papersworker");
  411. //system("timeout 5 && cls");
  412. // system("timeout 5");
  413. // system("cls");
  414. }
  415. catch (...)
  416. {
  417. std::cout << "Bad input.\n" << std::flush;
  418. //system("timeout 5 && cls");
  419. // system("timeout 5");
  420. // system("cls");
  421. }
  422. break;
  423. case Jobs::Guardian:
  424. try
  425. {
  426. std::cout << "\nEnter guardian's salary\t" << std::flush; std::cin >> sr;
  427. std::cout << "\nSalary\t" << pwr.GetSalary(sr, "Guardian");
  428. //system("timeout 5 && cls");
  429. // system("timeout 5");
  430. // system("cls");
  431. }
  432. catch (...)
  433. {
  434. std::cout << "Bad input.\n" << std::flush;
  435. //system("timeout 5 && cls");
  436. // system("timeout 5");
  437. // system("cls");
  438. }
  439. break;
  440. case Jobs::Programmer:
  441. try
  442. {
  443. std::cout << "\nEnter programmer's salary\t" << std::flush; std::cin >> sr;
  444. std::cout << "\nSalary\t" << pwr.GetSalary(sr, "Programmer");
  445. //system("timeout 5 && cls");
  446. // system("timeout 5");
  447. // system("cls");
  448. }
  449. catch (...)
  450. {
  451. std::cout << "Bad input.\n" << std::flush;
  452. //system("timeout 5 && cls");
  453. // system("timeout 5");
  454. // system("cls");
  455. }
  456. break;
  457. }
  458. case 'q':
  459. try
  460. {
  461. std::cout << "\nEnter guardian's salary\t" << std::flush; std::cin >> sr;
  462. grd.ChangeNameSalary(fn, ln, pc, sr);
  463. //system("timeout 5 && cls");
  464. // system("timeout 5");
  465. // system("cls");
  466. }
  467. catch (...)
  468. {
  469. std::cout << "Bad input.\n" << std::flush;
  470. //system("timeout 5 && cls");
  471. // system("timeout 5");
  472. // system("cls");
  473. }
  474. break;
  475. case 'w':
  476. grd.PrintGuardian();
  477. break;
  478. case 'e':
  479. try
  480. {
  481. std::cout << "\nEnter guardian's item to add\t" << std::flush; std::cin >> item;
  482. grd.IncludeItem(item);
  483. //system("timeout 5 && cls");
  484. // system("timeout 5");
  485. // system("cls");
  486. }
  487. catch (...)
  488. {
  489. std::cout << "Bad input.\n" << std::flush;
  490. //system("timeout 5 && cls");
  491. // system("timeout 5");
  492. // system("cls");
  493. }
  494. break;
  495. case 'r':
  496. try
  497. {
  498. std::cout << "\nEnter guardian's item to exclude\t" << std::flush; std::cin >> item;
  499. grd.ExcludeItem(item);
  500. //system("timeout 5 && cls");
  501. // system("timeout 5");
  502. // system("cls");
  503. }
  504. catch (...)
  505. {
  506. std::cout << "Bad input.\n" << std::flush;
  507. //system("timeout 5 && cls");
  508. // system("timeout 5");
  509. // system("cls");
  510. }
  511. break;
  512. case 'a':
  513. try
  514. {
  515. std::cout << "\nEnter programmer's first name\t" << std::flush; std::cin >> fn;
  516. std::cout << "\nEnter programmer's last name\t" << std::flush; std::cin >> ln;
  517. std::cout << "\nEnter programmer's patronymic\t" << std::flush; std::cin >> pc;
  518. std::cout << "\nEnter programmer's salary\t" << std::flush; std::cin >> sr;
  519. prg.ChangeNameSalary(fn, ln, pc, sr);
  520. //system("timeout 5 && cls");
  521. // system("timeout 5");
  522. // system("cls");
  523. }
  524. catch (...)
  525. {
  526. std::cout << "Bad input.\n" << std::flush;
  527. //system("timeout 5 && cls");
  528. // system("timeout 5");
  529. // system("cls");
  530. }
  531. break;
  532. case 's':
  533. prg.PrintProgrammer();
  534. break;
  535. case 'd':
  536. try
  537. {
  538. std::cout << "\nEnter programmer's technology to include\t" << std::flush; std::cin >> item;
  539. prg.IncludeTech(item);
  540. //system("timeout 5 && cls");
  541. // system("timeout 5");
  542. // system("cls");
  543. }
  544. catch (...)
  545. {
  546. std::cout << "Bad input.\n" << std::flush;
  547. //system("timeout 5 && cls");
  548. // system("timeout 5");
  549. // system("cls");
  550. }
  551. break;
  552. case 'f':
  553. try
  554. {
  555. std::cout << "\nEnter programmer's technology to exclude\t" << std::flush; std::cin >> item;
  556. prg.ExcludeTech(item);
  557. //system("timeout 5 && cls");
  558. // system("timeout 5");
  559. // system("cls");
  560. }
  561. catch (...)
  562. {
  563. std::cout << "Bad input.\n" << std::flush;
  564. //system("timeout 5 && cls");
  565. //system("timeout 5");
  566. //system("cls");
  567. }
  568. break;
  569. case '0':
  570. exit(0);
  571. break;
  572. }
  573. }
  574. }
  575.  
  576.  
  577.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement