Advertisement
viktarb

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

Jan 11th, 2023 (edited)
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.11 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     static void Main(string[] args)
  7.     {
  8.         Dispatcher dispatcher = new Dispatcher();
  9.         dispatcher.Work();
  10.     }
  11. }
  12.  
  13. class Dispatcher
  14. {
  15.     private Random _random = new Random();
  16.     private List<Train> _trains = new List<Train>();
  17.  
  18.     public void Work()
  19.     {
  20.         bool isWork = true;
  21.  
  22.         while (isWork)
  23.         {
  24.             const int ExitCommand = 9;
  25.  
  26.             int countAllPassengersForDirections;
  27.             string directionName;
  28.             string userInput;
  29.             bool isCorrectInput;
  30.  
  31.             ShowDirectionInfo();
  32.             directionName = CreateDirectionName();
  33.             ShowDirectionInfo(directionName);
  34.             countAllPassengersForDirections = GetAllPassengersForDirection();
  35.             ShowDirectionInfo(directionName, countAllPassengersForDirections);
  36.             CreateWagonsForFlight(countAllPassengersForDirections, directionName);
  37.             ShowDirectionInfo(directionName, countAllPassengersForDirections);
  38.  
  39.             Console.WriteLine("Сейчас поезд выглядит так:");
  40.  
  41.             foreach (Train train in _trains)
  42.             {
  43.                 train.ShowInfo();
  44.             }
  45.  
  46.             Console.WriteLine($"\nВы ходите выйти из программы? Да - {ExitCommand}.");
  47.             userInput = Console.ReadLine();
  48.             isCorrectInput = int.TryParse(userInput, out int correctInput);
  49.  
  50.             if (isCorrectInput && correctInput == ExitCommand)
  51.             {
  52.                 isWork = false;
  53.                 Console.WriteLine("Завершение программы...");
  54.                 Console.WriteLine("Для продолжения нажмите любую клавишу...");
  55.             }
  56.             else
  57.             {
  58.                 Console.Clear();
  59.             }
  60.         }
  61.     }
  62.  
  63.     private void CreateWagonsForFlight(int countAllPassengersForDirections, string directionName)
  64.     {
  65.         int totalCapacityWagons = 0;
  66.         bool isSeatsForAllPassengers = false;
  67.         List<Wagon> wagons = new List<Wagon>();
  68.  
  69.         Console.WriteLine("Формируем количество вагонов на рейс.");
  70.  
  71.         while (!isSeatsForAllPassengers)
  72.         {
  73.             Wagon userSelectedTypeWagon = GetTypeWagon();
  74.             int countPassengersNotHaveSpace;
  75.  
  76.             Console.WriteLine($"Добавляем вагон {userSelectedTypeWagon.NameType}.");
  77.             Console.ReadKey();
  78.  
  79.             totalCapacityWagons += userSelectedTypeWagon.MaximumCapacity;
  80.             countPassengersNotHaveSpace = countAllPassengersForDirections - totalCapacityWagons;
  81.             wagons.Add(new Wagon(userSelectedTypeWagon.NameType, userSelectedTypeWagon.MaximumCapacity));
  82.  
  83.             if (countPassengersNotHaveSpace <= 0)
  84.             {
  85.                 isSeatsForAllPassengers = true;
  86.                 _trains.Add(new Train(directionName, wagons));
  87.             }
  88.             else
  89.             {
  90.                 ShowDirectionInfo(directionName, countAllPassengersForDirections);
  91.  
  92.                 foreach (Wagon wagon in wagons)
  93.                 {
  94.                     wagon.ShowInfo();
  95.                 }
  96.  
  97.                 Console.WriteLine($"Нужно разместить еще {countPassengersNotHaveSpace} пассажир(ов).");
  98.             }
  99.         }
  100.     }
  101.  
  102.     private string CreateDirectionName()
  103.     {
  104.         string directionName;
  105.  
  106.         Console.Write("Введите название направления: ");
  107.         directionName = Console.ReadLine();
  108.  
  109.         if (directionName == "")
  110.             directionName = "No name";
  111.  
  112.         return directionName;
  113.     }
  114.  
  115.     private int GetCountPassengers()
  116.     {
  117.         int minimumCountPassenger = 20;
  118.         int maximumCountPassenger = minimumCountPassenger * 7;
  119.         int tryCountPassenger;
  120.  
  121.         tryCountPassenger = _random.Next(minimumCountPassenger, maximumCountPassenger);
  122.         Console.WriteLine($"Общее количество пассажиров - {tryCountPassenger}.");
  123.  
  124.         return tryCountPassenger;
  125.     }
  126.  
  127.     private int GetAllPassengersForDirection()
  128.     {
  129.         int countAllPassengersForDirection;
  130.  
  131.         Console.Write($"Введите любой символ для обновления данных о количестве пассажиров:");
  132.         Console.ReadKey();
  133.  
  134.         countAllPassengersForDirection = GetCountPassengers();
  135.  
  136.         return countAllPassengersForDirection;
  137.  
  138.     }
  139.  
  140.     private void ShowDirectionInfo(string directionName = "(не задано)", int totalCountPassenger = 0)
  141.     {
  142.         Console.Clear();
  143.         Console.WriteLine("\t\tКонфигуратор пасcажирских поездов. beta 0.000.0001");
  144.         Console.WriteLine($"Направление движения - \"{directionName}\", количество пассажиров - {totalCountPassenger}.\n");
  145.     }
  146.  
  147.     private Wagon GetTypeWagon()
  148.     {
  149.         List<Wagon> _typeWagons = new List<Wagon>();
  150.         Wagon typeWagon = null;
  151.         string userInput;
  152.         bool isCorrectUserSelectedTypeWagon = false;
  153.         int userSelectedTypeWagon = 1;
  154.  
  155.         Console.WriteLine("Выберите поезд. Показываю все типы вагонов:");
  156.         Fill();
  157.         ShowAllTypesWagons();
  158.         Console.Write("\n\nКакой вагон добавляем? (введите порядковый номер): ");
  159.  
  160.         while (!isCorrectUserSelectedTypeWagon)
  161.         {
  162.             userInput = Console.ReadLine();
  163.             isCorrectUserSelectedTypeWagon = int.TryParse(userInput, out userSelectedTypeWagon);
  164.  
  165.             if (isCorrectUserSelectedTypeWagon)
  166.             {
  167.                 if (userSelectedTypeWagon > _typeWagons.Count || userSelectedTypeWagon <= 0)
  168.                 {
  169.                     Console.Write($"\aПорядкового номера вагона {userInput} не найдено. Попробуйте еще раз!");
  170.                     isCorrectUserSelectedTypeWagon = false;
  171.                 }
  172.             }
  173.             else
  174.             {
  175.                 Console.Write("\aНужно вводить число! Попробуйте еще раз: ");
  176.             }
  177.         }
  178.  
  179.         for (int i = 0; i < _typeWagons.Count; i++)
  180.         {
  181.             if ((userSelectedTypeWagon - 1) == i)
  182.                 typeWagon = new Wagon(_typeWagons[i].NameType, _typeWagons[i].MaximumCapacity);
  183.         }
  184.  
  185.         return typeWagon;
  186.  
  187.         void ShowAllTypesWagons()
  188.         {
  189.             for (int i = 0; i < _typeWagons.Count; i++)
  190.             {
  191.                 Console.Write($"\n#{i + 1} - ");
  192.                 _typeWagons[i].ShowInfo();
  193.             }
  194.         }
  195.  
  196.         void Fill()
  197.         {
  198.             _typeWagons.Add(new Wagon("Сидячий", 67));
  199.             _typeWagons.Add(new Wagon("Плацкартный", 54));
  200.             _typeWagons.Add(new Wagon("Международный", 40));
  201.             _typeWagons.Add(new Wagon("Купейный", 36));
  202.             _typeWagons.Add(new Wagon("Люкс", 18));
  203.             _typeWagons.Add(new Wagon("Мягкий", 8));
  204.         }
  205.     }
  206. }
  207.  
  208. class Train
  209. {
  210.     private List<Wagon> _wagons = new List<Wagon>();
  211.  
  212.     public Train(string directionName, List<Wagon> wagons)
  213.     {
  214.         DirectionName = directionName;
  215.         _wagons = wagons;
  216.     }
  217.  
  218.     public string DirectionName { get; private set; }
  219.  
  220.     public void ShowInfo()
  221.     {
  222.         foreach (Wagon wagon in _wagons)
  223.         {
  224.             Console.Write("u");
  225.             wagon.ShowInfo();
  226.         }
  227.     }
  228.  
  229.     public void AddNewWagon(Wagon wagon)
  230.     {
  231.         _wagons.Add(new Wagon(wagon.NameType, wagon.MaximumCapacity));
  232.     }
  233. }
  234.  
  235. class Wagon
  236. {
  237.     public Wagon(string nameType, int maximumCapacity)
  238.     {
  239.         NameType = nameType;
  240.         MaximumCapacity = maximumCapacity;
  241.     }
  242.  
  243.     public string NameType { get; private set; }
  244.     public int MaximumCapacity { get; private set; }
  245.  
  246.     public void ShowInfo()
  247.     {
  248.         Console.Write($" [ {NameType} - {MaximumCapacity} ] ");
  249.     }
  250. }
Tags: ijunior
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement