Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <windows.h>
- using namespace std;
- struct Unit {
- int num;
- string fullname;
- string address;
- Unit* next;
- };
- struct Queue {
- Unit *tail, *head;
- };
- short menu();
- void init(Queue*);
- int isempty(Queue*);
- void insert_in_queue(Queue*, int&, string, string);
- Unit* addelem(Unit*, int&, string, string);
- void printQueue(Queue*);
- void removeElement(Queue*);
- void updateNumbers(Queue*, int&);
- void deleteQueue(Unit*);
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Queue* queue = new Queue;
- string name, address;
- int count = 1;
- init(queue);
- short choise;
- do {
- choise = menu();
- switch (choise) {
- case 1:
- system("cls");
- if (isempty(queue)) {
- queue = new Queue;
- init(queue);
- }
- cout << "Введите данные о пользователе для добавление в очередь " << endl;
- cout << "Введите ФИО: ";
- getline(cin.ignore(), name);
- cout << "Введите адрес проживания: ";
- getline(cin, address);
- insert_in_queue(queue, count, name, address);
- system("pause");
- system("cls");
- break;
- case 2:
- system("cls");
- printQueue(queue);
- system("pause");
- system("cls");
- break;
- case 3:
- system("cls");
- cout << "Введите кол-во квартир, которые вошли в эксплуатацию: ";
- int n;
- cin >> n;
- if (n > count) {
- n = count;
- }
- if (isempty(queue)) {
- system("cls");
- cout << "Очередь пуста!\n";
- system("pause");
- system("cls");
- break;
- }
- cout << "Люди получившие квартиру \n\n";
- for (int i = 0; i < n; i++) {
- removeElement(queue);
- }
- updateNumbers(queue, count);
- system("pause");
- system("cls");
- break;
- case 0:
- cout << "До свидания!" << endl;
- break;
- default:
- cout << "Неверный выбор!!" << endl;
- cout << "\n\nPress Enter..." << endl;
- system("pause");
- system("cls");
- break;
- }
- } while (choise);
- cout << endl;
- deleteQueue(queue->head);
- delete queue;
- return 0;
- }
- short menu() {
- short v;
- cout << " МЕНЮ" << endl;
- cout << " Введите [1] для добавления человека в очередь\n";
- cout << " Введите [2] для просмотра текущей очереди\n";
- cout << " Введите [3] для удаления из очереди людей\n";
- cout << " Введите [0] для выхода\n";
- cout << " Пункт: ";
- cin >> v;
- return v;
- }
- // Инициализация новой очереди
- void init(Queue* q) {
- q->tail = 0;
- q->head = 0;
- }
- // Проверка пустоты очереди, если пуста вернуть 1, иначе 0
- int isempty(Queue *q) {
- if (q->head == 0 || q->tail == 0)
- return 1;
- return 0;
- }
- // Вставка в конец очереди
- void insert_in_queue(Queue* q, int &value, string name, string addr) {
- /* Проверка новизны очереди */
- if (q->tail == 0 && q->head == 0) {
- q->tail = new Unit; // Выделение памяти для первого элемента очереди
- /* Присваивание значений первому элементу очереди */
- q->tail->num = value++;
- q->tail->fullname = name;
- q->tail->address = addr;
- q->tail->next = NULL;
- q->head = q->tail; // Первый вошедший в очередь и будет последним
- }
- else {
- /* Если кто-то есть в очереди добавляем в конец очереди новый элемент */
- q->tail = addelem(q->tail, value, name, addr);
- }
- }
- // Инициализация нового элемента очереди
- Unit* addelem(Unit *un, int &value, string name, string addr) {
- Unit *temp, *ptr_next;
- temp = new Unit; // Выделение памяти для нового элемента очереди
- ptr_next = un->next; // Сохраняем указатель на следующий элемент (по умолчанию NULL)
- un->next = temp; // Предыдущий элемент указывает на новый элемент очереди
- /* Присваиваем необходимые значения новому элементу */
- temp->num = value++;
- temp->fullname = name;
- temp->address = addr;
- temp->next = ptr_next; // Теперь новый элемент очереди указывает на конец очереди
- return temp;
- }
- // Просматриваем очередь с первого элемента очереди
- void printQueue(Queue *q) {
- if (isempty(q)) {
- cout << "Очередь пуста!\n";
- return;
- }
- Unit* un = q->head;
- while (un != NULL) {
- cout << "Номер в очереди: " << un->num << endl;
- cout << "ФИО пользователя: " << un->fullname << endl;
- cout << "Адрес проживания: " << un->address << endl << endl;
- un = un->next;
- }
- }
- // Удаление первого элемента в очереди с вывод данных
- void removeElement(Queue* q) {
- if (isempty(q)) {
- cout << "Очередь пуста!\n";
- return;
- }
- Unit* temp;
- temp = q->head;
- cout << "ФИО пользователя: " << temp->fullname << endl;
- cout << "Адрес проживания: " << temp->address << endl << endl;
- q->head = q->head->next;
- delete temp;
- }
- // Обновление номеров очереди
- void updateNumbers(Queue* q, int& count) {
- count = 1;
- if (isempty(q)) {
- return;
- }
- Unit* un = q->head;
- while (un != NULL) {
- un->num = count++;
- un = un->next;
- }
- }
- // Рекурсивно удаляем все элементы очереди
- void deleteQueue(Unit* cur) {
- if (cur != NULL) {
- deleteQueue(cur->next);
- delete cur;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement