系统技术栈

服务端:Spring + SpringMVC + Mybatis + JSP

数据库:Mysql

前台技术:js + jQuery + bootstrap

系统模块介绍

前台:

  • 用户的登录和注册,注册包括用户名、密码、姓名、手机号、收货地址
  • 个人中心(我的订单、积分查看、收货地址、修改密码等)
  • 购物车列表(查看当前登录用户的购物车)
  • 商品评论
  • 商品信息列表(今日推荐、热销排行、新品上市)
  • 支付功能

后台:

  • 类目管理
  • 商品管理
  • 订单管理
  • 用户管理
  • 评论管理
  • 管理员操作
  • 退出

前台截图效果

首页


购物车


我的订单


商品详细页(含评论信息)

后台效果截图

登录页


首页


 类目管理


商品管理


订单管理


评价管理

数据库表

论文截图

核心代码

UserController类

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.Objects;import javax.annotation.Resource;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import com.config.ExceptionConfig.MyException;
import com.entity.Orders;
import com.entity.Users;
import com.service.CartService;
import com.service.GoodService;
import com.service.OrderService;
import com.service.UserService;
import com.util.PageUtil;
import com.util.SafeUtil;/*** 用户相关接口*/
@Controller
@RequestMapping("/index")
public class UserController {@Resourceprivate UserService userService;@Resourceprivate GoodService goodService;@Resourceprivate OrderService orderService;@Resourceprivate CartService cartService;/*** 用户注册** @return*/@GetMapping("/register")public String reg() {return "/index/register.jsp";}/*** 用户注册** @return*/@PostMapping("/register")public String register(Users user, HttpServletRequest request) {if (user.getUsername().isEmpty()) {request.setAttribute("msg", "用户名不能为空!");} else if (Objects.nonNull(userService.getByUsername(user.getUsername()))) {request.setAttribute("msg", "用户名已存在!");} else {userService.add(user);request.setAttribute("msg", "注册成功 可以去登录了!");return "/index/login.jsp";}return "/index/register.jsp";}/*** 用户登录** @return*/@GetMapping("/login")public String log() {return "/index/login.jsp";}/*** 用户登录** @return*/@PostMapping("/login")public String login(Users user, HttpServletRequest request, HttpSession session) {Users loginUser = userService.getByUsernameAndPassword(user.getUsername(), user.getPassword());if (Objects.isNull(loginUser)) {request.setAttribute("msg", "用户名或密码错误");return "/index/login.jsp";}session.setAttribute("user", loginUser);// 还原购物车session.setAttribute("cartCount", cartService.getCount(loginUser.getId()));String referer = request.getHeader("referer"); // 来源页面System.out.println(referer); //TODOreturn "redirect:index";}/*** 注销登录** @return*/@GetMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("user");session.removeAttribute("cartCount");return "/index/login.jsp";}/*** 查看积分*/@GetMapping("/mypoint")public String mypoint() {return "/index/mypoint.jsp";}//积分充值@RequestMapping("/addPoint")public String addPoint(double point, HttpSession session, HttpServletRequest request) {Users users = (Users) session.getAttribute("user");BigDecimal bigDecimal = new BigDecimal(Double.toString(point)).add(new BigDecimal(Double.toString(users.getPoint())));users.setPoint(bigDecimal.doubleValue());int count = userService.updatePoint(users);if (count > 0) {session.setAttribute("user", users);request.setAttribute("msg", "充值成功!");} else {request.setAttribute("msg", "充值失败!");}return "/index/mypoint.jsp";}/*** 查看购物车** @return*/@GetMapping("/cart")public String cart(HttpServletRequest request, HttpSession session) {Users user = (Users) session.getAttribute("user");request.setAttribute("cartList", cartService.getList(user.getId()));request.setAttribute("cartCount", cartService.getCount(user.getId()));request.setAttribute("cartTotal", cartService.getTotal(user.getId()));return "/index/cart.jsp";}/*** 购物车总金额** @return*/@GetMapping("/cartTotal")public @ResponseBodyint cartTotal(HttpSession session) {Users user = (Users) session.getAttribute("user");return cartService.getTotal(user.getId());}/*** 加入购物车** @return*/@PostMapping("/cartBuy")public @ResponseBodyboolean cartBuy(int goodId, HttpSession session) {Users user = (Users) session.getAttribute("user");return cartService.save(goodId, user.getId());}/*** 添加数量*/@PostMapping("/cartAdd")public @ResponseBodyboolean cartAdd(int id) {return cartService.add(id);}/*** 减少数量*/@PostMapping("/cartLess")public @ResponseBodyboolean cartLess(int id) {return cartService.less(id);}/*** 删除*/@PostMapping("/cartDelete")public @ResponseBodyboolean cartDelete(int id) {return cartService.delete(id);}/*** 查看订单** @return* @throws UnsupportedEncodingException*/@GetMapping("/order")public String order(HttpServletRequest request, HttpSession session,@RequestParam(required = false, defaultValue = "1") int page,@RequestParam(required = false, defaultValue = "6") int size) throws UnsupportedEncodingException {Users user = (Users) session.getAttribute("user");request.setAttribute("orderList", orderService.getListByUserid(user.getId(), page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, orderService.getCountByUserid(user.getId()), page, size));return "/index/order.jsp";}/*** 直接购买** @return* @throws MyException*/@PostMapping("/orderAdd")public String orderAdd(int goodId, HttpSession session) throws MyException {Users user = (Users) session.getAttribute("user");int orderId = orderService.add(goodId, user.getId());return "redirect:orderPay?id=" + orderId; // 跳转支付}/*** 购物车结算** @return* @throws MyException*/@GetMapping("/orderSave")public String orderSave(ServletRequest request, HttpSession session) throws MyException {Users user = (Users) session.getAttribute("user");int orderId = orderService.save(user.getId());session.removeAttribute("cartCount"); // 清理购物车sessionreturn "redirect:orderPay?id=" + orderId; // 跳转支付}/*** 支付页面** @return*/@GetMapping("/orderPay")public String orderPay(int id, ServletRequest request) {request.setAttribute("order", orderService.get(id));return "/index/pay.jsp";}/*** 支付(模拟)** @return*/@PostMapping("/orderPay")@ResponseBodypublic int orderPay(Orders order, HttpSession session) {Users users = (Users) session.getAttribute("user");BigDecimal bigDecimal = new BigDecimal(0);if (order.getPaytype() == Orders.PAYTYPE_OFFLINE) {//为积分支付时double d1 = order.getTotal();//商品总价if (users.getPoint().compareTo(d1) < 0) {return -1;} else {//总积分 = 用户积分 - 抵扣积分bigDecimal = new BigDecimal(Double.toString(users.getPoint())).subtract(new BigDecimal(Double.toString(d1)));}} else {double d2 = order.getTotal() / 100;//购买商品获取的积分//总积分 = 用户积分 + 获取的bigDecimal = new BigDecimal(Double.toString(users.getPoint())).add(new BigDecimal(Double.toString(d2)));}users.setPoint(bigDecimal.doubleValue());//保存积分int count = userService.updatePoint(users);if (count > 0) {session.setAttribute("user", users);//更新用户积分}orderService.pay(order);return 1;}/*** 收货地址** @return*/@GetMapping("/address")public String address() { // 使用session中的数据return "/index/address.jsp";}/*** 修改信息** @return*/@PostMapping("/addressUpdate")public String addressUpdate(String name, String phone, String address, HttpServletRequest request, HttpSession session) {Users user = (Users) session.getAttribute("user");userService.update(user.getId(), name, phone, address);  // 更新数据库session.setAttribute("user", userService.get(user.getId())); // 更新sessionrequest.setAttribute("msg", "信息修改成功!");return "/index/address.jsp";}/*** 收货地址** @return*/@GetMapping("/password")public String password() { // 使用session中的数据return "/index/password.jsp";}/*** 修改密码** @return*/@PostMapping("/passwordUpdate")public String passwordUpdate(String password, String passwordNew, HttpServletRequest request, HttpSession session) {Users user = (Users) session.getAttribute("user");user = userService.get(user.getId());if (!user.getPassword().equals(SafeUtil.encode(password))) {request.setAttribute("msg", "原密码错误!");} else {userService.updatePassword(user.getId(), passwordNew);request.setAttribute("msg", "密码修改成功!");}return "/index/password.jsp";}@RequestMapping("/userfinish")public String userFinish(int id, byte status,@RequestParam(required = false, defaultValue = "1") int page) {orderService.finish(id);return "redirect:order?page=" + page;}
}

UserService实现类(前台用户登录、注册、退出等功能)

package com.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.dao.UsersDao;
import com.entity.Users;
import com.util.SafeUtil;/*** 用户服务*/
@Service
public class UserService {@Autowiredprivate UsersDao userDao;/*** 总数** @return*/public long getCount() {return userDao.selectCount();}public long queryCount(String username) {return userDao.queryCount(username);}/*** 列表** @param page* @param rows* @return*/public List<Users> getList(int page, int rows) {return userDao.selectList(rows * (page - 1), rows);}public List<Users> queryList(int page, int rows, String username) {return userDao.queryList(rows * (page - 1), rows,username);}/*** 通过id获取** @param id* @return*/public Users get(int id) {return userDao.select(id);}/*** 通过用户名获取** @param username* @return*/public Users getByUsername(String username) {return userDao.selectByUsername(username);}/*** 通过用户名和密码获取** @param username* @param password* @return*/public Users getByUsernameAndPassword(String username, String password) {return userDao.selectByUsernameAndPassword(username, SafeUtil.encode(password));}/*** 添加** @param user* @return*/public boolean add(Users user) {user.setPassword(SafeUtil.encode(user.getPassword()));return userDao.insert(user);}/*** 更新** @param user*/public boolean update(int id, String name, String phone, String address) {Users user = new Users();user.setId(id);user.setName(name);user.setPhone(phone);user.setAddress(address);return userDao.update(user);}/*** 更新** @param user*/public boolean updatePassword(int id, String password) {return userDao.updatePassword(id, SafeUtil.encode(password));}/*** 删除** @param id*/public boolean delete(int id) {return userDao.delete(id);}public int updatePoint(Users users) {return userDao.updatePoint(users);}
}

本系统在处理注册请求时,为了保证数据的安全性,采用Md5加密技术对密码进行加密,工具类代码如下:

package com.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.springframework.util.Base64Utils;/*** 安全工具类*/
public class SafeUtil {/*** md5加密字符串*/public final static String md5(String str) {MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}messageDigest.update(str.getBytes());return Base64Utils.encodeToString(messageDigest.digest());}/*** sha1加密字符串*/public final static String sha1(String str) {MessageDigest messageDigest = null;try {messageDigest = MessageDigest.getInstance("SHA-1");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}messageDigest.update(str.getBytes());return Base64Utils.encodeToString(messageDigest.digest());}/*** 使用特定加密范式加密*/public final static String encode(String str) {return md5(sha1(md5(str)));}}

UserDao接口(执行sql语句来落实业务)

public interface UsersDao {@Select("select count(*) from users")public long selectCount();@Select("select * from users order by id desc limit #{begin}, #{size}")public List<Users> selectList(@Param("begin") int begin, @Param("size") int size);@Select("select * from users where id=#{id}")public Users select(int id);@Select("select * from users where username=#{username}")public Users selectByUsername(String username);@Select("select * from users where username=#{username} and password=#{password}")public Users selectByUsernameAndPassword(@Param("username") String username, @Param("password") String password);@Insert("insert into users (username,password,name,phone,address) "+ "values (#{username},#{password},#{name},#{phone},#{address})")@SelectKey(keyProperty = "id", statement = "SELECT LAST_INSERT_ID()", before = false, resultType = Integer.class)public boolean insert(Users user);@Update("update users set name=#{name},phone=#{phone},address=#{address} where id=#{id}")public boolean update(Users user);@Update("update users set password=#{password} where id=#{id}")public boolean updatePassword(@Param("id") int id, @Param("password") String password);@Update("delete from users where id=#{id}")public boolean delete(int id);@Update("update users set point=#{point} where id=#{id}")int updatePoint(Users users);
}

写在最后

该系统功能完整,代码简洁易懂,值得我们去学习

SSM网上商城购物系统(前台+后台)相关推荐

  1. 基于SSM开发网上游戏商城购物系统(前台+后台)

    基于SSM开发网上游戏商城购物系统(前台+后台):(毕业设计/课程设计) 开发环境: Windows操作系统 开发工具: MyEclipse(Eclipse)+Jdk+Tomcat+MYSQL数据库 ...

  2. 基于SSM网上商城购物系统的设计与实现

    项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等.这里根据疫情当下,你 ...

  3. java基于springboot的网上商城购物系统

    项目介绍 随着社会的快速发展,计算机的影响是全面且深入的.人们生活水平的不断提高,日常生活中人们对网上商城购物系统方面的要求也在不断提高,购物的人数更是不断增加,使得网上商城购物系统的开发成为必需而且 ...

  4. 【计算机毕业设计】512网上商城购物系统

    一.系统截图(需要演示视频可以私聊) 摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,网上商城购物系统当然也不能排除在外.网上商城 ...

  5. springboot+vue+elementui实现前后端分离的网上商城购物系统

    文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclip ...

  6. 【计算机毕业设计】23.网上商城购物系统+vue

    一.系统截图(需要演示视频可以私聊) 摘  要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,网上商城购物系统当然也不能排除在外.网上商城 ...

  7. nodejs基于vue 网上商城购物系统

    可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本 ...

  8. Java毕设项目网上商城购物系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目网上商城购物系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Web ...

  9. 网上商城购物系统的优势和建站方法

    随着我国电商的快速发展,越来越多的人参与到电商大环境中,网上购物系统,网店,独立网店,商城搭建等等电商词语成为进入电商或者已经在电商领域遨游人的口头禅,越来越多的企业开始搭建自己的商城系统.那么搭建一 ...

最新文章

  1. Linux下addr2line命令用法
  2. confirm修改按钮文字_CAD教程来袭,CAD菜鸟们你知道CAD如何创建和设置文字样式吗?...
  3. php 操作 redis 常用命令
  4. matlab 常用数学函数
  5. 2019-11-10 秩和奇异的一些概念
  6. 游戏运营期间我的项目开发经验总结——纪律性和卡顿处理
  7. 创造黑科技,守护新未来 | 360公司2019年春季校园招聘正式启动!
  8. [置顶]c# 设计模式(2)结构型
  9. React-Native 爬坑爬坑
  10. Atitit 编程范式之道 attilax著 v2 u66.docx Atitit 编程范式之道 attilax著 著 1. 编程范式与编程语言的关系是什么? 2 2. 高效率的编程范式 2
  11. 如何将pdf转换成jpg图片格式
  12. 2011年中国程序员薪水,蛋疼。
  13. 第二周 Linux文件管理类命令及bash基本特性
  14. 基于Android手机校园外卖订餐系统
  15. c语言定时器定时1ms程序,STM32 Cubemx 配置定时器定时1mS
  16. 如何使用JAVA代码生成一个简单的二维码
  17. 往年的计算机二级成绩怎么查,计算机二级成绩能查了么
  18. CAD中怎么画指北针?CAD画指北针教程
  19. 蒲公英分布平台下载更新实现
  20. 十七、网上商城项目(5)

热门文章

  1. python代码画土拨鼠_万圣节快到了,让我们用Python画一只蝙蝠图表吧(附代码)...
  2. 四川初中计算机老师工资多少,揭秘四川中小学教师工资待遇,你觉得高吗?
  3. Zookeeper在Dubbo中的作用及Zk集群的选举原理
  4. 为什么我感觉国内博士毕业手里的paper普遍比国外博士多?
  5. chrome扩展程序科学_扩展科学知识的最佳网站
  6. Glide加载动态图片
  7. java类加载器—ContextClassLoader类加载器
  8. 从单片机到ARM Linux驱动——Linux驱动入门篇
  9. html鼠标滑过图片放大效果
  10. 实现无限轮播广告条如此简单