Advertisement
Vapio

task31

May 12th, 2021 (edited)
658
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.80 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4.  
  5. public class Program
  6. {
  7.     public static void Main()
  8.     {
  9.         Station station = new Station();
  10.  
  11.         bool isWork = true;
  12.         ConsoleKey key;
  13.         ConsoleKey exitKey = ConsoleKey.Q;
  14.         int sleepTime = 500;
  15.  
  16.         while (isWork)
  17.         {
  18.             station.Update();
  19.             if (Console.KeyAvailable)
  20.             {
  21.                 key = Console.ReadKey(true).Key;
  22.                 if (key == exitKey)
  23.                     isWork = false;
  24.             }
  25.             Thread.Sleep(sleepTime);
  26.         }
  27.     }
  28. }
  29.  
  30. public class Station
  31. {
  32.     private Train _train;
  33.     private Random _random;
  34.     private int timeStay;
  35.     private int timeArrive;
  36.     bool isArrived;
  37.  
  38.     private static readonly string[] RoutesFrom = {
  39.         "Minsk",
  40.         "Vitebsk",
  41.         "Mogilev",
  42.         "Brest",
  43.         "Grodno"
  44.     };
  45.  
  46.     private static readonly string[] RoutesTo =
  47.     {
  48.         "Pinsk",
  49.         "Molodechno",
  50.         "Orsha",
  51.         "Poltsk",
  52.         "Novopolotsk"
  53.     };
  54.     private const int PassengersMaxAmount = 1000;
  55.     private const int PassengersMinAmount = 3;
  56.     private const int WaitTimeArrive = 100;
  57.     private const int WaitTimeStay = 50;
  58.  
  59.     public Station()
  60.     {
  61.         _train = null;
  62.         _random = new Random();
  63.     }
  64.  
  65.     public void Showroute()
  66.     {
  67.         Console.Clear();
  68.         if (isArrived)
  69.             Console.WriteLine($"Time to stay : {WaitTimeStay - timeStay}");
  70.         else
  71.             Console.WriteLine($"Time to arrive : {WaitTimeArrive - timeArrive}");
  72.  
  73.         if (_train != null)
  74.             Console.WriteLine(_train);
  75.         else
  76.             Console.WriteLine("Train hasn't arrived yet.");
  77.     }
  78.  
  79.     public void Update()
  80.     {
  81.         if (isArrived)
  82.         {
  83.             if (timeStay >= WaitTimeStay)
  84.             {
  85.                 isArrived = false;
  86.                 _train = null;
  87.                 timeStay = 0;
  88.                 timeArrive = 0;
  89.             }
  90.             else
  91.             {
  92.                 ++timeStay;
  93.             }
  94.         }
  95.         else
  96.         {
  97.             if (timeArrive >= WaitTimeArrive)
  98.             {
  99.                 isArrived = true;
  100.                 CreateRoute();
  101.                 timeStay = 0;
  102.                 timeArrive = 0;
  103.             }
  104.             else
  105.             {
  106.                 ++timeArrive;
  107.             }
  108.         }
  109.  
  110.         Showroute();
  111.     }
  112.  
  113.     private void CreateRoute()
  114.     {
  115.         string routeFrom = RoutesFrom[_random.Next(RoutesFrom.Length)];
  116.         string routeTo = RoutesTo[_random.Next(RoutesTo.Length)];
  117.         int passengersAmount = _random.Next(PassengersMinAmount, PassengersMaxAmount);
  118.  
  119.         _train = new Train(routeFrom, routeTo, passengersAmount);
  120.     }
  121. }
  122.  
  123. public class Train
  124. {
  125.     private List<Carriage> _carriages;
  126.  
  127.     public string RouteFrom { get; private set; }
  128.     public string RouteTo { get; private set; }
  129.     public int PassengersAmount { get; private set; }
  130.  
  131.     public Train(string routeFrom, string routeTo, int passengersAmount)
  132.     {
  133.         RouteFrom = routeFrom;
  134.         RouteTo = routeTo;
  135.         PassengersAmount = passengersAmount;
  136.         _carriages = new List<Carriage>();
  137.         CreateCarriages();
  138.     }
  139.  
  140.     public override string ToString()
  141.     {
  142.         string resultString = "";
  143.         resultString += "Route From " + RouteFrom + " To " + RouteTo + "\n";
  144.         resultString += "Amount of passengers: " + PassengersAmount + "\n";
  145.         resultString += "Amount of carriges: " + _carriages.Count + "\n";
  146.         foreach (Carriage carriage in _carriages)
  147.         {
  148.             if (carriage == Carriage.Large)
  149.                 resultString += "Large + ";
  150.             else if (carriage == Carriage.Middle)
  151.                 resultString += "Large + ";
  152.             else if (carriage == Carriage.Small)
  153.                 resultString += "Small + ";
  154.         }
  155.         resultString += "\n\n";
  156.  
  157.         return resultString;
  158.     }
  159.  
  160.     private void FillCarriages(Carriage carriageType, ref int passengersAmount)
  161.     {
  162.         int carriagesAmount = passengersAmount / (int) carriageType;
  163.         passengersAmount %= (int) carriageType;
  164.  
  165.         for (int i = 0; i < carriagesAmount; ++i)
  166.             _carriages.Add(carriageType);
  167.     }
  168.  
  169.     private void CreateCarriages()
  170.     {
  171.         int passengersAmount = PassengersAmount;
  172.  
  173.         FillCarriages(Carriage.Large, ref passengersAmount);
  174.         FillCarriages(Carriage.Middle, ref passengersAmount);
  175.  
  176.         if (passengersAmount < (int) Carriage.Small)
  177.             passengersAmount = (int) Carriage.Small;
  178.  
  179.         FillCarriages(Carriage.Small, ref passengersAmount);
  180.     }
  181. }
  182.  
  183. public enum Carriage : int
  184. {
  185.     Small = 5,
  186.     Middle = 10,
  187.     Large = 15
  188. }
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement