答案:系统通过Seat类管理座位状态,BookingSystem实现预订与取消功能,并利用synchronized方法确保并发下数据一致,防止重复预订。

开发一个简易的票务座位预订系统,核心是管理座位状态、处理用户预订请求并保证数据一致性。Java 作为一门面向对象语言,非常适合构建这类系统。下面从需求分析到代码实现,一步步带你完成这个项目。
一个基础的票务座位预订系统应具备以下功能:
本系统不涉及用户登录或支付,聚焦在座位管理和并发控制上。
使用面向对象思想设计几个核心类:
立即学习“Java免费学习笔记(深入)”;
Seat:表示一个座位,包含编号和状态 BookingSystem:管理系统中所有座位,提供预订和取消方法 Main:测试入口示例代码:
class Seat {
private String seatId;
private boolean isBooked;
public Seat(String seatId) {
this.seatId = seatId;
this.isBooked = false;
}
public String getSeatId() {
return seatId;
}
public boolean isBooked() {
return isBooked;
}
public void book() {
this.isBooked = true;
}
public void cancel() {
this.isBooked = false;
}
}
import java.util.HashMap;
import java.util.Map;
public class BookingSystem {
private Map<String, Seat> seats;
public BookingSystem(int rows, int cols) {
seats = new HashMap<>();
for (char r = 'A'; r < 'A' + rows; r++) {
for (int c = 1; c <= cols; c++) {
String seatId = r + String.valueOf(c);
seats.put(seatId, new Seat(seatId));
}
}
}
public synchronized boolean bookSeat(String seatId) {
Seat seat = seats.get(seatId);
if (seat == null) {
System.out.println("座位不存在:" + seatId);
return false;
}
if (seat.isBooked()) {
System.out.println("座位已被预订:" + seatId);
return false;
}
seat.book();
System.out.println("成功预订座位:" + seatId);
return true;
}
public synchronized boolean cancelSeat(String seatId) {
Seat seat = seats.get(seatId);
if (seat == null) {
System.out.println("座位不存在:" + seatId);
return false;
}
if (!seat.isBooked()) {
System.out.println("该座位未被预订:" + seatId);
return false;
}
seat.cancel();
System.out.println("已取消预订:" + seatId);
return true;
}
public void displaySeats() {
seats.forEach((id, seat) -> {
System.out.print(id + "(" + (seat.isBooked() ? "已订" : "空") + ") ");
// 换行显示
if (id.endsWith("5")) System.out.println();
});
System.out.println();
}
}
在多用户环境下,多个线程可能同时尝试预订同一个座位。上述代码中,bookSeat 和 cancelSeat 方法使用了 synchronized 关键字,确保同一时间只有一个线程能执行这些操作,避免竞态条件。
如果你希望更细粒度控制,可以考虑使用 ReentrantLock 或 ConcurrentHashMap,但在简单场景下 synchronized 已足够。
模拟并发测试:
public class Main {
public static void main(String[] args) {
BookingSystem system = new BookingSystem(3, 5);
// 模拟两个用户同时抢座
Thread t1 = new Thread(() -> system.bookSeat("A1"));
Thread t2 = new Thread(() -> system.bookSeat("A1"));
t1.start();
t2.start();
}
}
输出结果会显示其中一个线程预订成功,另一个失败,说明系统具备基本的并发保护能力。
当前系统是简化版,实际中可考虑以下改进:
基本上就这些。这个项目虽小,但涵盖了封装、集合操作、同步控制等 Java 核心知识点,适合练手和面试准备。
以上就是在Java中如何开发简易票务座位预订系统_票务座位预订项目实战解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号