using System; using System.Collections.Generic; namespace Homework44 { class Program { static void Main(string[] args) { Dispatcher dispatcher = new Dispatcher(); dispatcher.IsWork(); } } class Dispatcher { private int _wagonCapacity = 24; private int _minPassengers = 50; private int _maxPassengers = 201; private List _trains = new List(); private TrainRouteGenerator _routeGenerator = new TrainRouteGenerator(); public void IsWork() { const string CommandCreateTrain = "go"; const string CommandExitMenu = "exit"; const string CommandShowTrains = "show"; bool isWork = true; while (isWork) { ShowShortTrainInfo(); Console.WriteLine("\nВы находитесь в меню создания поездов"); Console.WriteLine($"Чтобы создать поезд введите {CommandCreateTrain}"); Console.WriteLine($"Чтобы показать список поездов введите {CommandShowTrains}"); Console.WriteLine($"Чтобы выйти из меню введите {CommandExitMenu}"); Console.Write("Выберите действие: "); string userInput = Console.ReadLine(); switch (userInput) { case CommandCreateTrain: CreateTrain(); break; case CommandShowTrains: ShowTrainInformation(); break; case CommandExitMenu: isWork = ExitProgram(); break; default: Console.WriteLine("Некорректный ввод, попробуйте еще раз."); break; } Console.ReadKey(); Console.Clear(); } } private void CreateTrain() { string direction = _routeGenerator.GetPath(); int passengerCount = AccidentalProvider.GetRandomPassengerCount(_minPassengers, _maxPassengers); if (passengerCount == -1) { Console.WriteLine("Продажа билетов отменена."); return; } List wagons = CreateWagons(passengerCount); Train train = new Train(direction, passengerCount, wagons); Console.WriteLine("\nИнформация о созданном поезде:"); train.ShowInfo(); _trains.Add(train); } private List CreateWagons(int passengerCount) { List wagons = new List(); int remainingPassengers = passengerCount; while (remainingPassengers > 0) { int passengersForThisWagon = Math.Min(_wagonCapacity, remainingPassengers); wagons.Add(new Wagon(_wagonCapacity, passengersForThisWagon)); remainingPassengers -= passengersForThisWagon; } return wagons; } private void ShowTrainInformation() { if (_trains.Count == 0) { Console.WriteLine("Поездов пока нет."); return; } Console.WriteLine("Список поездов:"); for (int i = 0; i < _trains.Count; i++) { Console.WriteLine($"Поезд {i + 1}: {_trains[i].Direction}, " + $"Пассажиров: {_trains[i].PassengerCount}, Вагонов: {_trains[i].WagonCount}"); } } private bool ExitProgram() { Console.WriteLine("Вы вышли из программы!"); return false; } private void ShowShortTrainInfo() { if (_trains.Count == 0) { Console.WriteLine("Поездов пока нет."); return; } Console.WriteLine("Существующие поезда:"); for (int i = 0; i < _trains.Count; i++) { Console.WriteLine($"Поезд {i + 1}: {_trains[i].Direction}," + $" Пассажиров: {_trains[i].PassengerCount}, Вагонов: {_trains[i].WagonCount}"); } } } class AccidentalProvider { private static Random s_random = new Random(); public static int GetRandomPassengerCount(int minPassengers, int maxPassengers) { return s_random.Next(minPassengers, maxPassengers); } } class TrainRouteGenerator { private string[] _locations = new string[] { "Москва", "Санкт-Петербург", "Калуга", "Тверь", "Ярославль", "Краснодар", "Ростов", "Вологда", "Нижний Новгород", "Владивосток", "Екатеринбург", "Самара", "Сочи", "Белгород", "Брянск", "Сергиев Посад", "Козельск", "Иваново" }; public string GetPath() { string departure = GetRandomLocation(); string arrival = GetDifferentLocation(departure); return $"{departure} - {arrival}"; } private string GetRandomLocation() { return _locations[AccidentalProvider.GetRandomPassengerCount(0, _locations.Length - 1)]; } private string GetDifferentLocation(string excludeLocation) { string arrival; do { arrival = GetRandomLocation(); } while (arrival == excludeLocation); return arrival; } } class Train { private List _wagons; public Train(string direction, int passengerCount, List wagons) { Direction = direction; PassengerCount = passengerCount; _wagons = wagons; } public string Direction { get; private set; } public int PassengerCount { get; private set; } public int WagonCount => _wagons.Count; public void ShowInfo() { Console.WriteLine($"Направление: {Direction}"); Console.WriteLine($"Количество пассажиров: {PassengerCount}"); Console.WriteLine($"Количество вагонов: {WagonCount}"); Console.WriteLine("Информация по вагонам:"); for (int i = 0; i < _wagons.Count; i++) { Console.WriteLine($" Вагон {i + 1}: Занято мест: {_wagons[i].OccupiedSeats}"); } } } class Wagon { public Wagon(int capacity, int occupiedSeats) { Capacity = capacity; OccupiedSeats = occupiedSeats; } public int Capacity { get; private set; } public int OccupiedSeats { get; private set; } } }