using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace ZDstationRealization
static void Main(string[] args)
ZDstation.ConnectingEl();
internal ZDinfo(int TrainNumber, string StartingPoint, string DestinationPoint, string DepartureTime, int FreeSeats, int Cost)
this.TrainNumber = TrainNumber;
this.StartingPoint = StartingPoint;
this.DestinationPoint = DestinationPoint;
this.DepartureTime = DepartureTime;
this.FreeSeats = FreeSeats;
internal int ShowTrainNumber { get { return TrainNumber; } }
internal string ShowStartPoint { get { return StartingPoint; } }
internal string ShowDestinationPoint { get { return DestinationPoint; } }
internal string ShowDepartureTime { get { return DepartureTime; } }
internal int ShowCost { get { return Cost; } }
internal int ShowFreeSeats { get { return FreeSeats; } set { FreeSeats = value; } }
internal string ShowAllText { get { return $"{TrainNumber} {StartingPoint} {DestinationPoint} {DepartureTime} {FreeSeats}"; } }
internal static void ConnectingEl()
Console.WriteLine($"Train Station №{new Random().Next(1, 33)}");
static bool MainMenu = false;
Console.Write("Мы где? ");
string answerStart = Console.ReadLine();
Console.Write("Куда держим путь? ");
string answerDest = Console.ReadLine();
Selection(answerStart, answerDest);
static DateTime dateTime = new DateTime();
async static void TTimer()
dateTime = dateTime.AddMinutes(1);
static List<ZDinfo> AllTheData = new List<ZDinfo>();
static string path = @"zd.txt";
async static void DataAcquisition()
FileInfo file = new FileInfo(path);
using (StreamReader reading = new StreamReader(path))
while ((information = reading.ReadLine()) != null)
string[] temp = information.Split(' ');
if (Checking(temp[0], temp[3], temp[4], temp[5]))
ZDinfo rInfo = new ZDinfo(Int32.Parse(temp[0]),
temp[1], temp[2], temp[3], Int32.Parse(temp[4]), Int32.Parse(temp[5]));
Console.WriteLine("Файл с данными был удален");
static bool Checking(string TNumber, string TTime, string TSeats, string TCost)
if (Int32.TryParse(TNumber, out TNumberResult)
& new Regex(@"\d*:\d*").IsMatch(TTime)
& Int32.TryParse(TCost, out TCostResult)
& Int32.Parse(TTime.Split(':')[0]) < 24
& Int32.Parse(TTime.Split(':')[1]) < 60
& Int32.TryParse(TSeats, out TSeatsResult)
static List<ZDinfo> zdSelect = new List<ZDinfo>();
static void Selection(string answSt, string answDest)
ZDinfo zdCheapest = new ZDinfo();
foreach (ZDinfo info in AllTheData)
if (info.ShowStartPoint == answSt
& info.ShowDestinationPoint == answDest
& info.ShowFreeSeats != 0
& Int32.Parse(dateTime.ToShortTimeString().Split(':')[0]) <= Int32.Parse(info.ShowDepartureTime.Split(':')[0]))
Console.WriteLine("Самый выгодный:");
foreach (ZDinfo info in zdSelect)
if (info.ShowCost < minTcost)
minTcost = info.ShowCost;
Console.WriteLine($"Поезд №{zdCheapest.ShowTrainNumber} " +
$"из {zdCheapest.ShowStartPoint} " +
$"до {zdCheapest.ShowDestinationPoint} " +
$"отправляется в {zdCheapest.ShowDepartureTime}. " +
$"Свободные места - {zdCheapest.ShowFreeSeats}. " +
$"Цена - {zdCheapest.ShowCost}");
Console.WriteLine($"Все варианты({zdSelect.Count()}):");
var zdSelectsort = zdSelect.OrderBy(x => Int32.Parse(x.ShowDepartureTime.Split(':')[0]));
foreach (ZDinfo binfo in zdSelectsort)
Console.WriteLine($"Поезд №{binfo.ShowTrainNumber} " +
$"из {binfo.ShowStartPoint} " +
$"до {binfo.ShowDestinationPoint} " +
$"отправляется в {binfo.ShowDepartureTime}. " +
$"Свободные места - {binfo.ShowFreeSeats}. " +
$"Цена - {binfo.ShowCost}");
Console.Write("Показать дополнительные варианты? ");
string answer = Console.ReadLine();
if (answer == "Да" & answer == "да")
Console.WriteLine("Дополнительные варианты:");
NexSelection(answSt, answDest);
Console.WriteLine("Так у нас поезда не ходят(");
static void NexSelection(string answSt, string answDest)
List<ZDinfo> Start = new List<ZDinfo>();
List<ZDinfo> Dest = new List<ZDinfo>();
List<ZDinfo> zdNextSelectStart = new List<ZDinfo>();
List<ZDinfo> zdNextSelectDest = new List<ZDinfo>();
foreach (ZDinfo info in AllTheData)
if (info.ShowStartPoint == answSt)
if (info.ShowDestinationPoint == answDest)
foreach (ZDinfo info in Start)
foreach (ZDinfo nextinfo in Dest)
if (info.ShowDestinationPoint == nextinfo.ShowStartPoint)
zdNextSelectStart.Add(info);
zdNextSelectDest.Add(nextinfo);
if (zdNextSelectStart.Count() == zdNextSelectDest.Count())
for (int i = 0; i < zdNextSelectStart.Count(); i++)
ZDinfo zinfo = zdNextSelectStart[i];
Console.WriteLine($"Поезд №{zinfo.ShowTrainNumber} " +
$"из {zinfo.ShowStartPoint} " +
$"до {zinfo.ShowDestinationPoint} " +
$"отправляется в {zinfo.ShowDepartureTime}. " +
$"Свободные места - {zinfo.ShowFreeSeats}. " +
$"Цена - {zinfo.ShowCost}");
zinfo = zdNextSelectDest[i];
Console.WriteLine($"Поезд №{zinfo.ShowTrainNumber} " +
$"из {zinfo.ShowStartPoint} " +
$"до {zinfo.ShowDestinationPoint} " +
$"отправляется в {zinfo.ShowDepartureTime}. " +
$"Свободные места - {zinfo.ShowFreeSeats}. " +
$"Цена - {zinfo.ShowCost}");
static List<int> Ticket = new List<int>();
Random randomim = new Random();
Console.Write("Хотите приобрести билет(ы)? ");
string answer = Console.ReadLine();
if (answer == "Да" | answer == "да")
Console.Write("Введите номер поезда и количество билетов(ex:23_2): ");
string AinAnswer = Console.ReadLine();
if (AinAnswer.Split(' ').Length == 2)
int number = Int32.Parse(AinAnswer.Split(' ')[0]);
int sum = Int32.Parse(AinAnswer.Split(' ')[1]);
foreach (ZDinfo info in zdSelect)
if (info.ShowTrainNumber == number)
if (info.ShowFreeSeats >= sum)
info.ShowFreeSeats -= sum;
Console.WriteLine($"Вы купили билет(ы) на {info.ShowCost * sum}руб.");
int unicTicNumber = randomim.Next(98213);
if (!Ticket.Contains(unicTicNumber))
for (int i = 0; i < sum; i++)
Ticket.Add(unicTicNumber + i);
Console.WriteLine($"Номер Вашего билета - {unicTicNumber + i}.");
Console.WriteLine("Данные введены неправильно!");
Console.Write("Повторить попытку: ");
string BinAnswer = Console.ReadLine();
if (BinAnswer == "Да" | BinAnswer == "да")
static string savingPath = @"zdInfoSave.txt";
async static void BackUp()
using (StreamWriter writing = new StreamWriter(savingPath))
foreach (ZDinfo info in AllTheData)
writing.WriteLine(info.ShowAllText);
public static void Save()
if (File.Exists(savingPath))
if (new FileInfo(savingPath).Length > 0)
using (StreamReader reading = new StreamReader(savingPath))
using (StreamWriter writing = new StreamWriter(path))
writing.WriteLine(reading.ReadToEnd());