项目概述

本项目旨在实现一个简单的Java选座系统,用于管理座位的预订和释放。系统将提供用户注册、登录、查看座位信息、预订座位、释放座位等功能。

系统需求

  1. 用户注册功能:用户可以通过填写注册表单进行注册,包括用户名、密码、电子邮箱等信息。

  2. 用户登录功能:已注册的用户可以通过输入用户名和密码进行登录。

  3. 查看座位信息:登录后的用户可以查看当前座位的状态和详细信息。

  4. 预订座位:用户可以选择一个可用的座位进行预订,预订成功后,座位将被锁定,其他用户将无法再次预订该座位。

  5. 释放座位:用户可以释放已预订的座位,该座位将变为可用状态。

系统设计

系统架构

系统采用MVC(Model-View-Controller)架构,将业务逻辑、数据模型和用户界面分离。

![系统架构](

数据库设计

系统使用关系型数据库来存储用户信息和座位状态。以下为用户表和座位表的设计。

-- 用户表
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL
);

-- 座位表
CREATE TABLE seats (
  id INT PRIMARY KEY AUTO_INCREMENT,
  seat_number VARCHAR(10) NOT NULL,
  status INT NOT NULL DEFAULT 0
);

状态图

stateDiagram
    [*] --> 注册
    注册 --> 登录
    登录 --> 查看座位信息
    查看座位信息 --> 预订座位
    预订座位 --> 释放座位
    释放座位 --> 查看座位信息
    查看座位信息 --> [*]

关系图

erDiagram
    USERS ||--o{ SEATS : reserve
    USERS ||--o{ SEATS : release

代码实现

以下是一个简化版的Java选座系统的代码实现示例。

User.java
public class User {
    private String username;
    private String password;
    private String email;

    // Getters and setters
}

Seat.java
public class Seat {
    private int id;
    private String seatNumber;
    private int status;

    // Getters and setters
}

UserDao.java
public interface UserDao {
    void addUser(User user);
    User getUserByUsername(String username);
}

SeatDao.java
public interface SeatDao {
    List<Seat> getAllSeats();
    Seat getSeatById(int id);
    void reserveSeat(int seatId, int userId);
    void releaseSeat(int seatId);
}

UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private List<User> users = new ArrayList<>();

    @Override
    public void addUser(User user) {
        users.add(user);
    }

    @Override
    public User getUserByUsername(String username) {
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                return user;
            }
        }
        return null;
    }
}

SeatDaoImpl.java
public class SeatDaoImpl implements SeatDao {
    private List<Seat> seats = new ArrayList<>();

    @Override
    public List<Seat> getAllSeats() {
        return seats;
    }

    @Override
    public Seat getSeatById(int id) {
        for (Seat seat : seats) {
            if (seat.getId() == id) {
                return seat;
            }
        }
        return null;
    }

    @Override
    public void reserveSeat(int seatId, int userId) {
        Seat seat = getSeatById(seatId);
        if (seat != null && seat.getStatus() == 0) {
            seat.setStatus(1);
            // TODO: Update seat reservation info in the database
        }
    }

    @Override
    public void releaseSeat(int seatId) {
        Seat seat = getSeatById(seatId);
        if (seat != null && seat.getStatus() == 1) {
            seat.setStatus(0);
            // TODO: Update seat release info in the database
        }
    }
}

SeatService.java
public class SeatService {
    private UserDao userDao;
    private SeatDao seatDao;

    public SeatService(UserDao userDao, SeatDao seatDao) {