aLT22

Rewriting lab for Iliya

Jun 3rd, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.78 KB | None | 0 0
  1. #include "iostream"
  2. #define _USE_MATH_DEFINES
  3. #include "math.h"
  4. #include "string"
  5. #include <iomanip>
  6. #include <windows.h>
  7. #include <fstream>
  8. //setlocale(LC_ALL, "Russian");
  9. using namespace std;
  10.  
  11.  
  12. // конечная цель - односвязный список структур
  13. /*
  14. 1. Структура с вариантами
  15. 2. односвязный список (*p).next; p ->next;
  16. */
  17. struct car
  18. {
  19.     char Case; // варианты структуры, зависящие 0 - 1вариант, 1 - 2вариант...
  20.     union
  21.     {
  22.         struct
  23.         {
  24.             int num_doors;
  25.         }hatchback;//хетчбек
  26.         struct
  27.         {
  28.             char krisha;
  29.         }cabriolet;//кабриолет
  30.     };
  31.     char name[100];
  32.     int capacity;
  33.     int num_of_steps[3]; // 5, 6, 8
  34.    
  35.     car *next;
  36. };
  37. /*struct information
  38. {  
  39. };*/
  40. car *g = NULL,*p;
  41. void del()
  42. {
  43.     if (g != NULL)
  44.     {
  45.         car *a = g;
  46.         g = g -> next;
  47.         delete a;
  48.         cout << "Удаление выполнено\n";
  49.     }
  50.     else
  51.         cout << "Список пуст\n";
  52.     cin.ignore();
  53.     cin.ignore();
  54.     system("cls");
  55. }
  56. void delNum()
  57. {
  58.     cout << "Введите номер удаляемого элемента: ";
  59.     int a;
  60.     cin >> a;
  61.     bool error = false;
  62.     if (g != NULL)
  63.     {
  64.         car *b = g;
  65.         if (g -> next == NULL)
  66.             if (a == 1)
  67.             {
  68.                 delete b;
  69.                 cout << "Удаление выполнено\n";
  70.             }
  71.             else
  72.                 cout << "Такого элемента не существет\n";
  73.         else
  74.         {
  75.             car *buf = g;
  76.             while (--a)
  77.             {
  78.                 if (b -> next != NULL)
  79.                 {
  80.                     buf = b;
  81.                     b = b -> next;
  82.                 }
  83.                 else
  84.                 {
  85.                     error = true;
  86.                     cout << "Такого элемента не существет\n";
  87.                     break;
  88.                 }
  89.             }
  90.             if (!error)
  91.             {
  92.                 buf -> next = b -> next;
  93.                 delete b;
  94.                 cout << "Удаление выполнено\n";
  95.             }
  96.         }
  97.        
  98.     }
  99.     else
  100.         cout << "Список пуст\n";
  101.     cin.ignore();
  102.     cin.ignore();
  103.     system("cls");
  104. }
  105. void input(car *out)
  106. {
  107.     cout << "Введите название машины:\n";
  108.     cin >> out -> name;
  109.     cout << "Введите тип машины:\n1.Хетчбек\n2.Кабриолет\n";
  110.     cin >> out -> Case;
  111.     switch (out -> Case)
  112.     {
  113.     case '1':
  114.         {
  115.         cout << "Введите количество дверей\n";
  116.         cin >> out -> hatchback.num_doors;
  117.         break;
  118.         }
  119.     case '2':
  120.         {
  121.         cout << "Введите тип крыши(складывающаяся или нет)\n";
  122.         cin >> out -> cabriolet.krisha;
  123.         break;
  124.         }
  125.     }
  126.     cout << "Введите мощность двигателя: ";
  127.     cin >> out -> capacity;
  128.     cout << "введите 0 или 1 в зависимости от количества ступеней коробки передач:\n";
  129.     cout << " 5: ";
  130.     cin >> out -> num_of_steps[0];
  131.     cout << " 6:";
  132.     cin >> out -> num_of_steps[1];
  133.     cout << " 8:";
  134.     cin >> out -> num_of_steps[2];
  135. }
  136. void ProgDel()
  137. {
  138.     while (g != NULL)
  139.     {
  140.         car *p = g;
  141.         g = g -> next;
  142.         delete p;
  143.     }
  144. }
  145. void one(bool a)
  146. {
  147.     if (a)
  148.         cout << "присутствует\n";
  149.     else
  150.         cout << "отсутствует\n";
  151. }
  152. void output()
  153. {
  154.     if (g != NULL)
  155.     {
  156.         p = g;
  157.         int k = 0;
  158.         while (p != NULL)
  159.         {
  160.             cout << "*********************************************************\n";
  161.             k++;
  162.             cout << "Название машины: " << p -> name << "\n";
  163.             cout << k << ") Тип машины: ";
  164.             switch (p -> Case)
  165.             {
  166.             case '1':
  167.                 cout << "Хетчбек и количество дверей в нем " << p -> hatchback.num_doors;
  168.                 break;
  169.             case '2':
  170.                 cout << "Кабриолет и тип крыши в нем " << p -> cabriolet.krisha;
  171.                 break;
  172.             }
  173.            
  174.             cout << "\nКоличество лошадиных сил: " << p -> capacity << "\n";
  175.             for (int i = 0; i < 3; i++)
  176.             {
  177.                 switch (i)
  178.                 {
  179.                 case 0:
  180.                     cout << "Пятиступка ";
  181.                     one(p -> num_of_steps[i]);
  182.                     break;
  183.                 case 1:
  184.                     cout << "Шестиступенчатая ";
  185.                     one(p -> num_of_steps[i]);
  186.                         break;
  187.                 case 2:
  188.                     cout << "Восьмиступенчатый монстр ";
  189.                     one(p -> num_of_steps[i]);
  190.                     break;
  191.                 }
  192.             }
  193.                 p = p -> next;
  194.         }
  195.        
  196.     }
  197.     else
  198.     {
  199.         cout << "Список пуст\n";
  200.     }
  201.     cin.ignore();
  202.     cin.ignore();
  203.     system("cls");
  204. }
  205. void AddInStack()
  206. {
  207.     cout << "*********************************************************\n";
  208.     car *a;
  209.     a = new car;
  210.     input(a);
  211.     if (g != NULL)
  212.     {
  213.         a -> next = g;
  214.         g = a;
  215.     }
  216.     else
  217.     {
  218.         g = a;
  219.         g -> next = NULL;
  220.     }
  221.     system("cls");
  222. }
  223. void open()
  224. {
  225.     ifstream fin("file.txt"); // открыли файл для чтения
  226.     char buff[50];
  227.     fin.getline(buff, 50); // считали строку из файла
  228.     fin.close(); // закрываем файл
  229.     cout << buff << endl; // напечатали эту строку
  230. }
  231. void save()
  232. {
  233.     while (g != NULL)
  234.     {
  235.         ofstream fout;
  236.         fout.open("file.txt");
  237.         //
  238.         fout << g -> name << "|" << g -> capacity;
  239.         fout.close();
  240.     }
  241. }
  242. void main()
  243. {
  244.     open();
  245.     typedef void (*item)();
  246.     item mas[] = {AddInStack, output, del, delNum, ProgDel};
  247.     setlocale(LC_ALL, "Russian");
  248.     //struct *a = Str;
  249.     //int *b = str.param;
  250.     int a = 0;
  251.     while (true)
  252.     {
  253.         cout << "*********************************************************\n";
  254.         cout << "Вы находитесь в меню, выберите действие:\n1) добавить машину\n2) вывести список машин\n"<<
  255.             "3) удалить первую машину из списка\n4) удалить n-ную по счету машину\n5) выйти\n";
  256.         cin >> a;
  257.         if (a >= 1 && a <= 4)
  258.             (*mas[a - 1])();
  259.         else
  260.             if (a == 5)
  261.             {
  262.                 (*mas[a - 1])();
  263.                 break;
  264.             }
  265.             else
  266.             {
  267.                 cout << "Такого пункта не существует";
  268.                 cin.ignore();cin.ignore();
  269.                 system("cls");
  270.             }
  271.     }
  272.    
  273. }
Advertisement
Add Comment
Please, Sign In to add comment