Загрузка данных


using System.Xml.Linq;
using auto = object;

namespace ConsoleApp1
{
    public class Program
    {
        static void Main(string[] args)
        {
            Equipment[] equipments =
            [
                new(1, "Отвертка", 50),
                new(2, "Клюшка для гольфа", 42),
                new(3, "Холодильник", 80),
                new(4, "Веревка", 205),
                new(5, "Окно", 15),
                new(6, "Стол", 90),
                new(7, "Параплан", 65),
                new(8, "Кирка из Minecraft", 42),
                new(9, "Подводная лодка", 70),
                new(10, "Камень", 250)

            ];

            bool isContinue = true;

            while (isContinue)
            {
                Console.Write("\tМеню\n" +
                    "1. Просмотр оборудования\n" +
                    "2. Выбор единицы\n" +
                    "3. Изменение суточной стоимости\n" +
                    "4. Выдача\n" +
                    "5. Возврат\n" +
                    "0. Выход\n" +
                    "Выберите действие: ");
                string? selectedAction = Console.ReadLine();
                Console.WriteLine();

                switch (selectedAction)
                {
                    case "1":
                        PrintEquipments(equipments);

                        break;
                    case "2":
                        PrintEquipments(equipments);

                        Console.Write("Выберите оборудование: ");
                        int selectedEquipment;
                        while (!int.TryParse(Console.ReadLine(), out selectedEquipment) || !(selectedEquipment >= 1 && selectedEquipment <= equipments.Length))
                            Console.Write("Неверный ввод!\n" +
                                "Выберите оборудование: ");
                        selectedEquipment--;

                        Console.Write("1. Изменение суточной стоимости\n" +
                            "2. Выдача\n" +
                            "3. Возврат\n" +
                            "Выебрите действие: ");
                        int selectedAction_;
                        while (!int.TryParse(Console.ReadLine(), out selectedAction_) || !(selectedAction_ >= 1 && selectedAction_ <= 3))
                            Console.Write("Неверный ввод!\n" +
                                "Выберите действие: ");
                        Console.WriteLine();

                        switch(selectedAction_)
                        {
                            case 1:
                                Console.WriteLine((ChangeDailyRate(equipments[selectedEquipment])? "Успешное изменение суточной стоимости!" : "Не удалось изменить суточную стоимость")); 

                                    break;
                            case 2:

                                break;
                            case 3:

                                break;

                            default:
                                Console.WriteLine("Ошибка ввода!");

                                break;

                        }

                        break;
                    case "3":

                        break;
                    case "4":

                        break;
                    case "5":

                        break;
                    case "0":

                        break;

                    default:
                        Console.WriteLine("Неизвестная команда, повторите ввод");
                        break;

                }

            }

            //просмотр оборудования
            //выбор единицы
            //изменение суточной стоимости
            //выдача
            //возврат
            //выход

        }

        static void PrintEquipments(Equipment[] equipments)
        {
            for (int i = 0; i < equipments.Length; i++)
                Console.WriteLine($"{i + 1}. {equipments[i].FullInfo}");

        }

        //изменение суточной стоимости
        static bool ChangeDailyRate(Equipment equipment)
        {
            if (equipment.IsAvailable)
            {
                Console.Write("Введите суточную стоимость для изменения: ");
                decimal dailyRate;
                while (!decimal.TryParse(Console.ReadLine(), out dailyRate) || dailyRate <= 0)
                    Console.Write("Неверный ввод!\n" +
                                    "Введите суточную стоимость для изменения: ");

                equipment.DailyRate = dailyRate;

                return true;
            }
            else
            {
                Console.WriteLine("Пока оборудование выдано, изменять суточную стоимость нельзя");

                return false;
            }
        }
        //выдача
        //возврат

    }

    public class Equipment
    {
        private readonly int inventoryNumber;
        private string name;
        private decimal dailyRate;

        public int InventoryNumber { get { return inventoryNumber; } }
        public string Name
        {
            get { return name; }
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                    throw new Exception("Имя оборудования не может быть пустым");
                else
                    name = value;
            }
        }
        public decimal DailyRate
        {
            get { return dailyRate; }
            set
            {
                if (!IsAvailable)
                    throw new Exception("Пока оборудование выдано, изменять суточную стоимость нельзя");
                else if (value <= 0)
                    throw new Exception("Значение суточной стоимости не может быть меньше или равно нулю");
                else
                    dailyRate = value;
            }
        }
        public int CurrentRentalDays { get; private set; } = 0;
        public bool IsAvailable
        {
            get
            {
                return CurrentRentalDays == 0 ? true : false;
            }
        }
        public decimal CurrentRentalCost { get { return DailyRate * CurrentRentalDays; } }
        public string FullInfo
        {
            get
            {
                return $"Инвентарный номер: {InventoryNumber} | Название: {Name}\n" +
                    $"\tСуточная стоимость: {DailyRate}\n" +
                    $"\tДоступность оборудования: {(IsAvailable ? "Доступно" : "Недоступно")}\n" +
                    $"\tСрок текущего проката: {(IsAvailable ? "-" : CurrentRentalDays)}\n" +
                    $"\tСтоимость текущего проката: {(IsAvailable ? "-" : CurrentRentalCost)}";
            }
        }

        public Equipment(int inventoryNumber, string name, decimal dailyRate)
        {
            this.inventoryNumber = inventoryNumber;
            Name = name;
            DailyRate = dailyRate;

        }

        public bool Rent()
        {
            if (IsAvailable)
                CurrentRentalDays = 1;
            else
                return false;

            return true;
        }

        public bool Rent(int currentRentalDays)
        {
            if (IsAvailable && currentRentalDays > 0)
                CurrentRentalDays = currentRentalDays;
            else
                return false;

            return true;
        }

        public bool ReturnEquipment()
        {
            if (!IsAvailable)
                CurrentRentalDays = 0;
            else
                return false;

            return true;
        }

    }

}