Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <windows.h>
- #include <locale>
- #include <iomanip>
- #include <ctime>
- using namespace std;
- struct sllist
- {
- int worker;
- int num;
- int timefortask;
- string info;
- clock_t time;
- sllist* next = NULL;
- };
- struct queue {
- sllist* head = NULL;
- sllist* last = NULL;
- };
- struct programm
- {
- clock_t start = clock();
- int tasktime;
- int size = 0;
- queue* q = new queue;
- void menu() {
- cout << "Введите команду:\n";
- cout << "1 - Добавление заявки\n";
- cout << "2 - Обработка заявки\n";
- cout << "3 - Получение информации о первой в очереди заявке\n";
- cout << "4 - Проверка пустоты очереди\n";
- cout << "5 - Проверка полноты очереди\n";
- cout << "6 - Вывод очереди\n";
- cout << "7 - Завершение работы\n\n";
- int command;
- while (true) {
- cout << endl;
- cin >> command;
- switch (command)
- {
- case 1:
- if (size == 7) {
- cout << "Очередь переполнена! Добавление невозможно\n";
- }
- else {
- Push();
- size++;
- }
- break;
- case 2:
- if (size == 0) {
- cout << "Очередь пуста! Удаление невозможно\n";
- }
- else if ((float(clock() - start)) / CLOCKS_PER_SEC < tasktime) {
- cout << "Прошлая принятая заявка еще выполняется. Подождите " << tasktime - (float(clock() - start)) / CLOCKS_PER_SEC << " секунд\n";
- }
- else {
- Pop();
- size--;
- }
- break;
- case 3:
- Print();
- break;
- case 4:
- Empty();
- break;
- case 5:
- Full();
- break;
- case 6:
- PrintAll();
- break;
- case 7:
- return;
- default:
- cout << "Такой команды нет!\n";
- break;
- }
- }
- }
- void Push() {
- sllist* newElem = new sllist;
- cout << "Введите категорию сотрудника (М, К, Р)\n";
- char ctg;
- cin >> ctg;
- switch (ctg) {
- case 'M':
- newElem->worker = 1;
- break;
- case 'K':
- newElem->worker = 2;
- break;
- case 'P':
- newElem->worker = 3;
- break;
- }
- cout << "Введите время выполнения задачи в секундах\n";
- cin >> newElem->timefortask;
- cout << "Введите информацию о задаче\n";
- cin >> newElem->info;
- cout << "Введите личный номер сотрудника\n";
- cin >> newElem->num;
- newElem->time = clock();
- if (q->head == NULL) {
- q->head = newElem;
- q->last = newElem;
- newElem->next = NULL;
- }
- else {
- sllist* temp = q->last;
- while (temp != NULL) {
- if (temp->worker > newElem->worker&& temp->next != NULL && temp->next->worker <= newElem->worker) {
- newElem->next = temp->next;
- temp->next = newElem;
- break;
- }
- else if (temp->worker > newElem->worker&& temp->next == NULL) {
- q->head = newElem;
- temp->next = newElem;
- newElem->next = NULL;
- break;
- }
- else if (temp->worker <= newElem->worker) {
- q->last = newElem;
- newElem->next = temp;
- break;
- }
- else if (temp->worker < newElem->worker && temp->next == NULL) {
- temp->next = newElem;
- q->head = newElem;
- break;
- }
- temp = temp->next;
- }
- }
- cout << "Заявка добавлена\n";
- }
- void Pop() {
- if (size == 1) {
- sllist* newElem = q->last;
- tasktime = newElem->timefortask;
- q->last = NULL;
- q->head = NULL;
- cout << "Заявка выполнена\n";
- cout << "Время, затраченное на обслуживание заявки: " << (float(clock() - newElem->time)) / CLOCKS_PER_SEC << " секунд\n";
- cout << "Информация о задаче: " << newElem->info << endl;
- cout << "Время выполнения задачи: " << newElem->timefortask << " секунд\n";
- delete newElem;
- }
- else {
- sllist* newElem = q->head;
- tasktime = newElem->timefortask;
- sllist* curr = q->last;
- for (int i = 0; i < size; i++) {
- if (curr->next == newElem) {
- q->head = curr;
- curr->next = NULL;
- cout << "Заявка выполнена\n";
- cout << "Время, затраченное на обслуживание заявки: " << (float(clock() - newElem->time)) / CLOCKS_PER_SEC << " секунд\n";
- cout << "Информация о задаче: " << newElem->info << endl;
- cout << "Время выполнения задачи: " << newElem->timefortask << " секунд\n";
- delete newElem;
- break;
- }
- curr = curr->next;
- }
- }
- start = clock();
- }
- void Print() {
- if (q->head != NULL) {
- cout << "Приоритетность: " << q->head->worker << endl;
- cout << "Номер сотрудника: " << q->head->num << endl;
- cout << "Информация о задаче: " << q->head->info << endl;
- cout << "Время выполнения задачи: " << q->head->timefortask << " секунд\n";
- }
- else
- cout << "Очередь пуста! Вывод невозможен\n";
- }
- void PrintAll() {
- if (size > 0) {
- sllist* temp = q->last;
- cout << setw(15) << "Приоритетность " << setw(18) << " Номер сотрудника " << " Информация о задаче\n";
- while (temp != NULL) {
- cout << setw(14) << temp->worker;
- cout << setw(18) << temp->num;
- cout << " " << temp->info << endl;
- temp = temp->next;
- }
- }
- else
- cout << "Очередь пуста! Вывод невозможен\n";
- }
- void Empty() {
- if (q->head == NULL)
- cout << "Очередь пуста\n";
- else
- cout << "Очередь не пуста\n";
- }
- void Full() {
- if (size == 7)
- cout << "Очередь полна\n";
- else
- cout << "Очередь не полна\n";
- }
- };
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "rus");
- programm* A = new programm;
- A->menu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement