Advertisement
575

employee accounting v2

575
Oct 4th, 2022
865
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 42.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <numeric>
  5. #include <algorithm>
  6. #include <fstream>
  7. #include <map>
  8. #include <iomanip>
  9. #include <regex>
  10. #include <Windows.h>
  11.  
  12.  
  13. struct employee {
  14.     std::string full_name;
  15.     std::string position;
  16.     std::string department;
  17.     std::string birth;
  18.     double salary;
  19.     std::string comment;
  20.     int priority;
  21.     int id;
  22.     int experience;
  23. };
  24.  
  25. void PrintMenu() {
  26.     std::cout << "\n" << "Главное меню" << "\n";
  27.     std::cout << "Выберите опцию:" << "\n";
  28.     std::cout << "\t" << "1 - Вывести список сотрудников" << "\n";
  29.     std::cout << "\t" << "2 - Внести изменения в кадровый список сотрудников" << "\n";
  30.     std::cout << "\t" << "3 - Поиск сотрудников" << "\n";
  31.     std::cout << "\t" << "4 - Выход" << "\n";
  32. }
  33.  
  34. void PrintMenu1() {
  35.     std::cout << "\n" << "Выберите опцию:" << "\n";
  36.     std::cout << "\t" << "1 - Вернутьcя в главное меню" << "\n";
  37.     std::cout << "\t" << "2 - Завершить работу программы" << "\n";
  38. }
  39.  
  40. void PrintMenu2() {
  41.     std::cout << "\n" << "Внесение изменений в кадровый список сотрудников" << "\n";
  42.     std::cout << "Выберите опцию:" << "\n";
  43.     std::cout << "\t" << "1 - Добавить сотрудника" << "\n";
  44.     std::cout << "\t" << "2 - Удалить сотрудника" << "\n";
  45.     std::cout << "\t" << "3 - Редактирование существующих сотрудников" << "\n";
  46.     std::cout << "\t" << "4 - Вернутьcя в главное меню" << "\n";
  47. }
  48.  
  49. void PrintMenu3() {
  50.     std::cout << "Выберите по какому параметру удалить:" << "\n";
  51.     std::cout << "\t" << "1 - Удалить по id" << "\n";
  52.     std::cout << "\t" << "2 - Удалить по ФИО" << "\n";
  53.     std::cout << "\t" << "3 - Назад" << "\n";
  54. }
  55.  
  56. void PrintMenu4() {
  57.     std::cout << "Выберите одну из опций:" << "\n";
  58.     std::cout << "\t" << "1 - Выбрать сотрудника по id для редактирования информации" << "\n";
  59.     std::cout << "\t" << "2 - Назад" << "\n";
  60. }
  61.  
  62. void PrintMenu5() {
  63.     std::cout << "Поиск сотрудника(ов):" << "\n";
  64.     std::cout << "Выберите параметр по которому будет производиться поиск сотрудника(ов):" << "\n";
  65.     std::cout << "\t" << "1 - ФИО" << "\n";
  66.     std::cout << "\t" << "2 - должность" << "\n";
  67.     std::cout << "\t" << "3 - отдел: " << "\n";
  68.     std::cout << "\t" << "4 - дата рождения" << "\n";
  69.     std::cout << "\t" << "5 - заработная плата" << "\n";
  70.     std::cout << "\t" << "6 - комментарий" << "\n";
  71.     std::cout << "\t" << "7 - приоритет" << "\n";
  72.     std::cout << "\t" << "8 - id" << "\n";
  73.     std::cout << "\t" << "9 - стаж" << "\n";
  74.     std::cout << "\t" << "10 - вернуться в главное меню" << "\n";
  75. }
  76.  
  77. std::string GetAns2(std::string ans) {
  78.     bool IsCorrect;
  79.     ans == "1" || ans == "2" ? IsCorrect = true : IsCorrect = false;
  80.     while (!IsCorrect) {
  81.         std::cout << "Ваш ответ не совпал ни с одним из вариантов. Попробуйте снова: ";
  82.         std::cin >> ans;
  83.         ans == "1" || ans == "2" ? IsCorrect = true : IsCorrect = false;
  84.     }
  85.     return ans;
  86. }
  87.  
  88. std::string GetAns3(std::string ans) {
  89.     bool IsCorrect;
  90.     ans == "1" || ans == "2" || ans == "3" ? IsCorrect = true : IsCorrect = false;
  91.     while (!IsCorrect) {
  92.         std::cout << "Ваш ответ не совпал ни с одним из вариантов. Попробуйте снова: ";
  93.         std::cin >> ans;
  94.         ans == "1" || ans == "2" || ans == "3" ? IsCorrect = true : IsCorrect = false;
  95.     }
  96.     return ans;
  97. }
  98.  
  99. std::string GetAns4(std::string ans) {
  100.     bool IsCorrect;
  101.     ans == "1" || ans == "2" || ans == "3" || ans == "4" ? IsCorrect = true : IsCorrect = false;
  102.     while (!IsCorrect) {
  103.         std::cout << "Ваш ответ не совпал ни с одним из вариантов. Попробуйте снова: ";
  104.         std::cin >> ans;
  105.         ans == "1" || ans == "2" || ans == "3" || ans == "4" ? IsCorrect = true : IsCorrect = false;
  106.     }
  107.     return ans;
  108. }
  109.  
  110. std::string GetAns10(std::string ans) {
  111.     bool IsCorrect;
  112.     ans == "1" || ans == "2" || ans == "3" || ans == "4" || ans == "5" || ans == "6" || ans == "7" || ans == "8" || ans == "9" || ans == "10" ? IsCorrect = true : IsCorrect = false;
  113.     while (!IsCorrect) {
  114.         std::cout << "Ваш ответ не совпал ни с одним из вариантов. Попробуйте снова: ";
  115.         std::cin >> ans;
  116.         ans == "1" || ans == "2" || ans == "3" || ans == "4" || ans == "5" || ans == "6" || ans == "7" || ans == "8" || ans == "9" || ans == "10" ? IsCorrect = true : IsCorrect = false;
  117.     }
  118.     return ans;
  119. }
  120.  
  121. void PrintEmployeesList() {
  122.     std::string line;
  123.     std::ifstream in("employees.txt");
  124.     int i = 0;
  125.     while (getline(in, line)) {
  126.         std::cout << line << std::endl;
  127.         i++;
  128.     }
  129.     if (i == 0)
  130.         std::cout << "Список сотрудников пуст." << std::endl;
  131.     in.close();
  132. }
  133.  
  134. void AddEmployee(employee T) {
  135.     std::ofstream out;
  136.     out << std::fixed << std::setprecision(2);
  137.     out.open("employees.txt", std::ios::app);
  138.  
  139.     out << "ФИО: " << T.full_name << std::endl;
  140.     out << "должность: " << T.position << std::endl;
  141.     out << "отдел: " << T.department << std::endl;
  142.     out << "дата рождения: " << T.birth << std::endl;
  143.     out << "заработная плата: " << T.salary << std::endl;
  144.     out << "комментарий: " << T.comment << std::endl;
  145.     out << "приоритет: " << T.priority << std::endl;
  146.     out << "id: " << T.id << std::endl;
  147.     out << "стаж: " << T.experience << std::endl << std::endl;
  148.  
  149.     out.close();
  150. }
  151.  
  152. std::vector<employee> UpdateListOfEmployees() {
  153.     std::vector<employee> Data;
  154.     std::string line;
  155.     std::ifstream in("employees.txt");
  156.     employee T;
  157.  
  158.     while (!in.eof())
  159.     {
  160.         getline(in, line);
  161.         if (line == "") break;
  162.         T.full_name = line.substr(5, line.find('\n'));
  163.         getline(in, line);
  164.         T.position = line.substr(11, line.find('\n'));
  165.         getline(in, line);
  166.         T.department = line.substr(7, line.find('\n'));
  167.         getline(in, line);
  168.         T.birth = line.substr(15, line.find('\n'));
  169.         getline(in, line);
  170.         T.salary = std::stod(line.substr(18, line.find('\n')));
  171.         getline(in, line);
  172.         T.comment = line.substr(13, line.find('\n'));
  173.         getline(in, line);
  174.         T.priority = std::stoi(line.substr(11, line.find('\n')));
  175.         getline(in, line);
  176.         T.id = std::stoi(line.substr(4, line.find('\n')));
  177.         getline(in, line);
  178.         T.experience = std::stoi(line.substr(6, line.find('\n')));
  179.         getline(in, line);
  180.  
  181.         Data.push_back(T);
  182.     }
  183.     return Data;
  184. }
  185.  
  186. int GetID(std::vector<employee> T) {
  187.     int id = 0;
  188.     bool done = false;
  189.  
  190.     while (!done) {
  191.         done = true;
  192.         for (int i = 0; i < T.size(); ++i) {
  193.             if (T[i].id == id) {
  194.                 id++;
  195.                 done = false;
  196.                 break;
  197.             }
  198.         }
  199.     }
  200.     return id;
  201. }
  202.  
  203. void UpdateFile(std::vector<employee> T) {
  204.     std::ofstream out;
  205.     out.open("employees.txt");
  206.  
  207.     for (int i = 0; i < T.size(); ++i) {
  208.         out << "ФИО: " << T[i].full_name << std::endl;
  209.         out << "должность: " << T[i].position << std::endl;
  210.         out << "отдел: " << T[i].department << std::endl;
  211.         out << "дата рождения: " << T[i].birth << std::endl;
  212.         out << "заработная плата: " << T[i].salary << std::endl;
  213.         out << "комментарий: " << T[i].comment << std::endl;
  214.         out << "приоритет: " << T[i].priority << std::endl;
  215.         out << "id: " << T[i].id << std::endl;
  216.         out << "стаж: " << T[i].experience << std::endl << std::endl;
  217.     }
  218.     out.close();
  219. }
  220.  
  221. bool CheckID(std::vector<employee> T, int id) {
  222.     bool res = false;
  223.     for (int i = 0; i < T.size(); ++i) {
  224.         if (T[i].id == id) {
  225.             res = true;
  226.             break;
  227.         }
  228.     }
  229.     return res;
  230. }
  231.  
  232. std::vector<employee> DelByID(std::vector<employee> T, int id) {
  233.     for (int i = 0; i < T.size(); ++i) {
  234.         if (T[i].id == id) {
  235.             T.erase(T.begin() + i);
  236.             break;
  237.         }
  238.     }
  239.     return T;
  240. }
  241.  
  242. bool CheckName(std::vector<employee> T, std::string name) {
  243.     bool res = false;
  244.     for (int i = 0; i < T.size(); ++i) {
  245.         if (T[i].full_name == name) {
  246.             res = true;
  247.             break;
  248.         }
  249.     }
  250.     return res;
  251. }
  252.  
  253. bool CheckDoubleName(std::vector<employee> T, std::string name) {
  254.     bool res = false;
  255.     int count = 0;
  256.  
  257.     for (int i = 0; i < T.size(); ++i)
  258.         if (T[i].full_name == name)
  259.             count++;
  260.    
  261.     if (count > 1)
  262.         res = true;
  263.  
  264.     return res;
  265. }
  266.  
  267. std::vector<employee> DelByName(std::vector<employee> T, std::string name) {
  268.     for (int i = 0; i < T.size(); ++i) {
  269.         if (T[i].full_name == name) {
  270.             T.erase(T.begin() + i);
  271.             break;
  272.         }
  273.     }
  274.     return T;
  275. }
  276.  
  277. void PrintListOfEmployees(std::vector<employee> T) {
  278.     for (int i = 0; i < T.size(); ++i) {
  279.         std::cout << "ФИО: " << T[i].full_name << std::endl;
  280.         std::cout << "должность: " << T[i].position << std::endl;
  281.         std::cout << "отдел: " << T[i].department << std::endl;
  282.         std::cout << "дата рождения: " << T[i].birth << std::endl;
  283.         std::cout << "заработная плата: " << T[i].salary << std::endl;
  284.         std::cout << "комментарий: " << T[i].comment << std::endl;
  285.         std::cout << "приоритет: " << T[i].priority << std::endl;
  286.         std::cout << "id: " << T[i].id << std::endl;
  287.         std::cout << "стаж: " << T[i].experience << std::endl << std::endl;
  288.     }
  289. }
  290.  
  291. int main() {
  292.     setlocale(LC_ALL, "Russian");
  293.     SetConsoleOutputCP(1251);
  294.     SetConsoleCP(1251);
  295.  
  296.     bool start = true;
  297.     bool menu2 = false;
  298.     bool checkid = false;
  299.     bool menu3 = false;
  300.     bool checkname = false;
  301.     bool menu5 = false;
  302.     std::vector<employee> employees_data;
  303.     std::vector<employee> chosen_ones;
  304.     std::string ans;
  305.     int ans_i;
  306.     int id;
  307.     int priority, experience;
  308.     employee newbie;
  309.     std::string item;
  310.     static const std::regex txt_regex("[А-я]+\\s[А-я]+\\s[А-я]+");
  311.     static const std::regex nums_regex("[0-9]*");
  312.     static const std::regex birth_regex("[0-9]{2}\\.[0-9]{2}\\.[0-9]{4}");
  313.     static const std::regex salary_regex("[0-9]+\\.{0,1}[0-9]{0,2}");
  314.     double salary;
  315.     std::string id_s;
  316.     std::ifstream in("employees.txt");
  317.  
  318.     while (true) {
  319.  
  320.         start = false;
  321.         menu2 = false;
  322.        
  323.         menu3 = false;
  324.        
  325.         menu5 = false;
  326.         system("cls");
  327.         PrintMenu();
  328.  
  329.         std::cin >> ans;
  330.         std::cin.ignore(32767, '\n');
  331.         ans = GetAns4(ans);
  332.         ans_i = std::stoi(ans);
  333.        
  334.        
  335.  
  336.         switch (ans_i) {
  337.         case 1:
  338.             system("cls");
  339.             std::cout << "Cписок сотрудников:" << std::endl;
  340.             PrintEmployeesList();
  341.             PrintMenu1();
  342.             std::cin >> ans;
  343.             ans = GetAns4(ans);
  344.             ans_i = std::stoi(ans);
  345.             if (ans_i == 1) {
  346.                 start = true;
  347.                 break;
  348.             }
  349.             else
  350.                 return 0;
  351.  
  352.  
  353.         case 2:
  354.             menu2 = false;
  355.             while (!menu2) {
  356.                 menu2 = true;
  357.                 system("cls");
  358.                 PrintMenu2();
  359.                 std::cin >> ans;
  360.                 ans = GetAns4(ans);
  361.                 ans_i = std::stoi(ans);
  362.  
  363.                 switch (ans_i) {
  364.                 case 1:
  365.                     system("cls");
  366.                     std::cout << "Для добавления нового сотрудника введите данные (пункты отмеченные [*] обязательны для заполнения, если не хотите заполнять необязательные поля введите 'none'):" << std::endl;
  367.                     std::cout << "ФИО сотрудника*: ";
  368.                     std::cin.ignore(32767, '\n');
  369.                     std::getline(std::cin, item);
  370.                     while (!std::regex_match(item, txt_regex)) {
  371.                         std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  372.                         std::cout << "ФИО сотрудника*: ";
  373.                         std::getline(std::cin, item);
  374.                     }
  375.                     newbie.full_name = item;
  376.  
  377.                     std::cout << "Название должности сотрудника*: ";
  378.  
  379.                     std::getline(std::cin, item);
  380.  
  381.                     while (std::regex_match(item, nums_regex)) {
  382.                         std::cout << "Название должности введено неправильно, попробуйте еще раз: " << std::endl;
  383.                         std::cout << "Название должности сотрудника*: ";
  384.                         std::getline(std::cin, item);
  385.                     }
  386.                     newbie.position = item;
  387.  
  388.                     std::cout << "Название отдела сотрудника: ";
  389.  
  390.                     std::getline(std::cin, item);
  391.                     if (item == "none")
  392.                         newbie.department = "не указано";
  393.                     else {
  394.                         while (std::regex_match(item, nums_regex)) {
  395.                             std::cout << "Название отдела введено неправильно, попробуйте еще раз: " << std::endl;
  396.                             std::cout << "Название отдела сотрудника*: ";
  397.                             std::getline(std::cin, item);
  398.                         }
  399.                         newbie.department = item;
  400.                     }
  401.  
  402.                     std::cout << "Дата рождения*: ";
  403.                     std::getline(std::cin, item);
  404.  
  405.                     while (!std::regex_match(item, birth_regex)) {
  406.                         std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  407.                         std::cout << "Дата рождения*: ";
  408.                         std::getline(std::cin, item);
  409.                     }
  410.                     newbie.birth = item;
  411.  
  412.                     std::cout << "Заработная плата: ";
  413.                     std::getline(std::cin, item);
  414.  
  415.                     if (item == "none")
  416.                         newbie.salary = 0.0;
  417.                     else {
  418.                         while (!std::regex_match(item, salary_regex)) {
  419.                             std::cout << "Заработная плата введена неправильно, попробуйте еще раз: " << std::endl;
  420.                             std::cout << "Заработная плата: ";
  421.                             std::getline(std::cin, item);
  422.                         }
  423.                         newbie.salary = std::stod(item);
  424.                     }
  425.  
  426.                     std::cout << "Комментарий: ";
  427.                     std::getline(std::cin, item);
  428.                     if (item == "none")
  429.                         newbie.comment = "не указан";
  430.                     else
  431.                         newbie.comment = item;
  432.  
  433.                     std::cout << "Приоритет: ";
  434.                     std::getline(std::cin, item);
  435.                     if (item == "none")
  436.                         newbie.priority = 0;
  437.                     else {
  438.                         while (!std::regex_match(item, nums_regex)) {
  439.                             std::cout << "Приоритет введен неправильно, попробуйте еще раз: " << std::endl;
  440.                             std::cout << "Приоритет: ";
  441.                             std::getline(std::cin, item);
  442.                         }
  443.                         newbie.priority = std::stoi(item);
  444.                     }
  445.  
  446.                     std::cout << "Стаж: ";
  447.                     std::getline(std::cin, item);
  448.                     if (item == "none")
  449.                         newbie.experience = 0;
  450.                     else {
  451.                         while (!std::regex_match(item, nums_regex)) {
  452.                             std::cout << "Стаж введен неправильно, попробуйте еще раз: " << std::endl;
  453.                             std::cout << "Стаж: ";
  454.                             std::getline(std::cin, item);
  455.                         }
  456.                         newbie.experience = std::stoi(item);
  457.                     }
  458.                     employees_data = UpdateListOfEmployees();
  459.                     newbie.id = GetID(employees_data);
  460.                     AddEmployee(newbie);
  461.                     employees_data = UpdateListOfEmployees();
  462.                     menu2 = false;
  463.                     break;
  464.  
  465.                 case 2:
  466.                     system("cls");
  467.                     menu3 = false;
  468.                     while (!menu3) {
  469.                         menu3 = true;
  470.                        
  471.                         PrintMenu3();
  472.                         std::cin >> ans;
  473.                         ans = GetAns3(ans);
  474.                         ans_i = std::stoi(ans);
  475.                         switch (ans_i) {
  476.                         case 1:
  477.  
  478.                             employees_data = UpdateListOfEmployees();
  479.  
  480.                             std::cout << "Введите id: ";
  481.                             checkid = false;
  482.                             while (!checkid) {
  483.                                 std::cin.ignore(32767, '\n');
  484.                                 std::getline(std::cin, id_s);
  485.                                 while (!std::regex_match(item, nums_regex)) {
  486.                                     std::cout << "id введен неправильно, попробуйте еще раз: " << std::endl;
  487.                                     std::cout << "id: ";
  488.                                     std::getline(std::cin, item);
  489.                                 }
  490.                                 id = std::stoi(id_s);
  491.                                 employees_data = UpdateListOfEmployees();
  492.                                 checkid = true;
  493.                                 if (!CheckID(employees_data, id)) {
  494.                                     std::cout << "сотрудника с таким id не существует, попробуйте еще раз: " << std::endl;
  495.                                     std::cout << "id: ";
  496.                                     checkid = false;
  497.                                 }
  498.                             }
  499.  
  500.                             employees_data = DelByID(employees_data, id);
  501.                             UpdateFile(employees_data);
  502.                             menu3 = true;
  503.                             break;
  504.  
  505.                         case 2:
  506.                             employees_data = UpdateListOfEmployees();
  507.                             std::cout << "Введите ФИО: ";
  508.                             while (!checkname) {
  509.                                 std::cin.ignore(32767, '\n');
  510.                                 std::getline(std::cin, item);
  511.                                 while (!std::regex_match(item, txt_regex)) {
  512.                                     std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  513.                                     std::cout << "ФИО сотрудника*: ";
  514.                                     std::getline(std::cin, item);
  515.                                     checkname = true;
  516.                                 }
  517.                                 if (!CheckName(employees_data, item)) {
  518.                                     std::cout << "сотрудника с таким ФИО не существует, попробуйте еще раз: " << std::endl;
  519.                                     std::cout << "ФИО: ";
  520.                                     checkname = false;
  521.                                 }
  522.                                 if (CheckDoubleName(employees_data, item)) {
  523.                                     std::cout << "есть несколько сотрудников с таким ФИО, попробуйте еще раз: " << std::endl;
  524.                                     std::cout << "ФИО: ";
  525.                                     checkname = false;
  526.                                 }
  527.                             }
  528.  
  529.                             employees_data = DelByName(employees_data, item);
  530.                             UpdateFile(employees_data);
  531.                             menu3 = true;
  532.                             break;
  533.  
  534.                         case 3:
  535.                             menu2 = true;
  536.                             break;
  537.                         }
  538.                     }
  539.                     if (menu2)
  540.                         break;
  541.  
  542.  
  543.  
  544.  
  545.                 case 3:
  546.                     system("cls");
  547.                     PrintMenu4();
  548.                     std::cin >> ans;
  549.                     ans = GetAns2(ans);
  550.                     ans_i = std::stoi(ans);
  551.                     if (ans_i == 1) {
  552.                         std::cout << "Введите id: ";
  553.                         checkid = false;
  554.                         while (!checkid) {
  555.                             std::cin.ignore(32767, '\n');
  556.                             std::getline(std::cin, id_s);
  557.                             while (!std::regex_match(id_s, nums_regex)) {
  558.                                 std::cout << "id введен неправильно, попробуйте еще раз: " << std::endl;
  559.                                 std::cout << "id: ";
  560.                                 std::getline(std::cin, id_s);
  561.                             }
  562.                             id = std::stoi(id_s);
  563.                             employees_data = UpdateListOfEmployees();
  564.                             checkid = true;
  565.                             if (!CheckID(employees_data, id)) {
  566.                                 std::cout << "сотрудника с таким id не существует, попробуйте еще раз: " << std::endl;
  567.                                 std::cout << "id: ";
  568.                                 checkid = false;
  569.                             }
  570.                         }
  571.  
  572.  
  573.                         std::cout << "Введите новые данные для этого сотрудника (его id останется прежним): " << std::endl;
  574.  
  575.                         std::cout << "ФИО сотрудника*: ";
  576.                         std::cin.ignore(32767, '\n');
  577.                         std::getline(std::cin, item);
  578.                         while (!std::regex_match(item, txt_regex)) {
  579.                             std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  580.                             std::cout << "ФИО сотрудника*: ";
  581.                             std::getline(std::cin, item);
  582.                         }
  583.                         newbie.full_name = item;
  584.  
  585.                         std::cout << "Название должности сотрудника*: ";
  586.  
  587.                         std::getline(std::cin, item);
  588.  
  589.                         while (std::regex_match(item, nums_regex)) {
  590.                             std::cout << "Название должности введено неправильно, попробуйте еще раз: " << std::endl;
  591.                             std::cout << "Название должности сотрудника*: ";
  592.                             std::getline(std::cin, item);
  593.                         }
  594.                         newbie.position = item;
  595.  
  596.                         std::cout << "Название отдела сотрудника: ";
  597.  
  598.                         std::getline(std::cin, item);
  599.                         if (item == "none")
  600.                             newbie.department = "не указано";
  601.                         else {
  602.                             while (std::regex_match(item, nums_regex)) {
  603.                                 std::cout << "Название отдела введено неправильно, попробуйте еще раз: " << std::endl;
  604.                                 std::cout << "Название отдела сотрудника*: ";
  605.                                 std::getline(std::cin, item);
  606.                             }
  607.                             newbie.department = item;
  608.                         }
  609.  
  610.                         std::cout << "Дата рождения*: ";
  611.                         std::getline(std::cin, item);
  612.  
  613.                         while (!std::regex_match(item, birth_regex)) {
  614.                             std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  615.                             std::cout << "Дата рождения*: ";
  616.                             std::getline(std::cin, item);
  617.                         }
  618.                         newbie.birth = item;
  619.  
  620.                         std::cout << "Заработная плата: ";
  621.                         std::getline(std::cin, item);
  622.  
  623.                         if (item == "none")
  624.                             newbie.salary = 0.0;
  625.                         else {
  626.                             while (!std::regex_match(item, salary_regex)) {
  627.                                 std::cout << "Заработная плата введена неправильно, попробуйте еще раз: " << std::endl;
  628.                                 std::cout << "Заработная плата: ";
  629.                                 std::getline(std::cin, item);
  630.                             }
  631.                             newbie.salary = std::stod(item);
  632.                         }
  633.  
  634.                         std::cout << "Комментарий: ";
  635.                         std::getline(std::cin, item);
  636.                         if (item == "none")
  637.                             newbie.comment = "не указан";
  638.                         else
  639.                             newbie.comment = item;
  640.  
  641.                         std::cout << "Приоритет: ";
  642.                         std::getline(std::cin, item);
  643.                         if (item == "none")
  644.                             newbie.priority = 0;
  645.                         else {
  646.                             while (!std::regex_match(item, nums_regex)) {
  647.                                 std::cout << "Приоритет введен неправильно, попробуйте еще раз: " << std::endl;
  648.                                 std::cout << "Приоритет: ";
  649.                                 std::getline(std::cin, item);
  650.                             }
  651.                             newbie.priority = std::stoi(item);
  652.                         }
  653.  
  654.                         std::cout << "Стаж: ";
  655.                         std::getline(std::cin, item);
  656.                         if (item == "none")
  657.                             newbie.experience = 0;
  658.                         else {
  659.                             while (!std::regex_match(item, nums_regex)) {
  660.                                 std::cout << "Стаж введен неправильно, попробуйте еще раз: " << std::endl;
  661.                                 std::cout << "Стаж: ";
  662.                                 std::getline(std::cin, item);
  663.                             }
  664.                             newbie.experience = std::stoi(item);
  665.                         }
  666.                         newbie.id = id;
  667.                         DelByID(employees_data, id);
  668.                         employees_data.push_back(newbie);
  669.                         UpdateFile(employees_data);
  670.                         menu2 = false;
  671.                         break;
  672.                     }
  673.  
  674.  
  675.  
  676.  
  677.                 case 4:
  678.                     start = true;
  679.                     break;
  680.  
  681.                 }
  682.             }
  683.             if (start || menu2)
  684.                 break;
  685.            
  686.  
  687.  
  688.  
  689.         case 3:
  690.             if (start || menu2)
  691.                 break;
  692.             menu5 = false;
  693.             system("cls");
  694.             while (!menu5) {
  695.                 menu5 = true;
  696.                 PrintMenu5();
  697.                 std::cin >> ans;
  698.                 ans = GetAns10(ans);
  699.                 ans_i = std::stoi(ans);
  700.  
  701.                 employees_data = UpdateListOfEmployees();
  702.  
  703.                 switch (ans_i) {
  704.                 case 1:
  705.                     system("cls");
  706.                     std::cout << "ФИО сотрудника*: ";
  707.                     std::cin.ignore(32767, '\n');
  708.                     std::getline(std::cin, item);
  709.                     while (!std::regex_match(item, txt_regex)) {
  710.                         std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  711.                         std::cout << "ФИО сотрудника*: ";
  712.                         std::getline(std::cin, item);
  713.                     }
  714.                     for (int i = 0; i < employees_data.size(); ++i) {
  715.                         if (employees_data[i].full_name == item)
  716.                             chosen_ones.push_back(employees_data[i]);
  717.                     }
  718.                     if (chosen_ones.size() == 0) {
  719.                         std::cout << "Сотрудников с таким ФИО не существует, попробуйте еще раз:" << std::endl;
  720.                         menu5 = false;
  721.                         break;
  722.                     }
  723.                     else {
  724.                         PrintListOfEmployees(chosen_ones);
  725.                         chosen_ones.clear();
  726.                         start = true;
  727.                         break;
  728.                     }
  729.  
  730.                 case 2:
  731.                     system("cls");
  732.                     std::cout << "Название должности сотрудника*: ";
  733.                     std::cin.ignore(32767, '\n');
  734.                     std::getline(std::cin, item);
  735.  
  736.                     while (std::regex_match(item, nums_regex)) {
  737.                         std::cout << "Название должности введено неправильно, попробуйте еще раз: " << std::endl;
  738.                         std::cout << "Название должности сотрудника*: ";
  739.                         std::getline(std::cin, item);
  740.                     }
  741.                     for (int i = 0; i < employees_data.size(); ++i) {
  742.                         if (employees_data[i].position == item)
  743.                             chosen_ones.push_back(employees_data[i]);
  744.                     }
  745.                     if (chosen_ones.size() == 0) {
  746.                         std::cout << "Сотрудников с такой должностью не существует, попробуйте еще раз:" << std::endl;
  747.                         menu5 = false;
  748.                         break;
  749.                     }
  750.                     else {
  751.                         PrintListOfEmployees(chosen_ones);
  752.                         chosen_ones.clear();
  753.                         start = true;
  754.                         break;
  755.                     }
  756.  
  757.                 case 3:
  758.                     system("cls");
  759.                     std::cout << "Название отдела сотрудника: ";
  760.  
  761.                     std::getline(std::cin, item);
  762.                     if (item == "none")
  763.                         item = "не указано";
  764.                     else {
  765.                         while (std::regex_match(item, nums_regex)) {
  766.                             std::cout << "Название отдела введено неправильно, попробуйте еще раз: " << std::endl;
  767.                             std::cout << "Название отдела сотрудника*: ";
  768.                             std::getline(std::cin, item);
  769.                         }
  770.                     }
  771.                     for (int i = 0; i < employees_data.size(); ++i) {
  772.                         if (employees_data[i].department == item)
  773.                             chosen_ones.push_back(employees_data[i]);
  774.                     }
  775.                     if (chosen_ones.size() == 0) {
  776.                         std::cout << "Сотрудников в таком отделе не существует, попробуйте еще раз:" << std::endl;
  777.                         menu5 = false;
  778.                         break;
  779.                     }
  780.                     else {
  781.                         PrintListOfEmployees(chosen_ones);
  782.                         chosen_ones.clear();
  783.                         start = true;
  784.                         break;
  785.                     }
  786.  
  787.                 case 4:
  788.                     system("cls");
  789.                     std::cout << "Дата рождения*: ";
  790.                     std::cin.ignore(32767, '\n');
  791.                     std::getline(std::cin, item);
  792.  
  793.                     while (!std::regex_match(item, birth_regex)) {
  794.                         std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  795.                         std::cout << "Дата рождения*: ";
  796.                         std::getline(std::cin, item);
  797.                     }
  798.                     for (int i = 0; i < employees_data.size(); ++i) {
  799.                         if (employees_data[i].birth == item)
  800.                             chosen_ones.push_back(employees_data[i]);
  801.                     }
  802.                     if (chosen_ones.size() == 0) {
  803.                         std::cout << "Сотрудников с таким днем рождения не существует, попробуйте еще раз:" << std::endl;
  804.                         menu5 = false;
  805.                         break;
  806.                     }
  807.                     else {
  808.                         PrintListOfEmployees(chosen_ones);
  809.                         chosen_ones.clear();
  810.                         start = true;
  811.                         break;
  812.                     }
  813.  
  814.                 case 5:
  815.                     system("cls");
  816.                     std::cout << "Заработная плата: ";
  817.                     std::cin.ignore(32767, '\n');
  818.                     std::getline(std::cin, item);
  819.  
  820.                     if (item == "none")
  821.                         salary = 0.0;
  822.                     else {
  823.                         while (!std::regex_match(item, salary_regex)) {
  824.                             std::cout << "Заработная плата введена неправильно, попробуйте еще раз: " << std::endl;
  825.                             std::cout << "Заработная плата: ";
  826.                             std::getline(std::cin, item);
  827.                         }
  828.                         salary = std::stod(item);
  829.                     }
  830.                     for (int i = 0; i < employees_data.size(); ++i) {
  831.                         if (employees_data[i].salary == salary)
  832.                             chosen_ones.push_back(employees_data[i]);
  833.                     }
  834.                     if (chosen_ones.size() == 0) {
  835.                         std::cout << "Сотрудников с такой заработной платой не существует, попробуйте еще раз:" << std::endl;
  836.                         menu5 = false;
  837.                         break;
  838.                     }
  839.                     else {
  840.                         PrintListOfEmployees(chosen_ones);
  841.                         chosen_ones.clear();
  842.                         start = true;
  843.                         break;
  844.                     }
  845.  
  846.                 case 6:
  847.                     system("cls");
  848.                     std::cout << "Комментарий: ";
  849.                     std::cin.ignore(32767, '\n');
  850.                     std::getline(std::cin, item);
  851.                     if (item == "none")
  852.                         item = "не указан";
  853.                     for (int i = 0; i < employees_data.size(); ++i) {
  854.                         if (employees_data[i].comment == item)
  855.                             chosen_ones.push_back(employees_data[i]);
  856.                     }
  857.                     if (chosen_ones.size() == 0) {
  858.                         std::cout << "Сотрудников с таким комментарием не существует, попробуйте еще раз:" << std::endl;
  859.                         menu5 = false;
  860.                         break;
  861.                     }
  862.                     else {
  863.                         PrintListOfEmployees(chosen_ones);
  864.                         chosen_ones.clear();
  865.                         start = true;
  866.                         break;
  867.                     }
  868.  
  869.                 case 7:
  870.                     system("cls");
  871.                     std::cout << "Приоритет: ";
  872.                     std::cin.ignore(32767, '\n');
  873.                     std::getline(std::cin, item);
  874.                     if (item == "none")
  875.                         priority = 0;
  876.                     else {
  877.                         while (!std::regex_match(item, nums_regex)) {
  878.                             std::cout << "Приоритет введен неправильно, попробуйте еще раз: " << std::endl;
  879.                             std::cout << "Приоритет: ";
  880.                             std::getline(std::cin, item);
  881.                         }
  882.                         priority = std::stoi(item);
  883.                     }
  884.                     for (int i = 0; i < employees_data.size(); ++i) {
  885.                         if (employees_data[i].priority == priority)
  886.                             chosen_ones.push_back(employees_data[i]);
  887.                     }
  888.                     if (chosen_ones.size() == 0) {
  889.                         std::cout << "Сотрудников с таким приоритетом не существует, попробуйте еще раз:" << std::endl;
  890.                         menu5 = false;
  891.                         break;
  892.                     }
  893.                     else {
  894.                         PrintListOfEmployees(chosen_ones);
  895.                         chosen_ones.clear();
  896.                         start = true;
  897.                         break;
  898.                     }
  899.  
  900.                 case 8:
  901.                     system("cls");
  902.                     std::cout << "Введите id: ";
  903.                     std::cin.ignore(32767, '\n');
  904.                     std::getline(std::cin, id_s);
  905.                     while (!std::regex_match(id_s, nums_regex)) {
  906.                         std::cout << "id введен неправильно, попробуйте еще раз: " << std::endl;
  907.                         std::cout << "id: ";
  908.                         std::getline(std::cin, id_s);
  909.                     }
  910.                     id = std::stoi(id_s);
  911.                     for (int i = 0; i < employees_data.size(); ++i) {
  912.                         if (employees_data[i].id == id)
  913.                             chosen_ones.push_back(employees_data[i]);
  914.                     }
  915.                     if (chosen_ones.size() == 0) {
  916.                         std::cout << "Сотрудников с таким id не существует, попробуйте еще раз:" << std::endl;
  917.                         menu5 = false;
  918.                         break;
  919.                     }
  920.                     else {
  921.                         PrintListOfEmployees(chosen_ones);
  922.                         chosen_ones.clear();
  923.                         start = true;
  924.                         break;
  925.                     }
  926.  
  927.                 case 9:
  928.                     system("cls");
  929.                     std::cout << "Стаж: ";
  930.                     std::cin.ignore(32767, '\n');
  931.                     std::getline(std::cin, item);
  932.                     if (item == "none")
  933.                         experience = 0;
  934.                     else {
  935.                         while (!std::regex_match(item, nums_regex)) {
  936.                             std::cout << "Стаж введен неправильно, попробуйте еще раз: " << std::endl;
  937.                             std::cout << "Стаж: ";
  938.                             std::getline(std::cin, item);
  939.                         }
  940.                         experience = std::stoi(item);
  941.                     }
  942.                     for (int i = 0; i < employees_data.size(); ++i) {
  943.                         if (employees_data[i].experience == experience)
  944.                             chosen_ones.push_back(employees_data[i]);
  945.                     }
  946.                     if (chosen_ones.size() == 0) {
  947.                         std::cout << "Сотрудников с таким стажем не существует, попробуйте еще раз:" << std::endl;
  948.                         menu5 = false;
  949.                         break;
  950.                     }
  951.                     else {
  952.                         PrintListOfEmployees(chosen_ones);
  953.                         chosen_ones.clear();
  954.                         start = true;
  955.                         break;
  956.                     }
  957.                 case 10:
  958.                     start = true;
  959.                     break;
  960.                 }
  961.             }
  962.            
  963.  
  964.  
  965.         case 4:
  966.             if (start || menu2)
  967.                 break;
  968.             return 0;
  969.         }
  970.     }
  971.    
  972. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement