Advertisement
Suslick

Test_42

Jan 9th, 2025
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.80 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace ConsoleApp1
  5. {
  6.     internal class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Dipatcher dipatcher = new Dipatcher();
  11.  
  12.             dipatcher.Work();
  13.         }
  14.     }
  15.  
  16.     class Dipatcher
  17.     {
  18.         private List<Train> _trains = new List<Train>();
  19.  
  20.         public void Work()
  21.         {
  22.             const string CommandCreateTrain = "1";
  23.             const string CommandExit = "2";
  24.  
  25.             bool isWork = true;
  26.  
  27.             while (isWork)
  28.             {
  29.                 Console.WriteLine($"Меню:\n" +
  30.                     $"{CommandCreateTrain}. Создать поезд\n" +
  31.                     $"{CommandExit}. Выход");
  32.  
  33.                 Console.WriteLine("\nТекущие поезда:");
  34.  
  35.                 DisplayTrains();
  36.  
  37.                 Console.Write("\nВаш выбор: ");
  38.  
  39.                 string userInput = Console.ReadLine();
  40.  
  41.                 switch (userInput)
  42.                 {
  43.                     case CommandCreateTrain:
  44.                         CreateTrain();
  45.                         break;
  46.  
  47.                     case CommandExit:
  48.                         isWork = false;
  49.                         break;
  50.  
  51.                     default:
  52.                         Console.WriteLine("Нет такой команды");
  53.                         break;
  54.                 }
  55.             }
  56.  
  57.             Console.WriteLine("Работа завершена!");
  58.         }
  59.  
  60.         private string GetArrivalPoint(string departurePoint)
  61.         {
  62.             string arrivalPoint = string.Empty;
  63.             do
  64.             {
  65.                 Console.Write("Куда: ");
  66.                 arrivalPoint = Console.ReadLine();
  67.  
  68.                 if (arrivalPoint == departurePoint)
  69.                 {
  70.                     Console.WriteLine("Введенный пункт назначения совпадает с пунктом отправления");
  71.                 }
  72.  
  73.             } while (arrivalPoint == departurePoint || string.IsNullOrWhiteSpace(arrivalPoint));
  74.  
  75.             return arrivalPoint;
  76.         }
  77.  
  78.         private void DisplayTrains()
  79.         {
  80.             if (_trains.Count == 0)
  81.             {
  82.                 Console.WriteLine("Нет созданных поездов");
  83.  
  84.                 return;
  85.             }
  86.  
  87.             for (int i = 0; i < _trains.Count; i++)
  88.             {
  89.                 Console.WriteLine($"{i + 1}. {_trains[i].GetShortInfo()}");
  90.             }
  91.         }
  92.  
  93.         private void CreateTrain()
  94.         {
  95.             int minNumber = 50;
  96.             int maxNumber = 200;
  97.  
  98.             RailcarFactory railcarFactory = new RailcarFactory();
  99.             List<Railcar> railcars;
  100.  
  101.             Console.WriteLine("\nШаг 1. Создать направление");
  102.             Console.WriteLine("Введите направление (например, Бийск - Барнаул): ");
  103.  
  104.             Console.Write("Откуда: ");
  105.             string departurePoint = Console.ReadLine();
  106.  
  107.             string arrivalPoint = GetArrivalPoint(departurePoint);
  108.  
  109.             Route route = new Route(departurePoint, arrivalPoint);
  110.  
  111.             Console.WriteLine("\nШаг 2. Продать билеты");
  112.  
  113.             int passengers = UserUtils.GenerateRandomNumber(minNumber, maxNumber);
  114.  
  115.             Console.WriteLine($"Продано билетов: {passengers}\n");
  116.             Console.WriteLine("Шаг 3. Сформировать поезд");
  117.  
  118.             railcars = railcarFactory.CreateRailcarsForPassengers(passengers);
  119.            
  120.             Train train = new Train(route, railcars, passengers);
  121.  
  122.             Console.WriteLine("\nШаг 4. Информация о поезде");
  123.             Console.WriteLine(train.GetFullInfo());
  124.  
  125.             _trains.Add(train);
  126.  
  127.             Console.WriteLine("\nНажмите Enter, чтобы вернуться в меню");
  128.             Console.ReadLine();
  129.         }
  130.     }
  131.  
  132.     class Train
  133.     {
  134.         private List<Railcar> _railcars;
  135.  
  136.         public Train(Route route, List<Railcar> railcars, int totalPassengers)
  137.         {
  138.             _railcars = new List<Railcar>(railcars);
  139.             TotalPassengers = totalPassengers;
  140.             Route = route;
  141.  
  142.             Console.WriteLine("Поезд сформирован!");
  143.         }
  144.         public Route Route { get; private set; }
  145.         public int TotalPassengers { get; private set; }
  146.  
  147.         public string GetShortInfo()
  148.         {
  149.             return $"{Route.FullInfo} - {_railcars.Count} вагонов, {TotalPassengers} пассажиров";
  150.         }
  151.  
  152.         public string GetFullInfo()
  153.         {
  154.             string info = $"Поезд по маршруту: {Route.FullInfo}\n" +
  155.                 $"Общее число пассажиров: {TotalPassengers}\n" +
  156.                 $"Количество вагонов: {_railcars.Count}";
  157.  
  158.             for (int i = 0; i < _railcars.Count; i++)
  159.             {
  160.                 info += $"\n Вагон {i + 1}: Вместимость {_railcars[i].Capacity}, Пассажиров {_railcars[i].Passengers}";
  161.             }
  162.  
  163.             return info;
  164.         }
  165.     }
  166.  
  167.     class RailcarFactory
  168.     {
  169.         private const int MinRailcarCapacity = 20;
  170.         private const int MaxRailcarCapacity = 50;
  171.  
  172.         public List<Railcar> CreateRailcarsForPassengers(int passengers)
  173.         {
  174.             List<Railcar> railcars = new List<Railcar>();
  175.  
  176.             while (passengers > 0)
  177.             {
  178.                 int capacity = UserUtils.GenerateRandomNumber(MinRailcarCapacity, MaxRailcarCapacity);
  179.                 int passengersInRailcar = Math.Min(capacity, passengers);
  180.  
  181.                 railcars.Add(new Railcar(capacity, passengersInRailcar));
  182.                 passengers -= passengersInRailcar;
  183.             }
  184.  
  185.             return railcars;
  186.         }
  187.     }
  188.  
  189.     class Railcar
  190.     {
  191.         public Railcar(int capacity, int passengers)
  192.         {
  193.             Passengers = passengers;
  194.             Capacity = capacity;
  195.         }
  196.  
  197.         public int Capacity { get; private set; }
  198.  
  199.         public int Passengers { get; private set; }
  200.     }
  201.  
  202.     class Route
  203.     {
  204.         public Route(string departurePoint, string arrivalPoint)
  205.         {
  206.             DeparturePoint = departurePoint;
  207.             ArrivalPoint = arrivalPoint;
  208.         }
  209.  
  210.         public string DeparturePoint { get; private set; }
  211.  
  212.         public string ArrivalPoint { get; private set; }
  213.  
  214.         public string FullInfo => DeparturePoint + " - " + ArrivalPoint;
  215.     }
  216.  
  217.     class UserUtils
  218.     {
  219.         private static Random _random = new Random();
  220.  
  221.         public static int GenerateRandomNumber(int minValue, int maxValue)
  222.         {
  223.             return _random.Next(minValue, maxValue + 1);
  224.         }
  225.     }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement