mishavi

Курсач Гали

Jun 8th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 43.39 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <locale>
  4. #include <windows.h>
  5. #include <conio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. struct salary
  10. {
  11.     int tariffRate; //тарифная ставка каждого работника
  12.     int numberOfHours;
  13. };
  14.  
  15. struct worker
  16. {  
  17.     char workerSurname[20];
  18.     char workerName[20];
  19.     char workerSecondName[20];
  20.     char post[20];
  21.     int experience;
  22.     int personnelNumber;
  23.     int id;
  24.     struct salary *salary;
  25.     struct worker *next;
  26.     struct worker *prev;
  27. };
  28.  
  29. struct department
  30. {
  31.     char departmentName[20];
  32.     int numberOfWorkers;
  33.     int id;
  34.     struct worker *workers;
  35.     struct department *next;
  36.     struct department *prev;
  37. };
  38.  
  39. struct users
  40. {
  41.     char login[20];
  42.     char password[20];
  43.     struct users *next;
  44.     struct users *prev;
  45. };
  46.  
  47. int menu(int); //выбор, какое меню нужно вывести на экран
  48. void mainMenu(department*);//вывод на экран главного меню и осуществление выбора
  49. void adminMenu(department*);//вывод на экран меню администратора и осуществление выбора
  50. void addMenu(department**);//вывод на экран меню добавления информации и осуществление выбора
  51. void editMenu(department**);//вывод на экран меню редактирования и осуществление выбора
  52. void deleteMenu(department**);//вывод на экран меню удаления и осуществление выбора
  53. void printMenu(department*);//вывод на экран меню просмотра информации и осуществление выбор
  54. void searchMenu(department*);//вывод на экран меню поиска и осуществлоение выбора
  55. void workWithUsers();//вывод на экран меню работы с пользователями для админа и осуществление выбора
  56. bool checkUser();//проверка логина и пароля пользователя
  57. bool checkAdmin();//проверка логина и пароля администратора
  58. void addDepartment(department**);//добавление отдела в список
  59. void addWorker(department**);//добавление работника в список
  60. void changeSurname(department**);//редактирование фамилии работника
  61. void changeName(department**);//редактирование имени работника
  62. void changeSecondName(department**);//изменение отчества работника
  63. void changePost(department**);//изменение должности
  64. void changeTariffRate(department**);//изменение размера тарифной ставки
  65. void changeExperience(department**);//изменение опыта работы
  66. void changeDepartmentName(department**);//смена названия отдела
  67. void changePersonnelNumber(department**);//смена персонального номера работника
  68. void deleteWorker(department**);//удаление работника из списка
  69. void deleteDepartment(department**);//удаление отдела из списка
  70. void printTableD();//вывод на экран шапки таблицы
  71. void printDepartments(department*);//вывод на экран списка отделов
  72. void printTableW();//вывод шапки таблицы на экран
  73. void printWorkers(department*); //вывод на экран списка работников
  74. void workWithSalary(department **);//начисление зп работникам, через утановление времени, отработанного за месяц
  75. void readUsers(users**);//чтение из файла списка пользователей
  76. void writeUsers(users*);//запись списка пользователей в файл
  77. void printDepartment(department*);//вывод информации об отделе на экран
  78. void printWorker(department*, worker*);//вывод на эран информации о работнике
  79. void searchByNumberOfWorkers(department*);//поиск отдела по количеству работников
  80. void searchByDepartmentName(department*);//поиск отдела по его названию
  81. void searchDeptById(department*);//поиск отдела по id
  82. void searchByNameSurname(department*);//Поиск по имени и фамилии
  83. void searchBySurnameDept(department*);//поиск по фамилии и отделу
  84. void searchByPostSurname(department*);//поиск по должности и фамилии
  85. void searchWorkerById(department*);//поиск по id
  86. void userMenu(department*);//вывод на экран меню пользователя и осуществление выбора
  87. int choiceDepartment(department*);//вывод списка отделов на экран и осуществление выбора
  88. int choiceWorker(worker*);//вывод списка работников на экран и выброр работника
  89. void writeFile(department*);//запись всей информации в файл
  90. void readFile(department**);//чтение всей информации из файла
  91. void activate(users**); //Активация пользователь(добавляется запись в список пользователей)
  92. void ban(users**); //блокировка пользователей(удаляется запись из списка пользователей)
  93.  
  94.  
  95. int main()
  96. {
  97.     SetConsoleOutputCP(1251);
  98.     SetConsoleCP(1251);
  99.     char a, b;
  100.     department *head = NULL;
  101.     mainMenu(head);
  102.     return 0;
  103. }
  104.  
  105. //выбор, какое меню нужно вывести на экран
  106. int menu(int menuNumber)
  107. {
  108.     system("cls");
  109.     switch (menuNumber)
  110.     {
  111.     case 1:
  112.         printf("ГЛАВНОЕ МЕНЮ\n");
  113.         printf("1. Вход от имени администратора.\n");
  114.         printf("2. Вход от имени пользователя.\n");
  115.         printf("0. Выход.\n");
  116.         break;
  117.     case 2:
  118.         printf("ВЫПОЛНЕН ВХОД ОТ ИМЕНИ АДМИНИСТРАТОРА\n");
  119.         printf("1. Добавление записи.\n");
  120.         printf("2. Редактирование записи.\n");
  121.         printf("3. Удаление записи.\n");
  122.         printf("4. Начисление ЗП.\n");
  123.         printf("5. Просмотр данных.\n");
  124.         printf("6. Поиск.\n");
  125.         printf("7. Управление пользователями.\n");
  126.         printf("0. Выход в предыдущее меню.\n");
  127.         break;
  128.     case 3:
  129.         printf("ВЫПОЛНЕН ВХОД ОТ ИМЕНИ ПОЛЬЗОВАТЕЛЯ\n");
  130.         printf("1. Просмотр данных.\n");
  131.         printf("2. Поиск.\n");
  132.         printf("0. выход в предыдущее меню.\n");
  133.         break;
  134.     case 4:
  135.         printf("ДОБАВЛЕНИЕ ЗАПИСИ\n");
  136.         printf("1. Добавление отдела.\n");
  137.         printf("2. Добавление работника в отдел.\n");
  138.         printf("0. Выход в предыдущее меню.\n");
  139.         break;
  140.     case 5:
  141.         printf("РЕДАКТИРОВАНИЕ ИНФОРМАЦИИ\n");
  142.         printf("Редактирование информации о работнике:\n");
  143.         printf("1. Изменить фамилию.\n");
  144.         printf("2. Изменить имя.\n");
  145.         printf("3. Изменить отчество.\n");
  146.         printf("4. Изменить должность.\n");
  147.         printf("5. Изменить размер тарифной ставки.\n");
  148.         printf("6. Изменить опыт работы.\n");
  149.         printf("7. Изменить личный номер.\n");
  150.         printf("Редактирование информации об отделе:\n");
  151.         printf("8. Изменить название отдела.\n");
  152.         printf("0. Выход в предыдущее меню.\n");
  153.         break;
  154.     case 6:
  155.         printf("УДАЛЕНИЕ ЗАПИСИ\n");
  156.         printf("1. Удаление отдела.\n");
  157.         printf("2. Удаление работника.\n");
  158.         printf("0. Выход в предыдущее меню.\n");
  159.         break;
  160.     case 7:
  161.         printf("ВЫВОД ДАННЫХ\n");
  162.         printf("1. Вывести список отделов.\n");
  163.         printf("2. Вывести список работников отдела.\n");
  164.         printf("0. Выход в предыдущее меню.\n");
  165.         break;
  166.     case 8:
  167.         printf("ПОИСК\n");
  168.         printf("Поиск отдела:\n");
  169.         printf("1. Поиск по названию отдела.\n");
  170.         printf("2. Поиск по количеству работников.\n");
  171.         printf("3. Поиск отдела по id.\n");
  172.         printf("Поиск работника:\n");
  173.         printf("4. Поиск по фималии и имени.\n");
  174.         printf("5. Поиск по фамилии и отделу.\n");
  175.         printf("6. Поиск по должности и фамилии.\n");
  176.         printf("7. Поиск по id.\n");
  177.         printf("0. Выход в предыдущее меню.\n");
  178.         break;
  179.     case 9:
  180.         printf("УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ\n");
  181.         printf("1. Активация пользователей.\n");
  182.         printf("2. Блокировка пользователей.\n");
  183.         printf("0. Выход в предыдущее меню.\n");
  184.         break;
  185.     }
  186.     printf("Ваш выбор: ");
  187.     int choice;
  188.     while (!scanf("%d", &choice))
  189.     {
  190.         fflush(stdin);
  191.         printf("Ошибка ввода. Попробуйте снова: ");
  192.     }
  193.     return choice;
  194. }
  195.  
  196. //вывод на экран главного меню и осуществление выбора
  197. void mainMenu(department *head)
  198. {
  199.     while (true)
  200.     {
  201.         switch (menu(1))
  202.         {
  203.         case 1:
  204.             if (checkAdmin() == false)
  205.             {
  206.                 printf("Данные аутентификации были введены не верно.\n");
  207.                 system("pause");
  208.                
  209.             }
  210.             else adminMenu(head);
  211.             break;
  212.         case 2:
  213.             if (checkUser() == false)
  214.             {
  215.                 printf("Данные аутентификации были введены не верно.\n");
  216.                 system("pause");
  217.             }
  218.             else userMenu(head);
  219.             break;
  220.         case 0:
  221.             return;
  222.         default:
  223.             printf("Ошибка ввода.\n");
  224.             system("pause");
  225.             break;
  226.         }
  227.     }
  228. }
  229.  
  230. //проверка логина и пароля пользователя
  231. bool checkUser()
  232. {
  233.     users *usersPtr = NULL;
  234.     readUsers(&usersPtr);
  235.     char login[20], password[20];
  236.     char t;
  237.     int i = 0;
  238.     system("cls");
  239.     printf("Введите ваш логин: ");
  240.     scanf("%s", &login);
  241.     printf("Введите ваш пароль: ");
  242.     while (1)
  243.     {
  244.         t = _getch();
  245.         if (t == '\r') break;
  246.         else if (t == '\b')
  247.         {
  248.             printf("\b \b");
  249.             i--;
  250.         }
  251.         else
  252.         {
  253.             password[i] = t;
  254.             i++;
  255.             printf("*");
  256.         }
  257.     }
  258.     password[i] = '\0';
  259.     while (usersPtr != NULL)
  260.     {
  261.         if (strcmp(usersPtr->login, login) == 0 && strcmp(usersPtr->password, password) == 0) return true;
  262.         else usersPtr = usersPtr->next;
  263.     }
  264.     return false;
  265. }
  266.  
  267. //проверка логина и пароля администратора
  268. bool checkAdmin()
  269. {
  270.     FILE *adminFile;
  271.     char login[20], password[20], rightLogin[20], rightPassword[20];
  272.     char t;
  273.     int i = 0;
  274.     system("cls");
  275.     adminFile = fopen("adminData.txt", "r+");
  276.     printf("Введите логин: ");
  277.     scanf("%s", &login);
  278.     printf("Введите пароль: ");
  279.     while (1)
  280.     {
  281.         t = _getch();
  282.         if (t == '\r') break;
  283.         else if (t == '\b')
  284.         {
  285.             printf("\b \b");
  286.             i--;
  287.         }
  288.         else
  289.         {
  290.             password[i] = t;
  291.             i++;
  292.             printf("*");
  293.         }
  294.     }
  295.     password[i] = '\0';
  296.     fscanf(adminFile, "%s ", &rightLogin);
  297.     fscanf(adminFile, "%s", &rightPassword);
  298.     if (strcmp(login, rightLogin) == 0 && strcmp(password, rightPassword) == 0)
  299.     {
  300.         fclose(adminFile);
  301.         return true;
  302.     }
  303.     fclose(adminFile);
  304.     return false;
  305. }
  306.  
  307. //вывод на экран меню администратора и осуществление выбора
  308. void adminMenu(department *head)
  309. {
  310.     if (head == NULL) readFile(&head);
  311.     while (true)
  312.     {
  313.         switch (menu(2))
  314.         {
  315.         case 1:
  316.             addMenu(&head);
  317.             writeFile(head);
  318.             break;
  319.         case 2:
  320.             editMenu(&head);
  321.             writeFile(head);
  322.             break;
  323.         case 3:
  324.             deleteMenu(&head);
  325.             writeFile(head);
  326.             break;
  327.         case 4:
  328.             workWithSalary(&head);
  329.             writeFile(head);
  330.             break;
  331.         case 5:
  332.             printMenu(head);
  333.             break;
  334.         case 6:
  335.             searchMenu(head);
  336.             break;
  337.         case 7:
  338.             workWithUsers();
  339.             break;
  340.         case 0:
  341.            
  342.             return;
  343.         default:
  344.             printf("Ошибка ввода.\n");
  345.             system("pause");
  346.             break;
  347.         }
  348.     }
  349.    
  350. }
  351.  
  352. //вывод на экран меню добавления информации и осуществление выбора
  353. void addMenu(department **head)
  354. {
  355.     while (true)
  356.     {
  357.         switch (menu(4))
  358.         {
  359.         case 1:
  360.             addDepartment(head);
  361.             break;
  362.         case 2:
  363.             addWorker(head);
  364.             break;
  365.         case 0:
  366.             return;
  367.         default:
  368.             printf("Ошибка ввода.\n");
  369.             system("pause");
  370.             break;
  371.         }
  372.     }
  373.    
  374. }
  375.  
  376. //добавление отдела в список
  377. void addDepartment(department **head)
  378. {
  379.     system("cls");
  380.     department *newPtr;
  381.     newPtr = (department*)malloc(sizeof(department));
  382.     printf("НОВЫЙ ОТДЕЛ:\n");
  383.     printf("Введите название отдела: ");
  384.     scanf("%s", &newPtr->departmentName);
  385.     newPtr->numberOfWorkers = 0;
  386.     if (*head == NULL)
  387.     {
  388.         newPtr->next = NULL;
  389.         newPtr->prev = NULL;
  390.         newPtr->workers = NULL;
  391.         newPtr->id = 1;
  392.         *head = newPtr;
  393.     }
  394.     else
  395.     {
  396.         newPtr->next = *head;
  397.         newPtr->next->prev = newPtr;
  398.         newPtr->prev = NULL;
  399.         newPtr->workers = NULL;
  400.         newPtr->id = newPtr->next->id + 1;
  401.         *head = newPtr;
  402.     }
  403.     printf("Новый отдел добавлен в список отделов.\n");
  404.     system("pause");
  405. }
  406.  
  407. //добавление работника в список
  408. void addWorker(department **head)
  409. {
  410.     int choice = choiceDepartment(*head);
  411.     if (choice == 0) return;
  412.     else
  413.     {
  414.         department *tempPtr = *head;
  415.         for (int i = 0; i < choice - 1; i++)
  416.         {
  417.             tempPtr = tempPtr->next;
  418.         }
  419.         tempPtr->numberOfWorkers++;
  420.         worker *newPtr;
  421.         newPtr = (worker*)malloc(sizeof(worker));
  422.         printf("ДОБАВЛЕНИЕ РАБОТНИКА В ОТДЕЛ %s:\n", tempPtr->departmentName);
  423.         printf("Фамилия: ");
  424.         scanf("%s", &newPtr->workerSurname);
  425.         printf("Имя: ");
  426.         scanf("%s", &newPtr->workerName);
  427.         printf("Отчество: ");
  428.         scanf("%s", &newPtr->workerSecondName);
  429.         printf("Должность: ");
  430.         scanf("%s", &newPtr->post);
  431.         printf("Личный номер: ");
  432.         while (!scanf("%d", &newPtr->personnelNumber))
  433.         {
  434.             fflush(stdin);
  435.             printf("Ошибка ввода. Попробуйте снова: ");
  436.         }
  437.         printf("Опыт работы: ");
  438.         while (!scanf("%d", &newPtr->experience))
  439.         {
  440.             fflush(stdin);
  441.             printf("Ошибка ввода. Попробуйте снова: ");
  442.         }
  443.         newPtr->salary = (salary*)malloc(sizeof(salary));
  444.         printf("Тарифная ставка рабочего: ");
  445.         while (!scanf("%d", &(newPtr->salary->tariffRate)))
  446.         {
  447.             fflush(stdin);
  448.             printf("Ошибка ввода. Попробуйте снова: ");
  449.         }
  450.         newPtr->salary->numberOfHours = 0;
  451.         if (tempPtr->workers == NULL)
  452.         {
  453.             newPtr->id = 1;
  454.             tempPtr->workers = newPtr;
  455.             tempPtr->workers->next = NULL;
  456.             tempPtr->workers->prev = NULL;
  457.         }
  458.         else
  459.         {
  460.             newPtr->id = tempPtr->workers->id + 1;
  461.             newPtr->next = tempPtr->workers;
  462.             newPtr->prev = NULL;
  463.             tempPtr->workers->prev = newPtr;
  464.             tempPtr->workers = newPtr;
  465.         }
  466.         printf("Работник добавлен.\n");
  467.         system("pause");
  468.     }
  469. }
  470.  
  471. //вывод на экран меню редактирования и осуществление выбора
  472. void editMenu(department **head)
  473. {
  474.     while (true)
  475.     {
  476.         switch (menu(5))
  477.         {
  478.         case 1:
  479.             changeSurname(head);
  480.             break;
  481.         case 2:
  482.             changeName(head);
  483.             break;
  484.         case 3:
  485.             changeSecondName(head);
  486.             break;
  487.         case 4:
  488.             changePost(head);
  489.             break;
  490.         case 5:
  491.             changeTariffRate(head);
  492.             break;
  493.         case 6:
  494.             changeExperience(head);
  495.             break;
  496.         case 7:
  497.             changePersonnelNumber(head);
  498.             break;
  499.         case 8:
  500.             changeDepartmentName(head);
  501.             break;
  502.         case 0:
  503.             return;
  504.         default:
  505.             printf("Вы ввели неверное значение, попробуйте снова...\n");
  506.             system("pause");
  507.             break;
  508.         }
  509.     }
  510. }
  511.  
  512. //редактирование фамилии работника
  513. void changeSurname(department **head)
  514. {
  515.     int choice;
  516.     choice = choiceDepartment(*head);
  517.     worker *tempW;
  518.     if (choice == 0) return;
  519.     else
  520.     {
  521.         department *tempDept = *head;
  522.         for (int i = 0; i < choice - 1; i++)
  523.         {
  524.             tempDept = tempDept->next;
  525.         }
  526.         tempW = tempDept->workers;
  527.         choice = choiceWorker(tempW);
  528.         for (int i = 0; i < choice - 1; i++)
  529.         {
  530.             tempW = tempW->next;
  531.         }
  532.         system("cls");
  533.         printf("Введите фамилию: ");
  534.         scanf("%s", &tempW->workerSurname);
  535.         printf("Данные изменены.\n");
  536.         system("pause");
  537.     }
  538. }
  539.  
  540. //редактирование имени работника
  541. void changeName(department **head)
  542. {
  543.     int choice;
  544.     choice = choiceDepartment(*head);
  545.     worker *tempW;
  546.     if (choice == 0) return;
  547.     else
  548.     {
  549.         department *tempDept = *head;
  550.         for (int i = 0; i < choice - 1; i++)
  551.         {
  552.             tempDept = tempDept->next;
  553.         }
  554.         if (tempDept->numberOfWorkers == 0)
  555.         {
  556.             printf("В данном отделе работников нет.\n");
  557.             system("pause");
  558.             return;
  559.         }
  560.         tempW = tempDept->workers;
  561.         choice = choiceWorker(tempW);
  562.         for (int i = 0; i < choice - 1; i++)
  563.         {
  564.             tempW = tempW->next;
  565.         }
  566.         system("cls");
  567.         printf("Введите имя: ");
  568.         scanf("%s", &tempW->workerName);
  569.         printf("Данные изменены.\n");
  570.         system("pause");
  571.     }
  572. }
  573.  
  574. //изменение отчества работника
  575. void changeSecondName(department **head)
  576. {
  577.     int choice;
  578.     choice = choiceDepartment(*head);
  579.     worker *tempW;
  580.     if (choice == 0) return;
  581.     else
  582.     {
  583.         department *tempDept = *head;
  584.         for (int i = 0; i < choice - 1; i++)
  585.         {
  586.             tempDept = tempDept->next;
  587.         }
  588.         if (tempDept->numberOfWorkers == 0)
  589.         {
  590.             printf("В данном отделе работников нет.\n");
  591.             system("pause");
  592.             return;
  593.         }
  594.         tempW = tempDept->workers;
  595.         choice = choiceWorker(tempW);
  596.         for (int i = 0; i < choice - 1; i++)
  597.         {
  598.             tempW = tempW->next;
  599.         }
  600.         system("cls");
  601.         printf("Введите отчество: ");
  602.         scanf("%s", &tempW->workerSecondName);
  603.         printf("Данные изменены.\n");
  604.         system("pause");
  605.     }
  606. }
  607.  
  608. //изменение должности
  609. void changePost(department **head)
  610. {
  611.     int choice;
  612.     choice = choiceDepartment(*head);
  613.     worker *tempW;
  614.     if (choice == 0) return;
  615.     else
  616.     {
  617.         department *tempDept = *head;
  618.         for (int i = 0; i < choice - 1; i++)
  619.         {
  620.             tempDept = tempDept->next;
  621.         }
  622.         if (tempDept->numberOfWorkers == 0)
  623.         {
  624.             printf("В данном отделе работников нет.\n");
  625.             system("pause");
  626.             return;
  627.         }
  628.         tempW = tempDept->workers;
  629.         choice = choiceWorker(tempW);
  630.         for (int i = 0; i < choice - 1; i++)
  631.         {
  632.             tempW = tempW->next;
  633.         }
  634.         system("cls");
  635.         printf("Введите должность: ");
  636.         scanf("%s", &tempW->post);
  637.         printf("Данные изменены.\n");
  638.         system("pause");
  639.     }
  640. }
  641.  
  642. //изменение размера тарифной ставки
  643. void changeTariffRate(department **head)
  644. {
  645.     int choice;
  646.     choice = choiceDepartment(*head);
  647.     worker *tempW;
  648.     if (choice == 0) return;
  649.     else
  650.     {
  651.         department *tempDept = *head;
  652.         for (int i = 0; i < choice - 1; i++)
  653.         {
  654.             tempDept = tempDept->next;
  655.         }
  656.         if (tempDept->numberOfWorkers == 0)
  657.         {
  658.             printf("В данном отделе работников нет.\n");
  659.             system("pause");
  660.             return;
  661.         }
  662.         tempW = tempDept->workers;
  663.         choice = choiceWorker(tempW);
  664.         for (int i = 0; i < choice - 1; i++)
  665.         {
  666.             tempW = tempW->next;
  667.         }
  668.         system("cls");
  669.         printf("Введите оклад по должности: ");
  670.         scanf("%d", &tempW->salary);
  671.         printf("Данные изменены.\n");
  672.         system("pause");
  673.     }
  674. }
  675.  
  676. //изменение опыта работы
  677. void changeExperience(department **head)
  678. {
  679.     int choice;
  680.     choice = choiceDepartment(*head);
  681.     worker *tempW;
  682.     if (choice == 0) return;
  683.     else
  684.     {
  685.         department *tempDept = *head;
  686.         for (int i = 0; i < choice - 1; i++)
  687.         {
  688.             tempDept = tempDept->next;
  689.         }
  690.         if (tempDept->numberOfWorkers == 0)
  691.         {
  692.             printf("В данном отделе работников нет.\n");
  693.             system("pause");
  694.             return;
  695.         }
  696.         tempW = tempDept->workers;
  697.         choice = choiceWorker(tempW);
  698.         for (int i = 0; i < choice - 1; i++)
  699.         {
  700.             tempW = tempW->next;
  701.         }
  702.         system("cls");
  703.         printf("Введите опыт работы: ");
  704.         scanf("%d", &tempW->experience);
  705.         printf("Данные изменены.\n");
  706.         system("pause");
  707.     }
  708. }
  709.  
  710. //смена названия отдела
  711. void changeDepartmentName(department **head)
  712. {
  713.     int choice;
  714.     choice = choiceDepartment(*head);
  715.     if (choice == 0) return;
  716.     else
  717.     {
  718.         department *tempDept = *head;
  719.         for (int i = 0; i < choice - 1; i++)
  720.         {
  721.             tempDept = tempDept->next;
  722.         }
  723.         system("cls");
  724.         printf("Введите название отдела: ");
  725.         scanf("%s", &tempDept->departmentName);
  726.         printf("Данные изменены.\n");
  727.         system("pause");
  728.     }
  729. }
  730.  
  731. //смена персонального номера работника
  732. void changePersonnelNumber(department **head)
  733. {
  734.     int choice;
  735.     choice = choiceDepartment(*head);
  736.     worker *tempW;
  737.     if (choice == 0) return;
  738.     else
  739.     {
  740.         department *tempDept = *head;
  741.         for (int i = 0; i < choice - 1; i++)
  742.         {
  743.             tempDept = tempDept->next;
  744.         }
  745.         if (tempDept->numberOfWorkers == 0)
  746.         {
  747.             printf("В данном отделе работников нет.\n");
  748.             system("pause");
  749.             return;
  750.         }
  751.         tempW = tempDept->workers;
  752.         choice = choiceWorker(tempW);
  753.         for (int i = 0; i < choice - 1; i++)
  754.         {
  755.             tempW = tempW->next;
  756.         }
  757.         system("cls");
  758.         printf("Введите личный номер: ");
  759.         scanf("%s", &tempW->personnelNumber);
  760.         printf("Данные изменены.\n");
  761.         system("pause");
  762.     }
  763. }
  764.  
  765. //вывод на экран меню удаления и осуществление выбора
  766. void deleteMenu(department **head)
  767. {
  768.     while (true)
  769.     {
  770.         switch (menu(6))
  771.         {
  772.         case 1:
  773.             deleteDepartment(head);
  774.             break;
  775.         case 2:
  776.             deleteWorker(head);
  777.             break;
  778.         case 0:
  779.             return;
  780.         default:
  781.             printf("Ошибка ввода.\n");
  782.             system("pause");
  783.             break;
  784.         }
  785.     }
  786. }
  787.  
  788. //удаление работника из списка
  789. void deleteWorker(department **head)
  790. {
  791.     int choice;
  792.     choice = choiceDepartment(*head);
  793.     if (choice == 0) return;
  794.     else
  795.     {
  796.         department *tempDept = *head;
  797.         for (int i = 0; i < choice - 1; i++)
  798.         {
  799.             tempDept = tempDept->next;
  800.         }
  801.         if (tempDept->numberOfWorkers == 0)
  802.         {
  803.             printf("В данном отделе работников нет.\n");
  804.             system("pause");
  805.             return;
  806.         }
  807.         worker *tempW = tempDept->workers;
  808.         choice = choiceWorker(tempW);
  809.         for (int i = 0; i < choice - 1; i++)
  810.         {
  811.             tempW = tempW->next;
  812.         }
  813.         if (tempW == tempDept->workers) //если элемент первый
  814.         {
  815.             if (tempDept->workers->next == NULL && tempDept->workers->prev == NULL) //если он один
  816.             {
  817.                 free(tempW);
  818.                 tempDept->workers = NULL;
  819.                 return;
  820.             }
  821.             else //если не один
  822.             {
  823.                 tempDept->workers = tempW->next;
  824.                 tempDept->workers->prev = NULL;
  825.                 tempDept->workers->next = tempW->next->next;
  826.                 free(tempW);
  827.                 return;
  828.             }
  829.         }
  830.         if (tempW->next == NULL) //если последний
  831.         {
  832.             tempW->prev->next = NULL;
  833.             free(tempW);
  834.             return;
  835.         }
  836.         tempW->next->prev = tempW->prev; //если по центру
  837.         tempW->prev->next = tempW->next;
  838.         free(tempW);
  839.         return;
  840.     }
  841. }
  842.  
  843. //удаление отдела из списка
  844. void deleteDepartment(department **begin)
  845. {
  846.     int choice;
  847.     choice = choiceDepartment(*begin);
  848.     if (choice == 0) return;
  849.     else
  850.     {
  851.         department *tempDept = *begin;
  852.         for (int i = 0; i < choice - 1; i++)
  853.         {
  854.             tempDept = tempDept->next;
  855.         }
  856.         if (tempDept == *begin)
  857.         {
  858.             if (tempDept->next == NULL && tempDept->prev == NULL)
  859.             {
  860.                 free(tempDept);
  861.                 *begin = NULL;
  862.                 return;
  863.             }
  864.             else
  865.             {
  866.                 *begin = tempDept->next;
  867.                 (*begin)->prev = NULL;
  868.                 (*begin)->next = tempDept->next->next;
  869.                 free(tempDept);
  870.                 return;
  871.             }
  872.         }
  873.         if (tempDept->next == NULL)
  874.         {
  875.             tempDept->prev->next = NULL;
  876.             free(tempDept);
  877.             return;
  878.         }
  879.         tempDept->next->prev = tempDept->prev;
  880.         tempDept->prev->next = tempDept->next;
  881.         free(tempDept);
  882.         return;
  883.     }
  884. }
  885.  
  886. //вывод на экран меню просмотра информации и осуществление выбор
  887. void printMenu(department *head)
  888. {
  889.     while (true)
  890.     {
  891.         switch (menu(7))
  892.         {
  893.         case 1:
  894.             printDepartments(head);
  895.             break;
  896.         case 2:
  897.             printWorkers(head);
  898.             break;
  899.         case 0:
  900.             return;
  901.         default:
  902.             printf("Ошибка ввода.\n");
  903.             system("pause");
  904.             break;
  905.         }
  906.     }
  907. }
  908.  
  909. //вывод на экран списка работников конкретного отдела
  910. void printWorkers(department *begin)
  911. {
  912.     if (begin == NULL)
  913.     {
  914.         printf("Нет данных для отображения.\n");
  915.         system("pause");
  916.         return;
  917.     }
  918.     int choice;
  919.     choice = choiceDepartment(begin);
  920.     if (choice == 0) return;
  921.     else
  922.     {
  923.         department *tempDept = begin;
  924.         for (int i = 0; i < choice - 1; i++)
  925.         {
  926.             tempDept = tempDept->next;
  927.         }
  928.         system("cls");
  929.         printf("СПИСОК РАБОТНИКОВ ОТДЕЛА %s:\n", tempDept->departmentName);
  930.         worker *tempW = tempDept->workers;
  931.         printTableW();
  932.         while (tempW != NULL)
  933.         {
  934.             printWorker(tempDept, tempW);
  935.             tempW = tempW->next;
  936.         }
  937.         system("pause");
  938.     }
  939. }
  940.  
  941. //вывод на экран списка отделов
  942. void printDepartments(department *head)
  943. {
  944.     system("cls");
  945.     printf("СПИСОК ОТДЕЛОВ: \n");
  946.     if (head == NULL)
  947.     {
  948.         printf("Нет данных для отображения.\n");
  949.         system("pause");
  950.         return;
  951.     }
  952.     else
  953.     {
  954.         department *tempPtr = head;
  955.         printTableD();
  956.         while (tempPtr != NULL)
  957.         {
  958.             printDepartment(tempPtr);
  959.             tempPtr = tempPtr->next;
  960.         }
  961.         system("pause");
  962.     }
  963. }
  964.  
  965. //вывод на экран шапки таблицы
  966. void printTableD()
  967. {
  968.  
  969.     for (int i = 0; i < 90; ++i) printf("-");
  970.     printf("\n|Название отдела");
  971.     for (int i = 0; i < 14; i++) printf(" ");
  972.     printf("|Количество работников");
  973.     for (int i = 0; i < 8; i++) printf(" ");
  974.     printf("|id отдела");
  975.     for (int i = 0; i < 19; i++) printf(" ");
  976.     printf("|\n");
  977.     for (int i = 0; i < 90; ++i) printf("-");
  978.     printf("\n");
  979. }
  980.  
  981. //вывод информации об отделе на экран
  982. void printDepartment(department *current)
  983. {
  984.     printf("|%-29s", current->departmentName);
  985.     printf("|%-29d", current->numberOfWorkers);
  986.     printf("|%-28d", current->id);
  987.     printf("|\n");
  988.     for (int i = 0; i < 90; ++i) printf("-");
  989.     printf("\n");
  990. }
  991.  
  992. //вывод шапки таблицы на экран
  993. void printTableW()
  994. {
  995.     for (int i = 0; i < 172; ++i) printf("-");
  996.     printf("\n|Фамилия");
  997.     for (int i = 0; i < 14; i++) printf(" ");
  998.     printf("|Имя");
  999.     for (int i = 0; i < 18; i++) printf(" ");
  1000.     printf("|Отчество");
  1001.     for (int i = 0; i < 13; i++) printf(" ");
  1002.     printf("|Отдел");
  1003.     for (int i = 0; i < 16; i++) printf(" ");
  1004.     printf("|Должность");
  1005.     for (int i = 0; i < 12; i++) printf(" ");
  1006.     printf("|Стаж");
  1007.     for (int i = 0; i < 17; i++) printf(" ");
  1008.     printf("|Личный №  ");
  1009.     printf("|id   ");
  1010.     printf("|Начислено з.п.       ");
  1011.     printf("|\n");
  1012.     for (int i = 0; i < 172; ++i) printf("-");
  1013.     printf("\n");
  1014. }
  1015.  
  1016. //вывод на эран информации о работнике
  1017. void printWorker(department *currentDept, worker *current)
  1018. {
  1019.     printf("|%-21s", current->workerSurname);
  1020.     printf("|%-21s", current->workerName);
  1021.     printf("|%-21s", current->workerSecondName);
  1022.     printf("|%-21s", currentDept->departmentName);
  1023.     printf("|%-21s", current->post);
  1024.     printf("|%-21d", current->experience);
  1025.     printf("|%-10d", current->personnelNumber);
  1026.     printf("|%-5d", current->id);
  1027.     printf("|%-21d", current->salary->numberOfHours * current->salary->tariffRate);
  1028.     printf("|\n");
  1029.     for (int i = 0; i < 172; ++i) printf("-");
  1030.     printf("\n");
  1031. }
  1032.  
  1033. //Начисление зарабонтой платы работникам, через установление времени, отработанного за месяц
  1034. void workWithSalary(department **head)
  1035. {
  1036.     int choice;
  1037.     choice = choiceDepartment(*head);
  1038.     worker *tempW;
  1039.     if (choice == 0) return;
  1040.     else
  1041.     {
  1042.         department *tempDept = *head;
  1043.         for (int i = 0; i < choice - 1; i++)
  1044.         {
  1045.             tempDept = tempDept->next;
  1046.         }
  1047.         if (tempDept->numberOfWorkers == 0)
  1048.         {
  1049.             printf("В данном отделе работников нет.\n");
  1050.             system("pause");
  1051.             return;
  1052.         }
  1053.         tempW = tempDept->workers;
  1054.         choice = choiceWorker(tempW);
  1055.         for (int i = 0; i < choice - 1; i++)
  1056.         {
  1057.             tempW = tempW->next;
  1058.         }
  1059.         system("cls");
  1060.         printf("Введите количество часов, отработанных за этот месяц: ");
  1061.         scanf("%d", &tempW->salary->numberOfHours);
  1062.         printf("Данные зарплата начислена.\n");
  1063.         system("pause");
  1064.     }
  1065. }
  1066.  
  1067. //вывод на экран меню поиска и осуществлоение выбора
  1068. void searchMenu(department *head)
  1069. {
  1070.     while (true)
  1071.     {
  1072.         switch (menu(8))
  1073.         {
  1074.         case 1:
  1075.             searchByDepartmentName(head);
  1076.             break;
  1077.         case 2:
  1078.             searchByNumberOfWorkers(head);
  1079.             break;
  1080.         case 3:
  1081.             searchDeptById(head);
  1082.             break;
  1083.         case 4:
  1084.             searchByNameSurname(head);
  1085.             break;
  1086.         case 5:
  1087.             searchBySurnameDept(head);
  1088.             break;
  1089.         case 6:
  1090.             searchByPostSurname(head);
  1091.             break;
  1092.         case 7:
  1093.             searchWorkerById(head);
  1094.             break;
  1095.         case 0:
  1096.             return;
  1097.         default:
  1098.             printf("Вы ввели неверное значение, попробуйте снова...\n");
  1099.             system("pause");
  1100.             break;
  1101.         }
  1102.     }
  1103. }
  1104.  
  1105. //поиск отдела по его названию
  1106. void searchByDepartmentName(department *head)
  1107. {
  1108.     system("cls");
  1109.     printf("ПОИСК ОТДЕЛА ПО НАЗВАНИЮ\n");
  1110.     char departmentName[20];
  1111.     printf("Введите название: ");
  1112.     scanf("%s", &departmentName);
  1113.     department *tempPtr = head;
  1114.     system("cls");
  1115.     printTableD();
  1116.     while (tempPtr != NULL)
  1117.     {
  1118.         if (strcmp(tempPtr->departmentName, departmentName) == 0)
  1119.         {
  1120.             printDepartment(tempPtr);
  1121.         }
  1122.         tempPtr = tempPtr->next;
  1123.     }
  1124.     system("pause");
  1125.     return;
  1126. }
  1127.  
  1128. //поиск отдела по количеству работников
  1129. void searchByNumberOfWorkers(department *head)
  1130. {
  1131.     system("cls");
  1132.     printf("ПОИСК ОТДЕЛА ПО КОЛИЧЕСТВУ РАБОТНИКОВ\n");
  1133.     int numberOfWorkers;
  1134.     printf("Введите количество работников: ");
  1135.     scanf("%d", &numberOfWorkers);
  1136.     department *tempPtr = head;
  1137.     system("cls");
  1138.     printTableD();
  1139.     while (tempPtr != NULL)
  1140.     {
  1141.         if (tempPtr->numberOfWorkers == numberOfWorkers)
  1142.         {
  1143.             printDepartment(tempPtr);
  1144.         }
  1145.         tempPtr = tempPtr->next;
  1146.     }
  1147.     system("pause");
  1148.     return;
  1149. }
  1150.  
  1151. //поиск отдела по id
  1152. void searchDeptById(department *head)
  1153. {
  1154.     system("cls");
  1155.     printf("ПОИСК ОТДЕЛА ПО id\n");
  1156.     int id1, id2;
  1157.     printf("Введите с какого id искать: ");
  1158.     scanf("%d", &id1);
  1159.     printf("Введите до какого id искать(такой же id, если нужно найти конеретный отдел): ");
  1160.     scanf("%d", &id2);
  1161.     department *tempPtr = head;
  1162.     system("cls");
  1163.     printTableD();
  1164.     while (tempPtr != NULL)
  1165.     {
  1166.         if (tempPtr->id >= id1 && tempPtr->id <= id2)
  1167.         {
  1168.             printDepartment(tempPtr);
  1169.         }
  1170.         tempPtr = tempPtr->next;
  1171.     }
  1172.     system("pause");
  1173.     return;
  1174. }
  1175.  
  1176. //Поиск по имени и фамилии
  1177. void searchByNameSurname(department *head)
  1178. {
  1179.     system("cls");
  1180.     printf("ПОИСК РАБОТНИКА ПО ФАМИЛИИ И ИМЕНИ\n");
  1181.     char name[20], surname[20];
  1182.     printf("Введите фамилию: ");
  1183.     scanf("%s", &surname);
  1184.     printf("Введите имя: ");
  1185.     scanf("%s", &name);
  1186.     department *tempDept = head;
  1187.     worker *tempW;
  1188.     system("cls");
  1189.     printTableW();
  1190.     while (tempDept != NULL)
  1191.     {
  1192.         tempW = tempDept->workers;
  1193.         while (tempW != NULL)
  1194.         {
  1195.             if (strcmp(tempW->workerName, name) == 0 && strcmp(tempW->workerSurname, surname) == 0)
  1196.             {
  1197.                 printWorker(tempDept, tempW);
  1198.             }
  1199.             tempW = tempW->next;
  1200.         }
  1201.         tempDept = tempDept->next;
  1202.     }
  1203.     system("pause");
  1204.     return;
  1205. }
  1206.  
  1207. //поиск по фамилии и отделу
  1208. void searchBySurnameDept(department *head)
  1209. {
  1210.     system("cls");
  1211.     printf("ПОИСК РАБОТНИКА ПО ФАМИЛИИ И ОТДЕЛУ\n");
  1212.     char surname[20], Department[20];
  1213.     printf("Введите фамилию: ");
  1214.     scanf("%s", &surname);
  1215.     printf("Введите отдел: ");
  1216.     scanf("%s", &Department);
  1217.     department *tempDept = head;
  1218.     worker *tempW;
  1219.     system("cls");
  1220.     printTableW();
  1221.     while (tempDept != NULL)
  1222.     {
  1223.         if (strcmp(tempDept->departmentName, Department) == 0)
  1224.         {
  1225.             tempW = tempDept->workers;
  1226.             while (tempW != NULL)
  1227.             {
  1228.                 if (strcmp(tempW->workerSurname, surname) == 0)
  1229.                 {
  1230.                     printWorker(tempDept, tempW);
  1231.                 }
  1232.                 tempW = tempW->next;
  1233.             }
  1234.         }
  1235.         tempDept = tempDept->next;
  1236.     }
  1237.     system("pause");
  1238.     return;
  1239. }
  1240.  
  1241. //поиск по должности и фамилии
  1242. void searchByPostSurname(department *head)
  1243. {
  1244.     system("cls");
  1245.     printf("ПОИСК РАБОТНИКА ПО ДОЛЖНОСТИ И ФАМИЛИИ\n");
  1246.     char post[20], surname[20];
  1247.     printf("Введите фамилию: ");
  1248.     scanf("%s", &surname);
  1249.     printf("Введите должность: ");
  1250.     scanf("%s", &post);
  1251.     department *tempDept = head;
  1252.     worker *tempW;
  1253.     system("cls");
  1254.     printTableW();
  1255.     while (tempDept != NULL)
  1256.     {
  1257.         tempW = tempDept->workers;
  1258.         while (tempW != NULL)
  1259.         {
  1260.             if (strcmp(tempW->post, post) == 0 && strcmp(tempW->workerSurname, surname) == 0)
  1261.             {
  1262.                 printWorker(tempDept, tempW);
  1263.             }
  1264.             tempW = tempW->next;
  1265.         }
  1266.         tempDept = tempDept->next;
  1267.     }
  1268.     system("pause");
  1269.     return;
  1270. }
  1271.  
  1272. //поиск по id
  1273. void searchWorkerById(department *head)
  1274. {
  1275.     system("cls");
  1276.     printf("ПОИСК РАБОТНИКА id\n");
  1277.     int id1, id2;
  1278.     printf("Введите с какого id искать: ");
  1279.     scanf("%d", &id1);
  1280.     printf("Введите до какого id искать(такой же id, если нужно найти конкретного работника): ");
  1281.     scanf("%d", &id2);
  1282.     department *tempDept = head;
  1283.     worker *tempW;
  1284.     system("cls");
  1285.     printTableW();
  1286.     while (tempDept != NULL)
  1287.     {
  1288.         tempW = tempDept->workers;
  1289.         while (tempW != NULL)
  1290.         {
  1291.             if (tempW->id >= id1 && tempW->id <= id2)
  1292.             {
  1293.                 printWorker(tempDept, tempW);
  1294.             }
  1295.             tempW = tempW->next;
  1296.         }
  1297.         tempDept = tempDept->next;
  1298.     }
  1299.     system("pause");
  1300.     return;
  1301. }
  1302.  
  1303. //вывод на экран меню работы с пользователями для админа и осуществление выбора
  1304. void workWithUsers()
  1305. {
  1306.     users *head = NULL;
  1307.     readUsers(&head);
  1308.     while (true)
  1309.     {
  1310.         switch (menu(9))
  1311.         {
  1312.         case 1:
  1313.             activate(&head);
  1314.             break;
  1315.         case 2:
  1316.             ban(&head);
  1317.             break;
  1318.         case 0:
  1319.             writeUsers(head);
  1320.             return;
  1321.         default:
  1322.             printf("Вы ввели неверное значение, попробуйте снова...\n");
  1323.             system("pause");
  1324.             break;
  1325.         }
  1326.     }
  1327. }
  1328.  
  1329. //чтение из файла списка пользователей
  1330. void readUsers(users **head)
  1331. {
  1332.     FILE *f;
  1333.     if (!(f = fopen("usersData.txt", "r")))
  1334.     {
  1335.         system("cls");
  1336.         printf("Отсутствует файл с данными.");
  1337.         system("pause");
  1338.         return;
  1339.     }
  1340.     users *temp;
  1341.     while (!feof(f))
  1342.     {
  1343.         temp = (users*)malloc(sizeof(users));
  1344.         fscanf(f, "%s ", &temp->login);
  1345.         fscanf(f, "%s\n", &temp->password);
  1346.         if (*head == NULL)
  1347.         {
  1348.             temp->next = NULL;
  1349.             temp->prev = NULL;
  1350.             *head = temp;
  1351.         }
  1352.         else
  1353.         {
  1354.             temp->next = *head;
  1355.             temp->next->prev = temp;
  1356.             temp->prev = NULL;
  1357.             *head = temp;
  1358.         }
  1359.     }
  1360.     fclose(f);
  1361.     return;
  1362. }
  1363.  
  1364. //запись списка пользователей в файл
  1365. void writeUsers(users *head)
  1366. {
  1367.     FILE *f;
  1368.     f = fopen("usersData.txt", "w+");
  1369.     users *temp = head;
  1370.     while (temp != NULL)
  1371.     {
  1372.         fprintf(f, "%s ", temp->login);
  1373.         fprintf(f, "%s\n", temp->password);
  1374.         temp = temp->next;
  1375.     }
  1376.     fclose(f);
  1377. }
  1378.  
  1379. //вывод на экран меню пользователя и осуществление выбора
  1380. void userMenu(department *begin)
  1381. {
  1382.     if (begin == NULL) readFile(&begin);
  1383.     while (true)
  1384.     {
  1385.         switch (menu(3))
  1386.         {
  1387.         case 1:
  1388.             printMenu(begin);
  1389.             break;
  1390.         case 2:
  1391.             searchMenu(begin);
  1392.             break;
  1393.         case 0:
  1394.             return;
  1395.         default:
  1396.             printf("Вы ввели неверное значение, попробуйте снова...\n");
  1397.             system("pause");
  1398.             break;
  1399.         }
  1400.     }
  1401. }
  1402.  
  1403. //запись всей информации в файл
  1404. void writeFile(department *head)
  1405. {
  1406.     FILE *f;
  1407.     f = fopen("information.txt", "w+");
  1408.     department *departments = head;
  1409.     worker *workers;
  1410.     while (departments != NULL)
  1411.     {
  1412.         fprintf(f, "%s ", departments->departmentName);
  1413.         fprintf(f, "%d ", departments->id);
  1414.         fprintf(f, "%d\n", departments->numberOfWorkers);
  1415.         workers = departments->workers;
  1416.         while (workers != NULL)
  1417.         {
  1418.             fprintf(f, "%s ", workers->workerSurname);
  1419.             fprintf(f, "%s ", workers->workerName);
  1420.             fprintf(f, "%s ", workers->workerSecondName);
  1421.             fprintf(f, "%s ", workers->post);
  1422.             fprintf(f, "%d ", workers->salary->numberOfHours);
  1423.             fprintf(f, "%d ", workers->salary->tariffRate);
  1424.             fprintf(f, "%d ", workers->experience);
  1425.             fprintf(f, "%d ", workers->personnelNumber);
  1426.             fprintf(f, "%d\n", workers->id);
  1427.             workers = workers->next;
  1428.         }
  1429.         departments = departments->next;
  1430.     }
  1431.     fclose(f);
  1432. }
  1433.  
  1434. //чтение всей информации из файла
  1435. void readFile(department **head)
  1436. {
  1437.     FILE *f;
  1438.     if (!(f = fopen("information.txt", "r")))
  1439.     {
  1440.         system("cls");
  1441.         printf("Отсутствует файл с данными.");
  1442.         system("pause");
  1443.         return;
  1444.     }
  1445.     department *departments, *tempDept;
  1446.     worker *workers, *tempW;
  1447.     while (!feof(f))
  1448.     {
  1449.         departments = (department*)malloc(sizeof(department));
  1450.         fscanf(f, "%s ", &departments->departmentName);
  1451.         fscanf(f, "%d ", &departments->id);
  1452.         fscanf(f, "%d\n", &departments->numberOfWorkers);
  1453.         if (*head == NULL)
  1454.         {
  1455.             departments->next = NULL;
  1456.             departments->prev = NULL;
  1457.             departments->workers = NULL;
  1458.             *head = departments;
  1459.         }
  1460.         else
  1461.         {
  1462.             tempDept = *head;
  1463.             while (tempDept->next != NULL)
  1464.             {
  1465.                 tempDept = tempDept->next;
  1466.             }
  1467.             departments->next = NULL;
  1468.             departments->workers = NULL;
  1469.             tempDept->next = departments;
  1470.             tempDept->next->prev = tempDept;
  1471.         }
  1472.         for (int i = 0; i < departments->numberOfWorkers; i++)
  1473.         {
  1474.             workers = (worker*)malloc(sizeof(worker));
  1475.             workers->salary = (salary*)malloc(sizeof(salary));
  1476.             fscanf(f, "%s ", &workers->workerSurname);
  1477.             fscanf(f, "%s ", &workers->workerName);
  1478.             fscanf(f, "%s ", &workers->workerSecondName);
  1479.             fscanf(f, "%s ", &workers->post);
  1480.             fscanf(f, "%d ", &workers->salary->numberOfHours);
  1481.             fscanf(f, "%d ", &workers->salary->tariffRate);
  1482.             fscanf(f, "%d ", &workers->experience);
  1483.             fscanf(f, "%d ", &workers->personnelNumber);
  1484.             fscanf(f, "%d\n", &workers->id);
  1485.             if (departments->workers == NULL)
  1486.             {
  1487.                 departments->workers = workers;
  1488.                 departments->workers->next = NULL;
  1489.                 departments->workers->prev = NULL;
  1490.             }
  1491.             else
  1492.             {
  1493.                 tempW = departments->workers;
  1494.                 while (tempW->next != NULL)
  1495.                 {
  1496.                     tempW = tempW->next;
  1497.                 }
  1498.                 workers->next = NULL;
  1499.                 tempW->next = workers;
  1500.                 tempW->next->prev = tempW;
  1501.             }
  1502.         }
  1503.     }
  1504.     fclose(f);
  1505.     printf("Данные прочитаны.\n");
  1506.     system("cls");
  1507. }
  1508.  
  1509. //вывод списка отделов на экран и осуществление выбора
  1510. int choiceDepartment(department *head)
  1511. {
  1512.     system("cls");
  1513.     int counter = 1, choice;
  1514.     department *tempPtr = head;
  1515.     if (head == NULL)
  1516.     {
  1517.         printf("Отделов нет. Добавьте хотя бы один отдел.\n");
  1518.         system("pause");
  1519.         return 0;
  1520.     }
  1521.     printf("Выберите отдел(0 для выхода):\n");
  1522.     while (tempPtr != NULL)
  1523.     {
  1524.         printf("%d. %s.\n", counter, tempPtr->departmentName);
  1525.         tempPtr = tempPtr->next;
  1526.         counter++;
  1527.     }
  1528.     printf("Ваш выбор: ");
  1529.     while (!scanf("%d", &choice))
  1530.     {
  1531.         fflush(stdin);
  1532.         printf("Ошибка ввода. Попробуйте снова: ");
  1533.     }
  1534.     if (choice > counter)
  1535.     {
  1536.         printf("Вы выбрали номер отдела, которого нет в списке.\n");
  1537.         system("cls");
  1538.         return 0;
  1539.     }
  1540.     else return choice;
  1541. }
  1542.  
  1543. //вывод списка работников на экран и выброр работника
  1544. int choiceWorker(worker *head)
  1545. {
  1546.     system("cls");
  1547.     int counter = 1, choice;
  1548.     worker *tempPtr = head;
  1549.     printf("Выберите работника(0 для выхода):\n");
  1550.     while (tempPtr != NULL)
  1551.     {
  1552.         printf("%d. %s %s.\n", counter, tempPtr->workerSurname, tempPtr->workerName);
  1553.         tempPtr = tempPtr->next;
  1554.         counter++;
  1555.     }
  1556.     printf("Ваш выбор: ");
  1557.     while (!scanf("%d", &choice))
  1558.     {
  1559.         fflush(stdin);
  1560.         printf("Ошибка ввода. Попробуйте снова: ");
  1561.     }
  1562.     if (choice > counter)
  1563.     {
  1564.         printf("Вы выбрали номер работника, которого нет в списке.\n");
  1565.         system("cls");
  1566.         return 0;
  1567.     }
  1568.     else return choice;
  1569. }
  1570.  
  1571. //Активация пользователь(добавляется запись в список пользователей)
  1572. void activate(users **head)
  1573. {
  1574.     system("cls");
  1575.     users *newPtr, *tempPtr = *head;
  1576.     newPtr = (users*)malloc(sizeof(users));
  1577.     printf("АКТИВАЦИЯ:\n");
  1578.     printf("Введите логин: ");
  1579.     scanf("%s", &newPtr->login);
  1580.     printf("Введите пароль: ");
  1581.     scanf("%s", &newPtr->password);
  1582.     while (tempPtr != NULL)
  1583.     {
  1584.         if (strcmp(tempPtr->login, newPtr->login) == 0 && strcmp(tempPtr->password, newPtr->password) == 0)
  1585.         {
  1586.             printf("Данный пользователь уже активирован.\n");
  1587.             system("pause");
  1588.             return;
  1589.         }
  1590.         tempPtr = tempPtr->next;
  1591.     }
  1592.     if (*head == NULL)
  1593.     {
  1594.         newPtr->next = NULL;
  1595.         newPtr->prev = NULL;
  1596.         *head = newPtr;
  1597.     }
  1598.     else
  1599.     {
  1600.         newPtr->next = *head;
  1601.         newPtr->next->prev = newPtr;
  1602.         newPtr->prev = NULL;
  1603.         *head = newPtr;
  1604.     }
  1605.     printf("Пользователь активирован.\n");
  1606.     system("pause");
  1607. }
  1608.  
  1609. //блокировка пользователей(удаляется запись из списка пользователей)
  1610. void ban(users **head)
  1611. {
  1612.     char login[20];
  1613.     printf("БЛОКИРОВКА:\n");
  1614.     printf("Введите логин: ");
  1615.     scanf("%s", &login);
  1616.     users *tempPtr = *head;
  1617.     while (tempPtr != NULL)
  1618.     {
  1619.         if (strcmp(tempPtr->login, login) == 0) break;
  1620.         tempPtr = tempPtr->next;
  1621.     }
  1622.     if (tempPtr == NULL)
  1623.     {
  1624.         printf("Данный пользователь не активен в системе.\n");
  1625.         system("pause");
  1626.         return;
  1627.     }
  1628.     if (tempPtr == *head)
  1629.     {
  1630.         if (tempPtr->next == NULL && tempPtr->prev == NULL)
  1631.         {
  1632.             free(tempPtr);
  1633.             *head = NULL;
  1634.             return;
  1635.         }
  1636.         else
  1637.         {
  1638.             *head = tempPtr->next;
  1639.             (*head)->prev = NULL;
  1640.             (*head)->next = tempPtr->next->next;
  1641.             free(tempPtr);
  1642.             return;
  1643.         }
  1644.     }
  1645.     if (tempPtr->next == NULL)
  1646.     {
  1647.         tempPtr->prev->next = NULL;
  1648.         free(tempPtr);
  1649.         return;
  1650.     }
  1651.     tempPtr->next->prev = tempPtr->prev;
  1652.     tempPtr->prev->next = tempPtr->next;
  1653.     free(tempPtr);
  1654.     return;
  1655. }
Advertisement
Add Comment
Please, Sign In to add comment