using System.Reflection;
using System.Text;
using System.Text.Json;
namespace Directory
{
public enum Brand
{
Volkswagen,
Toyota_Motors,
Daimler,
Ford_Motor,
General_Motors,
Honda_Motor,
SAIC_Motor,
Hyundai,
BMW_group,
Nissan_Motor
}
public enum BodyType
{
Hatchback,
Sedan,
MUV_SUV,
Coupe,
Convertible,
Wagon,
Van,
Jeep,
}
public enum EngineType
{
Diesel, Petrol, Electric, Hybrid, Gas
}
public class Car
{
public Brand Brand;
public BodyType Bodytype;
public EngineType Enginetype;
public int Power;
public int Maximumspeed;
public int Accelerationtime;
public int Fuelconsumptioncity;
public int Fuelconsumptionhighway;
public int Numberofseats;
public Car(Brand brand, BodyType bodytype, EngineType enginetype, int power, int maximumspeed,
int accelerationtime, int fuelconsumptioncity, int fuelconsumptionhighway, int numberofseats)
{
Brand = brand;
Bodytype = bodytype;
Enginetype = enginetype;
Power = power;
Maximumspeed = maximumspeed;
Accelerationtime = accelerationtime;
Fuelconsumptioncity = fuelconsumptioncity;
Fuelconsumptionhighway = fuelconsumptionhighway;
Numberofseats = numberofseats;
}
}
class Program
{
private const string PathForSave = @"D:\cars.json";
private static List<Car> _carList = new List<Car>();
private static bool _saved = false;
static void Main()
{
StartMenu();
}
static void StartMenu()
{
bool exit = false;
while (exit == false)
{
Console.Clear();
Console.WriteLine("1. Добавить автомобиль");
Console.WriteLine("2. Список текущих автомобилей");
Console.WriteLine("3. Записать автомобили в файл " + (_saved ? "(сохранено)" : "(* не сохранено!)"));
Console.WriteLine("4. Выйти");
switch (Console.ReadKey().KeyChar)
{
case '1':
Console.Clear();
_carList.AddRange(AddCars());
break;
case '2':
WriteCars();
break;
case '3':
SaveToJsonAsync();
break;
case '4':
exit = true;
break;
default:
break;
}
}
}
private static void WriteCars()
{
Console.Clear();
Console.WriteLine("Список текущих автомобилей\n");
for (int i = 0; i < _carList.Count; i++)
{
Console.WriteLine($"{i + 1}.");
foreach (FieldInfo field in _carList[i].GetType().GetFields())
{
Console.WriteLine($"{field.Name} : {field.GetValue(_carList[i])}");
}
Console.WriteLine();
}
Console.WriteLine(new string('-', 50));
Console.Write("Enter для выхода в меню...");
Console.ReadLine();
}
static async void SaveToJsonAsync()
{
using (FileStream fs = new FileStream(PathForSave, FileMode.Create))
{
await Task.Run(() => JsonSerializer.SerializeAsync(fs, _carList, new JsonSerializerOptions() { IncludeFields = true }));
_saved = true;
}
}
static int ReadPositiveInt()
{
int result;
while (int.TryParse(Console.ReadLine(), out result) == false || result < 0)
{
Console.WriteLine("Неправильные данные. Должно быть положительное число.");
}
return result;
}
private static T ReadEnum<T>() where T : Enum
{
var names = Enum.GetNames(typeof(T));
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine($"{i}. {names[i]}");
}
int result;
while ((result = ReadPositiveInt()) >= names.Length)
{
Console.WriteLine($"Неправильные данные. Должно быть положительное число от 0 до {names.Length - 1}.");
Console.Write("Попробуйте ещё раз: ");
}
return (T)Enum.Parse(typeof(T), names[result]);
}
static List<Car> AddCars()
{
List<Car> cars = new List<Car>();
Console.Write("Сколько автомобилей вы хотите добавить?\n");
int count = ReadPositiveInt();
for (int i = 0; i < count; i++)
{
Console.WriteLine($"{i + 1})");
Console.WriteLine($"Выберите марку\n");
Brand brand = ReadEnum<Brand>();
Console.Write("Введите тип кузова:\n");
BodyType bodytype = ReadEnum<BodyType>();
Console.Write("Введите тип двигателя :\n");
EngineType enginetype = ReadEnum<EngineType>();
Console.Write("Введите мощность двигателя:\n");
int power = ReadPositiveInt();
Console.Write("Введите максимальную скорость:\n");
int maximumspeed = ReadPositiveInt();
Console.Write("Введите время разгона:\n");
int acceleratintime = ReadPositiveInt();
Console.Write("Введите расход топлива в городе:\n");
int fuelconsumptioncity = ReadPositiveInt();
Console.Write("Введите расход топлива на шоссе:\n");
int fuelconsumptionhighway = ReadPositiveInt();
Console.Write("Введите количество мест:\n");
int numberofseats = ReadPositiveInt();
Car a = new Car(brand, bodytype, enginetype, power, maximumspeed, acceleratintime, fuelconsumptioncity,
fuelconsumptionhighway, numberofseats);
cars.Add(a);
Console.Write("Добавлено!\n\n\n");
}
if (cars.Count != 0)
_saved = false;
return cars;
}
}
}