Advertisement
ZhongNi

Train dispatcher (3)

Sep 12th, 2024 (edited)
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.08 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace Classes
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             TrainDispatcher dispatcher = new TrainDispatcher();
  12.             dispatcher.WorkMenu();
  13.         }
  14.     }
  15.  
  16.     class TrainDispatcher
  17.     {
  18.         private List<Train> _trains = new List<Train>();
  19.         private Random _random = new Random();
  20.  
  21.         public void WorkMenu()
  22.         {
  23.             Console.CursorVisible = false;
  24.             Console.WriteLine($"To create a train press anything...\nTo exit press 0.");
  25.  
  26.             while (Console.ReadKey().Key != ConsoleKey.D0)
  27.             {
  28.                 Console.Clear();
  29.                 CreateTrain();
  30.                 Console.WriteLine($"\nTo create a train press anything...\nTo exit press 0.\n");
  31.                 ShowTrains();
  32.             }
  33.         }
  34.  
  35.         private int SellTickets()
  36.         {
  37.             int maxPassengers = 100;
  38.             int minPassengers = 1;
  39.             int numberPassengers = _random.Next(minPassengers, maxPassengers + 1);
  40.             Console.WriteLine($"{numberPassengers} tickets sold\n");
  41.  
  42.             return numberPassengers;
  43.         }
  44.  
  45.         private List<Car> AttachCars()
  46.         {
  47.             List<Car> cars = new List<Car>();
  48.             int numberPassengers = SellTickets();
  49.             int index = 1;
  50.             int capacityCar = 10;
  51.  
  52.             while (numberPassengers > 0)
  53.             {
  54.                 int maxPassengerInCar = capacityCar;
  55.                 int minPassengerInCar = 5;
  56.                 int passengerInCar = _random.Next(minPassengerInCar, maxPassengerInCar + 1);
  57.  
  58.                 passengerInCar = numberPassengers - passengerInCar < 0 ? numberPassengers : passengerInCar;
  59.  
  60.                 numberPassengers -= passengerInCar;
  61.                 Console.WriteLine($"in {index} car added {passengerInCar} passengers");
  62.                 index++;
  63.                 cars.Add(new Car(passengerInCar, capacityCar));
  64.             }
  65.  
  66.             Console.WriteLine($"\n{cars.Count} attached cars");
  67.  
  68.             return cars;
  69.         }
  70.  
  71.         private void CreateTrain()
  72.         {
  73.             Direction _direction = new Direction();
  74.             string direction = _direction.CreateDirection();
  75.             Console.WriteLine($"{direction} train created\n");
  76.  
  77.             _trains.Add(new Train(direction, AttachCars()));
  78.         }
  79.  
  80.         private void ShowTrains()
  81.         {
  82.             string train = null;
  83.             string trainSign = ">>";
  84.             int trainsShownInDispatcher = 10;
  85.  
  86.             for (int i = 0; i < trainsShownInDispatcher; i++)
  87.             {
  88.                 int index = _trains.Count - 1 - i;
  89.  
  90.                 i = _trains.Count - 1 - (i + 1) >= 0 ? i : trainsShownInDispatcher;
  91.  
  92.                 List<Car> cars = new List<Car>(index);
  93.  
  94.                 for (int k = 0; k < _trains[index].Count; k++)
  95.                 {
  96.                     cars.Add(_trains[index].GetCarElement(k));
  97.                 }
  98.  
  99.                 for (int j = _trains[index].Count - 1; j >= 0; j--)
  100.                 {
  101.                     train += cars[j].Content + ".";
  102.                 }
  103.  
  104.                 Console.WriteLine(_trains[index].Direction + "  " + train + trainSign);
  105.                 train = null;
  106.             }
  107.         }
  108.     }
  109.  
  110.     class Train
  111.     {
  112.         private List<Car> _cars = new List<Car>();
  113.  
  114.         public Train(string direction, List<Car> cars)
  115.         {
  116.             Direction = direction;
  117.             _cars = cars;
  118.         }
  119.  
  120.         public string Direction { get; private set; }
  121.  
  122.         public Car GetCarElement(int index)
  123.         {
  124.             return _cars.ElementAt(index);
  125.         }
  126.  
  127.         public int Count => _cars.Count;
  128.     }
  129.  
  130.     class Car
  131.     {
  132.         public Car(int content, int capacity)
  133.         {
  134.             Capacity = capacity;
  135.             Content = content;
  136.         }
  137.  
  138.         public int Capacity { get; private set; }
  139.         public int Content { get; private set; }
  140.     }
  141.  
  142.     class Direction
  143.     {
  144.         public Direction()
  145.         {
  146.             PointStart = CreatePointStart();
  147.             PointFinish = CreatePointFinish();
  148.         }
  149.         public char PointStart { get; private set; }
  150.         public char PointFinish { get; private set; }
  151.  
  152.         private char[] _points = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
  153.         private Random _random = new Random();
  154.  
  155.         public char CreatePointStart()
  156.         {
  157.             PointStart = _points[_random.Next(_points.Length)];
  158.  
  159.             return PointStart;
  160.         }
  161.  
  162.         public char CreatePointFinish()
  163.         {
  164.             bool isEqual = true;
  165.  
  166.             while (isEqual)
  167.             {
  168.                 PointFinish = _points[_random.Next(_points.Length)];
  169.                 isEqual = PointStart == PointFinish;
  170.             }
  171.  
  172.             return PointFinish;
  173.         }
  174.  
  175.         public string CreateDirection()
  176.         {
  177.             string direction = PointStart + " - " + PointFinish;
  178.  
  179.             return direction;
  180.         }
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement