In this article, we delve into the object-oriented design and implementation of a Concert Ticket Booking System using C++.
This system facilitates booking tickets for concerts and managing events.
The Concert Ticket Booking System should:
- Event Management: Manage concert details including dates, venues, and artists.
- User Account Management: Handle user registrations and profiles.
- Ticket Booking Process: Enable users to book tickets and select seats.
- Payment Processing: Handle ticket payments and issue receipts.
- Ticket Cancellation and Refund: Manage cancellations and refunds.
- Creating and Managing Concert Events
- Registering and Managing User Accounts
- Booking and Canceling Tickets
- Processing Payments and Issuing Tickets
- Handling Refunds
Key Classes:
ConcertTicketBookingSystem
: Manages the system.User
: Represents a customer.Concert
: Represents a concert event.Ticket
: Manages ticket details.Payment
: Handles payment transactions.
#include <iostream>
#include <vector>
#include <unordered_map>
class Ticket {
public:
Ticket(int seatNumber, double price) : seatNumber(seatNumber), price(price), status("Available") {}
int getSeatNumber() const {
return seatNumber;
}
double getPrice() const {
return price;
}
const std::string& getStatus() const {
return status;
}
void bookTicket() {
status = "Booked";
std::cout << "Ticket booked for seat " << seatNumber << " with price $" << price << ".\n";
}
void cancelTicket() {
status = "Available";
std::cout << "Ticket for seat " << seatNumber << " canceled.\n";
}
private:
int seatNumber;
double price;
std::string status;
};
class Concert {
public:
Concert(const std::string& name, const std::string& venue, const std::string& date)
: name(name), venue(venue), date(date) {}
const std::string& getName() const {
return name;
}
const std::string& getVenue() const {
return venue;
}
const std::string& getDate() const {
return date;
}
void displayEventDetails() const {
std::cout << "Concert: " << name << ", Venue: " << venue << ", Date: " << date << "\n";
}
void addTicket(int seatNumber, double price) {
tickets.emplace_back(seatNumber, price);
}
const std::vector<Ticket>& getTickets() const {
return tickets;
}
private:
std::string name;
std::string venue;
std::string date;
std::vector<Ticket> tickets;
};
class User {
public:
User(const std::string& username) : username(username) {}
const std::string& getUsername() const {
return username;
}
void bookTicket(Concert& concert, int seatNumber) {
const std::vector<Ticket>& tickets = concert.getTickets();
if (seatNumber >= 1 && seatNumber <= tickets.size()) {
Ticket& selectedTicket = tickets[seatNumber - 1];
if (selectedTicket.getStatus() == "Available") {
selectedTicket.bookTicket();
} else {
std::cout << "Seat " << seatNumber << " is already booked.\n";
}
} else {
std::cout << "Invalid seat number.\n";
}
}
void cancelTicket(Concert& concert, int seatNumber) {
const std::vector<Ticket>& tickets = concert.getTickets();
if (seatNumber >= 1 && seatNumber <= tickets.size()) {
Ticket& selectedTicket = tickets[seatNumber - 1];
if (selectedTicket.getStatus() == "Booked") {
selectedTicket.cancelTicket();
} else {
std::cout << "Seat " << seatNumber << " is not booked.\n";
}
} else {
std::cout << "Invalid seat number.\n";
}
}
private:
std::string username;
};
class ConcertTicketBookingSystem {
public:
Concert& createConcert(const std::string& name, const std::string& venue, const std::string& date) {
concerts.emplace_back(name, venue, date);
return concerts.back();
}
User& registerUser(const std::string& username) {
users.emplace(username, User(username));
return users[username];
}
void displayConcerts() const {
std::cout << "Concerts:\n";
for (const auto& concert : concerts) {
concert.displayEventDetails();
}
}
private:
std::vector<Concert> concerts;
std::unordered_map<std::string, User> users;
};
int main() {
ConcertTicketBookingSystem bookingSystem;
// Create concerts
Concert& concert1 = bookingSystem.createConcert("Rock Concert", "Arena A", "2022-03-15");
concert1.addTicket(1, 50.0);
concert1.addTicket(2, 60.0);
concert1.addTicket(3, 70.0);
Concert& concert2 = bookingSystem.createConcert("Pop Concert", "Stadium B", "2022-04-20");
concert2.addTicket(1, 40.0);
concert2.addTicket(2, 50.0);
concert2.addTicket(3, 60.0);
// Display concerts
bookingSystem.displayConcerts();
// Register users
User& user1 = bookingSystem.registerUser("Alice");
User& user2 = bookingSystem.registerUser("Bob");
// Users book tickets
user1.bookTicket(concert1, 2);
user2.bookTicket(concert2, 1);
// Users cancel tickets
user1.cancelTicket(concert1, 2);
user2.cancelTicket(concert2,