Torgach

TempTrainsList

Apr 8th, 2021 (edited)
397
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 Passengers _passengers = new Passengers();
  21.  
  22.         private List<Train> _trains = new List<Train>()
  23.         {
  24.             new Train(1, 0),
  25.             new Train(2, 0)
  26.         };
  27.  
  28.         private List<Directions> _directions = new List<Directions>()
  29.         {
  30.             new Directions("msk", "4", "spb", "6")
  31.         };
  32.  
  33.         public void Work()
  34.         {
  35.             bool isWork = true;
  36.             while (isWork)
  37.             {
  38.                 ShowInfo();
  39.  
  40.                 Console.WriteLine($"\n[1] - Создать поезд;\n" +
  41.                 $"[2] - Создать направление\n" +
  42.                 $"[3] - Выбрать направление\n" +
  43.                 $"[4] - Продать билеты\n" +
  44.                 $"[5] - Сформировать поезд\n" +
  45.                 $"[6] - Отправить поезд\n" +
  46.                 $"[7] - Выход");
  47.                 Console.Write("Ввод: ");
  48.  
  49.                 switch (Console.ReadLine())
  50.                 {
  51.                     case "1":
  52.                         CreateTrain();
  53.                         break;
  54.                     case "2":
  55.                         CreateDirection();
  56.                         break;
  57.                     case "3":
  58.                         ChooseDirection();
  59.                         break;
  60.                     case "4":
  61.                         SellTickets();
  62.                         break;
  63.                     case "5":
  64.                         FormTrain();
  65.                         break;
  66.                     case "6":
  67.                         SendTrain();
  68.                         break;
  69.                     case "7":
  70.                         isWork = false;
  71.                         break;
  72.                     default:
  73.                         Console.WriteLine("Ошибка!");
  74.                         break;
  75.                 }
  76.             }
  77.         }
  78.  
  79.         private void CreateTrain()
  80.         {
  81.             Train train = new Train(_trains.Count + 1, 0);
  82.             _trains.Add(train);
  83.         }
  84.  
  85.         private void CreateDirection()
  86.         {
  87.             Console.Write("Поезд отправится из города: ");
  88.             string directionFrom = Console.ReadLine();
  89.  
  90.             Console.Write("Поезд отправится с платформы: ");
  91.             string platformFrom = Console.ReadLine();
  92.  
  93.             Console.Write("Поезд отправится в город: ");
  94.             string directionToThe = Console.ReadLine();
  95.  
  96.             Console.Write("Поезд прибывает на платформу: ");
  97.             string platformToThe = Console.ReadLine();
  98.  
  99.             Directions userDirection = new Directions(directionFrom, platformFrom, directionToThe, platformToThe);
  100.  
  101.             foreach (Directions direction in _directions)
  102.             {
  103.                 //if (direction == userDirection)
  104.                 if (direction.DirectionFrom == userDirection.DirectionFrom &&
  105.                     direction.PlatformFrom == userDirection.PlatformFrom &&
  106.                     direction.DirectionToThe == userDirection.DirectionToThe &&
  107.                     direction.PlatformToThe == userDirection.PlatformToThe)
  108.                 {
  109.                     Console.WriteLine("Нельзя задать такое же направление другим поездам!");
  110.                     return;
  111.                 }
  112.             }
  113.  
  114.             _directions.Add(userDirection);
  115.  
  116.             Console.Write("Вы хотите назначить для направления поезд? [Да] или [Нет]\nВвод: ");
  117.             if(Console.ReadLine() == "Да")
  118.             {
  119.                 Console.WriteLine("Выберите поезд из депо: ");
  120.                 if (TryGetNumber(out int userTrain, _trains.Count) && _trains[userTrain].IsDirectionSet == false)
  121.                 {
  122.                     _trains[userTrain] = new Train(userDirection, _trains[userTrain]);
  123.                     _trains[userTrain].SetDirection();
  124.                 }
  125.                 else if (_trains[userTrain].IsDirectionSet)
  126.                 {
  127.                     Console.WriteLine("Этому поезду уже задано направление! ");
  128.                     return;
  129.                 }
  130.             }
  131.             else if(Console.ReadLine() == "Нет")
  132.             {
  133.                 Console.WriteLine("Добавляем направление...");
  134.                 return;
  135.             }
  136.         }
  137.  
  138.         private void ChooseDirection()
  139.         {
  140.             int userDirection = 0;
  141.             int userTrain = 0;
  142.  
  143.             if (TryToCheckList(ref userDirection, ref userTrain, true) && _trains[userTrain].IsDirectionSet == false)
  144.             {
  145.                 foreach (Train train in _trains)
  146.                 {
  147.  
  148.                     if (train.Direction == _directions[userDirection])
  149.                     {
  150.                         Console.WriteLine("Нельзя задать такое же направление другим поездам!");
  151.                         return;
  152.                     }
  153.                 }
  154.  
  155.                 _trains[userTrain] = new Train(_directions[userDirection], _trains[userTrain]);
  156.                 _trains[userTrain].SetDirection();
  157.             }
  158.         }
  159.  
  160.         private void SellTickets()
  161.         {
  162.             int userDirection = 0;
  163.             int userTrain = 0;
  164.  
  165.             if (TryToCheckList(ref userDirection, ref userTrain, false) && TryToCheckTickets(userDirection))
  166.             {
  167.                 Random rand = new Random();
  168.                 _passengers = new Passengers(rand.Next(200, 400));
  169.                 _directions[userDirection] = new Directions(_directions[userDirection], _passengers);
  170.  
  171.                 _passengers = null;
  172.             }
  173.  
  174.         }
  175.  
  176.         public void FormTrain()
  177.         {
  178.             int userDirection = 0;
  179.             int userTrain = 0;
  180.  
  181.             if (TryToCheckList(ref userDirection, ref userTrain, true) && _trains[userTrain].IsDirectionSet == false)
  182.             {
  183.                 _trains[userTrain] = new Train(_directions[userTrain], _trains[userTrain]);
  184.                 _trains[userTrain].CreateWagons();
  185.             }
  186.         }
  187.  
  188.         private void SendTrain()
  189.         {
  190.             int userDirection = 0;
  191.             int userTrain = 0;
  192.  
  193.             if (TryToCheckList(ref userDirection, ref userTrain, true))
  194.             {
  195.                 _trains[userTrain].SetDispatch();
  196.  
  197.             }
  198.         }
  199.  
  200.         private void ShowInfo()
  201.         {
  202.             Console.Write("Для продолжения нажмите любую клавишу...");
  203.             Console.ReadKey(true);
  204.             Console.Clear();
  205.  
  206.             Console.WriteLine("Расписание поездов: ");
  207.  
  208.             Console.WriteLine("==============");
  209.  
  210.             if (_trains.Count == 0)
  211.             {
  212.                 Console.Write("В депо нет поездов!");
  213.             }
  214.             else if (_trains.Count > 0)
  215.             {
  216.                 Console.WriteLine("В депо находятся находятся:");
  217.                 foreach (var train in _trains)
  218.                 {
  219.                     if (train.IsDirectionSet)
  220.                     {
  221.                         Console.WriteLine($"№{train.Number}, из гор.{train.Direction.DirectionFrom} платформа {train.Direction.PlatformFrom} " +
  222.                         $"скоро направится в город {train.Direction.DirectionToThe} платформа {train.Direction.PlatformToThe}.");
  223.  
  224.                         if (train.Direction.Clients.ArePassengersCome == false)
  225.                         {
  226.                             Console.WriteLine("Билеты не проданы!");
  227.                         }
  228.  
  229.                         if (train.Wagons == 0)
  230.                         {
  231.                             Console.Write("Поезд не выехал из депо. Поезд не готов к отправке.\n");
  232.                         }
  233.                         else if (train.Wagons > 0)
  234.                         {
  235.                             Console.Write("Вагонов: " + train.Wagons + " шт. ");
  236.                             Console.Write("Билетов продано: " + train.Direction.Clients.Tickets + "\n");
  237.  
  238.                             if (train.IsTrainSent)
  239.                             {
  240.                                 Console.Write("Поезд отправлен.\n");
  241.                             }
  242.                             else if (train.IsTrainSent == false)
  243.                             {
  244.                                 Console.Write("Поезд не отправлен.\n");
  245.                             }
  246.                         }
  247.                     }
  248.                     else if (train.IsDirectionSet == false)
  249.                     {
  250.                         Console.WriteLine($"Поезд №{train.Number}. Без направления. Поезд не готов к отправке.\n");
  251.                     }
  252.                 }
  253.             }
  254.  
  255.             Console.WriteLine("Направления: ");
  256.             Console.WriteLine("==============");
  257.  
  258.             if (AreDirectionsEmpty())
  259.             {
  260.                 foreach (var direction in _directions)
  261.                 {
  262.                     Console.Write($"Направление из гор.{direction.DirectionFrom} платформа {direction.PlatformFrom} " +
  263.                         $"в город {direction.DirectionToThe} платформа {direction.PlatformToThe}\n");
  264.                     if (direction.Clients.ArePassengersCome == false)
  265.                     {
  266.                         Console.WriteLine("Билеты не проданы!");
  267.                     }
  268.                     else if (direction.Clients.ArePassengersCome)
  269.                     {
  270.                         Console.WriteLine($"Количество проданных билетов: {direction.Clients.Tickets}");
  271.                     }
  272.                 }
  273.             }
  274.             Console.WriteLine("==============");
  275.         }
  276.  
  277.         private bool TryGetNumber(out int userInput, int count)
  278.         {
  279.             if (int.TryParse(Console.ReadLine(), out userInput) && userInput <= count && userInput > 0)
  280.             {
  281.                 --userInput;
  282.                 return true;
  283.             }
  284.             else
  285.             {
  286.                 Console.WriteLine("Ошибка! Такого номера нет.");
  287.             }
  288.             return false;
  289.         }
  290.  
  291.         private bool AreDirectionsEmpty()
  292.         {
  293.             if (_directions.Count == 0)
  294.             {
  295.                 Console.WriteLine("Нет заданных направлений!");
  296.                 return false;
  297.             }
  298.             return true;
  299.         }
  300.  
  301.         private bool AreTrainsEmpty()
  302.         {
  303.             if (_trains.Count == 0)
  304.             {
  305.                 Console.WriteLine("Нет созданных поездов!");
  306.                 return false;
  307.             }
  308.             return true;
  309.         }
  310.  
  311.         private bool TryToCheckTickets(int userNumber)
  312.         {
  313.             if (_directions[userNumber].Clients.ArePassengersCome)
  314.             {
  315.                 Console.WriteLine("На рейс куплены билеты!");
  316.                 return false;
  317.             }
  318.             return true;
  319.         }
  320.  
  321.         private bool TryToCheckList(ref int userDirection, ref int userTrain, bool isCheckTrain = false)
  322.         {
  323.             if(isCheckTrain)
  324.             {
  325.                 if (AreDirectionsEmpty() == false && AreTrainsEmpty() == false)
  326.                 {
  327.                     return false;
  328.                 }
  329.  
  330.                 Console.Write("Укажите номер поезда: ");
  331.                 if (TryGetNumber(out userTrain, _trains.Count) == false)
  332.                 {
  333.                     return false;
  334.                 }
  335.  
  336.                 if (_trains[userTrain].IsTrainSent)
  337.                 {
  338.                     Console.WriteLine("Поезд уже отправлен!");
  339.                     return false;
  340.                 }
  341.             }
  342.             else if (AreDirectionsEmpty() == false)
  343.             {
  344.                 return false;
  345.             }
  346.  
  347.             Console.Write("Выберите направление: ");
  348.             if (TryGetNumber(out userDirection, _directions.Count) == false)
  349.             {
  350.                 return false;
  351.             }
  352.  
  353.             return true;
  354.         }
  355.     }
  356.  
  357.     class Train
  358.     {
  359.         public bool IsTrainSent { get; private set; }
  360.         public bool IsDirectionSet { get; private set; }
  361.         public int Number { get; private set; }
  362.         public int Wagons { get; private set; }
  363.         public Directions Direction { get; private set; }
  364.  
  365.         public Train(int number, int wagons, bool isTrainSent = false, bool isDirectionSet = false)
  366.         {
  367.             Number = number;
  368.             Wagons = wagons;
  369.             IsTrainSent = isTrainSent;
  370.             IsDirectionSet = isDirectionSet;
  371.         }
  372.  
  373.         public Train(Directions direction, Train train)
  374.         {
  375.             Direction = direction;
  376.             Number = train.Number;
  377.             Wagons = train.Wagons;
  378.             IsTrainSent = train.IsTrainSent;
  379.             IsDirectionSet = train.IsDirectionSet;
  380.         }
  381.  
  382.         public void CreateWagons()
  383.         {
  384.             int wagonSeats;
  385.             int activateTickets = Direction.Clients.Tickets;
  386.             Random rand = new Random();
  387.  
  388.             while (activateTickets >= 0)
  389.             {
  390.                 wagonSeats = rand.Next(30, 80);
  391.                 activateTickets -= wagonSeats;
  392.                 ++Wagons;
  393.             }
  394.  
  395.         }
  396.  
  397.         public void SetDispatch()
  398.         {
  399.             IsTrainSent = true;
  400.         }
  401.  
  402.         public void SetDirection()
  403.         {
  404.             IsDirectionSet = true;
  405.         }
  406.     }
  407.  
  408.     class Directions
  409.     {
  410.         public string DirectionFrom { get; private set; }
  411.         public string PlatformFrom { get; private set; }
  412.         public string DirectionToThe { get; private set; }
  413.         public string PlatformToThe { get; private set; }
  414.         public Passengers Clients { get; private set; }
  415.  
  416.         public Directions(string directionFrom, string platformFrom, string directionToThe, string platformToThe)
  417.         {
  418.             DirectionFrom = directionFrom;
  419.             PlatformFrom = platformFrom;
  420.             PlatformToThe = platformToThe;
  421.             DirectionToThe = directionToThe;
  422.             Clients = new Passengers();
  423.         }
  424.  
  425.         public Directions(Directions direction, Passengers passengers)
  426.         {
  427.             DirectionFrom = direction.DirectionFrom;
  428.             PlatformFrom = direction.PlatformFrom;
  429.             DirectionToThe = direction.DirectionToThe;
  430.             PlatformToThe = direction.PlatformToThe;
  431.             Clients = passengers;
  432.         }
  433.     }
  434.  
  435.     class Passengers
  436.     {
  437.         private bool _arePassengersCome;
  438.         public bool ArePassengersCome
  439.         {
  440.             get
  441.             {
  442.                 return Tickets > 0;
  443.             }
  444.             private set
  445.             {
  446.                 _arePassengersCome = value;
  447.             }
  448.         }
  449.  
  450.         public int Tickets { get; private set; }
  451.  
  452.         public Passengers()
  453.         {
  454.             Tickets = 0;
  455.             ArePassengersCome = false;
  456.         }
  457.  
  458.         public Passengers(int tickets)
  459.         {
  460.             Tickets = tickets;
  461.             ArePassengersCome = true;
  462.         }
  463.     }
  464. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×