Advertisement
VssA

console

Jan 17th, 2024
733
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.46 KB | None | 0 0
  1. using System.Globalization;
  2. using Optimizer.Application;
  3. using Optimizer.Domain.Bus;
  4. using Optimizer.Domain.Bus.Entities;
  5. using Optimizer.Domain.Bus.ValueObjects;
  6. using Optimizer.Domain.Common.Entities;
  7. using Optimizer.Domain.Common.ValueObjects;
  8. using Optimizer.Domain.Route;
  9. using Optimizer.Domain.Route.ValueObjects;
  10. using Optimizer.PathMaker.RouteMaker;
  11.  
  12. internal class Program
  13. {
  14.     private const string MainMenu = """
  15.                                    1 - Создать автобус;
  16.                                    2 - Создать остановку;
  17.                                    3 - Создать маршрут автобуса;
  18.                                    4 - Посмотреть все автобусы;
  19.                                    5 - Посмотреть все остановки;
  20.                                    6 - Построить лучший путь;
  21.                                    0 - Выйти;
  22.                                    """;
  23.  
  24.     private static readonly List<Transport<BusId>> Buses = new();
  25.     private static readonly List<BusStation> BusStations = new();
  26.     private static readonly List<Route<BusId>> Routes = new();
  27.     private static void Main(string[] args)
  28.     {  
  29.         Console.WriteLine(MainMenu);
  30.         var answer = Console.ReadLine();
  31.         while (answer != null && answer != "0")
  32.         {
  33.             if (answer == "1")
  34.             {
  35.                 Console.WriteLine("Введите максимальное количество пассажиров");
  36.                 var maxPassengersCount = int.Parse(Console.ReadLine());
  37.                 Console.WriteLine("Введите знаковый номер автобуса");
  38.                 var plateNumber = Console.ReadLine();
  39.                 Buses.Add(Bus.Create(maxPassengersCount, PlateNumber.Create(plateNumber)));
  40.                 Console.WriteLine("Вы создали новый автобус под номером {0}", plateNumber);
  41.             }
  42.             else if (answer == "2")
  43.             {
  44.                 Console.WriteLine("Введите название остановки");
  45.                 var busStationName = Console.ReadLine();
  46.                 BusStations.Add(BusStation.Create(busStationName));
  47.                 Console.WriteLine("Вы создали остановку {0}", busStationName);
  48.             }
  49.             else if (answer == "3")
  50.             {
  51.                 if (Buses.Count < 1)
  52.                 {
  53.                     Console.WriteLine("Пока не создано автобусов для маршрута");
  54.                     Console.WriteLine(MainMenu);
  55.                     answer = Console.ReadLine();
  56.                     continue;
  57.                 }
  58.                
  59.                 if (BusStations.Count < 2)
  60.                 {  
  61.                     PrintErrorWithText("Пока не создано как минимум двух станций для маршрута");
  62.                     answer = Console.ReadLine();
  63.                     continue;
  64.                 }
  65.                
  66.                 Console.WriteLine("Выберите автобус для маршрута");
  67.                 PrintAllBuses();
  68.                 var busNumber = int.Parse(Console.ReadLine());
  69.                 if (busNumber < 1 || busNumber > Buses.Count)
  70.                 {
  71.                     PrintErrorWithText("Неверный индекс автобуса");
  72.                     answer = Console.ReadLine();
  73.                     continue;
  74.                 }
  75.                
  76.                 Console.WriteLine("Сколько станций в маршруте?");
  77.                 var busStationsCount = int.Parse(Console.ReadLine());
  78.                 var arrivalTimes = new List<ArrivalTime>();
  79.                 for (var i = 0; i < busStationsCount; i++)
  80.                 {
  81.                     Console.WriteLine("Создание маршрута №{0}", i+1);
  82.                     Console.WriteLine("Выберите станцию");
  83.                     PrintAllStations();
  84.  
  85.                     var busStationIndex = int.Parse(Console.ReadLine());
  86.  
  87.                     var date = DateTime.UtcNow.AddHours(i+1);
  88.                
  89.                     Console.WriteLine("Введите количество людей на остановке");
  90.                     var peoplesCount = int.Parse(Console.ReadLine());
  91.                     arrivalTimes.Add(ArrivalTime.Create(BusStations[busStationIndex-1], date, peoplesCount));
  92.                 }
  93.  
  94.                 var newRoute = Route<BusId>.Create(Buses[busNumber-1], arrivalTimes);
  95.                 Routes.Add(Route<BusId>.Create(Buses[busNumber-1], arrivalTimes));
  96.                 Buses[busNumber-1].AddRoute(newRoute);
  97.             }
  98.             else if (answer == "4")
  99.             {
  100.                 Console.WriteLine();
  101.                 PrintAllBuses();
  102.                 Console.WriteLine();
  103.             }
  104.             else if (answer == "5")
  105.             {
  106.                 Console.WriteLine();
  107.                 for(var i = 0; i<BusStations.Count; i++)
  108.                 {
  109.                     Console.WriteLine("{0}: Остановка с названием {1}", i+1, BusStations[i].StationName);
  110.                 }
  111.                 Console.WriteLine();
  112.             }
  113.             else if (answer == "6")
  114.             {
  115.                 Console.WriteLine("Выберите станцию отправления");
  116.                 PrintAllStations();
  117.                 var startStationIndex = int.Parse(Console.ReadLine());
  118.                
  119.                 Console.WriteLine("Выберите станцию прибытия");
  120.                 PrintAllStations();
  121.                 var endStationIndex = int.Parse(Console.ReadLine());
  122.                 var path = PathFinder.FindPath(BusStations[startStationIndex-1],
  123.                     BusStations[endStationIndex-1], Buses, DateTime.UtcNow);
  124.                 var bestRoute = path.Item1[0];
  125.                 Console.WriteLine("Лучшиq вариант поездки для вас: Автобус с номером {0}", (bestRoute.Item1 as Bus).PlateNumber);
  126.                 Console.WriteLine("Он поедет через такие остановки");
  127.                 foreach (var station in bestRoute.Item2)
  128.                 {
  129.                     Console.WriteLine("Остановка {0}", station.StationName);
  130.                 }
  131.                
  132.                 Console.WriteLine("Время в пути: {0}, Средний процент загруженности автобуса: {1}", path.Time, path.avgMaxPassPercent);
  133.             }
  134.             Console.WriteLine(MainMenu);
  135.             answer = Console.ReadLine();
  136.         }
  137.         Console.WriteLine(answer);
  138.     }
  139.  
  140.     private static void PrintAllStations()
  141.     {
  142.         for (var i = 0; i < BusStations.Count; i++)
  143.         {
  144.             Console.WriteLine("{0}: Остановка с названием {1}", i + 1, BusStations[i].StationName);
  145.         }
  146.     }
  147.  
  148.     private static void PrintErrorWithText(string text)
  149.     {
  150.         Console.WriteLine(text);
  151.         Console.WriteLine(MainMenu);
  152.     }
  153.  
  154.     private static void PrintAllBuses()
  155.     {
  156.         for (var i = 0; i < Buses.Count; i++)
  157.         {
  158.             Console.WriteLine("{0}: Автобус с номером {1}, максимальное число пассажиров - {2}",
  159.                 i + 1, (Buses[i] as Bus).PlateNumber, Buses[i].MaxPassengersCount);
  160.         }
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement