Created
April 24, 2025 17:14
-
-
Save Stas2056/aa5283e6cba536e5c8b4719e2b8a9216 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
namespace HomeWorkPassengerTrainConfigurator | |
{ | |
internal class Program | |
{ | |
static void Main(string[] args) | |
{ | |
Dispatcher dispatcher = new Dispatcher(); | |
DispatcherView view = new DispatcherView(dispatcher); | |
view.Work(); | |
} | |
} | |
class DispatcherView | |
{ | |
private Dispatcher _dispatcher; | |
public DispatcherView(Dispatcher dispatcher) | |
{ | |
_dispatcher = dispatcher; | |
} | |
public void Work() | |
{ | |
const string CommandCreateTrain = "1"; | |
const string CommandExit = "2"; | |
bool isOpen = true; | |
while (isOpen) | |
{ | |
_dispatcher.ShowInfo(); | |
Console.Write($"Menu:\nCreate train: {CommandCreateTrain}\nExit: {CommandExit}\nCommand:"); | |
string UserInput = Console.ReadLine(); | |
switch (UserInput) | |
{ | |
case CommandCreateTrain: | |
_dispatcher.AddNewTrain(); | |
break; | |
case CommandExit: | |
isOpen = CloseTheProgram(); | |
break; | |
} | |
Console.Clear(); | |
} | |
} | |
private bool CloseTheProgram() | |
{ | |
Console.Write("The program is closed."); | |
Console.ReadKey(); | |
return false; | |
} | |
} | |
class Dispatcher | |
{ | |
private int _idOfLastTrain; | |
private List<Train> _trains = new List<Train>(); | |
private Random _random = new Random(); | |
public Dispatcher() | |
{ | |
AddNewTrain(); | |
} | |
public void AddNewTrain() | |
{ | |
Direction direction = GenerateDirection(); | |
int ticketsSold = SellTickets(); | |
_idOfLastTrain++; | |
_trains.Add(CreateNewTrain(direction, ticketsSold)); | |
} | |
public void ShowInfo() | |
{ | |
Console.SetCursorPosition(0, 5); | |
foreach (var train in _trains) | |
{ | |
train.ShowInfo(); | |
} | |
Console.SetCursorPosition(0, 0); | |
} | |
private Direction GenerateDirection() | |
{ | |
List<string> cities = new List<string> { "Minsk", "Brest", "Vitebsk", "Grodno", "Gomel", "Mogilev", "Bobruisk", "Baranovichi", "Borisov", | |
"Pinsk", "Orsha", "Mozyr", "Soligorsk", "Novopolotsk", "Lida", "Molodechno", "Polotsk", "Zhlobin", | |
"Svetlogorsk", "Rechitsa", "Slutsk", "Kobrin", "Volkovysk", "Kalinkovichi", "Smorgon", "Rogachev", | |
"Osipovichi", "Bereza", "Nesvizh", "Stolin" }; | |
string cityDepart = cities[_random.Next(cities.Count)]; | |
cities.Remove(cityDepart); | |
string cityArrives = cities[_random.Next(cities.Count)]; | |
Direction direction = new Direction(cityDepart, cityArrives); | |
return direction; | |
} | |
private int SellTickets() | |
{ | |
int minTickets = 30; | |
int maxTickets = 1000; | |
int ticketsCount = _random.Next(minTickets, maxTickets + 1); | |
return ticketsCount; | |
} | |
private Train CreateNewTrain(Direction direction, int ticketsSold) | |
{ | |
int seatsInWagon = 54; | |
int filledWagons = ticketsSold / seatsInWagon; | |
int seatsOccupiedInLastWagon = ticketsSold % seatsInWagon; | |
List<Wagon> wagons = new List<Wagon>(); | |
for (int i = 0; i < filledWagons; i++) | |
{ | |
wagons.Add(new Wagon(seatsInWagon, seatsInWagon)); | |
} | |
if (seatsOccupiedInLastWagon != 0) | |
wagons.Add(new Wagon(seatsInWagon, seatsOccupiedInLastWagon)); | |
Train train = new Train(_idOfLastTrain, direction, wagons, ticketsSold); | |
return train; | |
} | |
} | |
class Direction | |
{ | |
public Direction(string cityDepart, string cityArrives) | |
{ | |
CityDepart = cityDepart; | |
CityArrives = cityArrives; | |
} | |
public string CityDepart { get; private set; } | |
public string CityArrives { get; private set; } | |
} | |
class Train | |
{ | |
private Direction _direction; | |
private List<Wagon> _wagons = new List<Wagon>(); | |
public Train(int id, Direction direction, List<Wagon> wagons, int ticketsSold) | |
{ | |
Id = id; | |
_direction = direction; | |
_wagons = wagons; | |
TotalSeats = _wagons.Count * _wagons[0].Seats; | |
TicketsSold = ticketsSold; | |
FreeSeats = TotalSeats - TicketsSold; | |
} | |
public int Id { get; private set; } | |
public int TotalSeats { get; private set; } | |
public int FreeSeats { get; private set; } | |
public int TicketsSold { get; private set; } | |
public void ShowInfo() | |
{ | |
Console.WriteLine($"Train: {Id}, {_direction.CityArrives} - {_direction.CityDepart}, tickets sold {TicketsSold}, " + | |
$"total seats: {TotalSeats}, free seats {FreeSeats}, wagons count {_wagons.Count}."); | |
} | |
} | |
class Wagon | |
{ | |
public Wagon(int seats, int seatsOccupied) | |
{ | |
Seats = seats; | |
FreeSeats = Seats - seatsOccupied; | |
} | |
public int Seats { get; private set; } | |
public int FreeSeats { get; private set; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment