Advertisement
VssA

console18.91

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