1. 系统概述
1.1 系统功能概述
1)客户管理。能够增加一个客户,包括:身份证号、客户名称、出生年月、性别、联系电话、邮箱、会员类别等信息,默认会员类别为空;能够修改和删除客户信息;能够根据客户名称、联系电话查询客户基本信息。
2)客户入住。能够根据客房标准和日期查询状态为"空闲"的客房信息,显示楼层号、房间号、费用;能够根据客户名和联系方式查询房间预订信息,显示:楼层号、房间号、预订开始时间,预订结束时间;能够为指定的客户办理指定客房的入住手续,修改客户状态为"入住",并记录入住时间、前台操作员。
3)退房管理。能够根据房间号查询客房信息;能够完成指定客户对指定房间的退房操作(利用存储过程实现),即首先增加一条客户实际入住记录,包括:客户身份证编号、客户名、房间号、入住时间、退房时间、房费、前台操作员,然后修改客房状态为"空闲";最后根据会员类别和入住天数计算房费。
4)预订客房。能够根据标准和日期查询客房空闲情况;能够为指定客户预订指定的客房,并记录预订开始时间、预订结束时间、联系人、联系电话、前台操作员、操作时间等信息。
5)预订查询。能够根据客户名或联系电话查询其预订的客房信息,其中,一个客户可以预订多个客房;能够根据楼层号、房间号查询客房的预订详细信息。

图1-1 功能框图
1.2 系统体系结构

图1-2 体系结构图
Browser/Server结构是伴随着因特网的兴起,对Client/Server结构的一种改进。从本质上说,Browser/Server结构也是一种Client/Server结构,它可看作是一种由传统的二层模式Client/Server结构发展而来的三层模式Client/Server结构在Web上应用的特例。
Browser/Server结构主要是利用了不断成熟的Web浏览器技术:结合浏览器的多种脚本语言和ActiveX技术,用通用浏览器实现原来需要复杂专用软件才能实现的强大功能,同时节约了开发成本。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用,客户端零安装、零维护。系统的扩展非常容易。
B/S结构的使用越来越多,特别是由需求推动了AJAX技术的发展,它的程序也能在客户端电脑上进行部分处理,从而大大的减轻了服务器的负担;并增加了交互性,能进行局部实时刷新。
1.3开发环境
此次设计主要采用MyEclipse加Tomcat后台服务器进行,设计过程中页面主要使用JSP技术完成,下面对MyEclipse、Tomcat和SQL2008数据库进行简要介绍。
MyEclipse,是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,JSP,CSS,Javascript,SQL.
Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。可以这样认为,当在一台机器上配置好Apahce服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端就是一个HTML文本,因此客户端只要有浏览器能浏览。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点.
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。在HTML基础上,使用JavaScript可以开发交互式Web网页。JavaScript的出现使得网页和用户之间实现了一种实时性的、动态的、交互性的关系,使网页包含更多活跃的元素和更加精彩的内容。
2 数据库设计
表2.1关系模型表
|----------|---------------------------------------|-----------------------------------------|
| 关系名 | 属性及码 | 其他约束条件 |
| 客户 | 身份证号,客户名称,出生年月,性别,联系电话,邮箱,会员类别 | 1、身份证号是唯一标识; 2、客户名称不允许为空; 3、联系电话不允许为空; |
| 客房 | 房间号,楼层号,标准,费用,地理位置 | 房间号是唯一标识; |
| 入住 | 身份证号,房间号,客户名,入住时间,退房时间,前台操作员,预付金 | 1、 身份证号引用客户关系中的身份证号; 2、 房间号引用客房关系中的房间号; |
| 用户 | 用户名,用户类型,默认密码,真实姓名,年龄,性别 | 用户名是唯一标识; |
| 预订客房 | 房间号,预定开始时间,预定结束时间,联系人,联系电话,前台操作员,操作时间 | 1、客房号引用客房关系中的房间号; 2、联系电话不允许为空; |
| 会员 | 会员号,会员类型,会员折扣 | 会员类型不能为空 |
| 房间增加消费信息 | 消费编号,房间号,消费类型,消费金额,消费时间,备注 | 客房号引用客房关系中的房间号; |
表2.2 book 订单表
|----------|--------|--------|----------|---------|--------|---------|----------|
| 字段名 | 主键 | 外键 | 类型 | 字节数 | 长度 | 小数位 | 字段说明 |
| cid | √ | √ | char | 18 | 18 | 0 | 身份证号 |
| rno | √ | √ | varchar | 10 | 10 | 0 | 房间号 |
| username | | √ | varchar | 20 | 20 | 0 | 前台操作人员 |
| btime | √ | | datatime | 0 | 0 | 0 | 入住开始时间 |
| etime | | | datetime | 0 | 0 | 0 | 入住结束时间 |
| prePay | | | decimal | 9 | 18 | 1 | 预支金额 |
表2.3 advance 预定表
|----------|--------|--------|----------|---------|--------|---------|----------|
| 字段名 | 主键 | 外键 | 类型 | 字节数 | 长度 | 小数位 | 字段说明 |
| rno | √ | √ | varchar | 10 | 10 | 0 | 房间号 |
| username | | √ | varchar | 20 | 20 | 0 | 前台操作员 |
| person | | | varchar | 20 | 20 | 0 | 联系人 |
| phone | √ | | char | 11 | 11 | 0 | 联系电话 |
| btime | √ | | datetime | 20 | 20 | 0 | 身份证号 |
| etime | | | datetime | 9 | 18 | 1 | 总消费额 |
| otime | | | datetime | 4 | 10 | 0 | 等级编号 |
3 系统概要设计
系统有两类用户:前台操作员和系统管理员。其中,前台管理员负责客房预订、入住登记、房客查询、收费管理等功能,系统管理员负责客房信息输入、客房信息查询、前台操作员管理、统计报表等功能。系统主要包括6大功能模块:基本信息管理、入住管理、会员管理、客房预订管理、收费管理、统计报表管理。
1)客户管理。能够增加一个客户,包括:身份证号、客户名称、出生年月、性别、联系电话、邮箱、会员类别等信息,默认会员类别为空;能够修改和删除客户信息;能够根据客户名称、联系电话查询客户基本信息。
2)客户入住。能够根据客房标准和日期查询状态为"空闲"的客房信息,显示楼层号、房间号、费用;能够根据客户名和联系方式查询房间预订信息,显示:楼层号、房间号、预订开始时间,预订结束时间;能够为指定的客户办理指定客房的入住手续,修改客户状态为"入住",并记录入住时间、前台操作员。
3)退房管理。能够根据房间号查询客房信息;能够完成指定客户对指定房间的退房操作(利用存储过程实现),即首先增加一条客户实际入住记录,包括:客户身份证编号、客户名、房间号、入住时间、退房时间、房费、前台操作员,然后修改客房状态为"空闲";最后根据会员类别和入住天数计算房费。

图3-1用例图

图3-2预定客房顺序图

图3-3会员状态图

图3-4类图

图3-5前台操作员活动图

图3-6系统管理员活动图
4系统详细设计与实现
(1) 登录功能。实现用户了登录功能。判断用户的类型,按用户类型显示不同的页面。
(2) 客户入住。能够根据客房标准和日期查询状态为"空闲"的客房信息,显示楼层号、房间号、费用;能够根据客户名和联系方式查询房间预订信息,显示:楼层号、房间号、预订开始时间,预订结束时间;能够为指定的客户办理指定客房的入住手续,修改客户状态为"入住",并记录入住时间、前台操作员。
(3) 退房管理。能够根据房间号查询客房信息;能够完成指定客户对指定房间的退房操作(利用存储过程实现),即首先增加一条客户实际入住记录,包括:客户身份证编号、客户名、房间号、入住时间、退房时间、房费、前台操作员,然后修改客房状态为"空闲";最后根据会员类别和入住天数计算房费。
(4) 预订客房。能够根据标准和日期查询客房空闲情况;能够为指定客户预订指定的客房,并记录预订开始时间、预订结束时间、联系人、联系电话、前台操作员、操作时间等信息。
(5) 预订查询。能够根据客户名或联系电话查询其预订的客房信息,其中,一个客户可以预订多个客房;能够根据楼层号、房间号查询客房的预订详细信息。
4.1 登录模块实现
4.1.1 界面设计
此界面实现了用户的登录功能。如图4-1登录界面所示。

图4-1登录界面
4.1.2登录功能实现
此界面主要实现了用户的登录功能。此部分代码文件:login.jsp,LoginServlet,UserDao.java,User.java
功能实现:通过login.jsp 的form表单提交到LoginServlet进行处理,再调用UserDao.java中方法实现登录验证.
-
login.js
<divid="loginAndRegisterForm">
<formmethod="post"id="loginForm"><thstyle="text-align:left;">用户名: <inputtype="text"id="userName"style="width:150px;" name="username"class="easyui-textbox"/> <thstyle="text-align:left;">密码: <inputtype="password"id="userPwd"style="width:150px;" name="password"class="easyui-passwordbox"/> <thstyle="text-align:left;">用户类型: <selectname="usertype"class="easyui-textbox"id="option"> <optionvalue="1">前台操作员</option> <optionvalue="2">系统管理员</option> </select>
LoginServlet.java
privatevoid login(HttpServletRequestrequest, HttpServletResponse response) throws IOException{
String username = request.getParameter("username");
String password = request.getParameter("password");
String usertype = request.getParameter("usertype");
Json json = new Json();
User u = UserDao.getUserByName(username, password);
if(u!=null && u.getUsertype().equals(usertype)){
request.getSession().setAttribute("currentUser",u);
json.setMsg("登录成功");
json.setSuccess(true);
if(usertype.equals("1")){
json.setUrl("/operator/index.jsp");
}elseif(usertype.equals("2")){
json.setUrl("/admin/index.jsp");
}else{
json.setUrl("/error.jsp");
}
}else{
json.setMsg("用户名或密码错误,登录失败!");
json.setSuccess(false);
}
String jsonStr = JSON.toJSONString(json);
//将json字符串作为响应内容输出到客户端浏览器。
response.getWriter().write(jsonStr);
}
4.2客户入住模块实现
4.2.1 界面设计
此界面前台操作员处理客户入住。如:图4-2客户入住界面。

图4-2客户入住界面

图4-3客户入住界面
4.2.2 客户入住功能实现
该功能实现了前台操作员处理客户入住的功能。代码文件包括 bookList.jsp,BookServlet.java.
描述:通过bookList.jsp中的form表单向BookServlet.java进行处理.
-
booklist.jsp
<tableid="dg"title="客户入住"class="easyui-datagrid"fitColumns="true"pagination="true"
data-options="rownumbers:true,toolbar:'#tb'"><thfield="cb"checkbox="true"align="center"> <thfield="rno"width="50"align="center">房间号 <thfield="fno"width="50"align="center">楼层号 <thfield="standard"width="50"align="center">房间标准 <thfield="cost"width="50"align="center">房间费用 <thfield="position"width="50"align="center">地理位置 <divid="tb">房间标准: <selectid="standard"class="easyui-combobox"data-options="panelHeight:'auto'"style="width:150px;"> <optionvalue="">全部</option> <optionvalue="大床房">大床房</option> <optionvalue="标间">标间</option> <optionvalue="豪华套房">豪华套房</option> </select> 入住开始时间: <inputtype="text" class="easyui-datebox"id="btime"style="width:150px;"> 入住结束时间: <inputtype="text" class="easyui-datebox" id="etime"style="width:150px;"> <ahref="javascript:searchRoom()"class="easyui-linkbutton"iconCls="icon-search"plain="true">搜索 <ahref="javascript:openDialog()"class="easyui-linkbutton"iconCls="icon-edit"plain="true">入住 <ahref="javascript:reload()"class="easyui-linkbutton"iconCls="icon-reload"plain="true">刷新
<divid="dlg-buttons">