一、软件需求说明

1.1概述
本系统为仓库管理系统,采用SSM(Spring+SpringMVC+MyBatis)框架,系统功能较为基础,同时操作又比较简单。系统开发的总体任务是实现基础的供应商管理模块、经销商管理模块、商品管理模块、库存管理模块、订货单管理模块、出库单管理模块。
1.2系统目标
供应商管理模块:为管理员提供实现对供应商信息的管理维,包括对供应商的查询、添加、修改和删除等操作。
经销商管理模块:为管理员提供实现对经销商信息的管理维,包括对供应商的查询、添加、修改和删除等操作。
商品管理模块:为管理员提供实现对商品信息的管理维,包括对商品的查询、添加、修改和删除出库等操作;
库存管理模块:为管理员提供实现对库位信息的管理维,包括对库位信息的查询、添加、修改和删除等操作;
订货单管理模块:为管理员提供实现对订货单信息的管理维,包括对订货单信息的查询、添加、修改和删除等操作;
1.3业务流程
数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何的具体物理元素,它只是描绘信息在软件中流动和被处理的情况。数据流图只需要考虑系统必须完成的基本逻辑功能,完全不考虑怎样具体的实现这些功能。根据系统功能描述,本系统的顶层数据流图如下:

图1.1 顶层数据流图

图1.2 0/1层数据流图

图1.3 货物入库信息管理细化

图1.4 货物出库信息管理细化

1.4环境需求
开发运行环境:SpringToolSuite4、jdk、Navicat Premium、浏览器。

二、软件概要设计

本系统根据仓库管理的需要,而建立一个“仓库管理系统”,以方便对仓库的各项管理操作。系统功能较为基础,同时操作又比较简单。系统开发的总体任务是实现基础的供应商管理模块、经销商管理模块、商品管理模块、库存管理模块、订货单管理模块、出库单管理模块。

2.1类设计接口设计
项目整体采用接口编程,将所有对象的方法分别抽象封装与接口中,实现了操作的统一性。创建包结构,建立如下:

图2-1项目包结构

2.2功能模块设计
根据系统设计的说明及要求来设计,从而设计了几大功能模块,有学生信息的管理、课程信息的管理、成绩信息的管理、可分别对其进行录入和查询工作。
部分系统功能模块图如下:

图2-2 系统功能模块图

2.3数据库设计
数据库设计是将各种实体及其属性联系在一起的设计,用E-R图来表示。E-R图比较接近人的习惯思维方式,使用简单的图形符号表达系统分析员对问题域的理解,不熟悉计算机的用户也能理解它,E-R图可作为用户与分析员之间有效的交流工具。
根据系统描述,作系统E-R图如下:

图2-3 系统E-R图

三、详细设计

3.1 springMVC部分
3.1.1SpringMVC 概述
SpringMVC属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还可以是Struts这样的Web框架。
1)Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一
2)Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
3)Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
4)支持 REST 风格的 URL 请求。
5)采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
3.1.2 如何使用SpringMVC
1)将Web层进行了职责解耦,基于请求-响应模型
2)常用主要组件:
DispatcherServlet:前端控制器
Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理
HandlerMapping :请求映射到处理器,找谁来处理,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器对象)
View Resolver : 视图解析器,找谁来处理返回的页面。把逻辑视图解析为具体的View,进行这种策略模式,很容易更换其他视图技术;
如InternalResourceViewResolver将逻辑视图名映射为JSP视图
LocalResolver:本地化、国际化
MultipartResolver:文件上传解析器
HandlerExceptionResolver:异常处理器
3.1.3 @RequestMapping 映射请求注解
1)SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些 URL 请求。
2)在控制器的类定义及方法定义处都可标注 @RequestMapping
标记在类上:提供初步的请求映射信息。相对于 WEB 应用的根目录。
标记在方法上:提供进一步的细分映射信息。相对于标记在类上的 URL。
3)若类上未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录。
4) 作用:DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。
3.1.4@RequestParam注解
1)在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
2)value:参数名
3)required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
4)defaultValue: 默认值,当没有传递参数时使用该值
3.2 Spring部分
3.2.1spring概述

