575

employee accounting

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