




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
荆楚理工学院课程设计成果学院:计算机工程学院班级:学生姓名:学号:设计地点(单位):软件工程实验室A5-102设计题目:酒店管理系统完成日期:年月日指导教师评语:成绩(五级记分制):教师签名:
目录TOC\o"1-3"\h\u1.需求分析 .需求分析1.1编写目的编写本文档的目的:详细、准确和全面定义酒店管理系统的用户需求,指导软件系统的后续开发工作;本文档所描述的用户需求将作为该项目最终验收的标准和依据;说明:该文档必须经用户方和开发方签字确认方可有效。1.2读者对象本文档的读者对象包括:(1)用户(2)需求分析人员(3)软件设计人员(4)软件测试人员1.3软件项目概述问题描述编写软件完成酒店客房管理系统的自动化:系统分为系统管理和前台管理两种不同的管理方式;系统管理是基于客房信息、员工信息以及客户信息管理;前台管理是基于对客户的订房信息、入住信息以及退房信息的管理。系统概览随着软件开发方法学的演变和发展,特别是软件设计模式、软件组件等概念的提出,给软件重用度、软件的可扩充性、软件的鲁棒性及软件开发效率的提高,提供了一个诱人的前景。我们将采纳当前软件工程最新技术,采用统一建模语言UML描述基于网络计算平台的整个项目,在分析、设计时充分利用软件模式及组合软件模式,利用前人的专家级经验,提高开发效率;最后的产品用软件组件的形式加以封装,并用XML来描述软件组件及各软件组件间的接口。通过这一课程作业实践,一方面能加深我们对软件模式、软件组件、XML、UML的认识和理解,使我们就这些新技术的应用,提出更为可行的建议;另一方面,我们也希望能开发出新的软件组件,抽出新的软件模式,进一步充实软件模式仓库,繁荣软件组件市场。该项目将为酒店管理系统提供一套软件,该软件将辅助酒店管理员对酒店管理以及对入住客户的管理提供信息化支持。系统拓扑如下图所示:图1-1系统拓扑图1.4文档概述本文档准确、一致、全面定义和描述了酒店管理系统的软件需求,文档的内容组织如下:第一章,引言部分,简要介绍了文档和项目的概况;第二章,一般性描述,定义了系统与环境之间的关系第三章,详细需求描述,详细定义了系统的功能需求第四章,其他需求,定义了系统的非功能性需求1.5定义1.5.1概念(1)酒店管理:酒店管理系统。(2)系统管理员:酒店的工作人员,负责管理客房信息、员工信息以及客户信息。(3)前台管理员:酒店的工作人员,负责客房信息以及个人信息的查询和管理。(4)帐户:酒店系统管理员以及前台管理员用来管理酒店的凭证,他们通过密码拥有帐户的相关功能。(5)客户:酒店管理系统的主要对象,可以通过前台办理酒店入住交易。1.6参考资料略。1.7、一般性描述该系统所涉及的帐户信息和用户信息全部存放在酒店数据库中。本系统采用单机模式的工作方式,系统的用户主要有:酒店系统管理员、前台管理员、酒店其他工作人员以及酒店客户。1.7.1系统UseCase图顶层的UseCase如下图所示: 图1-2UseCase 顶层的UseCaseActor定义如下:Customer:顾客。Adminstrator:管理员。细化的UseCase如下图所示: 图1-3前台管理用例图图1-4系统管理用例图Actor定义如下:frontOfficer:前台管理员systemOfficer:系统管理员各UseCase说明如下:checkIn:客户办理入住Step1:前台管理员输入用户名及密码,登录酒店管理系统。Step2:前台管理员启动经营管理中订房功能,正确输入客户信息及订房信息。Step3:确认信息记录完毕,前台管理员退出系统,本UseCase结束。continueToLive:客户办理续住Step1:前台管理员输入用户名及密码,登录酒店管理系统。Step2:前台管理员启动经营管理中续房功能,正确输入续住天数及续交订金数。Step3:确认信息记录完毕,前台管理员退出系统,本UseCase结束。checkout:客户办理退房Step1:前台管理员输入用户名及密码,登录酒店管理系统。Step2:前台管理员启动经营管理中退房功能,仔细核对该入住客户信息及订房信息。Step3:确认信息记录无误,前台管理员退出系统,本UseCase结束。crewManagement:员工信息管理Step1:系统管理员输入用户名及密码,登录酒店管理系统。Step2:系统管理员启动员工信息管理功能,可以选择四种操作:㈠addCrew:增加酒店工作员工信息,㈡deleteCrew:减少酒店工作员工信息,㈢changeCrew:修改酒店工作员工信息,㈣selectCrew:查询酒店工作员工信息。Step3:确认信息记录完毕,系统管理员退出系统,本UseCase结束。customerManagement:客户信息管理Step1:系统管理员输入用户名及密码,登录酒店管理系统。Step2:系统管理员启动客户信息管理功能,selectCustomerInformation:查询入住客户信息。Step3:核对信息记录无误,系统管理员退出系统,本UseCase结束。roomManagement:客房信息管理Step1:系统管理员输入用户名及密码,登录酒店管理系统。Step2:系统管理员启动客房信息管理功能,可以选择四种操作:㈠addRoom:增加客房信息,㈡deleteRoom:减少客房信息,㈢changeRoom:修改客房信息,㈣selectRoom:查询客房信息。Step3:确认信息记录完毕,系统管理员退出系统,本UseCase结束。因此,本酒店管理系统由以下功能模块组成:(1)经营管理模块(订房、续房、退房)(2)客房信息管理模块(3)员工信息管理模块(4)客户信息管理模块1.7.2用户特征此系统有两类用户:系统管理员、前台管理员。功能(1)仅供前台管理员使用,功能(3)仅供系统管理员使用,功能(2)、(4)需要系统管理员和前台管理员共同使用。对于管理员来说一般都有一定的电脑操作能力,便能方便的使用本系统。1.7.3限制与约束此系统必须满足以下限制:(1)系统中所有帐户能够供用户随时使用,完成各自授权的活动;(2)在同一时刻,一个帐户不能同时为两个用户服务;(3)该系统必须确保对数据进行完全保护,以避免未经授权的访问,每个登录用户只能访问其角色所授的权限;(4)界面友好、操作简便;(5)软件系统开放性好,结构灵活,可扩充,易于维护;(6)安全可靠。1.8功能需求描述1.8.1系统的类图系统的类图如下图所示:图1-5系统类图系统的类图MainMenu:主菜单类frontManagement:前台管理类systemManagement:系统管理类crewManagement:员工管理类customerManagement:客户管理类roomManagement:客房管理类1.8.2类的说明MainMenu类:主菜单类。frontManagement类:前台管理员类属性:包含前台管理员姓名(name),密码(password)。systemManagement类:系统管理员类。属性:包含系统管理员姓名(name):admin和密码(password):123456。.方法:它包含有系统管理员登录(loginMenu()),客房信息管理菜单(roomManage())(增删改查),员工信息管理菜单(crewManage())(增删改查)和顾客信息管理菜单(customerManage())(查询和修改)。roomManagement类:客房管理类。属性:包含客房类型(roomType),客房编号(roomNum),客房价格(roomPrice),客房状态(roomState)。customerManagement类:客户管理类。属性:包含姓名(name),年龄(age),性别(sex),身份证号(id),电话号码(tel),订房的类型(rooType),订房的编号(roomNum),订房的价钱(roomPrice),订房的天数(days),所交的押金(money),订房时间(addRoomTime),退房时间(checkOutRoomTime)1.9其它需求描述1.9.1性能要求在管理员使用相关功能时,响应时间控制在10秒钟。1.9.2设计约束开发工具:要求用Java开发。运行环境:JDK或eclipse下。1.9.3交付要求该项目完成后,需向用户移交以下软件项:(1)软件需求规格说明书,电子版和书面版(2)软件设计规格说明书,电子版和书面版(3)可运行的软件系统(4)部分或全部模块的JAVA源代码1.9.4进度要求略。基于UML的系统设计2.1系统概要及其运行环境随着软件开发方法学的演变和发展,特别是软件设计模式、软件组件等概念的提出,给软件重用度、软件的可扩充性、软件的鲁棒性及软件开发效率的提高,提供了一个诱人的前景。我们将采纳当前软件工程最新技术,采用统一建模语言UML描述基于网络计算平台的整个项目,在分析、设计时充分利用软件模式及组合软件模式,利用前人的专家级经验,提高开发效率;最后的产品用软件组件的形式加以封装,并用XML来描述软件组件及各软件组件间的接口。通过这一课程作业实践,一方面能加深我们对软件模式、软件组件、XML、UML的认识和理解,使我们就这些新技术的应用,提出更为可行的建议;另一方面,我们也希望能开发出新的软件组件,抽出新的软件模式,进一步充实软件模式仓库,繁荣软件组件市场。该项目将为酒店管理系统提供一套软件,该软件将辅助酒店管理员对酒店管理以及对入住客户的管理提供信息化支持。本系统采用js+servlet+javabean实现,可在网页上操作,登录时输入用户名和密码即可进行相关操作,与平常浏览网页并无不同。2.2系统的组成部分(1)经营管理:经营管理主要实现订房、续房、退房等操作。(2)客房信息管理:客房管理主要实现客房的增删改查的自动化管理和客房状态查看等操作。(3)员工信息管理:员工信息管理主要实现员工的增删改查,包括住宿房预订查询和宿费提醒等操作。(4)客户信息管理:客户信息管理主要实现客户信息的查询和修改等操作。(5)系统设置:系统设置主要实现设置、密码设置等操作。2.3定义本文档涉及的专门术语、容易引起歧义的概念及其他需要解释的内容见需求说明书1.5节。2.4软件设计约束2.4.1设计目标和原则(1)本设计欲达到的目标要求满足用户需求且软件系统具有良好的可扩充性、可维护性;(2)为实现上述目标,在设计软件过程中采用统一建模语言UML描述基于网络计算平台的整个系统,在分析、设计时充分利用软件模式及组合软件模式,利用前人的专家级经验,提高开发效率。2.4.2设计约束(1)系统中所有帐户能够供用户随时使用,完成各自授权的活动;(2)在同一时刻,一个帐户不能同时为两个用户服务;(3)该系统必须确保对数据进行完全保护,以避免未经授权的访问,每个登录用户只能访问其角色所授的权限;(4)该系统采用B/S模式,并且考虑性能、安全、可靠性、易维护等方面的问题采用三层架构。(5)基于成本及易维护和易迁移的考虑,系统架构在J2EE平台上,使用的工具有RationalRose2003、JDK1.6、Tomcat、Eclipse等。(6)整个开发过程应满足软件开发计划所定的时间表。2.4.3合法数据(1)员工的信息必须完整有效,例如:手机号码以及身份账号必须经过验证后才会被存放在数据库里面。(2)员工的帐号密码,没有专门的额外设定,帐号就是注册时的名称。(3)订单的生成,在客户的信息存入数据库之前要严格进行正则验证。(4)手机号码必须有11位,身份证号必须有18位。2.5软件设计描述2.5.1总体结构设计本酒店管理系统由以下功能模块设计组成:(1)经营管理模块(订房、续房、退房)(2)客房信息管理模块(3)员工信息管理模块(4)客户信息管理模块2.5.2时序图1.前台管理员登录时序图如图2-1所示图2-1用户登录系统顺序图2.订房时序图如图2-2所示图2-2订房时序图2.5.3逻辑视图逻辑视图描述最重要的类、从这些类到包和子系统的组织形式,以及从这些包和子系统到层的组织形式。它还要描述最重要的用例实现。本模块主要有以下包:图2-3系统包图包图的说明:bean包:主要用来封装数据,形成实体类,当中包含为每个属性设置值及获取属性值的方法,供其他包中类调用。本系统中数据库中的表都有相应的实体类。dao包:用来封装操作的包。如对与学生相关的业务,其实现例如增加员工,修改员工信息等涉及到数据库的操作。其他实体类类似。biz包:封装业务的包。每个类中都有表示业务的函数,与dao包不同的是,它不需要与数据库打交道,基本上对应于具体用例。系统体系结构:本系统采用三层架构实现。数据访问层(DAL)直接与数据库联系,当要进行数据的增删改查时,数据访问层先与数据库建立连接,接着进行数据操作,最后关闭数据库连接。业务逻辑层(BLL)主要处理业务逻辑,系统的主要功能都要该层完成。表示层(UI)主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。2.5.4部署视图部署视图描述了最常用平台配置的不同物理节点,还描述了如何将任务分配到物理节点。该部分按照物理网络配置进行组织;在利用部署图说明每个这样的配置后,接着映射每个处理器的进程。图2-4部署视图客户端浏览器:普通用户和管理员都可以通过可以连上internet的浏览器连接到服务器,进行各自授权的操作。系统管理员还可以查看系统情况,对员工信息进行添加,修改或删除操作。Tomcat服务器:系统驻留的主机。数据库管理系统:存储所有数据信息,包括员工信息,房间信息,订单信息等等。2.6内部数据库结构设计2.6.1内部数据库概念结构设计系统实体关系图如图2-5所示图2-5系统实体关系图2.6.2内部数据库逻辑结构设计由图2-5系统实体关系图可以得到系统的关系模式为:管理员(账号,密码)。客户(手机号,姓名,年龄,身份证号,性别,密码)。房间(房间号,房间种类,房间状态,房间价格)。2.6.3内部数据库物理结构设计内部数据库为程序编写时给定的数据。酒店管理系统内部数据库中各类数据如下图所示。每张图表示在内部数据库中的一个类。1.员工信息图该图主要记录系统中已经有的员工信息,具体数据如图2-6所示图2-6员工表详细字段描述2.正在入住客户信息图该图主要记录系统中正在入住的客户信息,具体数据如图2-7所示图2-7正在入住客户信息详细字段描述3.客房图该图主要记录系统中已经有的房间信息,具体数据如表2-8所示 图2-8客房详细字段描述2.7各类详细定义1、用户分类本系统的用户可分为两类:前台管理员。系统管理员。2、用户描述前台管理员描述:前台管理是基于对客户的订房信息、入住信息以及退房信息的管理。系统管理员描述:系统管理是基于客房信息、员工信息以及客户信息管理。
核心代码3.1登录代码publicclassDemo{ publicstaticvoidmain(String[]args)throwsException { MainLoginMenuinfo=newMainLoginMenu(); info.mainLogin(); }}publicclassMainLoginMenu{ intmenu=0; publicvoidmainLogin()throwsException { while(true) { Tool.printMenu1("欢迎进入酒店客房管理系统登录界面"); menu=Tool.printMenu("系统管理员登录,前台管理员登录"); switch(menu) { case1: AdminMenuinfo=newAdminMenu(); info.loginMenu(); break; case2: ReceptionistMenuinfo1=newReceptionistMenu(); info1.loginMenu(); break; case0: Tool.p1("退出酒店管理系统登录界面"); break; default: Tool.p1("请输入正确的功能选项,只能是<1.2.0>!"); break; } if(!Tool.isContinue("是否继续酒店客房管理系统登录界面<y/n>:")) { Tool.p1("谢谢您使用酒店管理系统,欢迎您再次使用!!"); break; } } }}3.2系统管理代码publicclassAdmin{ Stringname="王遗风"; Stringpwd="123456";}publicclassAdminMenu{ AdminManageradminInfo=newAdminManager(); intmenu; intn=3; //定义密码的输入次数 //系统管理员登录菜单 publicvoidloginMenu() { while(n>0) { Tool.printMenu1("欢迎进入系统管理员登录界面"); Stringname=Tool.getString("请输入用户名:"); Stringpwd=Tool.getString("请输入密码:"); if(adminInfo.isLogin(name,pwd)) { Tool.p1("恭喜您,登录成功!"); mainMenu(); } else { n--; if(n!=0) { Tool.p1("您的用户名或密码错误,还有"+n+"次机会!"); } else { Tool.p1("您今天的登录次数已经用完,请勿非法操作!"); } } if(!Tool.isContinue("是否继续系统管理员登录<y/n>:")) break; } } //系统管理员主菜单 publicvoidmainMenu() { while(true) { Tool.printMenu1("欢迎进入系统管理员主界面"); menu=Tool.printMenu("客房信息管理,员工信息管理,客户信息管理"); switch(menu) { case1: roomInfoManagerMenu(); break; case2: staffInfoManagerMenu(); break; case3: ReceptionistMenuinfo=newReceptionistMenu(); info.customerInfoManagerMenu(); break; case0: Tool.p1("退出管理员主界面!!"); break; default: Tool.p1("请输入正确的功能选项,只能是<>!"); break; } if(!Tool.isContinue("是否继续系统管理员主界面<y/n>:")) break; } } //客房信息管理界面 publicvoidroomInfoManagerMenu() { while(true) { Tool.printMenu1("欢迎进入客房信息管理界面"); menu=Tool.printMenu("增加客房信息,查询客房信息,修改客房信息,删除客房信息"); switch(menu) { case1: addRoomInfoMenu(); break; case2: selectRoomInfoMenu(); break; case3: updateRoomInfoMenu(); break; case4: delectRoomInfoMenu(); break; case0: Tool.p1("退出客房信息管理界面!!"); break; default: Tool.p1("请输入正确的功能选项,只能是<.0>!"); break; } if(!Tool.isContinue("是否继续客房信息管理界面<y/n>:")) break; } } //增加客房信息菜单 publicvoidaddRoomInfoMenu() { while(true) { Tool.printMenu1("开始增加客房信息"); Roominfo=newRoom(); info.roomNum=Tool.getInt("请输入房间编号:"); info.roomType=Tool.getString("请输入房间类型:"); info.roomPrice=Tool.getDouble("请输入房间一天的价钱:"); info.roomState=Tool.getInt("请输入房间状态,只能是<0空,1已住>:"); adminInfo.addRoomInfo(info); if(!Tool.isContinue("是否继续添加客房信息<y/n>:")) break; } } //查询客房信息菜单 publicvoidselectRoomInfoMenu() { while(true) { Tool.printMenu1("欢迎查询客房信息"); menu=Tool.printMenu("查询全部客房信息,根据客房类型查询客房信息,根据客房编号查询客房信息,根据客房状态查询,查询空房数目"); switch(menu) { case1: selectRoomInfoAllMenu(); break; case2: selectRoomInfoByTypeMenu(); break; case3: selectRoomInfoByNumMenu(); break; case4: selectRoomInfoByStateMenu(); break; case5: selectEmptyRoomCountMenu(); break; case0: Tool.p2("退出查询客房信息界面!!"); break; default: Tool.p2("请输入正确的功能选项,只能是<.5.0>!"); break; } if(!Tool.isContinue("是否继续查询客房信息<y/n>:")) break; } } //打印菜单头 publicvoidprintTitle() { Tool.p1("客房编号\t客房类型\t客房价格\t客房状态"); } //查询全部客房信息菜单 publicvoidselectRoomInfoAllMenu() { printTitle(); adminInfo.selectRoomInfoAll(); } //根据客房类型查询客房信息菜单 publicvoidselectRoomInfoByTypeMenu() { while(true) { Tool.printMenu1("开始根据客房类型查询客房信息"); Stringtype=Tool.getString("请输入您要查找的客房类型:"); if(adminInfo.isSelectRoomInfoByType(type)) { printTitle(); adminInfo.selectRoomInfoByType(type); } else { Tool.p1("您输入的客房类型不存在,请重新输入!!"); } if(!Tool.isContinue("是否继续根据客房类型查询客房信息<y/n>:")) break; } } //根据客房编号查询客房信息菜单 publicvoidselectRoomInfoByNumMenu() { while(true) { Tool.printMenu1("开始根据客房编号查询客房信息"); intnum=Tool.getInt("请输入您要查找的客房编号:"); if(adminInfo.isSelectRoomInfoByNum(num)) { printTitle(); adminInfo.selectRoomInfoByNum(num); } else { Tool.p1("您输入的客房编号不存在,请重新输入!!"); } if(!Tool.isContinue("是否继续根据客房编号查询客房信息<y/n>:")) break; } } //根据客房状态查询客房信息菜单 publicvoidselectRoomInfoByStateMenu() { while(true) { Tool.printMenu1("开始根据客房编号查询客房信息"); intstate=Tool.getInt("请输入您要查找的客房状态:"); if(adminInfo.isSelectRoomInfoByState(state)) { printTitle(); adminInfo.selectRoomInfoByState(state); } else { Tool.p1("您输入的客房状态不存在,请重新输入,只能是<0空,1已住>!!"); } if(!Tool.isContinue("是否继续根据客房状态查询客房信息<y/n>:")) break; } } //查询空房数目菜单 publicvoidselectEmptyRoomCountMenu() { adminInfo.selectEmptyRoomCount(); } //修改客房信息菜单 publicvoidupdateRoomInfoMenu() { while(true) { Tool.printMenu1("开始修改客房信息"); selectRoomInfoAllMenu(); intnum=Tool.getInt("请输入您要修改客房信息的客房号:"); if(adminInfo.isSelectRoomInfoByNum(num)) { printTitle(); adminInfo.selectRoomInfoByNum(num); while(true) { Tool.printMenu1("开始修改部分客房信息"); menu=Tool.printMenu("修改客房编号,修改客房类型,修改客房价钱,修改客房状态"); switch(menu) { case1: intnum1=Tool.getInt("请输入修改后的客房编号:"); adminInfo.updateRoomNum(num,num1); break; case2: Stringtype=Tool.getString("请输入修改后的客房类型:"); adminInfo.updateRoomType(num,type); break; case3: doubleprice=Tool.getDouble("请输入修改后的客房价钱:"); adminInfo.updateRoomPrice(num,price); break; case4: intstate=Tool.getInt("请输入修改后的客房状态:"); adminInfo.updateRoomState(num,state); break; case0: Tool.p2("退出修改部分客房信息!!"); break; default: Tool.p2("请输入正确的功能选项,只能是<.0>!"); break; } if(!Tool.isContinue("是否继续修改部分客房信息<y/n>:")) break; } } else { Tool.p1("您输入的客房编号不存在,请重新输入!!"); } if(!Tool.isContinue("是否继续修改客房信息<y/n>:")) break; } } //删除客房信息菜单 publicvoiddelectRoomInfoMenu() { while(true) { Tool.printMenu1("开始删除客房信息"); selectRoomInfoAllMenu(); intnum=Tool.getInt("请输入您要删除客房信息的客房编号:"); if(adminInfo.isSelectRoomInfoByNum(num)) { Tool.p1("您要删除的信息如下:"); printTitle(); adminInfo.selectRoomInfoByNum(num); if(Tool.isContinue("是否要删除该客房信息<y/n>:")) { adminInfo.delectRoomInfo(num); selectRoomInfoAllMenu(); } } else { Tool.p1("您输入的客房编号不存在,请重新输入!!"); } if(!Tool.isContinue("是否继续删除客房信息<y/n>:")) break; } } //员工信息管理菜单 publicvoidstaffInfoManagerMenu() { while(true) { Tool.printMenu1("欢迎进入员工信息管理界面"); menu=Tool.printMenu("增加员工信息,查询员工信息,修改员工信息,删除员工信息"); switch(menu) { case1: addStaffInfoMenu(); break; case2: selectStaffInfoMenu(); break; case3: updateStaffInfoMenu(); break; case4: delectStaffInfoMenu(); break; case0: Tool.p2("退出客房信息管理界面!!"); break; default: Tool.p2("请输入正确的功能选项,只能是<.0>!"); break; } if(!Tool.isContinue("是否继续客房信息管理界面<y/n>:")) break; } } //添加员工信息菜单 publicvoidaddStaffInfoMenu() { while(true) { Tool.printMenu1("开始添加员工信息"); Receptionistinfo=newReceptionist(); =Tool.getString("请输入员工姓名:"); info.pwd=Tool.getString("请输入员工密码:"); info.age=Tool.getInt("请输入员工年龄:"); while(true) { info.tel=Tool.getString("请输入员工电话号码:"); if(info.tel.length()!=11) { Tool.p1("电话号码必须为11位,您输入的电话号码只有"+info.tel.length()+"位,请重新输入!"); } else { break; } } adminInfo.addStaffInfo(info); if(!Tool.isContinue("是否继续添加员工信息<y/n>:")) break; } } //打印员工信息表头 publicvoidprintStaffInfoTitle() { Tool.p1("姓名\t密码\t性别\t电话号码"); } //查询员工信息菜单 publicvoidselectStaffInfoMenu() { Tool.printMenu1("开始查询员工信息"); printStaffInfoTitle(); adminInfo.selectStaffInfo(); } //修改员工信息菜单 publicvoidupdateStaffInfoMenu() { while(true) { Tool.printMenu1("开始修改员工信息"); selectStaffInfoMenu(); Stringname=Tool.getString("请输入您要修改员工信息的姓名:"); if(adminInfo.isSelectStaffInfoByName(name)) { printStaffInfoTitle(); adminInfo.selectStaffInfoByName(name); while(true) { Tool.printMenu1("开始修改部分员工信息"); menu=Tool.printMenu("修改员工姓名,修改员工密码,修改员工年龄,修改员工手机号"); switch(menu) { case1: Stringname1=Tool.getString("请输入修改后的员工姓名:"); adminInfo.updateStaffName(name,name1); break; case2: Stringpwd=Tool.getString("请输入修改后的员工密码:"); adminInfo.updateStaffPwd(name,pwd); break; case3: intage=Tool.getInt("请输入修改后的员工年龄:"); adminInfo.updateStaffAge(name,age); break; case4: Stringtel=Tool.getString("请输入修改后的员工手机号:"); adminInfo.updateStaffTel(name,tel); break; case0: Tool.p2("退出修改部分客房信息!!"); break; default: Tool.p2("请输入正确的功能选项,只能是<.0>!"); break; } if(!Tool.isContinue("是否继续修改部分客房信息<y/n>:")) break; } } else { Tool.p1("您输入的客房编号不存在,请重新输入!!"); } if(!Tool.isContinue("是否继续修改客房信息<y/n>:")) break; } } //删除员工信息菜单 publicvoiddelectStaffInfoMenu() { while(true) { Tool.printMenu1("开始删除员工信息"); selectStaffInfoMenu(); Stringname=Tool.getString("请输入您要删除的员工姓名:"); if(adminInfo.isSelectStaffInfoByName(name)) { Tool.p1("您要删除的信息如下:"); printStaffInfoTitle(); adminInfo.selectStaffInfoByName(name); if(Tool.isContinue("是否要删除该员工信息<y/n>:")) { adminInfo.delectStaffInfo(name); selectStaffInfoMenu(); } } else { Tool.p1("您输入的员工姓名不存在,请重新输入!!"); } if(!Tool.isContinue("是否继续删除员工信息<y/n>:")) break; } }}publicclassAdminManager{ staticRoom[]rooms=newRoom[100]; Adminadmins=newAdmin(); staticReceptionist[]recs=newReceptionist[10]; staticintroomCount=0; //定义房间的数目 staticintrecCount=0; //定义前台管理员的数目 //初始化客房信息 static { rooms[roomCount++]=newRoom(3028,"单间",100,0); rooms[roomCount++]=newRoom(2012,"标间",260,1); rooms[roomCount++]=newRoom(2013,"双人间",300,1); rooms[roomCount++]=newRoom(5068,"贵宾房",500,0); rooms[roomCount++]=newRoom(6088,"套房",800,1); } //初始化员工信息 static { recs[recCount++]=newReceptionist("毛毛","123456",20,"10101010101"); recs[recCount++]=newReceptionist("莫雨","123456",21,"20202020202"); recs[recCount++]=newReceptionist("陆二猫","123456",19,"30303030303"); recs[recCount++]=newReceptionist("陆烟儿","123456",20,"40404040404"); recs[recCount++]=newReceptionist("喵萝","123456",18,"50505050505"); } //管理员登录 publicbooleanisLogin(Stringname,Stringpwd) { if(name.equals()&&pwd.equals(admins.pwd)) returntrue; returnfalse; } //增加客房信息 publicvoidaddRoomInfo(Roominfo) { rooms[roomCount++]=info; } //根据下表查找打印客房信息 publicvoidselectRoomByNum(inti) { Tool.p1(rooms[i].roomNum+"\t\t"+rooms[i].roomType+"\t\t"+rooms[i].roomPrice+"\t\t"+rooms[i].roomState); } //查询全部客房信息 publicvoidselectRoomInfoAll() { for(inti=0;i<roomCount;i++) { selectRoomByNum(i); } } //该客房类型是否能找到 publicbooleanisSelectRoomInfoByType(Stringtype) { for(inti=0;i<roomCount;i++) { if(type.equals(rooms[i].roomType)) returntrue; } returnfalse; } //该客房是否为空 publicbooleanisRoomStatefool(intnum) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum&&rooms[i].roomState==0) { returntrue; } } returnfalse; } //根据客房类型查找客房信息 publicvoidselectRoomInfoByType(Stringtype) { for(inti=0;i<roomCount;i++) { if(type.equals(rooms[i].roomType)) { selectRoomByNum(i); } } } //该客房编号是否能找到 publicbooleanisSelectRoomInfoByNum(intnum) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum) returntrue; } returnfalse; } //根据客房编号查找客房信息 publicvoidselectRoomInfoByNum(intnum) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum) { selectRoomByNum(i); } } } //该客房状态是否能找到 publicbooleanisSelectRoomInfoByState(intstate) { for(inti=0;i<roomCount;i++) { if(state==rooms[i].roomState) returntrue; } returnfalse; } //根据客房状态查找客房信息 publicvoidselectRoomInfoByState(intstate) { for(inti=0;i<roomCount;i++) { if(state==rooms[i].roomState) { selectRoomByNum(i); } } } //查询空房数目 publicvoidselectEmptyRoomCount() { intn=0; for(inti=0;i<roomCount;i++) { if(rooms[i].roomState==0) { n++; } } Tool.p1("空房数目为:"+n); } //修改客房编号 publicvoidupdateRoomNum(intnum,intnum1) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum) { rooms[i].roomNum=num1; } } } //修改客房类型 publicvoidupdateRoomType(intnum,Stringtype) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum) { rooms[i].roomType=type; } } } //修改客房价钱 publicvoidupdateRoomPrice(intnum,doubleprice) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum) { rooms[i].roomPrice=price; } } } //修改客房状态 publicvoidupdateRoomState(intnum,intstate) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomState) { rooms[i].roomState=state; } } } //删除客房信息 publicvoiddelectRoomInfo(intnum) { for(inti=0;i<roomCount;i++) { if(num==rooms[i].roomNum) { for(intj=i;j<roomCount;j++) { rooms[i]=rooms[i+1]; } roomCount--; } } } //添加员工信息 publicvoidaddStaffInfo(Receptionistinfo) { recs[recCount++]=info; } //根据下表查找员工信息 publicvoidselectStaffByNum(inti) { Tool.p1(recs[i].name+"\t"+recs[i].pwd+"\t"+recs[i].age+"\t"+recs[i].tel); } //是否该员工姓名能找到 publicbooleanisSelectStaffInfoByName(Stringname) { for(inti=0;i<recCount;i++) { if(name.equals(recs[i].name)) { returntrue; } } returnfalse; } //根据姓名查询员工信息 publicvoidselectStaffInfoByName(Stringname) { for(inti=0;i<recCount;i++) { if(name.equals(recs[i].name)) { selectStaffByNum(i); } } } //查询员工信息 publicvoidselectStaffInfo() { for(inti=0;i<recCount;i++) { selectStaffByNum(i); } } //修改员工姓名 publicvoidupdateStaffName(Stringname,Stringname1) { for(inti=0;i<recCount;i++) { if(name.equals(recs[i].name)) { recs[i].name=name1; } } } //修改员工密码 publicvoidupdateStaffPwd(Stringname,Stringpwd) { for(inti=0;i<recCount;i++) { if(pwd.equals(recs[i].pwd)) { recs[i].pwd=pwd; } } } //修改员工年龄 publicvoidupdateStaffAge(Stringname,intage) { for(inti=0;i<recCount;i++) { if(age==recs[i].age) { recs[i].age=age; } } } //修改员工电话号码 publicvoidupdateStaffTel(Stringname,Stringtel) { for(inti=0;i<recCount;i++) { if(tel.equals(recs[i].tel)) { recs[i].tel=tel; } } } //删除员工信息 publicvoiddelectStaffInfo(Stringname) { for(inti=0;i<recCount;i++) { if(name.equals(recs[i].name)) { for(intj=i;j<recCount;j++) { recs[j]=recs[j+1]; } recCount--; } } }}3.3前台管理代码publicclassReceptionist{ Stringname; Stringpwd; intage; Stringtel; publicReceptionist(){} publicReceptionist(String_name,String_pwd,int_age,String_tel) { =_name; this.pwd=_pwd; this.age=_age; this.tel=_tel; }}publicclassReceptionistMenu{ ReceptionistManagerrecInfo=newReceptionistManager(); AdminManageradminInfo=newAdminManager(); intmenu=0; intn=3; //前台管理员登录 publicvoidloginMenu()throwsException { while(n>0) { Tool.printMenu1("欢迎进入前台管理员登录界面"); Stringname=Tool.getString("请输入用户名:"); Stringpwd=Tool.getString("请输入密码:"); if(recInfo.isLogin(name,pwd)) { Tool.p1("恭喜您,登录成功!"); mainMenu(); } else { n--; if(n!=0) { Tool.p1("您的用户名或密码错误,还有"+n+"次机会!"); } else { Tool.p1("您今天的登录次数已经用完,请勿非法操作!"); } } if(!Tool.isContinue("是否继续前台管理员登录<y/n>:")) break; } } //前台管理员主菜单 publicvoidmainMenu()throwsException { while(true) { Tool.printMenu1("欢迎进入前台管理员主界面"); menu=Tool.printMenu("客房信息查询,个人信息管理,经营管理(订房退房结房),客户信息管理"); switch(menu) { case1: AdminMenuinfo=newAdminMenu(); info.selectRoomInfoMenu(); break; case2: MyInfoManagerMenu(); break; case3: operationManagerMenu(); break; case4: customerInfoManagerMenu(); break; case0: Tool.p1("退出前台管理员主界面!!"); break; default: Tool.p1("请输入正确的功能选项,只能是<.0>!"); break; } if(!Tool.isContinue("是否继续前台管理员主界面<y/n>:")) break; } } //个人信息管理菜单 publicvoidMyInfoManagerMenu() { while(true) { Tool.printMenu1("欢迎进入个人信息管理界面"); menu=Tool.printMenu("查看个人信息,修改个人信息"); switch(menu) { case1: AdminMenuinfo=newAdminMenu(); info.printStaffInfoTitle(); adminInfo.selectStaffInfoByName(recInfo.myI); break; case2: updateMyPwdMenu(); break; case0: Tool.p1("退出个人信息管理界面!!"); break; default: Tool.p1("请输入正确的功能选项,只能是<1.2.0>!"); break; } if(!Tool.isContinue("是否继续个人信息管理界面<y/n>:")) break; } } //修改个人密码菜单 publicvoidupdateMyPwdMenu() { while(n>0) { Tool.printMenu1("开始修改个人密码"); Stringpwd=Tool.getString("请输入原始密码:"); if(pwd.equals(recInfo.myInfo.pwd)) { Stringpwd1=Tool.getString("请输入新密码:"); recInfo.updateMyPwd(pwd1); Tool.p1("恭喜您,修改密码成功!!"); } else { if(n!=0) { n--; Tool.p1("您输入的密码不正确,还有"+n+"次机会!"); } if(n==0) { Tool.p1("您今天的登录次数已经用完,请勿非法操作!"); break; } } if(!Tool.isContinue("是否继续修改个人密码<y/n>:")) break; } } //经营管理界面 publicvoidoperationManagerMenu()throwsException { while(true) { Tool.printMenu1("欢迎进入经营管理界面"); menu=Tool.printMenu("订房,续房,退房"); switch(menu) { case1: addRoomMenu(); break; case2: continueRoomMenu(); break; case3: checkOutRoomMenu(); break; case0: Tool.p1("退出经营管理界面!!"); break; default: Tool.p1("请输入正确的功能选项,只能是<>!"); break; } if(!Tool.isContinue("是否继续经营管理界面<y/n>:")) break; } } //订房菜单 publicvoidaddRoomMenu() { while(true) { Tool.printMenu1("开始订房"); Tool.p1("请开始输入客户信息!"); Tool.p1(""); CustomercusInfo=newCustomer(); cusI=Tool.getString("请输入客户姓名:"); cusInfo.age=Tool.getInt("请输入客户年龄:"); cusInfo.sex=Tool.getString("请输入客户性别:"); while(true) { cusInfo.id=Tool.getString("请输入客户身份证号(长度必须为18位):"); if(cusInfo.id.length()!=18) { Tool.p1("身份证号必须为18位,您只输入了"+cusInfo.id.length()+"位!!"); } else { break; } } while(true) { cusInfo.tel=Tool.getString("请输入客户手机号(长度必须为11位):"); if(cusInfo.tel.length()!=11) { Tool.p1("手机号必须为11位,您只输入了"+cusInfo.tel.length()+"位!!"); } else { break; } } while(true) { cusInfo.roomNum=Tool.getInt("请输入所订房间的编号:"); if(recInfo.isRoomStateEmpty(cusInfo.roomNum)&&!recInfo.isSelectCustomerInfoByRoomNum(cusInfo.roomNum)) { break; } else { Tool.p1("您所定房间已有客户入住,或不存在,请重新选择!"); } } Tool.p1("该客房信息如下:"); AdminMenuinfo=newAdminMenu(); info.printTitle(); adminInfo.selectRoomInfoByNum(cusInfo.roomNum); cusInfo.days=Tool.getInt("请输入订房的天数:"); cusInfo.money=Tool.getDouble("请输入已交的定金(包含押金100):"); recInfo.addRoom(cusInfo); Tool.p1("该用户信息如下,请核实:"); printTitle(); recInfo.selectCustomerInfoByName(cusI); if(!Tool.isContinue("是否继续订房<y/n>:")) break; } } //续房菜单 publicvoidcontinueRoomMenu() { while(true) { Tool.printMenu1("开始续房"); intnum=Tool.getInt("请输入您要续房的房间号:"); if(adminInfo.isSelectRoomInfoByNum(num)&&!adminInfo.isRoomStatefool(num)) { Tool.p1("该客房的用户信息如下:"); printTitle(); recInfo.selectCustomerInfoByRoomNum(num); intdays=Tool.getInt("请输入您要续订的天数:"); doublemoney=Tool.getDouble("请输入续交的定金数:"); recInfo.continueRoom(num,days,money); Tool.p1("续房成功!该住房信息如下:"); printTitle(); recInfo.selectCustomerInfoByRoomNum(num); } else { Tool.p1("该客房不存在或还未有客人入住,请重新输入!!"); } if(!Tool.isContinue("是否继续续房<y/n>:")) break; } } //退房菜单 publicvoidcheckOutRoomMenu()throwsException { while(true) { Tool.printMenu1("开始退房"); intnum=Tool.getInt("请输入您要退房的房间号:"); if(adminInfo.isSelectRoomInfoByNum(num)&&!adminInfo.isRoomStatefool(num)) { Tool.p1("该客房的用户信息如下:"); printTitle(); recInfo.selectCustomerInfoByRoomNum(num); Stringname=Tool.getString("请输入客户姓名:"); recInfo.checkOutRoom(name,num); if(Tool.isContinue("是否要退此房<y/n>:")) { Tool.printMenu1("退房成功"); recInfo.calFinalMoney(num); Tool.p1("*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*"); Tool.p1("该住房信息如下:"); printTitle1(); recInfo.selectCustomerInfoHistoryByRoomNum(num); } } else { Tool.p1("该客房不存在或还未有客人入住,请重新输入!!"); } if(!Tool.isContinue("是否继续退房<y/n>:")) break; } }4.系统测试4.1引言4.1.1目的对测试项目实施情况进行分析,根据测试结果总结测试的覆盖范围、程序的问题点。本文档的主要读者是本项目的管理人员、设计人员、开发人员和维护人员。4.1.2测试背
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论