【开源】SpringBoot框架开发校园超市管理系统


目录

  • 一、摘要
    • [1.1 项目介绍](#1.1 项目介绍)
    • [1.2 项目录屏](#1.2 项目录屏)
  • 二、功能模块
    • [2.1 供应商模块](#2.1 供应商模块)
    • [2.2 超市商品模块](#2.2 超市商品模块)
    • [2.3 超市账单模块](#2.3 超市账单模块)
  • 三、系统设计
    • [3.1 前端架构设计](#3.1 前端架构设计)
    • [3.2 后端架构设计](#3.2 后端架构设计)
  • 四、系统实现
  • 五、核心代码
    • [5.1 查询商品](#5.1 查询商品)
    • [5.2 删除商品](#5.2 删除商品)
    • [5.3 查询供应商](#5.3 查询供应商)
    • [5.4 查询账单](#5.4 查询账单)
    • [5.5 新增账单](#5.5 新增账单)
  • 六、免责说明

一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的校园超市管理系统,包含了供应商模块、超市商品模块、超市账单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,校园超市管理系统基于角色的访问控制,给超市管理员、收银员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

系统主要分为用户界面端和业务逻辑端。前端使用流行的ViewUI组件库创建简单大方的前端页面,易于使用并具有较高的用户体验。在后端,Springboot与许多框架兼容,并帮助我们快速创建系统范围的框架,因此我们使用流行的Springboot技术来完成我们的开发,主要的开发框架是SpringBoot框架。然后,在企业级别,调用数据绑定来添加、删除、修改和查询数据库,并将数据结果返回给用户。基于Java的校园超市管理系统的编程开发中,我们可以看到主流的系统设计思想,这有助于大大提高程序的可行性、完整性和安全性。

2.1 供应商模块

校园超市管理系统的供应商模块是一个重要的管理模块,它涉及到与供应商相关的信息管理、采购订单管理等一系列功能。管理员可以通过该模块添加新的供应商信息,包括供应商名称、联系方式、地址、合作条款等。在添加新的供应商信息时,管理员需要输入相关的信息,并在系统中进行保存和提交。如果管理员发现某个供应商不再合作,或者供应商的信息已经过期,那么管理员可以通过该模块将该供应商的信息删除。在删除供应商信息时,管理员需要确认删除的供应商,并在系统中进行删除操作。如果某个供应商的信息发生变化,如联系方式、地址等,那么管理员可以通过该模块进行修改操作。在修改供应商信息时,管理员需要输入修改后的信息,并在系统中进行更新操作。管理员可以通过该模块查询所有供应商的信息,并在系统中进行查看。在查询供应商的过程中,管理员可以根据不同的条件进行查询,如供应商名称、联系方式等。管理员可以方便地维护和管理系统中的供应商信息,及时更新供应商的信息、删除无效的供应商、查询供应商的信息等,从而为超市的采购和库存管理提供良好的数据支持。

2.2 超市商品模块

校园超市管理系统的商品模块是管理与商品相关的信息和业务流程的模块。它通常包括商品信息管理、库存管理、采购管理等功能。管理员可以通过该模块添加新的商品信息,包括商品名称、价格、产地、条码、规格等。在添加新的商品信息时,管理员需要输入相关的信息,并在系统中进行保存和提交。如果管理员发现某个商品已经过期或者不再销售,那么管理员可以通过该模块将该商品的信息删除。在删除商品信息时,管理员需要确认删除的商品,并在系统中进行删除操作。如果某个商品的信息发生变化,如价格、规格等,那么管理员可以通过该模块进行修改操作。在修改商品信息时,管理员需要输入修改后的信息,并在系统中进行更新操作。管理员可以通过该模块查询所有商品的信息,并在系统中进行查看。在查询商品的过程中,管理员可以根据不同的条件进行查询,如商品名称、价格等。管理员可以方便地维护和管理系统中的商品信息,及时更新商品的信息、删除无效的商品、查询商品的信息等,从而为超市的采购和库存管理提供良好的数据支持。

2.3 超市账单模块

校园超市管理系统的超市账单模块是管理超市销售订单和账单信息的模块。它实现了超市账单的增删改查功能,该功能允许管理员或工作人员记录和管理超市的销售订单和账单信息。管理员可以通过该模块查看所有账单的信息,并对账单进行必要的修改或更新。账单信息通常包括订单号、销售日期、销售商品、销售数量、销售金额等。管理员可以通过该模块添加新的账单信息,将销售记录添加到系统中。在添加账单信息时,管理员需要输入相关的销售信息,如订单号、销售日期、销售商品、销售数量、销售金额等,并在系统中进行保存和提交。如果管理员发现某个账单信息有误或需要删除,可以通过该模块进行删除操作。在删除账单信息时,管理员需要确认要删除的账单,并在系统中进行删除操作。如果某个账单的信息发生变化,如销售数量、销售金额等,管理员可以通过该模块进行修改操作。在修改账单信息时,管理员需要输入修改后的信息,并在系统中进行更新操作。管理员可以通过该模块查询所有账单的信息,并在系统中进行查看。在查询账单的过程中,管理员可以根据不同的条件进行查询,如订单号、销售日期等。校园超市管理系统的超市账单模块可以帮助管理员及时记录和管理超市的销售订单和账单信息,实现账单的添加、删除、修改和查询操作,从而方便地统计销售数据、分析销售趋势,并提供数据支持为超市的经营决策提供参考。


三、系统设计

3.1 前端架构设计

通常来说,网页是由三个元素构成的,页面、样式、逻辑,这三者分别用html、css、js来实现。Vue框架的底层逻辑也是这三者,这使得您很难自己创建漂亮的页面,但是Vue支持使用View UI等其他组件库。它是一个用于快速原型设计的组件库,允许您创建许多很酷的页面组件。与传统的主页开发相比,浏览器形成了一个赏心悦目的浏览界面,并修改CSS使页面看起来更漂亮。最后,对话部分必须使用JS接收来自用户的请求,并与它交互以响应事件。事件处理程序包含各种数据修改。开发非常复杂的前端界面的时候,即当视图和数据大量混合,处理元素是非常困难的。这叫做拉扯头发和移动整个身体。《EVI》的核心便是专注于关卡。独立的观点。主要目标是将视图与数据层分离,也就是利用MVVM模式进行视图和变量的状态分离,开发者可以随时观察数据变化,并基于视图动态渲染内容。当前端界面发生了数据变化,数据也会双向发生更改。

3.2 后端架构设计

在校园超市管理系统的业务逻辑开发中,选择了SpringBoot框架。对于学习Java Web的学生来说,开发一个Web应用程序,首先要联系Servlet和Tomcat服务器,然后在创意软件中手工连接JDBC连接数据,编写SQL查询。我们将使用这个发展框架,因为我们知道这一点。这导致了大量复杂和繁琐的代码,高的代码错误率和缺乏容易的验证,所以基于Java的校园超市管理系统用了SpringBoot框架,方便用于各种超市数据的更改。经过两个月的spring研究和研究,我集成了spring Boot框架。

可以快速开发后端代码的原因在于以下三个技术点。Springboot可以使用启动器来管理项目所需的依赖项,而无需指定依赖项版本。Springboot会自动配置它,而不需要配置XML文件,根据添加的依赖项使用几个默认注释。例如,Spring Boot有许多内置的用户身份验证特性。

在使用Springboot框架之前,很长一段时间以来,我们一直听到关于该框架强度的传言,有一种说法是"约定优于配置"。这意味着对于没有指定配置而使用Springboot框架的项目,使用默认配置,如果有特殊要求,开发人员只需根据配置模块的要求自定义配置。这使得开发人员可以显著减少称为"协议"的配置开销。Springboot还集成了许多框架配置和应用程序模式。如果您需要框架和模板,您可以自己使用它们。然而,Sprungboot项目开发过程中最重要的核心是SSM框架。SSM框架是Spring, Spring MVC和MyBATIS。Springboot默认配置使用这个框架。如图4-1所示,整个系统运行过程由客户端向服务器端发送请求。控制平面接收来自用户的请求,并调用服务的接口实现。业务管理调用和管理各种执行方法。业务层调用数据链路层来添加、删除、修改和查询数据库,后端的业务逻辑和对前端的交互方式如图4-1所示,这种回显方式非常高效。


四、系统实现









五、核心代码

5.1 查询商品

java 复制代码
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询商品")
public Result<IPage<Commodity>> getByPage(@ModelAttribute Commodity commodity, @ModelAttribute PageVo page){
    QueryWrapper<Commodity> qw = new QueryWrapper<>();
    if(StrUtil.isNotBlank(commodity.getName())) {
        qw.eq("name",commodity.getName());
    }
    if(StrUtil.isNotBlank(commodity.getType())) {
        qw.eq("type",commodity.getType());
    }
    if(StrUtil.isNotBlank(commodity.getStock())) {
        qw.eq("stock",commodity.getStock());
    }
    if(StrUtil.isNotBlank(commodity.getSupplierId())) {
        qw.eq("supplier_id",commodity.getSupplierId());
    }
    if(StrUtil.isNotBlank(commodity.getUnitPrice())) {
        qw.eq("unit_price",commodity.getUnitPrice());
    }
    IPage<Commodity> data = iCommodityService.page(PageUtil.initMpPage(page),qw);
    for (Commodity com : data.getRecords()) {
        Supplier supplier = iSupplierService.getById(com.getSupplierId());
        if(supplier != null) {
            com.setSupplierName(supplier.getName());
        }
    }
    return new ResultUtil<IPage<Commodity>>().setData(data);
}

5.2 删除商品

java 复制代码
@RequestMapping(value = "/delByIds", method = RequestMethod.POST)
@ApiOperation(value = "删除商品")
public Result<Object> delAllByIds(@RequestParam String[] ids){
    for(String id : ids){
        iCommodityService.removeById(id);
    }
    return ResultUtil.success();
}

5.3 查询供应商

java 复制代码
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询供应商")
public Result<IPage<Supplier>> getByPage(@ModelAttribute Supplier supplier, @ModelAttribute PageVo page){

    QueryWrapper<Supplier> qw = new QueryWrapper<>();
    if(StrUtil.isNotBlank(supplier.getAddress())) {
        qw.eq("address",supplier.getAddress());
    }
    if(StrUtil.isNotBlank(supplier.getMobile())) {
        qw.eq("mobile",supplier.getMobile());
    }
    if(StrUtil.isNotBlank(supplier.getName())) {
        qw.eq("name",supplier.getName());
    }
    if(StrUtil.isNotBlank(supplier.getType())) {
        qw.eq("type",supplier.getType());
    }
    IPage<Supplier> data = iSupplierService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Supplier>>().setData(data);
}

5.4 查询账单

java 复制代码
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询账单")
public Result<IPage<Bill>> getByPage(@ModelAttribute Bill bill, @ModelAttribute PageVo page){
    QueryWrapper<Bill> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(bill.getUserId())) {
        qw.eq("user_id",bill.getUserId());
    }
    if(!ZwzNullUtils.isNull(bill.getCommodityId())) {
        qw.eq("commodity_id",bill.getCommodityId());
    }
    if(!ZwzNullUtils.isNull(bill.getSupplierId())) {
        qw.eq("supplier_id",bill.getSupplierId());
    }
    IPage<Bill> data = iBillService.page(PageUtil.initMpPage(page),qw);
    for (Bill bill1 : data.getRecords()) {
        Supplier supplier = iSupplierService.getById(bill1.getSupplierId());
        if(supplier != null) {
            bill1.setSupplierName(supplier.getName());
        } else {
            bill1.setSupplierName("无");
        }
        Commodity commodity = iCommodityService.getById(bill1.getCommodityId());
        if(commodity != null) {
            bill1.setCommodityName(commodity.getName());
        } else {
            bill1.setCommodityName("无");
        }
        User user = iUserService.getById(bill1.getUserId());
        if(user != null) {
            bill1.setUserName(user.getNickname());
        } else {
            bill1.setUserName("无");
        }
    }
    return new ResultUtil<IPage<Bill>>().setData(data);
}

5.5 新增账单

java 复制代码
@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增账单")
public Result<Bill> insert(Bill bill) {
    bill.setDateTime(DateUtils.getCompleteNowDate());
    bill.setUserId(securityUtil.getCurrUser().getId());
    String price = bill.getPrice();
    String number = bill.getNumber();
    Double sum = Double.parseDouble(price) * Double.parseDouble(number);
    sum = Math.ceil(sum * 10.0) / 10.0;
    bill.setSum(sum + "");
    if(iBillService.saveOrUpdate(bill)){
        return new ResultUtil<Bill>().setData(bill);
    }
    return new ResultUtil<Bill>().setErrorMsg("新增账单失败");
}

六、免责说明

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

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

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
相关推荐
_oP_i30 分钟前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx33 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
刘大辉在路上2 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
FF在路上3 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203983 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
众拾达人4 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言