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

在这里插入图片描述



一、摘要

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 查询商品

@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 删除商品

@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 查询供应商

@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 查询账单

@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 新增账单

@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. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

主代码在“后台管理”文件夹中 ---------------- 开源世界,你我更进步 ---------------- 程序开发:lc_mtt (网名:柠檬) CSDN博客:http://blog.csdn.net/lc_mtt/ 个人主页:http://products.3lsoft.com 个人邮箱:3lsoft@163.com 注:此代码禁止用于商业用途。有修改者发我一份,谢谢! ---------------- 开源世界,你我更进步 ---------------- 一,开源说明 这是一套如此完整的代码,它包括了一个软件开发过程中,从设计到实现的所有文档,资源以及完整源代码。也许许多人不清楚怎么以一个软件工程的思想去完成软件开发,这就是我发布所有源代码的目的。软件=文档+程序,这是许多人都知道的;履行这个思想,便是本套程序的开发守则。但由于这个课程设计的时间太短,才2周,有些地方做得比较马虎,或出现某些错误;但对大多数学习VB的朋友,还是有许多借鉴的地方的。 我不希望这套程序被某些朋友用于交差般地去应付他自己的课程设计,这样我会很生气;也不希望被用于一些异常的场合,这样我会很郁闷。感谢play78.com里面的demon给予我的帮助。 二,使用说明 您需要安装 MS SQL Server 2000 以及 Visual Basic 6.0 SP6 ,否则也许会有某些地方出现问题,甚至无法调试。另外,您还需要进行以下步骤,才能顺利地调试源代码: 1) 进入“数据新建”目录,运行程序 数据新建.exe。该程序提供了一个简单的方法去新建程序需要的数据库和测试数据。在程序中填写正确的SQL服务器信息即可。 2) 前台程序不是我开发的,是一个刚学习VB的同学开发的。我个人建议前台不用去看了,没有值得花费时间的地方。 3) 进入“后台管理”目录,先注册 XPMenu.ocx,否则代码运行时会发生错误哟。方法:运行 注册.bat 。调试的时候,必须在登陆界面设置 SQL 服务器地址,否则会连接不上,出现假死哟(因为没有加超时控制^_^)。其他的不再多说,学习过VB的朋友自然知道怎么办。 默认管理员帐号:admin 密码:admin 4) 文档里面有完整的需求说明书,详细设计说明书,测试文档等,另外附带有活动、时序图的源设计文件,需要 Power Designer 11 才能打开。 三,代码说明 大家也许留意到程序中的 FatCombo、FTextBox、XButton 和 XPButton。前3个是我原创的代码(绝对是原创),分别实现XP风格的Combo,TextBox,和Button。以前好像在某些地方发布过这些控件的源代码,但那些都是老版本了,这个程序集成了3个最新版本的XP风格控件,呵呵,应该能令大家满意了吧。最后一个 XPButton 是网上流行的XP按钮,不过遗憾是这个按钮的代码太多了,功能太强大了,好像有点杀鸡用牛刀的感觉,只是一直没有找到可以代替的。另外,朋友也许会问为什么没有见到 XPMenu.ocx 的源代码,我回答是没有必要。该 XPMenu.ocx 也是网上来的,很流行的HookMenu,但居然不支持MDI窗体(无法显示图标),实在令人失望。 这个代码完整的实现了 Office XP 风格界面,虽然许多地方都是模拟的,但往往最简单的方法就是最好的,反正个人感觉没有比这个更好的OXP界面风格了。最后宣传一下我的个人软件“音速启动(VStart)”,卖卖广告,不要砸我鸡蛋啊^_^~~ 四,后记 有什么问题也不要直接找我,上 http://www.play78.com/blog 看看吧,肯定有许多你想要的东西,它也有个群,不过不知道满员了没有。最后说说学习VB的方法,对于已经入门的朋友,多看看别人的代码,不管有多烦,总是能学到很多东西的。 lc_mtt 2005.9.14记
### ThinkPHP 6.0 连接 PostgreSQL 数据库教程 在 ThinkPHP 6.0 中连接到 PostgreSQL 数据库涉及编辑配置文件并提供必要的连接参数。具体操作如下: #### 编辑数据库配置文件 找到项目的 `config/database.php` 文件,在此文件中定义与 PostgreSQL 相关的连接选项。以下是具体的配置实例[^1]。 ```php return [ // 设置默认使用的数据库连接 'default' => 'pgsql', // 定义多个数据库连接,这里只展示 pgsql 的部分 'connections' => [ 'pgsql' => [ // 数据库类型 'type' => env('database.type', 'pgsql'), // 主机地址 'hostname' => env('database.hostname', 'your_host'), // 数据库名 'database' => env('database.database', 'your_database_name'), // 用户名 'username' => env('database.username', 'your_username'), // 密码 'password' => env('database.password', 'your_password'), // 端口,默认为5432 'hostport' => env('database.hostport', '5432'), // 字符集 'charset' => env('database.charset', 'utf8') ], ] ]; ``` 这段代码展示了如何指定一个名为 `'pgsql'` 的连接,并设置了相应的属性来指向特定的 PostgreSQL 实例。注意使用了环境变量作为默认值,这有助于提高安全性并方便不同环境下部署时修改配置。 当存在主从服务器的情况下,如果两个服务器上的某些参数不一致,则需要分别为它们设定独立的部分;反之则只需共享同一组设置即可[^2]。 完成以上更改之后保存文件重启应用程序使新配置生效。此时应该能够成功建立同 PostgreSQL 数据库之间的通信链路。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张燕沨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值