Advertisement
ranee

Поезд

Apr 2nd, 2023 (edited)
664
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.29 KB | None | 0 0
  1. using System.Net.Sockets;
  2.  
  3. namespace PassengerTrainConfigurator
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             BoxOffice boxOffice = new BoxOffice();
  10.             RailwayStation railwayStation = new RailwayStation();
  11.  
  12.             int maximumNumberOfDirections = 10;
  13.  
  14.             while (boxOffice.GetDirectionCount() < maximumNumberOfDirections)
  15.             {
  16.                 Console.Clear();
  17.                 boxOffice.Display();
  18.                 railwayStation.Display();
  19.                 boxOffice.CreateRoute();
  20.                 boxOffice.CreateNewClients();
  21.                 boxOffice.SellTicket();
  22.                 railwayStation.CreateTrain(boxOffice);
  23.                 Console.ReadKey();
  24.             }
  25.         }
  26.     }
  27.  
  28.     class RailwayStation
  29.     {
  30.         private List<Direction> _directions;
  31.         private BusinessWagon _businessWagon = new BusinessWagon();
  32.         private EconomyWagon _economyWagon = new EconomyWagon();
  33.         private List<Train> _trains = new List<Train>();
  34.  
  35.         public void CreateTrain(BoxOffice boxOffice)
  36.         {
  37.             _directions = boxOffice.GetDirection();
  38.             int lastDirection = _directions.Count - 1;
  39.             Direction chosenDirection = _directions[lastDirection];
  40.            
  41.             if(_directions.Count == 0)
  42.             {
  43.                 Console.WriteLine("Ошибка");
  44.             }
  45.             else
  46.             {
  47.                 Train train = new Train(chosenDirection, CalculateVagon(boxOffice.CountBusiness, _businessWagon.seats), CalculateVagon(boxOffice.CountEconomy, _economyWagon.seats));
  48.                 _trains.Add(train);
  49.             }
  50.            
  51.             Console.WriteLine($"Состав готов. Состоит из {CalculateVagon(boxOffice.CountBusiness, _businessWagon.seats)} бизнес и " +
  52.                               $"{CalculateVagon(boxOffice.CountEconomy, _economyWagon.seats)} эконом вагонов.");
  53.  
  54.             boxOffice.RestoreCountTicket();
  55.         }
  56.        
  57.         private int CalculateVagon(int countTickets, int totalNumberOfSeatsInWagon)
  58.         {
  59.             return (int)Math.Ceiling((double)countTickets / totalNumberOfSeatsInWagon);
  60.         }
  61.  
  62.         public void Display()
  63.         {
  64.             int yAxisIndentation = 0;
  65.            
  66.             for (int i = 0; i < _trains.Count; i++)
  67.             {
  68.                 Train train = _trains[i];
  69.                 Console.SetCursorPosition(yAxisIndentation, i + 1);
  70.                 train.ShowInfo();
  71.             }
  72.         }
  73.     }
  74.  
  75.     class BoxOffice
  76.     {
  77.         private int _money = 0;
  78.         private List<Client> _clients = new List<Client>();
  79.         private List<Ticket> _tickets = new List<Ticket>();
  80.         private List<Direction> _directions = new List<Direction>();
  81.        
  82.         public int CountBusiness { get; private set; }
  83.         public int CountEconomy { get; private set; }
  84.        
  85.         public void CreateRoute()
  86.         {
  87.             string from = "Екатеринрург";
  88.             Console.WriteLine("Куда поедет поезд: ");
  89.             string lastCity = Console.ReadLine();
  90.             _directions.Add(new Direction(from, lastCity));
  91.         }
  92.  
  93.         public int GetDirectionCount()
  94.         {
  95.             return _directions.Count;
  96.         }
  97.  
  98.         public List<Direction> GetDirection()
  99.         {
  100.             List<Direction> directionNew = new List<Direction>(_directions);
  101.             return directionNew;
  102.         }
  103.  
  104.         public void CreateNewClients()
  105.         {
  106.             _clients.Clear();
  107.             Random random = new Random();
  108.             int count = random.Next(5, 501);
  109.            
  110.             for (int i = 0; i < count; i++)
  111.             {
  112.                 _clients.Add(new Client());
  113.             }
  114.         }
  115.  
  116.         public void SellTicket()
  117.         {
  118.             int priceEconom = 300;
  119.             int priceBusunis = 400;
  120.  
  121.             for (int i = 0; i < _clients.Count; i++)
  122.             {
  123.                 Client client = _clients[i];
  124.                
  125.                 if (client.Money > priceBusunis)
  126.                 {
  127.                     Ticket ticket = new Ticket( priceBusunis);
  128.                     _tickets.Add(ticket);
  129.                     SellTicket(priceBusunis);
  130.                     client.Buy(priceBusunis);
  131.                     CountBusiness++;
  132.                 }
  133.                 else
  134.                 {
  135.                     Ticket ticket = new Ticket(priceEconom);
  136.                     _tickets.Add(ticket);
  137.                     SellTicket(priceEconom);
  138.                     client.Buy(priceEconom);
  139.                     CountEconomy++;
  140.                 }
  141.             }
  142.            
  143.             Console.WriteLine($"Продано {CountBusiness} бизнес и {CountEconomy} эконом билетов.");
  144.         }
  145.  
  146.         public void RestoreCountTicket()
  147.         {
  148.             CountEconomy = 0;
  149.             CountBusiness = 0;
  150.         }
  151.  
  152.         public void SellTicket(int price)
  153.         {
  154.             _money += price;
  155.         }
  156.  
  157.         public void Display()
  158.         {
  159.             Console.WriteLine($"Деньги в кассе вокзала: {_money}");
  160.            
  161.             if(_directions.Count==0)
  162.             {
  163.                 Console.WriteLine($"Направление: Не создано.");
  164.             }
  165.         }
  166.     }
  167.  
  168.     class Direction
  169.     {
  170.         public Direction(string from, string lastCity)
  171.         {
  172.             From = from;
  173.             LastCity = lastCity;
  174.         }
  175.  
  176.         public string From { get; private set; }
  177.         public string LastCity { get; private set; }
  178.     }
  179.  
  180.     class Ticket
  181.     {
  182.         private string _econom = "Эконом";
  183.         private string _businus = "Бизнес";
  184.         private int _price;
  185.         private string _type;
  186.  
  187.         public Ticket(int price)
  188.         {
  189.             _price = price;
  190.             int priceBusunis = 400;
  191.  
  192.             if (price >= priceBusunis)
  193.             {
  194.                 _type = _businus;
  195.             }
  196.             else
  197.             {
  198.                 _type = _econom;
  199.             }
  200.         }
  201.     }
  202.  
  203.     class Client
  204.     {
  205.         private int _minimumAmountOfMoney = 300;
  206.         private int _maximumAmountOfMoney = 600;
  207.         private static int _idCounter = 1;
  208.         private Random _random = new Random();
  209.  
  210.         public Client()
  211.         {
  212.             Money = _random.Next(_minimumAmountOfMoney, _maximumAmountOfMoney);
  213.             UniqueNumber = _idCounter++;
  214.         }
  215.  
  216.         public int Money { get; private set; }
  217.         public int UniqueNumber { get; private set; }
  218.  
  219.         public void Buy(int price)
  220.         {
  221.             Money -= price;
  222.         }
  223.     }
  224.  
  225.     class Train
  226.     {
  227.         private static int _idCounter = 1;
  228.         private Direction _direction;
  229.         private List<Wagon> _wagons = new List<Wagon>();
  230.        
  231.         public Train(Direction direction, int businessWagons, int economyWagons)
  232.         {
  233.             UniqueNumber = _idCounter++;
  234.             _direction = direction;
  235.            
  236.             for (int i = 0; i < businessWagons; i++)
  237.             {
  238.                 _wagons.Add(new BusinessWagon());
  239.             }
  240.  
  241.             for (int i = 0; i < economyWagons; i++)
  242.             {
  243.                 _wagons.Add(new EconomyWagon());
  244.             }
  245.         }
  246.  
  247.         public int UniqueNumber { get; private set; }
  248.  
  249.         public int WagonCount()
  250.         {
  251.             return _wagons.Count;
  252.         }
  253.  
  254.         public void ShowInfo()
  255.         {
  256.             Console.WriteLine($"{ShowDirection()}    Номер поезда {UniqueNumber}, количество вагонов {WagonCount()}, поезд в пути.");
  257.         }
  258.  
  259.         public string ShowDirection()
  260.         {
  261.             return $"Направление: {_direction.From} - {_direction.LastCity}";
  262.         }
  263.     }
  264.     class Wagon
  265.     {
  266.         protected int Seats;
  267.  
  268.         public int seats
  269.         {
  270.             get { return Seats; }
  271.             set { Seats = value; }
  272.         }
  273.     }
  274.  
  275.     class BusinessWagon : Wagon
  276.     {
  277.         public BusinessWagon()
  278.         {
  279.             Seats = 30;
  280.         }
  281.     }
  282.  
  283.     class EconomyWagon : Wagon
  284.     {
  285.         public EconomyWagon()
  286.         {
  287.             Seats = 54;
  288.         }
  289.     }
  290. }
  291.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement