资源描述
《Java网络编程》
课程设计报告
酒店客房管理
指导教师:***
班 级: 1303班
组 长:*
组 员: *
*
*
*
完成日期:2016年6月20号
运城学院计算机科学与技术系
目录
第一章 问题定义 3
第二章 系统需求分析 3
2.1 系统建设目标 3
2.2 可行性分析 4
2.2.1 技术可行性 4
2.2.2 经济可行性 4
2.2.3 运行可行性 4
2.2.4 法律可行性 5
2.3 系统需求分析 5
第三章 系统总体设计 5
3.1 系统总体结构设计 5
3.2 使用结构化方法进行系统分析 6
3.2.1系统功能建模 6
3.2.2 学生宿舍管理系统的E-R图 7
3.3 数据库设计 8
第四章 系统的详细设计及其实现 10
4.1 注册页面 10
4.2 用户登录 11
4.3 入住登记 12
4.4 离店结账并生成结账报表 14
4.5 房间增加 16
4.6 房间删除 17
4.7 房间查询 17
4.8 房间更新 18
4.9 客户查询 19
第五章 系统测试 20
5.1 测试综述 20
5.2 测试方法 20
5.3 测试步骤 20
5.4 测试过程 20
5.5 测试结论 21
第六章 课程设计体会 21
第一章 问题定义
随着人类社会进入信息时代,计算机越来越多地活跃在社会各个领域,成为不可缺少的工具,尤其在管理方面,管理软件的出现使大量繁琐复杂的问题变得简单易行。在人民生活水平提高的同时,餐饮,住宿,娱乐业在服务行业中占有越来越重要的地位。要使在当前酒店行业日趋激烈的竞争中脱颖而出,必须努力发展自己在管理方面的特色,避免传统管理方法的失误,使酒店的信誉以及各个管理方面都能够出现零失误,给管理者和普通的营业员带来操作上的方便,对整个酒店各个方面的业务带来快捷,方便,高效的服务,才是管理软件的成功之处。
现今酒店宾馆的规模不断扩大,客户数量急剧增加,有关客户的各种信息也成倍增长,尤其是大量的客房预订信息。面对庞大的信息量,需要有客户信息管理系统来提高客户管理工作的效率。通过这样的系统,可以做到信息的规范管理,科学统计和快速查询,从而减少管理方面的工作量。当前许多酒店正在逐步完善客户信息管理工作,需要一个能满足内部管理需求,提高管理效率的应用系统进行内部管理。许多酒店经过多年的发展,规模不断扩大,客流量成倍增长,积累了大量的客户信息急需进行统一管理以防信息的流失。因此,许多酒店需要一个功能全面的客户信息管理系统来进行管理,以使管理客户信息的工作在该系统的配合下更加高效和便捷。
第二章 系统需求分析
2.1 系统建设目标
在对系统初步调查的基础上就可以提出项目的开发目标,即新系统建立后所要求达到的运行指标,这是系统开发和评价的依据。
由于传统的手工客房信息管理,管理过程复杂繁琐,低执行效率,并且容易出错。为了提高工作效率,减少工作中的错误,针对酒店客房管理开发管理软件,让前台客服人员通过电脑操作进行酒店客房管理,为用户节省时间和人力,更能全面、有效地掌握酒店基本情况,及时获取最新的准确资料和信息。
本酒店客房管理系统主要以提高酒店客房服务的速度、精度,改善顾客服务的亲善程度,减少工作差错为目标,减少各项资金支出,提高管理质量,从而能为酒店经营上档次创造条件。
2.2 可行性分析
可行性分析是任何一个大型工程正式投入力量之前必须进行的一项工作。这对于保证资源的合理利用、避免浪费是一个十分重要的,也是项目一旦开始以后能顺利进行的必要保证。当系统的开发目标确定后,就可以从以下三方面对能否实现新系统目标进行可行性分析:
2.2.1 技术可行性
技术可行性是指:根据现有的技术条件,能否达到所提出的要求;所需要的物理资源是否具备,能否得到。
硬件:计算机的存储量大,运算速度快,成本较低,外部设备的功能好、效率高、可靠性高,通信设备的能力、质量都满足要求。
系统软件:本系统主要采用B/S结构,其中B/S部分采用JSP技术来实现,由前台用户使用、后台系统管理部分两大部分组成,不需安装客户端,被授权用户通过浏览器即可登录系统。
服务器以Win7为操作系统,Mysql为数据库,主体程序Eclipse实现。
客户端以Win7为平台,用浏览器进行系统登陆和页面浏览。
在B/S三层体系结构系统中,用户通过客户端浏览器向网络上的服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。B/S结构简化了客户机的工作,客户机上无需配置客户端软件。服务器将担负更多的工作,对数据库的访问和应用程序的执行将在服务器上完成。浏览器发出请求,而其余如数据请求、加工、结果返回以及动态网页生成等工作全部由Web Server完成。实际上B/S体系结构是把二层C/S结构的事务处理逻辑模块从客户机的任务中分离出来,由Web服务器单独组成一层来负担其任务,这样客户机的压力减轻了,把负荷分配给了Web[
]服务器。
2.2.2 经济可行性
经济可行性分析要估计项目的成本和效益,分析项目经济上是否合理,并将费用与效益进行比较,看是否有利。
该酒店客房管理系统开发经费对于一个企业来来说是可以接受的,并且本系统实施后可以显著提高工作效率,有助于企业的信息化管理,所以为该企业开发酒店管理系统在经济上是可行的。
2.2.3 运行可行性
运行可行性是指所建立的信息系统能否在该企业实现,在当前的操作环境下能否很好的进行,即组织内外是否具备接受和使用新系统的条件。该酒店管理系统是一个简单的信息管理系统,所耗费的资源非常少,并且将来的操作界面是直接浏览网页的形式,利用鼠标进行傻瓜式的操作,操作中的每一步都会有相应的提示,这样可以让更多的人群在最短的时间内学会使用他。
2.2.4 法律可行性
整个系统由于是自行开发,自行使用,在开发过程中没有涉及合同、责任等与法律抵触的方面。因此,本系统在法律上是可行的。
按上述四方面进行可行性分析、研究后,我们认为该项目是可行的。
2.3 系统需求分析
该酒店预订管理系统使用户能迅速而便捷的了解和查询酒店信息,根据自己的需求来预订房间。一个方便地实现对客房变更、房价及预订信息的自动化操作。 使用该系统全面管理酒店信息,为用户节省时间和人力,更能全面、有效地掌握酒店基本情况,及时获取最新的准确资料和信息。该软件能系统管理酒店的信息,功能与实现方面有相当的针对性和实用性。该系统的主要功能有酒店信息管理,房间类型管理,订单信息管理,业务人员编辑和系统用户管理。
酒店客房管理系统需要具有以下的功能:
1)系统管理功能:普通接待人员的注册
2)客户管理功能:提供住宿客户信息的登记以及浏览。
3)住房管理功能:可以进行客户入住、房间更换、退房的管理。
4)查询管理功能:提供对所有用户和房间信息的查询。如:房间状态查询、客户住房信息查询、客户退房查询、管理员信息查询等。
5)房间管理功能:提供房间的信息管理,例如:房间状态,不同类型房价的剩余量的记录。
6)其他特殊功能:不同权限的用户登录实现不同的功能、各类信息的统计。
第三章 系统总体设计
系统总体设计是对有关系统全局问题的设计,也就是设计系统总的处理方案,又称系统概要设计。它主要包括系统模块结构设计、数据库设计等内容。
3.1 系统总体结构设计
本系统设计采用了自顶向下方式进行设计的。首先设计总体结构[4],然后再逐层深入,直至进行每一个模块的设计。总体设计主要是指在系统分析的基础上,针对企业电子商务的目标,刻画系统的内部结构及其相互关系,明确目标系统的各个组成部分、各个组成部分的作用及其相互关系,系统的流程如图所示:
系统功能模块图
3.2 使用结构化方法进行系统分析
3.2.1系统功能建模
对用户需求进行分析,画出系统的数据流图,如图所示。
图3.1 酒店客房管理系统的顶层数据流图
图3.2 酒店客房管理系统的二层数据流图
3.2.2 学生宿舍管理系统的E-R图
根据系统数据流程图,我们可以列出以下系统所需的数据项:
客户:姓名、性别、年龄、证件号码、押金、房间号、房间状态
用户:账户名、账户密码、姓名、性别、年龄、联系电话
房间:房间号、房间类型、房间单价、电话、房间状态
款项:已收押金、消费金额、结余金额
同时系统还需要进行记录的数据项:
入住及退房记录:客户姓名、入住时间、退出时间、
管理员查询记录:日期、当天收入金额、支出金额、全部押金
管理员更新记录:房价更改、客户登记、结算金额
用户ER图
房间ER图
客户ER图
结算ER图
总体ER图
3.3 数据库设计
根据E-R模型和数据库需求分析,本系统总共涉及10个数据表格。其中包括用户表、房间表、客户表表、结算表4个基本表,同时还需要不用的用户登录实现不同的功能,因此还需要角色表、角色类型表,同时还引入了房间状态表,实现简单的操作。本系统的数据表设计如图所示。
Account表
Function表
Living表
Role表
Role_function表
Room表
Rooms表
Roomstate表
User表
User_role表
第四章 系统的详细设计及其实现
本章所讲的主要内容是该系统的实现方法和原理。下面来详细介绍系统的实现
4.1 注册页面
//注册新用户
protected void doZhuCe(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
User user = new User();
ResultMsg rmsg=null;
try {
BeanUtils.copyProperties(user, req.getParameterMap());
SqlSession sqlsession= MybatisUtil.getSqlSession();
sqlsession.insert("User.insert1",user);
mit();
sqlsession.close();
rmsg=new ResultMsg(true,"注册成功");
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JsonUtil.outJsonStrAndColse(resp, JsonUtil.transToJsonStr(rmsg))
}
}
4.2 用户登录
//判断用户名和密码是否正确
protected void doCheckLogin(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
User user = new User();
try {
BeanUtils.copyProperties(user,req.getParameterMap());
SqlSession sqlsession = MybatisUtil.getSqlSession();
System.out.println(user.getAccount());
User uu = sqlsession.selectOne("User.select1", user);
System.out.println("name=="+uu.getAccount()+"p==="+uu.getPwd());
if(uu.getAccount().equals(user.getAccount()) && uu.getPwd().equals(user.getPwd())){
req.getSession().setAttribute("loginuser", uu);
//正确跳转到主页面
req.getRequestDispatcher("Myjsp/main.jsp").forward(req, resp);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//不正确跳转到登录页面
req.getRequestDispatcher("Myjsp/login.jsp");
}
}
4.3 入住登记
//添加一条入住信息
protected void addAccount(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
Account acc=new Account();
ResultMsg rmsg=null;
SqlSession sqlsession=MybatisUtil.getSqlSession();
System.out.println(req.getParameterMap());
try {
BeanUtils.copyProperties(acc, req.getParameterMap());
System.out.println("addddddddddddddddacc===========" + acc);
if(acc.getAccid()==0){
System.out.println(888888);
sqlsession.insert("Acc.insert1", acc);
if(acc.getStateidfk()==3){
String accs= acc.getAccount();
Account accse=new Account();
Live live=new Live();
Date date=new Date();
accse.setAccount(accs);
System.out.println("accs-----------"+accse);
Account acclive=sqlsession.selectOne("Acc.select5", acc.getAccid());
live.setCheckdate(date.toLocaleString());
live.setAccidfk(acclive.getAccid());
live.setRoomidfk(acclive.getRoomidfk());
live.setCashpledge(acc.getCashpledge());
sqlsession.insert("Acc.insert2", live);
}
}else{
System.out.println("updateacc==============" + acc);
sqlsession.update("Acc.update1",acc);
if(acc.getStateidfk()==3){
String accs= acc.getAccount();
Account accse=new Account();
Live live=new Live();
Date date=new Date();
accse.setAccount(accs);
System.out.println("accs-----------"+accse);
Account acclive=sqlsession.selectOne("Acc.select5", accse);
live.setCheckdate(date.toLocaleString());
live.setAccidfk(acclive.getAccid());
live.setRoomidfk(acclive.getRoomidfk());
live.setCashpledge(300);
sqlsession.insert("Acc.insert2", live);
}
}
Room ro=new Room();
int roomid=acc.getRoomidfk();
int statidfk=acc.getStateidfk();
ro.setRoomid(roomid);
ro.setStateidfk(statidfk);
sqlsession.update("Acc.update2", ro);
mit();
sqlsession.close();
rmsg=new ResultMsg(true,"操作成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
rmsg=new ResultMsg(true,"操作失败");
}
JsonUtil.outJsonStrAndColse(resp, JsonUtil.transToJsonStr(rmsg));
}
}
4.4 离店结账并生成结账报表
//结账信息
protected void Delete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
int livid=Integer.parseInt(req.getParameter("livid"));
int bill=Integer.parseInt(req.getParameter("bill"));
System.out.println("livid===="+livid);
System.out.println("bill==" + bill);
SqlSession sqlsession=MybatisUtil.getSqlSession();
ResultMsg rmsg=null;
Live live = new Live();
live.setLivid(livid);
live.setBill(bill);
try{
Live lives=sqlsession.selectOne("Live.select4",livid);
/*sqlsession.delete("Live.delete1",livid);
System.out.println("accid======="+accid);
sqlsession.delete("Live.delete2",accid);*/
sqlsession.update("Acc.update3", lives.getAccidfk());
sqlsession.update("Room.update_room_state", lives);
sqlsession.update("Live.update1", live);
Live live2 = sqlsession.selectOne("Live.select6", livid);
mit();
sqlsession.close();
StringBuffer sb = new StringBuffer();
sb.append("<div class = 'billlist'><h3 style = 'text-align: center;'>账单</h3>姓名:"+live2.getAccount().getAccount());
sb.append("</br>");
sb.append("房间号:"+live2.getRoomnumber().getRoomnumber());
sb.append("</br>");
sb.append("押金:"+live2.getCashpledge());
sb.append("</br>");
sb.append("消费:"+live2.getBill());
sb.append("</br>");
sb.append("结余:"+(live2.getCashpledge() - live2.getBill()));
sb.append("</br>");
sb.append("时间:"+live2.getCheckdate());
sb.append("</br>");sb.append("</br>");
sb.append("欢迎下次光临!");
rmsg=new ResultMsg(true,sb.toString());
}catch(Exception e){
e.printStackTrace();
rmsg=new ResultMsg(true,"结算失败");
}
JsonUtil.outJsonStrAndColse(resp, JsonUtil.transToJsonStr(rmsg));
}
}
4.5 房间增加
//添加房型
protected void addType(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
RoomType types=new RoomType();
ResultMsg rmsg=null;
SqlSession sqlsession=MybatisUtil.getSqlSession();
try {
BeanUtils.copyProperties(types, req.getParameterMap());
System.out.println(types.getRoomsid());
if(types.getRoomsid()==0){
System.out.println(888888);
sqlsession.insert("RoomType.insert1", types);
}else{
System.out.println(000000);
sqlsession.update("RoomType.update1",types);
}
mit();
sqlsession.close();
rmsg=new ResultMsg(true,"操作成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
rmsg=new ResultMsg(true,"操作失败");
}
JsonUtil.outJsonStrAndColse(resp, JsonUtil.transToJsonStr(rmsg));
}
}
4.6 房间删除
//移除一种房间类型
protected void toremove(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
ResultMsg rmsg=null;
try{
String roomsids=req.getParameter("roomsid");
int roomsid=Integer.parseInt(roomsids);
SqlSession sqlsession=MybatisUtil.getSqlSession();
sqlsession.delete("RoomType.delete1",roomsid);
mit();
sqlsession.close();
rmsg=new ResultMsg(true,"删除成功");
}catch(Exception e){
e.printStackTrace();
rmsg=new ResultMsg(true,"删除失败");
}
JsonUtil.outJsonStrAndColse(resp, JsonUtil.transToJsonStr(rmsg));
}
4.7 房间查询
//查询所有房间类型
protected void doList(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
SqlSession sqlsession=MybatisUtil.getSqlSession();
List<RoomType> typelist =sqlsession.selectList("RoomType.select1");
String jsonStr = JsonUtil.transToJsonStr(typelist);
System.out.println(typelist.get(0).getRoomtype());
JsonUtil.outJsonStrAndColse(resp,jsonStr);
}
protected void toUpdate(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String roomsids=req.getParameter("roomsid");
int roomsid=Integer.parseInt(roomsids);
SqlSession sqlsession=MybatisUtil.getSqlSession();
RoomType type =sqlsession.selectOne("RoomType.select2",roomsid);
req.setAttribute("type", type);
req.getRequestDispatcher("Myjsp/room/rotypeedit.jsp").forward(req, resp);
}
4.8 房间更新
//更新房间信息
protected void toUpdate(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String roomsids=req.getParameter("roomsid");
int roomsid=Integer.parseInt(roomsids);
SqlSession sqlsession=MybatisUtil.getSqlSession();
RoomType type =sqlsession.selectOne("RoomType.select2",roomsid);
req.setAttribute("type", type);
req.getRequestDispatcher("Myjsp/room/rotypeedit.jsp").forward(req, resp);
}
4.9 客户查询
//查询所有现入住客户
protected void AccList(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
SqlSession sqlsession=MybatisUtil.getSqlSession();
List<Account> Acclist =sqlsession.selectList("Acc.select1");
JsonUtil.outJsonStrAndColse(resp,JsonUtil.transToJsonStr(Acclist));
}
protected void toUpdate(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int accid=Integer.parseInt(req.getParameter("accid"));
SqlSession sqlsession=MybatisUtil.getSqlSession();
Account acc =sqlsession.selectOne("Acc.select2",accid);
req.setAttribute("acc",acc);
req.getRequestDispatcher("Myjsp/room/accountedit.jsp").forward(req, resp);
}
第五章 系统测试
5.1 测试综述
系统测试其实就是对系统实现的一个校正。也许某个用户用到的某个模块运行正常,也许该用户用其它的模块就出现了相应的问题,一个好的程序测试并不代表没有错误,但是也并不代表一个程序它总是存在某种弊端。暂时把系统测试划分为几个阶段:第一阶段---数据录入,一个程序只有在满足用户正常录入数据时,这才是一个程序的开始;第二阶段---查找错误,查找认为不合理的操作,或者是错误页面,这是程序发展的必经之路;第三阶段---更改错误,根据已有的平台,用最简单的方法,进行程序和数据的调正。总之,这三个步骤来回循环,使程序尽量完善。
5.2 测试方法
考虑到各种因素和条件的限制,对《基于JSP的酒店客房管理系统课程》 网站进行测试,需要不要的输入正确信息和错误信息[
],根据反馈结果来检测系统可能存在的问题。检查程序功能是否能够按照需求正确使用,程序是否能适当地接收输入数据并发生正确的输出信息,而且要能够保持外部信息的完整性。
5.3 测试步骤
在系统开发过程中,首先进行单个模块的功能测试,确保每个模块准确无误,然后进行功能模块间的整体测试[
],确保整个系统可以正常运转,最后确保软件功能满足了用户的需求。
5.4 测试过程
根据前面的需求分析的功能描述,本系统主要模块有前台会员登录模块以及后台管理模块,系统的测试主要围绕着这两个模块展开。
测试1:用户登录测试
测试系统的登录界面是否能正常运行,对合法的用户能否正确登录,对非法的用户能否给出正确的提示;以及不同用户登录系统后,是否能进入其指定的功能界面内。
测试2:接待人员管理测试
1.登陆到接待人员界面后,接待人员可以进行客户登记,点击“旅客入住”,输入客户信息可是实现客户的入住登记。
2.接待人员对入住客户的查询,点击“现入住信息”,得到当前客户入住的信息。
3.接待人员可以对房间的信息进行查询,点击“房间管理”,输入相关的关键字。可以对当前房间信息进行查询。
4.客户需要离店时,点击“结算”,可以对当前选定的客户进行结算,同时生成结账报表。
测试3:经理管理测试
1.经理登陆以后,可以对房间信息进行管理,点击进入到房间管理,可以对房间进行增加、删除,
展开阅读全文