Загрузка данных
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} руб."; }
}
}