Spring是一个开源框架,Spring 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个IOC(DI)和AOP容器框架。
Spring的优良特性:
① 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
轻量级
② 依赖注入:DI——Dependency Injection,反转控制(IOC)最经典的实现。
③ 面向切面编程:Aspect Oriented Programming——AOP
面向过程,面向对象,面向接口…
④ 容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
⑤ 组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)。
3.2.2 IOC(Inversion of Control):反转控制
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。
3.2.3DI(Dependency Injection):依赖注入
IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。IOC 描述的是一种思想,而DI 是对IOC思想的具体实现.
3.2.4IOC容器在Spring中的实现
1)在通过IOC容器读取Bean的实例之前,需要先将IOC容器本身实例化。
2)Spring提供了IOC容器的两种实现方式
① BeanFactory:IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
② ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory
3.2.5AOP概述
AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传
统 OOP(Object-Oriented Programming,面向对象编程)的补充。
AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点。
在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的类里——这样的类我们通常称之为“切面”。
AOP的好处:
① 每个事物逻辑位于一个位置,代码不分散,便于维护和升级
② 业务模块更简洁,只包含核心业务代码
3.2.6Spring提供的事务管理器
Spring从不同的事务管理API中抽象出了一整套事务管理机制,让事务管理代码从特定的事务技术中独立出来。开发人员通过配置的方式进行事务管理,而不必了解其底层是如何实现的。
Spring的核心事务管理抽象是PlatformTransactionManager。它为事务管理封装了一组独立于技术的方法。无论使用Spring的哪种事务管理策略(编程式或声明式),事务管理器都是必须的。
事务管理器可以以普通的bean的形式声明在Spring IOC容器中。
3.3 MyBatis部分
3.3.1MyBaties概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1)MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
3)MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
4)半自动ORM(Object Relation Mapping`)框架
3.3.2MyBatis 现有持久化技术的对比
1.JDBC
1)SQL夹在Java代码块里,耦合度高导致硬编码内伤。
2)维护不易且实际开发需求中sql是有变化,频繁修改的情况多见。
2.Hibernate和JPA
1)长难复杂SQL,对于Hibernate而言处理也不容易。
2)内部自动生产的SQL,不容易做特殊优化。
3)基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降。
3.MyBatis
1)对开发人员而言,核心sql还是需要自己优化。
2)sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。
3.3.3MyBatis全局配置文件简介
The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves. MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。
文件结构如下:
configuration 配置
properties 属性
settings 设置
typeAliases 类型命名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
databaseIdProvider 数据库厂商标识
mappers 映射器
3.4 Mybatis映射文件
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。
SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
cache – 给定命名空间的缓存配置。
cache-ref – 其他命名空间缓存配置的引用。
resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
sql – 可被其他语句引用的可重用语句块。
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语

四、数据库设计

数据库关系设计:
(1)经销商表:
表4-1 经销商表

(2)仓库表:
表4-2 仓库表

(3)出库订单表:
表4-3 出库订单表

(4)收货订单表:
表4-4 收货订单表

(5)商品表:
表4-5 商品表

(6)供应商表:
表4-6 供应商表

五、关键代码

5.1MyBatis映射文件-------------以BuyerMapper.xml为例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.synnex.wms.mapper.BuyerMapper"><select id="findAll" resultType="com.synnex.wms.pojo.Buyer"><!-- List<Buyer> findALl(); -->select * from buyer</select><!-- Buyer findBuyerByBuyer_id(Integer buyer_id); --><select id="findBuyerByBuyer_id" resultType="com.synnex.wms.pojo.Buyer">select * from buyer where buyer_id = #{buyer_id}</select><!-- void update(Buyer buyer); --><update id="update">update buyer SET company = #{company},phone = #{phone},address = #{address},email = #{email},comment = #{comment}where buyer_id = #{buyer_id}</update><!-- void delete(Integer buyer_id); --><delete id="delete" >delete from buyer where buyer_id = #{buyer_id}</delete><!-- void insert(Buyer record); --><insert id="insert">insert into buyer(buyer_id,company,phone,address,email,comment) value(#{buyer_id},#{company},#{phone},#{address},#{email},#{comment})</insert>
</mapper>
5.2SpringMVC请求处理函数----以BuyerController.java为例
package com.synnex.wms.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.synnex.wms.pojo.Buyer;
import com.synnex.wms.pojo.Storer;
import com.synnex.wms.service.BuyerService;
@Controller
@RequestMapping(value = "/buyer")
public class BuyerController {@AutowiredBuyerService buyerService ;@RequestMapping(value = "/findAll")public void findAll(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<Buyer> list_buyer = buyerService.findAll();request.setAttribute("list_buyer", list_buyer);request.getRequestDispatcher("/jsp/buyer/buyer.jsp").forward(request,response);}@RequestMapping("/toUpdateBuyerPage/{buyer_id}")public void toUpdateStorerPage(@PathVariable Integer buyer_id,HttpServletResponse response, HttpServletRequest request)throws ServletException, IOException {Buyer buyer = buyerService.findBuyerByBuyer_id(buyer_id);              request.setAttribute("buyer", buyer);    request.getRequestDispatcher("/jsp/buyer/updateBuyer.jsp").forward(request, response);}@RequestMapping(value = "/update")public String update(Buyer buyer) {buyerService.update(buyer);return "redirect:/buyer/findAll";}@RequestMapping(value = "/delete/{buyer_id}")public String delete(@PathVariable Integer buyer_id) {buyerService.delete(buyer_id);return "redirect:/buyer/findAll";}@RequestMapping(value = "/insert")public String insert(Buyer buyer) {buyerService.insert(buyer);return "redirect:/buyer/findAll";}
}

【实训】基于java进销存管理系统相关推荐

  1. java进销存管理系统设计,基于JavaSwing进销存管理系统的设计与实现毕业论文+任务书+中期表+翻译及原文+答辩+源码+数据库+辅导视频...

    基于JavaSwing进销存管理系统的设计与实现 摘 要 时代在进步,我们的生产生活方式当然也要相对应的做出改变了.在今天这样一个信息化的时代,计算机软件已经广泛的被用于日常的办公,仓库的库存管理,企 ...

  2. java进销存管理系统_java swing开发进销存管理系统

    此套系统首先分为五大部分,分别为登录.首页.基础数据.进销存管理.用户管理,首页为欢迎页面,基础数据下设商品管理功能模块,进销存管理下设销售单.入库单.出库单.仓库管理四个功能模块,用户管理为单独功能 ...

  3. java进销存管理系统源码

    开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclipse) 技术说明: springboot mybatis vue.js 代码注释齐全,没有多余代码,适合学习(毕设),二 ...

  4. java sql进销存_java进销存管理系统(jsp

    压缩包 : java进销存管理系统(jsp+mssql)130305.rar 列表 java_shop/Java超市购物进销存系统/database/supermarket.txt java_shop ...

  5. 基于Java毕业设计仓库进销存管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计仓库进销存管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计仓库进销存管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...

  6. 基于JAVA珠宝首饰进销存管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA珠宝首饰进销存管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA珠宝首饰进销存管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  7. 珠宝管理系统java,基于jsp的珠宝首饰进销存管理系统-JavaEE实现珠宝首饰进销存管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的珠宝首饰进销存管理系统, 该项目可用各类java课程设计大作业中, 珠宝首饰进销存管理系统的系统架构分为前后台两部 ...

  8. 商品销售统计系统java_IMS: 基于Java实现的InventoryManagementSystem进销存管理系统

    IMS-进销存管理系统 基于 Java 实现的进销存管理系统(Inventory Management System) 项目结构 系统功能设计 进货管理(Stock-In) 进货入库(StockIn) ...

  9. 基于SSM框架便利店管理系统(进销存管理系统)(java+spring+springmvc+mybatis+maven+mysql+html)

    一.项目简介 本项目是一套基于SSM框架便利店管理系统(进销存管理系统),主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者. 包含:项目源码.项目文档.数据库脚本.软件工具等 ...

  10. 基于javaweb的进销存管理系统(前后端分离+java+vue+springboot+ssm+mysql+redis)

    基于javaweb的进销存管理系统(前后端分离+java+vue+springboot+ssm+mysql+redis) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后 ...

最新文章

  1. Educational Codeforces Round 45 (Rated for Div. 2) D Graph And Its Complement(图的构造)
  2. python输出csv文件-Python之读取与写入CSV文件
  3. POJ 1679 - The Unique MST(次小生成树)
  4. [JavaWeb-HTML]HTML标签_语义化标签
  5. SpringMVC-HandlerInterceptor拦截器的使用与参数详解
  6. Real-time 节点
  7. 21天学通c语言pdf百度云,21天学通C语言「pdf+epub+mobi+txt+azw3」
  8. 计算机生成目录步骤word,word生成目录步骤,word怎样做目录
  9. 逆向之汇编(堆栈平衡函数)
  10. 数值运算pythonmopn_python – 计算每列的Pandas DataFrame的自相关性
  11. Spring框架学习记录二:装配Bean
  12. 兼容性良好的邮箱正则表达式
  13. rw_semaphore 原理与代码分析
  14. 嵌入式linux下sqlite应用
  15. 数字时代下,工厂的智能加工、检测与控制
  16. python培训价目表-培训python大概要多少钱?
  17. 贴几行汉语编程的代码
  18. 计算机网络课设路由器,计算机网络课程设计---小型校园网络设计.doc
  19. hdu 2897 邂逅明下
  20. 忙忙碌碌的生活又开始了

热门文章

  1. c语言考试程序设计题怎么给分,计算机程序设计C语言考试试卷及评分标准.doc
  2. 服务器部署Nodejs api 接口
  3. java代码实现雷达图_雷达图的一种实现! Cocos Creator !
  4. 呼叫中心语音外呼营销系统软件成企业首选
  5. 使用JavaScript打开Chrome的设置页面
  6. vivado SRIO 学习
  7. 保留地址就是私有地址吗?
  8. 从execl表中随机抽取几行数据
  9. linux vga 分辨率低,通过 VGA 接口连接显示器时分辨率不正确
  10. JS中将json字符串转为json对象的三种方式