JSP Servlet
HỆ THỐNG QUẢN LÝ BÃI ĐỖ XE - KHOÁ HỌC JSP/SERVLET
1. Yêu cầu chung
Xây dựng ứng dụng web quản lý bãi đỗ xe sử dụng:
- JSP/Servlet
- JSTL + EL
- JDBC
Áp dụng mô hình MVC
📌 2. CHỨC NĂNG CRUD
2.1. CRUD vehicle_type (Loại xe)
Chức năng:
- Hiển thị danh sách
- Thêm mới
- Cập nhật
- Xóa
Thuộc tính:
-
name(tên loại xe) -
price_per_hour(giá/giờ)
Yêu cầu:
- Tên không trùng
- Giá > 0
2.2. CRUD parking_slot (Vị trí đỗ)
Chức năng:
- Hiển thị danh sách
- Thêm mới
- Cập nhật
- Xóa
Thuộc tính:
-
slot_code(mã vị trí) -
status(EMPTY / OCCUPIED)
Yêu cầu:
- Mã vị trí là duy nhất
- Không được xóa khi đang OCCUPIED
2.3. CRUD vehicle (Xe)
Chức năng:
- Hiển thị danh sách
- Thêm mới
- Cập nhật
- Xóa
Thuộc tính:
-
license_plate(biển số) -
type_id(loại xe)
Yêu cầu:
- Biển số là duy nhất
- Không để trống
2.4. CRUD parking_ticket (Vé gửi xe)
Chức năng:
- Hiển thị danh sách
- Thêm mới (xe vào)
- Cập nhật (xe ra)
- Xóa
Khi thêm (Check-in):
-
Chọn:
- Xe
- Vị trí
-
Tự động:
-
checkin_time -
status = PARKING
-
-
Cập nhật slot →
OCCUPIED
Khi cập nhật (Check-out):
-
Nhập:
-
checkout_time
-
-
Tự động:
-
Tính
total_price
-
Tính
-
Cập nhật:
-
status = DONE -
slot →
EMPTY
-
Công thức tính tiền:
\text{total\_price} = (\text{checkout\_time} - \text{checkin\_time})_{hours} \times \text{price\_per\_hour}
🗄️ 3. SCRIPT SQL (TỐI ĐA 4 BẢNG)
CREATE DATABASE parking_management;
USE parking_management;
-- 1. Loại xe
CREATE TABLE vehicle_type (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE,
price_per_hour DECIMAL(10,2) NOT NULL
);
-- 2. Vị trí đỗ
CREATE TABLE parking_slot (
id INT PRIMARY KEY AUTO_INCREMENT,
slot_code VARCHAR(20) NOT NULL UNIQUE,
status ENUM('EMPTY', 'OCCUPIED') DEFAULT 'EMPTY'
);
-- 3. Xe
CREATE TABLE vehicle (
id INT PRIMARY KEY AUTO_INCREMENT,
license_plate VARCHAR(20) NOT NULL UNIQUE,
type_id INT,
FOREIGN KEY (type_id) REFERENCES vehicle_type(id)
);
-- 4. Vé gửi xe
CREATE TABLE parking_ticket (
id INT PRIMARY KEY AUTO_INCREMENT,
vehicle_id INT,
slot_id INT,
checkin_time DATETIME DEFAULT CURRENT_TIMESTAMP,
checkout_time DATETIME NULL,
total_price DECIMAL(10,2) DEFAULT 0,
status ENUM('PARKING', 'DONE') DEFAULT 'PARKING',
FOREIGN KEY (vehicle_id) REFERENCES vehicle(id),
FOREIGN KEY (slot_id) REFERENCES parking_slot(id)
);
-- Dữ liệu mẫu
INSERT INTO vehicle_type(name, price_per_hour) VALUES
('Xe máy', 5000),
('Ô tô', 20000);
INSERT INTO parking_slot(slot_code) VALUES
('A1'), ('A2'), ('B1'), ('B2');