当前位置: 首页 > news >正文

基于Java+SQLServer2017实现(Web)酒店客房管理系统

酒店客房管理系统

一、 概述

1.1、数据库课程设计题目

此次程序设计选题为酒店客房管理系统。

1.2、项目背景

随着社会的发展,普通人工酒店客房管理已经难以适应。酒店需要一个信息管理系统对旅客住宿情况进行管理。系统需要维护所有客房的详细信息,登记入住旅客信息,并实现各种相关的查询、统计功能。

1.3、程序设计报告编写的目的

设计报告主要编写课程设计的总体思路和代码实现的具体方面,利于日后维护和进行再开发能快速了解到当时代码设计者的设计的思路和实现细节。课程设计报告编写的目的是培养学生的设计报告编写能力。

二、需求分析

需求分析是对应用领域中的信息和操作要求进行详细分析,形成需求分析说明书。重点是调查、收集与分析用户在数据管理中的信息要求,处理要求,数据的安全性与完整性要求。

2.1、设计任务

作为数据库课程设计题目,鉴于时间有限,我们不追求大而全,只是把酒店管理所涉及的核心内容作为数据库管理对象进行设计。要完成对酒店客房的管理,系统必须管理酒店的客房信息、旅客信息、酒店客房管理系统操作人服务员的信息、客房订单信息等。

2.2、设计要求

酒店客房管理系统的关系型数据库设计主要满足数据库的第三范式,即非主属性不传递依赖于候选键,简单的说就是非主属性不到传递依赖。

2.3、需求描述

酒店客房管理系统的主要面向用户是酒店服务员,用户的主要工作是对来往的住客进行入住登记、退房业务、客户资料查询与更改、实时了解客房状态。

由上描述,可将需求分为四大部分,一是入住登记、二是退房与续租业务、三是客户资料查询与更改、四是客房时状态。

入住登记,实现保存客户基本信息、缴纳住房费用。客户基本信息包括姓名、性别、身份证、电话号码、租房类型、安排住房、入住天数等。费用缴纳前,需根据客户的住房类型已经住宿时间根据预缴纳与实际房间的计算出客户需缴纳费用。

退房与续租业务,实现退还保证金给客户和客户续租客房的业务。

客户资料查询与更改。资料查询,用户可以通过多种方式对客户资料进行查询,查询可以分为历史客户查询和现存客户查询,查询依据可以是多方面的,如以姓名、身份证、身份证等作为依据查询;客户资料更改,可对客户的电话号码、身份证进行更正。

实时客房状态。用户可以浏览当前客房的使用情况。

三、概念结构设计

3.1、概念设计工具

将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计。它是整个数据库设计的关键。

本课程设计的数据库概念模型的表示方法是实体-联系方法,该方法用 E-R 图来描述现实世界的概念模型,E-R 方法也称 E-R 模型。

3.2、抽象出系统实体

3.2.1、抽象出系统实体

酒店客房管理系统可以包含客房、客户、管理员、订单、客房类型,5 个实体,下图为 5 个实体的 E-R 图。

3.2.1-1 客房实体图

3.2.1-2 客户实体图

3.2.1-3 酒店管理员实体图

3.2.1-4 管理员实体图

3.2.1-5 房间类型实体图

3.3、入住信息登记子系统

3.3.1、系统描述

该系统先录入旅客的信息,包括姓名性别、身份证、电话号码、入住天数,按照旅客的意愿选择房间类型与房号, 计算旅客需预缴的费用(包括保证金)以及实际消费的费用,并反馈给用户。然后用户继续输入旅客的同伴信息并保存到数据库中。实际操作界面如下图:

3.3.1-1

3.3.2、分 E-R 图

3.3.1-2

3.3.3、说明

一个管理员可以负责 n 个客户,一个房间可以入住 1-6 人。

3.4、信息查询子系统

3.4.1、系统描述

信息查询。管理员可以输入旅客姓名、房间号、身份证等进行匹配,搜索出相对应的旅客信息并显示在界面。界面操作如下图。

3.4.1-1 查询界面图

3.4.2、分 E-R 图

3.4.2-2

3.4.3、分析

管理员通输入信息匹配到旅客,再通关系,查询到旅客居住的房间号,最后展现出旅客的信息。

3.5、旅客信息修改子系统

3.5.1 系统描述

管理员通输入旅客的房号和姓名,匹配到要修改的对象,可以对旅客的电话号码和身份证进行修改。界面如图所示。

3.5.1-1 信息修改界面图

3.5.2、分 E-R 图

3.5.2-2 修改 E-R 图

3.5.3、说明

一个管理员可以修改多个旅客。

3.6、退房子系统

3.6.1、系统描述

管理员输入房号,并对结算按钮对客房进行结算,在退款框向旅客展示退还的押金。界面图如下。

3.6.1-1 结算界面图

3.6.2、分 E-R 图

3.6.2-2 计算退房 E-R 图

3.6.3、说明

管理员可以操作多个住房关系,旅客与住房关系为 1 对 1,住房关系与订单为 n 对 1 的关系。

3.7、续租子系统

3.7.1、系统描述

管理员输入房号、续租天数并点击续租按,酒店客房管理系统会储存旅客的续租记录并计算应缴付款,提示管理员收取多少费用,界面如下图。

3.7.1-1 续租界面图

3.7.2、分 E-R 图

3.7.2-2 续租 E-R 图

3.7.3、说明

通过 roomNum/房号,找到实体间的联系,livers 与客户是一对一关系,这样可以找到对应的旅客增加停留属性 stayDay 的属性值,一个订单可以包含多个旅客,因为一个客房可以满足容纳多名旅客,使用关系实体 livers 可以找到一个与他关联的订单实体并改变它的预收款和旅客实消费的值。

3.8、酒店客房关联系统总体 E-R 图

四、逻辑结构设计

逻辑结构设计就是将概念结构设计中的全局 E-R 图转换为与选用的 DBMS 产品所支持的数据模型相符号的逻辑结构。

4.1、关系数据库模式

根据上面介绍的总体 E-R 图,可以得到酒店管理系统的关系模型如下:

旅客(旅客 ID,身份证号,姓名,性别,电话号码,年龄,入住日期,停留时间)为旅客实体对应的关系模式,其中旅客 ID 为系统自增加一的主键,在此表中唯一识别。

房间类类型(类型)为房间类型实体对应的关系模式。

比率(租金,预付款)

房间(房号,面积,房间类型,租金,状态)为房间实体对应的关系模式,其中房号为主键,租金与房间类型为外键,分别参照了比率和房间类型实体。

管理员(账号,密码,姓名)为管理员实体对应的关系模式,账号为主键。

订单(订单 ID,预付,实际消费,管理员账号)为订单实体对应的关系模式,管理员账号为参照管理员实体的外键。

住房关系(订单 Id,旅客 ID,房号,状态)为联系账单、旅客和客房对应的关系模式,因为旅客与订单、客房为多对一关系,因此客房,旅客和订单的主属性组成了住房关系模式的主键

type 房间类型表

字段名

类型

属性

roomType 类型

Varchar(20)

主键

rate 比率表

字段名

类型

属性

money 租金

varchar(20)

主键

prepay 预付

varchar(20)

not null

room 客房表

字段名

类型

属性

roomNum 房号

varchar(20)

主键

area 面积

varchar(20)

not null

roomType 房间类型

varchar(20)

外键 not null

money 租金

varchar(20)

外键 not null

status 状态

varchar(20)

not null

guest 旅客表

字段

类型

属性

personId

int

主键 自增加一

guestId 身份证

varchar(20)

not null

name 姓名

varchar(20)

not null

tel 电话

varchar(20)

not null

age 年龄

varchar(20)

sex 性别

varchar(20)

not null

day 入住日期

varchar(20)

not null

stayDay 停留时间

varchar(20)

not null

manager 管理员表

字段

类型

属性

num 账号

varchar(20)

主键

pw 密码

varchar(20)

not null

name 姓名

varchar(20)

not null

billOrder 订单表

字段

类型

属性

orderId

int

主键 自增加一

prepay 预付款

varchar(20)

not null

total 实际消费

varchar(20)

not null

num 管理员账号

varchar(20)

外键 not null

lives 关系表

字段

类型

属性

orderId

int

主键 参照 billOrder 表

personId

int

主键 参照 guest 表

roomNum

int

主键 参照 room 表

status

varchar(1)

not null

五、数据库物理设计与实施

5.1、软件与硬件

此次课程设计用到的数据库为 SQLServer2017,使用了 navicat 作为 SQL 语言的编辑软件,软件运行环境为 widow10 的 64 位系统。

5.2、物理结构设计

数据库在物理设备上的储存结构与储存方法称为数据库的物理结构,它依赖数据库管理系统。

5.2.1、数据库储存引擎

采用默认 InnoDB 储存引擎,其特点是行锁设计、支持 MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和 CPU。

5.2.2、关系模型存取方法

存取方法是快速存取数据库中数据的技术。在酒店客房管理系统中存在着许多查询功能,巧妙的设置索引,能很有效提高数据库的查询效率。此次课程设计数据库系统采用了索引存取方法。

5.2.3、存储结构

