SHOW:
|
|
- or go back to the newest paste.
| 1 | using System; | |
| 2 | using System.Collections.Generic; | |
| 3 | - | namespace C_sharp_Light |
| 3 | + | |
| 4 | namespace CLight | |
| 5 | {
| |
| 6 | class Program | |
| 7 | - | static void Main(string[] args) |
| 7 | + | |
| 8 | public static void Main() | |
| 9 | - | |
| 9 | + | |
| 10 | List<Carriage> carriage = new List<Carriage>() {new Carriage(10, "Малый вагон"), new Carriage(20, "Средний вагон"), new Carriage(30, "Большой вагон") };
| |
| 11 | Depo depo = new Depo(carriage); | |
| 12 | depo.Work(); | |
| 13 | } | |
| 14 | } | |
| 15 | public static class RandomStatic | |
| 16 | {
| |
| 17 | static private Random _rand = new Random(); | |
| 18 | static public int GetNext(int min, int max) | |
| 19 | {
| |
| 20 | return _rand.Next(min, max); | |
| 21 | ||
| 22 | } | |
| 23 | } | |
| 24 | public static class Messager | |
| 25 | {
| |
| 26 | static public void ShowMessageWithColor(string message, ConsoleColor color, bool delay) | |
| 27 | {
| |
| 28 | ConsoleColor defaultColor = Console.ForegroundColor; | |
| 29 | Console.ForegroundColor = color; | |
| 30 | Console.WriteLine(message); | |
| 31 | Console.ForegroundColor = defaultColor; | |
| 32 | if (delay) | |
| 33 | Console.ReadKey(); | |
| 34 | } | |
| 35 | } | |
| 36 | class Depo | |
| 37 | {
| |
| 38 | private List<Carriage> _availableCarriages; | |
| 39 | private Direction _direction; | |
| 40 | public Depo(List<Carriage> availableCarriages) | |
| 41 | {
| |
| 42 | _availableCarriages = availableCarriages; | |
| 43 | } | |
| 44 | public void Work() | |
| 45 | {
| |
| 46 | bool isOpen = true; | |
| 47 | int step = 0; | |
| 48 | while (isOpen) | |
| 49 | {
| |
| 50 | Console.Clear(); | |
| 51 | if(step == 0) | |
| 52 | {
| |
| 53 | Messager.ShowMessageWithColor("Ещё нет созданного направления. \n\n\n", ConsoleColor.White, false);
| |
| 54 | Console.WriteLine("Enter - Создать направление \nEsc - выход");
| |
| 55 | switch (Console.ReadKey().Key) | |
| 56 | {
| |
| 57 | case ConsoleKey.Enter: | |
| 58 | Messager.ShowMessageWithColor("Вы получили новое направление. Оформите его!", ConsoleColor.Green, true);
| |
| 59 | _direction = new Direction(); | |
| 60 | step = 1; | |
| 61 | break; | |
| 62 | case ConsoleKey.Escape: | |
| 63 | isOpen = false; | |
| 64 | break; | |
| 65 | } | |
| 66 | } | |
| 67 | else if(step == 1) | |
| 68 | {
| |
| 69 | Messager.ShowMessageWithColor("Направление есть. \n\n\n", ConsoleColor.White, false);
| |
| 70 | Console.WriteLine("Enter - Создать поезд");
| |
| 71 | switch (Console.ReadKey().Key) | |
| 72 | {
| |
| 73 | case ConsoleKey.Enter: | |
| 74 | _direction.CreateTrain(); | |
| 75 | Messager.ShowMessageWithColor("Вы создали поезд", ConsoleColor.Green, true);
| |
| 76 | step = 2; | |
| 77 | break; | |
| 78 | } | |
| 79 | } | |
| 80 | else if (step == 2) | |
| 81 | {
| |
| 82 | ShowInfo(); | |
| 83 | Messager.ShowMessageWithColor("\n\n\nМеню продажи билетов", ConsoleColor.White, false);
| |
| 84 | Console.WriteLine("Enter - Продать билеты");
| |
| 85 | switch (Console.ReadKey().Key) | |
| 86 | {
| |
| 87 | case ConsoleKey.Enter: | |
| 88 | _direction.SellTickets(); | |
| 89 | step = 3; | |
| 90 | break; | |
| 91 | } | |
| 92 | } | |
| 93 | else if (step == 3) | |
| 94 | {
| |
| 95 | ShowInfo(); | |
| 96 | Messager.ShowMessageWithColor("\n\nМеню создание вагонов поезда", ConsoleColor.White, false);
| |
| 97 | Console.WriteLine("Enter - создать вагоны поезда");
| |
| 98 | switch (Console.ReadKey().Key) | |
| 99 | {
| |
| 100 | case ConsoleKey.Enter: | |
| 101 | _direction.Train.FormTrain(_availableCarriages,_direction.Passenger); | |
| 102 | Messager.ShowMessageWithColor("Вы сформировали состав", ConsoleColor.Green, true);
| |
| 103 | step = 4; | |
| 104 | break; | |
| 105 | } | |
| 106 | } | |
| 107 | else if (step == 4) | |
| 108 | {
| |
| 109 | ShowInfo(); | |
| 110 | Messager.ShowMessageWithColor("\n\n\nМеню запуска поезда", ConsoleColor.White, false);
| |
| 111 | Console.WriteLine("Enter - Запустить поезд");
| |
| 112 | switch (Console.ReadKey().Key) | |
| 113 | {
| |
| 114 | case ConsoleKey.Enter: | |
| 115 | _direction.Train.Start(); | |
| 116 | step = 0; | |
| 117 | _direction = null; | |
| 118 | break; | |
| 119 | ||
| 120 | } | |
| 121 | } | |
| 122 | } | |
| 123 | } | |
| 124 | private void ShowInfo() | |
| 125 | {
| |
| 126 | Console.WriteLine($"Направление {_direction.DirectionFrom} - {_direction.DirectionTo}");
| |
| 127 | Messager.ShowMessageWithColor($"Вагоны в составе", ConsoleColor.Yellow, false); | |
| 128 | Console.WriteLine(_direction.Train.GetInfoCarriage()); | |
| 129 | Messager.ShowMessageWithColor($"Пассажиров/Доступных мест {_direction.Passenger}/{_direction.Train.GetAvailableSeats()}", ConsoleColor.White, false);
| |
| 130 | } | |
| 131 | } | |
| 132 | class Direction | |
| 133 | {
| |
| 134 | public int Passenger { get; private set; }
| |
| 135 | public string DirectionFrom { get; private set; } = "";
| |
| 136 | public string DirectionTo { get; private set; } = "";
| |
| 137 | public Train Train { get; private set; }
| |
| 138 | public Direction() | |
| 139 | {
| |
| 140 | while (DirectionFrom == "" || DirectionTo == "") | |
| 141 | {
| |
| 142 | Console.Clear(); | |
| 143 | Messager.ShowMessageWithColor("Введите направление откуда: ", ConsoleColor.White, false);
| |
| 144 | DirectionFrom = Console.ReadLine(); | |
| 145 | Messager.ShowMessageWithColor("Введите направление куда: ", ConsoleColor.White, false);
| |
| 146 | DirectionTo = Console.ReadLine(); | |
| 147 | if (DirectionFrom == "" || DirectionTo == "") | |
| 148 | Messager.ShowMessageWithColor("Было введено пустое направление. Введите ещё раз.", ConsoleColor.Red, true);
| |
| 149 | } | |
| 150 | } | |
| 151 | public void CreateTrain() | |
| 152 | {
| |
| 153 | Train = new Train(); | |
| 154 | } | |
| 155 | public void SellTickets() | |
| 156 | {
| |
| 157 | Passenger = RandomStatic.GetNext(50, 300); | |
| 158 | Messager.ShowMessageWithColor("Билет проданы", ConsoleColor.Green, true);
| |
| 159 | } | |
| 160 | } | |
| 161 | class Train | |
| 162 | {
| |
| 163 | ||
| 164 | private List<Carriage> _listCarriage = new List<Carriage>(); | |
| 165 | public void Start() | |
| 166 | {
| |
| 167 | Messager.ShowMessageWithColor("Поезд запущен!", ConsoleColor.Green, true);
| |
| 168 | } | |
| 169 | public int GetAvailableSeats() | |
| 170 | {
| |
| 171 | int result = 0; | |
| 172 | foreach (Carriage car in _listCarriage) | |
| 173 | {
| |
| 174 | result += car.AmountPassengers; | |
| 175 | } | |
| 176 | return result; | |
| 177 | } | |
| 178 | public string GetInfoCarriage() | |
| 179 | {
| |
| 180 | string result = ""; | |
| 181 | for (int i = 0; i < _listCarriage.Count; i++) | |
| 182 | {
| |
| 183 | result += $"{i}:{_listCarriage[i].Name}\n";
| |
| 184 | } | |
| 185 | return result; | |
| 186 | } | |
| 187 | public void FormTrain(List<Carriage> typeCarriages, int amountPassenger) | |
| 188 | {
| |
| 189 | typeCarriages.Sort(delegate (Carriage x, Carriage y) | |
| 190 | {
| |
| 191 | if (x.AmountPassengers > y.AmountPassengers) return -1; | |
| 192 | else if (x.AmountPassengers < y.AmountPassengers) return 1; | |
| 193 | else return 0; | |
| 194 | }); | |
| 195 | int index = 0; | |
| 196 | while (GetAvailableSeats() < amountPassenger) | |
| 197 | {
| |
| 198 | if (typeCarriages[index].AmountPassengers <= amountPassenger - GetAvailableSeats()) | |
| 199 | _listCarriage.Add(typeCarriages[index]); | |
| 200 | else | |
| 201 | index++; | |
| 202 | if (index >= typeCarriages.Count) | |
| 203 | break; | |
| 204 | } | |
| 205 | if(amountPassenger-GetAvailableSeats()>0) | |
| 206 | _listCarriage.Add(typeCarriages[typeCarriages.Count - 1]); | |
| 207 | } | |
| 208 | } | |
| 209 | class Carriage | |
| 210 | {
| |
| 211 | public string Name { get; private set; }
| |
| 212 | public int AmountPassengers { get; private set; }
| |
| 213 | public Carriage(int amountPassengers, string name) | |
| 214 | {
| |
| 215 | AmountPassengers = amountPassengers; | |
| 216 | Name = name; | |
| 217 | } | |
| 218 | } | |
| 219 | } |