Advertisement
IGRODELOFF

Task44

Jul 25th, 2022
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Threading;
  7.  
  8. namespace Task44
  9. {
  10.     internal class Program
  11.     {
  12.         public static void Main(string[] args)
  13.         {
  14.             string welcomToWork =
  15.                 "  Робот : Добро пожаловать на работу диспечера железнодорожных линий. \n" +
  16.                 "Действие: Вы проходите на своё рабочее место и садитесь в кресло перед огромным экраном.";
  17.             string goodbye =
  18.                 "Вы завершили рабочую сессию и пошли домой.";
  19.  
  20.             Console.WriteLine(welcomToWork);
  21.             Dispatcher dispatcher = new Dispatcher();
  22.             dispatcher.Work();
  23.             Console.WriteLine(goodbye);
  24.         }
  25.     }
  26.  
  27.     class Dispatcher
  28.     {
  29.         private List<Train> _trains = new List<Train>();
  30.         private Conductor _conductor = new Conductor();
  31.         public void Work()
  32.         {
  33.             string instruction =
  34.                 "Для успешной работы: \n" +
  35.                 "Шаг 1: Создать направление\n" +
  36.                 "Шаг 2: Продать билеты\n" +
  37.                 "Шаг 3: Сформировать поезд\n" +
  38.                 "Шаг 4: Отправить поезд\n";
  39.             string requestCreateRoute =
  40.                 "Нажмите любую клавишу, чтобы создать направление.";
  41.             string requestSellTickets =
  42.                 "Нажмите любую клавишу, чтобы продать билеты.";
  43.             string requestCreateTrain =
  44.                 "Нажмите любую клавишу, чтобы создать состав.";
  45.             string requestTrainDeparture =
  46.                 "Нажмите любую клавишу, чтобы отправить состав.";
  47.             string youNeenExit =
  48.                 "Хочешь уйти? Если да пиши <<Да>>. Если нет нажми любую кнопку.";
  49.  
  50.             int passengers;
  51.             bool isExit = false;
  52.            
  53.             while (isExit == false)
  54.             {
  55.                 ShowInfo();
  56.                 Console.WriteLine(instruction);
  57.  
  58.                 Console.WriteLine(requestCreateRoute);
  59.                 Console.ReadKey();
  60.                 Route route = new Route();
  61.                 Thread.Sleep(1000);
  62.  
  63.                 Console.WriteLine(requestSellTickets);
  64.                 Console.ReadKey();
  65.                 passengers = _conductor.Sell();
  66.                 Thread.Sleep(1000);
  67.  
  68.                 Console.WriteLine(requestCreateTrain);
  69.                 Console.ReadKey();
  70.                 Train train = new Train(passengers, route.DepartureCity, route.ArrivalСity);
  71.                 AddTrain(train);
  72.                 Thread.Sleep(1000);
  73.  
  74.                 Console.WriteLine(requestTrainDeparture);
  75.                 Console.ReadKey();
  76.                 Thread.Sleep(1000);
  77.                 train.SayTrainDeparture();
  78.                 Console.WriteLine("=====================");
  79.                 Thread.Sleep(1000);
  80.  
  81.                 Console.WriteLine(youNeenExit);
  82.                 string userInput = Console.ReadLine();
  83.                 switch (userInput)
  84.                 {
  85.                     case "Да":
  86.                         isExit = true;
  87.                         break;
  88.                     default:
  89.                         isExit = false;
  90.                         break;
  91.                 }
  92.                 Console.ReadKey();
  93.                 Console.Clear();
  94.             }
  95.         }
  96.  
  97.         public void AddTrain(Train train)
  98.         {
  99.             _trains.Add(train);
  100.             train.ShowInfo();
  101.         }
  102.  
  103.         private void ShowInfo()
  104.         {
  105.             string information =
  106.                 "Информация: ";
  107.             string noTrain =
  108.                 "Поездов нет.";
  109.  
  110.             Console.WriteLine(information);
  111.  
  112.             if (_trains.Count == 0)
  113.             {
  114.                 Console.WriteLine(noTrain);
  115.                 Console.ReadKey();
  116.             }
  117.             else
  118.             {
  119.                 foreach (var train in _trains)
  120.                 {
  121.                     Console.WriteLine(
  122.                         $"Поезд №{train.Number} отправлен по маршруту {train.DepartureCity} - {train.ArrivalСity}.\t" +
  123.                         $"Количество вагонов: {train.WagonsCount}. Количество пассажиров: {train.PassengersCount}");
  124.                 }
  125.             }
  126.  
  127.             Console.WriteLine("=====================================================");
  128.             Console.WriteLine();
  129.         }
  130.     }
  131.  
  132.     class Conductor
  133.     {
  134.         private Random _random = new Random();
  135.  
  136.         private int _countMin = 1;
  137.         private int _countMax = 1000;
  138.         private int _count;
  139.  
  140.         public int Sell()
  141.         {
  142.             string sellTicket =
  143.                 "Было продано билетов в количестве - ";
  144.  
  145.             _count = _random.Next(_countMin, _countMax + 1);
  146.             Console.WriteLine(sellTicket + _count);
  147.  
  148.             return _count;
  149.         }
  150.     }
  151.  
  152.     class Train
  153.     {
  154.         private int _count;
  155.         private List<Wagon> _wagons = new List<Wagon>();
  156.         private Dictionary<string, int> _wagonsByTypes = new Dictionary<string, int>();
  157.  
  158.         public int Number { get; private set; }
  159.         public int WagonsCount { get; private set; }
  160.         public int PassengersCount { get; private set; }
  161.         public string DepartureCity { get; private set; }
  162.         public string ArrivalСity { get; private set; }
  163.  
  164.         public Train(int passengersCount, string departureCity, string arrivalСity)
  165.         {
  166.             PassengersCount = passengersCount;
  167.             DepartureCity = departureCity;
  168.             ArrivalСity = arrivalСity;
  169.  
  170.             _wagonsByTypes.Add("Большой", 64);
  171.             _wagonsByTypes.Add("Средний", 32);
  172.             _wagonsByTypes.Add("Маленький", 16);
  173.             _count++;
  174.  
  175.             Number = _count;
  176.  
  177.             Create();
  178.         }
  179.  
  180.         public void ShowInfo()
  181.         {
  182.             foreach (var wagon in _wagons)
  183.             {
  184.                 Console.WriteLine($"Вагон типа {wagon.Type} вместительностью {wagon.MaxPlaces}. Свободных мест: {wagon.FreePlaces}");
  185.             }
  186.  
  187.             Console.WriteLine();
  188.         }
  189.  
  190.         public void SayTrainDeparture()
  191.         {
  192.             Console.WriteLine($"Внимание! Поезд №{Number} отправляется по маршруту {DepartureCity} - {ArrivalСity}.");
  193.         }
  194.  
  195.         private void Create()
  196.         {
  197.             string wasFormedTrain =
  198.                 "Был сформирован поезд. Количество вагонов: ";
  199.  
  200.             int numberOfPassengers = PassengersCount;
  201.  
  202.             foreach (var wagon in _wagonsByTypes)
  203.             {
  204.                 while (numberOfPassengers >= wagon.Value)
  205.                 {
  206.                     _wagons.Add(new Wagon(wagon.Key, wagon.Value, wagon.Value));
  207.                     numberOfPassengers -= wagon.Value;
  208.                 }
  209.             }
  210.  
  211.             if (numberOfPassengers > 0)
  212.             {
  213.                 _wagons.Add(new Wagon("Маленький", numberOfPassengers, _wagonsByTypes["Маленький"]));
  214.             }
  215.  
  216.             WagonsCount = _wagons.Count;
  217.             Console.WriteLine(wasFormedTrain + WagonsCount);
  218.         }
  219.     }
  220.  
  221.     class Wagon
  222.     {
  223.         public string Type { get; private set; }
  224.         public int NumberOfPassengers { get; private set; }
  225.         public int MaxPlaces { get; private set; }
  226.         public int FreePlaces { get; private set; }
  227.  
  228.         public Wagon(string type, int numberOfPassengers, int maxPlaces)
  229.         {
  230.             Type = type;
  231.             NumberOfPassengers = numberOfPassengers;
  232.             MaxPlaces = maxPlaces;
  233.             FreePlaces = maxPlaces - numberOfPassengers;
  234.         }
  235.     }
  236.  
  237.     class Route
  238.     {
  239.         private string[] _directionsRoutes = { "Москва", "Санкт-Петербург", "Краснодар", "Сыктывкар", "Нижний-Новгород", "Новосибирск", "Пермь" };
  240.         private Random _random = new Random();
  241.         public string DepartureCity { get; private set; }
  242.         public string ArrivalСity { get; private set; }
  243.  
  244.         public Route()
  245.         {
  246.             Create();
  247.         }
  248.  
  249.         private void Create()
  250.         {
  251.             int departureCityIndex = 0;
  252.             int arrivalCityIndex = 0;
  253.  
  254.             while (departureCityIndex == arrivalCityIndex)
  255.             {
  256.                 departureCityIndex = _random.Next(0, _directionsRoutes.Length);
  257.                 arrivalCityIndex = _random.Next(0, _directionsRoutes.Length);
  258.             }
  259.  
  260.             DepartureCity = _directionsRoutes[departureCityIndex];
  261.             ArrivalСity = _directionsRoutes[arrivalCityIndex];
  262.             Console.WriteLine($"Создан маршрут {DepartureCity} — {ArrivalСity}\n");
  263.         }
  264.     }
  265. }
  266.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement