Advertisement
spacerose

задание2(практ 1 аод)

Oct 11th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4. #include <locale>
  5. #include <iomanip>
  6. #include <ctime>
  7. using namespace std;
  8. struct sllist
  9. {
  10.     int worker;
  11.     int num;
  12.     int timefortask;
  13.     string info;
  14.     clock_t time;
  15.     sllist* next = NULL;
  16. };
  17.  
  18. struct queue {
  19.     sllist* head = NULL;
  20.     sllist* last = NULL;
  21. };
  22.  
  23. struct programm
  24. {
  25.     clock_t start = clock();
  26.     int tasktime;
  27.     int size = 0;
  28.     queue* q = new queue;
  29.  
  30.     void menu() {
  31.         cout << "Введите команду:\n";
  32.         cout << "1 - Добавление заявки\n";
  33.         cout << "2 - Обработка заявки\n";
  34.         cout << "3 - Получение информации о первой в очереди заявке\n";
  35.         cout << "4 - Проверка пустоты очереди\n";
  36.         cout << "5 - Проверка полноты очереди\n";
  37.         cout << "6 - Вывод очереди\n";
  38.         cout << "7 - Завершение работы\n\n";
  39.  
  40.         int command;
  41.         while (true) {
  42.             cout << endl;
  43.             cin >> command;
  44.             switch (command)
  45.             {
  46.             case 1:
  47.                 if (size == 7) {
  48.                     cout << "Очередь переполнена! Добавление невозможно\n";
  49.                 }
  50.                 else {
  51.                     Push();
  52.                     size++;
  53.                 }
  54.                 break;
  55.             case 2:
  56.                 if (size == 0) {
  57.                     cout << "Очередь пуста! Удаление невозможно\n";
  58.                 }
  59.                 else if ((float(clock() - start)) / CLOCKS_PER_SEC < tasktime) {
  60.                     cout << "Прошлая принятая заявка еще выполняется. Подождите " << tasktime - (float(clock() - start)) / CLOCKS_PER_SEC << " секунд\n";
  61.                 }
  62.                 else {
  63.                     Pop();
  64.                     size--;
  65.                 }
  66.                 break;
  67.             case 3:
  68.                 Print();
  69.                 break;
  70.             case 4:
  71.                 Empty();
  72.                 break;
  73.             case 5:
  74.                 Full();
  75.                 break;
  76.             case 6:
  77.                 PrintAll();
  78.                 break;
  79.             case 7:
  80.                 return;
  81.             default:
  82.                 cout << "Такой команды нет!\n";
  83.                 break;
  84.             }
  85.         }
  86.     }
  87.  
  88.     void Push() {
  89.         sllist* newElem = new sllist;
  90.         cout << "Введите категорию сотрудника (М, К, Р)\n";
  91.         char ctg;
  92.         cin >> ctg;
  93.         switch (ctg) {
  94.         case 'M':
  95.             newElem->worker = 1;
  96.             break;
  97.         case 'K':
  98.             newElem->worker = 2;
  99.             break;
  100.         case 'P':
  101.             newElem->worker = 3;
  102.             break;
  103.         }
  104.  
  105.         cout << "Введите время выполнения задачи в секундах\n";
  106.         cin >> newElem->timefortask;
  107.  
  108.         cout << "Введите информацию о задаче\n";
  109.         cin >> newElem->info;
  110.  
  111.         cout << "Введите личный номер сотрудника\n";
  112.         cin >> newElem->num;
  113.  
  114.         newElem->time = clock();
  115.  
  116.         if (q->head == NULL) {
  117.             q->head = newElem;
  118.             q->last = newElem;
  119.             newElem->next = NULL;
  120.         }
  121.         else {
  122.             sllist* temp = q->last;
  123.             while (temp != NULL) {
  124.                 if (temp->worker > newElem->worker&& temp->next != NULL && temp->next->worker <= newElem->worker) {
  125.                     newElem->next = temp->next;
  126.                     temp->next = newElem;
  127.                     break;
  128.                 }
  129.                 else if (temp->worker > newElem->worker&& temp->next == NULL) {
  130.                     q->head = newElem;
  131.                     temp->next = newElem;
  132.                     newElem->next = NULL;
  133.                     break;
  134.                 }
  135.                 else if (temp->worker <= newElem->worker) {
  136.                     q->last = newElem;
  137.                     newElem->next = temp;
  138.                     break;
  139.                 }
  140.                 else if (temp->worker < newElem->worker && temp->next == NULL) {
  141.                     temp->next = newElem;
  142.                     q->head = newElem;
  143.                     break;
  144.                 }
  145.                 temp = temp->next;
  146.             }
  147.         }
  148.  
  149.         cout << "Заявка добавлена\n";
  150.     }
  151.  
  152.     void Pop() {
  153.  
  154.         if (size == 1) {
  155.             sllist* newElem = q->last;
  156.             tasktime = newElem->timefortask;
  157.             q->last = NULL;
  158.             q->head = NULL;
  159.             cout << "Заявка выполнена\n";
  160.             cout << "Время, затраченное на обслуживание заявки: " << (float(clock() - newElem->time)) / CLOCKS_PER_SEC << " секунд\n";
  161.             cout << "Информация о задаче: " << newElem->info << endl;
  162.             cout << "Время выполнения задачи: " << newElem->timefortask << " секунд\n";
  163.             delete newElem;
  164.         }
  165.         else {
  166.             sllist* newElem = q->head;
  167.             tasktime = newElem->timefortask;
  168.             sllist* curr = q->last;
  169.             for (int i = 0; i < size; i++) {
  170.                 if (curr->next == newElem) {
  171.                     q->head = curr;
  172.                     curr->next = NULL;
  173.                     cout << "Заявка выполнена\n";
  174.                     cout << "Время, затраченное на обслуживание заявки: " << (float(clock() - newElem->time)) / CLOCKS_PER_SEC << " секунд\n";
  175.                     cout << "Информация о задаче: " << newElem->info << endl;
  176.                     cout << "Время выполнения задачи: " << newElem->timefortask << " секунд\n";
  177.  
  178.                     delete newElem;
  179.                     break;
  180.                 }
  181.                 curr = curr->next;
  182.             }
  183.         }
  184.         start = clock();
  185.     }
  186.  
  187.     void Print() {
  188.         if (q->head != NULL) {
  189.             cout << "Приоритетность: " << q->head->worker << endl;
  190.             cout << "Номер сотрудника: " << q->head->num << endl;
  191.             cout << "Информация о задаче: " << q->head->info << endl;
  192.             cout << "Время выполнения задачи: " << q->head->timefortask << " секунд\n";
  193.         }
  194.         else
  195.             cout << "Очередь пуста! Вывод невозможен\n";
  196.     }
  197.  
  198.     void PrintAll() {
  199.         if (size > 0) {
  200.             sllist* temp = q->last;
  201.             cout << setw(15) << "Приоритетность " << setw(18) << " Номер сотрудника " << " Информация о задаче\n";
  202.  
  203.             while (temp != NULL) {
  204.                 cout << setw(14) << temp->worker;
  205.                 cout << setw(18) << temp->num;
  206.                 cout << "  " << temp->info << endl;
  207.                 temp = temp->next;
  208.             }
  209.         }
  210.         else
  211.             cout << "Очередь пуста! Вывод невозможен\n";
  212.     }
  213.  
  214.     void Empty() {
  215.         if (q->head == NULL)
  216.             cout << "Очередь пуста\n";
  217.         else
  218.             cout << "Очередь не пуста\n";
  219.     }
  220.  
  221.     void Full() {
  222.         if (size == 7)
  223.             cout << "Очередь полна\n";
  224.         else
  225.             cout << "Очередь не полна\n";
  226.     }
  227. };
  228.  
  229. int main()
  230. {
  231.     SetConsoleCP(1251);
  232.     SetConsoleOutputCP(1251);
  233.     setlocale(LC_ALL, "rus");
  234.     programm* A = new programm;
  235.     A->menu();
  236.     return 0;
  237. }
  238.  
  239.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement