仓库管理系统
项目环境要求
1.设备支持:Windows7、Windows8或Windows10;
2.数据库:Mysql 8.0;
3.软件支持:eclipse、navicat

需求分析
需求分析阶段的根本任务是要明确仓库管理系统功能需求,以便提出整个系统的总体方案。在需求分析中,主要采用业务流程图,数据流程图和数据字典来描述。
1.1 业务流程图
在分析了仓库管理系统应该具有的基本功能之后,我们确定了本系统分为三个主要模块,即:基本信息维护模块、一般用户功能、库存管理模块和安全管理模块四大模块。
具体业务如下:
(1) 基本信息维护模块:基本信息维护模块用于系统的用户登录及身份验证。用户进入系统需要经过身份验证。
(2) 库存管理模块为系统的核心模块,其主要功能有:仓库信息的管理,产品入库登记、确认入库信息、删除库内信息、借出信息登记、产品分类管理、添加人员、删除人员、查询库内信息。
(3) 安全管理:人员权限区分、事件记录、数据警告、计划备份、即时备份、数据恢复。
(4) 一般用户功能:查询库内信息、查询出库信息、查询入库信息、修改本用户密码。

数据流图

一、项目名称:仓库管理系统

二、使用的数据库版本:Mysql 8.0

三、项目的主要功能简介:
仓库管理系统主要有两个功能,根据不同用户有着不同的功能,分为:普通用户和高级用户功能。具体功能如下:

  1. 用户登录界面
    对于普通用户和高级用户两种登陆用户,有着各自的方式。每个用户都只能用自己的密码登录到系统中 。究于此系统是专门给个人设计的,鉴于隐私问题,个人相关的信息不希望别人看到,因此登录的身份就只准用户登录。且管理员拥有全部的权限。

  2. 普通用户界面
    (1)个人信息查询界面
    主要负责:普通用户通过过个人信息查询界面查询或修改到自己的相关信息,含:姓名,地址,邮箱。
    (2)出库界面
    主要负责:用户输入商品供应商、商品名称、商品数量、商品价格等信息进行出库操作。此外用户还可以更改出库信息,查询出库信息,删除出库信息。
    (3)入库界面
    主要负责:用户输入供应商、商品名称、商品数量、商品价格等信息进行入库操作。
    此外,用户可以进行查找入库信息,更改入库,删除入库的操作。
    3.高级用户界面
    (1)账号管理界面
    主要负责:用户可以增加员工账号,或者删除员工账号,还可以进行个人信息修改,含:员工账号,账号密码,用户名字,地址和邮箱。方便修改个人信息和增加或删除员工。
    (2)商品入库界面
    主要负责:用户输入供应商、商品名称、商品数量、商品价格等信息进行入库操作。此外,还可以进行查询入库,更改入库,删除入库的操作。
    本界面上方通过点击查找入库用户可以进行查找入库信息。

(3)商品出库界面
主要负责:用户输入商品供应商、商品名称、商品数量、商品价格等信息进行出库操作。此外用户还可以更改出库信息,查询出库信息,删除出库信息。
在本界面的上方,通过点击查找出库用户可以进行查找出库信息。

(4)添加供应商界面
主要负责:用户输入供应商,进行添加供应商操作。此外用户还可以删除供应商,添加供应商旗下子产品。
在本界面的上方,通过点击旗下子产品用户可以进行删除供应商旗下子产品。选择供应商,通过点添加击旗下子产品用户可以进行添加供应商旗下子产品,可以保存数据或重置。
(5)查询记录
主要负责:用户输入订单号,进行查找入库、出库操作。
在本界面的上方,通过点击查找入库信息、查找记录可以查询入库信息。通过点击查找出库信息、查找记录可以查询出库信息。
(6)进库数据统计界面
主要负责:根据入库商品名称、数量、供货商生成柱状图。
(7)出库数据统计界面
主要负责:根据出库商品名称、数量、供货商生成柱状图。
(8)盈亏数据统计
主要负责:根据出入库出库信息生成扇形统计图。
(9)货物流动曲线
主要负责:根据信息生成仓库流动曲线图
在此界面,用户通过选择入库或出库,通过点击查看近三个月或查看历来数据按钮,可在图表中显示仓库货物流动情况。
四、系统用户及密码
系统管理员:(高级用户)
用户名:root 密码:root

五、普通用户及密码
普通用户:abc
密码:root
ER图

项目截图

