酒店预订系统

1.引言

1.1编制目的

1.详细完成对酒店预订系统的概要设计,

2.达到指导详细设计和开发的目的,

3.同时实现和测试人员及用户的沟通。

3.本报告面向开发人员,测试人员及最终用户的编写额,是了解系统的导航。

1.2词汇表

词汇名称 词汇含义 备注
NJUSE 酒店预订系统

2.产品概述

2.1 项目前景

2.1.1 背景与机遇

  • 因为目的地往往是外地,无法全面了解当地的酒店情况,选择范围大大受限,难以选择到最适合的酒店;
  • 提前预订的双方都有风险,酒店担心恶意预订,顾客担心酒店不符合预期;
  • 酒店要及时掌握预订顾客的行程变化也会比 较麻烦,需要频繁的长途联系;
  • 虽然过去的体验能够给未来带来参考,但是时间一长很多信息就会被遗忘掉,过去的参考作用就受到限制。(事实上,过去的出行体验会大大影响人们未来的选择)

2.1.2 业务需求

  • 全面展现任一个地域内的酒店信息,帮助顾客进行更好地比较与选择;
  • 执行信用累计制度,防范恶意预订;
  • 进行房客评价,反映酒店与描述的相符程度;
  • 让酒店可以及时了解到所有预订订单的变化动态;
  • 帮助顾客建立体验历史记录,在顾客预订时发挥历史记录的作用。另外,为了进行网站推广,吸引酒店和顾客的入驻,该网站会在系统中补贴费用帮助酒店进行促销。

2.2 项目功能

2.2.1 客户

  1. 个人基本信息管理
  2. 浏览酒店详细信息
  3. 搜索酒店信息
  4. 生成订单(订单生成时计算多种优惠策略,选择价格最低的方案。不需要 考虑预付订金)
  5. 评价,包括评分和评论
  6. 查看订单
  7. 注册会员(会员分两种普通会员、企业会员。普通会员登记生日、企业会 员登记企业名称)

2.2.2 酒店工作人员

  1. 个⼈基本信息管理
  2. 维护酒店基本信息(地址、商圈、简介、设施服务、星级)
  3. 录入可用客房(类型、数量、原始价格)
  4. 制定酒店促销策略
  5. 更新入住和退房信息
  6. 浏览订单
  7. 订单执行

2.2.3 网站营销人员

  1. 制定网站促销策略
  2. 浏览异常订单执行情况
  3. 信用充值

2.2.4 网站管理员

  1. 添加酒店及其工作人员,查询、更改酒店工作人员信息
  2. 更改管理员密码
  3. 用户管理(客户、酒店工作人员、网站营销人员)

2.3 用户特征

  • 客户:预订酒店的人员。
  • 酒店工作人员:酒店中负责管理空房数量、优惠政策、预订房型的人员,需要对计算机有较高的操作能力。
  • 网站营销人员:网站中主要负责制定营销策略的人员,需要对计算机有较高的操作能力。
  • 网站管理员:构建与维护整个预订系统的人员,需要对计算机有较高的操作能力。

3.逻辑视图

  • 处理静态设计模型

    • 在NJU酒店预订系统中,选择了分层体系结构风格,将系统分为3层(前端展示层、业务逻辑层、数据层)能够很好地示意整个高层抽象。前端展示层包含web页面的实现,业务逻辑层包含业务逻辑处理的实现,数据层负责数据的持久化和访问。

4.组合视图

4.1开发包图

  • 表示软件组件在开发时环境中的静态组织

    • 描述开发包以及相互间的依赖
开发包 依赖的其他开发包
mainui userui, adminui, vo, couponui, hotelui, ordreui
adminui adminblservice, 界面类库包, vo
adminblservice
adminbl adminblservice, admindataservice, userbl
admindataservice Java RMI, po
admindata databaseutility, po, admindataservice, Java RMI
userui userblservice, 界面类库包,vo
userblservice
userbl UserInterface, UserDataClient, UserPo
userdataservice Iava RMI,po
userdata userdataservice,po,databaseutility, Java RMI
hotelui hotelblservice, 界面类库包, vo
hotelblservice
hotelbl hotelblservice, hoteldataservice, orderbl
hoteldataservice Iava RMI,po
hoteldata Java RMI,po,databaseutility, hoteldataservice
couponui couponblservice, 界面类库包, vo
couponblservice
couponbl couponblservice, coupondataservice,hotelbl, userbl
coupondataservice Iava RMI,po
coupondata Java RMI,po,databaseutility, coupondataservice
orderui orderblservice, 界面类库包, vo
orderblservice
orderbl orderblservice, orderdataservice, userbl, hotelbl, couponbl
orderdataservice Iava RMI,po
orderdata Java RMI,po,databaseutility, orderdataservice
vo
po
utilitybl
界面类库包
databaseutility JDBC

4.2运行时进程

  • 表示软件在运行时进程间的交互,描述系统的动态结构

4.3物理部署

  • 处理如何将软件组件映射到硬件基础设施

5.架构设计

5.1模块职责

  • 各层职责
职责
启动模块 负责初始化网络通信机制,启动用户界面
展示层 展示界面
业务逻辑层 对于用户界面的输入响应和业务处理逻辑
数据层 负责数据的持久化及数据访问接口
  • 层之间调用接口
接口 服务调用方 服务提供方
AdminService.* 客户端展示层 客户端业务逻辑层
HotelService.* 客户端展示层 客户端业务逻辑层
RoomService.* 客户端展示层 客户端业务逻辑层
OrderService.* 客户端展示层 客户端业务逻辑层
UserService.* 客户端展示层 客户端业务逻辑层
CouponService.* 客户端展示层 客户端业务逻辑层
CreditService.* 客户端展示层 客户端业务逻辑层
RemarkService.* 客户端展示层 客户端业务逻辑层
*Mapper.* 客户端业务逻辑层 数据层

5.2用户界面层分解

​ 用户页面跳转

职责

模块 职责
adminUI 酒店管理人员的操作界面
userUI 用户界面
orderUI 订单界面
hotelUI 酒店管理界面

接口规范

adminUI需要的服务
服务名 服务
AdminController. addManager 增加酒店管理员
AdminController. getAllManagers 获取所有酒店管理员的信息
AdminController. retrieveByUserId 检索某用户管理的所有酒店Id
AdminController. deleteUser 删除制定的酒店管理人员
RoomController. deleteRoomsByHotelId 删除某酒店下的所有房间
RoomController. insertRoomInfo 添加酒店客房信息
CouponController. getHotelAllCoupon 添加酒店满减优惠策略
CouponController. addHotelTimeCoupon 添加酒店限时优惠策略
CouponController. addHotelMultipleRoomCoupon 添加酒店多间优惠策略
userUI需要的服务
服务名 服务
AccountController. registerAccount 创建新的user
AccountController. login 查找是否存在相应的user,根据输入的userForm返回登陆验证的结果。
AccountController. getUserInfo 根据输入的id查找是否存在相应的user,返回结果
AccountController. updateUserInfo 根据输入的id查找是否存在相应的user,根并返回修改验证结果。
CreditController. retrieveCreditRecord 获取用户信用记录
hotelUI需要的服务
服务名 服务
HotelController. addHotel 根据输入的HotelVO返回创建验证的结果。
HotelController. updateRoomInfo 根据输入的资料返回修改结果
HotelController. retrieveHotelDetails 返回酒店列表
RemarkController. retrieveHotelRemark 获取某个酒店的全部评论给信息
RemarkController. addHotelRemark 用户添加评论
CreditController. retrieveCreditRecord 获取用户信用记录
RoomController. updateRoomInfo 预订酒店后更新客房房间数量
RoomController. getRoomCurNum 获取酒店指定房间剩余数量
RoomController. getRoomInfo 获取某房间的信息
orderUI需要的服务
服务名 服务
OrderController. addOrder 向数据库添加订单
OrderController. getAllOrders 向数据库查询所有的订单
OrderController. getUserOrders 根据用户id向数据库查询该用户订单
OrderController. getManageOrders 获得酒店管理人员管理的酒店下的所有订单
OrderController. annulOrder 撤销订单
OrderController. getHotelOrders 查看酒店的所有订单
OrderController. getRoomOrders 查看某房间的所有订单
OrderController. orderCheckIn 订单check in
OrderController. orderCheckOut 订单check out
OrderController. rmErrorOrder 删除错误订单,并返回信用值
OrderController. errorOrder 如果时间在超过最晚订单执行时间后还没有办理入住,系统自动将其置为异常订单

5.3 业务逻辑层的分解

​ 业务逻辑层的开发包图参见软件体系结构文档。

5.3.1 adminbl模块

  1. 模块概述

    adminbl模块承担的需求:

    i. 用户管理(客户、酒店工作人员)

    ​ \1. 查询用户信息

    ​ \2. 查询,更改酒店工作人员信息。

    ii. 添加酒店及其工作人员

    ​ \1. 需要先添加工作人员,才能为其添加管理的酒店;

    ​ \2. 一个酒店只有一个工作人员账号

    iii. 信用充值

    ​ \1. 如果用户线下充值(系统不予考虑),营销人员可以为用户进行信用 增加

    ​ \2. 增加的信用值为(充值额度*100)

    adminbl模块的职责及接口参见软件系统结构描述文档。

  2. 整体结构

    根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加AdminService接口。业务逻辑层和数据层之间添加AdminMapper接口。由AdminController作为前后端的连接点。

    adminbl模块各个类的职责:

模块 职责
AdminController 负责管理员操作所需要的服务
AdminService 负责管理员操作所需要的服务的实现
  1. 模块内部类的接口规范

    AdminService的接口规范

    接口名 语法 ResponseVO addManager(UserForm userForm);
    AdminService.addManager 前置条件 userFrom符合规范
    后置条件 调用adminMapper.addManager方法
    接口名 语法 List<User> getAllManagers();
    AdminService.getAllManagers 前置条件
    后置条件 调用adminMapper.getAllManagers方法
    接口名 语法 List<User> getAllClients();
    AdminService.getAllClients 前置条件
    后置条件 调用adminMapper.getAllClients方法
    接口名 语法 ResponseVO deleteUser(int userId);
    AdminService.deleteUser 前置条件 userId不为空
    后置条件 调用adminMapper.deleteUser(userId)方法
    接口名 语法 ResponseVO rechargeCredit(int rechargePoint,int userId);
    AdminService.rechargeCredit 前置条件 信息符合规范
    后置条件 调用accountService.updateCredit方法

    AdminService需要的服务

服务名 服务
AdminMapper.addManager 在数据库建立一个新的酒店管理人员账号
AdminMapper.getAllManagers 返回数据库里的所有酒店工作人员
AdminMapper.getAllClients 返回数据库里的所有普通用户
AdminMapper.deleteUser 删除用户
  1. 业务逻辑层的设计原理

    利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。

5.3.2 couponbl模块

  1. 模块概述

    couponbl模块承担的需求:

    i. 制定酒店促销策略

    ​ \1. 生日特惠折扣

    ​ \2. 三间及以上预订特惠

    ​ \3. 满减折扣

    ​ \4. 限时折扣(在特定的期间住宿有折扣)

    ii. 调用所有可使用的优惠券

    couponbl模块的职责及接口参见软件系统结构描述文档。

  2. 整体结构

    根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加CouponService接口和CouponMatchStrategy接口。业务逻辑层和数据层之间添加CouponMapper接口。由CouponController作为前后端的连接点。

    couponbl模块各个类的职责:

模块 职责
CouponController 负责优惠券相关操作所需要的服务
CouponService 负责优惠券相关操作所需要的服务的实现
CouponMatchStrategy 负责各种类型的优惠券的匹配服务
  1. 模块内部类的接口规范

    CouponService的接口规范

接口名 语法 List<Coupon> getMatchOrderCoupon(OrderVO orderVO);
CouponService.getMatchOrderCoupon 前置条件 orderVO符合规范
后置条件 调用CouponMatchStrategy的isMatch方法
接口名 语法 List<Coupon> getHotelAllCoupon(Integer hotelId);
CouponService.getHotelAllCoupon 前置条件 hotelId不为空
后置条件 调用couponMapper.selectByHotelId方法
接口名 语法 CouponVO addHotelTargetMoneyCoupon(HotelTargetMoneyCouponVO couponVO);
CouponService.addHotelTargetMoneyCoupon 前置条件 couponVO符合规范
后置条件 调用couponMapper.insertCoupon方法
接口名 语法 CouponVO addHotelBirthdayCoupon(HotelBirthdayCouponVO couponVO);
CouponService.addHotelBirthdayCoupon 前置条件 couponVO符合规范
后置条件 调用couponMapper.insertCoupon方法
接口名 语法 CouponVO addHotelMultipleRoomCoupon(HotelMultipleRoomCouponVO couponVO);
CouponService.addHotelMultipleRoomCoupon 前置条件 couponVO符合规范
后置条件 调用couponMapper.insertCoupon方法
接口名 语法 CouponVO addHotelTimeCoupon(HotelTimeCouponVO couponVO);
CouponService.addHotelTimeCoupon 前置条件 couponVO符合规范
后置条件 调用couponMapper.insertCoupon方法

​ CouponService需要的服务

服务名 服务
ManageMapper.selectByHotelId 返回某一订单可用的优惠策略列表
ManageMapper.insertCoupon 添加新的优惠券

​ CouponMatchStrategy的接口规范

接口名 语法 boolean isMatch(OrderVO orderVO, Coupon coupon);
CouponMatchStrategy.isMatch 前置条件 orderVO 和 coupon 不为 null
后置条件
  1. 业务逻辑层的设计原理

    利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。

5.3.3 hotelbl模块

  1. 模块概述

    hotelbl模块承担的需求:

    i. 创建酒店

    ii. 获得所需的酒店列表

    iii. 添加房间

    iv. 维护房间信息(数量)

    v. 维护酒店信息(姓名、地址、所属商圈、简介、设施服务、星级)

    vi. 删除酒店

    vii. 添加评论

    hotelbl模块的职责及接口参见软件系统结构描述文档。

  2. 整体结构

    根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加HotelService接口、RoomService接口、RemarkService接口。业务逻辑层和数据层之间添加HotelMapper接口、RoomMapper接口、RemarkMapper接口。由HotelController作为前后端的连接点。

    hotelbl模块各个类的职责:

模块 职责
HotelController 负责酒店相关操作所需要的服务
HotelService 负责酒店相关操作所需要的服务的实现
CouponMatchStrategy 负责酒店房间相关操作所需要的服务的实现
RemarkService 负责酒店评论相关操作所需要的服务的实现
  1. 模块内部类的接口规范

    HotelService的接口规范

    接口名 语法 void addHotel(HotelVO hotelVO) throws ServiceException;
    HotelService.addHotel 前置条件 输入的HotelVO符合规范
    后置条件 调用hotelMapper.insertHotel方法
    接口名 语法 void updateRoomInfo(Integer hotelId, String roomType,Integer rooms);
    HotelService.updateRoomInfo 前置条件 更新的资料符合规范
    后置条件 调用roomService.updateRoomInfo方法
    接口名 语法 List<HotelVO> retrieveHotels();
    HotelService.retrieveHotels 前置条件
    后置条件 调用hotelMapper的selectAllHotel方法
    接口名 语法 HotelVO retrieveHotelDetails(Integer hotelId);
    HotelService.retrieveHotelDetails 前置条件 酒店id符合规范
    后置条件 调用hotelMapper.selectById方法
    接口名 语法 int getRoomCurNum(Integer hotelId,String roomType);
    HotelService.getRoomCurNum 前置条件 输入的id符合规范
    后置条件 调用roomService.getRoomCurNum方法
    接口名 语法 List<HotelVO> retrieveHotelsByManagerId(Integer userId);
    HotelService.retrieveHotelsByManagerId 前置条件 输入userId不为空
    后置条件 调用hotelMapper.selectManagerHotel方法
    接口名 语法 HotelRoom getRoomInfo(Integer roomId);
    HotelService.getRoomInfo 前置条件 输入roomId不为空
    后置条件 调用roomService.getRoomInfo方法
    接口名 语法 ResponseVO deleteHotel(Integer hotelId);
    HotelService.deleteHotel 前置条件 输入hotelId不为空
    后置条件 调用roomService.deleteRoomsByHotelId和hotelMapper.deleteHotel方法
    接口名 语法 ResponseVO updateHotelInfo(HotelInfoVO hotelInfoVO,Integer id);
    HotelService.updateHotelInfo 前置条件 输入信息不为空
    后置条件 调用hotelMapper.updateHotelInfo方法
    接口名 语法 ResponseVO updateHotelRate(Integer id, String rate);
    HotelService.updateHotelRate 前置条件 输入信息不为空
    后置条件 调用hotelMapper.updateHotelRate方法

    HotelService需要的服务

    服务名 服务
    HotelMapper.insertHotel 在数据库插入一个hotel
    HotelMapper.selectAllHotel 返回数据库所有的hotel
    HotelMapper.selectById 根据id返回数据库对应的hotel
    HotelMapper.deleteHotel 删除酒店
    HotelMapper.updateHotelInfo 维护酒店信息
    HotelMapper.updateHotelRate 更新酒店的评分
    HotelMapper.selectManagerHotel 获取某管理员管理的所有hotel

    RoomService的接口规范

    接口名 语法 List<HotelRoom> retrieveHotelRoomInfo(Integer hotelId);
    RoomService.retrieveHotelRoomInfo 前置条件 输入的酒店id符合规范
    后置条件 调用roomMapper.selectRoomsByHotelId方法
    接口名 语法 void insertRoomInfo(HotelRoom hotelRoom);
    RoomService.insertRoomInfo 前置条件 输入的HotelRoom符合规范
    后置条件 调用roomMapper.insertRoom 方法
    接口名 语法 void updateRoomInfo(Integer hotelId, String roomType, Integer rooms);
    RoomService.updateRoomInfo 前置条件 输入的修改信息符合规范
    后置条件 调用roomMapper.updateRoomInfo方法
    接口名 语法 HotelRoom getRoomInfo(Integer roomId);
    RoomService.getRoomInfo 前置条件 输入的roomId不为空
    后置条件 调用roomMapper.getRoomById方法
    接口名 语法 int getRoomCurNum(Integer hotelId, String roomType);
    RoomService.getRoomCurNum 前置条件 输入的资料符合规范
    后置条件 调用roomMapper.getRoomCurNum方法
    接口名 语法 void deleteRoomsByHotelId(Integer hotelId);
    RoomService.deleteRoomsByHotelId 前置条件 输入的hotelId不为null
    后置条件 调用deleteRoomsByHotelId方法
    接口名 语法 ResponseVO updateRoomTotalNum(Integer roomId, Integer totalChange);
    RoomService.updateRoomTotalNum 前置条件 输入有效的信息
    后置条件 调用roomMapper.updateRoomTotalNum方法

    RoomService需要的服务

    服务名 服务
    RoomMapper.updateRoomInfo 向数据库更新酒店信息
    RoomMapper.insertRoom 向数据库插入酒店
    RoomMapper.selectRoomsByHotelId 从数据库根据酒店id查找房间
    RoomMapper.getRoomCurNum 从数据库查询酒店房间现在的数量
    RoomMapper.getRoomById 从数据库根据id查找房间
    RoomMapper.deleteRoomsByHotelId 根据hotelId删除房间
    RoomMapper.updateRoomTotalNum 更新房间的总数

    RemarkService的接口规范

接口名 语法 List<Remark> retrieveHotelRemark(Integer hotelId);
RemarkService.retrieveHotelRemark 前置条件 hotelId 不为空
后置条件 调用RemarkMapper.getRemarkByHotelId方法
接口名 语法 List<Remark> retrieveUserRemark(Integer userId);
RemarkService.retrieveUserRemark 前置条件 userId 不为空
后置条件 调用RemarkMapper.getRemarkByUserId方法
接口名 语法 void addHotelRemark(Remark remark) throws ServiceException;
RemarkService.addHotelRemark 前置条件 remark不为null
后置条件 调用RemarkSMapper.insertRemark方法

​ RemarkService需要的服务

服务名 服务
RemarkMapper.getRemarkByHotelId 获取某个酒店的全部评论给信息
RemarkMapper.getRemarkByUserId 获取某个用户的全部评论给信息
RemarkMapper.insertRemark 用户添加评论
  1. 业务逻辑层的设计原理

    利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。

5.3.4 orderbl模块

  1. 模块概述

    orderbl模块承担的需求:

    i. 预订酒店

    ii.撤销订单

    iii. 更新入住和退房信息

    ​ \1. 如果有订单执行情况,实时更新入住信息(入住时间、预计 离开时间);

    ​ \2. 更新订单的退房信息(实际离开时间)

    ​ \3. 房间只有在实际退房后才可以被再次预定

    ​ \4. 如果有非订单(线下)的入住/退房导致的可用房间发生变化,也要 及时更新信息;

    iv. 浏览订单

    ​ \1. 浏览未执行的房间预订的订单

    ​ \2. 浏览已执行的订单

    ​ \3. 浏览异常和已撤销的订单

    v. 订单执行

    ​ \1. 当用户已入住,改变订单状态为已执行。

    ​ \2. 置为异常订单

    ​ a. 酒店工作人员可以查看本地的异常订单,并手工为其补登记执行 情况(即延迟入住), 该订单置为已执行订单,恢复扣除的信用值

    ​ b. 置为异常的同时扣除用户等于订单的总价值的信用值

    ​ \3. 已执行的订单用户可以获得等于订单价值的信用值增加

    orderbl模块的职责及接口参见软件系统结构描述文档。

  2. 整体结构

    根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加OrderService接口。业务逻辑层和数据层之间添加OrderMapper接口。由OrderController作为前后端的连接点。

    orderbl模块各个类的职责:

模块 职责
OrderController 负责订单相关操作所需要的服务
OrderService 负责订单相关操作所需要的服务的实现
  1. 模块内部类的接口规范

    OrderService的接口规范

    接口名 语法 ResponseVO addOrder(OrderVO orderVO);
    OrderService.addOrder 前置条件 输入的OrderVO符合规范
    后置条件 调用orderMapper.addOrder方法
    接口名 语法 List<Order> getAllOrders();
    OrderService.getAllOrders 前置条件 输入的OrderVO符合规范
    后置条件 调用orderMapper.getAllOrders方法
    接口名 语法 List<Order> getUserOrders(int userid);
    OrderService.getUserOrders 前置条件 输入的用户id符合规范
    后置条件 调用orderMapper.getUserOrders方法
    接口名 语法 List<Order> getManageOrders(int userId);
    OrderService.getManageOrders 前置条件 输入的用户id符合规范
    后置条件 调用orderMapper.getHotelOrders方法
    接口名 语法 ResponseVO annulOrder(int orderId);
    OrderService.annulOrder 前置条件 输入的orederid符合规范
    后置条件 调用orderMapper.annulOrder方法
    接口名 语法 List<Order> getHotelOrders(Integer hotelId);
    OrderService.getHotelOrders 前置条件 输入的hotelid符合规范
    后置条件 调用orderMapper.getHotelOrders方法
    接口名 语法 List<Order> getRoomOrders(Integer roomId)
    OrderService.getRoomOrders 前置条件 输入的roomid符合规范
    后置条件 调用orderMapper.getRoomOrders方法
    接口名 语法 ResponseVO orderCheckIn(Integer orderId);
    OrderService.orderCheckIn 前置条件 输入的orderid符合规范
    后置条件 调用orderMapper.updateCheckInTime和orderMapper.updateState方法
    接口名 语法 ResponseVO orderCheckOut(Integer orderId);
    OrderService.orderCheckOut 前置条件 输入的orderid符合规范
    后置条件 调用orderMapper.updateCheckOutTime和orderMapper.updateState方法
    接口名 语法 ResponseVO errorOrder(Integer orderId);
    OrderService.errorOrder 前置条件 输入的orderid符合规范
    后置条件 调用orderMapper.updateErrorTime和orderMapper.updateState方法
    接口名 语法 ResponseVO rmErrorOrder(Integer orderId);
    OrderService.rmErrorOrder 前置条件 输入的orderid符合规范
    后置条件 调用checkIn方法
    接口名 语法 ResponseVO getOrderByOrderId(Integer orderId);
    OrderService.getOrderByOrderId 前置条件 输入的orderid符合规范
    后置条件 调用orderMapper.getOrderById方法

    OrderService需要的服务

    服务名 服务
    OrderMapper.addOrder 向数据库添加订单
    OrderMapper.getAllOrders 向数据库查询所有的订单
    OrderMapper.getUserOrders 根据用户id向数据库查询该用户订单
    OrderMapper.annulOrder 撤销订单
    OrderMapper.getHotelOrders 查看酒店的所有订单
    OrderMapper.getRoomOrders 查看某房间的所有订单
    OrderMapper.updateCheckInTime 增加订单check in时间
    OrderMapper.updateCheckOutTime 增加订单check out时间
    OrderMapper.updateErrorTime 增加订单异常时间
    OrderMapper.updateState 更改订单状态
  2. 业务逻辑层的设计原理

    利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。

5.3.5 userbl模块

  1. 模块概述

    userbl模块承担的需求:

    i. 个人基本信息

    ​ \1. 维护基本信息(姓名或名称,联系方式、信用)

    ​ a. 信用不能修改,只能查看

    ​ \2. 浏览自己未执行的正常订单

    ​ a. 可以撤销自己未执行的正常订单

    ​ b. 如果撤销的订单距离最晚订单执行时间不足 6 个小时,撤销的同时扣除信用值,信用值 为订单的(总价值*1/2)

    ​ c. 撤销的订单并不会删除数据,只是置为已撤销状态,记录撤销时间

    ​ \3. 浏览自己已执行的正常订单

    ​ \4. 浏览自己异常订单和已撤销订单

    ​ \5. 信用记录查看:查看自己每一次的信用变化情况

    ​ a. 时间,订单号,动作(订单执行、订单异常、订单撤销、充值), 信用度变化、信用度结果

    ii. 注册

    iii. 登陆

    iv. 数据加密

    ​ \1.采用了Base64加密解密方法(用户的账号、密码、姓名、联系方式必须密文存储)

    userbl模块的职责及接口参见软件系统结构描述文档。

  2. 整体结构

    根据体系结构的设计,我们将系统分为了展示层、业务逻辑层、数据层。每一层之间为了增加灵活性,我们添加了接口。展示层和业务逻辑层之间,我们添加AccountService接口、EncryptionService接口、CreditService接口。业务逻辑层和数据层之间添加AccountMapper接口和CreditMapper接口。由AccountController作为前后端的连接点。

    userbl模块各个类的职责:

模块 职责
AccountController 负责用户相关操作所需要的服务
AccountService 负责用户相关操作所需要的服务的实现
EncrytionService 对用户的信息进行加密和解密
CreditService 负责用户信用值相关操作所需要的服务的实现
  1. 模块内部类的接口规范

    AccountService的接口规范

    接口名 语法 ResponseVO registerAccount(UserVO userVO);
    AccountService.registerAccount 前置条件 userVO符合规范
    后置条件 创建新的user
    接口名 语法 User login(UserForm userForm);
    AccountService.login 前置条件 userFrom符合规范
    后置条件 调用accountMapper.getAccountByEmail方法
    接口名 语法 User getUserInfo(int id);
    AccountService.getUserInfo 前置条件 输入id合法且存在
    后置条件 调用accountMapper.getAccountById方法
    接口名 语法 ResponseVO updateUserInfo(int id, String password,String username,String phonenumber);
    AccountService.updateUserInfo 前置条件 1. 输入的id合法且存在 2. 更改的信息符合规范。
    后置条件 调用accountMapper.updateAccount方法
    接口名 语法 void updateCredit(int id,double credit);
    AccountService.updateCredit 前置条件 1. 输入的id合法且存在 2. 更改的信息符合规范。
    后置条件 调用AccountMapper.updateCredit方法
    接口名 语法 String getNameById(int id);
    AccountService.getNameById 前置条件 1. 输入的id合法且存在
    后置条件 调用AccountMapper.getNameById方法

AccountService需要的服务

服务名 服务
AccountMapper.createNewAccount 在数据库创建一个新的账号
AccountMapper.getAccountByEmail 在数据库根据email查找账号信息
AccountMapper.getAccountById 在数据库根据用户ID查找账号信息
AccountMapper.getNameById 在数据库根据id查找姓名
AccountMapper.updateAccount 在数据库更新用户信息

EncryptionService 接口规范

接口名 语法 String encryptionOfData(String data);
EncryptionService.encryptionOfData 前置条件 输入不为null
后置条件
接口名 语法 String decryptionOfData(String data);
EncryptionService.decryptionOfData 前置条件 输入不为null
后置条件
接口名 语法 User encryptionOfUser(User user);
EncryptionService.encryptionOfUser 前置条件 输入不为null
后置条件
接口名 语法 User decryptionOfUser(User user);
EncryptionService.decryptionOfUser 前置条件 输入不为null
后置条件
接口名 语法 UserForm encryptionOfUserForm(UserForm userForm);
EncryptionService.encryptionOfUserForm 前置条件 输入不为null
后置条件
接口名 语法 UserForm decryptionOfUserForm(UserForm userForm);
EncryptionService.decryptionOfUserForm 前置条件 输入不为null
后置条件

CreditService的接口规范

接口名 语法 List<Credit> retrieveCreditRecord(Integer userId);
CreditService.retrieveCreditRecord 前置条件 userId不为空
后置条件 调用creditMapper.selectByUserId方法
接口名 语法 void addCreditRecord(Credit credit);
CreditService.addCreditRecord 前置条件 credit不为null
后置条件 调用creditMapper.addCreditRecord方法
接口名 语法 void rmCreditRecord(Integer orderId);
CreditService.rmCreditRecord 前置条件 orderId符合规范
后置条件 调用creditMapper.rmCreditRecord方法

​ CreditService需要的服务

服务名 服务
CreditMapper.addCreditRecord 在数据库中增加一条信用记录
CreditMapper.rmCreditRecord 在数据库中删除一条信用记录
CreditMapper.selectByUserId 在数据库中获取指定用户的信用记录
  1. 业务逻辑层的设计原理

    利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的Service。

5.4数据层分解

职责

模块 职责
AccountMapper 基于Account的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务
AdminMapper 基于Admin的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务
HotelMapper 基于Hotel的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务
RoomMapper 基于Room的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务
OrderMapper 基于Order的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务
RemarkMapper 基于Remark的持久化数据库的接口,提供集体载入、集体保存、增、改、查服务
CreditMapper 基于Credit的持久化数据库的接口,提供集体载入、集体保存、增、删、改、查服务

接口规范

AccountMapper
接口名 语法 int createNewAccount(User user);
AccountMapper. createNewAccount 前置条件 同样id的user不存在
后置条件 增加一个user
接口名 语法 User getAccountByName(@Param(“email”) String email);
AccountMapper. getAccountByName 前置条件
后置条件 按Email查找返回相应的user结果
接口名 语法 User getAccountById(@Param(“id”) int id);
AccountMapper. getAccountById 前置条件
后置条件 按id查找并返回相应的user结果
接口名 语法 int updateAccount(@Param(“id”) int id, @Param(“password”) String password,@Param(“userName”) String username, @Param(“phoneNumber”) String phonenumber);
AccountMapper. updateAccount 前置条件 在数据库中存在同样id的user
后置条件 更新一个user
AdminMapper
接口名 语法 int addManager(User user);
AdminMapper. addManager 前置条件 同样id的user不存在
后置条件 创建一个user
接口名 语法 List<User> getAllManagers();
AdminMapper. getAllManagers 前置条件
后置条件 返回包含所有user的列表
HotelMapper
接口名 语法 int insertHotel(Hotel hotel);
HotelMapper. insertHotel 前置条件 同样id的hotel不存在
后置条件 创建一个hotel
接口名 语法 List<HotelVO> selectAllHotel();
HotelMapper. selectAllHotel 前置条件
后置条件 返回包含所有的hotel的列表
接口名 语法 HotelVO selectById(@Param(“id”) Integer id);
HotelMapper. selectById 前置条件 在数据库存在同样id的hotel
后置条件 按id查找并返回相应的hotel
RoomMapper
接口名 语法 int updateRoomInfo(@Param(“hotelId”) Integer hotelId,@Param(“roomType”) String roomType,@Param(“curNum”) Integer curNum);
RoomMapper. updateRoomInfo 前置条件 在数据库存在同样id的room
后置条件 更新一个room
接口名 语法 int insertRoom(HotelRoom hotelRoom);
RoomMapper. insertRoom 前置条件 同样id的room不存在
后置条件 创建一个room
接口名 语法 List<HotelRoom> selectRoomsByHotelId(@Param(“hotelId”) Integer hotelId);
RoomMapper. selectRoomsByHotelId 前置条件
后置条件 按hotel的id查找并返回相应的room
接口名 语法 int getRoomCurNum(@Param(“hotelId”) Integer hotelId,@Param(“roomType”) String roomType);
RoomMapper. getRoomCurNum 前置条件
后置条件 按hotel的id以及roomType查找并返回相应的room的数量
OrderMapper
接口名 语法 int addOrder(Order order);
OrderMapper. addOrder 前置条件 同样id的order不存在
后置条件 创建一个order
接口名 语法 List<Order> getAllOrders();
OrderMapper. getAllOrders 前置条件
后置条件 返回包含所有order的列表
接口名 语法 List<Order> getUserOrders(@Param(“userid”) int userid);
OrderMapper. getUserOrders 前置条件 数据库存在同样id的user
后置条件 按userid查找并返回相应的order列表
RemarkMapper
接口名 语法 int insertRemark(Remark remark);
RemarkMapper. insertRemark 前置条件 同样id的Remark不存在
后置条件 创建一个remark
接口名 语法 List getRemarkByHotelId(@Param(“hotelId”) Integer hotelId);
RemarkMapper. getRemarkByHotelId 前置条件
后置条件 返回包含某一个酒店评论的列表
接口名 语法 List getRemarkByUserId(@Param(“userId”) Integer userId);
RemarkMapper. getRemarkByUserId 前置条件
后置条件 返回包含某一个用户评论的列表
CreditMapper
接口名 语法 int addCreditRecord(Credit credit);
CreditMapper. addCreditRecord 前置条件
后置条件 创建一个creditRecord
接口名 语法 int rmCreditRecord(@Param(“orderId”) Integer orderId);
CreditMapper. rmCreditRecord 前置条件
后置条件 删除某一条订单的信用改变
接口名 语法 List selectByUserId(@Param(“userId”) Integer userId);
CreditMapper. selectByUserId 前置条件
后置条件 返回包含某一个用户评论的信用

6.信息视角

  • 描述数据持久化对象(PO)

    • 属性及其定义

      1. Coupon类

        包含了优惠券id、描述、名称、优惠金额、使用门槛、时间

      public class Coupon {                   // 优惠券难道不是 每个人有的优惠券种类不一样吗???????????????????好像没实现?/*** 优惠券id*/private int id;/*** 优惠券描述*/private String description;/*** 如果为-1 代表是网站推出的优惠*/private Integer hotelId;/*** 优惠券类型 1生日特惠 2多间特惠 3满减优惠 4限时优惠*/private Integer couponType;/*** 优惠券名称*/private String couponName;/*** 优惠券使用门槛*/private double targetMoney;/*** 折扣*/private double discount;              /*** 优惠券优惠金额*/private double discountMoney;/*** 可用时间*/private LocalDateTime startTime;/*** 失效时间*/private LocalDateTime endTime;/*** 优惠券状态 是否已经失效 1可用 0失效*/private Integer status;
      
      1. Hotel类

        包含了id、名称、地址、商圈、酒店管理员id、电话

      public class Hotel {private Integer id;private String hotelName;private String address;/*** 商圈*/private BizRegion bizRegion;private HotelStar hotelStar;private Double rate;private String description;private String phoneNum;/*** 酒店管理员id*/private Integer managerId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getHotelName() {return hotelName;}public void setHotelName(String hotelName) {this.hotelName = hotelName;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public BizRegion getBizRegion() {return bizRegion;}public void setBizRegion(BizRegion bizRegion) {this.bizRegion = bizRegion;}public HotelStar getHotelStar() {return hotelStar;}public void setHotelStar(HotelStar hotelStar) {this.hotelStar = hotelStar;}public Double getRate() {return rate;}public void setRate(Double rate) {this.rate = rate;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getPhoneNum() {return phoneNum;}public void setPhoneNum(String phoneNum) {this.phoneNum = phoneNum;}public Integer getManagerId() {return managerId;}public void setManagerId(Integer managerId) {this.managerId = managerId;}
      }
      
      1. HotelRoom类

        包含了id、房间类型、酒店id、总量、金额、剩余房间数

      public class HotelRoom {private Integer id;private RoomType roomType;private Integer hotelId;private double price;/*** 当前剩余可预定房间数*/private int curNum;/*** 某类型房间总数*/private int total;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public RoomType getRoomType() {return roomType;}public void setRoomType(RoomType roomType) {this.roomType = roomType;}public Integer getHotelId() {return hotelId;}public void setHotelId(Integer hotelId) {this.hotelId = hotelId;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getCurNum() {return curNum;}public void setCurNum(int curNum) {this.curNum = curNum;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}
      }
      
      1. Order类

        包含id、用户id、酒店id、酒店名称、入住时间、离开时间、房间类型、房间数量、人数、是否有儿童、创建时间、金额、客户名称、电话、取消日期,错误信息

      public class Order {private Integer id;private Integer userId;private Integer hotelId;private String hotelName;private String checkInDate;private String checkOutDate;private String roomType;private Integer roomNum;private Integer roomId;private Integer peopleNum;private boolean haveChild;private String createDate;private Double price;private String clientName;private String phoneNumber;private String orderState;private String cancellationDate;private String checkInTime;private String checkOutTime;private String errorDate;
      
      1. User类

        包含id、Email、密码、用户名、电话、信用值、用户类型

      public class User {private Integer idprivate String email;private String password;private String userName;private String phoneNumber;private double credit;private UserType userType;private String birthday;
      

      ​ 6.Manage

      public class Manage {private Integer id;private Integer userId;private Integer hotelId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public Integer getHotelId() {return hotelId;}public void setHotelId(Integer hotelId) {this.hotelId = hotelId;}
      }
      

      ​ 7.Credit

      public class Credit {private int id;private String changeTime;private Integer userId;private Integer orderId;/*** 行为类型 1订单执行 2订单异常 3订单撤销 4充值*/private String actionType;private double creditChange;private double creditResult;
      

      ​ 8.Remark

      public class Remark {private Integer id;private Integer userId;private Integer hotelId;private String content;private Integer star;private String remarkTime;
      

♻️ 资源

大小: 629 KB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248618

基于Java+Mysql实现酒店预订系统【100010045】相关推荐

  1. 基于jsp+Java+mysql的酒店预订系统

    介绍: 基于JSP的酒店预订系统(MySQL版) 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释. 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善. 开发环境: MySQL 5.0 ...

  2. 基于java+jsp的酒店预订系统

    介绍: 基于JSP的酒店预订系统(MySQL版) 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释. 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善. 开发环境: MySQL 5.0 ...

  3. 基于java+jsp+mysql的酒店预订系统

    介绍: 基于JSP的酒店预订系统(MySQL版) 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释. 2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善. 开发环境: MySQL 5.0 ...

  4. java机票编程_基于java的网上飞机票预订系统

    [实例简介] 使用java和sql server 设计的网上飞机票预订系统的详细代码设计.. [实例截图] [核心代码] kys └── kys ├── src │   ├── action │   ...

  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店预订系统

    管理员能够实现如下功能: 管理员登录功能 会员信息管理, 显示所有会员信息, 可以删除相应会员 客房信息管理,添加和删除客房类型,添加和删除客房,编辑客房信息 预定信息管理, 查看和删除用户的预定信息 ...

  6. 基于springboot vue elementui酒店预订系统源码(毕设)

    开发环境及工具: 大等于jdk1.8,大于mysql5.5,nodejs,idea(eclipse),vscode(webstorm) 技术说明: springboot mybatis vue ele ...

  7. 酒店预订系统(酒店管理系统(java毕业设计)

    源码编号:B-E85 项目名称:基于JSP+Servlet的酒店预订系统 源码作者:霹雳.逍遥游制作 论文作者:逍遥游撰写 当前版本:V3.0版本 用户类型:双角色(用户.管理员) 项目架构:B/S架 ...

  8. 基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档)

    基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可 ...

  9. 互联网酒店预订系统的服务端架构图-4

    互联网酒店预订系统的服务端架构图 1.技术架构说明 2.访问层 3.接入层 4.服务层 5.数据层 说明:儒猿技术窝基于RocketMQ的互联网酒店预订系统项目实战学习笔记 1.技术架构说明 2.访问 ...

最新文章

  1. python代码学习-数据处理图片加遮挡、噪声、模糊
  2. 什么端口可以抓LINUX,linux下开启某个端口的方法:可用于SQL
  3. python中主要内建函数
  4. 机器翻译(洛谷-P1540)
  5. 【译】 Intelligent Agent Based RFID Wireless Body Sensor Mesh Network
  6. css修改select选择框option被选中的背景颜色_这 16 个 CSS 伪类,助你提升布局效率!
  7. (8)数据结构-循环队列
  8. 居民身份证号码查询系统
  9. java 打印出库单_使用Jasperreporter生成入库出库单打印等报表操作
  10. 微机原理-80386(1)
  11. 人生这么短,哪有空嫌晚
  12. CSS模块、筛选模块、文档处理(CUD)模块、事件模块
  13. Daily Reading Time-十月
  14. WebView 视频播放,全屏按钮显示不出来,全屏后不能播放视频
  15. java导出excel自定义表头,架构师必备!
  16. 解决win10右键桌面出现闪屏问题
  17. 最优传输系列(一):最优传输入门及Monge-Kantorovitch Problem
  18. 对国内游戏产业的无力吐槽
  19. pacemaker+corosync 搭建一主两从PG集群
  20. windows10安装cuda10.2

热门文章

  1. Java新版本API发送新浪微博可能会出现的问题呢
  2. 通达OA-今日学习:电子签章是怎么回事?
  3. 第九部分 代理的使用(代理设置,代理池的搭建,用代理获取微信公众号文章)...
  4. cv::StereoCalibrate 源码解析 (三)—— 部分函数解析
  5. 京东开源项目之列表解决方案Drip-Table
  6. 配置文件加密(Jasypt的简单使用)
  7. Hyperapp源码分析
  8. 基于海思3520DV400的FTP移植
  9. 项目实训-智能生物序列分析平台-药物推荐后端日志
  10. 不借助第三方变量交换两个变量的值(多种方法)