Skip to content

Instantly share code, notes, and snippets.

@Dead-in-side
Last active April 21, 2024 11:39
Show Gist options
  • Save Dead-in-side/935d2a17876ce852173a4dff01837d90 to your computer and use it in GitHub Desktop.
Save Dead-in-side/935d2a17876ce852173a4dff01837d90 to your computer and use it in GitHub Desktop.
namespace IJunior
{
public class Program
{
private static void Main(string[] args)
{
Dispatcher dispatcher = new Dispatcher();
dispatcher.WorkAsDispatcher();
}
}
public enum ConsoleCommand
{
AddTrain = 1,
Exit
}
public class Dispatcher
{
private List<Train> _trains = new List<Train>();
public void WorkAsDispatcher()
{
bool isWork = true;
while (isWork)
{
ShowInfo();
Console.WriteLine();
Console.WriteLine((int)ConsoleCommand.AddTrain + ". Добавить поезд");
Console.WriteLine((int)ConsoleCommand.Exit + ". Выход");
if (int.TryParse(Console.ReadLine(), out int userInput))
{
switch (userInput)
{
case (int)ConsoleCommand.AddTrain:
AddTrain();
break;
case (int)ConsoleCommand.Exit:
isWork = false;
break;
default:
Console.WriteLine("Некорректный ввод!");
break;
}
}
Console.ReadLine();
Console.Clear();
}
}
private void AddTrain()
{
Route route = AddRoute();
if (route.StartRoute == route.EndRoute == false)
{
int soldTickets = SellTickets();
List<Carriage> carriages = AddCarriages(soldTickets);
Train train = new Train(route, soldTickets, carriages);
_trains.Add(train);
train.ShowInfo();
}
else
{
Console.WriteLine("Поезд в депо города " + route.EndRoute);
}
}
private void ShowInfo()
{
Console.WriteLine("Кол-во поездов на маршрутах: " + _trains.Count);
foreach (Train train in _trains)
{
Console.WriteLine(train.Route.ShowInfo() + " - " + train.SoldTickets + " билетов продано.");
}
}
private List<Carriage> AddCarriages(int SoldTickets)
{
List<Carriage> carriages = new List<Carriage>();
Carriage carriage = new Carriage();
int carriagesNumber;
if (SoldTickets % carriage.MaxPlaces == 0)
{
carriagesNumber = SoldTickets / carriage.MaxPlaces;
}
else
{
carriagesNumber = SoldTickets / carriage.MaxPlaces + 1;
}
for (int i = 0; i < carriagesNumber; i++)
{
carriages.Add(new Carriage());
}
return carriages;
}
private Route AddRoute()
{
string startRoute;
string finishRoute;
Route route;
Console.WriteLine("Введите пункт отправления: ");
startRoute = Console.ReadLine();
Console.WriteLine("Введите пункт назанчения: ");
finishRoute = Console.ReadLine();
route = new Route(startRoute, finishRoute);
return route;
}
private int SellTickets()
{
Random random = new Random();
int lowRandomLimit = 50;
int highRandomLimit = 400;
int soldTickets = random.Next(lowRandomLimit, highRandomLimit);
Console.WriteLine("На маршрут продано " + soldTickets + " билетов.");
return soldTickets;
}
}
public class Train
{
private List<Carriage> _carriages;
public Train(Route route, int soldTickets, List<Carriage> carriages)
{
Route = route;
SoldTickets = soldTickets;
_carriages = carriages;
}
public Route Route { get; private set; }
public int SoldTickets { get; private set; }
public void ShowInfo()
{
int allPlacesNumber = _carriages.Count * _carriages.First().MaxPlaces;
Console.WriteLine($"Поезд: {Route.ShowInfo()}, кол-во вагонов: {_carriages.Count}, пассажиров: {SoldTickets}/{allPlacesNumber}");
}
}
public class Carriage
{
public Carriage(int maxPlaces = 40)
{
MaxPlaces = maxPlaces;
}
public int MaxPlaces { get; private set; }
}
public class Route
{
public Route(string startRoute, string endRoute)
{
StartRoute = startRoute;
EndRoute = endRoute;
}
public string StartRoute { get; private set; }
public string EndRoute { get; private set; }
public string ShowInfo() => StartRoute + " - " + EndRoute;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment