Kwwiker

ХППЗПЗПХЗ

Mar 23rd, 2021
768
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4. using namespace std;
  5.  
  6. struct BusInfo {
  7.     int routeNum;
  8.     string minute, hour, day, month, year;
  9.     double cost;
  10. };
  11.  
  12. struct Node
  13. {
  14.     string busNum;
  15.     BusInfo info;
  16.     Node* prev;
  17.     Node* next;
  18. };
  19.  
  20. BusInfo createBus() {
  21.     BusInfo info;
  22.     cout << "Введите номер маршрута: ";
  23.     cin >> info.routeNum;
  24.     cout << "Введите дату отправления в формате дд.мм.гггг: ";
  25.     string date;
  26.     cin >> date;
  27.     info.day = date.substr(0, 2);
  28.     info.month = date.substr(3, 2);
  29.     info.year = date.substr(6, 4);
  30.     cout << "Введите время отправления в формате чч:мм: ";
  31.     string time;
  32.     cin >> time;
  33.     info.hour = time.substr(0, 2);
  34.     info.minute = time.substr(3, 2);
  35.     cout << "Введите цену поездки: ";
  36.     cin >> info.cost;
  37.     return info;
  38. }
  39.  
  40. void printNodeWithLabel(Node* cur) {
  41.     cout << "Номер автобуса: " << cur->busNum << " Маршрут: " << cur->info.routeNum << " Дата отправления: "
  42.         << cur->info.day << "." << cur->info.month << "." << cur->info.year << " Время отправления: "
  43.         << cur->info.hour << ":" << cur->info.minute << " Цена поездки: " << cur->info.cost << "р" << endl;
  44. }
  45.  
  46. void printNode(Node* cur) {
  47.     cout << cur->busNum << "\t\t\t" << cur->info.routeNum << "\t\t"
  48.         << cur->info.day << "." << cur->info.month << "." << cur->info.year << "\t\t"
  49.         << cur->info.hour << ":" << cur->info.minute << "\t\t\t" << cur->info.cost << "р" << endl;
  50. }
  51.  
  52. void printList(Node* head) {
  53.     Node* current = head;
  54.     if (head != NULL) {
  55.         cout << "Номер автобуса:\t\t" << "Маршрут:\t" << "Дата отправления:\t"
  56.             << "Время отправления:\t" << "Цена поездки:\t" << endl;
  57.     }
  58.     while (current != NULL) {
  59.         printNode(current);
  60.         current = current->next;
  61.     }
  62.     cout << endl;
  63. }
  64.  
  65. void printReverseList(Node* tail) {
  66.     Node* current = tail;
  67.     while (current != NULL) {
  68.         printNode(current);
  69.         current = current->prev;
  70.     }
  71.     cout << endl;
  72. }
  73.  
  74. void addAtFront(Node*& head, Node*& tail, string busNum, BusInfo info) {
  75.     if (head == NULL && tail == NULL)
  76.     {
  77.         Node* temp = new Node;
  78.         temp->busNum = busNum;
  79.         temp->info = info;
  80.         temp->next = NULL;
  81.         temp->prev = NULL;
  82.         head = temp;
  83.         tail = temp;
  84.     }
  85.     else
  86.     {
  87.         Node* temp = new Node;
  88.         temp->busNum = busNum;
  89.         temp->info = info;
  90.         temp->next = head;
  91.         temp->prev = NULL;
  92.         head->prev = temp;
  93.         head = temp;
  94.     }
  95. }
  96.  
  97. void addAtBack(Node*& head, Node*& tail, string busNum, BusInfo info) {
  98.     if (head == NULL && tail == NULL)
  99.     {
  100.         Node* temp = new Node;
  101.         temp->busNum = busNum;
  102.         temp->info = info;
  103.         temp->next = NULL;
  104.         temp->prev = NULL;
  105.         head = temp;
  106.         tail = temp;
  107.     }
  108.     else
  109.     {
  110.         Node* temp = new Node;
  111.         temp->busNum = busNum;
  112.         temp->info = info;
  113.         temp->prev = tail;
  114.         temp->next = NULL;
  115.         tail->next = temp;
  116.         tail = temp;
  117.     }
  118. }
  119.  
  120. void createList(Node*& head, Node*& tail, int n) {
  121.     for (int i = 0; i < n; i++) {
  122.         string busNum;
  123.         BusInfo info;
  124.         cout << "Введите номер автобуса: ";
  125.         cin >> busNum;
  126.         addAtBack(head, tail, busNum, createBus());
  127.         cout << endl;
  128.     }
  129. }
  130.  
  131. void addAfterLastWithValue(Node*& tail, string busNum) {
  132.     Node* elem = tail;
  133.     while (elem != NULL) {
  134.         if (elem->busNum == busNum) {
  135.             Node* newNode = new Node;
  136.             cout << "Введите номер автобуса: ";
  137.             cin >> newNode->busNum;
  138.             newNode->info = createBus();
  139.             cout << endl;
  140.             newNode->next = elem->next;
  141.             newNode->prev = elem;
  142.             elem->next->prev = newNode;
  143.             elem->next = newNode;
  144.             break;
  145.         }
  146.         elem = elem->prev;
  147.     }
  148. }
  149.  
  150. void delAllWithValue(Node*& head, string busNum) {
  151.     Node* elem = head;
  152.     while (elem != NULL) {
  153.         if (elem->busNum == busNum) {
  154.             elem->prev->next = elem->next;
  155.             elem->next->prev = elem->prev;
  156.         }
  157.         elem = elem->next;
  158.     }
  159. }
  160.  
  161. int countWithValue(Node* head, string busNum, string date) {
  162.     Node* elem = head;
  163.     int count = 0;
  164.     string day = date.substr(0, 2);
  165.     string month = date.substr(3, 2);
  166.     string year = date.substr(6, 4);
  167.     while (elem != NULL) {
  168.         if (elem->busNum == busNum && elem->info.day == day && elem->info.month == month && elem->info.year == year) {
  169.             count++;
  170.         }
  171.         elem = elem->next;
  172.     }
  173.     return count;
  174. }
  175.  
  176. int main()
  177. {
  178.     SetConsoleCP(1251);
  179.     SetConsoleOutputCP(1251);
  180.     Node* head = NULL;
  181.     Node* tail = NULL;
  182.     int num;
  183.     cout << "Введите количество рейсов, которое вы хотите заполнить: ";
  184.     cin >> num;
  185.     createList(head, tail, num);
  186.     printList(head);
  187.     string value;
  188.     cout << "Введите номер автобуса, после последней записи которого хотите добавить новый рейс: ";
  189.     cin >> value;
  190.     addAfterLastWithValue(tail, value);
  191.     printList(head);
  192.     cout << "Введите номер автобуса, все записи которого хотите удалить: ";
  193.     cin >> value;
  194.     delAllWithValue(head, value);
  195.     printList(head);
  196.  
  197.  
  198. }
  199.  
RAW Paste Data