Necesitamos diseñar un sistema de reserva de boletos de cine en línea donde un usuario pueda buscar una película en una ciudad determinada y reservarla. Este artículo le explicará la arquitectura del sistema de reservas.
¿Cómo implementar el proceso de reserva de asientos?
Solución :
Las clases principales que se utilizarán para las personas de usuario:
- Usuario
- Película
- Teatro
- Reserva
- Dirección
- Comodidades
Java
// Java skeleton code to design an online movie // booking system. Enums : public enum SeatStatus { SEAT_BOOKED, SEAT_NOT_BOOKED; } public enum MovieStatus { Movie_Available, Movie_NotAvailable; } public enum MovieType { ENGLISH, HINDI; } public enum SeatType { NORMAL, EXECUTIVE, PREMIUM, VIP; } public enum PaymentStatus { PAID, UNPAID; } class User { int userId; String name; Date dateOfBirth; String mobNo; String emailId; String sex; } class Movie { int movieId; int theaterId; MovieType movieType; MovieStatus movieStatus; } class Theater { int theaterId; String theaterName; Address address; List<Movie> movies; float rating; } class Booking { int bookingId; int userId; int movieId; List<Movie> bookedSeats; int amount; PaymentStatus status_of_payment; Date booked_date; Time movie_timing; } class Address { String city; String pinCode; String state; String streetNo; String landmark; }
Esta es una pregunta de diseño de programación orientada a objetos, por lo que no se requiere el código completo. El código anterior solo tiene clases y atributos. En el código anterior, como puede ver, las enumeraciones se explican por sí mismas.
Tenemos una clase de usuarios en la que se guardan los detalles de los usuarios.
Clase de teatro en la que se guarda el nombre del teatro, su dirección y la lista de películas que se están ejecutando actualmente.
Booking class te permite reservar el asiento en un teatro en particular. Mantiene una referencia en Película, clase Pago.
¿Cómo manejar aquellos casos en los que dos personas intentan acceder al mismo asiento al mismo tiempo?
Tomemos la clase SeatBook y Transactions, que se llamará desde la clase principal. Aquí desde el código anterior, ampliamos un poco el proceso de pago que no se muestra en el código anterior. En la clase SeatBook también tendremos referencia a la clase Transaction.
Ahora, para asegurarnos de que dos personas intenten acceder al mismo asiento casi al mismo tiempo, usaríamos el método sincronizado de la clase Subproceso y llamaremos a un subproceso que pertenece a cada usuario que inicie sesión.
Java
Class SeatBook { Transaction transaction_obj; bool seats[total_seats]; String place; String ticketType; bool check_availability(); int position_of_seat() { return seat_pos_in_theater; } void multiple tickets(); void final_booking() { place = positon_of_seat(); if (single_ticket) continue; else mutliple_ticket_booking(); Transaction_obj.pay(ticketType, seats_booked, place); } }