using System.Collections.Generic;
public int EventId { get; set; }
public string Name { get; set; }
public DateTime Date { get; set; }
public string Location { get; set; }
public decimal Price { get; set; }
public int TotalTickets { get; set; }
public int AvailableTickets { get; set; }
public Event(int id, string name, DateTime date, string location, decimal price, int totalTickets)
TotalTickets = totalTickets;
AvailableTickets = totalTickets;
public int TicketId { get; set; }
public int EventId { get; set; }
public int ClientId { get; set; }
public DateTime BookingDate { get; set; }
public Ticket(int ticketId, int eventId, int clientId)
BookingDate = DateTime.Now;
public int ClientId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public List<Ticket> BookedTickets { get; set; }
public Client(int id, string name, string email)
BookedTickets = new List<Ticket>();
public class BookingSystem
private List<Event> events;
private List<Client> clients;
private List<Ticket> tickets;
private int nextTicketId;
events = new List<Event>();
clients = new List<Client>();
tickets = new List<Ticket>();
public void AddEvent(Event newEvent)
public void AddClient(Client newClient)
public List<Event> SearchEvents(string searchTerm = "", DateTime? date = null, decimal? maxPrice = null)
var query = events.AsQueryable();
if (!string.IsNullOrWhiteSpace(searchTerm))
query = query.Where(e => e.Name.Contains(searchTerm, StringComparison.OrdinalIgnoreCase) ||
e.Location.Contains(searchTerm, StringComparison.OrdinalIgnoreCase));
query = query.Where(e => e.Date.Date == date.Value.Date);
query = query.Where(e => e.Price <= maxPrice.Value);
public Ticket BookTicket(int clientId, int eventId)
var client = clients.FirstOrDefault(c => c.ClientId == clientId);
var evt = events.FirstOrDefault(e => e.EventId == eventId);
if (client == null || evt == null)
throw new ArgumentException("Клієнт або подія не знайдені");
if (evt.AvailableTickets <= 0)
throw new InvalidOperationException("Немає доступних квитків");
var ticket = new Ticket(nextTicketId++, eventId, clientId);
client.BookedTickets.Add(ticket);
public Event GetEventDetails(int eventId)
return events.FirstOrDefault(e => e.EventId == eventId);
public List<Ticket> GetClientTickets(int clientId)
return tickets.Where(t => t.ClientId == clientId).ToList();
var bookingSystem = new BookingSystem();
var concert = new Event(1, "Рок концерт", DateTime.Now.AddDays(10), "Київ", 500m, 100);
var theater = new Event(2, "Театральна вистава", DateTime.Now.AddDays(15), "Львів", 300m, 50);
bookingSystem.AddEvent(concert);
bookingSystem.AddEvent(theater);
var client = new Client(1, "Іван Петренко", "ivan@example.com");
bookingSystem.AddClient(client);
Console.WriteLine("Доступні події:");
var availableEvents = bookingSystem.SearchEvents(maxPrice: 400m);
foreach (var evt in availableEvents)
Console.WriteLine($"{evt.Name} - {evt.Date:d} - {evt.Price}грн");
var ticket = bookingSystem.BookTicket(1, 2);
Console.WriteLine($"\nЗаброньовано квиток: {ticket.TicketId} на подію {ticket.EventId}");
var eventDetails = bookingSystem.GetEventDetails(2);
Console.WriteLine($"\nДеталі події:");
Console.WriteLine($"Назва: {eventDetails.Name}");
Console.WriteLine($"Дата: {eventDetails.Date:d}");
Console.WriteLine($"Місце: {eventDetails.Location}");
Console.WriteLine($"Доступно квитків: {eventDetails.AvailableTickets}");
Console.WriteLine($"Помилка: {ex.Message}");