Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace trains
- {
- class Program
- {
- static void Main(string[] args)
- {
- TicketOffice ticketOffice = new TicketOffice();
- ticketOffice.Work();
- }
- }
- class TicketOffice
- {
- private List<Train> _trains = new List<Train>()
- {
- new Train(1, 0, "Москва", "12/A", "СПБ", "4F", false),
- new Train(2, 0, "LA", "1/G", "NY", "2K", false)
- };
- private Passengers _passengers;
- private Dictionary<Train, Passengers> _directions = new Dictionary<Train, Passengers>();
- public void Work()
- {
- bool isWork = true;
- while (isWork)
- {
- ShowInfo();
- Console.WriteLine($"\n[1] - Создать направление;\n" +
- $"[2] - Продать билеты\n" +
- $"[3] - Сформировать поезд\n" +
- $"[4] - Отправить поезд\n" +
- $"[5] - Выход");
- Console.Write("Ввод: ");
- switch (Console.ReadLine())
- {
- case "1":
- CreateDirection();
- break;
- case "2":
- SellTickets();
- break;
- case "3":
- CreateWagons();
- break;
- case "4":
- SendTrain();
- break;
- case "5":
- isWork = false;
- break;
- default:
- Console.WriteLine("Ошибка!");
- break;
- }
- }
- }
- private void CreateDirection()
- {
- Console.Write("Поезд отправится из города: ");
- string directionFrom = Console.ReadLine();
- Console.Write("Поезд отправится с платформы: ");
- string platformFrom = Console.ReadLine();
- Console.Write("Поезд отправится в город: ");
- string directionToThe = Console.ReadLine();
- Console.Write("Поезд прибывает на платформу: ");
- string platformToThe = Console.ReadLine();
- Train train = new Train(_trains.Count + 1, 0, directionFrom, platformFrom, directionToThe, platformToThe);
- _trains.Add(train);
- }
- private void SellTickets()
- {
- Console.Write("Укажите номер поезда: ");
- TryGetTrainNumber(out int userNumber, _trains);
- if (IsTrainReady(_directions, userNumber) == false)
- {
- Console.WriteLine("Нельзя повторно продать билеты на рейс!");
- return;
- }
- Random rand = new Random();
- _passengers = new Passengers(rand.Next(1, 20));
- _passengers.SetTickets();
- _directions.Add(_trains[userNumber], _passengers);
- }
- private void CreateWagons()
- {
- if (DirectionsExists(_directions) == false)
- return;
- Console.Write("Укажите номер поезда: ");
- if (TryGetDirectionNumber(out int userNumber, _directions) == false)
- return;
- if (IsTrainReady(_directions, userNumber, false) == false)
- return;
- if (_directions.Keys.ElementAt(userNumber).Wagons > 0)
- {
- Console.WriteLine("Вагоны уже прицеплены!");
- return;
- }
- Console.WriteLine("Прицепляем вагонгы...");
- _directions.Keys.ElementAt(userNumber).CreateWagons(_directions.Values.ElementAt(userNumber).Tickets);
- Console.Write($"К поезду присоединили {_directions.Keys.ElementAt(userNumber).Wagons} шт. вагонов");
- }
- private void SendTrain()
- {
- if (DirectionsExists(_directions) == false)
- return;
- Console.Write("Укажите номер поезда: ");
- if (TryGetDirectionNumber(out int userNumber, _directions) == false)
- return;
- if (IsTrainReady(_directions, userNumber) == false)
- return;
- if (_directions.Keys.ElementAt(userNumber).IsTrainSent)
- {
- Console.WriteLine("Поезд уже отправлен!");
- return;
- }
- _directions.Keys.ElementAt(userNumber).SetSendStatus(true);
- }
- private void ShowInfo()
- {
- Console.Write("Для продолжения нажмите любую клавишу...");
- Console.ReadKey(true);
- Console.Clear();
- Console.WriteLine("Расписание поездов: ");
- Console.WriteLine("==============");
- if (_trains.Count == 0)
- {
- Console.Write("В депо нет поездов!");
- }
- else if (_trains.Count > 0)
- {
- Console.WriteLine("В депо находятся находятся:");
- foreach (var train in _trains)
- {
- Console.Write($"№{train.Number}, из гор.{train.DirectionFrom} платформа {train.PlatformFrom} " +
- $"скоро направится в город {train.DirectionToThe} платформа {train.PlatformToThe}." +
- $"Поезд не отправлен.\n");
- }
- }
- Console.WriteLine("==============");
- if (DirectionsExists(_directions))
- {
- foreach (var train in _directions)
- {
- Console.Write($"№{train.Key.Number}, из гор.{train.Key.DirectionFrom} платформа {train.Key.PlatformFrom} " +
- $"направялется в город {train.Key.DirectionToThe} платформа {train.Key.PlatformToThe}.\n");
- Console.Write($"Билетов продано: { train.Value.Tickets}. ");
- if (train.Key.Wagons == 0)
- Console.Write("Без вагонов. Поезд не готов к отправке.\n");
- else if(train.Key.Wagons > 0)
- {
- Console.Write("Вагонов: " + train.Key.Wagons + " шт. ");
- if (train.Key.IsTrainSent)
- Console.Write("Поезд отправлен.\n");
- else
- Console.Write("Поезд не отправлен.\n");
- }
- }
- }
- Console.WriteLine("==============");
- }
- private bool TryGetTrainNumber(out int userInput, List<Train> train)
- {
- if (int.TryParse(Console.ReadLine(), out userInput) && (userInput <= train.Count && userInput > 0))
- {
- --userInput;
- return true;
- }
- else
- {
- Console.WriteLine("Ошибка! Такого номера нет.");
- }
- return false;
- }
- private bool TryGetDirectionNumber(out int userInput, Dictionary<Train, Passengers> trains)
- {
- if (int.TryParse(Console.ReadLine(), out userInput) && (userInput <= trains.Count && userInput > 0))
- {
- --userInput;
- return true;
- }
- else
- {
- Console.WriteLine("Ошибка! Такого номера нет.");
- }
- return false;
- }
- private bool IsTrainReady(Dictionary<Train, Passengers> direction, int userNumber, bool skip = true)
- {
- if (direction.ContainsKey(_trains[userNumber]) == true)
- {
- if (direction.Values.ElementAt(userNumber).Tickets <= 0)
- {
- Console.WriteLine("Билеты не куплены!");
- }
- if (direction.Keys.ElementAt(userNumber).Wagons <= 0 && skip)
- {
- Console.WriteLine("Вагоны не сформированы!");
- }
- else if (direction.Keys.ElementAt(userNumber).IsTrainSent)
- {
- Console.WriteLine("Поезд отправлен!");
- }
- return false;
- }
- return true;
- }
- private bool DirectionsExists(Dictionary<Train, Passengers> directions)
- {
- if (directions.Count == 0)
- {
- Console.WriteLine("К отправке нет готовых поездов!");
- return false;
- }
- return true;
- }
- }
- class Train
- {
- public bool IsTrainSent { get; private set; }
- public int Number { get; private set; }
- public int Wagons { get; private set; }
- public string DirectionFrom { get; private set; }
- public string PlatformFrom { get; private set; }
- public string DirectionToThe { get; private set; }
- public string PlatformToThe { get; private set; }
- public Train(int number, int wagons, string directionFrom, string platformFrom, string directionToThe, string platformToThe, bool isTrainSent = false)
- {
- Number = number;
- Wagons = wagons;
- DirectionFrom = directionFrom;
- PlatformFrom = platformFrom;
- PlatformToThe = platformToThe;
- DirectionToThe = directionToThe;
- IsTrainSent = isTrainSent;
- }
- public void CreateWagons(int tickets)
- {
- int wagonSeats;
- Random rand = new Random();
- for (; tickets >= 0; tickets--)
- {
- wagonSeats = rand.Next(30, 80);
- tickets -= wagonSeats;
- ++Wagons;
- }
- }
- public void SetSendStatus(bool flag)
- {
- IsTrainSent = flag;
- }
- }
- class Passengers
- {
- public int Tickets { get; private set; }
- public Passengers(int tickets)
- {
- Tickets = tickets;
- }
- public void SetTickets()
- {
- Random rand = new Random();
- Tickets = rand.Next(50, 300);
- }
- }
- }
Add Comment
Please, Sign In to add comment