kxcoze

AlyonaCringeTrains

Dec 19th, 2020 (edited)
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <Windows.h>
  4.  
  5. using namespace std;
  6.  
  7. class TrainStack {
  8. private:
  9.     struct Node {
  10.         int num;
  11.         Node *next;
  12.     };
  13.  
  14.     Node *top = NULL;
  15. public:
  16.     void push(int num) {
  17.         Node *pv = new Node;
  18.         pv->num = num;
  19.         pv->next = top;
  20.         top = pv;
  21.     }
  22.  
  23.     int pop() {
  24.         if (isEmpty()) {
  25.             return -1;
  26.         }
  27.         int temp = top->num;
  28.         Node *pv = top;
  29.         top = top->next;
  30.         delete pv;
  31.         return temp;
  32.     }
  33.  
  34.     bool isEmpty() {
  35.         return top ? false : true;
  36.     }
  37.  
  38.     void print() {
  39.         Node *temp = top;
  40.         while (temp != NULL) {
  41.             cout << temp->num << ' ';
  42.             temp = temp->next;
  43.         }
  44.         cout << endl;
  45.     }
  46.  
  47.     ~TrainStack() {
  48.         while (top) {
  49.             Node *pv = top;
  50.             top = top->next;
  51.             delete pv;
  52.         }
  53.     }
  54. };
  55.  
  56. short menu();
  57. void input_by_file(TrainStack&, TrainStack&, TrainStack&);
  58. void input_by_keyboard(TrainStack&, TrainStack&, TrainStack&);
  59. void input(TrainStack&, TrainStack&);
  60. void print_trains(TrainStack&, TrainStack&);
  61. void print_trains(TrainStack&);
  62.  
  63. int main() {
  64.     SetConsoleCP(1251);
  65.     SetConsoleOutputCP(1251);
  66.     TrainStack MainDirection, oneDirection, twoDirection;
  67.  
  68.     short choice;
  69.     do {
  70.         system("cls");
  71.         choice = menu();
  72.         switch (choice) {
  73.         case 1:
  74.             system("cls");
  75.             input_by_keyboard(MainDirection, oneDirection, twoDirection);
  76.             system("pause");
  77.             system("cls");
  78.             break;
  79.         case 2:
  80.             system("cls");
  81.             input_by_file(MainDirection, oneDirection, twoDirection);
  82.             system("pause");
  83.             system("cls");
  84.             break;
  85.         case 3:
  86.             system("cls");
  87.             print_trains(oneDirection, twoDirection);
  88.             system("pause");
  89.             system("cls");
  90.             break;
  91.         case 0:
  92.             cout << "До свидания!" << endl;
  93.             system("pause");
  94.             return 0;
  95.             break;
  96.         default:
  97.             cout << "Неверный выбор!" << endl;
  98.             system("pause");
  99.             system("cls");
  100.             break;
  101.         }
  102.     } while (choice);
  103.     cout << endl;
  104.     return 0;
  105. }
  106.  
  107. void input(int value, TrainStack& one, TrainStack& two) {
  108.     if (value % 2 == 0) {
  109.         one.push(value);
  110.     }
  111.     else {
  112.         two.push(value);
  113.     }
  114. }
  115.  
  116. void input_by_keyboard(TrainStack& main, TrainStack& one, TrainStack& two) {
  117.     int train;
  118.     cout << "Вводите номера поездов, для остановки ввода напишите строку: \n";
  119.     while (cin >> train) {
  120.         main.push(train);
  121.     }
  122.  
  123.     // Если пользователь написал строку, вместо числа, очищаем буфер cin
  124.     cin.clear();
  125.     while (cin.get() != '\n');
  126.  
  127.     print_trains(main);
  128.     while (!main.isEmpty()) {
  129.         int pr = main.pop();
  130.         input(pr, one, two);
  131.     }
  132.    
  133.  
  134.     print_trains(one, two);
  135. }
  136.  
  137. void input_by_file(TrainStack& main, TrainStack& one, TrainStack& two) {
  138.     char filename[30];
  139.     cout << "Введите название Вашего текстового файла для чтения: " << endl;
  140.     cin >> filename;
  141.     strcat_s(filename, ".txt");
  142.     system("cls");
  143.  
  144.     ifstream in(filename, ios::in);
  145.     if (!in) {
  146.         cout << "Неудается открыть файл " << filename << " для чтения" << endl;
  147.         return;
  148.     }
  149.  
  150.     while (!in.eof()) {
  151.         int pr;
  152.         if (in >> pr) {
  153.             main.push(pr);
  154.         }
  155.         else {
  156.             in.clear();
  157.             in.ignore(1, '\n');
  158.         }
  159.     }
  160.  
  161.     print_trains(main);
  162.     while (!main.isEmpty()) {
  163.         int pr = main.pop();
  164.         input(pr, one, two);
  165.     }
  166.  
  167.     in.close();
  168.     print_trains(one, two);
  169. }
  170.  
  171. void print_trains(TrainStack& one, TrainStack& two) {
  172.     if (!one.isEmpty()) {
  173.         cout << "Четное направление:" << endl;
  174.         one.print();
  175.         cout << endl;
  176.     }
  177.     else
  178.         cout << "Четное направление пусто!" << endl << endl;
  179.  
  180.     if (!two.isEmpty()) {
  181.         cout << "Нечетное направление:" << endl;
  182.         two.print();
  183.         cout << endl;
  184.     }
  185.     else
  186.         cout << "Нечетное направление пусто!" << endl << endl;  
  187. }
  188.  
  189. void print_trains(TrainStack& main) {
  190.     if (!main.isEmpty()) {
  191.         cout << "Главное направление:" << endl;
  192.         main.print();
  193.         cout << endl;
  194.     }
  195.     else
  196.         cout << "Главное направление пусто!" << endl << endl;
  197. }
  198.  
  199. short menu() {
  200.     short v;
  201.     cout << "\n           МЕНЮ" << endl;
  202.     cout << " Введите [1] для формирования состава с клавиатуры\n";
  203.     cout << " Введите [2] для формирования состава из файла\n";
  204.     cout << " Введите [3] для просмотра отсортированных составов\n";
  205.     cout << " Введите [0] для выхода\n";
  206.     cout << " Пункт: ";
  207.     cin.clear();
  208.     cin >> v;
  209.     return v;
  210. }
Add Comment
Please, Sign In to add comment