bogdan_obukhovskii

Задание 2

May 3rd, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.23 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Bus
  6. {
  7. int num;
  8. string fio;
  9. int routeNum;
  10. bool isOnRoute;
  11.  
  12. Bus* next;
  13.  
  14. Bus(int n, string f, int r, bool i) : num(n), fio(f), routeNum(r), isOnRoute(i), next(nullptr) {}
  15.  
  16. void print()
  17. {
  18. cout << "Номер автобуса: " << num << "; ";
  19. cout << "ФИО водителя: " << fio << "; ";
  20. cout << "Номер маршрута: " << routeNum << "; ";
  21. if (isOnRoute)
  22. cout << " выполняет маршрут ";
  23. else
  24. cout << " стоит в автопарке ";
  25. cout << endl;
  26. }
  27. };
  28.  
  29. class BusesList
  30. {
  31. public:
  32. Bus* buses;
  33.  
  34. BusesList() { buses = nullptr; };
  35.  
  36. void add(int n, string f, int r, bool i)
  37. {
  38. Bus* tempBus = new Bus(n, f, r, i);
  39.  
  40. if (buses == nullptr)
  41. {
  42. buses = tempBus;
  43. return;
  44. }
  45. auto temp = buses;
  46. while (temp->next != nullptr)
  47. {
  48. temp = temp->next;
  49. }
  50. temp->next = tempBus;
  51. }
  52.  
  53. void print()
  54. {
  55. auto temp = buses;
  56. while (temp != nullptr)
  57. {
  58. temp->print();
  59. temp = temp->next;
  60. }
  61. delete temp;
  62. }
  63.  
  64. Bus* find(int num)
  65. {
  66. Bus* temp = buses;
  67. if (temp->num == num)
  68. {
  69. return temp;
  70. }
  71.  
  72. temp = temp->next;
  73. while (temp->next != nullptr)
  74. {
  75. if (temp->num == num)
  76. {
  77. return temp;
  78. }
  79. temp = temp->next;
  80. }
  81. return NULL;
  82. }
  83.  
  84. void deleteBus(int n)
  85. {
  86. if (buses->num == n)
  87. {
  88. buses = buses->next;
  89. return;
  90. }
  91.  
  92. auto prev = buses;
  93. auto temp = buses->next;
  94.  
  95. while (temp != nullptr)
  96. {
  97. if (temp->num == n)
  98. {
  99. prev->next = temp->next;
  100. return;
  101. }
  102. temp = temp->next;
  103. prev = prev->next;
  104. }
  105. }
  106. };
  107.  
  108. void endOfService(BusesList*& park, BusesList*& route, int n)
  109. {
  110. auto temp = route->find(n);
  111.  
  112. if (temp == NULL)
  113. {
  114. cout << "Не найдено автобусов на маршруте с таким номером." << endl;
  115. return;
  116. }
  117.  
  118. route->deleteBus(n);
  119. park->add(temp->num, temp->fio, temp->routeNum, true);
  120.  
  121. cout << "Успешно!" << endl;
  122. }
  123.  
  124. //начальное формирование списка данных обо всех автобусах в парке
  125. void fillFromKeyboark(BusesList*& park, BusesList*& route)
  126. {
  127. int n;
  128. string f;
  129. int r;
  130. bool i;
  131.  
  132. cin >> n >> f >> r >> i;
  133.  
  134. if (i)
  135. route->add(n, f, r, i);
  136. else
  137. park->add(n, f, r, i);
  138. }
  139.  
  140. //вывести все автобусы
  141. void printAll(BusesList* park, BusesList* route)
  142. {
  143. route->print();
  144. park->print();
  145. }
  146.  
  147. //меню
  148. void menu(BusesList*& park, BusesList*& route)
  149. {
  150. cout << endl << "************" << endl;
  151. cout << "Чтобы просмотреть автобусы в пути, введите 1" << endl;
  152. cout << "Чтобы просмотреть автобусы в парке, введите 2" << endl;
  153. cout << "Чтобы ввести автобус, который заехал в парк, введите 3" << endl;
  154. cout << "Чтобы вывести все автобусы, введите 4" << endl;
  155.  
  156. char pick;
  157. cin >> pick;
  158.  
  159. switch (pick)
  160. {
  161. case '1':
  162. cout << "Автобусы в пути:" << endl;
  163. route->print();
  164. break;
  165. case '2':
  166. cout << "Автобусы в парке:" << endl;
  167. park->print();
  168. break;
  169. case '3':
  170. cout << "Введите номер автобуса, который въехал в автопарк: ";
  171. int num;
  172. cin >> num;
  173. endOfService(park, route, num);
  174. break;
  175. case '4':
  176. printAll(park, route);
  177. break;
  178. default:
  179. cout << "Вы ввели что-то не то" << endl;
  180. break;
  181. }
  182. }
  183.  
  184.  
  185. int main()
  186. {
  187. setlocale(0, "rus");
  188.  
  189. const int N = 3;
  190.  
  191. BusesList* park = new BusesList; //Список в парке
  192. BusesList* route = new BusesList; //Список на маршруте
  193.  
  194. cout << "Введите " << N << " автобусов с клавиатуры в виде: <номер автобуса> <фио> <номер маршрута> <на маршуте>" << endl;
  195. cout << "|____<на маршруте> 0 или 1, где 0 - в парке, 1 - на маршруте" << endl;
  196.  
  197. /* ДЛЯ ТЕСТА
  198. park->add(0, "Исрапов И.В.", 108, false);
  199. park->add(1, "Истамбулов П.К.", 11, false);
  200. route->add(2, "Кеков П.К.", 91, true);
  201. route->add(3, "Буков И.В.", 78, true);
  202. route->add(4, "Лолов П.К.", 61, true);
  203. route->add(5, "Ыров П.К.", 31, true);
  204. */
  205.  
  206. for (int count = 0; count < N; count++) fillFromKeyboark(park, route);
  207.  
  208. while (true)
  209. {
  210. menu(park, route);
  211. }
  212. }
Add Comment
Please, Sign In to add comment