📜  设计一个类似 Bookmyshow 的电影票预订系统

📅  最后修改于: 2021-09-10 02:44:42             🧑  作者: Mango

我们需要设计一个在线电影票预订系统,用户可以在其中搜索给定城市的电影并进行预订。本文将向您解释预订系统的架构。

如何实施座位预订流程?

解决方案 :

用于用户角色的主要类:

  • 用户
  • 电影
  • 剧院
  • 预订
  • 地址
  • 设施
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 movies;
    float rating;
}
 
class Booking {
    int bookingId;
    int userId;
    int movieId;
    List 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;
}


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_theator;
    }
 
    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);
    }
}


这是一个 OOP 设计问题,因此不需要完整的代码。上面的代码只有类和属性。在上面的代码中,如您所见,枚举是不言自明的。
我们有用户类,其中保留了用户的详细信息。
保留剧院名称、地址和当前正在播放的电影列表的剧院类。
预订舱位可让您预订特定剧院的座位。它在 Movie、Payment 类中保留了一个引用。

如何处理两个人几乎同时试图进入同一个座位的情况?

让我们使用将从主类调用的 SeatBook 和 Transactions 类。这里从上面的代码中,我们对上面代码中没有显示的支付流程进行了一点扩展。在 SeatBook 类中,我们还将参考 Transaction 类。

现在为了确保当两个人几乎同时尝试访问同一个座位时,我们将使用 Thread 类的 Synchronized 方法并调用属于每个登录用户的线程。

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_theator;
    }
 
    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);
    }
}