甘肃住房和城乡建设厅网站,虚拟主机wordpress如何更换域名,免费自动建站,汕头网站建设推广方法目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要
1.1 项目介绍
基于… 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要
1.1 项目介绍
基于JAVAVueSpringBootMySQL的超市账单管理系统包含供应商模块、商品管理模块、超市账单模块还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块超市账单管理系统基于角色的访问控制给超市管理员、店长使用可将权限精确到按钮级别您可以自定义角色并分配权限系统适合设计精确的权限约束需求。
1.2 项目录屏 二、功能模块
本管理系统主要是适用于中小型超市账单的管理既要能让用户能够快速上手也要保证基本功能的齐全还要易于系统的维护。所以一个比较成熟的超市账单管理系统应包含以下几个模块
登录模块用户通过账号密码可以登入不用权限的账号。用户管理模块查看用户信息、修改用户信息、批量或单个删除用户、增加用户信息、禁用和启动用户账号功能可以在该模块实现。供应商管理模块查看供应商信息、修改供应商信息、批量或单独删除供应商、增加供应商的功能在该模块实现。账单管理模块查看账单信息、修改账单信息、批量或单独删除账单、增加账单的功能在该模块实现。部门管理模块可以建立不同的部门批量或单独删除某一个部门修改部门信息以及可以给某个部门设立一个或者多个子部门。权限管理模块不同账号所拥有的权限可以该模块进行分配。日志管理模块系统操作人员登陆系统的时间会被记录在该管理模块下。退出登陆模块:退出当前账户到登陆页面。 三、系统设计
本系统主要分为前端和后端两个组成部分在前端我将采用当下比较流行的技术VUE和Element UI搭建起简洁大方的前端页面方便用户操作和用户的体验感。
在后端我将采用当下比较流行的技术SpringBoot来完成开发因为SpringBoot兼容了许多框架可以帮助我快速搭建起整个系统的框架其中最核心的框架就是SSM框架当一个用户在网站页面上发送请求控制层接收到用户的请求调用业务层去实现业务管理层调用不同的执行方法去处理然后业务层调用DAO层去数据库里进行增删改查的操作最后将数据结果给用户反馈。
在数据库设计方面如何设计一个合理安全的数据库首先要考虑的就是对一个数据库中所有表的属性设置包括属性的的长度、类型、主外键的设置、索引的设置等等。然后在实际设计开发系统的过程中可以参考一些成熟典型的系统的设计思想可以帮助我们大大提高程序的可行性、完整性和安全性。
3.1 总体设计
.
根据本系统的业务功能需求分析设计出该系统的简易功能设计图如图3-1首先在登陆界面输入账号密码然后就可以进入主界面根据不同的账号权限能呈现出不同的系统界面。在登陆界面中包括了员工管理功能商品管理功能供应商管理功能账单管理功能、部门管理功能、系统操作权限管理功能和系统日志输出功能。增删改查四种操作均可在员工管理界面商品管理界面供应商管理界面账单管理、部门管理界面中使用。在权限管理界面如果是管理员身份登陆可以给用户赋予权限也可以撤销权限。当要查看一些操作记录和用户登陆系统时间的操作可以在系统监控功能模块中的日志输出查看。
3.2 前端设计
一个简单的前端页面构成三个基本要素HTML、CSS、JavaScript。有了这三要素就可以完成一个前端页面的开发。Vue框架同样兼容这三个要素并且如果真要自己写出一个美观的页面是十分麻烦的但Vue支持使用其他的组件库例如Element UI是一款网站快速成型工具上面有许多美观的页面组件。相比于传统的前端页面开发是通过操作DOM形成基本的视图结构然后再通过CSS的修饰让页面变得美观最后在涉及交互部分就需要用到JavaScript来接收用户请求并通事件响应来进行交互操作并且在事件的处理函数中涉及到各种数据的修改。我们知道一个网站包含的页面元素是非常多的在结构和很庞大的页面中如果视图和数据都混合在一起要想操作其中的一个元素的难度就会很大正所谓牵一发而动全身。而Vue的核心在于它主关注视图层它将视图单独剥离出来主要目的就是分离视图层和数据层而实现分离是通过MVVM模式MVVM的核心是ViewModel层它能够随时观察到数据的变化,并对视图对应的内容实时进行更新,当视图发生改变的同时数据也会随之发生变化,这就是双向绑定。
3.3 后端设计
在后端方面我将选择基于SpringBoot框架来进行开发。之所以选择用框架来开发是学过Javaweb的同学都知道开发一个web应用从最初开始接触Servlet结合Tomcat服务器然后再通过手动连接JDBC来进行数据连接在IDEA软件上写SQL查询语句。这样就会导致一个问题会产生大量繁杂冗余的代码并且代码出错率高不容易排查大大加长了开发时间。
所以我将运用框架来开发系统利用SpringBoot框架进行系统开发可以快速搭建出系统的框架只需要我们把依赖和配置文件导入剩下的就是编写业务逻辑功能。经过2个月我自己对Spring的学习研究总结出SpringBoot框架 开发便捷的原因是从以下三个策略出发。
SpringBoot可以通过启动器来管理项目所需要的依赖无需指定依赖的版本。SpringBoot利用几个核心注解做到了根据添加的依赖进行自动配置不需要配置xml文件。SpringBoot内置了许多项目所需要的功能例如数据监控、用户认证。
在还没有使用SpringBoot框架之前我也早早听说了这个框架厉害的传闻并且一直流传着一句话“约定大于配置”,在还没有深入学习之前我还是对这句话一知半解但随着深入学习我开始慢慢理解这句话的含义简单的理解来说就是在使用SpringBoot框架的项目中在没有规定配置的地方都是采用默认的配置而开发人员仅仅需要做的就是当有特殊需求的时候通过config模块中根据需求自定义配置就可以了这样就帮助开发人员大大减少了配置工作这就是所谓的“约定”。
并且SpringBoot集成了很多框架配置和应用模板当需要什么框架和模板直接开箱就能使用。但在SpringBoot项目开发中本质最主要的还是SSM框架SSM框架就是Spring、SpringMVC、Mybatis在使用SpringBoot时它就会默认配置好这个框架的使用方式。整个系统的执行流程如图4-1从客户端发送请求到服务器控制层接收到用户的请求调用业务层去实现业务管理层调用不同的执行方法去处理业务层调用DAO层去数据库里进行增删改查的操作然后将数据结果反馈给用户。 四、系统展示 五、核心代码
5.1 查询供应商
RequestMapping(value /getByPage, method RequestMethod.GET)
ApiOperation(value 分页获取供应商)
public ResultIPageSupplier getByPage(ModelAttribute Supplier supplier, ModelAttribute PageVo page){QueryWrapperSupplier 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());}IPageSupplier data iSupplierService.page(PageUtil.initMpPage(page),qw);return new ResultUtilIPageSupplier().setData(data);
}5.2 查询商品
RequestMapping(value /getByPage, method RequestMethod.GET)
ApiOperation(value 查询商品)
public ResultIPageCommodity getByPage(ModelAttribute Commodity commodity, ModelAttribute PageVo page){QueryWrapperCommodity 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());}IPageCommodity 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 ResultUtilIPageCommodity().setData(data);
}5.3 新增超市账单
RequestMapping(value /insert, method RequestMethod.POST)
ApiOperation(value 新增账单)
public ResultBill 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 ResultUtilBill().setData(bill);}return new ResultUtilBill().setErrorMsg(新增账单失败);
}5.4 编辑超市账单
RequestMapping(value /update, method RequestMethod.POST)
ApiOperation(value 编辑账单)
public ResultBill update(Bill bill) {if(iBillService.saveOrUpdate(bill)){return new ResultUtilBill().setData(bill);}return new ResultUtilBill().setErrorMsg(编辑账单失败);
}5.5 查询超市账单
RequestMapping(value /getByPage, method RequestMethod.GET)
ApiOperation(value 查询账单)
public ResultIPageBill getByPage(ModelAttribute Bill bill, ModelAttribute PageVo page){QueryWrapperBill 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());}IPageBill 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 ResultUtilIPageBill().setData(data);
}六、免责说明
本项目仅供个人学习使用商用授权请联系博主否则后果自负。博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权拥有最终解释权。如有问题欢迎在仓库 Issue 留言看到后会第一时间回复相关意见会酌情考虑但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户必须同意以下内容否则请勿下载
出于自愿而使用/开发本软件了解使用本软件的风险且同意自己承担使用本软件的风险。利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关博主对此不承担任何责任。在任何情况下对于因使用或无法使用本软件而导致的任何难以合理预估的损失包括但不仅限于商业利润损失、业务中断与业务信息丢失博主概不承担任何责任。必须了解使用本软件的风险博主不承诺提供一对一的技术支持、使用担保也不承担任何因本软件而产生的难以预料的问题的相关责任。