目 录
摘 要 I
Abstract II
目 录 III
1 绪论 1
1.1 研究背景 1
1.2 研究意义 2
1.3 国内外研究现状 2
2 相关理论和开发工具 4
2.1 数据挖掘简述 4
2.2 相关数据挖掘算法概述 4
2.2.1关联规则 4
2.2.2 聚类算法 5
2.2.3 分类算法 5
2.3 文本挖掘概述 6
2.4 开发工具 7
3系统需求分析 8
3.1 数据描述 8
3.1.1系统数据流图 8
3.1.2数据字典 12
3.2功能需求 18
3.2.1功能划分 18
3.2.2系统前台功能描述 18
3.2.3系统后台功能描述 19
3.3性能需求 20
3.4运行需求 21
4 销售平台设计 22
4.1 系统功能设计 22
4.1.1普通商城模块 22
4.1.2智能商城模块 23
4.2 系统流程设计 24
4.2.1用户导购平台的业务流程 25
4.2.2管理员管理平台的业务流程 29
4.3 数据的采集与预处理 29
4.3.1数据的采集 29
4.3.1数据的预处理 30
4.4 推荐算法 31
4.4.1天气位置推荐 31
4.4.2地域销量聚类 32
4.4.3更新用户喜好 33
4.4.4用户信息分类 33
5.4.5购买分类预测 35
4.4.6销售记录关联 36
4.5评论分析 37
4.5.1 商品特征词提取 37
4.5.2 特征词情感分析 38
5 数据库设计 39
5.1 概念设计 39
5.2 数据库表结构设计 43
5.2.1表结构设计 43
5.2.2数据表逻辑关系 50
6 系统实现 52
6.1 用户表示层 52
6.1.1用户导购平台 52
6.1.2管理员管理平台 54
6.2 业务逻辑层 57
6.2.1用户导购平台 57
6.2.2管理员管理平台 58
6.3控制层处理 58
6.3.1用户导购平台 58
6.3.2管理员管理平台 59
6.4 数据持久层 59
7 系统测试 63
7.1 用户导购平台 63
7.1.1平台首页 63
7.1.2平台商品搜索页 64
7.1.3商品详情页 65
7.1.4 购物车推荐 67
7.1.5 订单推荐 68
7.2管理员管理平台 69
7.2.1服装管理 69
7.2.2 数据挖掘模块 70
7.2.3 评论挖掘模块 72
8 结论 74
致谢 75
参考文献 76
3.2功能需求
3.2.1功能划分
按照设计,本服装销售平台分为前台和后台两个部分组成。系统前台是用户导购平台,主要完成在线服装销售和交易的整个过程。后台是管理员管理平台也是卖家用户平台,完成对服装商品、用户数据的管理和更新,还有对商城积累的服装、用户或者交易数据进行整理和分析,包括各种个性化推荐的模型更新等。
3.2.2系统前台功能描述
前台导购平台主要由用户注册与登录模块、消息推送模块、商品列表模块、商品展示模块、购物车模块、订单模块等组成。各个功能模块可以继续细分,功能细分如下所示:
- 用户注册与登录模块:用户注册、用户登录、用户个人信息修改
- 消息推送模块:推荐子系统、消息阅读
- 商品列表模块:商品分类查询、商品条件查询、普通商品列表
- 商品展示模块:套装橱窗展示、服装评论展示、商品详情展示
- 购物车模块:查询购物车、添加购物车商品、删除购物车商品、修改购物车商品
- 订单模块:查询订单、支付和删除订单。
前台导购系统功能模块结构如图3-15所示。
图3-15 前台导购系统功能模块结构
导购系统用于完成服装交易的整个流程。用户通过服装列表选购商品,通过商品详情页了解商品信息,包括服装商品的图文信息和服装商品的属性介绍。通过购物车或者直接购买的方式生成商品订单。
另外,用户导购平台也是用户数据的重要获取途径。通过注册以及信息完善可以获取用户的基本信息;通过对用户登录系统的IP进行分析,可以获取用户所在的地理位置信息,进一步分析也可以获取当前地理位置的天气情况等信息;对用户在导购平台的浏览轨迹进行记录,包括用户在服装详情页的停留时间,购物车中服装商品的添加和删除记录,订单的添加和删除记录等。用户导购平台将帮助卖家自动的获取重要的用户信息以及用户在系统中的浏览和购买轨迹。这些信息将被系统用于训练用户的喜好模型。
3.2.3系统后台功能描述
后台管理员管理系统,主要由用户管理、服装管理、数据挖掘、销售分析、数据库管理、系统管理等模块组成。各个功能模块可以继续细分,功能细分如下所示: - 用户管理模块:包含添加用户、用户信息查询、用户信息修改
- 服装管理模块:包含服装的上架与下架.商品信息的修改、商品信息查询。
- 数据挖掘模块:包含地域销量聚类、更新用户喜好、用户信息分类、购买分类预测、销售记录关联。
- 文本评论挖掘模块:包含商品特征词提取和特征词情感提取两部分。
- 销售分析模块:包含销量分析、退货分析、销量预测。
- 数据库管理模块:主要针对基本数据表的管理。例如服装的尺码表、颜色表、袖型表;用户的教育程度类别表、职业类型表等。
- 系统管理模块:包含数据库的备份与恢复。
台管理员管理系统功能模块结构如图3-16所示。
图3-16 后台管理员管理系统功能模块结构
管理员通过登录认证登录后台管理系统对整个平台的数据进行管理与分析。相比前台的用户导购系统用于显示服装商品以及其详细信息,后台的管理员管理系统用于添加和修改这些服装商品信息。除此之外,后台管理员管理系统更多的是对前台收集到的用户数据进行一定的处理。前台收集到的数据包含新用户的注册数据和用户在访问该平台时的浏览轨迹、对购物车商品的添加删除操作、对订单的添加删除操作等信息。这些数据将交付到后台进行管理。用户个人基本的数据交付用户管理模块;用户的浏览轨迹等数据交付数据挖掘模块和销售分析模块,用于构建用户的喜好模型和对平台的销售情况作出必要的统计分析。
package com.zgzcwy.controller;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.zgzcwy.entity.User;
import com.zgzcwy.service.UserService;
import com.zgzcwy.util.CheckCodeGenerator;
/**
*
* @ClassName: UserController
* @Description: 用户注册
* @author: Administrator
* @date: 2017年12月29日 下午2:35:37
*
*/
@Controller
@RequestMapping("/user")
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
@Autowired
private CheckCodeGenerator checkCodeGenerator;
/**
* 用户注册
*/
@RequestMapping("/regist")
public ModelAndView regist(User user,String checkCode,HttpSession session) throws Exception{
//1.比较验证码
String sessionCode=(String) session.getAttribute("checkCode");
if(checkCode!=null && checkCode.equalsIgnoreCase(sessionCode)){
logger.info("验证码:"+checkCode);
userService.addUser(user);
logger.info("注册用户");
ModelAndView mav=new ModelAndView("msg");
mav.addObject("message","注册成功,请去登录!");
return mav;
}else{
ModelAndView mav=new ModelAndView("regist");
mav.addObject("err", "验证码错误!");
return mav;
}
}
/**
* 前台:注册AJAX校验用户名.
* @throws IOException
*/
@RequestMapping("/CheckUserName")
@ResponseBody
public Map<String, String> checkUserName(String username,HttpServletRequest request) throws IOException{
logger.info("用户名:"+username);
if(username==""||username==null){
Map<String, String> result = new HashMap<String, String>();
result.put("msg","null");
return result;
}else{
User existUser = userService.findByUserName(username);
logger.info("用户对象:"+existUser);
if(existUser == null){
// 用户名可以使用的
Map<String, String> result = new HashMap<String, String>();
result.put("msg","true");
return result;
}else{
// 用户名已经存在
Map<String, String> result = new HashMap<String, String>();
result.put("msg","false");
return result;
}
}
}
/**
* 获取图形验证码 将返回一个包含4位字符(字母或数字)的图形验证码,并且将图形验证码的值设置到用户的 session 中
*
* @param time 时间戳
* @param response 返回的 HttpServletResponse 响应
*/
@RequestMapping(value = "checkCode/{time}", method = RequestMethod.GET)
public void getCheckCode(@PathVariable("time") String time, HttpServletResponse response, HttpServletRequest request) {
BufferedImage checkCodeImage = null;
String checkCodeString = null;
// 获取图形验证码
Map<String, Object> checkCode = checkCodeGenerator.generlateCheckCode();
if (checkCode != null) {
checkCodeString = (String) checkCode.get("checkCodeString");
checkCodeImage = (BufferedImage) checkCode.get("checkCodeImage");
}
if (checkCodeString != null && checkCodeImage != null) {
try (ServletOutputStream outputStream = response.getOutputStream()) {
// 设置 Session
HttpSession session = request.getSession();
session.setAttribute("checkCode", checkCodeString);
// 将验证码输出
ImageIO.write(checkCodeImage, "png", outputStream);
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/png");
} catch (IOException e) {
logger.error("fail to get the ServletOutputStream");
}
}
}
}