Advertisement
575

employee accounting v3

575
Oct 25th, 2022
606
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 45.92 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. inline void WaitEnter() {
  278.     std::cout << "Нажмите Enter чтобы продолжить...";
  279.     while (std::cin.get() != '\n');
  280. }
  281.  
  282. void PrintListOfEmployees(std::vector<employee> T) {
  283.     for (int i = 0; i < T.size(); ++i) {
  284.         std::cout << "ФИО: " << T[i].full_name << std::endl;
  285.         std::cout << "должность: " << T[i].position << std::endl;
  286.         std::cout << "отдел: " << T[i].department << std::endl;
  287.         std::cout << "дата рождения: " << T[i].birth << std::endl;
  288.         std::cout << "заработная плата: " << T[i].salary << std::endl;
  289.         std::cout << "комментарий: " << T[i].comment << std::endl;
  290.         std::cout << "приоритет: " << T[i].priority << std::endl;
  291.         std::cout << "id: " << T[i].id << std::endl;
  292.         std::cout << "стаж: " << T[i].experience << std::endl << std::endl;
  293.     }
  294. }
  295.  
  296. bool DateOfBirthValidation(std::string date) {
  297.     int day = std::stoi(date.substr(0, 2));
  298.     int month = std::stoi(date.substr(3, 2));
  299.     int year = std::stoi(date.substr(6, 4));
  300.     if (1000 <= year <= 3000)
  301.     {
  302.         if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day > 0 && day <= 31)
  303.             return true;
  304.         else
  305.             if (month == 4 || month == 6 || month == 9 || month == 11 && day > 0 && day <= 30)
  306.                 return true;
  307.             else
  308.                 if (month == 2)
  309.                 {
  310.                     if ((year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) && day > 0 && day <= 29)
  311.                         return true;
  312.                     else if (day > 0 && day <= 28)
  313.                         return true;
  314.                     else
  315.                         return false;
  316.                 }
  317.                 else
  318.                     return false;
  319.     }
  320.     else
  321.         return false;
  322. }
  323.  
  324. int main() {
  325.     setlocale(LC_ALL, "Russian");
  326.     SetConsoleOutputCP(1251);
  327.     SetConsoleCP(1251);
  328.  
  329.     bool start = true;
  330.     bool menu2 = false;
  331.     bool checkid = false;
  332.     bool menu3 = false;
  333.     bool checkname = false;
  334.     bool menu5 = false;
  335.     std::vector<employee> employees_data;
  336.     std::vector<employee> chosen_ones;
  337.     std::string ans;
  338.     int ans_i;
  339.     int id;
  340.     int priority, experience;
  341.     employee newbie;
  342.     std::string item;
  343.     static const std::regex txt_regex("[А-я]+\\s[А-я]+\\s[А-я]+");
  344.     static const std::regex nums_regex("[0-9]*");
  345.     static const std::regex birth_regex("[0-9]{2}\\.[0-9]{2}\\.[0-9]{4}");
  346.     static const std::regex salary_regex("[0-9]+\\.{0,1}[0-9]{0,2}");
  347.     double salary;
  348.     std::string id_s;
  349.     std::ifstream in("employees.txt");
  350.  
  351.     while (true) {
  352.  
  353.         start = false;
  354.         menu2 = false;
  355.        
  356.         menu3 = false;
  357.        
  358.         menu5 = false;
  359.         system("cls");
  360.         PrintMenu();
  361.  
  362.         std::cin >> ans;
  363.         std::cin.ignore(32767, '\n');
  364.         ans = GetAns4(ans);
  365.         ans_i = std::stoi(ans);
  366.        
  367.        
  368.  
  369.         switch (ans_i) {
  370.         case 1:
  371.             system("cls");
  372.             std::cout << "Cписок сотрудников:" << std::endl;
  373.             PrintEmployeesList();
  374.             PrintMenu1();
  375.             std::cin >> ans;
  376.             ans = GetAns4(ans);
  377.             ans_i = std::stoi(ans);
  378.             if (ans_i == 1) {
  379.                 start = true;
  380.                 break;
  381.             }
  382.             else
  383.                 return 0;
  384.  
  385.  
  386.         case 2:
  387.             menu2 = false;
  388.             while (!menu2) {
  389.                 menu2 = true;
  390.                 system("cls");
  391.                 PrintMenu2();
  392.                 std::cin >> ans;
  393.                 ans = GetAns4(ans);
  394.                 ans_i = std::stoi(ans);
  395.  
  396.                 switch (ans_i) {
  397.                 case 1:
  398.                     system("cls");
  399.                     std::cout << "Для добавления нового сотрудника введите данные (пункты отмеченные [*] обязательны для заполнения, если не хотите заполнять необязательные поля введите 'none'):" << std::endl;
  400.                     std::cout << "ФИО сотрудника*: ";
  401.                     std::cin.ignore(32767, '\n');
  402.                     std::getline(std::cin, item);
  403.                     while (!std::regex_match(item, txt_regex)) {
  404.                         std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  405.                         std::cout << "ФИО сотрудника*: ";
  406.                         std::getline(std::cin, item);
  407.                     }
  408.                     newbie.full_name = item;
  409.  
  410.                     std::cout << "Название должности сотрудника*: ";
  411.  
  412.                     std::getline(std::cin, item);
  413.  
  414.                     while (std::regex_match(item, nums_regex)) {
  415.                         std::cout << "Название должности введено неправильно, попробуйте еще раз: " << std::endl;
  416.                         std::cout << "Название должности сотрудника*: ";
  417.                         std::getline(std::cin, item);
  418.                     }
  419.                     newbie.position = item;
  420.  
  421.                     std::cout << "Название отдела сотрудника: ";
  422.  
  423.                     std::getline(std::cin, item);
  424.                     if (item == "none")
  425.                         newbie.department = "не указано";
  426.                     else {
  427.                         while (std::regex_match(item, nums_regex)) {
  428.                             std::cout << "Название отдела введено неправильно, попробуйте еще раз: " << std::endl;
  429.                             std::cout << "Название отдела сотрудника*: ";
  430.                             std::getline(std::cin, item);
  431.                         }
  432.                         newbie.department = item;
  433.                     }
  434.  
  435.                     std::cout << "Дата рождения (формат: dd.mm.yyyy): ";
  436.                     std::getline(std::cin, item);
  437.                    
  438.                     while (true) {
  439.                         if (std::regex_match(item, birth_regex)) {
  440.                             if (DateOfBirthValidation(item)) {
  441.                                 break;
  442.                             }
  443.                             else {
  444.                                 std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  445.                                 std::cout << "Дата рождения*: ";
  446.                                 std::getline(std::cin, item);
  447.                             }
  448.                         }
  449.                         else {
  450.                             std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  451.                             std::cout << "Дата рождения*: ";
  452.                             std::getline(std::cin, item);
  453.                         }
  454.                        
  455.                     }
  456.                     newbie.birth = item;
  457.  
  458.                     std::cout << "Заработная плата: ";
  459.                     std::getline(std::cin, item);
  460.  
  461.                     if (item == "none")
  462.                         newbie.salary = 0.0;
  463.                     else {
  464.                         while (!std::regex_match(item, salary_regex)) {
  465.                             std::cout << "Заработная плата введена неправильно, попробуйте еще раз: " << std::endl;
  466.                             std::cout << "Заработная плата: ";
  467.                             std::getline(std::cin, item);
  468.                         }
  469.                         newbie.salary = std::stod(item);
  470.                     }
  471.  
  472.                     std::cout << "Комментарий: ";
  473.                     std::getline(std::cin, item);
  474.                     if (item == "none")
  475.                         newbie.comment = "не указан";
  476.                     else
  477.                         newbie.comment = item;
  478.  
  479.                     std::cout << "Приоритет: ";
  480.                     std::getline(std::cin, item);
  481.                     if (item == "none")
  482.                         newbie.priority = 0;
  483.                     else {
  484.                         while (!std::regex_match(item, nums_regex)) {
  485.                             std::cout << "Приоритет введен неправильно, попробуйте еще раз: " << std::endl;
  486.                             std::cout << "Приоритет: ";
  487.                             std::getline(std::cin, item);
  488.                         }
  489.                         newbie.priority = std::stoi(item);
  490.                     }
  491.  
  492.                     std::cout << "Стаж: ";
  493.                     std::getline(std::cin, item);
  494.                     if (item == "none")
  495.                         newbie.experience = 0;
  496.                     else {
  497.                         while (!std::regex_match(item, nums_regex)) {
  498.                             std::cout << "Стаж введен неправильно, попробуйте еще раз: " << std::endl;
  499.                             std::cout << "Стаж: ";
  500.                             std::getline(std::cin, item);
  501.                         }
  502.                         newbie.experience = std::stoi(item);
  503.                     }
  504.                     employees_data = UpdateListOfEmployees();
  505.                     newbie.id = GetID(employees_data);
  506.                     AddEmployee(newbie);
  507.                     employees_data = UpdateListOfEmployees();
  508.                     menu2 = false;
  509.                     break;
  510.  
  511.                 case 2:
  512.                     system("cls");
  513.                     menu3 = false;
  514.                     while (!menu3) {
  515.                         menu3 = true;
  516.                        
  517.                         PrintMenu3();
  518.                         std::cin >> ans;
  519.                         ans = GetAns3(ans);
  520.                         ans_i = std::stoi(ans);
  521.                         switch (ans_i) {
  522.                         case 1:
  523.  
  524.                             employees_data = UpdateListOfEmployees();
  525.  
  526.                             std::cout << "Введите id: ";
  527.                             checkid = false;
  528.                             while (!checkid) {
  529.                                 std::cin.ignore(32767, '\n');
  530.                                 std::getline(std::cin, id_s);
  531.                                 while (!std::regex_match(item, nums_regex)) {
  532.                                     std::cout << "id введен неправильно, попробуйте еще раз: " << std::endl;
  533.                                     std::cout << "id: ";
  534.                                     std::getline(std::cin, item);
  535.                                 }
  536.                                 id = std::stoi(id_s);
  537.                                 employees_data = UpdateListOfEmployees();
  538.                                 checkid = true;
  539.                                 if (!CheckID(employees_data, id)) {
  540.                                     std::cout << "сотрудника с таким id не существует, попробуйте еще раз: " << std::endl;
  541.                                     std::cout << "id: ";
  542.                                     checkid = false;
  543.                                 }
  544.                             }
  545.  
  546.                             employees_data = DelByID(employees_data, id);
  547.                             UpdateFile(employees_data);
  548.                             menu3 = true;
  549.                             break;
  550.  
  551.                         case 2:
  552.                             employees_data = UpdateListOfEmployees();
  553.                             std::cout << "Введите ФИО: ";
  554.                             while (!checkname) {
  555.                                 std::cin.ignore(32767, '\n');
  556.                                 std::getline(std::cin, item);
  557.                                 while (!std::regex_match(item, txt_regex)) {
  558.                                     std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  559.                                     std::cout << "ФИО сотрудника*: ";
  560.                                     std::getline(std::cin, item);
  561.                                     checkname = true;
  562.                                 }
  563.                                 if (!CheckName(employees_data, item)) {
  564.                                     std::cout << "сотрудника с таким ФИО не существует, попробуйте еще раз: " << std::endl;
  565.                                     std::cout << "ФИО: ";
  566.                                     checkname = false;
  567.                                 }
  568.                                 if (CheckDoubleName(employees_data, item)) {
  569.                                     std::cout << "есть несколько сотрудников с таким ФИО, попробуйте еще раз: " << std::endl;
  570.                                     std::cout << "ФИО: ";
  571.                                     checkname = false;
  572.                                 }
  573.                             }
  574.  
  575.                             employees_data = DelByName(employees_data, item);
  576.                             UpdateFile(employees_data);
  577.                             menu3 = true;
  578.                             break;
  579.  
  580.                         case 3:
  581.                             menu2 = true;
  582.                             break;
  583.                         }
  584.                     }
  585.                     if (menu2)
  586.                         break;
  587.  
  588.  
  589.  
  590.  
  591.                 case 3:
  592.                     system("cls");
  593.                     PrintMenu4();
  594.                     std::cin >> ans;
  595.                     ans = GetAns2(ans);
  596.                     ans_i = std::stoi(ans);
  597.                     if (ans_i == 1) {
  598.                         std::cout << "Введите id: ";
  599.                         checkid = false;
  600.                         while (!checkid) {
  601.                             std::cin.ignore(32767, '\n');
  602.                             std::getline(std::cin, id_s);
  603.                             while (!std::regex_match(id_s, nums_regex)) {
  604.                                 std::cout << "id введен неправильно, попробуйте еще раз: " << std::endl;
  605.                                 std::cout << "id: ";
  606.                                 std::getline(std::cin, id_s);
  607.                             }
  608.                             id = std::stoi(id_s);
  609.                             employees_data = UpdateListOfEmployees();
  610.                             checkid = true;
  611.                             if (!CheckID(employees_data, id)) {
  612.                                 std::cout << "сотрудника с таким id не существует, попробуйте еще раз: " << std::endl;
  613.                                 std::cout << "id: ";
  614.                                 checkid = false;
  615.                             }
  616.                         }
  617.  
  618.  
  619.                         std::cout << "Введите новые данные для этого сотрудника (его id останется прежним): " << std::endl;
  620.  
  621.                         std::cout << "ФИО сотрудника*: ";
  622.                         std::getline(std::cin, item);
  623.                         while (!std::regex_match(item, txt_regex)) {
  624.                             std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  625.                             std::cout << "ФИО сотрудника*: ";
  626.                             std::getline(std::cin, item);
  627.                         }
  628.                         newbie.full_name = item;
  629.  
  630.                         std::cout << "Название должности сотрудника*: ";
  631.  
  632.                         std::getline(std::cin, item);
  633.  
  634.                         while (std::regex_match(item, nums_regex)) {
  635.                             std::cout << "Название должности введено неправильно, попробуйте еще раз: " << std::endl;
  636.                             std::cout << "Название должности сотрудника*: ";
  637.                             std::getline(std::cin, item);
  638.                         }
  639.                         newbie.position = item;
  640.  
  641.                         std::cout << "Название отдела сотрудника: ";
  642.  
  643.                         std::getline(std::cin, item);
  644.                         if (item == "none")
  645.                             newbie.department = "не указано";
  646.                         else {
  647.                             while (std::regex_match(item, nums_regex)) {
  648.                                 std::cout << "Название отдела введено неправильно, попробуйте еще раз: " << std::endl;
  649.                                 std::cout << "Название отдела сотрудника*: ";
  650.                                 std::getline(std::cin, item);
  651.                             }
  652.                             newbie.department = item;
  653.                         }
  654.  
  655.                         std::cout << "Дата рождения (формат: dd.mm.yyyy): ";
  656.                         std::getline(std::cin, item);
  657.  
  658.                         while (true) {
  659.                             if (std::regex_match(item, birth_regex)) {
  660.                                 if (DateOfBirthValidation(item)) {
  661.                                     break;
  662.                                 }
  663.                                 else {
  664.                                     std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  665.                                     std::cout << "Дата рождения*: ";
  666.                                     std::getline(std::cin, item);
  667.                                 }
  668.                             }
  669.                             else {
  670.                                 std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  671.                                 std::cout << "Дата рождения*: ";
  672.                                 std::getline(std::cin, item);
  673.                             }
  674.  
  675.                         }
  676.                         newbie.birth = item;
  677.  
  678.                         std::cout << "Заработная плата: ";
  679.                         std::getline(std::cin, item);
  680.  
  681.                         if (item == "none")
  682.                             newbie.salary = 0.0;
  683.                         else {
  684.                             while (!std::regex_match(item, salary_regex)) {
  685.                                 std::cout << "Заработная плата введена неправильно, попробуйте еще раз: " << std::endl;
  686.                                 std::cout << "Заработная плата: ";
  687.                                 std::getline(std::cin, item);
  688.                             }
  689.                             newbie.salary = std::stod(item);
  690.                         }
  691.  
  692.                         std::cout << "Комментарий: ";
  693.                         std::getline(std::cin, item);
  694.                         if (item == "none")
  695.                             newbie.comment = "не указан";
  696.                         else
  697.                             newbie.comment = item;
  698.  
  699.                         std::cout << "Приоритет: ";
  700.                         std::getline(std::cin, item);
  701.                         if (item == "none")
  702.                             newbie.priority = 0;
  703.                         else {
  704.                             while (!std::regex_match(item, nums_regex)) {
  705.                                 std::cout << "Приоритет введен неправильно, попробуйте еще раз: " << std::endl;
  706.                                 std::cout << "Приоритет: ";
  707.                                 std::getline(std::cin, item);
  708.                             }
  709.                             newbie.priority = std::stoi(item);
  710.                         }
  711.  
  712.                         std::cout << "Стаж: ";
  713.                         std::getline(std::cin, item);
  714.                         if (item == "none")
  715.                             newbie.experience = 0;
  716.                         else {
  717.                             while (!std::regex_match(item, nums_regex)) {
  718.                                 std::cout << "Стаж введен неправильно, попробуйте еще раз: " << std::endl;
  719.                                 std::cout << "Стаж: ";
  720.                                 std::getline(std::cin, item);
  721.                             }
  722.                             newbie.experience = std::stoi(item);
  723.                         }
  724.                         newbie.id = id;
  725.                         employees_data = DelByID(employees_data, id);
  726.                         employees_data.push_back(newbie);
  727.                         UpdateFile(employees_data);
  728.                         menu2 = false;
  729.                         break;
  730.                     }
  731.  
  732.  
  733.  
  734.  
  735.                 case 4:
  736.                     start = true;
  737.                     break;
  738.  
  739.                 }
  740.             }
  741.             if (start || menu2)
  742.                 break;
  743.            
  744.  
  745.  
  746.  
  747.         case 3:
  748.             if (start || menu2)
  749.                 break;
  750.             menu5 = false;
  751.             system("cls");
  752.             while (!menu5) {
  753.                 menu5 = true;
  754.                 PrintMenu5();
  755.                 std::cin >> ans;
  756.                 ans = GetAns10(ans);
  757.                 ans_i = std::stoi(ans);
  758.  
  759.                 employees_data = UpdateListOfEmployees();
  760.  
  761.                 switch (ans_i) {
  762.                 case 1:
  763.                     system("cls");
  764.                     std::cout << "ФИО сотрудника*: ";
  765.                     std::cin.ignore(32767, '\n');
  766.                     std::getline(std::cin, item);
  767.                     while (!std::regex_match(item, txt_regex)) {
  768.                         std::cout << "Имя сотрудника введено неправильно, попробуйте еще раз: " << std::endl;
  769.                         std::cout << "ФИО сотрудника*: ";
  770.                         std::getline(std::cin, item);
  771.                     }
  772.                     for (int i = 0; i < employees_data.size(); ++i) {
  773.                         if (employees_data[i].full_name == item)
  774.                             chosen_ones.push_back(employees_data[i]);
  775.                     }
  776.                     if (chosen_ones.size() == 0) {
  777.                         std::cout << "Сотрудников с таким ФИО не существует, попробуйте еще раз:" << std::endl;
  778.                         WaitEnter();
  779.                         menu5 = false;
  780.                         break;
  781.                     }
  782.                     else {
  783.                         PrintListOfEmployees(chosen_ones);
  784.                         WaitEnter();
  785.                         chosen_ones.clear();
  786.                         start = true;
  787.                         break;
  788.                     }
  789.  
  790.                 case 2:
  791.                     system("cls");
  792.                     std::cout << "Название должности сотрудника*: ";
  793.                     std::cin.ignore(32767, '\n');
  794.                     std::getline(std::cin, item);
  795.  
  796.                     while (std::regex_match(item, nums_regex)) {
  797.                         std::cout << "Название должности введено неправильно, попробуйте еще раз: " << std::endl;
  798.                         std::cout << "Название должности сотрудника*: ";
  799.                         std::getline(std::cin, item);
  800.                     }
  801.                     for (int i = 0; i < employees_data.size(); ++i) {
  802.                         if (employees_data[i].position == item)
  803.                             chosen_ones.push_back(employees_data[i]);
  804.                     }
  805.                     if (chosen_ones.size() == 0) {
  806.                         std::cout << "Сотрудников с такой должностью не существует, попробуйте еще раз:" << std::endl;
  807.                         WaitEnter();
  808.                         menu5 = false;
  809.                         break;
  810.                     }
  811.                     else {
  812.                         PrintListOfEmployees(chosen_ones);
  813.                         WaitEnter();
  814.                         chosen_ones.clear();
  815.                         start = true;
  816.                         break;
  817.                     }
  818.  
  819.                 case 3:
  820.                     system("cls");
  821.                     std::cout << "Название отдела сотрудника: ";
  822.  
  823.                     std::getline(std::cin, item);
  824.                     if (item == "none")
  825.                         item = "не указано";
  826.                     else {
  827.                         while (std::regex_match(item, nums_regex)) {
  828.                             std::cout << "Название отдела введено неправильно, попробуйте еще раз: " << std::endl;
  829.                             std::cout << "Название отдела сотрудника*: ";
  830.                             std::getline(std::cin, item);
  831.                         }
  832.                     }
  833.                     for (int i = 0; i < employees_data.size(); ++i) {
  834.                         if (employees_data[i].department == item)
  835.                             chosen_ones.push_back(employees_data[i]);
  836.                     }
  837.                     if (chosen_ones.size() == 0) {
  838.                         std::cout << "Сотрудников в таком отделе не существует, попробуйте еще раз:" << std::endl;
  839.                         WaitEnter();
  840.                         menu5 = false;
  841.                         break;
  842.                     }
  843.                     else {
  844.                         PrintListOfEmployees(chosen_ones);
  845.                         WaitEnter();
  846.                         chosen_ones.clear();
  847.                         start = true;
  848.                         break;
  849.                     }
  850.  
  851.                 case 4:
  852.                     system("cls");
  853.  
  854.                     std::cout << "Дата рождения (формат: dd.mm.yyyy): ";
  855.  
  856.                     std::getline(std::cin, item);
  857.  
  858.                     while (true) {
  859.                         if (std::regex_match(item, birth_regex)) {
  860.                             if (DateOfBirthValidation(item)) {
  861.                                 break;
  862.                             }
  863.                             else {
  864.                                 std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  865.                                 std::cout << "Дата рождения*: ";
  866.  
  867.                                 std::getline(std::cin, item);
  868.                             }
  869.                         }
  870.                         else {
  871.                             std::cout << "Дата рождения введена неправильно, попробуйте еще раз: " << std::endl;
  872.                             std::cout << "Дата рождения*: ";
  873.  
  874.                             std::getline(std::cin, item);
  875.                         }
  876.  
  877.                     }
  878.                     for (int i = 0; i < employees_data.size(); ++i) {
  879.                         if (employees_data[i].birth == item)
  880.                             chosen_ones.push_back(employees_data[i]);
  881.                     }
  882.                     if (chosen_ones.size() == 0) {
  883.                         std::cout << "Сотрудников с таким днем рождения не существует, попробуйте еще раз:" << std::endl;
  884.                         WaitEnter();
  885.                         menu5 = false;
  886.                         break;
  887.                     }
  888.                     else {
  889.                         PrintListOfEmployees(chosen_ones);
  890.                         WaitEnter();
  891.                         chosen_ones.clear();
  892.                         start = true;
  893.                         break;
  894.                     }
  895.  
  896.                 case 5:
  897.                     system("cls");
  898.                     std::cout << "Заработная плата: ";
  899.                     std::cin.ignore(32767, '\n');
  900.                     std::getline(std::cin, item);
  901.  
  902.                     if (item == "none")
  903.                         salary = 0.0;
  904.                     else {
  905.                         while (!std::regex_match(item, salary_regex)) {
  906.                             std::cout << "Заработная плата введена неправильно, попробуйте еще раз: " << std::endl;
  907.                             std::cout << "Заработная плата: ";
  908.                             std::getline(std::cin, item);
  909.                         }
  910.                         salary = std::stod(item);
  911.                     }
  912.                     for (int i = 0; i < employees_data.size(); ++i) {
  913.                         if (employees_data[i].salary == salary)
  914.                             chosen_ones.push_back(employees_data[i]);
  915.                     }
  916.                     if (chosen_ones.size() == 0) {
  917.                         std::cout << "Сотрудников с такой заработной платой не существует, попробуйте еще раз:" << std::endl;
  918.                         WaitEnter();
  919.                         menu5 = false;
  920.                         break;
  921.                     }
  922.                     else {
  923.                         PrintListOfEmployees(chosen_ones);
  924.                         WaitEnter();
  925.                         chosen_ones.clear();
  926.                         start = true;
  927.                         break;
  928.                     }
  929.  
  930.                 case 6:
  931.                     system("cls");
  932.                     std::cout << "Комментарий: ";
  933.                     std::cin.ignore(32767, '\n');
  934.                     std::getline(std::cin, item);
  935.                     if (item == "none")
  936.                         item = "не указан";
  937.                     for (int i = 0; i < employees_data.size(); ++i) {
  938.                         if (employees_data[i].comment == item)
  939.                             chosen_ones.push_back(employees_data[i]);
  940.                     }
  941.                     if (chosen_ones.size() == 0) {
  942.                         std::cout << "Сотрудников с таким комментарием не существует, попробуйте еще раз:" << std::endl;
  943.                         WaitEnter();
  944.                         menu5 = false;
  945.                         break;
  946.                     }
  947.                     else {
  948.                         PrintListOfEmployees(chosen_ones);
  949.                         WaitEnter();
  950.                         chosen_ones.clear();
  951.                         start = true;
  952.                         break;
  953.                     }
  954.  
  955.                 case 7:
  956.                     system("cls");
  957.                     std::cout << "Приоритет: ";
  958.                     std::cin.ignore(32767, '\n');
  959.                     std::getline(std::cin, item);
  960.                     if (item == "none")
  961.                         priority = 0;
  962.                     else {
  963.                         while (!std::regex_match(item, nums_regex)) {
  964.                             std::cout << "Приоритет введен неправильно, попробуйте еще раз: " << std::endl;
  965.                             std::cout << "Приоритет: ";
  966.                             std::getline(std::cin, item);
  967.                         }
  968.                         priority = std::stoi(item);
  969.                     }
  970.                     for (int i = 0; i < employees_data.size(); ++i) {
  971.                         if (employees_data[i].priority == priority)
  972.                             chosen_ones.push_back(employees_data[i]);
  973.                     }
  974.                     if (chosen_ones.size() == 0) {
  975.                         std::cout << "Сотрудников с таким приоритетом не существует, попробуйте еще раз:" << std::endl;
  976.                         WaitEnter();
  977.                         menu5 = false;
  978.                         break;
  979.                     }
  980.                     else {
  981.                         PrintListOfEmployees(chosen_ones);
  982.                         WaitEnter();
  983.                         chosen_ones.clear();
  984.                         start = true;
  985.                         break;
  986.                     }
  987.  
  988.                 case 8:
  989.                     system("cls");
  990.                     std::cout << "Введите id: ";
  991.                     std::cin.ignore(32767, '\n');
  992.                     std::getline(std::cin, id_s);
  993.                     while (!std::regex_match(id_s, nums_regex)) {
  994.                         std::cout << "id введен неправильно, попробуйте еще раз: " << std::endl;
  995.                         std::cout << "id: ";
  996.                         std::getline(std::cin, id_s);
  997.                     }
  998.                     id = std::stoi(id_s);
  999.                     for (int i = 0; i < employees_data.size(); ++i) {
  1000.                         if (employees_data[i].id == id)
  1001.                             chosen_ones.push_back(employees_data[i]);
  1002.                     }
  1003.                     if (chosen_ones.size() == 0) {
  1004.                         std::cout << "Сотрудников с таким id не существует, попробуйте еще раз:" << std::endl;
  1005.                         WaitEnter();
  1006.                         menu5 = false;
  1007.                         break;
  1008.                     }
  1009.                     else {
  1010.                         PrintListOfEmployees(chosen_ones);
  1011.                         WaitEnter();
  1012.                         chosen_ones.clear();
  1013.                         start = true;
  1014.                         break;
  1015.                     }
  1016.  
  1017.                 case 9:
  1018.                     system("cls");
  1019.                     std::cout << "Стаж: ";
  1020.                     std::cin.ignore(32767, '\n');
  1021.                     std::getline(std::cin, item);
  1022.                     if (item == "none")
  1023.                         experience = 0;
  1024.                     else {
  1025.                         while (!std::regex_match(item, nums_regex)) {
  1026.                             std::cout << "Стаж введен неправильно, попробуйте еще раз: " << std::endl;
  1027.                             std::cout << "Стаж: ";
  1028.                             std::getline(std::cin, item);
  1029.                         }
  1030.                         experience = std::stoi(item);
  1031.                     }
  1032.                     for (int i = 0; i < employees_data.size(); ++i) {
  1033.                         if (employees_data[i].experience == experience)
  1034.                             chosen_ones.push_back(employees_data[i]);
  1035.                     }
  1036.                     if (chosen_ones.size() == 0) {
  1037.                         std::cout << "Сотрудников с таким стажем не существует, попробуйте еще раз:" << std::endl;
  1038.                         WaitEnter();
  1039.                         menu5 = false;
  1040.                         break;
  1041.                     }
  1042.                     else {
  1043.                         PrintListOfEmployees(chosen_ones);
  1044.                         WaitEnter();
  1045.                         chosen_ones.clear();
  1046.                         start = true;
  1047.                         break;
  1048.                     }
  1049.                 case 10:
  1050.                     start = true;
  1051.                     break;
  1052.                 }
  1053.             }
  1054.            
  1055.  
  1056.  
  1057.         case 4:
  1058.             if (start || menu2)
  1059.                 break;
  1060.             return 0;
  1061.         }
  1062.     }
  1063.    
  1064. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement