Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Diagnostics;
- using System.Globalization;
- namespace Конфигуратор_пассажирских_поездов
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- Command command = new Command();
- command.TrainMenu();
- }
- }
- class Command
- {
- private RailStation _trainManager = new RailStation();
- private bool _isRun = true;
- public void TrainMenu()
- {
- const string CreateDirectionMenu = "1";
- const string SellTicketsMenu = "2";
- const string StuffTrainMenu = "3";
- const string SendTrainMenu = "4";
- const string ExitMenu = "5";
- while (_isRun)
- {
- Console.ForegroundColor = ConsoleColor.Green;
- Console.WriteLine("Конфигуратор пассажирских поездов:");
- Console.ForegroundColor = ConsoleColor.White;
- Console.WriteLine($"Задать направление - {CreateDirectionMenu}\nПродать билеты - {SellTicketsMenu}\nСформировать поезд - {StuffTrainMenu}\nОтправить поезд - {SendTrainMenu}\nВыход - {ExitMenu}");
- string userInput = Console.ReadLine();
- switch (userInput)
- {
- case CreateDirectionMenu:
- _trainManager.TryCreateDirection();
- break;
- case SellTicketsMenu:
- _trainManager.SellTickets();
- break;
- case StuffTrainMenu:
- _trainManager.CreateTrain();
- break;
- case SendTrainMenu:
- _trainManager.SendTrain();
- break;
- case ExitMenu:
- _isRun = false;
- break;
- default:
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Введена неверная команда\n");
- Console.ForegroundColor = ConsoleColor.White;
- Thread.Sleep(1000);
- Console.Clear();
- break;
- }
- }
- }
- }
- class RailStation
- {
- private List<Direction> _directions = new List<Direction>();
- private Random _random = new Random();
- private Train _train = new Train();
- private Carriage _carriage = new Carriage();
- private int _soldTickets;
- public void TryCreateDirection()
- {
- if (_directions.Count >= 1)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Направление уже задано\n");
- Console.ForegroundColor = ConsoleColor.White;
- return;
- }
- Console.WriteLine("Введите место отправления:");
- string departurePlace = Console.ReadLine();
- Console.WriteLine("Введите место прибытия:");
- string arrivePlace = Console.ReadLine();
- if (departurePlace.ToLower() == arrivePlace.ToLower())
- {
- Console.WriteLine("Пункты отправки и назначения не могут совпадать\n");
- }
- else
- {
- _directions.Add(new Direction(departurePlace, arrivePlace));
- Console.WriteLine("Направление задано\n");
- ShowDirection();
- }
- }
- public int SellTickets()
- {
- if (_soldTickets > 0)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Билеты уже куплены\n");
- Console.ForegroundColor = ConsoleColor.White;
- return 0;
- }
- else
- {
- int minSoldTickets = 10;
- int maxSoldTickets = 100;
- if (_directions.Count == 0)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("\nНаправление поезда еще не задано\n");
- Console.ForegroundColor = ConsoleColor.White;
- }
- else
- {
- _soldTickets = _random.Next(minSoldTickets, maxSoldTickets);
- }
- Console.WriteLine($"Куплено {_soldTickets} билетов\n");
- return _soldTickets;
- }
- }
- public void CreateTrain()
- {
- if (_directions.Count == 0)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Направление не задано\n");
- Console.ForegroundColor = ConsoleColor.White;
- }
- else if (_soldTickets == 0)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Не продано ни одного билета\n");
- Console.ForegroundColor = ConsoleColor.White;
- }
- else
- {
- _train.StaffTrain();
- _train.TryCreateTrain(_soldTickets);
- }
- }
- public void SendTrain()
- {
- if (_soldTickets > 0 && _train.TryCreateTrain(_soldTickets) && _directions.Count > 0)
- {
- ShowInfo();
- _soldTickets = 0;
- _directions.Clear();
- _carriage.ResetTrainParameters();
- }
- else
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Сначала сформируйте направление и продайте билеты\n");
- Console.ForegroundColor = ConsoleColor.White;
- }
- }
- private void ShowInfo()
- {
- ShowDirection();
- _train.TryCreateTrain(_soldTickets);
- _train.ShowTrain();
- Console.ForegroundColor = ConsoleColor.Green;
- Console.WriteLine($"\n{_soldTickets} Билетов купили на это направление\nПоезд отправляется\n\n");
- Console.ForegroundColor = ConsoleColor.White;
- }
- private void ShowDirection()
- {
- foreach (Direction direction in _directions)
- {
- Console.WriteLine($"\nНачальный пункт - {direction.DeparturePlace} *** Конечный пункт - {direction.ArrivePlace}.\n");
- }
- }
- }
- class Train
- {
- private Carriage _carriage = new Carriage();
- public void StaffTrain()
- {
- _carriage.CalculatingCarriageCapacity();
- _carriage.CalculatingCarriageQuantity();
- ShowTrain();
- }
- public bool TryCreateTrain(int soldTickets)
- {
- if (soldTickets > 0 && soldTickets < _carriage.TrainCarriageQuantity * _carriage.TrainCarriageCapacity)
- {
- Console.ForegroundColor = ConsoleColor.Green;
- Console.WriteLine("Билетов хватило всем, можно отправляться\n");
- Console.ForegroundColor = ConsoleColor.White;
- return true;
- }
- else if (_carriage.TrainCarriageCapacity <= 0 || _carriage.TrainCarriageQuantity <= 0)
- {
- return false;
- }
- else if (soldTickets > _carriage.TrainCarriageQuantity * _carriage.TrainCarriageQuantity)
- {
- Console.WriteLine($"Не всем хватило билетов, не хватает {soldTickets - _carriage.TrainCarriageQuantity * _carriage.TrainCarriageQuantity} мест\n");
- return false;
- }
- else
- {
- return false;
- }
- }
- public void ShowTrain()
- {
- if (_carriage.TrainCarriageCapacity >= _carriage.MinPlacesQuantity && _carriage.TrainCarriageCapacity <=_carriage.MaxPlacesQuantity && _carriage.TrainCarriageQuantity >=_carriage.MinCarriageQuantity && _carriage.TrainCarriageQuantity <= _carriage.MaxCarriageQuantity)
- {
- Console.WriteLine($"Поезд состоит из {_carriage.TrainCarriageQuantity} вагонов, каждый вмещает {_carriage.TrainCarriageCapacity} мест\n");
- }
- }
- }
- class Carriage
- {
- public int TrainCarriageCapacity { get; private set; }
- public int TrainCarriageQuantity { get; private set; }
- public int MinPlacesQuantity { get; private set; } = 24;
- public int MaxPlacesQuantity { get; private set; } = 68;
- public int MinCarriageQuantity { get; private set; } = 10;
- public int MaxCarriageQuantity { get; private set; } = 25;
- public void CalculatingCarriageCapacity()
- {
- if (TrainCarriageCapacity >= MinPlacesQuantity && TrainCarriageCapacity <= MaxPlacesQuantity)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Ошибка - вместимость вагона уже задана");
- Console.ForegroundColor = ConsoleColor.White;
- return;
- }
- TrainCarriageCapacity = Utility.ReturnInputNumber($"Введите вместимость вагона поезда от {MinPlacesQuantity} до {MaxPlacesQuantity}");
- if (TrainCarriageCapacity < MinPlacesQuantity || TrainCarriageCapacity > MaxPlacesQuantity)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Ошибка расчета вместимости вагона\n");
- Console.ForegroundColor = ConsoleColor.White;
- TrainCarriageCapacity = 0;
- return;
- }
- else
- {
- Console.WriteLine($"В вагоне {TrainCarriageCapacity} мест\n");
- }
- }
- public void CalculatingCarriageQuantity()
- {
- if (TrainCarriageQuantity >= MinCarriageQuantity && TrainCarriageQuantity <= MaxCarriageQuantity)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Ошибка - количество вагонов в поезде уже задано");
- Console.ForegroundColor = ConsoleColor.White;
- return;
- }
- TrainCarriageQuantity = Utility.ReturnInputNumber($"Введите количество вагонов в поезде от {MinCarriageQuantity} до {MaxCarriageQuantity}");
- if (TrainCarriageQuantity < MinCarriageQuantity || TrainCarriageQuantity > MaxCarriageQuantity)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Ошибка расчета количества вагонов\n");
- Console.ForegroundColor = ConsoleColor.White;
- TrainCarriageQuantity = 0;
- return;
- }
- else
- {
- Console.WriteLine($"В поезде {TrainCarriageQuantity} вагонов\n");
- }
- }
- public void ResetTrainParameters()
- {
- TrainCarriageCapacity = 0;
- TrainCarriageQuantity = 0;
- }
- }
- class Direction
- {
- public Direction(string departurePlace, string arrivePlace)
- {
- DeparturePlace = departurePlace;
- ArrivePlace = arrivePlace;
- }
- public string DeparturePlace { get; private set; }
- public string ArrivePlace { get; private set; }
- }
- class Utility
- {
- public static int ReturnInputNumber(string message)
- {
- Console.WriteLine(message + " ");
- int number;
- while ((int.TryParse(Console.ReadLine(), out number)) == false)
- {
- Console.WriteLine("Введено не число, попробуйте еще раз: ");
- Console.WriteLine(message + " ");
- }
- return number;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement