April 5, 2023

系统
介绍

需求分析 :

酒店需要一个系统来管理房间和客户信息,以便进行预订和入住等操作。
系统需要具备以下功能:
1、 能够对客户进行身份认证,并提供客户进行房间预订、取消预订和支付等操作的功能。
2、 能够对房间进行管理,包括查看房间状态、添加、修改和删除房间等操作。
3、 能够对支付信息进行管理,包括查看、添加、修改和删除支付信息等操作。
4、 能够对管理员信息进行管理,包括查看、添加、修改和删除管理员信息等操作。
5、能够生成各种报表,以便酒店管理人员进行业务分析和决策。

为了实现上述需求,系统需要具备以下结构:
1、 酒店房间信息表(hoteld):存储酒店房间的总数量、预定数量和可用数量,与酒店管理相关。
2、 房间信息表(roomd):存储酒店每个房间的详细信息,包括房间号、床位数、是否有空调、是否有电视、是否有网络和房间价格,与酒店管理和客房服务相关。
3、 支付信息表(paymentsf):存储客人的支付信息,包括支付编号、姓、名、信用卡号、电子邮件地址、预定的房间号、入住时间、支付方式和总金额,与客房服务和财务管理相关。
4、 管理员信息表(administrator):存储管理员的账户信息,包括用户名和密码,与酒店管理相关。

数据流程图

数据字典

全局E-R图

数据库实现


4.1建表语句

CREATE TABLE IF NOT EXISTS hoteld (
t_r NUMBER,
r_r NUMBER,
t_s NUMBER
)

CREATE TABLE IF NOT EXISTS roomd (
rn NUMBER PRIMARY KEY,
beds NUMBER,
ac VARCHAR(10),
tv VARCHAR(10),
internet VARCHAR(10),
price NUMBER(10)
)

CREATE TABLE IF NOT EXISTS paymentsf (
id NUMBER PRIMARY KEY,
f_name VARCHAR,
l_name VARCHAR,
c_number VARCHAR,
email VARCHAR,
r_n NUMBER,
day VARCHAR,
month VARCHAR,
year VARCHAR,
time VARCHAR,
method VARCHAR,
totalamt VARCHAR
)

CREATE TABLE IF NOT EXISTS administrator (
username VARCHAR(50) PRIMARY KEY,
password VARCHAR(50)
)

4.2存储过程


注:挑选了比较有代表性的一些存储过程
1. 查询所有的客房信息
CREATE PROCEDURE get_all_rooms()
BEGIN
SELECT * FROM roomd;
END;

2. 根据客房号查询客房信息
CREATE PROCEDURE get_room_by_number(IN room_number INT)
BEGIN
SELECT * FROM roomd WHERE rn = room_number;
END;


3. 查询特定日期内的预订信息
CREATE PROCEDURE get_bookings_by_date(IN booking_date DATE)
BEGIN
SELECT * FROM paymentsf WHERE day = DAY(booking_date) AND month = MONTH(booking_date) AND year = YEAR(booking_date);
END;

4. 根据客户名查询客户的预订信息
CREATE PROCEDURE get_booking_by_customer_name(IN customer_name VARCHAR(100))
BEGIN
SELECT * FROM paymentsf WHERE f_name LIKE CONCAT('%', customer_name, '%') OR l_name LIKE CONCAT('%', customer_name, '%');
END;

5. 查询所有管理员账户
CREATE PROCEDURE get_all_administrators()
BEGIN
SELECT * FROM administrator;
END;

4.3触发器和自定义函数
注:挑选了比较有代表性的一些触发器和自定义函数
1. 触发器:在roomd表中插入新记录时,自动在hoteld表中创建一条对应的记录。
CREATE TRIGGER new_room AFTER INSERT ON roomd
FOR EACH ROW
BEGIN
INSERT INTO hoteld (t_r, r_r, t_s) VALUES (0, NEW.rn, 0);
END;



2. 触发器:在roomd表中删除一条记录时,自动在hoteld表中删除对应的记录。
CREATE TRIGGER delete_room AFTER DELETE ON roomd
FOR EACH ROW
BEGIN
DELETE FROM hoteld WHERE r_r = OLD.rn;
END;

3. 自定义函数:计算一个订单的总价。
CREATE FUNCTION total_price(num_rooms INT, price INT, num_days INT) RETURNS INT
BEGIN
RETURN num_rooms * price * num_days;
END;



4. 自定义函数:获取某个房间类型的数量。
CREATE FUNCTION get_room_type_count(room_type VARCHAR(10)) RETURNS INT
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count FROM roomd WHERE beds = room_type;
RETURN count;
END;