小型酒店管理系统设计与实现
编号
课程设计报告
2014~2015学年第二学期
小型酒店管理系统的设计与实现Design and implementation of small hotel management system
实习类别课程设计
学生姓名 XXX
专业软件工程
学号 1305XXXX
指导教师何XX、尹XX
学院计算机科学技术学院
二〇一五年七月
一、概述
1.1本课题研究的目的及意义
随着我国经济发展水平的迅速提高,酒店业作为服务行业中的重要组成部分己经越来越显示出其强劲的发展势头。纵观国内外酒店业信息化发展轨迹和趋势,我们不难看出,随着酒店业竞争的加剧,酒店之间客源的争夺越来越激烈,客房销售的利润空间越来越小,酒店需要使用更有效的信息化手段,拓展经营空间,降低运营成本,提高管理和决策效率。而经济型酒店通过信息化管理提高收益的需求更加突出。高层次的酒店业信息化不再是仅仅追求计算机辅助管理,而是追求建立在集成化基础上的协同化应用。我国酒店业利用计算机管理系统来加强管理、提高服务水平,虽然至今已有了20多年的历史,但起步发展较晚,只是一些浅层次应用,大多数还停留于拼八凑的MIS系统水平,甚至还仅限于简单的电算化和信息发布阶段,与国际酒店业先进信息化应用的差距非常明显。信息化程度不高导致企业决策失误、市场反应速度缓慢等,己经成为制约我国酒店业进一步发展的重要瓶颈。中国信息化推进联盟副理事长张献军曾说,随着酒店信息化的发展,酒店将改变以往的经营理念和竞争模式,店内装潢、客房数量、房间设施等质量竞争和价格竞争将退居其次,取而代之的是酒店信息化竞争,信息化正改变着酒店业的竞争模式。国家旅游局2002年修订的旅游星级饭店评定的国家标准,已经把酒店管理的软件指标及服务方面作为主要测评手段。而现代化的酒店是集客房、餐饮、通讯、娱乐,商务文化及其他各种服务与设施为一体化的消费场所,酒店组织庞大,服务项目多,信息量大,要想提高劳动生产,降低成本,提高服务质量和管理水平,进而促进经济效益,必须借助计算机来进行现代化的信息管理,本酒店管理系统正是为此而设计,目的是使酒店管理特别是经济型酒店在高效、低成本方面跨上一个新的台阶。由此可见,一个好的酒店管理系统应该达到以下几个目标:
1.提高工作效率,减轻劳动强度。
在酒店的日常工作中,每天都要完成对营业信息进行更新统计,提供查询服务,结算账单等大量的业务,用手工方式进行的话,不仅速度慢,需要的人手多,且出错的概率也大,而计算机管理则可以大大提高业务运作的速度和准确性,实现营业管理自动化。
2.提高了酒店经济效益,增加营业收入。
完善的客房管理功能可防止有房不能出租或房间重订的情况出现,随时提供准确和最新的房态信息,从而可提高工作效率和客房出租率。客人费用的一次性结账,不仅减少了票据传送,而且避免了管理上的混乱,更主要的是有效地防止逃帐的发生。
3.提高了服务质量,可以为客人提供快捷、细致、周到的服务。
操作人员只需敲击键盘,就可以办理客人入住、查询信息、结账等各项手续,并准确无误地记录客人的每笔消费记录,大大缩短客人办理手续时的等候时间,提高了服务质量。
4.信息透明,酒店营业情况一目了然,提高了经营者的决策水平。
经营者可以通过对酒店经营状况及历史数据的分析,做出相关的经营决策,并加强对饭店运营的内部控制,为酒店未来的发展提供理论依据。
1.2现状分析
酒店计算机管理系统最早是于上世纪70年代初在国外开始发展起来的,到了上世纪80年代,国外的饭店管理系统,如EECO,HIS,CLS,Lodgistix 等,整个模式已基本定型,技术较成熟,功能也比较全面。国内的酒店计算机管理系统最早是在80年代初开始的,从事该方面工作的有清华大学自动化系的金国芬教授、西安交大和浙江省计算技术研究所。到上世纪80年代中经济型酒店管理信息系统的设计与实现后期,;随着国外酒店计算机系统的大规模引进,
国外酒店的先进管理技术进入我国,进打步促进曩我国饭店管理技术的发展。国内系统正是在充分吸收国外管理系统的精华。,再结合国内的实际情况,逐步发展成熟,到上世纪90年代初期形成了几个较成熟的软件系统,同时产生了许多专职从事酒店计算机管理系统的公司。进入21世纪后,随着计算机在酒店中的普及应用,以及计算机技术的不断发展,酒店计算机系统的发展到了一个新的时期,新的系统平台、新的软件功能、新的系统特点及发展方向断涌现,酒店管理系统逐渐向ERP方向发展。
1.3课程设计主要研究内容和架构
小型酒店管理系统的设计与实现是基于MVC三层架构完成,使用Java语言开发,主要应用jsp完成前台界面部分,servlet MVC完成后台逻辑部分,采用javabean操作封装数据库的表信息。
本系统的设计从现实角度出发,根据实际小型酒店管理系统的实际需求,采用功能模块化设计,便于系统组合和修改,又便于酒店系统各类工作人员不同
功能操作。系统的设计过程由概述、需求分析、技术方案、总体设计、详细设计、软件测试、总结等部分构成。
二、需求分析
2.1系统角色
本系统有三个角色分别为:经理、前台服务员、客房管理员,他们进入系统都具有不同的权限和功能,分别都能进行自己的管理事项,既分工明确,又协调统一。
2.2系统功能
不同角色登录就有着不同的功能:
1. 经理具有雇佣员工、解雇员工的功能;
2. 前台服务员满足顾客的需求:填写预定客房订单、取消顾客的预定订单、办理入住手续、办理退房结账手续;
3. 客房管理员管理客房的状态,是否可提供入住,还是正在整理中
2.3数据库需求
2.3.1数据库表E-R图
本系统的主要的实体有经理,前台服务员,客房管理员,顾客,客房。它们对应的实体和关系ER图如下所示:
2.3.2系统管理模块
1.2.3.
4. 5.
6.
7..
9.
三、技术方案
3.1 Java Web相关技术
1.JDBC
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制(1)跨平台运行:这是继承了Java语言的“一次编译,到处运行”的特点;
(2)不受数据库供应商的限制:巧妙在于JDBC设有两种接口,一个是面向应用程序层,其作用是使得开发人员通过SQL调用数据库和处理结果,
而不需要考虑数据库的提供商;另一个是驱动程序层,处理与具体驱动程序的
交互,JDBC驱动程序可以利用JDBC API创建Java程序和数据源之间的桥梁。应用程序只需要编写一次,便可以移到各种驱动程序上运行。Sun提供了一个驱动管理器,数据库供应商——如MySQL、Oracle,提供的驱动程序满足驱动管理器的要求就可以被识别,就可以正常工作。所以JDBC不受数据库供应商的限制。
JDBC API可以作为连接Java应用程序与各种关系数据库的纽带,在带来方便的同时也有负面影响,以下是JDBC的优、缺点。优点如下:
(1)操作便捷:JDBC使得开发人员不需要再使用复杂的驱动器调用命令和函数;
(2)可移植性强:JDBC支持不同的关系数据库,所以可以使同一个应用程序支持多个数据库的访问,只要加载相应的驱动程序即可;
(3)通用性好:JDBC-ODBC桥接驱动器将JDBC函数换成ODBC;
(4)面向对象:可以将常用的JDBC数据库连接封装成一个类,在使用的时候直接调用即可。
缺点如下:
(1)访问数据记录的速度受到一定程度的影响;
(2)更改数据源困难:JDBC可支持多种数据库,各种数据库之间的操作必有不同,这就给更改数据源带来了很大的麻烦
2.MVC框架
MVC最早是在SMALLTALK-80语言中出现。后来在JSP开发中渐渐得到广泛应用。并且成为Sun公司推荐的J2EE平添的设计模式,Sun公司提出的Model2开发模型就是基于MVC设计模式的应用。Model2实现了业务逻辑、显示逻辑和控制的分离,即是基于MVC的框架。MVC框架即模型-视图-控制器(Model-View-Controller)设计模式。M代表Model,V代表View,C 代表Controller。MVC的核心思想是将一个应用程序的数据业务处理功能(模型)、表示功能(视图)和控制功能(控制层)在3个不同的部分(或层)上分别实现。MVC 的目的是增加代码的可重用性,减少数据描述和应用操作的可耦合度,并提高代码的可读性。
3.2 开发工具
1.SQL server数据库
数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
2.Tomcat服务器
Tomcat是一个免费的、开放源代码的Web应用服务器,它是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发。Servlet和JSP规范在Tomcat 容器中都得到了很好的支持,从Tomcat5开始支持最新的Servlet2.4和JSP2.0规范。Tomcat容器虽然是免费开源的Web应用服务器,但是它的技术含量并不亚于其他Web应用服务器、而且性能稳定,运行时占用的系统资源少,是开发和调试应用程序的理想工具,因而深受Java开发人员的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
3.MyEclipse开发平台
MyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。MyEclipse 的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持相当不错。
MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse可以支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。
四、总体设计
该小型酒店管理系统是基于MVC开发模式,使用B/S体系,采用Servlet + Jsp + service框架。其中数据访问层被封装在Dao层,数据访问层在底层封装了JDBC。。而系统的业务逻辑层由service负责。系统的所有Jsp装在工程的根目录下,Servlet负责web层以及Jsp页面的跳转功能。此外,系统将数据库中的所有关系表都封装在damain中,以便使用。当用户进行操作时,将页面中获取的表单数据提取出来,交给servlet进行处理,servlet通过调用业务逻辑层(service层)功能函数,与从数据库中获取的信息交互,处理问题
4.1系统功能模块介绍
各个模块具体功能描述如下:
4.1.1登录管理
登录管理模块是分角色登录系统,包括经理、前台服务员、客房管理员。不同用户进入系统的不同功能模块进行各自的操作。利用不同的系统登录角色,是系统的结构更为清晰,功能体现的更为具体。
4.1.2经理管理
该酒店系统只有一位经理,该经理对各类员工雇佣、解雇的职能。经理通过选择需要解雇的员工职工号,进行员工的删除。同理根据职工号进行增添员工信息。
4.1.3
该酒店系统有客房管理员一职,该职员通过登录系统,对房间的状态进行及时的更新。房间的状态有两种:可提供和整理中。客房管理员通过房间号进行更新状态。
4.1.4
该酒店系统有前台服务员一职,该职员通过登录系统,对前台预定房间、入住房间、退房、结账的顾客,进行接待并完成相应的手续。顾客预定房间时,服务员对顾客的信息进行纳入,并预定顾客所选房间,下订单。顾客入住房间时,服务员通过顾客的身份证号进行查询订单信息,并办理入住手续。同时顾客也可以取消该订单。最后,顾客办理退房手续,也是根据顾客身份证号进行办理,并结账。
4.2数据库设计
系统采用SQL server数据库,在数据库中创建了经理表、前台服务员
表、客房管理员表、房间表、顾客表、预定表、入住表、退房表、结账表。此外还定义了两个触发器:顾客预定触发器、删除顾客触发器,后面详细介绍功能。
4.2.1.各表定义情况。
表-1 经理表
字段名称含义数据类型是否主键是否外键其他约束num 职工号varchar(10) 是否无
name 姓名varchar(10) 否否非空password 登录密码varchar(10) 否否非空
表-2 客房管理员表
字段名称含义数据类型是否主键是否外键其他约束num 职工号varchar(10) 是否无name 姓名varchar(10) 否否非空password 登录密码varchar(10) 否否非空
表-3 前台服务员表
字段名称含义数据类型是否主键是否外键其他约束num 职工号varchar(10) 是是无name 姓名varchar(10) 否否非空password 登录密码varchar(10) 否否非空
表-4 客房表
字段名称含义数据类型是否主键是否外键其他约束num 房间号varchar(10) 是是无
type 类型varchar(20) 否否非空area 面积int 否否非空hour_price 钟点费int 否否非空day_price 一晚价int 否否非空
ssp 押金int 否否非空state 状态varchar(10) 否否非空
rm_num 客房管理员varchar(10) 否否非空
表-5 顾客表
字段名称含义数据类型是否主键是否外键其他约束num 身份证号varchar(10) 是是无name 姓名varchar(10) 否否非空room_num 预定房间号varchar(10) 否否非空
intype 预订房间类型int 否否非空intime 入住时长int 否否非空or_time 预定时间date 否否非空in_time 预定入住时间date 否否非空co_time 预定退房时间date 否否非空fore_num 前台接待服务员varchar(10) 否否非空
表-6 预定表
字段名称含义数据类型是否主键是否外键其他约束num 顾客身份证号varchar(10) 是是无
表-7 入住表
字段名称含义数据类型是否主键是否外键其他约束num 顾客身份证号varchar(10) 是是无
ischeckin 是否入住int 否否无
表-8 退房表
字段名称含义数据类型是否主键是否外键其他约束num 顾客身份证号varchar(10) 是否无
表-9 结账表
字段名称含义数据类型是否主键是否外键其他约束num 顾客身份证号varchar(10) 是否无
name 顾客姓名varchar(10) 否否无
allmoney 结账金额int 否否无
a_time 结账日期date 否否无
4.2.2.触发器
顾客下预定订单后,自动将顾客身份证号存入预定、入住、退房表中。
create trigger cust_Info
on customer
after insert
as
begin
declare @c_num varchar(20),@room_num varchar(10),@ord_time datetime;
select @c_num=num from inserted;
select @room_num=room_num from inserted;
select @ord_time=or_time from inserted;
insert into ordered values (@c_num);
insert into checkin values(@c_num,0);
insert into checkout values(@c_num,0);
end;
当顾客下取消预定房间订单或结账完成后后,自动将顾客的身份证号存、从入预定表、入住表、退房表、顾客表中删除
create trigger cust_delete
on customer
instead of delete
as
begin
declare @c_num varchar(20);
select @c_num=num from deleted;
delete from checkout where num=@c_num;
delete from checkin where num=@c_num;
delete from ordered where num=@c_num;
delete from customer where num=@c_num;
end;
五、详细设计
5.1系统类图
使用MyEclipse开发工具导出系统的主要类图
1.数据访问层及基本数据增删改查操作类
图-1 数据访问层数据访问层及基本数据增删改查操作类
2.javabean封装类
图-2 javabean封装类
2.业务逻辑Service层
图-3 业务逻辑Service层
3.Web servlet层及Jsp
图-4 Web servlet层及Jsp
5.2用户登录
1.登录实现
首先选择登录角色,默认为经理。再输入职工号与密码当用户名和密码都正确时,用户进入到属于自己角色的系统界面。
2.异常处理
异常主要包括用户名或密码为空、用户名或密码在数据库中不存在。根据异常原因,将在对应的输入框后面显示提示信息。
3.主要实现方法
(1)约束用户名须是字母开头和字母数字组成,给用户名的文本框设置onblur()事件。当失去焦点时,执行checkUserName(),在方法里根据id获取用户名的输入框对象,并进行非空判断和正则表达式校验。
(2)在LoginServlet类中获取职工号,从数据库中调出等于该职工号的员工信息,如果为null或与获取的密码不一致,则在LoginServlet类中使用setAttribute()方法设置属性值,返回到jsp中显示出“不存在该用户”或“密码错误”。
5.3经理功能
经理对各类员工雇佣、解雇的职能。经理通过选择需要解雇的员工职工号,进行员工的删除。同理根据职工号进行增添员工信息。界面如下:
(a) (b)
(c) (d)
图-6 经理业务界面
用到的类:AddMemberServlet、Manager_service、DaoImpl_ma、DeleteMemberServlet、
开始
进入经理管理界面
输入职工号
进行员工解雇
是否存在该员工
进行员工雇佣
结束
Y
N
Y
N
Y
N
5.4客房管理功能
客房管理员通过登录系统,对房间的状态进行及时的更新。房间的状态有两种:可提供和整理中。客房管理员通过房间号进行更新状态。
用到的类:
5.5
该职员通过登录系统,对前台预定房间、入住房间、退房、结账的顾客,进行接待并完成相应的手续。顾客预定房间时,服务员对顾客的信息进行纳入,并预定顾客所选房间,下订单。顾客入住房间时,服务员通过顾客的身份证号进行查询订单信息,并办理入住手续。同时顾客也可以取消该订单。最后,顾客办理退房手续,也是根据顾客身份证号进行办理,并结账。
用到的类:
/HotelManagement/src/cn/cust/dao/impl/DaoImpl_fore.java
/HotelManagement/src/cn/cust/service/impl/Fore_waiter_service.java
/HotelManagement/src/cn/cust/web/controller/CheckInOrNotServlet.java
/HotelManagement/src/cn/cust/web/controller/CheckInServlet.java
/HotelManagement/src/cn/cust/web/controller/CheckOut2Servlet.java
/HotelManagement/src/cn/cust/web/controller/CheckOutServlet.java
/HotelManagement/src/cn/cust/web/controller/OrderServlet.java
/HotelManagement/src/cn/cust/web/controller/SelectRoomServlet.java 主要用到的方法:
//查询顾客的预定情况,以便办理入住
Cus_room_ord search_order(String c_num);
//查询顾客入住情况根据入住办理退房手续
Cust_in_out search_in(String c_num);
//添加顾客
boolean fore_add_customer(Customer customer);
//办理入住
boolean add_cust_checkIn(String c_num);
//办理退房
boolean add_cust_checkout(String c_num);
//结账功能:房间号、房间价格、(房间订金)
boolean add_account(Account account);
//删除顾客信息
boolean delete_cust(String c_num);
//登录
Fore_waiter search(String num, String password);
//判断顾客是否存在
Customer custIsExist(String c_num);
//结账后删除结账表中的顾客
boolean delete_acc(String num);
界面如下:
图-9 前台服务员业务界面-查询可用房间