Advertisement
MaoChessy

Task 32 - fix 2

Nov 11th, 2020 (edited)
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace CLight
  5. {
  6.     class Program
  7.     {
  8.         public static void Main()
  9.         {
  10.             List<Carriage> carriage = new List<Carriage>() {new Carriage(10, "Малый вагон"), new Carriage(20, "Средний вагон"), new Carriage(30, "Большой вагон") };
  11.             Depo depo = new Depo(carriage);
  12.             depo.Work();
  13.         }
  14.     }
  15.     public static class RandomStatic
  16.     {
  17.         static private Random _rand = new Random();
  18.         static public int GetNext(int min, int max)
  19.         {
  20.             return _rand.Next(min, max);
  21.  
  22.         }
  23.     }
  24.     public static class Messager
  25.     {
  26.         static public void ShowMessageWithColor(string message, ConsoleColor color, bool delay)
  27.         {
  28.             ConsoleColor defaultColor = Console.ForegroundColor;
  29.             Console.ForegroundColor = color;
  30.             Console.WriteLine(message);
  31.             Console.ForegroundColor = defaultColor;
  32.             if (delay)
  33.                 Console.ReadKey();
  34.         }
  35.     }
  36.     class Depo
  37.     {
  38.         private List<Carriage> _availableCarriages;
  39.         private Direction _direction;
  40.         public Depo(List<Carriage> availableCarriages)
  41.         {
  42.             _availableCarriages = availableCarriages;
  43.         }
  44.         public void Work()
  45.         {
  46.             bool isOpen = true;
  47.             int step = 0;
  48.             while (isOpen)
  49.             {
  50.                 Console.Clear();
  51.                 if(step == 0)
  52.                 {
  53.                     Messager.ShowMessageWithColor("Ещё нет созданного направления. \n\n\n", ConsoleColor.White, false);
  54.                     Console.WriteLine("Enter - Создать направление \nEsc - выход");
  55.                     switch (Console.ReadKey().Key)
  56.                     {
  57.                         case ConsoleKey.Enter:
  58.                             Messager.ShowMessageWithColor("Вы получили новое направление. Оформите его!", ConsoleColor.Green, true);
  59.                             _direction = new Direction();
  60.                             step = 1;
  61.                             break;
  62.                         case ConsoleKey.Escape:
  63.                             isOpen = false;
  64.                             break;
  65.                     }
  66.                 }
  67.                 else if(step == 1)
  68.                 {
  69.                     Messager.ShowMessageWithColor("Направление есть. \n\n\n", ConsoleColor.White, false);
  70.                     Console.WriteLine("Enter - Создать поезд");
  71.                     switch (Console.ReadKey().Key)
  72.                     {
  73.                         case ConsoleKey.Enter:
  74.                             _direction.CreateTrain();
  75.                             Messager.ShowMessageWithColor("Вы  создали поезд", ConsoleColor.Green, true);
  76.                             step = 2;
  77.                             break;
  78.                     }
  79.                 }
  80.                 else if (step == 2)
  81.                 {
  82.                     ShowInfo();
  83.                     Messager.ShowMessageWithColor("\n\n\nМеню продажи билетов", ConsoleColor.White, false);
  84.                     Console.WriteLine("Enter - Продать билеты");
  85.                     switch (Console.ReadKey().Key)
  86.                     {
  87.                         case ConsoleKey.Enter:
  88.                             _direction.SoldTicket();
  89.                             step = 3;
  90.                             break;
  91.                     }
  92.                 }
  93.                 else if (step == 3)
  94.                 {
  95.                     ShowInfo();
  96.                     Messager.ShowMessageWithColor("\n\nМеню создание вагонов поезда", ConsoleColor.White, false);
  97.                     Console.WriteLine("Enter - создать вагоны поезда");
  98.                     switch (Console.ReadKey().Key)
  99.                     {
  100.                         case ConsoleKey.Enter:
  101.                             _direction.Train.FormTrain(_availableCarriages,_direction.Passenger);
  102.                             Messager.ShowMessageWithColor("Вы сформировали состав", ConsoleColor.Green, true);
  103.                             step = 4;
  104.                             break;
  105.                     }
  106.                 }
  107.                 else if (step == 4)
  108.                 {
  109.                     ShowInfo();
  110.                     Messager.ShowMessageWithColor("\n\n\nМеню запуска поезда", ConsoleColor.White, false);
  111.                     Console.WriteLine("Enter - Запустить поезд");
  112.                     switch (Console.ReadKey().Key)
  113.                     {
  114.                         case ConsoleKey.Enter:
  115.                             _direction.Train.Start();
  116.                             step = 0;
  117.                             _direction = null;
  118.                             break;
  119.                        
  120.                     }
  121.                 }
  122.             }
  123.         }
  124.         private void ShowInfo()
  125.         {
  126.             Console.WriteLine($"Направление {_direction.DirectionFrom} - {_direction.DirectionTo}");
  127.             Messager.ShowMessageWithColor($"Вагоны в составе", ConsoleColor.Yellow, false);
  128.             Console.WriteLine(_direction.Train.GetInfoCarriage());
  129.             Messager.ShowMessageWithColor($"Пассажиров/Доступных мест {_direction.Passenger}/{_direction.Train.GetAvailableSeats()}", ConsoleColor.White, false);
  130.         }
  131.     }
  132.     class Direction
  133.     {
  134.         public int Passenger { get; private set; }
  135.         public string DirectionFrom { get; private set; } = "";
  136.         public string DirectionTo { get; private set; } = "";
  137.         public Train Train { get; private set; }
  138.         public Direction()
  139.         {
  140.             while (DirectionFrom == "" || DirectionTo == "")
  141.             {
  142.                 Console.Clear();
  143.                 Messager.ShowMessageWithColor("Введите направление откуда: ", ConsoleColor.White, false);
  144.                 DirectionFrom = Console.ReadLine();
  145.                 Messager.ShowMessageWithColor("Введите направление куда: ", ConsoleColor.White, false);
  146.                 DirectionTo = Console.ReadLine();
  147.                 if (DirectionFrom == "" || DirectionTo == "")
  148.                     Messager.ShowMessageWithColor("Было введено пустое направление. Введите ещё раз.", ConsoleColor.Red, true);
  149.             }
  150.         }
  151.         public void CreateTrain()
  152.         {
  153.             Train = new Train();
  154.         }
  155.         public void SoldTicket()
  156.         {
  157.             Passenger = RandomStatic.GetNext(50, 300);
  158.             Messager.ShowMessageWithColor("Билет проданы", ConsoleColor.Green, true);
  159.         }
  160.     }
  161.     class Train
  162.     {
  163.        
  164.         private List<Carriage> _listCarriage = new List<Carriage>();
  165.         public void Start()
  166.         {
  167.             Messager.ShowMessageWithColor("Поезд запущен!", ConsoleColor.Green, true);
  168.         }
  169.         public int GetAvailableSeats()
  170.         {
  171.             int result = 0;
  172.             foreach (Carriage car in _listCarriage)
  173.             {
  174.                 result += car.AmountPassengers;
  175.             }
  176.             return result;
  177.         }
  178.         public string GetInfoCarriage()
  179.         {
  180.             string result = "";
  181.             for (int i = 0; i < _listCarriage.Count; i++)
  182.             {
  183.                 result += $"{i}:{_listCarriage[i].Name}\n";
  184.             }
  185.             return result;
  186.         }
  187.         public void FormTrain(List<Carriage> carriages, int passenger)
  188.         {
  189.             carriages.Sort(delegate (Carriage x, Carriage y)
  190.             {
  191.                 if (x.AmountPassengers > y.AmountPassengers) return -1;
  192.                 else if (x.AmountPassengers < y.AmountPassengers) return 1;
  193.                 else return 0;
  194.             });
  195.             int index = 0;
  196.             while (GetAvailableSeats() < passenger)
  197.             {
  198.                 if (carriages[index].AmountPassengers <= passenger - GetAvailableSeats())
  199.                     _listCarriage.Add(carriages[index]);
  200.                 else
  201.                     index++;
  202.                 if (index >= carriages.Count)
  203.                     break;
  204.             }
  205.             if(passenger-GetAvailableSeats()>0)
  206.                 _listCarriage.Add(carriages[carriages.Count - 1]);
  207.         }
  208.     }
  209.     class Carriage
  210.     {
  211.         public string Name { get; private set; }
  212.         public int AmountPassengers { get; private set; }
  213.         public Carriage(int amountPassengers, string name)
  214.         {
  215.             AmountPassengers = amountPassengers;
  216.             Name = name;
  217.         }
  218.     }
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement