Advertisement
kxcoze

AlyonaQueue

Nov 30th, 2020 (edited)
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4.  
  5. using namespace std;
  6.  
  7. struct Unit {
  8.     int num;
  9.     string fullname;
  10.     string address;
  11.  
  12.     Unit* next;
  13. };
  14.  
  15. struct Queue {
  16.     Unit *tail, *head;
  17. };
  18.  
  19. short menu();
  20. void init(Queue*);
  21. int isempty(Queue*);
  22. void insert_in_queue(Queue*, int&, string, string);
  23. Unit* addelem(Unit*, int&, string, string);
  24. void printQueue(Queue*);
  25. void removeElement(Queue*);
  26. void updateNumbers(Queue*, int&);
  27. void deleteQueue(Unit*);
  28.  
  29.  
  30. int main() {
  31.     SetConsoleCP(1251);
  32.     SetConsoleOutputCP(1251);
  33.     Queue* queue = new Queue;
  34.     string name, address;
  35.     int count = 1;
  36.  
  37.     init(queue);
  38.     short choise;
  39.     do {
  40.         choise = menu();
  41.         switch (choise) {
  42.         case 1:
  43.             system("cls");
  44.             if (isempty(queue)) {
  45.                 queue = new Queue;
  46.                 init(queue);
  47.             }
  48.             cout << "Введите данные о пользователе для добавление в очередь " << endl;
  49.             cout << "Введите ФИО: ";
  50.             getline(cin.ignore(), name);
  51.  
  52.             cout << "Введите адрес проживания: ";
  53.             getline(cin, address);
  54.  
  55.             insert_in_queue(queue, count, name, address);
  56.             system("pause");
  57.             system("cls");
  58.             break;
  59.         case 2:
  60.             system("cls");
  61.             printQueue(queue);
  62.             system("pause");
  63.             system("cls");
  64.             break;
  65.         case 3:
  66.             system("cls");
  67.             cout << "Введите кол-во квартир, которые вошли в эксплуатацию: ";
  68.             int n;
  69.             cin >> n;
  70.             if (n > count) {
  71.                 n = count;
  72.             }
  73.             if (isempty(queue)) {
  74.                 system("cls");
  75.                 cout << "Очередь пуста!\n";
  76.                 system("pause");
  77.                 system("cls");
  78.                 break;
  79.             }
  80.             cout << "Люди получившие квартиру \n\n";
  81.             for (int i = 0; i < n; i++) {
  82.                 removeElement(queue);
  83.             }
  84.             updateNumbers(queue, count);
  85.             system("pause");
  86.             system("cls");
  87.             break;
  88.         case 0:
  89.             cout << "До свидания!" << endl;
  90.             break;
  91.         default:
  92.             cout << "Неверный выбор!!" << endl;
  93.             cout << "\n\nPress Enter..." << endl;
  94.             system("pause");
  95.             system("cls");
  96.             break;
  97.         }
  98.     } while (choise);
  99.     cout << endl;
  100.     deleteQueue(queue->head);
  101.     delete queue;
  102.     return 0;
  103. }
  104.  
  105. short menu() {
  106.     short v;
  107.     cout << "           МЕНЮ" << endl;
  108.     cout << " Введите [1] для добавления человека в очередь\n";
  109.     cout << " Введите [2] для просмотра текущей очереди\n";
  110.     cout << " Введите [3] для удаления из очереди людей\n";
  111.     cout << " Введите [0] для выхода\n";
  112.     cout << " Пункт: ";
  113.     cin >> v;
  114.     return v;
  115. }
  116.  
  117. // Инициализация новой очереди
  118. void init(Queue* q) {
  119.     q->tail = 0;
  120.     q->head = 0;
  121. }
  122.  
  123. // Проверка пустоты очереди, если пуста вернуть 1, иначе 0
  124. int isempty(Queue *q) {
  125.     if (q->head == 0 || q->tail == 0)
  126.         return 1;
  127.     return 0;
  128. }
  129.  
  130. // Вставка в конец очереди
  131. void insert_in_queue(Queue* q, int &value, string name, string addr) {
  132.     /* Проверка новизны очереди */
  133.     if (q->tail == 0 && q->head == 0) {
  134.        
  135.         q->tail = new Unit; // Выделение памяти для первого элемента очереди
  136.  
  137.         /* Присваивание значений первому элементу очереди */
  138.         q->tail->num = value++;
  139.         q->tail->fullname = name;
  140.         q->tail->address = addr;
  141.         q->tail->next = NULL;
  142.        
  143.         q->head = q->tail; // Первый вошедший в очередь и будет последним
  144.     }
  145.     else {
  146.         /* Если кто-то есть в очереди добавляем в конец очереди новый элемент */
  147.         q->tail = addelem(q->tail, value, name, addr);
  148.     }
  149. }
  150.  
  151. // Инициализация нового элемента очереди
  152. Unit* addelem(Unit *un, int &value, string name, string addr) {
  153.     Unit *temp, *ptr_next;
  154.     temp = new Unit; // Выделение памяти для нового элемента очереди
  155.     ptr_next = un->next; // Сохраняем указатель на следующий элемент (по умолчанию NULL)
  156.  
  157.     un->next = temp; // Предыдущий элемент указывает на новый элемент очереди
  158.  
  159.     /* Присваиваем необходимые значения новому элементу */
  160.     temp->num = value++;
  161.     temp->fullname = name;
  162.     temp->address = addr;
  163.  
  164.     temp->next = ptr_next; // Теперь новый элемент очереди указывает на конец очереди
  165.     return temp;
  166. }
  167.  
  168. // Просматриваем очередь с первого элемента очереди
  169. void printQueue(Queue *q) {
  170.     if (isempty(q)) {
  171.         cout << "Очередь пуста!\n";
  172.         return;
  173.     }
  174.     Unit* un = q->head;
  175.     while (un != NULL) {
  176.         cout << "Номер в очереди: " << un->num << endl;
  177.         cout << "ФИО пользователя: " << un->fullname << endl;
  178.         cout << "Адрес проживания: " << un->address << endl << endl;
  179.         un = un->next;
  180.     }
  181. }
  182.  
  183. // Удаление первого элемента в очереди с вывод данных
  184. void removeElement(Queue* q) {
  185.     if (isempty(q)) {
  186.         cout << "Очередь пуста!\n";
  187.         return;
  188.     }
  189.     Unit* temp;
  190.     temp = q->head;
  191.     cout << "ФИО пользователя: " << temp->fullname << endl;
  192.     cout << "Адрес проживания: " << temp->address << endl << endl;
  193.     q->head = q->head->next;
  194.     delete temp;
  195. }
  196.  
  197. // Обновление номеров очереди
  198. void updateNumbers(Queue* q, int& count) {
  199.     count = 1;
  200.     if (isempty(q)) {
  201.         return;
  202.     }
  203.     Unit* un = q->head;
  204.     while (un != NULL) {
  205.         un->num = count++;
  206.         un = un->next;
  207.     }
  208. }
  209.  
  210. // Рекурсивно удаляем все элементы очереди
  211. void deleteQueue(Unit* cur) {
  212.     if (cur != NULL) {
  213.         deleteQueue(cur->next);
  214.         delete cur;
  215.     }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement