1、快乐买网上商城详细设计说明书 0. 导言 0.1 目的 本文档的目的是描述快乐买网上商城项目的详细设计,其主要内容包括: 系统功能简介 系统详细设计简述 在SSH框架下各个模块的分层结构 本文档的预期读者是: 设计人员 开发人员 项目管理人员 测试人员 0.2 范围 该文档定义了系统的各个模块和模块接口,但未确定单元的具体实现,这部分内容将在编码实现中确定。 0.3 引用标准 [1] 《企业文档格式标准》V1.1, XXX软件有限公司。 [2] 《软件详细设计报告格式标准》V1
2、1,XXX软件有限公司软件工程过程化组织 0.4 参考资料 [1] 《实战Struts》,Ted Husted,机械工业出版社 [2] 《Spring Live》,Matt Raible, 0.5 版本更新信息 本文档版本更新记录如表C-1所示: 表C-1 版本更新记录 修改编号 修改日期 修改后版本 修改位置 修改内容概述 000 2015-2-18 0.1 全部 初始发布版本 1. 系统设计概述 根据快乐买网上商城系统的概要设计,系统分前台业务和后台业务, 前台业务是针对终端用
3、户使用,用户注册成网站会员后可以浏览商品,选购商品,秒杀商品等。访问个人中心还可以管理个人信息,购物车和订单。其功能模块如下图所示: 后台业务是针对管理员用户使用,管理员登录后台系统后可以对系统基本资料进行管理,如商品管理,用户管理,管理员账户管理,订单管理,评价管理等。其功能模块如下图所示: 2. 详细设计概述 本系统采用了SSH框架体系结构的设计,在整个开发过程中,尽可能采用复用的原则,例如使用工厂模式,JAVA反射机制达到统一数据库操作,统一结果显示等。 本文档的详细设计主要是按照SSH框架对视图层JSP、控制器Struts、业务层Spring和
4、持久层Hibernate进行约定,为下一步的编码提供基础。 3. 详细设计 系统前台业务实现 3.1用户注册模块 用户注册模块负责前台用户成为网站会员,注册成功的用户信息添加到users表中 3.1.1 实现流程图 3.1.2 输入输出规则 用户注册模块输入输出规则 模块名称 用户注册 功能描述 用户注册成功后允许登录系统并享有注册用户的权限 用户角色 游客 模块触发条件 打开首页选择“立即注册” 输入规则 输入用户基本信息。要求符合格式,另外账号不能重复,邮箱不能重复 输出结果 注册成功后打开登录界面
5、 关键算法 1.查询数据中是否存在相同的账号和邮箱 2.格式验证 3.验证码的生成和验证 数据库操作 查询用户表,增加用户信息 3.1.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) register.jsp index.jsp header.jsp footer.jsp UserAction.java ValidateCodeServlet.java IUserBiz.java UserBizImpl.java IUserDao.java UserDaoImpl.
6、java 视图层页面设计 界面 JSP 功能描述 注册界面 register.jsp 登录主页面 首页 index.jsp 前台首页面,包括header.jsp和footer.jsp,是为了网站统一风格 页面上端 header.jsp 复用页面,记载用户登录信息及个人信息维护菜单以及网站Logo等信息 页面尾端 footer.jsp 复用页面,显示广告及友情链接信息 Action/Servlet设计 Action/Servlet 入口 方法 出口 UserAction register.jsp execute() () 成功:login
7、jsp 失败:register.jsp ValidateCodeServlet register.jsp doPost() 输出验证码 业务层设计 业务接口 本模块业务方法 方法说明 IUserBiz.java public void saveUser(Users user); 接收用户对象,将用户对象信息保存到数据库 UserBizImpl.java public void saveUser(Users user) 写具体的HQL语句,调用Dao层方法 数据持久层设计 持久层接口 基类接口 接口说明 IUserDao.java IGenericD
8、ao 基类接口应用泛型和反射机制,对数据的操作进行统一处理,无需各持久层接口设计方法。 UserDaoImpl IUserDao AGenericHibernateDao UserDaoImpl继承AgenericHibernateDao类,实现IUserDao接口 3.1.4 功能实现时序图 3.2 用户登录模块 用户登录是针对已注册的用户,登录成功后,注册用户获得购物交易的相应权限。 3.2.1 实现流程图 3.2.2 输入输出规则 登录模块输入输出规则 模块名称 登录 功能描述 用户登录系统以达到注册用户的系统权
9、限 用户角色 注册用户 模块触发条件 直接选择登录或在将商品加入购物车时转向登录 输入规则 按照注册时输入的用户名和密码及随机验证码。可以选择两周内自动登录,则用户名和密码将存入cookie;如果不选将用户对象存入session 输出结果 登录成功后打开首页,登录用户信息存放在cookie中或者是session中,用户可以进行购买商品或对自己的信息进行维护。 关键算法 1.查询数据库中用户名和密码 2.验证码的生成和验证 3.两周内自动登录的选择 4.根据用户ID获得用户默认收货地址 数据库操作 查询用户表 3.2.3视图层、Action、业务层、数据
10、持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) login.jsp index.jsp header.jsp footer.jsp UserAction.java ValidateCodeServlet.java IUserBiz.java UserBizImpl.java IReceiverBiz.java RecieverBizImpl.java IUserDao.java UserDaoImpl.java IReceiverDao.java RecieverDaoImpl.java 视图层页面设计 界面
11、JSP 功能描述 登录界面 login.jsp 登录主页面 首页 index.jsp 前台首页面,包括header.jsp和footer.jsp,是为了网站统一风格 页面上端 header.jsp 复用页面,记载用户登录信息及个人信息维护菜单以及网站Logo等信息 页面尾端 footer.jsp 复用页面,显示广告及友情链接信息 Action/Servlet设计 Action/Servlet 入口 方法 出口 UserAction login.jsp UserLogin() 成功:index.jsp 失败:login.jsp ValidateCo
12、deServlet login.jsp doPost() 输出验证码 业务层设计 业务接口 本模块业务方法 方法说明 IUserBiz.java public Users CheckLogin(final String username,final String password); 接收用户名和密码查询数据库返回Users对象 UserBizImpl.java public Users CheckLogin(final String username,final String password); 写具体的HQL语句,调用数据持久层方法 数据持久层设计 持久层接
13、口 基类接口 接口说明 IUserDao.java IGenericDao 基类接口应用泛型和反射机制,对数据的操作进行统一处理,无需各持久层接口设计方法。 UserDaoImpl.java IUserDao AGenericHibernateDao UserDaoImpl继承AgenericHibernateDao类,实现IUserDao接口 3.2.4 功能实现时序图 3.3 商品搜索-品牌检索 用户可以根据网站列出的鞋子品牌、款式进行快速搜索鞋子。还可以根据商品名字进行模糊搜素。另外可以根据尺码、版型、颜色、品牌进行综合搜索。搜索到的鞋子以
14、列表形式分页显示,可以对两个及两个以上鞋子进行对比,可以查看某个鞋子的详细信息。 本环节首先说明品牌搜索实现过程 3.3.1 品牌搜索实现流程图 3.3.2 品牌搜索输入输出规则 商品品牌搜索显示输入输出规则 模块名称 商品品牌搜索显示 功能描述 根据商品品牌搜索鞋子 用户角色 注册用户或游客 模块触发条件 打开网站首页 输入规则 用鼠标单击品牌链接 输出结果 显示同一品牌的所有鞋子列表 关键算法 1.品牌列表链接具备性别和品牌名称参数 2.Action中获取到性别及品牌名称,根据性别和品牌名称查找Shoes表 数据库操作
15、 查询brands表和shoes表 3.3.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) left_menu.jsp search.jsp ShoesAction.java IShoesBiz.java ShoesBizImpl.java IShoesDao.java ShoesDaoImpl.java 视图层页面设计 界面 JSP 功能描述 首页左侧品牌导航页面 left_menu.jsp 列出品牌,款式及定制链接 搜索结果页面 Search.jsp,其中包含
16、search_result.jsp 根据前置条件将搜索结果列表显示 Action/Servlet设计 Action/Servlet 入口 方法 出口 ShoesAction left_menu.jsp SearchShoesByGenderBrand() search_result.jsp 业务层设计 业务接口 本模块业务方法 方法说明 IShoesBiz.java public PageBean SearchShoesByGenderBrand(final String brandName,final String gender,final int curre
17、ntPage,final int pageSize) 根据品牌名字,性别,当前页数和每页记录数查询数据库中鞋子信息返回分页信息。 ShoesBizImpl.java public PageBean SearchShoesByGenderBrand(final String brandName,final String gender,final int currentPage,final int pageSize) 写具体的HQL语句,调用数据持久层findByPageBean()方法 数据持久层设计 持久层接口 基类接口 接口说明 IShoeDao.java IGeneri
18、cDao 获取分页信息的统一方法 public PageBean findByPageBean(final String hql,final Object[] param,final int currentpage,final int pageSize); ShoesDaoImpl.java IShoesDao AGenericHibernateDao ShoesDaoImpl继承AgenericHibernateDao类,实现IShoesDao接口 3.3.4 功能实现时序图 3.4 商品搜索-款式检索 3.4.1 款式搜索实现流程图 3.
19、4.2 款式搜索输入输出规则 商品款式搜索显示输入输出规则 模块名称 商品款式搜索显示 功能描述 根据商品款式搜索鞋子 用户角色 注册用户或游客 模块触发条件 打开网站首页 输入规则 用鼠标单击款式链接 输出结果 显示同一款式的所有鞋子列表 关键算法 1.款式列表链接具备款式名称参数 2.Action中获取到款式名称,根据款式名称查找Shoes表 数据库操作 查询types表和shoes表 3.4.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) left_me
20、nu.jsp search.jsp ShoesAction.java IShoesBiz.java ShoesBizImpl.java IShoesDao.java ShoesDaoImpl.java 视图层页面设计 界面 JSP 功能描述 首页左侧品牌导航页面 left_menu.jsp 列出品牌,款式及定制链接 搜索结果页面 Search.jsp,其中包含search_result.jsp 根据前置条件将搜索结果列表显示 Action/Servlet设计 Action/Servlet 入口 方法 出口 ShoesAction left_menu
21、jsp SearchShoesByTypes() search.jsp 业务层设计 业务接口 本模块业务方法 方法说明 IShoesBiz.java public PageBean SearchShoesByTypes(final String typename,final int currentPage,final int pageSize); 根据款式名称,当前页数和每页记录数查询数据库中鞋子信息返回分页信息。 ShoesBizImpl.java public PageBean SearchShoesByTypes(final String typename,fin
22、al int currentPage,final int pageSize); 写具体的HQL语句,调用数据持久层findByPageBean()方法 数据持久层设计 持久层接口 基类接口 接口说明 IShoeDao.java IGenericDao 获取分页信息的统一方法 public PageBean findByPageBean(final String hql,final Object[] param,final int currentpage,final int pageSize); ShoesDaoImpl.java IShoesDao AGenericHi
23、bernateDao ShoesDaoImpl继承AgenericHibernateDao类,实现IShoesDao接口 3.4.4 功能实现时序图(同3.3.4) 3.5 商品搜索-根据商品名和产地模糊检索 3.5.1 模糊搜索实现流程图 3.5.2 模糊搜索输入输出规则 商品模糊搜索显示输入输出规则 模块名称 商品名称模糊搜索显示 功能描述 根据商品名称,产地搜索鞋子 用户角色 注册用户或游客 模块触发条件 打开网站首页 输入规则 输入商品名称或产地关键字,并选择男款还是女款 输出结果 显示包含名称或产地关键字的所有鞋子列表
24、 关键算法 1. 获取表单鞋子名称或产地关键字及性别 2. Action中获取关键字和性别 3. 业务层根据关键字和性别查询Shoes表 数据库操作 查询shoes表 3.5.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) header.jsp search.jsp ShoesAction.java IShoesBiz.java ShoesBizImpl.java IShoesDao.java ShoesDaoImpl.java 视图层页面设计 界面 JSP 功能描述
25、 网站头部独立页面 header.jsp 接收关键字和性别选择 搜索结果页面 Search.jsp,其中包含search_result.jsp 根据前置条件将搜索结果列表显示 Action/Servlet设计 Action/Servlet 入口 方法 出口 ShoesAction header.jsp FuzzySearch() search.jsp 业务层设计 业务接口 本模块业务方法 方法说明 IShoesBiz.java public PageBean FuzzySearch(Object[] params,final int currentPa
26、ge,final int pageSize); 根据鞋子名称,产地关键字及性别,当前页数和每页记录数查询数据库中鞋子信息返回分页信息。 ShoesBizImpl.java public PageBean FuzzySearch(Object[] params,final int currentPage,final int pageSize); 写具体的HQL语句,调用数据持久层findByPageBean()方法 数据持久层设计 持久层接口 基类接口 接口说明 IShoeDao.java IGenericDao 获取分页信息的统一方法 public PageBean f
27、indByPageBean(final String hql,final Object[] param,final int currentpage,final int pageSize); ShoesDaoImpl.java IShoesDao AGenericHibernateDao ShoesDaoImpl继承AgenericHibernateDao类,实现IShoesDao接口 3.5.4 功能实现时序图(同3.3.4) 3.6 商品搜索-根据尺码,版型,颜色,品牌综合检索 3.6.1 综合搜索实现流程图 3.6.2 综合搜索输入输出规则 商
28、品综合搜索显示输入输出规则 模块名称 商品综合搜索显示 功能描述 根据鞋子尺码,版型,颜色,品牌搜索鞋子 用户角色 注册用户或游客 模块触发条件 打开网站首页 输入规则 输入鞋子尺码,版型,颜色,品牌 输出结果 显示符合综合条件的所有鞋子列表 关键算法 1. 选择鞋子尺码,版型,颜色,品牌一个或多个条件 2. Action中获取实际选择的条件 3. 业务层根据选择的条件查询Shoes表 数据库操作 查询shoes表 3.6.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(
29、dao) search.jsp ShoesAction.java IShoesBiz.java ShoesBizImpl.java IShoesDao.java ShoesDaoImpl.java 视图层页面设计 界面 JSP 功能描述 网站头部独立页面 Search.jsp 接收关键字和性别选择 搜索结果页面 Search.jsp,其中包含search_result.jsp 根据前置条件将搜索结果列表显示 Action/Servlet设计 Action/Servlet 入口 方法 出口 ShoesAction search.jsp execut
30、e()
search.jsp
业务层设计
业务接口
本模块业务方法
方法说明
IShoesBiz.java
public List
31、持久层设计 持久层接口 基类接口 接口说明 IShoeDao.java IGenericDao 获取分页信息的统一方法 public PageBean findByPageBean(final String hql,final Object[] param,final int currentpage,final int pageSize); ShoesDaoImpl.java IShoesDao AGenericHibernateDao ShoesDaoImpl继承AgenericHibernateDao类,实现IShoesDao接口 3.6.4 功能实现时序图(
32、同3.3.4) 3.7 商品详情 3.7.1 商品详情实现流程图 3.7.2 商品详情输入输出规则 商品详情输入输出规则 模块名称 商品详情显示 功能描述 显示指定鞋子的详细信息 用户角色 注册用户或游客 模块触发条件 打开商品列表页 输入规则 点击鞋子图片或商品名称 输出结果 显示指定鞋子的详细信息 关键算法 1. 鞋子列表中具有鞋子sid参数值 2. Action中获取sid值 3. 在业务层中通过sid值获取鞋子的详细信息 数据库操作 查询shoes表 3.7.3视图层、Action、业务层、数据持久层的说明
33、 视图 Action/Servlet 业务层(biz) 数据持久层(dao) search_result.jsp product_detail.jsp ShoesAction.java IShoesBiz.java ShoesBizImpl.java IShoesDao.java ShoesDaoImpl.java 视图层页面设计 界面 JSP 功能描述 鞋子列表页面 search_result.jsp 显示鞋子列表 鞋子详情页面 product_detail.jsp 显示鞋子的详细信息 Action/Servlet设计 Action/Servlet
34、 入口 方法 出口 ShoesAction Search_result.jsp FindBySid() product_detail.jsp 业务层设计 业务接口 本模块业务方法 方法说明 IShoesBiz.java public Shoes FindById(final int sid); 根据鞋子id获取鞋子对象 ShoesBizImpl.java public Shoes FindById(final int sid); 写具体的HQL语句,调用数据持久层findById(sid)方法 数据持久层设计 持久层接口 基类接口 接口说明 ISho
35、eDao.java IGenericDao 获取分页信息的统一方法 public T findById(ID id); ShoesDaoImpl.java IShoesDao AGenericHibernateDao ShoesDaoImpl继承AgenericHibernateDao类,实现IShoesDao接口 3.7.4 功能实现时序图 3.8 添加购物车 3.8.1 添加购物车实现流程图 3.8.2 添加购物车输入输出规则 添加购物车输入输出规则 模块名称 添加购物车 功能描述 将鞋子添加到购物车 用户角色 注册用户
36、 模块触发条件 登录用户打开商品详情页 输入规则 选择尺码后添加到购物车 输出结果 打开购物车页面,显示购物车信息 关键算法 1.页面判断是否选择尺码和个人是否有默认收货地址 2.获取鞋子编号,尺码和数量(默认为1) 3. 添加到购物车的Action中根据鞋子id,尺码,购买数量组合Shoesizes对象 ,shoesizes表中包含各鞋子对应尺寸的库存。 4. 如果鞋子没有被删除,并且库存量大于购买量,将鞋子信息添加到Map集合(购物车 Cart ),并添加到session中 数据库操作 查询shoesizes表 3.8.3视图层、Action、业务层、
37、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) product_detail.jsp cart.jsp cart_table.jsp CartAction.java IShoeSizesBiz.java ShoeSizesBizImpl.java IReceiverBiz.java ReceiverBizImpl.java IShoeSizesDao.java ShoeSizesDaoImpl.java IReceiverDao.java ReceiverDaoImpl.java 视图层页面设计 界面 JSP
38、 功能描述 鞋子详情页面 product_detail.jsp 显示鞋子的详细信息 购物车页面 cart.jsp,其中包括cart_table.jsp 显示购物车的详细信息 Action/Servlet设计 Action/Servlet 入口 方法 出口 CartAction product_detail.jsp execute() cart.jsp CartAction Product_detail.jsp getDefaultAddress() personal_center.jsp 业务层设计 业务接口 本模块业务方法 方法说明 IShoe
39、SizesBiz.java public Shoesizes FindByShoesid(final int sid,final int count,final float sizes); 根据鞋子id,数量,尺寸获取鞋子尺寸信息对象(包含库存) ShoeSizesBizImpl.java public Shoesizes FindByShoesid(final int sid,final int count,final float sizes); 写具体的HQL语句,调用数据持久层findByObject方法 IReceiverBiz.java public Receives
40、FindByDefault(int uid);
根据用户id获得默认收货地址
ReceiverBizImpl.java
public Receives FindByDefault(int uid);
写具体的HQL语句,调用数据持久层findByObject方法
数据持久层设计
持久层接口
基类接口
接口说明
IShoeSizesDao.java
IGenericDao
根据条件参数获取集合
public List
41、Dao
AGenericHibernateDao
ShoeSizesDaoImpl
继承AgenericHibernateDao类,实现IShoeSizesDao接口
IReceiverDao.java
IGenericDao
根据条件参数获取集合
public List
42、o接口 3.8.4 功能实现时序图 3.9 删除购物车商品 3.9.1 删除购物车商品实现流程图 3.9.2删除购物车商品输入输出规则 删除购物车商品输入输出规则 模块名称 删除购物车商品 功能描述 将鞋子从购物车中删除 用户角色 注册用户 模块触发条件 登录用户在购物车页面选择删除商品 输入规则 点击“删除商品”链接 输出结果 显示删除商品后的购物车信息页面 关键算法 1. 获取页面隐藏域信息 2. 判断当前购物车中有几种商品(根据单个商品总价) 3. 如果存在多种商品,通过js操作DOM对象删除商品 4. 如
43、果只剩下一种商品,则将购物车清空,实际操作是将购物车对象从session中删除。 数据库操作 无 3.9.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) cart.jsp cart_table.jsp OrderAction.java 无 无 视图层页面设计 界面 JSP 功能描述 购物车页面 cart.jsp,其中包括cart_table.jsp 显示购物车的详细信息及相关js操作 Action/Servlet设计 Action/Servlet 入口 方法
44、出口 OrderAction cart_table.jsp deleteCart() index.jsp,清空购物车后返回首页 3.9.4 功能实现时序图 不清空购物车(略) 清空购物车 3.10 结算购物车商品 3.10.1 结算购物车商品实现流程图 3.10.2结算购物车商品输入输出规则 结算购物车商品输入输出规则 模块名称 结算购物车商品 功能描述 确定购物车中商品,提交结算 用户角色 注册用户 模块触发条件 登录用户在购物车页面选择“去结算” 输入规则 点击“去结算”链接 输出结果 显示购物车所有商品结
45、算信息和个人默认收货地址信息 关键算法 1. 获取购物车信息 2. 获取个人默认收货地址信息 数据库操作 查询receives 3.10.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) cart.jsp cart_table.jsp OrderAction.java IReceiverBiz.java ReceiverBizImpl.java IReceiverDao.java ReceiverDaoImpl.java 视图层页面设计 界面 JSP 功能描述 购物
46、车页面 cart.jsp,其中包括cart_table.jsp 显示购物车的详细信息及相关js操作 订单页面 ordersheet.jsp 订单信息页面(购物车和收货地址) Action/Servlet设计 Action/Servlet 入口 方法 出口 OrderAction cart_table.jsp execute() ordersheet.jsp 业务层设计 业务接口 本模块业务方法 方法说明 IReceiverBiz.java public Receives FindByDefault(int uid); 根据用户id获得默认收货地址
47、
ReceiverBizImpl.java
public Receives FindByDefault(int uid);
写具体的HQL语句,调用数据持久层findByObject方法
数据持久层设计
持久层接口
基类接口
接口说明
IReceiverDao.java
IGenericDao
根据条件参数获取集合
public List
48、继承AgenericHibernateDao类,实现IReceiverDao接口 3.10.4 功能实现时序图 3.11直接购买商品 3.11.1 直接购买商品实现流程图 3.11.2直接购买商品输入输出规则 模块名称 直接购买商品 功能描述 在商品详情页选择直接购买商品,功能类似添加到购物车,只是直接购买的商品不经过购物车页面,直接到订单页 用户角色 注册用户 模块触发条件 登录用户在详情页选择“直接购买” 输入规则 选择尺码后点击“直接购买”链接 输出结果 打开订单页,显示购物车所有商品结算信息和个人默认收货地址信息 关键算法
49、 1. 将商品添加到购物车但不现实购物车页面 2. 获取个人默认收货地址信息 数据库操作 查询shoesizes表和receives表 3.11.3视图层、Action、业务层、数据持久层的说明 视图 Action/Servlet 业务层(biz) 数据持久层(dao) cart.jsp cart_table.jsp CartAction.java IShoeSizesBiz.java ShoeSizesBizImpl.java IReceiverBiz.java ReceiverBizImpl.java IShoeSizesDao.java Sh
50、oeSizesDaoImpl.java IReceiverDao.java ReceiverDaoImpl.java 视图层页面设计 界面 JSP 功能描述 商品详情页面 product_detail.jsp 显示商品详情及“直接购买”链接 订单页面 ordersheet.jsp 订单信息页面(购物车和收货地址) Action/Servlet设计 Action/Servlet 入口 方法 出口 CartAction product_detail.jsp Buynow() ordersheet.jsp 业务层设计 业务接口 本模块业务方法 方






