基于 Spring Boot 的酒店客房管理系统 —— 数据库课程设计

本设计基于 Spring Boot 框架,结合数据库技术,搭建一个酒店客房管理系统。系统实现了基本的酒店客房信息管理、客户预定、入住管理和退房管理等功能。以下是数据库设计的详细内容以及 Spring Boot 项目的整体架构。


1. 系统概述

酒店客房管理系统主要用于酒店的客房管理、客户预订、入住、退房等操作,目的是提升管理效率并改善客户体验。系统包含管理员和客户两种用户角色,分别对应酒店管理和客户预定及入住等功能。


2. 需求分析

  • 管理员功能
  • 管理客房信息:添加、修改、删除客房。
  • 管理客户预订信息:查看、修改、取消预订。
  • 管理入住和退房信息:客户入住登记、退房处理、结算费用等。
  • 客户功能
  • 客户注册与登录。
  • 查询和预定客房。
  • 查看预定信息与修改个人信息。

3. 数据库设计

3.1 数据库表结构

  1. 用户表(user) 该表用于存储用户信息,包括管理员和普通客户。用户类型通过 role 字段区分。
   CREATE TABLE user (
       id BIGINT AUTO_INCREMENT PRIMARY KEY,
       username VARCHAR(255) NOT NULL UNIQUE,
       password VARCHAR(255) NOT NULL,
       email VARCHAR(255) UNIQUE,
       role ENUM('ADMIN', 'CUSTOMER') NOT NULL,
       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
   );
  1. 客房表(room) 存储酒店所有客房的信息,包括房间号、房型、价格和当前状态(可用/已预订/已入住)。
   CREATE TABLE room (
       id BIGINT AUTO_INCREMENT PRIMARY KEY,
       room_number VARCHAR(10) NOT NULL UNIQUE,
       room_type ENUM('SINGLE', 'DOUBLE', 'SUITE') NOT NULL,
       price DECIMAL(10, 2) NOT NULL,
       status ENUM('AVAILABLE', 'BOOKED', 'OCCUPIED') DEFAULT 'AVAILABLE',
       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
   );
  1. 预定表(reservation) 存储客户预定的信息,包括客户 ID、预定的客房、入住和退房日期、预定状态等。
   CREATE TABLE reservation (
       id BIGINT AUTO_INCREMENT PRIMARY KEY,
       user_id BIGINT NOT NULL,
       room_id BIGINT NOT NULL,
       check_in DATE NOT NULL,
       check_out DATE NOT NULL,
       status ENUM('PENDING', 'CONFIRMED', 'CANCELLED') DEFAULT 'PENDING',
       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
       FOREIGN KEY (user_id) REFERENCES user(id),
       FOREIGN KEY (room_id) REFERENCES room(id)
   );
  1. 入住表(check_in_out) 存储客户实际入住与退房的记录,包括入住时间、退房时间、总费用等。
   CREATE TABLE check_in_out (
       id BIGINT AUTO_INCREMENT PRIMARY KEY,
       user_id BIGINT NOT NULL,
       room_id BIGINT NOT NULL,
       check_in_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       check_out_time TIMESTAMP,
       total_cost DECIMAL(10, 2),
       FOREIGN KEY (user_id) REFERENCES user(id),
       FOREIGN KEY (room_id) REFERENCES room(id)
   );
  1. 支付表(payment) 存储客户支付信息,包括支付金额、支付时间等。
   CREATE TABLE payment (
       id BIGINT AUTO_INCREMENT PRIMARY KEY,
       user_id BIGINT NOT NULL,
       reservation_id BIGINT NOT NULL,
       amount DECIMAL(10, 2) NOT NULL,
       payment_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
       FOREIGN KEY (user_id) REFERENCES user(id),
       FOREIGN KEY (reservation_id) REFERENCES reservation(id)
   );

4. Spring Boot 项目架构

4.1 项目结构

  • controller:处理前端请求,调用服务层逻辑。
  • service:业务逻辑层,处理具体的业务操作。
  • repository:数据访问层,使用 Spring Data JPA 进行数据库操作。
  • model:实体类,映射到数据库表。
  • exception:异常处理类。
  • config:配置类,例如数据库连接、Spring Security 等。

4.2 核心功能模块

  1. 用户管理模块 用户管理模块负责用户注册、登录、权限验证等功能。管理员可以管理用户角色,客户可以查看和修改个人信息。 UserController
   @RestController
   @RequestMapping("/users")
   public class UserController {

       @Autowired
       private UserService userService;

       @PostMapping("/register")
       public ResponseEntity<User> registerUser(@RequestBody User user) {
           User savedUser = userService.registerUser(user);
           return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
       }

       @PostMapping("/login")
       public ResponseEntity<String> loginUser(@RequestBody LoginRequest loginRequest) {
           String token = userService.loginUser(loginRequest);
           return new ResponseEntity<>(token, HttpStatus.OK);
       }
   }
  1. 客房管理模块 该模块负责酒店客房的管理,包括查询、添加、修改和删除房间信息。 RoomController
   @RestController
   @RequestMapping("/rooms")
   public class RoomController {

       @Autowired
       private RoomService roomService;

       @GetMapping
       public List<Room> getAllRooms() {
           return roomService.getAllRooms();
       }

       @PostMapping
       public ResponseEntity<Room> addRoom(@RequestBody Room room) {
           Room savedRoom = roomService.addRoom(room);
           return new ResponseEntity<>(savedRoom, HttpStatus.CREATED);
       }
   }
  1. 预定管理模块 处理客户预定操作,包括查询、取消和确认预定。 ReservationController
   @RestController
   @RequestMapping("/reservations")
   public class ReservationController {

       @Autowired
       private ReservationService reservationService;

       @PostMapping("/book")
       public ResponseEntity<Reservation> bookRoom(@RequestBody Reservation reservation) {
           Reservation savedReservation = reservationService.bookRoom(reservation);
           return new ResponseEntity<>(savedReservation, HttpStatus.CREATED);
       }

       @PutMapping("/{id}/cancel")
       public ResponseEntity<Reservation> cancelReservation(@PathVariable Long id) {
           Reservation updatedReservation = reservationService.cancelReservation(id);
           return new ResponseEntity<>(updatedReservation, HttpStatus.OK);
       }
   }
  1. 入住与退房管理模块 管理客户的入住和退房信息,并计算费用。 CheckInOutController
   @RestController
   @RequestMapping("/checkinout")
   public class CheckInOutController {

       @Autowired
       private CheckInOutService checkInOutService;

       @PostMapping("/checkin")
       public ResponseEntity<CheckInOut> checkIn(@RequestBody CheckInOut checkInOut) {
           CheckInOut savedCheckIn = checkInOutService.checkIn(checkInOut);
           return new ResponseEntity<>(savedCheckIn, HttpStatus.CREATED);
       }

       @PostMapping("/checkout")
       public ResponseEntity<CheckInOut> checkOut(@RequestBody CheckInOut checkInOut) {
           CheckInOut savedCheckOut = checkInOutService.checkOut(checkInOut);
           return new ResponseEntity<>(savedCheckOut, HttpStatus.OK);
       }
   }

5. 数据库操作与 JPA

使用 Spring Data JPA 进行数据库操作。以下是示例 Repository 层:

@Repository
public interface RoomRepository extends JpaRepository<Room, Long> {
    List<Room> findByStatus(String status);
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByUsername(String username);
}

@Repository
public interface ReservationRepository extends JpaRepository<Reservation, Long> {
    List<Reservation> findByUserId(Long userId);
}

6. 总结

通过该酒店客房管理系统的数据库设计,能够实现高效的房间管理、预定、入住与退房等业务功能。利用 Spring Boot 框架和 Spring Data JPA 的数据访问技术,确保了系统的高效、可扩展和易维护。通过前后端分离的架构,可以方便地与前端交互并提供 API 服务。