资源描述
目 录
一、设计题目 2
二、设计目标 2
三、设计分析 2
3.1可行性分析 2
3.1.1技术上可行性 2
3.1.2操作上可行性 3
3.1.3经济上可行性 3
3.2系统功效分析 3
四、总体设计 3
4.1设计思想 3
4.2系统功效模块 4
4.3系统步骤分析 4
4.4功效需求和程序模块对应关系 7
4.5数据库结构设计 7
4.5.1系统数据库性能需求 7
4.5.2本系统数据库表设计中所遵守基础标准 7
4.5.3数据库需求分析 8
4.5.4数据字典设计及数据库表命名规则 8
五、具体设计 10
5.1系统登陆界面 10
5.2添加住房信息功效 10
5.3住房信息查询功效 11
5.4添加就餐信息功效 12
5.5就餐信息查询功效 13
5.6结账功效 13
六、结论 13
附录(部分源代码) 14
一、设计题目
酒店管理系统
二、设计目标
1.利用已学过知识进行一个简单应用程序开发。
2.经过设计,掌握使用SSH技术、Java高级语言、SQL语言开发一个基于J2EE应用系统基础方法。后台数据库关键采取My SQL Server数据库。
3.基础掌握实现对数据库连接、对数据查询、修改、插入、删除等操作。
4.设计系统主界面,主界面上包含系统功效菜单。
5.界面友好,操作方便。
三、设计分析
3.1可行性分析
可行性研究目标,就是用最小代价在尽可能短时间内确定问题是否能够处理。要达成这个目标,必需分析多个关键可能解法利弊,从而判定原定系统规模和目标是否现实,系统完成后所能带来效益是否达成值得投资开发这个系统程度。所以,可行性研究实质上是要进行一次大大压缩简化了系统分析和设计过程,也就是在较高层次上以较抽象方法进行系统分析和设计过程。
系统可行性分析关键包含经济上可行性,技术上可行性和操作上可行性,下面将分别介绍三种技术上可行性。
3.1.1技术上可行性
酒店管理系统是采取Java语言编写,含有Java一次编写,四处运行优点,所以此系统在不一样操作系统上全部能够运行,含有很强移植性、健全性和安全性。而且酒店管理系统应含有功效完备、易于使用、易于维护等特点,而对于后者则要求能建立数据一致性和完整性强、数据安全性好库。基于以上要求,本系统采取MyEclipse6.0作为开发工具,使得代码编写过程大大简化。而数据库则是采取现在较为流行Mysql,Java对Mysql含有很好支持,而且在经历了多年发展后Mysql含有很好口碑。此系统在技术上是可行。
3.1.2操作上可行性
酒店管理系统含有友好用户界面,使用方便,易于维护,操作简单易于被用户接收,用户只需有一定计算机操作基础,并对此系统使用做简单了解,即可方便使用此系统,而且使用此系统能够大大降低管理人员负担。所以从使用操作方面看,此系统开发是可行。
3.1.3经济上可行性
本酒店管理系统运行硬件环境只需一台廉价电脑既可,软件环境则是安装windows XP系统,MyEclipse6.0,Mysql既可。对于通常中小型酒店来说全部是很小成本支出。所以此系统在经济上、技术上、操作上开发全部是可行。
3.2系统功效分析
满足用户需求,实现酒店管理步骤。此管理系统关键功效包含添加新管理员、修改密码、用户预订和入住、用户住宿管理、用户餐饮管理、用户结账等等。
添加新管理员:此功效能够添加新管理员。
用户入住开单:完成用户入住开单,实现用户入住酒店。
用户住宿管理:能够实现管理人员对客人住宿情况管理。
用户餐饮管理:能够实现管理人员对客人餐饮情况管理。
用户结账:实现用户离宿后结账。
四、总体设计
4.1设计思想
本系统实现了来宾入住酒店从登记到离宿管理,本系统关键功效以下:
用户入住开单:完成用户预定或现场入住开单,实现客人入住酒店。其中需要录入客人身份证信息、入住时间、房间选择情况等等。
用户住宿管理:能够实现管理人员对客人住宿情况管理。用户餐饮管理:能够实现管理人员对客人餐饮情况管理。关键表现在入住客人就餐消费管理和非入住客人就餐消费管理等等。
用户结账:实现用户离宿结账,包含住宿消费和就餐消费。
4.2系统功效模块
图4-1。
客房预订
即时开房
信息查询
信息修改
信息删除
就餐消费
信息查询
信息修改
信息删除
住宿结账
就餐结账
主界面
住宿管理系统
餐饮管理系统
结账信息具体
登陆界面
图4-1 系统功效模块图
4.3系统步骤分析
本系统关键步骤以下图4-2。
Y
N
开始
登陆界面
输入账号密码验证码
登录信息正确
选择消费
住宿消费
就餐消费
相关消费
相关消费
退出系统
结束
图4-2 系统步骤图
系统E-R图图4-3。
1
N
N
1
N
用户名
密码
操作员
管理
客房
房间号
入住日期
单价
住房信息编号
入住
来宾
用户ID
姓名
就餐
餐厅
餐桌号
就餐信息编号
服务者
费用
1
图4-3 系统E-R图
4.4功效需求和程序模块对应关系
如表4-4。
表4-4 功效需求和程序模块对应关系
住房信息添加
住房信息查询
住房信息修改
餐饮信息添加
餐饮信息查询
餐饮信息修改
住房结账
餐饮结账
用户入住
Y
住房管理
Y
Y
餐饮管理
Y
Y
Y
结账
Y
Y
4.5数据库结构设计
4.5.1系统数据库性能需求
整个系统应该操作简便,界面友好,维护简便。数据库要求运行稳定,实施速度快,数据安全性高。软件系统本身运行对计算机硬件平台和操作系统平台要求适中。
数据库技术是信息资源管理最有效手段。数据库设计是指对于一个指定应用环境,结构最优数据库模式,建立数据库及其应用系统,有效存放数据,满足用户信息要求和处理要求。数据库结构设计好坏将直接对应用系统效率及实现效果产生影响。合理数据库设计能够提升数据存放效率,确保数据完整和一致。本系统采取Mysql 数据库,灵活方便。
4.5.2本系统数据库表设计中所遵守基础标准
系统时间:由数据库产生系统时间首选数据库日期型,如DATE类型。
外部时间:由数据导入或外部应用程序产生日期时间类型采取varchar类型,数据格式采取YYYYMMDDHH24MISS。
大字段:如无尤其需要,尽可能避免使用大字段(blob,clob,long,text,image等)
4.5.3数据库需求分析
针对此适适用于中小型酒店酒店管理系统需求,设计以下数据项和数据结构:
住房信息输入包含:房间号、客房编号、住房费用、住宿时间、开始日期等。
用户信息输入包含:用户ID、用户姓名等。
用户登录信息输入包含:用户名、用户密码、验证码等。
餐厅信息输入包含:餐桌号、服务人员、就餐编号、就餐日期、就餐费用、客人房间号等。
4.5.4数据字典设计及数据库表命名规则
本系统数据库共包含5张数据库表,各个数据库表字段命名遵守见名知意规则。下面为关键3个表结构:
1.住房信息表4-5。
表4-5 住房信息表
字段名
类型
可否为空
键值
备注
stayID
int(10)
否
PK
客房编号
roomID
varchar(45)
是
房间号码
customerID
number(33)
否
用户ID
customerName
varchar(180)
否
用户姓名
stayTime
varchar(45)
否
住宿时间
fee
int(10)
否
房间单价
startDate
datetime
是
开始日期
2.用户登录表4-6。
表4-6 用户登录表
字段名
类型
可否为空
键值
备注
userID
int(10)
否
PK
用户ID
userName
varchar(180)
否
用户名
passWord
number(90)
否
用户密码
userPosition
varchar(150)
是
验证码
3.用户餐饮信息表4-7。
表4-7 用户餐饮信息表
字段名
类型
可否为空
键值
备注
eatingID
int(10)
否
PK
用餐编号
tableNumber
varchar(45)
否
餐桌号
fee
int(10)
否
用餐费用
eatingDate
datetime
否
用餐日期
roomID
int(10)
否
FK
房间号码
server
varchar(180)
是
服务人员
4.空餐桌信息表4-8。
表4-8 空餐桌信息表
字段名
类型
可否为空
键值
备注
tableNumber
varcher(15)
否
PK
餐桌号
tableDescribe
varcher(30)
否
餐桌信息
5.空房间信息4-9。
表4-9 空房间信息表
字段名
类型
可否为空
键值
备注
roomID
varcher(20)
否
PK
房间号码
fee
Int(11)
否
房间单价
roomDescribe
varcher(30)
否
房间信息
五、具体设计
5.1系统登陆界面
用户在登陆本酒店管理系统时候,只需要输入正确用户名、密码和验证码,验证码每次登陆全部会随机刷新出来,假如输入信息有误,系统会提醒错误之处,重新登陆即可。图5-1。
图5-1 登陆界面
5.2添加住房信息功效
添加住房信息功效能够实现用户入住登记,其中包含客人姓名、身份证号、入住日期、选择房间情况等等,便于管理员进行管理和查询。图5-2。
图5-2 添加住房信息界面
实现此功效代码以下:
private void doAddAssetsInfoAction(HttpServletRequest request,
HttpServletResponse response,
StayInfoActionform oneStayInfoActionform) throws ServletException, IOException{
StayInfoPO oneStayInfoPO=new StayInfoPO();
stayInfoActionFormSaveToStayInfoPO(oneStayInfoActionform,oneStayInfoPO);
oneStayInfoPO.setStayID(SystemUtil.getRandomIntegerNumber(10, 6));
boolean returnResult;
StayInfoCRUDImple oneStayInfoCRUDImple=new StayInfoCRUDImple();
try {
returnResult=oneStayInfoCRUDImple.insertOneStayInfo(oneStayInfoPO);
} catch (WebException e) {
forwardToShowErrorInfoTargetPage(request,response,e.getMessage());
return;
}
if(returnResult){
forwardToSuccessTargetPage(request,response,"/main.html");
}
else {forwardToShowErrorInfoTargetPage(request,response,"在添加住房信息时,系统出现了错误,请重新添加该住房信息!");}
return;
}
5.3住房信息查询功效
住房信息查询功效便于管理员和用户查询,能够按住房编号查询,也能够根据入住日期查询,还能够直接查看全部住宿信息,正确快捷。图5-3。
图5-3 住房信息查询界面
5.4添加就餐信息功效
就餐信息添加功效,能够实现管理员对客人就餐消费管理,图5-4。
图5-4 添加就餐信息界面
实现此功效代码以下:
private void doQueryAssetsInfoAction(HttpServletRequest request,
HttpServletResponse response,
EatingInfoActionform oneEatingInfoActionform) throws ServletException, IOException{
EatingInfoPO oneEatingInfoPO=new EatingInfoPO();
eatingInfoActionFormSaveToEatingInfoPO(oneEatingInfoActionform,oneEatingInfoPO);
oneEatingInfoPO.setEatingID(SystemUtil.getRandomIntegerNumber(10, 6));
boolean returnResult;
EatingInfoCRUDImple oneEatingInfoCRUDImple=new EatingInfoCRUDImple();
try {
returnResult=oneEatingInfoCRUDImple.insertOneEatingInfo(oneEatingInfoPO);
} catch (WebException e) {
forwardToShowErrorInfoTargetPage(request,response,e.getMessage());
return;
}
if(returnResult){
forwardToSuccessTargetPage(request,response,"/main.html");
}
else {forwardToShowErrorInfoTargetPage(request,response,"在添加就餐信息时,系统出现了错误,请重新添加就餐信息!");}
return;}
5.5就餐信息查询功效
就餐信息查询功效便于管理员和客人对就餐消费信息查询,图5-5。
图5-5 就餐信息查询界面
5.6结账功效
当来宾离店结账时候能够分开进行就餐结账和住房结账,也能够两种账单和在一起清算,图5-6。
图5-6 结账界面
六、结论
本系统综合了中小型星级酒店特点,从界面设计到系统使用全部是从方便用户使用角度出发,含有很强实用性
关键功效包含用户预订、入住开单、用户住宿管理、用户餐饮管理、用户结账等等。系统特色归纳以下:
本系统能够运行在多个操作系统平台上(Windows NT/Windows /Windows XP)。数据库管理系统采取Mysql数据库。而且利用安全可靠Java来编写,使得系统含有很强移植性和易于维护等特点。
立即全方面地处理多种错误异常,尤其是对用户提交信息进行判定,若出现输入错误或信息为空现象,系统就会立即给用户犯错提醒。避免了用户误操作和输入非法数据可能性。
用户界面比较友好,操作简单,使用方便。符合酒店管理基础步骤。
本系统基础上满足了酒店管理方面需要。满足了酒店管理人员对客房管理工作。在界面上努力争取做到美观、在操作方面尽可能避免因为用户操作不妥带来系统犯错现象。但因为时间仓促,本系统还存在部分不足之处,关键表现在:需要深入修饰和美化;部分模块功效实现有些简单,和实际情况有一定出入,在以后学习和工作时间里,我会深入加强其功效。
附录(部分源代码)
验证码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
CreateVerifyCodeImageBean oneCreateVerifyCodeImageBean=new CreateVerifyCodeImageBean();
java.awt.imag12y67lc,e.BufferedImage image=oneCreateVerifyCodeImageBean.createSomeOneVerifyImage();
HttpSession session=request.getSession();
String verifyCodeInSession=oneCreateVerifyCodeImageBean.getVerifyCodeString();
session.setAttribute("verifyCodeNameInSession",verifyCodeInSession); // 将认证码存入SESSION对象中
response.setContentType("image/jpeg"); //该已经必需要有
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
javax.imageio.ImageIO.write(image, "JPEG", response.getOutputStream()); // 输出图像
}
登陆界面:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
String verifyCode=request.getParameter("verifyCode");
String userName=request.getParameter("userName");
String passWord=request.getParameter("passWord");
UserInfoRUImple oneUserInfoRUImple=new UserInfoRUImple();
UserInfoPO oneUserInfoPO=new UserInfoPO();
HttpSession session=request.getSession();
String verifyCodeInSession=(String)session.getAttribute("verifyCodeNameInSession");
if(verifyCode.equals(verifyCodeInSession)){
try {
oneUserInfoPO=
oneUserInfoRUImple.selectUserInfo(userName, passWord);
} catch (WebException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(oneUserInfoPO==null){
request.setAttribute("errorText","用户名和密码输入错误!");
RequestDispatcher oneRequestDispatcher=request.getRequestDispatcher(this.getServletContext().getInitParameter("forwardShowErrorInfoTargetPage"));
oneRequestDispatcher.forward(request, response);
return;
}
else {
RequestDispatcher oneRequestDispatcher=request.getRequestDispatcher("/index.html");
oneRequestDispatcher.forward(request, response);
}
}
else {
request.setAttribute("errorText","验证码输入错误!");
RequestDispatcher oneRequestDispatcher=request.getRequestDispatcher(this.getServletContext().getInitParameter("forwardShowErrorInfoTargetPage"));
oneRequestDispatcher.forward(request, response);
return;
}
}
住房信息查询:
private void doQueryAssetsInfoAction (HttpServletRequest request,
HttpServletResponse response,
StayInfoActionform oneStayInfoActionform) throws ServletException, IOException{
String sqlQueryWhereString=null;
PageStatePO onePageStatePO=null;
onePageStatePO=new PageStatePO();
onePageStatePO.setCurrentPageNumber(1); //因为是第一次访问,所以取得第一页数据
onePageStatePO.setOnePageSize(AllConstantItems.OnePageSize);
switch(oneStayInfoActionform.getQueryMethodRadioButtonID()){
case AllConstantItems.ProductionInfoManage_QueryAllData:
sqlQueryWhereString="";
break;
case AllConstantItems.ProductionInfoManage_QueryDataByProductionID:
if(oneStayInfoActionform.getStayID()!=0){
sqlQueryWhereString="where stayID="+oneStayInfoActionform.getStayID();
}
break;
case AllConstantItems.ProductionInfoManage_QueryDataBySomeProductionInfo:
sqlQueryWhereString="where startDate like '%"+oneStayInfoActionform.getStartDate()+"%'";
break;
}
StayInfoCRUDImple oneStayInfoCRUDImple=new StayInfoCRUDImple();
List<StayInfoPO> someStayInfo=null;
try {
someStayInfo=oneStayInfoCRUDImple.selectSomeStayInfo(sqlQueryWhereString,onePageStatePO);
} catch (WebException e) {
forwardToShowErrorInfoTargetPage(request,response,e.getMessage());
}
/*
* 将查询结果保留到requestScope作用域中,实现在页面中显示输出数据
*/
request.setAttribute("allStayInfoPOList", someStayInfo);
/*
* 将分页状态对象保留到requestScope作用域中,在页面中显示分页状态相关各个数据
*/
request.setAttribute("onePageStatePO", onePageStatePO);
/*
* 将上次查询条件保留到requestScope作用域中,有利于分页跳转继续保持相同查询条件
*/
request.setAttribute("sqlQueryWhereString", sqlQueryWhereString);
forwardToSuccessTargetPage(request,response,this.getInitParameter("ToShowQueryResultTargetPage"));
}
结账界面:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
String payType=request.getParameter("payType");
String eatingIDString=request.getParameter("eatingID");
String stayIDString=request.getParameter("stayID");
int eatingID=0;
int stayID=0;
if((eatingIDString!=null)&&(eatingIDString.length()>0)){
eatingID=Integer.parseInt(eatingIDString);
}
if((stayIDString!=null)&&(stayIDString.length()>0)){
stayID=Integer.parseInt(stayIDString);
}
if(payType.equals("1")){
EatingInfoPO oneEatingInfoPO=new EatingInfoPO();
EatingInfoCRUDImple oneEatingInfoCRUDImple=new EatingInfoCRUDImple();
try {
oneEatingInfoPO=oneEatingInfoCRUDImple.selectOneEatingInfo(eatingID);
} catch (WebException e) {
forwardToShowErrorInfoTargetPage(request,response,e.getMessage());
return;
}
request.setAttribute("oneEatingInfoPO", oneEatingInfoPO);
request.setAttribute("onepayType", 1);
forwardToSuccessTargetPage(request,response,"/payManage/payInfo.jsp");
}
else{
StayInfoPO oneStayInfoPO=new StayInfoPO();
List<EatingInfoPO> someEatingInfoPO=new ArrayList<EatingInfoPO>();
StayInfoCRUDImple oneStayInfoCRUDImple=new StayInfoCRUDImple();
EatingInfoCRUDImple oneEatingInfoCRUDImple=new EatingInfoCRUDImple();
try {
oneStayInfoPO=oneStayInfoCRUDImple.selectOneStayInfo(stayID);
} catch (WebException e) {
forwardToShowErrorInfoTargetPage(request,response,e.getMessage());
return;
}
request.setAttribute("oneStayInfoPO", oneStayInfoPO);
try {
someEatingInfoPO=oneEatingInfoCRUDImple.selectSomeEatingInfo(stayID);
} catch (WebException e) {
forwardToShowErrorInfoTargetPage(request,response,e.getMessage());
return;
}
request.setAttribute("onepayType", 2);
boolean isNull=someEatingInfoPO.isEmpty();
int allFee=0;
if(!isNull){
Iterator<EatingInfoPO> oneIterator=someEatingInfoPO.iterator();
while(oneIterator.hasNext()){
allFee=allFee+oneIterator.next().getFee();
}
allFee=allFee+oneStayInfoPO.getFee();
}
request.setAttribute("allFee", allFee);
request.setAttribute("oneIsNull", isNull);
request.setAttribute("someEatingInfoPOInfo", someEatingInfoPO);
forwardToSuccessTargetPage(request,response,"/payManage/payInfo.jsp");
}
}
展开阅读全文