作者主页:编程指南针

作者简介:Java领域优质创作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

文末获取源码 

项目编号:BS-XCX-020

前言:

随着互联网络的发展,网上购物越来越为人们所关注。网上购物给用户提供方便的购买途径,只要简单的网络操作,足不出户,即可送货上门,种类齐全,并具有完善的售后服务。我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,购物系统设计被用户普遍使用,为方便用户能够可以随时进行购物系统设计的数据信息管理,特开发了基于购物系统设计的管理系统。

购物系统设计的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系统平台后期的可操作性,通过对信息内容的详细了解进行技术的开发。

购物系统设计的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与购物系统设计管理的实际需求相结合,讨论了基于购物系统设计管理的使用。

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA\微信开发者工具

前端开发技术:微信小程序+Vue+Nodejs

后台开发技术:SSM框架

二,项目简介

随着社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络传播的生活方式逐渐受到广大人民群众的喜爱。越来越多的互联网爱好者开始在互联网上满足他们的基本需求,同时逐渐进入各个用户的生活起居。互联网具有许多优点,例如便利性,速度,高效率和低成本。因此,类似于购物系统设计,满足用户工作繁忙的需求,不仅是方便用户随时查看信息的途径,而且还能提高管理效率。

本文首先以购物系统设计过程的基本问题作为研究对象。在开发系统之前,我们对现有状况进行了详细的调查和分析。最后,我们利用计算机技术开发了一套完整合适的购物系统设计。该系统的实现主要优势是:该系统主要采用计算机技术开发,它方便快捷;系统可以通过管理员界面查看用户的所有信息管理。

购物系统设计管理系统软件是一款方便、快捷、实用的信息服务查询软件。随着智能网络在全球市场的不断普及以及各种智能平台的使用,系统的开发与人们的日常需求相关,作为中国主流智能的技术开发系统,自然需要这样的软件来满足更多用户的需求和体验。

系统功能结构图如下图所示:

(1)下图是用户实体和其具备的属性。

小程序商城|微信小程序商城系统_小程序


图4.1 用户实体属性图

(2)下图是商品信息实体和其具备的属性。

小程序商城|微信小程序商城系统_原力计划_02


图4.2 商品信息实体属性图

(3)下图是订单实体和其具备的属性。

小程序商城|微信小程序商城系统_系统设计_03


图4.3 订单实体属性图

(4)下图是商品评论实体和其具备的属性。

小程序商城|微信小程序商城系统_微信小程序_04


图4.4 商品评论实体属性图

(5)下图是字典表实体和其具备的属性。

图4.5 字典表实体属性图

(6)下图是客服聊天实体和其具备的属性。

小程序商城|微信小程序商城系统_原力计划_05


图4.6 客服聊天实体属性图

(7)下图是购物车表实体和其具备的属性。

小程序商城|微信小程序商城系统_java_06


图4.7 购物车表实体属性图

(8)下图是商品资讯实体和其具备的属性。

小程序商城|微信小程序商城系统_java_07


图4.8 商品资讯实体属性图

(9)下图是地址实体和其具备的属性。

小程序商城|微信小程序商城系统_java_08


图4.9 地址实体属性图

(10)下图是商品收藏实体和其具备的属性。

小程序商城|微信小程序商城系统_微信小程序_09


图4.10 商品收藏实体属性图

(11)下图是用户表实体和其具备的属性。

小程序商城|微信小程序商城系统_系统设计_10


图4.11 用户表实体属性图

三,系统展示

注册用户通过注册窗口,进行在线填写自己的用户名、密码、姓名、手机、电子邮箱等等,信息编辑完成后核对信息无误后进行选择注册,系统核对用户所输入的账号信息是否准确,核对信息准确无误后系统进入到操作界面。

用户通过登录进入到系统操作界面后,可以根据需求对首页、商品信息、特价商品、我的等模块进行管理维护操作。

如图5-1所示。

小程序商城|微信小程序商城系统_java_11

图5-1注册用户界面图

用户登录通过用户名、密码行页面,进入到购物系统设计主界面,进入到操作界面,进行相对应操作,如图5-2所示。

小程序商城|微信小程序商城系统_小程序_12

图5-2用户登录界面图

用户首页页面可以查看首页、商品信息、特价商品、我的等信息,进行提交操作,如图5-3所示。

小程序商城|微信小程序商城系统_微信小程序_13

图5-3首页界面图

用户进入特价商品页面可以填写商品名称、倒计时、分类、图片、规格、品牌、生产日期、保质期、价格等信息,进行加入购物车、立即购买操作,如图5-4所示。

小程序商城|微信小程序商城系统_java_14

图5-4特价商品界面图

用户进入用户信息页面可以填写用户名、密码、姓名、性别、头像、手机、邮箱等信息,进行保存、退出登录操作,如图5-5-所示。

小程序商城|微信小程序商城系统_系统设计_15

图5-5用户信息界面图

用户进入用户充值页面可以填写金额等信息,进行提交操作,如图5-6-所示。

小程序商城|微信小程序商城系统_java_16

图5-6用户充值界面图

用户进入我的订单页面可以填写商品名称、价格、地址等信息,进行提交操作,如图5-7-所示。

小程序商城|微信小程序商城系统_微信小程序_17

后台管理部分界面

小程序商城|微信小程序商城系统_原力计划_18

小程序商城|微信小程序商城系统_java_19

四,核心代码展示

package com.controller;







import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.StringUtil;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
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.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 商品信息
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/goods")
public class GoodsController {
    private static final Logger logger = LoggerFactory.getLogger(GoodsController.class);

    @Autowired
    private GoodsService goodsService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service

    @Autowired
    private YonghuService yonghuService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = goodsService.queryPage(params);

        //字典表数据转换
        List<GoodsView> list =(List<GoodsView>)page.getList();
        for(GoodsView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        GoodsEntity goods = goodsService.selectById(id);
        if(goods !=null){
            //entity转view
            GoodsView view = new GoodsView();
            BeanUtils.copyProperties( goods , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);

            goods.setGoodsClickTime(new Date());
            goods.setGoodsClickNumber(goods.getGoodsClickNumber()+1);
            goodsService.updateById(goods);

            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody GoodsEntity goods, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,goods:{}",this.getClass().getName(),goods.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        Wrapper<GoodsEntity> queryWrapper = new EntityWrapper<GoodsEntity>()
            .eq("goods_name", goods.getGoodsName())
            .eq("goods_types", goods.getGoodsTypes())
            .eq("goods_biaoqian_types", goods.getGoodsBiaoqianTypes())
            .eq("goods_pinpai", goods.getGoodsPinpai())
            .eq("goods_guige", goods.getGoodsGuige())
            .eq("goods_click_number", goods.getGoodsClickNumber())
            .eq("goods_temai_types", goods.getGoodsTemaiTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        GoodsEntity goodsEntity = goodsService.selectOne(queryWrapper);
        if(goodsEntity==null){
            goods.setInsertTime(new Date());
            goodsService.insert(goods);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody GoodsEntity goods, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,goods:{}",this.getClass().getName(),goods.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        //根据字段查询是否有相同数据
        Wrapper<GoodsEntity> queryWrapper = new EntityWrapper<GoodsEntity>()
            .notIn("id",goods.getId())
            .andNew()
            .eq("goods_name", goods.getGoodsName())
            .eq("goods_types", goods.getGoodsTypes())
            .eq("goods_biaoqian_types", goods.getGoodsBiaoqianTypes())
            .eq("goods_pinpai", goods.getGoodsPinpai())
            .eq("goods_guige", goods.getGoodsGuige())
            .eq("goods_click_number", goods.getGoodsClickNumber())
            .eq("goods_temai_types", goods.getGoodsTemaiTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        GoodsEntity goodsEntity = goodsService.selectOne(queryWrapper);
        if("".equals(goods.getGoodsPhoto()) || "null".equals(goods.getGoodsPhoto())){
                goods.setGoodsPhoto(null);
        }
        if(goodsEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      goods.set
            //  }
            goodsService.updateById(goods);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        goodsService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }






}
package com.controller;







import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.StringUtil;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
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.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 订单
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/orders")
public class OrdersController {
    private static final Logger logger = LoggerFactory.getLogger(OrdersController.class);

    @Autowired
    private OrdersService ordersService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private AddressService addressService;
    @Autowired
    private GoodsService goodsService;
    @Autowired
    private YonghuService yonghuService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = ordersService.queryPage(params);

        //字典表数据转换
        List<OrdersView> list =(List<OrdersView>)page.getList();
        for(OrdersView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        OrdersEntity orders = ordersService.selectById(id);
        if(orders !=null){
            //entity转view
            OrdersView view = new OrdersView();
            BeanUtils.copyProperties( orders , view );//把实体数据重构到view中

                //级联表
                AddressEntity address = addressService.selectById(orders.getAddressId());
                if(address != null){
                    BeanUtils.copyProperties( address , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setAddressId(address.getId());
                }
                //级联表
                GoodsEntity goods = goodsService.selectById(orders.getGoodsId());
                if(goods != null){
                    BeanUtils.copyProperties( goods , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setGoodsId(goods.getId());
                }
                //级联表
                YonghuEntity yonghu = yonghuService.selectById(orders.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody OrdersEntity orders, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,orders:{}",this.getClass().getName(),orders.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            orders.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        Wrapper<OrdersEntity> queryWrapper = new EntityWrapper<OrdersEntity>()
            .eq("goods_order_uuid_number", orders.getGoodsOrderUuidNumber())
            .eq("yonghu_id", orders.getYonghuId())
            .eq("goods_id", orders.getGoodsId())
            .eq("buy_number", orders.getBuyNumber())
            .eq("price", orders.getPrice())
            .eq("discountprice", orders.getDiscountprice())
            .eq("total", orders.getTotal())
            .eq("discounttotal", orders.getDiscounttotal())
            .eq("order_types", orders.getOrderTypes())
            .eq("address_id", orders.getAddressId())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        OrdersEntity ordersEntity = ordersService.selectOne(queryWrapper);
        if(ordersEntity==null){
            orders.setInsertTime(new Date());
            ordersService.insert(orders);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody OrdersEntity orders, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,orders:{}",this.getClass().getName(),orders.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            orders.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<OrdersEntity> queryWrapper = new EntityWrapper<OrdersEntity>()
            .notIn("id",orders.getId())
            .andNew()
            .eq("goods_order_uuid_number", orders.getGoodsOrderUuidNumber())
            .eq("yonghu_id", orders.getYonghuId())
            .eq("goods_id", orders.getGoodsId())
            .eq("buy_number", orders.getBuyNumber())
            .eq("price", orders.getPrice())
            .eq("discountprice", orders.getDiscountprice())
            .eq("total", orders.getTotal())
            .eq("discounttotal", orders.getDiscounttotal())
            .eq("order_types", orders.getOrderTypes())
            .eq("address_id", orders.getAddressId())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        OrdersEntity ordersEntity = ordersService.selectOne(queryWrapper);
        if(ordersEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      orders.set
            //  }
            ordersService.updateById(orders);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        ordersService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }







}

五,项目总结

购物系统设计的系统项目的概述设计分析,主要内容有学习平台的具体分析,进行数据库的是设计,数据采用mysql数据库,并且对于系统的设计采用比较人性化的操作设计,对于系统出现的错误信息可以及时做出处理及反馈。

基于购物系统设计的设计基于现有的手机,可以实现首页、个人中心、商品分类管理、商品信息管理、特价商品管理、用户管理、留言板管理、系统管理、订单管理等功能。方便用户对首页、商品信息、特价商品、我的等详细的了解及统计分析。

购物系统设计的开发对管理模块和系统使用的数据库进行分析,编写代开发,规划和操作是构建信息管理应用程序的必要三步曲,它决定了系统是否能够真正实现预设功能以及是否可以在成功设计后实施。在开发过程中,每个阶段必须严格按照线性顺序进行开发,并且在相应阶段生成的每个工作都可以通过技术进行验证和检查。确保一个阶段完成后是正确的,不会造成下一阶段拖拽现象,使系统完成设计功能后得到保证。