Skip to content

Latest commit

 

History

History
198 lines (157 loc) · 5.42 KB

Bookmyshow-System-Design.md

File metadata and controls

198 lines (157 loc) · 5.42 KB

Designing a Concert Ticket Booking System

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.

System Requirements

The Concert Ticket Booking System should:

  1. Event Management: Manage concert details including dates, venues, and artists.
  2. User Account Management: Handle user registrations and profiles.
  3. Ticket Booking Process: Enable users to book tickets and select seats.
  4. Payment Processing: Handle ticket payments and issue receipts.
  5. Ticket Cancellation and Refund: Manage cancellations and refunds.

Core Use Cases

  1. Creating and Managing Concert Events
  2. Registering and Managing User Accounts
  3. Booking and Canceling Tickets
  4. Processing Payments and Issuing Tickets
  5. Handling Refunds

UML/Class Diagrams

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,