基于Java+Mysql实现酒店预订系统

酒店预订系统

1.引言

1.1编制目的

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

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

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

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

1.2词汇表

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

1.3参考资料

《软件工程与计算(卷二)软件开发的技术基础》

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开发包图

  • 表示软件组件在开发时环境中的静态组织
    • 描述开发包以及相互间的依赖
开发包依赖的其他开发包
mainuiuserui, adminui, vo, couponui, hotelui, ordreui
adminuiadminblservice, 界面类库包, vo
adminblservice
adminbladminblservice, admindataservice, userbl
admindataserviceJava RMI, po
admindatadatabaseutility, po, admindataservice, Java RMI
useruiuserblservice, 界面类库包,vo
userblservice
userblUserInterface, UserDataClient, UserPo
userdataserviceIava RMI,po
userdatauserdataservice,po,databaseutility, Java RMI
hoteluihotelblservice, 界面类库包, vo
hotelblservice
hotelblhotelblservice, hoteldataservice, orderbl
hoteldataserviceIava RMI,po
hoteldataJava RMI,po,databaseutility, hoteldataservice
couponuicouponblservice, 界面类库包, vo
couponblservice
couponblcouponblservice, coupondataservice,hotelbl, userbl
coupondataserviceIava RMI,po
coupondataJava RMI,po,databaseutility, coupondataservice
orderuiorderblservice, 界面类库包, vo
orderblservice
orderblorderblservice, orderdataservice, userbl, hotelbl, couponbl
orderdataserviceIava RMI,po
orderdataJava RMI,po,databaseutility, orderdataservice
vo
po
utilitybl
界面类库包
databaseutilityJDBC

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 getAllManagers();
AdminService.getAllManagers前置条件
后置条件调用adminMapper.getAllManagers方法
接口名语法List 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方法
  1. 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 getMatchOrderCoupon(OrderVO orderVO);
CouponService.getMatchOrderCoupon前置条件orderVO符合规范
后置条件调用CouponMatchStrategy的isMatch方法
接口名语法List 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 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 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方法
  1. HotelService需要的服务
服务名服务
HotelMapper.insertHotel在数据库插入一个hotel
HotelMapper.selectAllHotel返回数据库所有的hotel
HotelMapper.selectById根据id返回数据库对应的hotel
HotelMapper.deleteHotel删除酒店
HotelMapper.updateHotelInfo维护酒店信息
HotelMapper.updateHotelRate更新酒店的评分
HotelMapper.selectManagerHotel获取某管理员管理的所有hotel
  1. RoomService的接口规范
接口名语法List 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方法
  1. RoomService需要的服务
服务名服务
RoomMapper.updateRoomInfo向数据库更新酒店信息
RoomMapper.insertRoom向数据库插入酒店
RoomMapper.selectRoomsByHotelId从数据库根据酒店id查找房间
RoomMapper.getRoomCurNum从数据库查询酒店房间现在的数量
RoomMapper.getRoomById从数据库根据id查找房间
RoomMapper.deleteRoomsByHotelId根据hotelId删除房间
RoomMapper.updateRoomTotalNum更新房间的总数
  1. RemarkService的接口规范
接口名语法List retrieveHotelRemark(Integer hotelId);
RemarkService.retrieveHotelRemark前置条件hotelId 不为空
后置条件调用RemarkMapper.getRemarkByHotelId方法
接口名语法List 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 getAllOrders();
OrderService.getAllOrders前置条件输入的OrderVO符合规范
后置条件调用orderMapper.getAllOrders方法
接口名语法List getUserOrders(int userid);
OrderService.getUserOrders前置条件输入的用户id符合规范
后置条件调用orderMapper.getUserOrders方法
接口名语法List getManageOrders(int userId);
OrderService.getManageOrders前置条件输入的用户id符合规范
后置条件调用orderMapper.getHotelOrders方法
接口名语法ResponseVO annulOrder(int orderId);
OrderService.annulOrder前置条件输入的orederid符合规范
后置条件调用orderMapper.annulOrder方法
接口名语法List getHotelOrders(Integer hotelId);
OrderService.getHotelOrders前置条件输入的hotelid符合规范
后置条件调用orderMapper.getHotelOrders方法
接口名语法List 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方法
  1. 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更改订单状态
  1. 业务逻辑层的设计原理
    利用委托式控制风格,每个界面需要访问的业务逻辑由各自的控制器委托给不同的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方法
  1. 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 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 getAllManagers();
AdminMapper. getAllManagers前置条件
后置条件返回包含所有user的列表
HotelMapper
接口名语法int insertHotel(Hotel hotel);
HotelMapper. insertHotel前置条件同样id的hotel不存在
后置条件创建一个hotel
接口名语法List 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 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 getAllOrders();
OrderMapper. getAllOrders前置条件
后置条件返回包含所有order的列表
接口名语法List 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;
    2.  **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;
    }
}
    3.  **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;
    }
}
    4.  **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;
    5.  **User类**  

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

public class User {
    private Integer id
    private 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值