① 建查询入库视图
select instock.ID
AS id,instock.supname AS supname,instock.stockname AS stockname,instock.intime AS intime,instock.num AS num,instock.pric AS pric,product.stock AS stock from (instock join product)
where ((product.supname = instock.supname) and (product.name = instock.stockname))
(3)创建存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `finonemes`(inIDs int)

BEGIN
select instock.id,instock.supname,instock.stockname,instock.intime,instock.num,
instock.pric,product.stock from instock,product
where product.supname=instock.supname
and product.name=instock.stockname
and instock.id=IDs;
end
(4)创建触发器
六个触发器如图:

① 建立入库库存更新过程
CREATE TRIGGER addindata BEFORE INSERT ON instock FOR EACH ROW BEGIN
update product set stock=stock+new.num where product.name=new.stockname and product.supname=new.supname;
end
②更改出货
CREATE TRIGGER updateindata BEFORE UPDATE ON instock FOR EACH ROW begin
select stock INTO @stockn from product where name=old.stockname and supname=old.supname;
if (old.stockname!=new.stockname or old.stockname=new.stockname ) and old.supname!=new.supname then
begin
if @stockn-old.num>=0 then
update product set stock=stock-old.num where product.name=old.stockname and product.supname=old.supname;
update product set stock=stock-new.num where product.name=new.stockname and product.supname=new.supname;
else
set @msg = “仓库库存不足不能进行更改出货”;
SIGNAL SQLSTATE ‘HY000’ SET MESSAGE_TEXT = @msg;
end if ;
end;
elseif old.stockname=new.stockname and old.supname=new.supname and @stockn-old.num>=0 then
update product set stock=stock-old.num+new.num where product.name=new.stockname and product.supname=new.supname;
end if ;
end ;;
③删除订单
CREATE TRIGGER delindata BEFORE DELETE ON instock FOR EACH ROW BEGIN
select stock INTO @stockn from product where name=old.stockname and supname=old.supname;
if @stockn-old.num>=0 then
update product set stock=stock-old.num where product.name=old.stockname and product.supname=old.supname;
else
set @msg = “仓库库存不足不能删除此订单”;
SIGNAL SQLSTATE ‘HY000’ SET MESSAGE_TEXT = @msg;
end if;
end ;;
④仓库出货
DROP TRIGGER IF EXISTS addoutdata;
delimiter ;;
CREATE TRIGGER addoutdata BEFORE INSERT ON outstock FOR EACH ROW BEGIN

select stock INTO @stockn from product where name=new.stockname and supname=new.supname;
if @stockn-new.num>=0 then
update product set stock=stock-new.num where product.name=new.stockname and product.supname=new.supname;
else
set @msg = “仓库库存不足不能进行出货”;
SIGNAL SQLSTATE ‘HY000’ SET MESSAGE_TEXT = @msg;
end if;
end
;;
delimiter ;
⑤出库表更改出货
DROP TRIGGER IF EXISTS updateoutdata;
delimiter ;;
CREATE TRIGGER updateoutdata BEFORE UPDATE ON outstock FOR EACH ROW BEGIN
select stock INTO @stockn from product where name=new.stockname and supname=new.supname;
if (old.stockname!=new.stockname or old.stockname=new.stockname ) and old.supname!=new.supname then
BEGIN
update product set stock=stock+old.num where product.name=old.stockname and product.supname=old.supname;
if @stockn-new.num>=0 then
update product set stock=stock-new.num where product.name=new.stockname and product.supname=new.supname;
else
set @msg = “仓库库存不足不能进行更改出货”;
SIGNAL SQLSTATE ‘HY000’ SET MESSAGE_TEXT = @msg;
end if ;
end;
elseif old.stockname=new.stockname and old.supname=new.supname then
BEGIN
select stock INTO @stockn from product where name=new.stockname and supname=new.supname;
if @stockn-new.num>=0 then
update product set stock=stock-old.num+new.num where product.name=old.stockname and product.supname=old.supname;
else
set @msg = “仓库库存不足不能进行更改出货”;
SIGNAL SQLSTATE ‘HY000’ SET MESSAGE_TEXT = @msg;
end if ;
end;
end if;
end
;;
delimiter ;
⑥更新库存
DROP TRIGGER IF EXISTS delloutdata;
delimiter ;;
CREATE TRIGGER delloutdata BEFORE DELETE ON outstock FOR EACH ROW BEGIN
update product set stock=stock+old.num where product.name=old.stockname and product.supname=old.supname;
end;;
delimiter ;