我们需要设计一个在线电影票预订系统,用户可以在其中搜索给定城市的电影并进行预订。本文将向您解释预订系统的架构。
如何实施座位预订流程?
解决方案 :
用于用户角色的主要类:
- 用户
- 电影
- 剧院
- 预订
- 地址
- 设施
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);
}
}