基于 Spring Boot 的酒店客房管理系统 —— 数据库课程设计
本设计基于 Spring Boot 框架,结合数据库技术,搭建一个酒店客房管理系统。系统实现了基本的酒店客房信息管理、客户预定、入住管理和退房管理等功能。以下是数据库设计的详细内容以及 Spring Boot 项目的整体架构。
1. 系统概述
酒店客房管理系统主要用于酒店的客房管理、客户预订、入住、退房等操作,目的是提升管理效率并改善客户体验。系统包含管理员和客户两种用户角色,分别对应酒店管理和客户预定及入住等功能。
2. 需求分析
- 管理员功能:
- 管理客房信息:添加、修改、删除客房。
- 管理客户预订信息:查看、修改、取消预订。
- 管理入住和退房信息:客户入住登记、退房处理、结算费用等。
- 客户功能:
- 客户注册与登录。
- 查询和预定客房。
- 查看预定信息与修改个人信息。
3. 数据库设计
3.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
);
- 客房表(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
);
- 预定表(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)
);
- 入住表(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)
);
- 支付表(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 核心功能模块
- 用户管理模块 用户管理模块负责用户注册、登录、权限验证等功能。管理员可以管理用户角色,客户可以查看和修改个人信息。 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);
}
}
- 客房管理模块 该模块负责酒店客房的管理,包括查询、添加、修改和删除房间信息。 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);
}
}
- 预定管理模块 处理客户预定操作,包括查询、取消和确认预定。 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);
}
}
- 入住与退房管理模块 管理客户的入住和退房信息,并计算费用。 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 服务。
发表回复