|
| 1 | +# Designing a Concert Ticket Booking System |
| 2 | + |
| 3 | +In this article, we delve into the object-oriented design and implementation of a Concert Ticket Booking System using Java. |
| 4 | + |
| 5 | +This system facilitates booking tickets for concerts and managing events. |
| 6 | + |
| 7 | +## System Requirements |
| 8 | + |
| 9 | +The Concert Ticket Booking System should: |
| 10 | + |
| 11 | +1. **Event Management**: Manage concert details including dates, venues, and artists. |
| 12 | +2. **User Account Management**: Handle user registrations and profiles. |
| 13 | +3. **Ticket Booking Process**: Enable users to book tickets and select seats. |
| 14 | +4. **Payment Processing**: Handle ticket payments and issue receipts. |
| 15 | +5. **Ticket Cancellation and Refund**: Manage cancellations and refunds. |
| 16 | + |
| 17 | +## Core Use Cases |
| 18 | + |
| 19 | +1. **Creating and Managing Concert Events** |
| 20 | +2. **Registering and Managing User Accounts** |
| 21 | +3. **Booking and Canceling Tickets** |
| 22 | +4. **Processing Payments and Issuing Tickets** |
| 23 | +5. **Handling Refunds** |
| 24 | + |
| 25 | +## UML/Class Diagrams |
| 26 | + |
| 27 | +Key Classes: |
| 28 | + |
| 29 | +- `ConcertTicketBookingSystem`: Manages the system. |
| 30 | +- `User`: Represents a customer. |
| 31 | +- `Concert`: Represents a concert event. |
| 32 | +- `Ticket`: Manages ticket details. |
| 33 | +- `Payment`: Handles payment transactions. |
| 34 | + |
| 35 | +## Java Implementation |
| 36 | + |
| 37 | +### Concert Class |
| 38 | + |
| 39 | +Represents a concert event. |
| 40 | + |
| 41 | +```java |
| 42 | +import java.util.Date; |
| 43 | + |
| 44 | +public class Concert { |
| 45 | + private String concertId; |
| 46 | + private String title; |
| 47 | + private Date date; |
| 48 | + private String venue; |
| 49 | + private int totalSeats; |
| 50 | + private int availableSeats; |
| 51 | + |
| 52 | + public Concert(String concertId, String title, Date date, String venue, int totalSeats) { |
| 53 | + this.concertId = concertId; |
| 54 | + this.title = title; |
| 55 | + this.date = date; |
| 56 | + this.venue = venue; |
| 57 | + this.totalSeats = totalSeats; |
| 58 | + this.availableSeats = totalSeats; |
| 59 | + } |
| 60 | + |
| 61 | + public boolean bookSeats(int numberOfSeats) { |
| 62 | + if (numberOfSeats <= availableSeats) { |
| 63 | + availableSeats -= numberOfSeats; |
| 64 | + return true; |
| 65 | + } |
| 66 | + return false; |
| 67 | + } |
| 68 | + |
| 69 | + // Getters and setters... |
| 70 | +} |
| 71 | +``` |
| 72 | +### User Class |
| 73 | +Manages user account information. |
| 74 | +```java |
| 75 | +public class User { |
| 76 | + private String userId; |
| 77 | + private String name; |
| 78 | + private String email; |
| 79 | + |
| 80 | + public User(String userId, String name, String email) { |
| 81 | + this.userId = userId; |
| 82 | + this.name = name; |
| 83 | + this.email = email; |
| 84 | + } |
| 85 | + |
| 86 | + // Getters and setters... |
| 87 | +} |
| 88 | +``` |
| 89 | +### Ticket Class |
| 90 | +Represents a concert ticket. |
| 91 | +```java |
| 92 | +public class Ticket { |
| 93 | + private String ticketId; |
| 94 | + private Concert concert; |
| 95 | + private User user; |
| 96 | + private int numberOfSeats; |
| 97 | + private double totalPrice; |
| 98 | + |
| 99 | + public Ticket(String ticketId, Concert concert, User user, int numberOfSeats, double pricePerSeat) { |
| 100 | + this.ticketId = ticketId; |
| 101 | + this.concert = concert; |
| 102 | + this.user = user; |
| 103 | + this.numberOfSeats = numberOfSeats; |
| 104 | + this.totalPrice = pricePerSeat * numberOfSeats; |
| 105 | + } |
| 106 | + |
| 107 | + // Getters and setters... |
| 108 | +} |
| 109 | +``` |
| 110 | +### Payment Class |
| 111 | +Handles payment transactions. |
| 112 | +```java |
| 113 | +public class Payment { |
| 114 | + private String paymentId; |
| 115 | + private double amount; |
| 116 | + private PaymentStatus status; |
| 117 | + |
| 118 | + public Payment(String paymentId, double amount) { |
| 119 | + this.paymentId = paymentId; |
| 120 | + this.amount = amount; |
| 121 | + this.status = PaymentStatus.PENDING; |
| 122 | + } |
| 123 | + |
| 124 | + public void completePayment() { |
| 125 | + this.status = PaymentStatus.COMPLETED; |
| 126 | + } |
| 127 | + |
| 128 | + // Getters and setters... |
| 129 | +} |
| 130 | + |
| 131 | +enum PaymentStatus { |
| 132 | + PENDING, COMPLETED, FAILED |
| 133 | +} |
| 134 | +``` |
| 135 | +### ConcertTicketBookingSystem Class |
| 136 | +Manages the concert ticket booking system operations. |
| 137 | + |
| 138 | +```java |
| 139 | +import java.util.ArrayList; |
| 140 | +import java.util.List; |
| 141 | + |
| 142 | +public class ConcertTicketBookingSystem { |
| 143 | + private List<User> users; |
| 144 | + private List<Concert> concerts; |
| 145 | + private List<Ticket> tickets; |
| 146 | + |
| 147 | + public ConcertTicketBookingSystem() { |
| 148 | + this.users = new ArrayList<>(); |
| 149 | + this.concerts = new ArrayList<>(); |
| 150 | + this.tickets = new ArrayList<>(); |
| 151 | + } |
| 152 | + |
| 153 | + public void addUser(User user) { |
| 154 | + users.add(user); |
| 155 | + } |
| 156 | + |
| 157 | + public void addConcert(Concert concert) { |
| 158 | + concerts.add(concert); |
| 159 | + } |
| 160 | + |
| 161 | + public Ticket bookTicket(String userId, String concertId, int numberOfSeats) { |
| 162 | + User user = findUserById(userId); |
| 163 | + Concert concert = findConcertById(concertId); |
| 164 | + |
| 165 | + if (user != null && concert != null && concert.bookSeats(numberOfSeats)) { |
| 166 | + double pricePerSeat = // Assume a method to get price per seat |
| 167 | + Ticket ticket = new Ticket(generateTicketId(), concert, user, numberOfSeats, pricePerSeat); |
| 168 | + tickets.add(ticket); |
| 169 | + return ticket; |
| 170 | + } |
| 171 | + return null; |
| 172 | + } |
| 173 | + |
| 174 | + private User findUserById(String userId) { |
| 175 | + for (User user : users) { |
| 176 | + if (user.getUserId().equals(userId)) { |
| 177 | + return user; |
| 178 | + } |
| 179 | + } |
| 180 | + return null; |
| 181 | + } |
| 182 | + |
| 183 | + private Concert findConcertById(String concertId) { |
| 184 | + for (Concert concert : concerts) { |
| 185 | + if (concert.getConcertId().equals(concertId)) { |
| 186 | + return concert; |
| 187 | + } |
| 188 | + } |
| 189 | + return null; |
| 190 | + } |
| 191 | + |
| 192 | + private String generateTicketId() { |
| 193 | + return "TICKET_" + System.currentTimeMillis(); |
| 194 | + } |
| 195 | + |
| 196 | + // Other necessary methods... |
| 197 | +} |
| 198 | +``` |
0 commit comments