Torgach

passengerTrainConfigurator

Apr 4th, 2021 (edited)
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.97 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 trains
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             TicketOffice ticketOffice = new TicketOffice();
  14.             ticketOffice.Work();
  15.         }
  16.     }
  17.  
  18.     class TicketOffice
  19.     {
  20.         private List<Train> _trains = new List<Train>()
  21.         {
  22.             new Train(1, 0, "Москва", "12/A", "СПБ", "4F", false),
  23.             new Train(2, 0, "LA", "1/G", "NY", "2K", false)
  24.         };
  25.         private Passengers _passengers;
  26.         private Dictionary<Train, Passengers> _directions = new Dictionary<Train, Passengers>();
  27.  
  28.         public void Work()
  29.         {
  30.             bool isWork = true;
  31.             while (isWork)
  32.             {
  33.                 ShowInfo();
  34.  
  35.                 Console.WriteLine($"\n[1] - Создать направление;\n" +
  36.                 $"[2] - Продать билеты\n" +
  37.                 $"[3] - Сформировать поезд\n" +
  38.                 $"[4] - Отправить поезд\n" +
  39.                 $"[5] - Выход");
  40.                 Console.Write("Ввод: ");
  41.  
  42.                 switch (Console.ReadLine())
  43.                 {
  44.                     case "1":
  45.                         CreateDirection();
  46.                         break;
  47.                     case "2":
  48.                         SellTickets();
  49.                         break;
  50.                     case "3":
  51.                         CreateWagons();
  52.                         break;
  53.                     case "4":
  54.                         SendTrain();
  55.                         break;
  56.                     case "5":
  57.                         isWork = false;
  58.                         break;
  59.                     default:
  60.                         Console.WriteLine("Ошибка!");
  61.                         break;
  62.                 }
  63.             }
  64.         }
  65.  
  66.         private void CreateDirection()
  67.         {
  68.             Console.Write("Поезд отправится из города: ");
  69.             string directionFrom = Console.ReadLine();
  70.  
  71.             Console.Write("Поезд отправится с платформы: ");
  72.             string platformFrom = Console.ReadLine();
  73.  
  74.             Console.Write("Поезд отправится в город: ");
  75.             string directionToThe = Console.ReadLine();
  76.  
  77.             Console.Write("Поезд прибывает на платформу: ");
  78.             string platformToThe = Console.ReadLine();
  79.  
  80.             Train train = new Train(_trains.Count + 1, 0, directionFrom, platformFrom, directionToThe, platformToThe);
  81.             _trains.Add(train);
  82.         }
  83.  
  84.         private void SellTickets()
  85.         {
  86.             Console.Write("Укажите номер поезда: ");
  87.  
  88.             TryGetTrainNumber(out int userNumber, _trains);
  89.  
  90.             if (IsTrainReady(_directions, userNumber) == false)
  91.             {
  92.                 Console.WriteLine("Нельзя повторно продать билеты на рейс!");
  93.                 return;
  94.             }
  95.  
  96.             Random rand = new Random();
  97.             _passengers = new Passengers(rand.Next(1, 20));
  98.             _passengers.SetTickets();
  99.  
  100.             _directions.Add(_trains[userNumber], _passengers);
  101.         }
  102.  
  103.         private void CreateWagons()
  104.         {
  105.             if (DirectionsExists(_directions) == false)
  106.                 return;
  107.  
  108.             Console.Write("Укажите номер поезда: ");
  109.             if (TryGetDirectionNumber(out int userNumber, _directions) == false)
  110.                 return;
  111.  
  112.             if (IsTrainReady(_directions, userNumber, false) == false)
  113.                 return;
  114.  
  115.             if (_directions.Keys.ElementAt(userNumber).Wagons > 0)
  116.             {
  117.                 Console.WriteLine("Вагоны уже прицеплены!");
  118.                 return;
  119.             }
  120.  
  121.             Console.WriteLine("Прицепляем вагонгы...");
  122.             _directions.Keys.ElementAt(userNumber).CreateWagons(_directions.Values.ElementAt(userNumber).Tickets);
  123.  
  124.             Console.Write($"К поезду присоединили {_directions.Keys.ElementAt(userNumber).Wagons} шт. вагонов");
  125.         }
  126.  
  127.         private void SendTrain()
  128.         {
  129.             if (DirectionsExists(_directions) == false)
  130.                 return;
  131.  
  132.             Console.Write("Укажите номер поезда: ");
  133.  
  134.             if (TryGetDirectionNumber(out int userNumber, _directions) == false)
  135.                 return;
  136.  
  137.             if (IsTrainReady(_directions, userNumber) == false)
  138.                 return;
  139.  
  140.             if (_directions.Keys.ElementAt(userNumber).IsTrainSent)
  141.             {
  142.                 Console.WriteLine("Поезд уже отправлен!");
  143.                 return;
  144.             }
  145.  
  146.             _directions.Keys.ElementAt(userNumber).SetSendStatus(true);
  147.         }
  148.  
  149.         private void ShowInfo()
  150.         {
  151.             Console.Write("Для продолжения нажмите любую клавишу...");
  152.             Console.ReadKey(true);
  153.             Console.Clear();
  154.  
  155.             Console.WriteLine("Расписание поездов: ");
  156.  
  157.             Console.WriteLine("==============");
  158.  
  159.             if (_trains.Count == 0)
  160.             {
  161.                 Console.Write("В депо нет поездов!");
  162.             }
  163.             else if (_trains.Count > 0)
  164.             {
  165.                 Console.WriteLine("В депо находятся находятся:");
  166.                 foreach (var train in _trains)
  167.                 {
  168.                     Console.Write($"№{train.Number}, из гор.{train.DirectionFrom} платформа {train.PlatformFrom} " +
  169.                         $"скоро направится в город {train.DirectionToThe} платформа {train.PlatformToThe}." +
  170.                         $"Поезд не отправлен.\n");
  171.                 }
  172.             }
  173.  
  174.             Console.WriteLine("==============");
  175.  
  176.             if (DirectionsExists(_directions))
  177.             {
  178.                 foreach (var train in _directions)
  179.                 {
  180.                     Console.Write($"№{train.Key.Number}, из гор.{train.Key.DirectionFrom} платформа {train.Key.PlatformFrom} " +
  181.                                     $"направялется в город {train.Key.DirectionToThe} платформа {train.Key.PlatformToThe}.\n");
  182.                     Console.Write($"Билетов продано: { train.Value.Tickets}. ");
  183.                     if (train.Key.Wagons == 0)
  184.                         Console.Write("Без вагонов. Поезд не готов к отправке.\n");
  185.                     else if(train.Key.Wagons > 0)
  186.                     {
  187.                         Console.Write("Вагонов: " + train.Key.Wagons + " шт. ");
  188.                         if (train.Key.IsTrainSent)
  189.                             Console.Write("Поезд отправлен.\n");
  190.                         else
  191.                             Console.Write("Поезд не отправлен.\n");
  192.                     }
  193.                 }
  194.             }
  195.             Console.WriteLine("==============");
  196.         }
  197.  
  198.         private bool TryGetTrainNumber(out int userInput, List<Train> train)
  199.         {
  200.             if (int.TryParse(Console.ReadLine(), out userInput) && (userInput <= train.Count && userInput > 0))
  201.             {
  202.                 --userInput;
  203.                 return true;
  204.             }
  205.             else
  206.             {
  207.                 Console.WriteLine("Ошибка! Такого номера нет.");
  208.             }
  209.             return false;
  210.         }
  211.  
  212.         private bool TryGetDirectionNumber(out int userInput, Dictionary<Train, Passengers> trains)
  213.         {
  214.             if (int.TryParse(Console.ReadLine(), out userInput) && (userInput <= trains.Count && userInput > 0))
  215.             {
  216.                 --userInput;
  217.                 return true;
  218.             }
  219.             else
  220.             {
  221.                 Console.WriteLine("Ошибка! Такого номера нет.");
  222.             }
  223.             return false;
  224.         }
  225.  
  226.         private bool IsTrainReady(Dictionary<Train, Passengers> direction, int userNumber, bool skip = true)
  227.         {
  228.             if (direction.ContainsKey(_trains[userNumber]) == true)
  229.             {
  230.                 if (direction.Values.ElementAt(userNumber).Tickets <= 0)
  231.                 {
  232.                     Console.WriteLine("Билеты не куплены!");
  233.                 }
  234.                 if (direction.Keys.ElementAt(userNumber).Wagons <= 0 && skip)
  235.                 {
  236.                     Console.WriteLine("Вагоны не сформированы!");
  237.                 }
  238.                 else if (direction.Keys.ElementAt(userNumber).IsTrainSent)
  239.                 {
  240.                     Console.WriteLine("Поезд отправлен!");
  241.                 }
  242.                 return false;
  243.             }
  244.  
  245.             return true;
  246.         }
  247.  
  248.         private bool DirectionsExists(Dictionary<Train, Passengers> directions)
  249.         {
  250.             if (directions.Count == 0)
  251.             {
  252.                 Console.WriteLine("К отправке нет готовых поездов!");
  253.                 return false;
  254.             }
  255.             return true;
  256.         }
  257.     }
  258.  
  259.     class Train
  260.     {
  261.         public bool IsTrainSent { get; private set; }
  262.         public int Number { get; private set; }
  263.         public int Wagons { get; private set; }
  264.         public string DirectionFrom { get; private set; }
  265.         public string PlatformFrom { get; private set; }
  266.         public string DirectionToThe { get; private set; }
  267.         public string PlatformToThe { get; private set; }
  268.  
  269.         public Train(int number, int wagons, string directionFrom, string platformFrom, string directionToThe, string platformToThe, bool isTrainSent = false)
  270.         {
  271.             Number = number;
  272.             Wagons = wagons;
  273.             DirectionFrom = directionFrom;
  274.             PlatformFrom = platformFrom;
  275.             PlatformToThe = platformToThe;
  276.             DirectionToThe = directionToThe;
  277.             IsTrainSent = isTrainSent;
  278.         }
  279.  
  280.         public void CreateWagons(int tickets)
  281.         {
  282.             int wagonSeats;
  283.             Random rand = new Random();
  284.  
  285.             for (; tickets >= 0; tickets--)
  286.             {
  287.  
  288.                 wagonSeats = rand.Next(30, 80);
  289.                 tickets -= wagonSeats;
  290.                 ++Wagons;
  291.             }
  292.         }
  293.  
  294.         public void SetSendStatus(bool flag)
  295.         {
  296.             IsTrainSent = flag;
  297.         }
  298.     }
  299.  
  300.     class Passengers
  301.     {
  302.         public int Tickets { get; private set; }
  303.  
  304.         public Passengers(int tickets)
  305.         {
  306.             Tickets = tickets;
  307.         }
  308.  
  309.         public void SetTickets()
  310.         {
  311.             Random rand = new Random();
  312.             Tickets = rand.Next(50, 300);
  313.         }
  314.     }
  315.  
  316. }
  317.  
Add Comment
Please, Sign In to add comment