Advertisement
VodVas

Конфигуратор пассажирских поездов

Nov 20th, 2023 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.71 KB | Software | 0 0
  1. using System.Diagnostics;
  2. using System.Globalization;
  3.  
  4. namespace Конфигуратор_пассажирских_поездов
  5. {
  6.     internal class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Command command = new Command();
  11.  
  12.             command.TrainMenu();
  13.         }
  14.     }
  15.  
  16.     class Command
  17.     {
  18.         private RailStation _trainManager = new RailStation();
  19.  
  20.         private bool _isRun = true;
  21.  
  22.         public void TrainMenu()
  23.         {
  24.             const string CreateDirectionMenu = "1";
  25.             const string SellTicketsMenu = "2";
  26.             const string StuffTrainMenu = "3";
  27.             const string SendTrainMenu = "4";
  28.             const string ExitMenu = "5";
  29.  
  30.             while (_isRun)
  31.             {
  32.                 Console.ForegroundColor = ConsoleColor.Green;
  33.                 Console.WriteLine("Конфигуратор пассажирских поездов:");
  34.                 Console.ForegroundColor = ConsoleColor.White;
  35.                 Console.WriteLine($"Задать направление - {CreateDirectionMenu}\nПродать билеты - {SellTicketsMenu}\nСформировать поезд - {StuffTrainMenu}\nОтправить поезд - {SendTrainMenu}\nВыход - {ExitMenu}");
  36.  
  37.                 string userInput = Console.ReadLine();
  38.  
  39.                 switch (userInput)
  40.                 {
  41.                     case CreateDirectionMenu:
  42.                         _trainManager.TryCreateDirection();
  43.                         break;
  44.  
  45.                     case SellTicketsMenu:
  46.                         _trainManager.SellTickets();
  47.                         break;
  48.  
  49.                     case StuffTrainMenu:
  50.                         _trainManager.CreateTrain();
  51.                         break;
  52.  
  53.                     case SendTrainMenu:
  54.                         _trainManager.SendTrain();
  55.                         break;
  56.  
  57.                     case ExitMenu:
  58.                         _isRun = false;
  59.                         break;
  60.  
  61.                     default:
  62.                         Console.ForegroundColor = ConsoleColor.Red;
  63.                         Console.WriteLine("Введена неверная команда\n");
  64.                         Console.ForegroundColor = ConsoleColor.White;
  65.                         Thread.Sleep(1000);
  66.                         Console.Clear();
  67.                         break;
  68.  
  69.                 }
  70.             }
  71.         }
  72.     }
  73.  
  74.     class RailStation
  75.     {
  76.         private List<Direction> _directions = new List<Direction>();
  77.  
  78.         private Random _random = new Random();
  79.  
  80.         private Train _train = new Train();
  81.  
  82.         private Carriage _carriage = new Carriage();
  83.  
  84.         private int _soldTickets;
  85.  
  86.         public void TryCreateDirection()
  87.         {
  88.             if (_directions.Count >= 1)
  89.             {
  90.                 Console.ForegroundColor = ConsoleColor.Red;
  91.                 Console.WriteLine("Направление уже задано\n");
  92.                 Console.ForegroundColor = ConsoleColor.White;
  93.  
  94.                 return;
  95.             }
  96.  
  97.             Console.WriteLine("Введите место отправления:");
  98.  
  99.             string departurePlace = Console.ReadLine();
  100.  
  101.             Console.WriteLine("Введите место прибытия:");
  102.  
  103.             string arrivePlace = Console.ReadLine();
  104.  
  105.             if (departurePlace.ToLower() == arrivePlace.ToLower())
  106.             {
  107.                 Console.WriteLine("Пункты отправки и назначения не могут совпадать\n");
  108.             }
  109.             else
  110.             {
  111.                 _directions.Add(new Direction(departurePlace, arrivePlace));
  112.                 Console.WriteLine("Направление задано\n");
  113.                 ShowDirection();
  114.             }
  115.         }
  116.  
  117.         public int SellTickets()
  118.         {
  119.             if (_soldTickets > 0)
  120.             {
  121.                 Console.ForegroundColor = ConsoleColor.Red;
  122.                 Console.WriteLine("Билеты уже куплены\n");
  123.                 Console.ForegroundColor = ConsoleColor.White;
  124.  
  125.                 return 0;
  126.             }
  127.             else
  128.             {
  129.                 int minSoldTickets = 10;
  130.                 int maxSoldTickets = 100;
  131.  
  132.                 if (_directions.Count == 0)
  133.                 {
  134.                     Console.ForegroundColor = ConsoleColor.Red;
  135.                     Console.WriteLine("\nНаправление поезда еще не задано\n");
  136.                     Console.ForegroundColor = ConsoleColor.White;
  137.                 }
  138.                 else
  139.                 {
  140.                     _soldTickets = _random.Next(minSoldTickets, maxSoldTickets);
  141.                 }
  142.  
  143.                 Console.WriteLine($"Куплено {_soldTickets} билетов\n");
  144.  
  145.                 return _soldTickets;
  146.             }
  147.         }
  148.  
  149.         public void CreateTrain()
  150.         {
  151.             if (_directions.Count == 0)
  152.             {
  153.                 Console.ForegroundColor = ConsoleColor.Red;
  154.                 Console.WriteLine("Направление не задано\n");
  155.                 Console.ForegroundColor = ConsoleColor.White;
  156.             }
  157.             else if (_soldTickets == 0)
  158.             {
  159.                 Console.ForegroundColor = ConsoleColor.Red;
  160.                 Console.WriteLine("Не продано ни одного билета\n");
  161.                 Console.ForegroundColor = ConsoleColor.White;
  162.             }
  163.             else
  164.             {
  165.                 _train.StaffTrain();
  166.                 _train.TryCreateTrain(_soldTickets);
  167.             }
  168.         }
  169.  
  170.         public void SendTrain()
  171.         {
  172.             if (_soldTickets > 0 && _train.TryCreateTrain(_soldTickets) && _directions.Count > 0)
  173.             {
  174.                 ShowInfo();
  175.                 _soldTickets = 0;
  176.                 _directions.Clear();
  177.                 _carriage.ResetTrainParameters();
  178.             }
  179.             else
  180.             {
  181.                 Console.ForegroundColor = ConsoleColor.Red;
  182.                 Console.WriteLine("Сначала сформируйте направление и продайте билеты\n");
  183.                 Console.ForegroundColor = ConsoleColor.White;
  184.             }
  185.         }
  186.  
  187.         private void ShowInfo()
  188.         {
  189.             ShowDirection();
  190.  
  191.             _train.TryCreateTrain(_soldTickets);
  192.             _train.ShowTrain();
  193.  
  194.             Console.ForegroundColor = ConsoleColor.Green;
  195.             Console.WriteLine($"\n{_soldTickets} Билетов купили на это направление\nПоезд отправляется\n\n");
  196.             Console.ForegroundColor = ConsoleColor.White;
  197.         }
  198.  
  199.         private void ShowDirection()
  200.         {
  201.             foreach (Direction direction in _directions)
  202.             {
  203.                 Console.WriteLine($"\nНачальный пункт - {direction.DeparturePlace} *** Конечный пункт - {direction.ArrivePlace}.\n");
  204.             }
  205.         }
  206.     }
  207.  
  208.     class Train
  209.     {
  210.         private Carriage _carriage = new Carriage();
  211.  
  212.         public void StaffTrain()
  213.         {
  214.             _carriage.CalculatingCarriageCapacity();
  215.             _carriage.CalculatingCarriageQuantity();
  216.  
  217.             ShowTrain();
  218.         }
  219.  
  220.         public bool TryCreateTrain(int soldTickets)
  221.         {
  222.             if (soldTickets > 0 && soldTickets < _carriage.TrainCarriageQuantity * _carriage.TrainCarriageCapacity)
  223.             {
  224.                 Console.ForegroundColor = ConsoleColor.Green;
  225.                 Console.WriteLine("Билетов хватило всем, можно отправляться\n");
  226.                 Console.ForegroundColor = ConsoleColor.White;
  227.  
  228.                 return true;
  229.             }
  230.             else if (_carriage.TrainCarriageCapacity <= 0 || _carriage.TrainCarriageQuantity <= 0)
  231.             {
  232.                 return false;
  233.             }
  234.             else if (soldTickets > _carriage.TrainCarriageQuantity * _carriage.TrainCarriageQuantity)
  235.             {
  236.                 Console.WriteLine($"Не всем хватило билетов, не хватает {soldTickets - _carriage.TrainCarriageQuantity * _carriage.TrainCarriageQuantity} мест\n");
  237.  
  238.                 return false;
  239.             }
  240.             else
  241.             {
  242.                 return false;
  243.             }
  244.         }
  245.  
  246.         public void ShowTrain()
  247.         {
  248.             if (_carriage.TrainCarriageCapacity >= _carriage.MinPlacesQuantity && _carriage.TrainCarriageCapacity <=_carriage.MaxPlacesQuantity && _carriage.TrainCarriageQuantity >=_carriage.MinCarriageQuantity && _carriage.TrainCarriageQuantity <= _carriage.MaxCarriageQuantity)
  249.             {
  250.                 Console.WriteLine($"Поезд состоит из {_carriage.TrainCarriageQuantity} вагонов, каждый вмещает {_carriage.TrainCarriageCapacity} мест\n");
  251.             }
  252.         }
  253.     }
  254.  
  255.     class Carriage
  256.     {
  257.         public int TrainCarriageCapacity { get; private set; }
  258.         public int TrainCarriageQuantity { get; private set; }
  259.         public int MinPlacesQuantity { get; private set; } = 24;
  260.         public int MaxPlacesQuantity { get; private set; } = 68;
  261.         public int MinCarriageQuantity { get; private set; } = 10;
  262.         public int MaxCarriageQuantity { get; private set; } = 25;
  263.  
  264.         public void CalculatingCarriageCapacity()
  265.         {
  266.             if (TrainCarriageCapacity >= MinPlacesQuantity && TrainCarriageCapacity <= MaxPlacesQuantity)
  267.             {
  268.                 Console.ForegroundColor = ConsoleColor.Red;
  269.                 Console.WriteLine("Ошибка - вместимость вагона уже задана");
  270.                 Console.ForegroundColor = ConsoleColor.White;
  271.  
  272.                 return;
  273.             }
  274.  
  275.             TrainCarriageCapacity = Utility.ReturnInputNumber($"Введите вместимость вагона поезда от {MinPlacesQuantity} до {MaxPlacesQuantity}");
  276.  
  277.             if (TrainCarriageCapacity < MinPlacesQuantity || TrainCarriageCapacity > MaxPlacesQuantity)
  278.             {
  279.                 Console.ForegroundColor = ConsoleColor.Red;
  280.                 Console.WriteLine("Ошибка  расчета вместимости вагона\n");
  281.                 Console.ForegroundColor = ConsoleColor.White;
  282.  
  283.                 TrainCarriageCapacity = 0;
  284.  
  285.                 return;
  286.             }
  287.             else
  288.             {
  289.                 Console.WriteLine($"В вагоне {TrainCarriageCapacity} мест\n");
  290.             }
  291.         }
  292.  
  293.         public void CalculatingCarriageQuantity()
  294.         {
  295.             if (TrainCarriageQuantity >= MinCarriageQuantity && TrainCarriageQuantity <= MaxCarriageQuantity)
  296.             {
  297.                 Console.ForegroundColor = ConsoleColor.Red;
  298.                 Console.WriteLine("Ошибка - количество вагонов в поезде уже задано");
  299.                 Console.ForegroundColor = ConsoleColor.White;
  300.  
  301.                 return;
  302.             }
  303.  
  304.             TrainCarriageQuantity = Utility.ReturnInputNumber($"Введите количество вагонов в поезде от {MinCarriageQuantity} до {MaxCarriageQuantity}");
  305.  
  306.             if (TrainCarriageQuantity < MinCarriageQuantity || TrainCarriageQuantity > MaxCarriageQuantity)
  307.             {
  308.                 Console.ForegroundColor = ConsoleColor.Red;
  309.                 Console.WriteLine("Ошибка расчета количества вагонов\n");
  310.                 Console.ForegroundColor = ConsoleColor.White;
  311.  
  312.                 TrainCarriageQuantity = 0;
  313.  
  314.                 return;
  315.             }
  316.             else
  317.             {
  318.                 Console.WriteLine($"В поезде {TrainCarriageQuantity} вагонов\n");
  319.             }
  320.         }
  321.  
  322.         public void ResetTrainParameters()
  323.         {
  324.             TrainCarriageCapacity = 0;
  325.             TrainCarriageQuantity = 0;
  326.         }
  327.     }
  328.  
  329.     class Direction
  330.     {
  331.         public Direction(string departurePlace, string arrivePlace)
  332.         {
  333.             DeparturePlace = departurePlace;
  334.             ArrivePlace = arrivePlace;
  335.         }
  336.  
  337.         public string DeparturePlace { get; private set; }
  338.         public string ArrivePlace { get; private set; }
  339.     }
  340.  
  341.     class Utility
  342.     {
  343.         public static int ReturnInputNumber(string message)
  344.         {
  345.             Console.WriteLine(message + " ");
  346.  
  347.             int number;
  348.  
  349.             while ((int.TryParse(Console.ReadLine(), out number)) == false)
  350.             {
  351.                 Console.WriteLine("Введено не число, попробуйте еще раз: ");
  352.                 Console.WriteLine(message + " ");
  353.             }
  354.  
  355.             return number;
  356.         }
  357.     }
  358. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement