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

news2024/11/24 0:54:30

酒店预订系统

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

  • 表示软件组件在开发时环境中的静态组织
    • 描述开发包以及相互间的依赖
开发包依赖的其他开发包
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<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 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;
      

♻️ 资源

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink基本转换算子

文章目录1.映射&#xff08;map&#xff09;2.过滤&#xff08;filter&#xff09;3.扁平映射&#xff08;flatMap&#xff09;4.按键分区&#xff08;keyBy&#xff09;5. 简单聚合&#xff08;sum&#xff0c;min&#xff0c;max等&#xff09;6.归约聚合&#xff08;reduce&…

m基于LDPC+QPSK通信链路误码率matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC ( Low-density Parity-check&#xff0c;低密度奇偶校验&#xff09;码是由 Gallager 在1963 年提出的一类具有稀疏校验矩阵的线性分组码 (linear block codes)&#xff0c;然而在接下来的 …

第五届“强网”拟态防御国际精英挑战赛在南京举行——开辟网络安全新赛道 引领网络弹性新优势

12月15日&#xff0c;第五届“强网”拟态防御国际精英挑战赛在南京紫金山实验室隆重开幕&#xff0c;来自国内外60支顶尖战队将通过云上和线下相结合的方式展开72小时的高强度对抗。大赛组委会主席、紫金山实验室首席科学家、中国工程院邬江兴院士指出&#xff0c;本届挑战赛瞄…

jvm内存模型+类加载机制+垃圾手机器

1、类加载器分类 1、引导类加载器&#xff0c;负责加载支撑Jre/lib目录下的核心类库 2、扩展类加载器&#xff1a;负责加载Jre/lib目录下的ext扩展类jar包 3、应用程序类加载器&#xff1a;负责加载classpath下的类包 4、自定义类加载器&#xff1a;负责加载用户自定义路径下的…

值得思索的:ArrayList和线性表,你确定错过这次机会

线性表&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条…

Go项目实战:01-聊天室+map竞争需要上锁

实现一个聊天室&#xff08;群&#xff09;&#xff1a; 功能分析&#xff1a; 1、上线下线2、聊天&#xff1a;其他人和自己都可以看到聊天消息3、查询当前的聊天室用户所有人的名字4、可以修改自己的名字5、超时潜水踢出机制 技术点分析&#xff1a; 1、socket tcp编程2、…

Adam算法及python实现

文章目录算法介绍代码实现结果展示参考算法介绍 Adam算法的发展经历了&#xff1a;SGD->SGDM->SGDNA->AdaGrad->AdaDelta->Adam->Adamax的过程。它是神经网络优化中的常用算法&#xff0c;在收敛速度上比较快&#xff0c;比SGD对收敛速度的纠结上有了很大的…

单商户商城系统功能拆解46—应用中心—足迹气泡

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

基于微信小程序的课程分享平台-计算机毕业设计

项目介绍 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…

[附源码]Node.js计算机毕业设计高校就业管理信息系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

学生竞赛网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;通知类型、通知信息、学院信息、学生信息、学科信息、竞赛信息、报名信 息、成果上传、评分排名 管…

YOLOv5小目标切图检测

当我们在检测较大分辨率的图片时&#xff0c;对小目标的检测效果一直是较差的&#xff0c;所以就有了下面几种方法&#xff1a; 将图片压缩成大尺寸进行训练&#xff08; 想法&#xff1a;没显存&#xff0c;搞不来&#xff09;添加小检测头&#xff08;想法&#xff1a;P5模型…

【爬虫实战项目】Python爬虫批量下载相亲网站数据并保存本地(附源码)

前言 今天给大家介绍的是Python爬虫批量下载相亲网站图片数据&#xff0c;在这里给需要的小伙伴们代码&#xff0c;并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫&#xff0c;基本的是加请求头&#xff0c;但是这样的纯文本数据爬取的人会…

数据结构---树和二叉树

树和二叉树定义二叉树二叉树的物理结构链式存储数组二叉树应用查找维持相对顺序二叉树的遍历深度优先遍历前序遍历中序遍历后序遍历二叉树广度优先遍历层序遍历定义 有且仅有一个特定的称为根的节点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互…

数据结构与算法——Java实现栈、逆波兰计算器(整数加减乘除)

目录 一、栈 1.1 基本介绍 1.2 栈的思路分析 1.3 栈的代码实现 二、栈实现综合计算器 2.1 思路分析 2.2 代码实现&#xff08;中缀表达式实现&#xff09; 三、栈的前缀&#xff08;波兰&#xff09;、中缀、后缀&#xff08;逆波兰&#xff09;表达式 3.1 表达式的介绍…

访问pcie总线地址内容

调用代码如下&#xff1a; uint32_t value;void * addr;printk("------1--------\n");addr0x2730000;struct resource *res;char const *name dev_name(&pdev->dev);printk("dev_name%s\n", name);res request_mem_region(addr, 16, "name1&…

【语音之家公开课】SRD: A Dataset and Benchmark Perspective

本次语音之家公开课邀请到陈果果进行分享Speech Recognition Development: A Dataset and Benchmark Perspective。 公开课简介 主题&#xff1a;Speech Recognition Development: A Dataset and Benchmark Perspective 时间&#xff1a;12月15日&#xff08;周四&#xff09…

web网页设计期末课程大作业:美食餐饮文化主题网站设计——HTML+CSS+JavaScript美食餐厅网站设计与实现 11页面

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

C# IO及文件管理

一 System.IO ① System.IO名字空间&#xff1b; ② 提供了许多用于&#xff1b; ③ 文件和数据流进行读写操作的类&#xff1b; 二 流的分类 1 Stream类 按存取位置分&#xff1a;FileStream,MemeryStream,BufferedStream; 2 读写类 BinaryReader和BinaryWriter; TextRe…

从 0 到 1 搞一个 Compose Desktop 版本的玩天气之打包

从 0 到 1 搞一个 Compose Desktop 版本的玩天气之打包 大家好&#xff0c;前两篇文章大概介绍了下上手 Compose Desktop 和自定义绘制时遇到的一些问题&#xff0c;项目的最终实现效果如下&#xff1a; 视频代码写好了&#xff0c;该弄的动画也弄了&#xff0c;该请求的网络数…