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


Program
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //Создайте массив из 5 сеансов (CinemaSession)
            CinemaSession[] cinemaSessions = [
                new CinemaSession("Колобок", 50, 3, 100),
                new CinemaSession("Очень страшное кино", 80, 60, 250),
                new CinemaSession("Человек-паук", 100, 95, 500),
                new CinemaSession("Minecraft", 100, 90, 300),
                new CinemaSession("Дэдпул", 100, 88, 300)
                ];

            //Создайте массив из 2 посетителей (Customer)
            Customer[] customers = [
                new Customer("Иван", 1200, 0),
                new Customer("Георгий", 50000, 3)
                ];

            bool isContinue = true;
            while(isContinue)
            {
                //При запуске программы выведите информацию о пользователях, предоставьте возможность выбрать пользователя
                Console.WriteLine("Пользователи: ");
                for(int i = 0; i < customers.Length; i++)
                    Console.WriteLine($"{i + 1}. {customers[i].GetInfo()}");
                Console.WriteLine("0. Завершить работу");

                int selectedUser;
                Console.Write("Выберите пользователя: ");
                while(!int.TryParse(Console.ReadLine(), out selectedUser) || selectedUser < 0 || selectedUser > customers.Length)
                    Console.Write("Пользователь введен неверно!\n" +
                        "Выберите пользователя: ");
                Console.WriteLine();

                if (selectedUser == 0)
                {
                    isContinue = false;
                    continue;

                }
                
                selectedUser--;

                Console.Write("Нажмите любую клавишу, чтобы продолжить"); Console.ReadKey();
                Console.Clear();

                int selectedSession = 0;
                while (selectedSession >= 0)
                {
                    Console.WriteLine($"=== {customers[selectedUser].GetInfo()} ===");

                    //После выбора пользователя покажите информацию о сеансах, предоставьте возможность забронировать билеты на сеанс
                    Console.WriteLine("Сеансы: ");
                    for (int i = 0; i < cinemaSessions.Length; i++)
                        Console.WriteLine($"{i + 1}. {cinemaSessions[i].GetInfo()}");
                    Console.WriteLine($"{cinemaSessions.Length + 1}. Пополнить баланс\n" +
                        "0. Выбрать другого пользователя");

                    Console.Write("Выберите сеанс для бронирования: ");
                    while (!int.TryParse(Console.ReadLine(), out selectedSession) || selectedSession < 0 || selectedSession > cinemaSessions.Length + 1)
                        Console.Write("Сеанс введен неверно!\n" +
                            "Выберите сеанс: ");
                    Console.WriteLine();

                    selectedSession--;
                    if (selectedSession == cinemaSessions.Length)
                    {
                        Console.Write("Введите сумму пополнения: ");
                        double amount;
                        while (!double.TryParse(Console.ReadLine(), out amount))
                            Console.Write("Неверный ввод!\n" +
                                "Введите сумму пополнения: ");

                        Console.WriteLine($"Баланс пополнен на {customers[selectedUser].TopUpBalance(amount)} руб.");

                    }
                    else if (selectedSession >= 0)
                    {
                        Console.Write("Введите кл-во билетов для бронирования: ");
                        int ticketsCount;
                        while (!int.TryParse(Console.ReadLine(), out ticketsCount) || ticketsCount < 0)
                            Console.Write("Неверный ввод!\n" +
                                "Введите кл-во билетов для бронирования: ");


                        string result = customers[selectedUser].BuyTickets(cinemaSessions[selectedSession], ticketsCount);
                        Console.WriteLine(result);
                        if(result == $"У {customers[selectedUser].GetFullName()} недостаточно средств")
                        {
                            Console.Write("Хотите пополнить баланс? (Y | N): ");
                            string? isTopUpBalance;
                            while((isTopUpBalance = Console.ReadLine()) != "Y" && isTopUpBalance != "N")
                                Console.Write("Неверный ввод!\n" +
                                    "Хотите пополнить баланс? (Y | N): ");
                            Console.WriteLine();

                            if(isTopUpBalance == "Y")
                            {
                                Console.Write("Введите сумму пополнения: ");
                                double amount;
                                while (!double.TryParse(Console.ReadLine(), out amount))
                                    Console.Write("Неверный ввод!\n" +
                                        "Введите сумму пополнения: ");

                                Console.WriteLine($"Баланс пополнен на {customers[selectedUser].TopUpBalance(amount)} руб.");

                            }

                        }

                    }

                    Console.Write("\nНажмите любую клавишу, чтобы продолжить"); Console.ReadKey();
                    Console.Clear();

                }

            }

        }

    }
}
Customer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    //2.2 Класс Customer
    public class Customer
    {
        private string fullName;
        private double balanceRub;
        private int purchasedTicketsCount;

        public Customer(string fullName, double balanceRub, int purchasedTicketsCount)
        {
            if (fullName == null || fullName == "") throw new Exception("ФИО не может быть пустым");
            else this.fullName = fullName;

            if (balanceRub < 0) throw new Exception("Баланс не может быть отрицательным");
            else this.balanceRub = balanceRub;

            if (purchasedTicketsCount < 0) this.purchasedTicketsCount = 0;
            else this.purchasedTicketsCount = purchasedTicketsCount;

        }

        public string BuyTickets(CinemaSession cinemaSession, int ticketsCount)
        {
            if (ticketsCount * cinemaSession.GetTicketPriceRub() > balanceRub) return $"У {fullName} недостаточно средств";

            int purchasedSeats = cinemaSession.BookSeats(ticketsCount);
            if (purchasedSeats > 0)
            {
                balanceRub -= purchasedSeats * cinemaSession.GetTicketPriceRub();
                purchasedTicketsCount += purchasedSeats;

            }
            else return $"Не удалось забронировать билеты";

            return $"Успешное бронирование!\n" +
                $"Списано: {purchasedSeats * cinemaSession.GetTicketPriceRub():F2} руб. | Забранировано билетов: {purchasedSeats} шт.";
        }

        public double TopUpBalance(double amount)
        {
            if (amount <= 0) return 0;

            balanceRub += amount;

            return amount;
        }

        public string GetInfo()
        {
            return $"Посетитель: {fullName} | Баланс: {balanceRub:F2} руб. | Куплено билетов: {purchasedTicketsCount} шт.";

        }

        public string GetFullName() { return fullName; }

    }
}
CinemaSession
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    //2.2 Класс CinemaSession
    public class CinemaSession
    {
        private string movieTitle;
        private int totalSeats, bookedSeats;
        private double ticketPriceRub;

        public CinemaSession(string movieTitle, int totalSeats, int bookedSeats, double ticketPriceRub) 
        {
            if (movieTitle == null || movieTitle == "") this.movieTitle = "Без названия";
            else this.movieTitle = movieTitle;

            if (totalSeats < 0) this.totalSeats = 0;
            else if (totalSeats > 100) this.totalSeats = 100; 
            else this.totalSeats = totalSeats;

            if (bookedSeats < 0) this.bookedSeats = 0;
            else if(bookedSeats > totalSeats) this.bookedSeats = this.totalSeats;
            else this.bookedSeats = bookedSeats;

            if (ticketPriceRub <= 0) throw new Exception("Цена билета не может быть меньше или равна 0");
            else this.ticketPriceRub = ticketPriceRub;
        
        }

        public double GetTicketPriceRub() { return ticketPriceRub; }

        public int GetAvailableSeats() { return totalSeats - bookedSeats; }

        public int BookSeats(int seatsToBook)
        {
            if (seatsToBook < 0) seatsToBook = 0;
            else if (bookedSeats + seatsToBook > totalSeats) seatsToBook = 0;

            bookedSeats += seatsToBook;

            return seatsToBook;
        }

        public string GetInfo() { return $"Фильм: '{movieTitle}' | Свободно мест: {totalSeats - bookedSeats}/{totalSeats} | Цена: {ticketPriceRub:F2} руб."; }

    }
}