Advertisement
ProgNeo

8_5

May 22nd, 2021 (edited)
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <sstream>
  4. #include <windows.h>
  5.  
  6. using namespace std;
  7.  
  8. struct Info
  9. {
  10.     string last_name;
  11.     string first_name;
  12.     string patronymic;
  13.     int personnel_number;
  14.     int experience;
  15.     int salary;
  16.     string specialty;
  17. };
  18. struct List
  19. {
  20.     Info detail;
  21.     List* next;
  22.     List* prev;
  23. };
  24. List* head = NULL;
  25. List* last = NULL;
  26.  
  27. void displayMembers(List* h)
  28. {
  29.     cout << "|------------------------------------------------------------------------------------------------------------------|\n"
  30.         << "| "
  31.         << setw(12) << left << "Фамилия" << " | "
  32.         << setw(12) << left << "Имя" << " | "
  33.         << setw(12) << left << "Отчество" << " | "
  34.         << setw(15) << "Табельный номер" << " | "
  35.         << setw(8) << "Опыт" << " | "
  36.         << setw(12) << "Оклад" << " | "
  37.         << setw(23) << left << "Специальность" << " |\n"
  38.         << "|------------------------------------------------------------------------------------------------------------------|\n";
  39.     for (List* temp = h; temp; temp = temp->next) {
  40.         cout << "| "
  41.             << setw(12) << left << temp->detail.last_name << " | "
  42.             << setw(12) << left << temp->detail.first_name << " | "
  43.             << setw(12) << left << temp->detail.patronymic << " | "
  44.             << setw(15) << temp->detail.personnel_number << " | "
  45.             << setw(8) << temp->detail.experience << " | "
  46.             << setw(12) << temp->detail.salary << " | "
  47.             << setw(23) << left << temp->detail.specialty << " |\n";
  48.     }
  49.     cout << "|------------------------------------------------------------------------------------------------------------------|\n\n";
  50. }
  51.  
  52. void addByPersonnelNumber(Info worker)
  53. {
  54.     List* search = head;
  55.  
  56.     List* temp = new List;
  57.     temp->detail = worker;
  58.     temp->next = NULL;
  59.  
  60.     if (search == NULL) {
  61.         head = temp;
  62.         return;
  63.     }
  64.  
  65.     if (search->detail.personnel_number >= worker.personnel_number) {
  66.         List* newList = new List;
  67.         newList->detail = worker;
  68.         newList->next = head;
  69.         head = newList;
  70.         return;
  71.     }
  72.  
  73.     while (search->next != NULL) {
  74.         if (search->next->detail.personnel_number >= worker.personnel_number) {
  75.             List* newList = new List;
  76.             newList->detail = worker;
  77.             newList->next = search->next;
  78.             search->next = newList;
  79.             return;
  80.         }
  81.         search = search->next;
  82.     }
  83.     for (List* temp1 = head; temp1; temp1 = temp1->next) {
  84.         if (temp1->next == NULL) {
  85.             temp1->next = temp;
  86.             return;
  87.         }
  88.     }
  89. }
  90.  
  91. void addMemberLast(List*& h, List*& l, Info worker)
  92. {
  93.     List* member = new List;
  94.     member->detail.last_name = worker.last_name;
  95.     member->detail.first_name = worker.first_name;
  96.     member->detail.patronymic = worker.patronymic;
  97.     member->detail.personnel_number = worker.personnel_number;
  98.     member->detail.experience = worker.experience;
  99.     member->detail.salary = worker.salary;
  100.     member->detail.specialty = worker.specialty;
  101.  
  102.     if (l == NULL) {
  103.         h = member;
  104.         member->prev = NULL;
  105.         member->next = NULL;
  106.         l = member;
  107.     }
  108.     else {
  109.         member->prev = l;
  110.         l->next = member;
  111.         member->next = NULL;
  112.         l = member;
  113.     }
  114. }
  115.  
  116. void addMember()
  117. {
  118.     Info worker;
  119.     cout << "Введите информацию о рабочем в виде:\nФамилия Имя Отчество Табельный_номер Опыт Оклад Специальность\n";
  120.     while (!((cin >> worker.last_name >> worker.first_name >> worker.patronymic >> worker.personnel_number >> worker.experience >> worker.salary >> worker.specialty) || (cin.peek() != '\n'))
  121.         && worker.personnel_number && worker.experience >= 0 && worker.salary >= 0) {
  122.         cin.clear();
  123.         while (cin.get() != '\n');
  124.         cout << "Неверный ввод\n";
  125.     }
  126.     addByPersonnelNumber(worker);
  127.     system("cls");
  128.     displayMembers(head);
  129. }
  130.  
  131. void removeByPersonnelNumber(int personnel_number)
  132. {
  133.     List* del = head;
  134.  
  135.     if (del == NULL)
  136.     {
  137.         return;
  138.     }
  139.  
  140.     if (del->detail.personnel_number == personnel_number)
  141.     {
  142.         head = del->next;
  143.         removeByPersonnelNumber(personnel_number);
  144.         return;
  145.     }
  146.  
  147.     if (del->next == NULL)
  148.     {
  149.         return;
  150.     }
  151.  
  152.     while (del->next != NULL)
  153.     {
  154.         if (del->next->detail.personnel_number == personnel_number)
  155.         {
  156.             del->next = del->next->next;
  157.             removeByPersonnelNumber(personnel_number);
  158.             return;
  159.         }
  160.         del = del->next;
  161.     }
  162. }
  163.  
  164. void deleteMember()
  165. {
  166.     int personnel_number;
  167.     cout << "Список рабочих:\n"; displayMembers(head);
  168.     cout << "Введите табельный номер рабочего, которого вы хотите удалить\n";
  169.     while (!(cin >> personnel_number) || (cin.peek() != '\n') || personnel_number < 1) {
  170.         cin.clear();
  171.         while (cin.get() != '\n');
  172.         cout << "Неверный ввод\n";
  173.     }
  174.     removeByPersonnelNumber(personnel_number);
  175.     system("cls");
  176.     displayMembers(head);
  177. }
  178.  
  179. void displayMembersListWithParameters()
  180. {
  181.     List* t_head = NULL;
  182.     List* t_last = NULL;
  183.     int x, y;
  184.     string specialty;
  185.     cout << "Введите границы поиска в виде x y: ";
  186.     while (!(cin >> x >> y) || (cin.peek() != '\n')) {
  187.         cin.clear();
  188.         while (cin.get() != '\n');
  189.         cout << "Неверный ввод\n";
  190.     }
  191.     cout << "Введите специальность: ", cin >> specialty;
  192.     for (List* temp = head; temp; temp = temp->next) {
  193.         if ((temp->detail.experience >= x && temp->detail.experience <= y) && temp->detail.specialty == specialty) {
  194.             addMemberLast(t_head, t_last, temp->detail);
  195.         }
  196.     }
  197.     system("cls");
  198.     displayMembers(t_head);
  199. }
  200.  
  201. int main()
  202. {
  203.     SetConsoleCP(1251);
  204.     SetConsoleOutputCP(1251);
  205.     setlocale(LC_ALL, ".1251");
  206.     addMember();
  207.     system("cls");
  208.     displayMembers(head);
  209.     while (true) {
  210.         int choice;
  211.         cout << "1. Список рабочих\n"
  212.             << "2. Добавить рабочего\n"
  213.             << "3. Удалить рабочего\n"
  214.             << "4. Вывод рабочих с заданными пределами стажа и специальностью\n"
  215.             << "5. Выход из программы\n";
  216.         while (!(cin >> choice) || (cin.peek() != '\n')) {
  217.             cin.clear();
  218.             while (cin.get() != '\n');
  219.             cout << "Неверный ввод\n";
  220.         }
  221.         switch (choice) {
  222.         case 1:
  223.             system("cls");
  224.             displayMembers(head);
  225.             break;
  226.         case 2:
  227.             system("cls");
  228.             addMember();
  229.             break;
  230.         case 3:
  231.             system("cls");
  232.             deleteMember();
  233.             break;
  234.         case 4:
  235.             system("cls");
  236.             displayMembersListWithParameters();
  237.             break;
  238.         case 5:
  239.             return 0;
  240.         default:
  241.             system("cls");
  242.             cout << "Неверное число\n";
  243.             break;
  244.         }
  245.     }
  246. }
  247.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement