版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
酒店预订管理系统的设计与实现摘要:当今社会,酒店产业高度发展。随着人们对酒店需求的提高,酒店发展也趋于多元化、复杂化,酒店管理也就成了酒店发展的一大问题。本文介绍了由jsp+ssm框架实现的酒店预订管理系统,该系统涵盖了用户酒店预订,管理员登陆,酒店楼层、房型管理,房间管理,订单管理,入住办理营业额统计等一系列酒店日常管理所需要的功能。关键词:酒店预订管理系统,JAVA,SSM框架DESIGNANDIMPLEMENTATIONOFHOTELRESERVATIONMANAGEMENTSYSTEMABSTRACT:Intoday'ssociety,thehotelindustryishighlydeveloped.Aspeople'sdemandforhotelshasincreased,hoteldevelopmenthasbecomemorediversifiedandcomplicated,andhotelmanagementhasbecomeamajorissueinhoteldevelopment.Thispaperintroducesthehotelreservationmanagementsystemimplementedbyjsp+ssmframework,whichcoversaseriesofhoteldaily,suchasuserhotelreservation,administratorlogin,hotelfloor,roomtypemanagement,roommanagement,ordermanagement,check-in,turnoverstatistics,etc.Managethefeaturesyouneed.Keywords:hotelreservationmanagementsystem,JAVASSM,framework目录摘要 IIABSTRACT III目录 IV第一章绪论 11.1课题背景、目的及意义 11.1.1课题背景 11.1.2课题目的和意义 1第二章相关技术介绍 52.1Javascript 52.2JQuery 52.3MySQL 52.4SSM框架 62.5JSP 62.6B/S模式 72.7EasyUI 72.8系统开发平台及运行环境 82.8.1系统开发平台 82.8.2运行环境 9第三章系统分析 103.1系统需求分析 103.1.1功能需求 103.1.2性能需求 113.2系统业务流程分析 113.2.1用户业务流程分析 113.2.2管理员业务流程分析 123.3可行性分析 133.3.1经济可行性 133.3.2技术可行性 13第四章系统设计 144.1系统功能模块设计 144.2数据库设计 144.2.1数据库概念设计 154.2.2数据库逻辑设计 18第五章酒店预订管理系统实现 225.1主页 225.2用户预订 225.2.1用户注册登录 225.2.2预订房间 235.3管理员管理 245.3.1管理员登录 245.3.2系统设置 255.3.3房型管理 275.3.4房间管理 285.3.5用户管理 295.3.6预订单管理 295.3.7入住管理 305.3.8营业额统计 32第六章结论与展望 48参考文献49致谢50第一章绪论1.1课题背景、目的及意义1.1.1课题背景在中国的预订行业中,运通酒店预订网(E-hotel)的开通运营,预示着酒店网络预订在我国的正式兴起,信息系统开始融入酒店行业。在开业初期,它的规模还比较小,会员酒店仅为300多家,会员在40万左右。但是在短短的几年之内,E-hotel得到了快速的发展,现在全国至少有3000家预订公司。2006年全球酒店数据显示,全世界的酒店业绩都在提升,“欧洲的RevPAR增长11.61%,美国和亚太地区的RevPAR分别增长7.5%和20.12%”。有权威人士认为,其获取巨额收入的主要渠道来自于从顾客那里获取的不菲佣金。而对于消费者,酒店网络预订不收取任何服务佣金,可以提供个性化报价,同时还可以实现消费者与酒店讨价还价,实在是实惠诱惑不小。相关的数据表明了酒店网络预订系统是未来酒店业务发展的核心竞争能力,在中国也被越来越多的酒店所接受;一方面,对于大多数单体酒店,酒店网络预订系统帮助他们形成虚拟集团,使其拥有全球网络和品牌;另一方面,酒店与电子商务的融合,通过网络酒店预订,让客户可以直接在网上预订各种酒店服务,将会吸引更多的各地客户入住,也同样为酒店的发展带来了无限商机,多样化的选择以及订房过程中完全的透明流程可以获得客户的全面认可。具体来说,“酒店预订系统”就是需要完成网上酒店预订功能,客户可以直接通过Internet在Web页面实现酒店的预订,“足不出户”实现酒店预订;不再需要到酒店现场或者通过中介办理预订,大大节省了客户和酒店方面的预订成本,缩短了预订周期,同时也给客户提供了更大选择余地。1.1.2课题目的和意义酒店预订管理涉及很多方面,内容繁杂:有前台接待,收银结账,预定订房,销售人员管理,房态管理、会员中心,注册会员,财务报表等等。这给采用人工管理模式的酒店带来了非常大的麻烦。总之有了酒店预订管理系统方便多了,这样能更好,更方便地管理酒店。网上酒店预订管理系统相对于本地酒店管理系统优势:它能够实现远程订房,退房;更方便、更高效、更规范。这便是网上酒店预订管理系统存在的意义。近些年来,Java技术快速发展,使其能更好的支持Web开发。依靠java的优点能更好地对酒店进行管理,提高了酒店管理系统的稳定性,可扩展性,安全性和健壮性。使用Java开发网上酒店系统,相对简单、易实现;开发周期相对较短。第二章相关技术2.1JavascriptJavascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言2.2JQueryjQuery是一个兼容多浏览器的javascript框架,核心理念是writeless,domore(写得更少,做得更多)。2.3MySQLMySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。2.4SSM框架SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。2.5JSPJSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它
[1]
是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。2.6B/S模式B指浏览器S指服务器2.7系统开发平台及运行环境2.7.1系统开发平台(1)MyEclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(2)Tomcat服务器类似于微软的IIS。WEB服务器。支持jsp/servlet不过对html解析速度没有apache优秀。可以把两个连接起来。更主要的是开源免费的2.7.2运行环境操作系统:WindowsXP以上版本。服务器软件:Tomcat7.0以上版本。浏览器:IE、FireFox、GoogleChrome。
第三章系统分析本章主要对酒店预订管理系统做了需求分析(主要是功能分析和性能分析)、系统业务流程分析和可行性分析。3.1系统需求分析3.1.1功能需求该酒店预订管理系统是一个典型的B/S架构应用。主要实现用户预定酒店功能,管理员通过浏览器对酒店日常工作进行管理功能和系统本身一些管理配置功能。本系统完全基于JSP+SSM技术,在系统的设计与开发过程中严格遵守软件工程的规范,运用软件设计模式,从而减少系统模块间的偶合,力求做到系统的稳定性、可重用性和可扩充性。用户预定功能需求如下:(1)用户的注册功能,包括用户名、密码、联系电话、EMAIL等;(2)用户的登陆功能,验证用户名和密码;(3)用户预订功能,包括酒店房型选择,预订日期,人数等;(4)用户个人中心:在这里用户可以看到自己的预订情况。管理员管理功能需求如下:(1)管理员及员工的登录功能;(2)菜单管理功能,包括各种系统设置的编辑、选择与添加;(3)角色管理功能,包括对员工各种权限的自由分配;(4)员工管理功能,包括员工列表的查询(此员工也为管理员,只是权限不同);(5)系统日志功能,包括系统日志的查看;(6)楼层管理功能,包括对楼层信息的编辑、查询与管理;(7)房型管理功能,包括房间类型信息的编辑、查询与管理;(8)房间管理功能,包括对房间信息的编辑、查询与管理;(9)用户管理功能,包括对用户信息的查询与管理;(10)预订管理功能,包括对客户预定信息的编辑、查询与管理;(11)入住管理功能,包括对客户入住信息的编辑、查询与管理;(12)营业统计功能,包括按日与按月统计营业额。3.1.2性能需求系统的性能需求如下:(1)界面友好性要求:系统提供统一的操作界面和方式.要求操作界面简洁大方,布局合理,功能完善,对于初级用户容易上手;(2)信息的完整性:要求采用值约束、缺省等方法确保信息的完整性,一旦用户录入数据不符合系统要求时,系统必须明确给出警告信息;(3)系统运行在主流的WINDOWS操作系统平台上,便于以后系统的升级;(4)遵循主流的标准和协议,不仅可以为系统与上级平台系统交换信息提供便利,而且也有利于系统内部各部分之间交换信息,这将有助于提高系统扩充性。响应速度:要求能够响应快速;响应速度尽量在人员可忍受的时间内并给予提示。3.2系统业务流程分析在对系统的组织结构和功能进行分析时,需从一个实际业务流程的角度将系统调查中有关该业务流程的资料都串起来作进一步的分析。根据需求分析中需要完成的功能进行分析研究,得到酒店预订系统用户业务流程图3-1和管理员业务流程图3-2。3.2.1用户业务流程分析图3-1用户业务流程图根据图3-1我们可以得出用户网上预订主要流程如下:(1)用户进入酒店预定管理系统主页进行浏览;(2)用户经过系统鉴定注册完毕后登录主页;(3)用户进行查询操作,可以查询酒店列表信息和用户信息;(4)用户进行预订操作,填写相关预定信息并提交给系统;(5)系统将用户提交的预定信息生成订单保存在数据库中;(6)用户可以在个人中心中查询自己的订单情况。3.2.2管理员业务流程分析图3-2管理员业务流程图根据图3-2我们可以得出管理员业务主要流程如下:(1)管理员登录系统后台;(2)管理员进行菜单管理操作;(3)管理员进行角色管理操作;(4)管理员进行员工管理操作;(5)管理员进行楼层管理操作;(6)管理员进行房型管理操作;(7)管理员进行房间管理操作;(8)管理员进行用户管理操作;(9)管理员进行预定管理操作;(10)管理员进行入住管理操作;3.3可行性分析3.3.1经济可行性本系统基于B/S模式:在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。3.3.2技术可行性本系统基于Jsp+SSM+Tomcat+MySQL,并采用B/S模式,由于JSP、SSM功能强大,而Tomcat和MySQL灵活易维护在开发方面具有方便快捷、使用灵活的特点,以及目前的广泛实际应用,因此使用JSP、SSM、Tomcat和MySQL是开发轻平台的最佳组合从而说明本系统在技术方面可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。第四章系统设计系统设计是把用户需求转化为系统的最重要开发环节,解决了“应该怎么做系统”的问题。在本章节中,主要是在系统分析的基础上对系统进行设计和数据库设计。4.1系统功能模块设计系统大体要实现的功能一方面要完成网上酒店预订,需要设置前台预订模块,使用户可以直接通过计算机、网络在Web页面实现酒店的预约,查询等活动。另一方面,为了对系统后台进行管理,设置了后台管理模块,使系统管理员可以对网站进行日常维护,处理相关数据信息等。从上一章系统分析可以知道,本系统主要分为两个模块:用户模块和管理员模块。该系统的功能结构图如图4-1所示:图4-1系统功能模块结构图4.2数据库设计数据库的设计关系到整个应用系统的运行效率,数据库设计得好,不仅有利于日常数据的维护更新,而且可以提高系统的运行效率,缩短数据查询响应周期,增加网站的流量[9]。合理的数据库设计可以使围绕它支持的Web页面的Java代码简单化,易于实现,并且可以提高数据存储的效率,保证数据的完整一致。酒店预定管理系统采用MySQL作为后台数据库开发工具。4.2.1数据库概念设计概念模型用于信息世界的建模,与具体的DBMS无关。为了把现实世界中的具体事物抽象、组织为某一DBMS支持的数据模型。人们常常首先将现实世界抽象为信息世界,然后再将信息世界转换为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统和具体的DBMS,而是概念级的模型,然后再把模型转换为计算机上某一个DBMS支持的数据模型。实际上,概念模型是现实世界到机器世界的一个中间层次。信息世界中包含的基本概念有实体和联系。(1)实体(entity)客观存在并可相互区别的事物称为实体。(2)联系(relationship)在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体内部的联系和实体之间的联系。概念模型是对信息世界建模,所以概念模型应该能够方便、准确地表示信息世界中的常用概念。该方法用E-R图来描述现实世界的概念模型,称为实体-联系模型,简称E-R模型。根据数据流程分析,绘制酒店预定管理系统的全局E-R模型如图4-2所示。图4-2系统全局E-R图根据系统分析的主要实体有:用户、管理员、房间楼层、房间类型、房间、预订单及入住单、营业额和角色权限。各个实体具体的描述属性图如下(实体属性在下图中并没有全部给出,因为属性过多的原因):1.用户实体4-3用户实体图2.管理员实体4-4管理员实体图3.房间楼层实体4-5房间楼层实体图4.房间类型实体4-6房间类型实体图5.房间实体4-7房间实体图6.预订单实体4-8预订单实体图7.入住单实体4-9入住单实体图8.角色权限实体4-10角色权限实体图4.2.2数据库逻辑设计数据库逻辑设计主要是把数据库概念设计时设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。本系统数据库表如下:用户表(user),存储用户信息表4-1用户表字段名称数据类型主键是否空说明idYN用户IDusernamevarchar(32)NN用户名passwordvarchar(32)NN密码roleIdNN角色IDsexNN性别ageNN年龄photovarchar(128)NY用户照片addressvarchar(128)NY地址管理员表(account),存储管理员信息表4-2管理员表字段名称数据类型主键是否空说明idYN管理员IDnamevarchar(32)NN用户名passwordvarchar(32)NN密码realNamevarchar(32)NY真实姓名idCardvarchar(32)NY身份证mobilevarchar(16)NY电话号码addressvarchar(128)NY地址statusNN状态房间楼层表(floor),存储楼层信息表4-3房间楼层表字段名称数据类型主键是否空说明idYN主键,楼层IDnamevarchar(32)NN楼层名称remarkvarchar(128)NY是否为空房间类型表(root_type),存储房间类型信息表4-4房间类型表字段名称数据类型主键是否空说明idYN主键,房间类型IDnamevarchar(64)NN类型名称photovarchar(128)NY房间类型图片pricefloat(8,2)NN价格liveNumNN可入住数量bedNumNN床位数量roomNumNN房间数量avilableNumNN可用房间数量bookNumNN预定数量livedNumNN已经入住数量statusNN状态remarkvarchar(256)NY备注信息房间表(room),存储房间信息表4-5房间表字段名称数据类型主键是否空说明idYN主键,房间IDphotovarchar(128)NY房间图片snvarchar(32)NN房间序列号roomTypeIdNN房间类型IDfloorIdNN房间楼层IDstatusNN状态remarkvarchar(128)NY备注信息预订单表(book_order),存储预订单信息表4-6预定表字段名称数据类型主键是否空说明idYN主键,预订单IDaccountIdNN管理员IDroomTypeIdNN房间类型IDnamevarchar(32)NN预定单的名称idCardvarchar(32)NY身份证mobilevarchar(16)NY电话号码statusNN状态arriveDatevarchar(32)NY到达时间leaveDatevarchar(32)NN离开时间remarkvarchar(128)NY备注信息createTimeNN预定单创建时间入住单表(checkin),存储入住单信息表4-7入住表字段名称数据类型主键是否空说明idYN主键,入住单IDroomIdNN房间IDroomTypeIdNN房间类型IDcheckinPriceNN入住价格namevarchar(32)NN预定单的名称idCardvarchar(32)NY身份证mobilevarchar(16)NY电话号码statusNN状态arriveDatevarchar(32)NY到达时间leaveDatevarchar(32)NN离开时间bookOrderIdNY预定的IDremarkvarchar(128)NY备注信息createTimeNN预定单创建时间角色权限表(authority),存储角色权限信息表4-8角色权限表字段名数据类型主键是否空说明idYN主键,权限IDroleIdNN角色IDmenuIdNN菜单ID
第五章酒店预订管理系统实现本章节介绍了酒店预订管理系统的实现,包括用户预订模块和管理员管理模块的实现过程,下面通过系统运行截图的方式进行阐述。5.1主页系统主页展示客房列表信息。 图5-1主页主要代码: @RequestMapping(value="/list",method=RequestMethod.GET) publicModelAndViewlist(ModelAndViewmodel){ model.addObject("roomTypeList",roomTypeService.findAll()); model.addObject("accountList",accountService.findAll()); model.setViewName("book_order/list"); returnmodel; }5.2用户预订5.2.1用户注册登录 用户注册,填写用户名、密码和手机号。图5-2用户注册主要代码: publicModelAndViewlogin(ModelAndViewmodel ){ model.setViewName("home/index/login"); returnmodel; } publicModelAndViewreg(ModelAndViewmodel ){ model.setViewName("home/index/reg"); returnmodel; } 用户登录,填写用户名、密码和验证码。图5-3用户登录主要代码: publicMap<String,String>loginAct(Useruser,Stringcpacha,HttpServletRequestrequest){ Map<String,String>ret=newHashMap<String,String>(); if(user==null){ ret.put("type","error"); ret.put("msg","请填写用户信息!"); returnret; } if(StringUtils.isEmpty(cpacha)){ ret.put("type","error"); ret.put("msg","请填写验证码!"); returnret; } if(StringUtils.isEmpty(user.getUsername())){ ret.put("type","error"); ret.put("msg","请填写用户名!"); returnret; } if(StringUtils.isEmpty(user.getPassword())){ ret.put("type","error"); ret.put("msg","请填写密码!"); returnret; } ObjectloginCpacha=request.getSession().getAttribute("loginCpacha"); if(loginCpacha==null){ ret.put("type","error"); ret.put("msg","会话超时,请刷新页面!"); returnret; } if(!cpacha.toUpperCase().equals(loginCpacha.toString().toUpperCase())){ ret.put("type","error"); ret.put("msg","验证码错误!"); logService.add("用户名为"+user.getUsername()+"的用户登录时输入验证码错误!"); returnret; } UserfindByUsername=userService.findByUsername(user.getUsername()); if(findByUsername==null){ ret.put("type","error"); ret.put("msg","该用户名不存在!"); logService.add("登录时,用户名为"+user.getUsername()+"的用户不存在!"); returnret; } if(!user.getPassword().equals(findByUsername.getPassword())){ ret.put("type","error"); ret.put("msg","密码错误!"); logService.add("用户名为"+user.getUsername()+"的用户登录时输入密码错误!"); returnret; } //说明用户名密码及验证码都正确 //此时需要查询用户的角色权限 Rolerole=roleService.find(findByUsername.getRoleId()); List<Authority>authorityList=authorityService.findListByRoleId(role.getId());//根据角色获取权限列表 StringmenuIds=""; for(Authorityauthority:authorityList){ menuIds+=authority.getMenuId()+","; } if(!StringUtils.isEmpty(menuIds)){ menuIds=menuIds.substring(0,menuIds.length()-1); } List<Menu>userMenus=menuService.findListByIds(menuIds); //把角色信息、菜单信息放到session中 request.getSession().setAttribute("admin",findByUsername); request.getSession().setAttribute("role",role); request.getSession().setAttribute("userMenus",userMenus); ret.put("type","success"); ret.put("msg","登录成功!"); logService.add("用户名为{"+user.getUsername()+"},角色为{"+role.getName()+"}的用户登录成功!"); returnret; } 用户修改资料,填写修改相关信息。图5-4用户修改资料主要代码: publicMap<String,String>add(Accountaccount){ Map<String,String>ret=newHashMap<String,String>(); if(account==null){ ret.put("type","error"); ret.put("msg","请填写正确的客户信息!"); returnret; } if(StringUtils.isEmpty(account.getName())){ ret.put("type","error"); ret.put("msg","客户名称不能为空!"); returnret; } if(StringUtils.isEmpty(account.getPassword())){ ret.put("type","error"); ret.put("msg","客户密码不能为空!"); returnret; } if(isExist(account.getName(),0l)){ ret.put("type","error"); ret.put("msg","该用户名已经存在!"); returnret; } if(accountService.add(account)<=0){ ret.put("type","error"); ret.put("msg","添加失败,请联系管理员!"); returnret; } ret.put("type","success"); ret.put("msg","添加成功!"); returnret; } 5.2.2预订房间用户房间预订,用户选择房间、选择入住时间和填写相关入住人信息。图5-5房间预订 用户查看订单,用户可以查看自己的订单列表详细信息。图5-6查看订单主要代码: publicModelAndViewlist(ModelAndViewmodel){ model.addObject("roomTypeList",roomTypeService.findAll()); model.addObject("accountList",accountService.findAll()); model.setViewName("book_order/list"); returnmodel; } @RequestMapping(value="/add",method=RequestMethod.POST) @ResponseBody publicMap<String,String>add(BookOrderbookOrder){ Map<String,String>ret=newHashMap<String,String>(); if(bookOrder==null){ ret.put("type","error"); ret.put("msg","请填写正确的预定订单信息!"); returnret; } if(bookOrder.getAccountId()==null){ ret.put("type","error"); ret.put("msg","客户不能为空!"); returnret; } if(bookOrder.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","房型不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getName())){ ret.put("type","error"); ret.put("msg","预定订单联系人名称不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getMobile())){ ret.put("type","error"); ret.put("msg","预定订单联系人手机号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getIdCard())){ ret.put("type","error"); ret.put("msg","联系人身份证号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getArriveDate())){ ret.put("type","error"); ret.put("msg","到达时间不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getLeaveDate())){ ret.put("type","error"); ret.put("msg","离店时间不能为空!"); returnret; } bookOrder.setCreateTime(newDate()); if(bookOrderService.add(bookOrder)<=0){ ret.put("type","error"); ret.put("msg","添加失败,请联系管理员!"); returnret; }5.3管理员管理5.3.1管理员登录管理员输入用户名密码登录后台。图5-7管理员登录 登录后台后,界面如下:图5-8系统后台主页主要代码:publicModelAndViewwelcome(ModelAndViewmodel){ model.setViewName("system/welcome"); returnmodel; } publicModelAndViewlogin(ModelAndViewmodel){ model.setViewName("system/login"); returnmodel; }5.3.2系统设置 (1)菜单管理,菜单管理采用三级目录的形式,可细分到每个页面的菜单按钮。图5-9菜单管理菜单添加框如下:图5-10菜单管理操作 (2)角色管理,角色可以自由分配相应的权限。图5-11角色管理 (3)系统日志查看,可以查看系统运行的详细信息。图5-12日志查看主要代码:publicclassSystemController{ @Autowired privateUserServiceuserService; @Autowired privateRoleServiceroleService; @Autowired privateAuthorityServiceauthorityService; @Autowired privateMenuServicemenuService; @Autowired privateLogServicelogService; @RequestMapping(value="/index",method=RequestMethod.GET) publicModelAndViewindex(ModelAndViewmodel,HttpServletRequestrequest){ List<Menu>userMenus=(List<Menu>)request.getSession().getAttribute("userMenus"); model.addObject("topMenuList",MenuUtil.getAllTopMenu(userMenus)); model.addObject("secondMenuList",MenuUtil.getAllSecondMenu(userMenus)); model.setViewName("system/index"); returnmodel;//WEB-INF/views/+system/index+.jsp=WEB-INF/views/system/index.jsp } @RequestMapping(value="/welcome",method=RequestMethod.GET) publicModelAndViewwelcome(ModelAndViewmodel){ model.setViewName("system/welcome"); returnmodel; } @RequestMapping(value="/login",method=RequestMethod.GET) publicModelAndViewlogin(ModelAndViewmodel){ model.setViewName("system/login"); returnmodel; } @RequestMapping(value="/login",method=RequestMethod.POST) @ResponseBody publicMap<String,String>loginAct(Useruser,Stringcpacha,HttpServletRequestrequest){ Map<String,String>ret=newHashMap<String,String>(); if(user==null){ ret.put("type","error"); ret.put("msg","请填写用户信息!"); returnret; } if(StringUtils.isEmpty(cpacha)){ ret.put("type","error"); ret.put("msg","请填写验证码!"); returnret; } if(StringUtils.isEmpty(user.getUsername())){ ret.put("type","error"); ret.put("msg","请填写用户名!"); returnret; } if(StringUtils.isEmpty(user.getPassword())){ ret.put("type","error"); ret.put("msg","请填写密码!"); returnret; } ObjectloginCpacha=request.getSession().getAttribute("loginCpacha"); if(loginCpacha==null){ ret.put("type","error"); ret.put("msg","会话超时,请刷新页面!"); returnret; } if(!cpacha.toUpperCase().equals(loginCpacha.toString().toUpperCase())){ ret.put("type","error"); ret.put("msg","验证码错误!"); logService.add("用户名为"+user.getUsername()+"的用户登录时输入验证码错误!"); returnret; } UserfindByUsername=userService.findByUsername(user.getUsername()); if(findByUsername==null){ ret.put("type","error"); ret.put("msg","该用户名不存在!"); logService.add("登录时,用户名为"+user.getUsername()+"的用户不存在!"); returnret; } if(!user.getPassword().equals(findByUsername.getPassword())){ ret.put("type","error"); ret.put("msg","密码错误!"); logService.add("用户名为"+user.getUsername()+"的用户登录时输入密码错误!"); returnret; } Rolerole=roleService.find(findByUsername.getRoleId()); List<Authority>authorityList=authorityService.findListByRoleId(role.getId());//根据角色获取权限列表 StringmenuIds=""; for(Authorityauthority:authorityList){ menuIds+=authority.getMenuId()+","; } if(!StringUtils.isEmpty(menuIds)){ menuIds=menuIds.substring(0,menuIds.length()-1); } List<Menu>userMenus=menuService.findListByIds(menuIds); request.getSession().setAttribute("admin",findByUsername); request.getSession().setAttribute("role",role); request.getSession().setAttribute("userMenus",userMenus); ret.put("type","success"); ret.put("msg","登录成功!"); logService.add("用户名为{"+user.getUsername()+"},角色为{"+role.getName()+"}的用户登录成功!"); returnret; } @RequestMapping(value="/logout",method=RequestMethod.GET) publicStringlogout(HttpServletRequestrequest){ HttpSessionsession=request.getSession(); session.setAttribute("admin",null); session.setAttribute("role",null); request.getSession().setAttribute("userMenus",null); return"redirect:login"; } @RequestMapping(value="/edit_password",method=RequestMethod.GET) publicModelAndVieweditPassword(ModelAndViewmodel){ model.setViewName("system/edit_password"); returnmodel; } @RequestMapping(value="/edit_password",method=RequestMethod.POST) @ResponseBody publicMap<String,String>editPasswordAct(Stringnewpassword,Stringoldpassword,HttpServletRequestrequest){ Map<String,String>ret=newHashMap<String,String>(); if(StringUtils.isEmpty(newpassword)){ ret.put("type","error"); ret.put("msg","请填写新密码!"); returnret; } Useruser=(User)request.getSession().getAttribute("admin"); if(!user.getPassword().equals(oldpassword)){ ret.put("type","error"); ret.put("msg","原密码错误!"); returnret; } user.setPassword(newpassword); if(userService.editPassword(user)<=0){ ret.put("type","error"); ret.put("msg","密码修改失败,请联系管理员!"); returnret; } ret.put("type","success"); ret.put("msg","密码修改成功!"); logService.add("用户名为{"+user.getUsername()+"},的用户成功修改密码!"); returnret; }}5.3.3房型管理 管理员进行房型管理操作,查询房型列表图5-13房型管理 管理员编辑房型信息图5-14房型管理操作主要代码:publicclassRoomTypeController{ @Autowired privateRoomTypeServiceroomTypeService; @RequestMapping(value="/list",method=RequestMethod.GET) publicModelAndViewlist(ModelAndViewmodel){ model.setViewName("room_type/list"); returnmodel; } @RequestMapping(value="/add",method=RequestMethod.POST) @ResponseBody publicMap<String,String>add(RoomTyperoomType){ Map<String,String>ret=newHashMap<String,String>(); if(roomType==null){ ret.put("type","error"); ret.put("msg","请填写正确的房间类型信息!"); returnret; } if(StringUtils.isEmpty(roomType.getName())){ ret.put("type","error"); ret.put("msg","房间类型名称不能为空!"); returnret; } roomType.setAvilableNum(roomType.getRoomNum()); roomType.setBookNum(0);//设置预定数0 roomType.setLivedNum(0);//设置已入住数0 if(roomTypeService.add(roomType)<=0){ ret.put("type","error"); ret.put("msg","添加失败,请联系管理员!"); returnret; } ret.put("type","success"); ret.put("msg","添加成功!"); returnret; } @RequestMapping(value="/edit",method=RequestMethod.POST) @ResponseBody publicMap<String,String>edit(RoomTyperoomType){ Map<String,String>ret=newHashMap<String,String>(); if(roomType==null){ ret.put("type","error"); ret.put("msg","请填写正确的房间类型信息!"); returnret; } if(StringUtils.isEmpty(roomType.getName())){ ret.put("type","error"); ret.put("msg","房间类型名称不能为空!"); returnret; } RoomTypeexistRoomType=roomTypeService.find(roomType.getId()); if(existRoomType==null){ ret.put("type","error"); ret.put("msg","未找到该数据!"); returnret; } intoffset=roomType.getRoomNum()-existRoomType.getRoomNum(); roomType.setAvilableNum(existRoomType.getAvilableNum()+offset); if(roomType.getAvilableNum()<=0){ roomType.setAvilableNum(0);//没有可用房间 roomType.setStatus(0);//房型已满 if(roomType.getAvilableNum()+existRoomType.getLivedNum()+existRoomType.getBookNum()>roomType.getRoomNum()){ ret.put("type","error"); ret.put("msg","房间数设置不合理!"); returnret; } } if(roomTypeService.edit(roomType)<=0){ ret.put("type","error"); ret.put("msg","修改失败,请联系管理员!"); returnret; } ret.put("type","success"); ret.put("msg","修改成功!"); returnret; }5.3.4房间管理 管理员进行房间管理操作,查询房间列表图5-15房间管理 管理员编辑房间信息图5-16房间管理操作主要代码:publicclassRoomController{ @Autowired privateRoomTypeServiceroomTypeService; @Autowired privateRoomServiceroomService; @Autowired privateFloorServicefloorService; @RequestMapping(value="/list",method=RequestMethod.GET) publicModelAndViewlist(ModelAndViewmodel){ model.addObject("roomTypeList",roomTypeService.findAll()); model.addObject("floorList",floorService.findAll()); model.setViewName("room/list"); returnmodel; } @RequestMapping(value="/add",method=RequestMethod.POST) @ResponseBody publicMap<String,String>add(Roomroom){ Map<String,String>ret=newHashMap<String,String>(); if(room==null){ ret.put("type","error"); ret.put("msg","请填写正确的房间信息!"); returnret; } if(StringUtils.isEmpty(room.getSn())){ ret.put("type","error"); ret.put("msg","房间编号不能为空!"); returnret; } if(room.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","请选择房间类型!"); returnret; } if(room.getFloorId()==null){ ret.put("type","error"); ret.put("msg","请选择房间所属楼层!"); returnret; } if(isExist(room.getSn(),0l)){ ret.put("type","error"); ret.put("msg","该房间编号已经存在!"); returnret; } if(roomService.add(room)<=0){ ret.put("type","error"); ret.put("msg","添加失败,请联系管理员!"); returnret; } ret.put("type","success"); ret.put("msg","添加成功!"); returnret; } @RequestMapping(value="/edit",method=RequestMethod.POST) @ResponseBody publicMap<String,String>edit(Roomroom){ Map<String,String>ret=newHashMap<String,String>(); if(room==null){ ret.put("type","error"); ret.put("msg","请填写正确的房间信息!"); returnret; } if(StringUtils.isEmpty(room.getSn())){ ret.put("type","error"); ret.put("msg","房间编号不能为空!"); returnret; } if(room.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","请选择房间类型!"); returnret; } if(room.getFloorId()==null){ ret.put("type","error"); ret.put("msg","请选择房间所属楼层!"); returnret; } if(isExist(room.getSn(),room.getId())){ ret.put("type","error"); ret.put("msg","该房间编号已经存在!"); returnret; } if(roomService.edit(room)<=0){ ret.put("type","error"); ret.put("msg","修改失败,请联系管理员!"); returnret; } ret.put("type","success"); ret.put("msg","修改成功!"); returnret; } 5.3.5用户管理 管理员进行房间管理操作,查询用户列表图5-17用户管理5.3.6预订单管理管理员进行预订单管理操作,查询预订单列表图5-18预订单管理 管理员编辑预订单信息图5-19预订单管理操作5.3.7入住管理管理员进行入住管理操作,查询入住信息列表图5-20入住管理管理员编辑入住信息图5-21入住管理编辑 管理员查询入住详细信息图5-22入住管理详细信息主要代码:publicclassCheckinController{ @Autowired privateRoomServiceroomService; @Autowired privateRoomTypeServiceroomTypeService; @Autowired privateBookOrderServicebookOrderService; @Autowired privateCheckinServicecheckinService; @RequestMapping(value="/list",method=RequestMethod.GET) publicModelAndViewlist(ModelAndViewmodel){ model.addObject("roomTypeList",roomTypeService.findAll()); model.addObject("roomList",roomService.findAll()); model.setViewName("checkin/list"); returnmodel; } @RequestMapping(value="/add",method=RequestMethod.POST) @ResponseBody publicMap<String,String>add(Checkincheckin, @RequestParam(name="bookOrderId",required=false)LongbookOrderId ){ Map<String,String>ret=newHashMap<String,String>(); if(checkin==null){ ret.put("type","error"); ret.put("msg","请填写正确的入住信息!"); returnret; } if(checkin.getRoomId()==null){ ret.put("type","error"); ret.put("msg","房间不能为空!"); returnret; } if(checkin.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","房型不能为空!"); returnret; } if(StringUtils.isEmpty(checkin.getName())){ ret.put("type","error"); ret.put("msg","入住联系人名称不能为空!"); returnret; } if(StringUtils.isEmpty(checkin.getMobile())){ ret.put("type","error"); ret.put("msg","入住联系人手机号不能为空!"); returnret; } if(StringUtils.isEmpty(checkin.getIdCard())){ ret.put("type","error"); ret.put("msg","联系人身份证号不能为空!"); returnret; } if(StringUtils.isEmpty(checkin.getArriveDate())){ ret.put("type","error"); ret.put("msg","到达时间不能为空!"); returnret; } if(StringUtils.isEmpty(checkin.getLeaveDate())){ ret.put("type","error"); ret.put("msg","离店时间不能为空!"); returnret; } checkin.setCreateTime(new
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 求人办事话术
- 发电企业车间级安全培训课件
- 未来五年新形势下教育培训保险服务行业顺势崛起战略制定与实施分析研究报告
- 未来五年堆肥发酵装置企业ESG实践与创新战略分析研究报告
- 北京朝阳消防安全管理
- 《ProEWildfire产品建模基础与案例教程》-第 12 章 题 库
- 《CAXA数控车》-《CAXA数控车》-CAXA数控车 项目5
- 8 《总也倒不了的老屋》教学课件
- (2025)肌萎缩侧索硬化患者营养管理专家共识解读课件
- 2024年美国胃肠病学院幽门螺杆菌感染治疗指南解读课件
- 2026届吉林省长春六中、八中、十一中等省重点中学高二生物第一学期期末联考试题含解析
- 2025年1月浙江省普通高中学业水平考试物理试卷(含答案)
- 2025年低压电工操作证理论全国考试题库(含答案)
- 2025北京市公共资源交易中心招聘8人(公共基础知识)测试题带答案解析
- 可复制的领导力课件教学课件
- 公司注册登记表格
- 《上帝掷骰子吗:量子物理史话》【超星尔雅学习通】章节答案
- 外贸发票 PI 形式发票模板范例
- YS/T 254.5-2011铍精矿、绿柱石化学分析方法第5部分:氟量的测定离子选择电极法
- GB/T 39532-2020能源绩效测量和验证指南
- GB/T 30475.3-2017压缩空气过滤器试验方法第3部分:颗粒
评论
0/150
提交评论