(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文

大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。

当前专栏:Java毕业设计

精彩专栏推荐

安卓app毕业设计
微信小程序毕业设计

目录

  • 一、项目简介
  • 二、系统设计
    • 2.1软件功能模块设计
    • 2.2数据库设计
  • 三、系统项目部分截图
    • 3.1用户登录功能模块
    • 3.2用户订单会员功能
    • 3.3管理员功能模块
  • 四、论文目录
  • 五、部分核心代码
    • 4.1 用户部分
    • 4.2产品部分
  • 获取源码或论文

一、项目简介

论文主要是对当前农产品售卖网站系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统的设计目标进行了论述,还有系统的需求,以及整个的设计方案,对系统的设计以及实现,也都论述的比较细致,最后对农产品售卖网站进行了一些具体测试。农产品网站系统主要包括:基础信息管理,农产品展示,网上购物和用户管理四个方面。

二、系统设计

2.1软件功能模块设计

系统结构设计
系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。天地农场农产品网站的整体结构设计如图4-2所示。
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第1张图片
管理员所能使用的功能主要有:电子商务平台的售卖类型,农产品信息的添加,客户信息管理、系统用户管理,订单历史采购等功能。
登录系统结构图,如图4-3所示:
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第2张图片
管理员结构图,如图4-4所示。
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第3张图片

2.2数据库设计

1.数据库实体:
数据模型中的实体(Entity),也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。例如,公司中的每个员工,家里中的每个家具。
本系统的E-R图如下图所示:
1、消费者实体图如图4-5所示:
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第4张图片
2、商品信息实体图如图4-6所示:
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第5张图片
3、订单信息实体属性图,如图4-8所示:
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第6张图片
4、物流信息实体属性图,如图4-9所示:
(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第7张图片

三、系统项目部分截图

3.1用户登录功能模块

用户登录通过系统后台,输入用户名、密码信息填写准确后选择登录。如图5.1所示。(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第8张图片

3.2用户订单会员功能

用户登录进入系统后台可以通过查看我的订单,进入订单管理。可以查看订单的状态和配送的状态。(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第9张图片

3.3管理员功能模块

管理员登录,通过填写注册时输入的用户名、密码、验证码进行登录,如图5-8所示。(Java毕业设计)农产品网站的设计与开发(java+mysql+b/s架构)附源码+论文_第10张图片

四、论文目录

1 概述 1
1.1课题背景及意义 1
1.2 国内外研究现状 1
1.3 本课题主要工作 2
2 系统开发环境 4
2.1系统开发平台 4
2.2 Mysql数据库 4
2.3 B/S结构 5
2.4 SSM框架 5
3 系统分析 7
3.1 可行性分析 7
3.1.1 技术可行性 7
3.1.2操作可行性 7
3.1.3 经济可行性 7
3.1.4 法律可行性 8
3.2系统流程分析 8
3.2.1系统开发流程 8
3.2.2 用户登录流程 9
3.2.3 系统操作流程 9
3.2.4 添加信息流程 10
3.2.5 修改信息流程 11
3.2.6 删除信息流程 11
4 系统设计 13
4.1 系统概述 13
4.2 系统结构设计 13
4.3数据库设计 15
4.3.1 数据库设计原则 15
4.3.2 数据库实体 16
4.3.3 数据库表设计 17
5统详细设计 21
5.1用户登录功能模块 21
5.2用户订单会员功能 23
5.3管理员功能模块 24
6系统测试 27
6.1系统测试的意义 27
6.2 测试方法 28
6.3测试分析 28
结 论 29
致 谢 30
参考文献 31

五、部分核心代码

4.1 用户部分

package com.jiaxuan.shop.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jiaxuan.shop.common.constant.PaginationConstant;
import com.jiaxuan.shop.common.exception.CustomerNotFoundException;
import com.jiaxuan.shop.common.utils.ResponseResult;
import com.jiaxuan.shop.params.CustomerParam;
import com.jiaxuan.shop.pojo.Customer;
import com.jiaxuan.shop.service.CustomerService;
import com.jiaxuan.shop.vo.CustomerVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * Author: jx
 * Description: 客户相关接口
 */
@Controller
@RequestMapping("/admin/customer")
public class CustomerController {

    @Autowired
    private CustomerService customerService;

    /**
     *功能描述: 获取所有的用户信息
     * @Author jx
     * @Param [pageNum, model]
     * @return java.lang.String
     */
    @RequestMapping("getAllCustomers")
    public String getAllCustomers(Integer pageNum, Model model){
        if (ObjectUtils.isEmpty(pageNum)) {
            pageNum = PaginationConstant.PAGE_NUM;
        }
        PageHelper.startPage(pageNum,PaginationConstant.PAGE_SIZE);
        List<Customer> customerList = customerService.findAllCustomers();

        PageInfo<Customer> pageInfo = new PageInfo<>(customerList);
        model.addAttribute("pageInfo",pageInfo);
        return "customerManager";
    }

    /**
     *功能描述: 通过多条件查询获取获取用户信息
     * @Author jx
     * @Param [customerParam, pageNum, model]
     * @return java.lang.String
     */
    @RequestMapping("getAllCustomersByParams")
    public String getAllCustomersByParams(CustomerParam customerParam, Integer pageNum, Model model){
        if (ObjectUtils.isEmpty(pageNum)) {
            pageNum = PaginationConstant.PAGE_NUM;
        }
        PageHelper.startPage(pageNum,PaginationConstant.PAGE_SIZE);
        List<Customer> customerList = customerService.findCustomersByParams(customerParam);
        PageInfo<Customer> pageInfo = new PageInfo<>(customerList);
        model.addAttribute("pageInfo",pageInfo);
        model.addAttribute("params",customerParam);


        return "customerManager";
    }

    /**
     *功能描述: 展示一个用户的信息
     * @Author jx
     * @Param [id]
     * @return ResponseResult
     */
    @RequestMapping("showCustomer")
    @ResponseBody
    public ResponseResult showCustomer(int id){
        try {
            Customer customer = customerService.findCustomerId(id);
            return ResponseResult.success("获取用户信息成功",customer);
        }catch (CustomerNotFoundException e){
            return ResponseResult.fail(e.getMessage());
        }
    }

    /**
     *功能描述: 修改客户信息
     * @Author jx
     * @Param [customerVo, pageNum, model]
     * @return java.lang.String
     */
    @RequestMapping("modifyCustomer")
    public String modifyCustomer (CustomerVo customerVo , Integer pageNum , Model model){
        if (ObjectUtils.isEmpty(pageNum)) {
            pageNum = PaginationConstant.PAGE_NUM;
        }
        if (customerService.modifyCustomer(customerVo)) {
            model.addAttribute("successMsg","修改成功");
        }else{
            model.addAttribute("failMsg","修改失败");
        }
        return "forward:getAllCustomers?pageNum="+pageNum;
    }

    /**
     *功能描述: 禁用启用客户账户
     * @Author jx
     * @Param [id]
     * @return ResponseResult
     */
    @RequestMapping("modifyCustomerStatus")
    @ResponseBody
    public ResponseResult modifyCustomerStatus(int id){
        if (customerService.modifyCustomerStatus(id)) {
           return ResponseResult.success("状态修改成功");
        }else{
            return ResponseResult.success("状态修改失败");
        }
    }
}

4.2产品部分


package com.jiaxuan.shop.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jiaxuan.shop.vo.ProductVo;
import com.jiaxuan.shop.common.constant.PaginationConstant;
import com.jiaxuan.shop.common.utils.ResponseResult;
import com.jiaxuan.shop.dto.ProductDto;
import com.jiaxuan.shop.pojo.Product;
import com.jiaxuan.shop.pojo.ProductType;
import com.jiaxuan.shop.service.ProductService;
import com.jiaxuan.shop.service.ProductTypeService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Author: jx
 * Description: 商品管理接口
 */
@Controller
@RequestMapping("/admin/product")
public class ProductController {

    @Autowired
    private ProductTypeService productTypeService;

    @Autowired
    private ProductService productService;

    /**
     * 功能描述: 页面数据初始化,所有方法执行前执行,将所有启用的商品类型先拿到
     *
     * @return java.util.List
     * @Author jx
     * @Param []
     */
    @ModelAttribute("productTypes")
    public List<ProductType> loadProductTypes() {
        List<ProductType> productTypes = productTypeService.findAllEnableProductTypes();
        return productTypes;
    }

    /**
     *功能描述: 获取所有商品列表
     * @Author jx
     * @Param [pageNum, model]
     * @return java.lang.String
     */
    @RequestMapping("findAllProduct")
    public String findAllProduct(Integer pageNum , Model model) {
        if (ObjectUtils.isEmpty(pageNum)) {
            pageNum = PaginationConstant.PAGE_NUM;
        }
        //封装分页插件
        PageHelper.startPage(pageNum,PaginationConstant.PAGE_SIZE);

        List<Product> productList = productService.findAllProducts();

        PageInfo<Product> pageInfo = new PageInfo<>(productList);
        model.addAttribute("pageInfo",pageInfo);
        return "productManager";
    }

    /**
     *功能描述: 添加商品
     * @Author jx
     * @Param [productVo, pageNum, session, model]
     * @return java.lang.String
     */
    @RequestMapping("addProduct")
    public String addProduct(ProductVo productVo, Integer pageNum, HttpSession session, Model model){
        //TODO:通过session拿到上传文件的实际路径,这里注释:原因修改为上传到ftp服务器上,
        //TODO: 图片路径修为可以通过 http访问的
        //String uploadPath = session.getServletContext().getRealPath("/WEB-INF/upload");

        //TODO:CommonsMultipartFile 文件上传
        /*最好不要直接把web层的 CommonsMultipartFile 对象传给service,这样就会出现 service 层
        调用web层了,需要避免耦合,所以要封装 dto 类,专门用于数据传输封装*/

        try {
            //把Vo 转化为 dto传给 service
            ProductDto productDto = new ProductDto();

            //todo:使用 spring BeanUtils属性拷贝
            BeanUtils.copyProperties(productVo, productDto); //对象间属性的拷贝,可以将两个对象之间相同的属性拷贝
            productDto.setInputStream(productVo.getFile().getInputStream());
            productDto.setFileName(productVo.getFile().getOriginalFilename());

            //productDto.setUploadPath(uploadPath);

            //将数据保存到数据库中
            int rows = productService.addProduct(productDto);
            if (rows >= 1) {
                model.addAttribute("successMsg", "添加成功");
            } else {
                model.addAttribute("failMsg", "添加失败");
            }
        } catch (Exception e) {
            //System.out.println("ProductController.addProduct"+ e.printStackTrace());
            e.printStackTrace();
                model.addAttribute("errorMsg", "文件上传失败");
        }
        //重新加载当前页面数据,接收前端传过来的 页面 pageNum
        return "forward:findAllProduct?pageNum="+pageNum;
    }

    /**
     *功能描述: 前端校验 商品名称是否存在接口
     * @Author jx
     * @Param [name, model]
     * @return java.util.Map
     */
    @RequestMapping("checkProductName")
    @ResponseBody
    public Map<String , Object> checkProductName(String name , Model model) {
        Map<String,Object> map = new HashMap<>();
        if(productService.checkProductName(name)) {
            map.put("valid",true);
        }else{
            //TODO:返回这两个,bootstrapValidator 校验 插件 remote 校验会自己读取 valid 的值和message的
            map.put("valid",false);
            map.put("message","商品("+name+")已存在");
        }
        return map;
    }

    /**
     *功能描述: 通过 id 获取商品信息
     * @Author jx
     * @Param [id]
     * @return ResponseResult
     */
    @RequestMapping("findProductById")
    @ResponseBody
    public ResponseResult findProductById(int id) {
        Product product = productService.findProductById(id);
        if (product != null) {
            return ResponseResult.success(product);
        }else{
            return ResponseResult.fail("该商品信息不存在");
        }
    }

    /**
     *功能描述: 获取图片,修改商品信息预览图片显示
     * @Author jx
     * @Param [path, outputStream]
     * @return void
     */
    @RequestMapping("getImage")
    public void getImage(String path, OutputStream outputStream){
        //直接响应写入到输出流中
        productService.getImage(path, outputStream);
    }

    /**
     *功能描述: 修改商品信息,内容跟添加商品信息差不多
     * @Author jx
     * @Param [productVo, pageNum, session, model]
     * @return java.lang.String
     */
    @RequestMapping("modifyProduct")
    public String modifyProduct(ProductVo productVo, Integer pageNum, HttpSession session, Model model)  {
        //TODO:通过session拿到上传文件的实际路径 : 注释: 修改上传路径为我的云服务器
        //String uploadPath = session.getServletContext().getRealPath("/WEB-INF/upload");
        //TODO:CommonsMultipartFile 文件上传
        /*最好不要直接把web层的 CommonsMultipartFile 对象传给service,这样就会出现 service 层
        调用web层了,需要避免耦合,所以要封装 dto 类,专门用于数据传输封装*/

        try {
            //把Vo 转化为 dto传给 service
            ProductDto productDto = new ProductDto();
            //todo:使用 spring BeanUtils属性拷贝
            BeanUtils.copyProperties(productVo, productDto); //对象间属性的拷贝,可以将两个对象之间相同的属性拷贝
            productDto.setInputStream(productVo.getFile().getInputStream());
            productDto.setFileName(productVo.getFile().getOriginalFilename());
            //productDto.setUploadPath(uploadPath);

            //更新数据
            int rows = productService.modifyProduct(productDto);
            if (rows >= 1) {
                model.addAttribute("successMsg", "修改成功");
            } else {
                model.addAttribute("failMsg", "修改失败");
            }
        } catch (Exception e) {
            model.addAttribute("errorMsg", "文件上传失败");
        }
        //重新刷新页面加载数据
        return "forward:findAllProduct?pageNum="+pageNum;
    }

    /**
     *功能描述: 根据 id 删除商品的信息
     * @Author jx
     * @Param [id]
     * @return ResponseResult
     */
    @RequestMapping("removeProductById")
    @ResponseBody
    public ResponseResult removeProductById(int id){
        int rows = productService.removeProductById(id);
        if (rows >= 1) {
            return ResponseResult.success("商品删除成功");
        }else {
            return ResponseResult.fail("商品删除失败");
        }
    }
}

获取源码或论文

如嘘对应的源码,可以斯wo

你可能感兴趣的:(Java毕业设计,java,课程设计,mysql)