使用SSM实现网上购物商城系统
项目编号:BS-SC-007
本项目基于SSM框架( spring+springmvc+mybatis)进行开发实现,数据库采用MYSQL,开发工具为IDEA或ECLIPSE均可。系统包含商城前端功能和后端管理功能,前端主要实现了用户注册、登陆、商品查看、添加购物车、生成订单、模拟支付等功能。后台管理功能主要包含用户管理、产品类型管理、产品管理、订单管理、销量统计等功能。功能完整,运行无误,适合做毕业设计或课程设计使用。
部分功能展示如下:
前台首页:

商品详情:

购物车:

订单支付

我的订单

后台管理功能界面:

商品管理
商品管理

订单管理

销量统计


以上是展示的系统的部分功能,系统源码+数据库+文档
package com.qst.controller;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import com.qst.beans.*;import com.qst.service.impl.*;import org.apache.commons.io.FileUtils;import org.apache.ibatis.annotations.Param;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.aspectj.weaver.ast.Or;import org.springframework.beans.MutablePropertyValues;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Map;import java.util.Set;public class AdminController {
private AdminUserServiceImpl adminUserService;
private CategoryServiceImpl categoryService;
private CategorySecondServiceImpl secondService;
private ProductServiceImpl productService;
private OrderServiceImpl orderService;
private UserServiceImpl userService;
public String adminHome(){//到后台登录页
return "admin/index";
}
public String adminLogin({ String username, String password, HttpServletRequest request)AdminUser adminUser = new AdminUser();
adminUser.setUsername(username);
adminUser.setPassword(password); AdminUser adminBynamePwd = adminUserService.getAdminBynamePwd(adminUser);
System.out.println(adminBynamePwd==null?"查询到的用户信息为空":adminBynamePwd); /*登录成功就到管理页,否则就回到登录页*/
if (adminBynamePwd!=null) {
request.getSession().setAttribute("enterAdmin",adminBynamePwd); return "/admin/home";
} return "/admin/index";
} /*------------------以下是管理员对用户的操作*/
public String findAllUserByPage({ Integer page,HttpServletRequest request)//查找商品并分页
PageUtils<User> userPageUtils = new PageUtils<>(); int limit = 5;//每页的记录数
if (page==null)
page = 1;
PageHelper.startPage(page,limit);
List<User> userList = userService.findAll();
PageInfo<User> pageInfo = new PageInfo<>(userList);//得到分页信息
userPageUtils.setPage(page);//当前页
userPageUtils.setList(userList);//当前页的记录数
userPageUtils.setTotalPage(pageInfo.getPages());//所有的页数
request.setAttribute("userPageUtils", userPageUtils); return "/admin/user/list";
} /*跳转到某商品的编辑页面*/
public String editUser({ Integer uid,HttpServletRequest request)/*根据商品ID获取某商品*/
User user = userService.findById(uid);
request.setAttribute("user",user); return "/admin/user/edit";
} /*保存商品修改信息,并重新上传*/
public String updateUser(User user,HttpServletRequest request)throws IOException { int save = userService.update(user); return "redirect: /admin/adminUser_findAllByPage";
} /*删除用户*/
public String deleteUser({ Integer uid, HttpServletRequest request)/*删除数据库中的记录*/
int deleteByid = userService.deleteById(uid); return "redirect: /admin/adminUser_findAllByPage";
} /*-------以下是管理员对一级分类的操作*/
public String getAllCategory(HttpServletRequest request){/*查找所有一级分类*/
List<Category> categoryList = categoryService.findAll();
request.setAttribute("cList",categoryList); return "admin/category/list";
}
public String toAddCategory(){
System.out.println("进入添加一级分类页面"); return "admin/category/add";
} /*像数据库添加一级分类*/
public String addCategory(Category category){ String cname = category.getCname();
System.out.println("添加一级分类:"+cname); int i = categoryService.addCategory(category); if(i>0){
System.out.println("添加"+category+"成功");
} return "redirect: /admin/adminGetAllCate";
} /*跳转到编辑一级分类页面*/
public String editCategory({ Integer cid,HttpServletRequest request)/*从数据库中查找到此分类*/
Category cByid = categoryService.findCByid(cid);
request.setAttribute("category",cByid); return "admin/category/edit";
} /*更新某一级分类*/
public String updateCategory(Category category){ int i = categoryService.saveCategory(category);
System.out.println(category.getCname()+"更新成功:"+i); return "redirect: /admin/adminGetAllCate";
} /*删除一级分类*/
public String deleteCategory({ Integer cid)/*删除一级分类之前先删除其下的二级分类*/
List<CategorySecond> categorySecondList = categoryService.findCSByCid(cid); for (CategorySecond cs:categorySecondList
) {
System.out.println("要删除的二级分类:"+cs.getCsname()); int i = secondService.deleteById(cs.getCsid());
System.out.println("删除成功与否:"+i);
} /*最后删除一级分类*/
int i = categoryService.deletByid(cid);
System.out.println("一级分类删除成功与否:"+i); return "redirect: /admin/adminGetAllCate";
} /*-------以下是管理员对二级分类的操作*/
public String findCSByPage({ Integer page,HttpServletRequest request)/*查找所有二级分类并分页*/
PageUtils<CategorySecond> secondPageUtils = new PageUtils<>(); //查找所有二级分类并分页
int limit = 4;//每页分页记录数
if (page==null)
page = 1;
PageHelper.startPage(page,limit);
List<CategorySecond> allCS = secondService.findAllCS();
PageInfo<CategorySecond> pageInfo = new PageInfo<>(allCS);//得到分页信息
secondPageUtils.setPage(page);//当前页
secondPageUtils.setList(allCS);//当前页的记录
secondPageUtils.setTotalPage(pageInfo.getPages());//所有页数
request.setAttribute("secondPageUtils",secondPageUtils); return "/admin/categorysecond/list";
} /*进入添加二级商品类目页面*/
public String toAddCategorySecond(HttpServletRequest request){
List<Category> categoryList = categoryService.findAll();
request.setAttribute("categoryList",categoryList); return "/admin/categorysecond/add";
} /*添加二级商品类目*/
public String addcategorySecond_save(CategorySecond categorySecond){
System.out.println("所添加的二级目录"+categorySecond); int save = secondService.add(categorySecond); if (save>0)
System.out.println("添加二级目录"+categorySecond+"成功"); return "redirect: /admin/adminCategorySecond_findAllByPage";
} /*跳转到编辑二级分类页面*/
public String editSecondCategory({ Integer csid,HttpServletRequest request)/*从数据库中查找到此分类*/
CategorySecond categorySecond = secondService.findCSByid(csid);
List<Category> categoryList = categoryService.findAll();
request.setAttribute("categoryList", categoryList);
request.setAttribute("categorySecond",categorySecond); return "/admin/categorysecond/edit";
} /*更新某二级分类*/
public String updateSecondCategory(CategorySecond category){
secondService.update(category); return "redirect: /admin/adminCategorySecond_findAllByPage";
} /*------------------以下是管理员对商品的操作*/
public String findAllProByPage({ Integer page,HttpServletRequest request)//查找商品并分页
PageUtils<Product> productPageUtils = new PageUtils<>(); int limit = 5;//每页的记录数
if (page==null)
page = 1;
PageHelper.startPage(page,limit);
List<Product> productList = productService.findAll();
PageInfo<Product> pageInfo = new PageInfo<>(productList);//得到分页信息
productPageUtils.setPage(page);//当前页
productPageUtils.setList(productList);//当前页的记录数
productPageUtils.setTotalPage(pageInfo.getPages());//所有的页数
request.setAttribute("productPageUtils", productPageUtils); return "/admin/product/list";
}
public String toAddProduct(HttpServletRequest request){//跳转到添加商品页面
//查找所有的二级分类
List<CategorySecond> categorySecondList = secondService.findAllCS();
request.setAttribute("csList",categorySecondList); return "/admin/product/add";
} /*++++++添加商品++++*/
public String addProduct(Product product, MultipartFile upload,HttpServletRequest request)throws Exception{
product.setPdate(new Date());
product.setIs_hot(0); String realPath = request.getServletContext().getRealPath("/products");
System.out.println(realPath); String originalFilename = upload.getOriginalFilename(); File diskFile = new File(realPath + "//"+ originalFilename);
System.out.println("目标文件:"+diskFile.getAbsolutePath()); //将上传的实体文件复制到指定目录upload下
upload.transferTo(diskFile);
product.setImage("products/"+originalFilename);
System.out.println("收到的商品:"+product); //将信息保存到数据库
int save = productService.save(product);
System.out.println(product.getPname()+"保存是否成功:"+save); return "redirect: /admin/adminProduct_findAllByPage";
} /*删除产品*/
public String deleteProduct({ Integer pid, HttpServletRequest request)/* 删除上传文件图片*/
Product product = productService.findById(pid); String path = product.getImage(); if(path!=null) { String realPath = request.getServletContext().getRealPath("/" + path); File file = new File(realPath);
file.delete();
} /*删除数据库中的记录*/
int deleteByid = productService.deleteByid(pid); return "redirect: /admin/adminProduct_findAllByPage";
} /*跳转到某商品的编辑页面*/
public String editProduct({ Integer pid,HttpServletRequest request)/*根据商品ID获取某商品*/
Product product = productService.findById(pid);
System.out.println(product);
request.setAttribute("product",product); /*所有二级分类*/
List<CategorySecond> allCS = secondService.findAllCS();
request.setAttribute("csList",allCS); return "/admin/product/edit";
} /*保存商品修改信息,并重新上传*/
public String updateProduct(Product product, MultipartFile upload,
HttpServletRequest request)throws IOException {
product.setPdate(new Date()); if(upload.getSize() >=0){ /*删除 目录中的文件,然后重新上传
* 以及更新数据库中的记录*/
String path = product.getImage(); if (path != null){ String realPath = request.getServletContext().getRealPath("/" + path); File file = new File(realPath);
file.delete();
} String realPath = request.getServletContext().getRealPath("/products"); String originalFilename = upload.getOriginalFilename(); File diskFile = new File(realPath + "//"+ originalFilename); //将上传的实体文件复制到指定目录upload下
upload.transferTo(diskFile);
product.setImage("products/"+originalFilename);
}
System.out.println("商品:"+product); //将信息保存到数据库
int save = productService.update(product); return "redirect: /admin/adminProduct_findAllByPage";
} /*---------------以下是管理员对订单的管理,只能修改订单的状态*/
public String findAllOrderPage({
PageUtils<Order> orderPageUtils = Integer page, HttpServletRequest request)new PageUtils<>(); if (page == null)
page = 1;
PageHelper.startPage(page,5);
List<Order> allOrder = orderService.getAllOrder();
PageInfo<Order> pageInfo = new PageInfo<>(allOrder);
orderPageUtils.setList(allOrder);
orderPageUtils.setPage(page);
orderPageUtils.setTotalPage(pageInfo.getPages());
request.setAttribute("orderPageUtils",orderPageUtils); return "/admin/order/list";
} /*根据订单编号查找订单项*/
public List<OrderItem> findItemsById({
System.out.println( Order order, HttpServletRequest request)"所需查找的订单项ID:"+order.getOid());
List<OrderItem> orderItemSet = orderService.findByOid(order.getOid()); for (OrderItem orderitem: orderItemSet
) {
System.out.println(orderitem);
}// request.setAttribute("orderItems",orderItemSet);// return "/admin/order/orderItem";
return orderItemSet;
}
public void exportProductInfo(HttpServletResponse response)throws IOException{
response.setCharacterEncoding("UTF-8");
List<Product> productList = productService.findAll();
System.out.println(productList); /*创建excel文件*/
//创建excel文件
HSSFWorkbook wb = new HSSFWorkbook(); //创建sheet页
HSSFSheet sheet = wb.createSheet("商品信息表"); //创建标题行
HSSFRow titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("商品名称");
titleRow.createCell(1).setCellValue("平台价格");
titleRow.createCell(2).setCellValue("市场价格");
titleRow.createCell(3).setCellValue("图片目录");
titleRow.createCell(4).setCellValue("商品广告词");
titleRow.createCell(5).setCellValue("销售量");
titleRow.createCell(6).setCellValue("添加日期");
titleRow.createCell(7).setCellValue("所属目录"); for(Product product : productList){ HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
dataRow.createCell(0).setCellValue(product.getPname());
dataRow.createCell(1).setCellValue(product.getShop_price());
dataRow.createCell(2).setCellValue(product.getMarket_price());
dataRow.createCell(3).setCellValue(product.getImage());
dataRow.createCell(4).setCellValue(product.getIs_hot());
dataRow.createCell(5).setCellValue(product.getPdesc());
dataRow.createCell(6).setCellValue(product.getPdate());
dataRow.createCell(7).setCellValue(product.getCsid());
} // 设置下载时客户端Excel的名称
String filename =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ".xls";
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + filename); OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}
}
package com.qst.controller;import com.qst.beans.User;import com.qst.service.impl.UserServiceImpl;import com.qst.util.CreateYanZhen;import com.qst.util.EmailUtils;import com.qst.util.MD5Encoding;import com.qst.util.RandomNum;import com.sun.deploy.net.HttpResponse;import org.apache.ibatis.annotations.Param;//import org.apache.struts2.ServletActionContext;//import org.apache.tools.ant.types.resources.selectors.None;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.server.ServletServerHttpResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletWebRequest;import javax.imageio.ImageIO;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.PrintWriter;/**
* 用户相关请求控制器
*/public class UserController {
private UserServiceImpl userService;
public String findByName({ String username, HttpServletRequest request)// username = request.getParameter("username");
System.out.println("名称验证:" + username); User existUser = userService.findByName(username);
System.out.println("existUser:" + existUser);// response.setContentType("text/html;charset=utf-8");// PrintWriter out = response.getWriter();
if (existUser != null ) { return "exist";
} else { return "ok";
}
}
public String userLogin(User user, HttpSession session,HttpServletRequest request) { String randomcodekey = (String)session.getAttribute("RANDOMVALIDATECODEKEY");
System.out.println("登录者:" + user);
System.out.println("登录验证码:"+randomcodekey); if(!randomcodekey.equals(user.getCode())){
request.setAttribute("msg","验证码错误"); return "views/login";
} User enterUser = userService.findByName(user.getUsername()); if (enterUser != null) {
System.out.println(enterUser.toString()); if (MD5Encoding.getMD5(user.getPassword()).equals(enterUser.getPassword())) {
session.setAttribute("enterUser", enterUser);//将登陆者信息保存到session作用域中
return "redirect: /user_indexPage";
}else
request.setAttribute("msg","密码错误");
}else
request.setAttribute("msg","账号错误"); return "views/login";
}
public String userRegist(User user,HttpServletRequest request,HttpSession session) {
System.out.println("注册者:" + user); int i = 0; if (user != null) { String pwd = MD5Encoding.getMD5(user.getPassword());
user.setPassword(pwd);
i = userService.addUser(user);
} String registCode = "";
Cookie[] cookies = request.getCookies(); for(Cookie cookie : cookies){ if(cookie.getName().equals("registCode")){
registCode = cookie.getValue();
}
}
System.out.println("发送的注册码:"+registCode); if(registCode==null || !registCode.equals(user.getCode())){
request.setAttribute("msg","验证码错误"); return "views/regist";
}
System.out.println("注册是否成功?" + i); if (i > 0) { return "views/login";
} else {
request.setAttribute("msg","用户名已存在"); return "views/regist";
}
} /**
* 发送注册验证码到邮箱
* @param email
* @param request
* @param response
*/
public String sendCodeEmail(String email, HttpServletRequest request, HttpServletResponse response){ String registCode = RandomNum.createNumRandom(4);
EmailUtils.sendEmail(email,"农产品推荐平台注册验证码",registCode); Cookie cookie = new Cookie("registCode", registCode);
cookie.setMaxAge(3*60);
response.addCookie(cookie); if(registCode!=null){ return "1";
} return "0";
}
public String logout(HttpSession session) {
session.invalidate(); return "redirect: /user_indexPage";
} /*验证码生成*/
public void setCodeImg(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片
response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0); CreateYanZhen randomValidateCode = new CreateYanZhen(); try {
randomValidateCode.getRandcode(request, response);//输出验证码图片方法
} catch (Exception e) {
e.printStackTrace();
}
}
}