ranee

Поезд

Apr 1st, 2023
837
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.59 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> _train = new List<Train>();
  34.  
  35.         public void CreateTrain(BoxOffice boxOffice)
  36.         {
  37.             _directions = boxOffice.GetDirection();
  38.            
  39.             if(_directions.Count == 0)
  40.             {
  41.                 Console.WriteLine("Ошибка");
  42.             }
  43.             else
  44.             {
  45.                 int lastDirection = _directions.Count - 1;
  46.                 Direction chosenDirection = _directions[lastDirection];
  47.                 Train train = new Train(chosenDirection, CalculateVagon(boxOffice.CountBusiness, _businessWagon.seats), CalculateVagon(boxOffice.CountEconomy, _economyWagon.seats));
  48.                 _train.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 = 40;
  65.            
  66.             for (int i = 0; i < _train.Count; i++)
  67.             {
  68.                 Train train = _train[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> _ticket = new List<Ticket>();
  80.         private List<Direction> _direction = 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.             _direction.Add(new Direction(from, lastCity));
  91.         }
  92.  
  93.         public int GetDirectionCount()
  94.         {
  95.             return _direction.Count;
  96.         }
  97.  
  98.         public List<Direction> GetDirection()
  99.         {
  100.             List<Direction> directionNew = new List<Direction>(_direction);
  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.             Direction currentDirection = _direction[_direction.Count - 1];
  122.  
  123.             for (int i = 0; i < _clients.Count; i++)
  124.             {
  125.                 Client client = _clients[i];
  126.                
  127.                 if (client.Money > priceBusunis)
  128.                 {
  129.                     Ticket ticket = new Ticket( priceBusunis);
  130.                     _ticket.Add(ticket);
  131.                     SellTicket(priceBusunis);
  132.                     client.Buy(priceBusunis);
  133.                     CountBusiness++;
  134.                 }
  135.                 else
  136.                 {
  137.                     Ticket ticket = new Ticket(priceEconom);
  138.                     _ticket.Add(ticket);
  139.                     SellTicket(priceEconom);
  140.                     client.Buy(priceEconom);
  141.                     CountEconomy++;
  142.                 }
  143.             }
  144.            
  145.             Console.WriteLine($"Продано {CountBusiness} бизнес и {CountEconomy} эконом билетов.");
  146.         }
  147.  
  148.         public void RestoreCountTicket()
  149.         {
  150.             CountEconomy = 0;
  151.             CountBusiness = 0;
  152.         }
  153.  
  154.         public void SellTicket(int price)
  155.         {
  156.             _money += price;
  157.         }
  158.  
  159.         public void Display()
  160.         {
  161.             Console.WriteLine($"Деньги в кассе вокзала: {_money}");
  162.            
  163.             if(_direction.Count==0)
  164.             {
  165.                 Console.WriteLine($"Направление: Не создано.");
  166.             }
  167.             else
  168.             {
  169.                 for (int i = 0; i < _direction.Count; i++)
  170.                 {
  171.                     Direction direction = _direction[i];
  172.                     direction.ShowInfo();
  173.                 }
  174.             }
  175.         }
  176.     }
  177.  
  178.     class Direction
  179.     {
  180.         public Direction(string from, string lastCity)
  181.         {
  182.             From = from;
  183.             LastCity = lastCity;
  184.         }
  185.  
  186.         public string From { get; private set; }
  187.         public string LastCity { get; private set; }
  188.  
  189.         public void ShowInfo()
  190.         {
  191.             Console.WriteLine($"Направление:{From}-{LastCity}");
  192.         }
  193.     }
  194.  
  195.     class Ticket
  196.     {
  197.         private string _econom = "Эконом";
  198.         private string _businus = "Бизнес";
  199.         private int _price;
  200.         private string _type;
  201.  
  202.         public Ticket(int price)
  203.         {
  204.             price = _price;
  205.             int priceBusunis = 400;
  206.  
  207.             if (price >= priceBusunis)
  208.             {
  209.                 _type = _businus;
  210.             }
  211.             else
  212.             {
  213.                 _type = _econom;
  214.             }
  215.         }
  216.     }
  217.  
  218.     class Client
  219.     {
  220.         private int _minimumAmountOfMoney = 300;
  221.         private int _maximumAmountOfMoney = 600;
  222.         private static int _idCounter = 1;
  223.         private Random _random = new Random();
  224.  
  225.         public Client()
  226.         {
  227.             Money = _random.Next(_minimumAmountOfMoney, _maximumAmountOfMoney);
  228.             UniqueNumber = _idCounter++;
  229.         }
  230.  
  231.         public int Money { get; private set; }
  232.         public int UniqueNumber { get; private set; }
  233.  
  234.         public void Buy(int price)
  235.         {
  236.             Money -= price;
  237.         }
  238.     }
  239.  
  240.     class Train
  241.     {
  242.         private static int _idCounter = 1;
  243.         private Direction _direction;
  244.         private List<Wagon> _wagons = new List<Wagon>();
  245.        
  246.         public Train(Direction direction, int businessWagons, int economyWagons)
  247.         {
  248.             UniqueNumber = _idCounter++;
  249.             _direction = direction;
  250.            
  251.             for (int i = 0; i < businessWagons; i++)
  252.             {
  253.                 _wagons.Add(new BusinessWagon());
  254.             }
  255.  
  256.             for (int i = 0; i < economyWagons; i++)
  257.             {
  258.                 _wagons.Add(new EconomyWagon());
  259.             }
  260.         }
  261.  
  262.         public int UniqueNumber { get; private set; }
  263.  
  264.         public int WagonCount()
  265.         {
  266.             return _wagons.Count;
  267.         }
  268.  
  269.         public void ShowInfo()
  270.         {
  271.             Console.WriteLine($"Номер поезда {UniqueNumber}, количество вагонов {WagonCount()}, поезд в пути.");
  272.         }
  273.     }
  274.     class Wagon
  275.     {
  276.         protected int Seats;
  277.  
  278.         public int seats
  279.         {
  280.             get { return Seats; }
  281.             set { Seats = value; }
  282.         }
  283.     }
  284.  
  285.     class BusinessWagon : Wagon
  286.     {
  287.         public BusinessWagon()
  288.         {
  289.             Seats = 30;
  290.         }
  291.     }
  292.  
  293.     class EconomyWagon : Wagon
  294.     {
  295.         public EconomyWagon()
  296.         {
  297.             Seats = 54;
  298.         }
  299.     }
  300. }
  301.  
Advertisement
Add Comment
Please, Sign In to add comment