Advertisement
OldBeliver

Yardmaster_03

May 14th, 2021
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.76 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.  
  7. namespace TrainDispatcher_02
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Yardmaster yardmaster = new Yardmaster();
  14.             yardmaster.Work();
  15.         }
  16.     }
  17.  
  18.     class Yardmaster
  19.     {
  20.         private List<Station> _stations = new List<Station>();
  21.         private Train _train;
  22.         private int[] _soldedTickets;
  23.        
  24.         public Yardmaster()
  25.         {
  26.             AddStations();
  27.         }
  28.  
  29.         public void Work()
  30.         {
  31.             bool isOpen = true;
  32.             string header = "Центр формирования поездов Белорусской железной дороги\n";
  33.             string trainDirection;
  34.            
  35.             while (isOpen)
  36.             {
  37.                 Console.WriteLine($"{header}");
  38.                 Console.WriteLine($"Текущий рейс не сформирован");
  39.                
  40.                 Console.Write($"\nНажмите любую для автоматического формирования направления или exit для выхода: ");
  41.                 string userInput = Console.ReadLine();
  42.                 if(userInput == "exit")
  43.                 {
  44.                     isOpen = false;
  45.                     break;
  46.                 }
  47.                 Console.Clear();
  48.                 trainDirection = CreateTrainDirection();
  49.                 Console.WriteLine($"{header}");
  50.                 Console.WriteLine($"Сформировано направление: {trainDirection}");
  51.                 _train = new Train(trainDirection);
  52.  
  53.                 Console.WriteLine($"\nВ данном направлении продано: ");
  54.                 SellTickets();
  55.                 ShowSoldedTickets();
  56.  
  57.                 Console.Write($"\nНажмите любую для расчета необходимого количества вагонов: ");
  58.                 Console.ReadKey();
  59.                 _train.CalculateWagons(_soldedTickets);
  60.  
  61.                 Console.WriteLine($"\n\nНеобходимое количество вагонов добавлено к поезду");
  62.                 _train.ShowRightNumberOfWagons();
  63.  
  64.                 Console.WriteLine($"\nНажмите для отправки поезда по маршруту {trainDirection}");
  65.                 Console.ReadKey();
  66.  
  67.                 _train = null;
  68.                 Console.WriteLine($"поезд отправлен");
  69.  
  70.                 Console.ReadKey();
  71.                 Console.Clear();
  72.             }
  73.         }
  74.  
  75.         private void AddStations()
  76.         {
  77.             _stations.Add(new Station("Барановичи"));
  78.             _stations.Add(new Station("Бобруйск"));
  79.             _stations.Add(new Station("Брест"));
  80.             _stations.Add(new Station("Витебск"));
  81.             _stations.Add(new Station("Гомель"));
  82.             _stations.Add(new Station("Гродно"));
  83.             _stations.Add(new Station("Минск"));
  84.             _stations.Add(new Station("Могилев"));
  85.             _stations.Add(new Station("Мозырь"));
  86.             _stations.Add(new Station("Пинск"));
  87.             _stations.Add(new Station("Полоцк"));
  88.             _stations.Add(new Station("на Берлин"));
  89.         }
  90.  
  91.         private string CreateTrainDirection()
  92.         {
  93.             string departurePoint = "";
  94.             string arrivePoint = "";
  95.             bool isSame = true;
  96.  
  97.             Random rand = new Random();
  98.  
  99.             while (isSame)
  100.             {
  101.                 departurePoint = _stations[rand.Next(0, _stations.Count)].Name;
  102.                 arrivePoint = _stations[rand.Next(0, _stations.Count)].Name;
  103.  
  104.                 if (departurePoint != arrivePoint)
  105.                 {
  106.                     isSame = false;
  107.                 }
  108.             }
  109.  
  110.             return departurePoint + " - " + arrivePoint;
  111.         }
  112.  
  113.         private void SellTickets()
  114.         {
  115.             int maxTickets = 271;
  116.             int size = _train.TakeSizehWagonTypes();            
  117.             _soldedTickets = new int[size];
  118.             Random rand = new Random();
  119.  
  120.             for (int i = 0; i < _soldedTickets.Length; i++)
  121.             {
  122.                 _soldedTickets[i] = rand.Next(0, maxTickets);
  123.             }
  124.         }
  125.  
  126.         private void ShowSoldedTickets()
  127.         {
  128.             for (int i = 0; i < _soldedTickets.Length; i++)
  129.             {
  130.                 Console.WriteLine($"{_train.TakeWagonTypes(i)}х билетов:\t{_soldedTickets[i]}");
  131.             }
  132.         }
  133.     }
  134.  
  135.     class Train
  136.     {
  137.         private string _direction;
  138.         private List<Wagon> _wagonsTypes = new List<Wagon>();
  139.         private int[] _numberOfWagons;
  140.  
  141.         public Train(string direction)
  142.         {
  143.             _direction = direction;
  144.  
  145.             _wagonsTypes.Add(new Wagon("спальны", 18));
  146.             _wagonsTypes.Add(new Wagon("купейны", 36));
  147.             _wagonsTypes.Add(new Wagon("плацкартны", 54));
  148.  
  149.             _numberOfWagons = new int[_wagonsTypes.Count];
  150.         }
  151.  
  152.         public string TakeWagonTypes(int index)
  153.         {
  154.             return _wagonsTypes[index].WagonType;
  155.         }
  156.  
  157.         public int TakeSizehWagonTypes()
  158.         {
  159.             return _wagonsTypes.Count;
  160.         }
  161.  
  162.         public void CalculateWagons(int[] soldedTickets)
  163.         {
  164.  
  165.             for (int i = 0; i < _wagonsTypes.Count; i++)
  166.             {
  167.                 _numberOfWagons[i] = soldedTickets[i] / _wagonsTypes[i].Seats + 1;
  168.  
  169.                 if(soldedTickets[i] % _wagonsTypes[i].Seats == 0)
  170.                 {
  171.                     _numberOfWagons[i]--;
  172.                 }
  173.             }
  174.         }
  175.  
  176.         public void ShowRightNumberOfWagons()
  177.         {
  178.             for (int i = 0; i < _numberOfWagons.Length; i++)
  179.             {
  180.                 Console.WriteLine($"{_wagonsTypes[i].WagonType}х вагонов: {_numberOfWagons[i]}");
  181.             }
  182.         }
  183.     }
  184.  
  185.     class Wagon
  186.     {  
  187.         private int _soldedTickets;
  188.  
  189.         public string WagonType { get; private set; }
  190.         public int Seats { get; private set; }
  191.  
  192.         public Wagon(string wagonType, int seats)
  193.         {
  194.             WagonType = wagonType;
  195.             Seats = seats;
  196.         }
  197.  
  198.         public Wagon(string wagonType, int seats, int soldedTickets)
  199.         {
  200.             WagonType = wagonType;
  201.             Seats = seats;
  202.             _soldedTickets = soldedTickets;
  203.         }
  204.     }
  205.  
  206.     class Station
  207.     {
  208.         public string Name { get; private set; }
  209.  
  210.         public Station(string name)
  211.         {
  212.             Name = name;
  213.         }
  214.     }
  215. }
  216.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement