计算机毕业设计 社区买菜系统 Vue+SpringBoot+MySQL

news2024/12/23 22:19:51

作者主页:Designer 小郑
作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者。

在这里插入图片描述

项目内容
项目名称 社区买菜系统( S 011 ) \color{red}{社区买菜系统(S011)} 社区买菜系统(S011
项目类型付费项目
源码获取源码自助获取
部署版无需源码即可在本地运行
交流答疑帖你可以在贴吧中交流讨论该项目
项目录屏你可以查看本项目的动态演示
增值服务 文档、部署、讲解 \color{red}{文档、部署、讲解} 文档、部署、讲解】《付费项目服务标准》

基于Vue+SpringBoot+MySQL的社区买菜系统包含菜品分类模块、菜品档案模块、菜品订单模块、菜品收藏模块、收货地址模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,社区买菜系统基于角色的访问控制,给买菜者、菜品管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

目录

  • 一、摘要
  • 二、系统设计
    • 2.1 功能模块设计
      • 2.1.1 数据中心模块
      • 2.1.2 菜品分类模块
      • 2.1.3 菜品档案模块
      • 2.1.4 菜品订单模块
      • 2.1.5 菜品收藏模块
      • 2.1.6 收货地址模块
    • 2.2 可行性分析
    • 2.3 用例分析
    • 2.4 实体类设计
      • 2.4.1 菜品分类模块
      • 2.4.2 菜品档案模块
      • 2.4.3 菜品订单模块
      • 2.4.4 菜品收藏模块
      • 2.4.5 收货地址模块
  • 三、系统实现
    • 3.1 系统展示
    • 3.2 配套文档展示
  • 四、核心代码展示
    • 4.1 菜品实体类设计
    • 4.2 收货地址实体类设计
    • 4.3 查询菜品接口设计
    • 4.4 菜品下单接口设计
    • 4.5 菜品收藏接口设计
  • 五、免责说明


一、摘要

随着计算机技术和网络技术的日益普及,给社区菜市场信息化建设带来了机遇,利用先进技术建立多种方式的社区买菜系统,这是一个明智的选择。通过电子屏和网站两种方式发布市场管理信息、商品信息(包括价格、质量等),能够起到增强市场和市民之间的信息交流,达到繁荣市场,更好的为市民服务之目的。本文采用B/S 模式相结合的架构,设计和实现了基于 Java EE 的社区买菜系统。


二、系统设计

2.1 功能模块设计

社区买菜系统的功能性需求主要包含数据中心模块、菜品分类模块、菜品档案模块、菜品订单模块、菜品收藏模块、收货地址模块这六大模块,系统是基于浏览器运行的web管理后端,其中各个模块详细说明如下。
在这里插入图片描述

2.1.1 数据中心模块

数据中心模块包含了社区买菜系统的系统基础配置,如登录用户的管理、运营公司组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。

其中登录用户管理模块,由管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。

组织架构,指的是高校的组织架构,该模块适用于管理这些组织架构的部门层级和教师的部门归属情况。

用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。

系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。

公用云盘管理模块,用于统一化维护社区买菜系统中的图片,如合同签订文件、合同照片等等。

在这里插入图片描述

2.1.2 菜品分类模块

不同的菜品有着不同的类型,不同类型的菜品往往需要区分管理,所以需要建立菜品分类模块,菜品分类的数据包括类型名称、类型状态、排序值、备注、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询角色数据,用户可以查询管理员发布的角色数据。
在这里插入图片描述

2.1.3 菜品档案模块

菜品是社区买菜系统的核心实体,需要建立菜品档案模块对系统上架的菜品数据进行管理,菜品的字段包括菜品名称、菜品介绍、菜品分类、剩余库存、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询菜品数据,用户可以查询管理员发布的菜品数据。
在这里插入图片描述

2.1.4 菜品订单模块

有了菜品数据之后,用户就可以在社区买菜系统中下单了,菜品订单的数据包括菜品、下单数量、总价、收货地址、创建人、创建时间、更新人、更新时间,用户可以发起下单申请,管理员可以处理用户发起的菜品订单。

在这里插入图片描述

2.1.5 菜品收藏模块

为了更好的服务用户,社区买菜系统支持对菜品进行收藏,以便于用户更方便快捷的下单自己喜欢的菜品,菜品收藏字段包括菜品ID、菜品名称、菜品图片、收藏人、创建人、创建时间、更新人、更新时间,用户可以发起菜品收藏申请,管理员可以查询用户的菜品收藏信息。

在这里插入图片描述

2.1.6 收货地址模块

为了方便用户更快捷的下单,用户可以对自己的收货地址进行管理,在菜品下单时可以快捷选择自己维护的收货地址。收货地址字段包括挂靠人、收货地址、联系人、联系电话、创建人、创建时间、更新人、更新时间,用户可以新增、编辑、删除和条件查询自己的收货地址,管理员可以查询全部用户的收货地址。

在这里插入图片描述

2.2 可行性分析

我将首先调查同类型市场的社区买菜系统,了解其优缺点,然后询问一些与系统和买菜相关的专家,并与他们讨论我们的初步想法。然后,我将对客户进行实地调查,以了解他们对这类社区买菜系统的具体要求。最后,我们将总结上述所有要点,以澄清我们的系统与类似产品之间的区别,并确定我们将开发的社区买菜系统的特点,使其在推出后在市场上更有前景。

2.3 用例分析

UML是面向对象的图形化建模语言,具有表示容易,定义友好,适用范畴广泛,功能强大。

用例图是用例模型的一种,需求分析人员可采用用例图表示用户操作行为。社区买菜系统的用例图设计主要包括用户用例设计和管理员用例设计。
在这里插入图片描述

2.4 实体类设计

2.4.1 菜品分类模块

在这里插入图片描述

2.4.2 菜品档案模块

在这里插入图片描述

2.4.3 菜品订单模块

在这里插入图片描述

2.4.4 菜品收藏模块

在这里插入图片描述

2.4.5 收货地址模块

在这里插入图片描述


三、系统实现

3.1 系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 配套文档展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、核心代码展示

4.1 菜品实体类设计

@Table(name = "a_dish")
@TableName("a_dish")
@ApiModel(value = "菜品")
public class Dish extends ZwzBaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "菜品名称")
    private String title;

    @ApiModelProperty(value = "菜品介绍")
    private String content;

    @ApiModelProperty(value = "菜品分类")
    private String type;

    @ApiModelProperty(value = "单价")
    private BigDecimal unit;

    @ApiModelProperty(value = "剩余库存")
    private BigDecimal stock;

    @ApiModelProperty(value = "供应商")
    private String supplier;

    @ApiModelProperty(value = "图片")
    private String image;

    @Transient
    @TableField(exist=false)
    @ApiModelProperty(value = "是否收藏")
    private Boolean collectionFlag;
}

4.2 收货地址实体类设计

@Table(name = "a_shipping_address")
@TableName("a_shipping_address")
@ApiModel(value = "收货地址")
public class ShippingAddress extends ZwzBaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "挂靠人ID")
    private String userId;

    @ApiModelProperty(value = "挂靠人")
    private String userName;

    @ApiModelProperty(value = "收货地址")
    private String address;

    @ApiModelProperty(value = "收货人")
    private String consignee;

    @ApiModelProperty(value = "联系电话")
    private String mobile;
}

4.3 查询菜品接口设计

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询菜品")
public Result<IPage<Dish>> getByPage(@ModelAttribute Dish dish ,@ModelAttribute PageVo page){
    QueryWrapper<Dish> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dish.getTitle())) {
        qw.like("title",dish.getTitle());
    }
    if(!ZwzNullUtils.isNull(dish.getContent())) {
        qw.like("content",dish.getContent());
    }
    if(!ZwzNullUtils.isNull(dish.getSupplier())) {
        qw.like("supplier",dish.getSupplier());
    }
    User currUser = securityUtil.getCurrUser();
    IPage<Dish> data = iDishService.page(PageUtil.initMpPage(page),qw);
    for (Dish vo : data.getRecords()) {
        QueryWrapper<DishCollection> collQw = new QueryWrapper<>();
        collQw.eq("user_id",currUser.getId());
        collQw.eq("dish_id",vo.getId());
        vo.setCollectionFlag(iDishCollectionService.count(collQw) > 0L);
    }
    return new ResultUtil<IPage<Dish>>().setData(data);
}

4.4 菜品下单接口设计

@RequestMapping(value = "/addOneOrder", method = RequestMethod.POST)
@ApiOperation(value = "从购物车下单")
public Result<Object> addOneOrder(@RequestParam String[] ids){
    List<DishOrderItem> itemList = new ArrayList<>();
    List<ShoppingCart> cartList = new ArrayList<>();
    BigDecimal sumMoney = BigDecimal.ZERO;
    for(String id: ids) {
        ShoppingCart sc = iShoppingCartService.getById(id);
        if(sc == null) {
            return ResultUtil.error("购物车已被删除");
        }
        cartList.add(sc);
        Dish dish = iDishService.getById(sc.getDishId());
        if(dish == null) {
            return ResultUtil.error("菜品已下架");
        }
        DishOrderItem item = new DishOrderItem();
        item.setDishId(dish.getId());
        item.setDishName(dish.getTitle());
        item.setUnit(dish.getUnit());
        item.setImage(dish.getImage());
        item.setNumber(sc.getNumber());
        item.setSumMoney(item.getUnit().multiply(item.getNumber()));
        itemList.add(item);
        sumMoney = sumMoney.add(item.getSumMoney());
    }
    User currUser = securityUtil.getCurrUser();
    DishOrder order = new DishOrder();
    order.setUserId(currUser.getId());
    order.setUserName(currUser.getNickname());
    order.setOrderTime(DateUtil.now());
    order.setSumMoney(sumMoney);
    order.setOrderSize(BigDecimal.valueOf(itemList.size()));
    order.setStatus("已下单");
    iDishOrderService.saveOrUpdate(order);
    for (DishOrderItem item : itemList) {
        item.setOrderId(order.getId());
        iDishOrderItemService.saveOrUpdate(item);
    }
    for (ShoppingCart vo : cartList) {
        iShoppingCartService.removeById(vo.getId());
    }
    return ResultUtil.success();
}

4.5 菜品收藏接口设计

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "添加单条收藏")
public Result<Object> addOne(@RequestParam String id){
    Dish dish = iDishService.getById(id);
    if(dish == null) {
        return ResultUtil.error("菜品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<DishCollection> qw = new QueryWrapper<>();
    qw.eq("user_id",currUser.getId());
    qw.eq("dish_id",dish.getId());
    if(iDishCollectionService.count(qw) > 0L) {
        return ResultUtil.error("您已收藏");
    }
    DishCollection dc = new DishCollection();
    dc.setDishId(dish.getId());
    dc.setDishName(dish.getTitle());
    dc.setUserId(currUser.getId());
    dc.setUserName(currUser.getNickname());
    dc.setCollectionTime(DateUtil.now());
    iDishCollectionService.saveOrUpdate(dc);
    return ResultUtil.success();
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript中的原型链(prototype chain)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript中的原型链⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏…

如何访问GitHub

1、手动修改hosts 1.1、查找到最新的GitHub的hosts信息 通过链接&#xff1a;https://raw.hellogithub.com/hosts 进行查找最新的GitHub的hosts信息 1.2、查找到hosts文件位置 先找到 hosts 文件的位置&#xff0c;不同操作系统&#xff0c;hosts 文件的存储位置也不同&…

量化:基于RSRS的市场择时复现

文章目录 资源研报解读概念Q&ARSRS指标构建交易逻辑 资源 《阻力支撑相对强度RSRS研究报告》 链接&#xff1a;https://pan.baidu.com/s/1EhtoC25WSO7WpNiyZpcKYA 提取码&#xff1a;2023 合吾~~~祝投资顺利愉快&#xff01; 研报复现系列&#xff08;5&#xff09;基于阻力…

Dev-C++中,不使用include <string>也可以用string name1, name2; 为什么?

Dev-C中&#xff0c;不使用 include <string> 也可以用 string name1, name2; 为什么&#xff1f; 例如&#xff1a; #include <iostream> //#include <string> using namespace std; int main() { string s1, s2; cout << "请输入两个…

“深入探究SpringMVC的工作原理与入门实践“

目录 引言1. 什么是SpringMVC?1.1. 模型1.2. 视图1.3. 控制器 2. SpringMVC的工作流程2.1. 客户端发送请求2.2. DispatcherServlet的处理2.3. 处理器映射器的使用2.4. 处理器的执行2.5. 视图解析器的使用2.6. 视图的渲染 3. SpringMVC的核心组件4. 弹簧MVC总结 引言 SpringMV…

Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)

多线程案例 一、设计模式&#xff08;单例模式工厂模式&#xff09;1、单例模式2、工厂模式 二、阻塞式队列1、生产者消费者模型2、阻塞对列在生产者消费者之间的作用3、用标准库阻塞队列实现生产者消费者模型4、模拟实现阻塞队列 三、定时器1、标准库中的定时器2、模拟实现定时…

WinXP 蓝屏死机,并报代码0x0000007B的错误

蓝屏死机&#xff0c;并报代码0x0000007B的错误&#xff0c;通常情况都是硬盘的存储控制器驱动加载错误导致故障。导致驱动加载错误的情况&#xff0c;可能有以下三种情况&#xff1a; 1、无法自动识别硬盘控制器 使用非正版的操作系统光盘&#xff08;进过修改或者加强的Wind…

doris多租户资源隔离及权限管理

Doris 的多租户和资源隔离方案&#xff0c;主要目的是为了多用户在同一 Doris 集群内进行数据操作时&#xff0c;减少相互之间的干扰&#xff0c;能够将集群资源更合理的分配给各用户。 该方案主要分为两部分&#xff0c;一是集群内节点级别的资源组划分&#xff0c;二是针对单…

明星录制祝福视频:传递温情与关怀的独特方式

在当今社交媒体和数字化时代&#xff0c;明星录制祝福视频已经成为一种新颖而独特的方式&#xff0c;用来表达温馨祝福、分享喜悦&#xff0c;或者为特殊的时刻增添一份特别的意义。无论是生日、结婚、毕业&#xff0c;还是节日、活动等&#xff0c;明星录制的祝福视频能够让人…

VUVLO电压监测器的工作原理、应用及性能分析 | 百能云芯

在现代电子设备中&#xff0c;电压监测是确保稳定性和可靠性的关键。VUVLO电压监测器是一种重要的电子元件&#xff0c;它的作用是监测电源电压&#xff0c;并在电压低于或高于设定值时触发相应的操作。在本文中&#xff0c;我们将深入探讨VUVLO电压监测器的工作原理、应用领域…

Windows下搭建MavLink通信协议环境,并用C++程序测试

搭建环境 git克隆 git clone https://github.com/mavlink/mavlink.git --recursive安装python的future库 pip install future使用可视化工具生成mavlink库 XML是选择消息格式&#xff0c;也可以自定义Out是输出路径Language是生成的语言&#xff0c;我这里是CProtocol是协议…

Linux--I/O复用之select

目录 一&#xff1a;概念 二&#xff1a;使用 三&#xff1a;参数介绍&#xff1a; 1.ndfs&#xff1a; 2.fd_set类型&#xff1a; 3.readfds&#xff1a; 4.writefds&#xff1a; 5.exceptfds&#xff1a; 6.timeout&#xff1a; 7.返回值&#xff1a; 四&#xff1…

1.2 互联网概述

思维导图&#xff1a; 主要内容 &#xff1a; 这段话描述了“互联网”的基本概念和组成。首先&#xff0c;强调了该段文本主要是关于计算机网络的讨论&#xff0c;而不是关于电信网络或有线电视网络。 接下来&#xff0c;描述了计算机网络的基本构成&#xff0c;由结点&…

23062网络编程day8

将dict.txt导入到数据库中&#xff08;单词一列&#xff0c;意思一列&#xff09; #include <myhead.h> int main(int argc, const char *argv[]) {//打开数据库sqlite3 *db;if(sqlite3_open("./dict.db",&db) ! SQLITE_OK){fprintf(stderr,"sqlite3…

零代码编程:用ChatGPT批量整理excel表格数据

有这样一个表格&#xff0c;里面内容从pdf复制而来&#xff0c;只想保留专精特新示范企业名单&#xff0c;删除其他无关内容。 可以在ChatGPT中输入如下提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一段代码&#xff0c;实现批量删除excel表格中特定单元格内容的…

【Element】Vue+Element表单校验详解

Element表单校验 作为一个后端开发&#xff0c;总结一下实际工作中表单校验的场景和用法。 Element官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/form 代码地址&#xff1a;https://gitee.com/kkmy/kw-microservices/tree/master/kw-ui/kwsphere 常用表单校验场…

小程序中如何查看会员的余额和变更记录

​通过查看会员的余额和变更记录&#xff0c;可以帮助商家更好地管理会员资金&#xff0c;提供更好的服务和用户体验。下面将介绍小程序中如何查看会员的余额以及余额的变更记录。 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要查看余额和记录的会员…

【系统设计系列】 回顾可扩展性

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemart…

猫头虎博主赠书二期:《Go黑帽子 渗透测试编程之道(安全技术经典译丛) 》

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

volatile+SIGCHLD信号+可重入函数(了解)

索引 volatile1.gcc -O含义及其作用2.证明其内存可见性 深入理解SIGCHLD信号SIGCHLD总结 可重入函数 volatile 保存内存的可见性&#xff0c;告知编译器&#xff0c;该关键字修饰的变量不允许被优化&#xff0c;对该变量的任何操作都必须在内存中操作。 1.gcc -O含义及其作用…