为了加快数据库的运行速度,我把数据库存放在电脑固体硬盘 C 盘。固态硬盘的读取速度比一般的机械硬盘要快的多,但其存储量比同等价位的机械硬盘要小得多,所有要更加合理的设计索引,减少空间的开销。

5.3、建立数据库

数据库的建立使用 nacvice 工具,基本表的建立用 SQL 语言

数据库名称为:hotel

type 基本表:

-- 建立房间类型表

CREATE TABLE type 
(roomType VARCHAR(20) PRIMARY KEY
);

rate 基本表

--建立房间预收与实价

CREATE TABLE rate(money VARCHAR(20) PRIMARY KEY,prepay VARCHAR(20) NOT NULL
);

room 基本表

--建立房间表

CREATE TABLE room(roomNum VARCHAR(20) PRIMARY KEY,area VARCHAR(20),roomtype VARCHAR(20),money VARCHAR(20),states VARCHAR(20),FOREIGN KEY(roomtype) REFERENCES type(roomType),FOREIGN KEY(money) REFERENCES rate (money)
);

manager 基本表

--经理表格

CREATE TABLE manager(num VARCHAR(20) PRIMARY KEY,pw VARCHAR(20) NOT NULL,name VARCHAR(20) NOT NULL
);

guest 基本表

--旅客

CREATE TABLE guest(personId INT IDENTITY(1,1) PRIMARY KEY,guestId VARCHAR(20),name VARCHAR(20) NOT NULL,tel VARCHAR(20) NOT NULL,age VARCHAR(20) ,sex VARCHAR(20) NOT NULL,day VARCHAR(20) NOT NULL,stayDay VARCHAR(20) NOT NULL
);

billOrder 基本表

--账单

CREATE TABLE billOrder(orderId INT IDENTITY(1,1) PRIMARY KEY,prepay VARCHAR(20) NOT NULL,total VARCHAR(20) NOT NULL,num VARCHAR(20),FOREIGN KEY(num) REFERENCES manager(num)
);

lives 基本表

--创建关系表

CREATE TABLE lives(orderId INT,personId INT,roomNum VARCHAR(20),status VARCHAR NOT NULL,PRIMARY KEY(orderId,personId,roomNum),FOREIGN KEY(orderId) REFERENCES billOrder(orderId),FOREIGN KEY(personId) REFERENCES guest(personId),FOREIGN KEY(roomNum) REFERENCES room(roomNum)
);

5.4、索引设计

当表中数据量比较大时,查询操作会比较耗时,建立索引是加快查询的有效手段。但过多的索引会增加数据库的储存负担,有效的设计索引,才能达到数据库空间和查询速度的最优。

在酒店客房管理系统中有许多字段需要频繁查找的,为其建立索引,有效与加快管理员的工作效率,能给使用者更好的使用体验。

在查询旅客信息功能中使用了根据旅客姓名、身份证、房号作为查询依据,到数据库中进行搜索;在续租与退租时也多次使用到房号匹配查询。所有为姓名、身份证、房号建立索引。

实现语句为:

CREATE UNIQUE INDEX guestNameIndex ON guest(name);
CREATE UNIQUE INDEX guestIdIndex ON guest(guestId);
CREATE UNIQUE INDEX roomNumIndex ON room(roomNum);

5.5、加载测试数据

客房数据:

管理员数据:

顾客数据:

订单数据:

联系表 lives 的数据:

六、数据库操作要求及实现

6.1、数据查询操作

客房使用状态查询:

SELECT roomNum FROM room WHERE status = '0';

客房有两种状态,分别是有客或空置,status=1 表示有客,status=0 表示空置。

旅客信息查询:

SELECT  FROM guest,lives WHERE name = '杨千旺' AND lives.personId = guest.personId AND guest.personId IN (SELECT personId FROM lives WHERE status = '0');

因为旅客表没有旅客居住的房号字段,所有需要链表查询。

6.3、数据更新

客房使用状态更新:

UPDATE room SET status = '1' WHERE roomNum = '103';

把 status 更新为 0 或者 1。

旅客信息更改:

UPDATE guest SET tel= '3', guestId = '3' WHERE name = '1'AND personId IN (SELECT personId FROM lives WHERE roomNum = '204');

6.4、数据维护操作

数据库试运行合格后,数据库开发工作就基本完成了,可以投入正式运行了。但是由于应用环境在不断变换,数据库中物理储存也会不断变化,对数据库设计进行评价、调整、修改等维护工作是一项长期任务,也是设计工作的继续与提高。

数据库维护主要包括以下几方面:

1、 数据库转储和恢复。通过定期转储备份数据库文件,避免数据遭到破坏后无法恢复。

2、 数据库的安全性、完整性控制。

3、 数据库性能的监督、分析和改造。

4、 数据库的重组织与重构。

常使用 ALTER TABLE 语句对数据库字段和字段的约束进行删除、修改和新增。以达到数据维护效果。

七、源代码及查询截图

7.1、流程图

7.2、数据库连接方法

数据库连接使用了 JDBC 驱动连接 SQLServer 数据库,JDBC 是 Java DataBase Connectivity 的缩写,它是连接 Java 程序和数据库服务器的纽带。如图:

java.sql 包的接口和类:

Driver 接口和 DriverManaer 类:前者边是驱动器,后者表示驱动管理器

Connection 接口:数据库连接

Statement:负责执行 SQL 语句

PreparedStatement:负责执行预准备的 SQL 语句

CallableStatement:负责执行 SQL 存储过程

ResultSet:SQL 查询语句的结果集

在本次课程设计中数据库的具体连接代码:

//路径
url="jdbc:sqlserver://localhost:1433;"+"databaseName=hotel2;user=sa;password=yang2456064131;"
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//驱动类
conn = DriverManager.getConnection(url);//驱动连接

7.3、数据库查询截图

在课程设计中有许多地方需要使用到查询语句到数据库中获取数据,以旅客查询为例具体查询代码如下:

SELECT * FROM guest,lives WHERE name = '杨千旺' AND lives.personId = guest.personId AND guest.personId IN (SELECT personId FROM lives WHERE status = '0');

酒店管理系统运行显示结果如下:

八、总结

通过本次数据库课程设计,进一步巩固了我对数据库的基本操作,同时锻炼了我对数据的分析能力。懂得怎样从一个客观存在的实体中提炼出它的属性。设计数据库表格并不像一般我们所看的表格,它不是一个对立的个体,每个表格都会有它存在的意义和其它表格千丝万缕的关系。能巧妙的设计表格属性,不仅能减少数据库的存储开销、加快查询效率,还可为日后的开发提供便利。基本表的合理关系,能减轻 SQL 查询语句的设计,这可大大减少了数据开发人员的工作量。

在数据库设计中,还有一个比较重要是约束条件的建立。或许有人以为,约束条件限制了很大操作,增加了语言规则。约束条件它虽然增加了好多规则,插入时有许多不便,但它能很大程度的保证数据库能正常运行,有了约束条件,数据库变得更有规律完整。避免了缺值、和错误值。

本次数据库课程设计,在提高我系统应用开发能力,对应用系统从数据库到后端代码到前端展示的开发能力有许多提升。

九、参考文献

【1】旺珊,萨师煊.数据库系统概论(第五版).出版社:高等教育出版社

【2】郭克华,唐雅媛 扈乐华.java EE 程序设计与应用开发(第二版).出版社:清华大学出版社

http://www.dtcms.com/a/304935.html

相关文章:

  • MongoDB系列教程-教程概述
  • 系统选择菜单(ubuntu grub)介绍
  • 标量子查询 外表有多少重复值决定filter次数 转化 left join
  • Python三大Web框架:FastAPI vs Flask vs Django 详解与快速入门指南
  • BreachForums 黑客论坛强势回归
  • windows软件ARM64和AMD64(x64)区别,如何查看电脑支持哪种
  • JVM易混淆名称
  • 大型微服务项目:听书——多端重复提交订单问题适配器模式实现不同支付方式的选择零钱支付逻辑
  • 爬虫逆向之瑞数五案例:某某医学院(补环境,联调)
  • 适配器模式的三种C++实现
  • 宠物经济行业研究系列报告
  • electron-vite 动态加载脚本 实现动态插件
  • 如何为你的WordPress网站选择合适的安全插件
  • 【效率工具】255款工作计划表格Excel电子版模板:总结日月周报日历安排提醒时间管理
  • 遍历-找到匹配的节点
  • 零基础-动手学深度学习-7.6. 残差网络(ResNet)
  • [leetcode] 子集
  • OpenCL - study - code04 canny
  • 泰勒图中RMSD和RMSE是一个指标吗?
  • 掌控AI工具链:用 Python + API 构建 AI MCP 服务器
  • VUE进阶案例
  • Apple: A Legendary Journey of Innovation, Business, and Global Influence
  • [SWPU2019]Web1
  • VxWorks入门 【VxWorks程序运行】六
  • 数据库表的运算及表示方法
  • jQuery DOM 遍历详解
  • docker技术框架
  • 2024年蓝桥杯Scratch10月图形化stema选拔赛真题——旋转的图形
  • Luogu P2577 午餐(ZJOI2004)
  • 市政道路积水监测系统:守护城市雨天出行安全的 “智慧防线”