数据库课程设计(宾馆客房管理系统)

宾馆客房管理系统

目录

需求分析

一、需求描述:

二、功能描述:

 员工管理功能

 客房管理功能

 客户管理功能

 订单管理功能

 报表和维护功能

 登录功能

概念结构设计

实体信息

ER 图

逻辑结构设计

E-R图向关系模式的转化

物理结构设计

各表一览

数据库实现

数据库的建立:

创建数据库

创建表

视图建立

索引建立

安全性设计:

设置权限

完整性设计:

触发器建立


需求分析

一、需求描述

        该酒店管理系统旨在为酒店提供包括员工管理、客房管理、客户管理、订单管理、报表维护等方面的一体化解决方案。同时,还提供用户登录和密码管理等功能。其业务需求涵盖了从客户预订、入住到退房的整个流程管理,并提供详细的报表支持,以便于酒店的日常运营和决策。

员工管理:管理员可以添加新员工的信息,如姓名、职位、联系方式等;删除现有员工的信息,确保信息的准确性和及时性;更新员工的详细信息,维护员工档案的完整性;支持通过姓名、职位等多种方式查询员工信息,方便管理。

客房管理:管理客户的预约信息,包括个人和团体预约。录入客户的预订信息,生成预订单;处理客户的预约取消请求,更新预订状态。处理客户的入住登记,包括个人入住和团体入住,记录单个客户的入住信息,分配房间,处理团体客户的入住需求,分配多个房间。管理客户退房手续,结算费用,更新房间状态。管理酒店的房间信息,包括添加新房间和修改现有房间信息,录入新房间的详细信息,如房间号、房型、价格等,更新现有房间的信息,保持房间资料的准确性。

客户管理:提供多种方式查询客户信息,方便服务和管理;录入新客户的信息,建立客户档案。

订单管理:查询客户的预订信息,跟踪预订状态;查询客户的订单信息,包括已完成和未完成的订单。

报表和维护:定期备份系统数据库,确保数据安全;导出数据库数据,进行本地存储或迁移;导出特定数据表,便于分析和审查。生成和展示各种管理报表,提供数据支持和决策依据;导出报表数据表格,便于记录和分享。

登录功能:用户通过用户名和密码登录系统,确保系统安全;提供找回密码功能,帮助用户重新获取访问权限;用户可以修改个人密码,确保账号的安全性。

二、功能描述:

 员工管理功能

 添加员工:录入员工的详细信息,如姓名、职位、联系方式,建立员工档案。

 删除员工:删除员工信息,确保信息的准确性和及时性。

 修改员工:更新员工的详细信息,维护员工档案的完整性。

 查询员工信息:通过姓名、职位等多种方式查询员工信息,方便管理和调度。

 客房管理功能

   预约功能

     预约:录入并管理客户的预约信息,生成预订单。

     取消预约:处理预约取消请求,更新预订状态。

   入住功能

     个人入住:记录客户入住信息,分配房间。

     团体入住:处理团体客户入住,分配多个房间。

   房间管理

     添加房间:录入新房间信息,如房间号、房型、价格等,更新系统房间数据。

     修改房间:更新现有房间信息,保持数据准确性。

 客户管理功能

 查询客户:通过多种方式查询客户信息,方便服务和管理。

 添加客户:录入新客户信息,建立客户档案。

 订单管理功能

 查询预订:查询并跟踪客户预订信息。

 查询订单:查询客户的订单信息,管理订单状态。

 报表和维护功能

   数据库备份:定期备份数据库,确保数据安全。

     导出数据库:导出数据库数据,便于存储和迁移。

     导出数据表:导出特定数据表,方便分析和审查。

   报表展示

     生成报表:生成各类管理报表,支持决策。

     导出报表:导出报表数据,便于记录和分享。

 登录功能

 登录:用户通过用户名和密码登录系统。

 找回密码:提供找回密码功能,确保用户可以重新获取登录权限。

 修改密码:用户可以修改个人密码,确保账号安全。

概念结构设计

实体信息

员工staff:{员工编号sid,员工姓名sname,员工性别ssex,登录账号susername,登录密码spassword,权限等级srole }

个人客户client:{客户姓名cname,客户编号cid,客户电话cphone,客户年龄cage,客户性别csex,登记时间register_time}

客房room:{客房编号rid,客房类型rtype,客房人数rsize,客房价格rprice,客房状态rstatus }

订单hotelorder:{订单编号id,订单类型ordertype,开始时间start_time,结束时间end_time,支付方式pay_type,订单金额money,客房编号rid,订单时间order_time}

团队客户:{团队名称tname,团队编号tid,团体电话tphone,登记时间register_time }

ER 图

逻辑结构设计

E-R图向关系模式的转化

        团体客户和客房的入驻联系是1:n,可以将它们之间的联系与n端实体团体客户合并;客户与订单的预订关系也是1:n,同样可以将其中的联系与n端实体合并,而员工与客房之间的管理和员工与订单的登记联系方式是n:m,将其联系转化称独立的关系模式。具体的基本E-R图向关系模式的转化如下所述:

员工(员工编号,员工姓名,员工性别,登录账号,登录密码,权限等级

个人客户(客户编号,客户姓名,客户电话,客户年龄,客户性别,登记时间,登记员工编号

客房(客房编号,客房类型,客房容量,客房价格,客房状态

订单(订单编号订单类型,开始时间,结束时间,订单金额,登记员工编号

团队客户(团队编号,团队名称,团体电话,登记时间,登记员工编号

个人预订(客户编号客房编号,开始时间,结束时间,预订时间

团队预订(团队编号客房编号,开始时间,结束时间,预订时间

个人登记(客户编号客房编号,开始时间,结束时间,登记员工编号

团体登记(团队编号客房编号,开始时间,结束时间,登记员工编号

物理结构设计

各表一览

表1 房间信息表room

表中列名

数据类型

可否为空

说明

rid

varchar(255)

Not null (主键)

房间编号

rtype

varchar(255)

Not null

房间类型

rsize

SMALLINT

Not null

房间人数

rprice

date

Not null

房间价格

rstatus

varchar(255)

Not null

房间状态

表2 酒店员工的个人信息和工作账户表staff

表中列名

数据类型

可否为空

说明

sid

varchar(255)

Not null (主键)

员工编号

sname

varchar(255)

Not null

员工姓名

ssex

varchar(255)

可为空

员工性别

susername

varchar(255)

Not null

员工账号

spassword

varchar(255)

Not null

员工密码

srole

varchar(255)

Not null

权限等级

表3 个人顾客信息和入住信息表client

表中列名

数据类型

可否为空

说明

cname

varchar(255)

Not null

客户姓名

cid

varchar(255)

Not null (主键)

客户编号

cphone

date

可为空

客户电话

cage

varchar(255)

Not null

客户年龄

csex

varchar(255)

可为空

客户性别

register_sid

varchar(255)

可为空

登记员工编号

register_time

timestamp

可为空

登记时间

表4 团体顾客信息和入住信息表team

表中列名

数据类型

可否为空

说明

tname

varchar(255)

Not null

团队名称

tid

varchar(255)

Not null (主键)

团队编号

tphone

varchar(255)

可为空

团队电话

check_in_sid

varchar(255)

可为空

登记员工编号

register_time

timestamp

可为空

登记时间

表5 个人客户的预约记录表booking_client

表中列名

数据类型

可否为空

说明

cid

varchar(255)

Not null (主键)

客户编号

rid

varchar(255)

Not null (主键)

房间编号

start_time

date

可为空

开始时间

end_time

date

可为空

结束时间

booking_time

timestamp

可为空

预订时间

表6 团体客户的预约记录booking_team

表中列名

数据类型

可否为空

说明

tid

varchar(255)

Not null (主键)

团队编号

rid

varchar(255)

Not null (主键)

房间编号

start_time

date

可为空

入住时间

end_time

date

可为空

退房时间

booking_time

timestamp

可为空

预订时间

表7 个人客户的入住记录表checkin_client

表中列名

数据类型

可否为空

说明

cid

varchar(255)

Not null (主键)

客户编号

rid

varchar(255)

Not null (主键)

房间编号

start_time

date

可为空

入住时间

end_time

date

可为空

退房时间

total_price

varchar(255)

可为空

总价

check_in_sid

varchar(255)

可为空

登记员工编号

表8 团体用户的入住记录表checkin_team

表中列名

数据类型

可否为空

说明

tid

varchar(255)

Not null (主键)

团队编号

rid

varchar(255)

Not null (主键)

房间编号

start_time

date

可为空

入住时间

end_time

date

可为空

退房时间

total_price

varchar(255)

可为空

总价

check_in_sid

varchar(255)

可为空

登记员工编号

表9 酒店所有订单信息和收入情况表hotelorder

表中列名

数据类型

可否为空

说明

id

varchar(255)

Not null (主键)

订单编号

ordertype

varchar(255)

Not null

订单类型

start_time

date

可为空

订单开始时间

end_time

date

Not null

订单结束时间

rid

varchar(255)

可为空

房间编号

money

varchar(255)

可为空

金额

order_time

timestamp

可为空

订单时间

register_sid

varchar(255)

可为空

登记员工编号

数据库实现

数据库的建立:

创建数据库

CREATE DATABASE `HotelSystem` DEFAULT CHARACTER SET = 'utf8mb4';

创建表

CREATE TABLE `room` (

    `rid` VARCHAR(255) NOT NULL,

    `rtype` VARCHAR(255) NOT NULL,

    `rsize` SMALLINT NOT NULL,

    `rprice` VARCHAR(255) NOT NULL,

    `rstatus` VARCHAR(255) NOT NULL,

    PRIMARY KEY (`rid`),

    KEY `rprice` (`rprice`),

    KEY `rtype` (`rtype`, `rprice`)

);

CREATE TABLE `staff` (

    `sid` varchar(255) NOT NULL,

    `sname` varchar(255) NOT NULL,

    `ssex` varchar(255) DEFAULT NULL,

    `susername` varchar(255) NOT NULL,

    `spassword` varchar(255) NOT NULL,

    `srole` varchar(255) NOT NULL,

    PRIMARY KEY (`sid`),

    UNIQUE KEY `susername` (`susername`)

);

CREATE TABLE `client` (

    `cname` varchar(255) NOT NULL,

    `cid` varchar(255) NOT NULL,

    `cphone` varchar(255) DEFAULT NULL,

    `cage` varchar(255) NOT NULL,

    `csex` varchar(255) DEFAULT NULL,

    `register_sid` varchar(255) DEFAULT NULL,

    `register_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`cid`),

    KEY `sid` (`register_sid`),

    KEY `cid` (`cid`, `register_sid`),

    CONSTRAINT `sid` FOREIGN KEY (`register_sid`) REFERENCES `staff` (`sid`)

);

CREATE TABLE `team` (

    `tname` varchar(255) NOT NULL,

    `tid` varchar(255) NOT NULL,

    `tphone` varchar(255) DEFAULT NULL,

    `check_in_sid` varchar(255) DEFAULT NULL,

    `register_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`tid`),

    KEY `team_sid` (`check_in_sid`),

    CONSTRAINT `team_sid` FOREIGN KEY (`check_in_sid`) REFERENCES `staff` (`sid`)

);

CREATE TABLE `booking_client` (

    `cid` varchar(255) NOT NULL,

    `rid` varchar(255) NOT NULL,

    `start_time` DATE DEFAULT NULL,

    `end_time` DATE DEFAULT NULL,

    `booking_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`cid`, `rid`),

    KEY `rid` (`rid`),

    CONSTRAINT `booking_client_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `client` (`cid`),

    CONSTRAINT `booking_client_ibfk_2` FOREIGN KEY (`rid`) REFERENCES `room` (`rid`)

);

CREATE TABLE `booking_team` (

    `tid` varchar(255) NOT NULL,

    `rid` varchar(255) NOT NULL,

    `start_time` DATE DEFAULT NULL,

    `end_time` DATE DEFAULT NULL,

    `booking_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`tid`, `rid`),

    KEY `rid` (`rid`),

    CONSTRAINT `booking_team_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `team` (`tid`),

    CONSTRAINT `booking_team_ibfk_2` FOREIGN KEY (`rid`) REFERENCES `room` (`rid`)

);

CREATE TABLE `checkin_client` (

    `rid` varchar(255) NOT NULL,

    `cid` varchar(255) NOT NULL,

    `start_time` DATE DEFAULT NULL,

    `end_time` DATE DEFAULT NULL,

    `total_price` varchar(255) DEFAULT NULL,

    `check_in_sid` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`rid`, `cid`),

    KEY `cid` (`cid`),

    KEY `check_in_sid` (`check_in_sid`),

    CONSTRAINT `checkin_client_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `room` (`rid`),

    CONSTRAINT `checkin_client_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `client` (`cid`),

    CONSTRAINT `checkin_client_ibfk_3` FOREIGN KEY (`check_in_sid`) REFERENCES `staff` (`sid`)

);

CREATE TABLE `checkin_team` (

    `rid` varchar(255) NOT NULL,

    `tid` varchar(255) NOT NULL,

    `start_time` DATE DEFAULT NULL,

    `end_time` DATE DEFAULT NULL,

    `total_price` varchar(255) DEFAULT NULL,

    `check_in_sid` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`rid`, `tid`),

    KEY `teamsid` (`check_in_sid`),

    KEY `teamtid` (`tid`),

    CONSTRAINT `teamrid` FOREIGN KEY (`rid`) REFERENCES `room` (`rid`),

    CONSTRAINT `teamsid` FOREIGN KEY (`check_in_sid`) REFERENCES `staff` (`sid`),

    CONSTRAINT `teamtid` FOREIGN KEY (`tid`) REFERENCES `team` (`tid`)

);

CREATE TABLE `hotelorder` (

    `id` varchar(255) NOT NULL,

    `ordertype` varchar(255) NOT NULL,

    `start_time` DATE NOT NULL,

    `end_time` DATE NOT NULL,

    `rid` varchar(255) NOT NULL,

    `money` varchar(255) DEFAULT NULL,

    `order_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    `register_sid` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`id`),

    KEY `rid` (`rid`),

    KEY `register_sid` (`register_sid`),

    CONSTRAINT `hotelorder_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `room` (`rid`),

    CONSTRAINT `hotelorder_ibfk_2` FOREIGN KEY (`register_sid`) REFERENCES `staff` (`sid`)

);

视图建立

-- 创建Customers视图:包含客户的ID、姓名、性别和电话信息

CREATE VIEW Customers AS SELECT Cid, Cname, Csex, Cphone FROM Client;

-- 创建Rooms视图:包含房间的ID、类型、大小、价格和状态

CREATE VIEW Rooms AS

SELECT Rid, Rtype, Rsize, Rprice, rstatus

FROM Room;

-- 创建Living视图:包含入住的房间ID、客户ID、开始时间、结束时间和总价格

CREATE VIEW Living AS

SELECT

    Rid,

    Cid,

    start_time,

    end_time,

    total_price

FROM checkin_client;

-- 创建Administrators视图:包含管理员的ID、姓名和用户名,角色大于1的员工

CREATE VIEW Administrators AS

SELECT Sid, Sname, Susername

FROM Staff

WHERE

Srole > 1

索引建立

--客户电话号码索引:加快通过电话号码查询客户信息的速度

CREATE INDEX idx_cphone ON client (cphone);

--房间价格索索引:加快通过价格查询房间的速度

CREATE INDEX idx_rprice ON room (rprice);

--为状态字段添加索引可能会有助于快速筛选

CREATE INDEX idx_rstatus ON room (rstatus);

--根据入住日期、预订日期或注册时间来查询数据

CREATE INDEX idx_start_time ON booking_client (start_time);



CREATE INDEX idx_end_time ON booking_client (end_time);



CREATE INDEX idx_register_time ON client (register_time);

安全性设计:

设置权限

-- 创建1级权限员工角色

CREATE ROLE Level1_Staff;

-- 创建2级权限员工角色

CREATE ROLE Level2_Staff;

--授予员工权限

GRANT Level1_Staff TO 'zs123' @'%';

GRANT Level2_Staff TO 'ranxi' @'%';

1级员工授予更新、删除和选择权限

2级员工授予投放、更新、删除和选择权限

完整性设计:

触发器建立

-- 创建入住时更新房间状态的触发器

DELIMITER $$



CREATE TRIGGER UpdateRoomStatusOnCheckIn

AFTER INSERT ON checkin_client

FOR EACH ROW

BEGIN

    UPDATE room

    SET rstatus = '占用'

    WHERE rid = NEW.rid;

END$$



DELIMITER;

-- 创建退房时更新房间状态的触发器

DELIMITER $$



CREATE TRIGGER UpdateRoomStatusOnCheckOut

AFTER UPDATE ON checkin_client

FOR EACH ROW

BEGIN

    IF NEW.end_time < CURRENT_DATE THEN

        UPDATE room

        SET rstatus = '空闲'

        WHERE rid = NEW.rid;

    END IF;

END$$



DELIMITER;

  • 58
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值