问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

仓库管理系统设计与实现

创作时间:
作者:
@小白创作中心

仓库管理系统设计与实现

引用
CSDN
1.
https://blog.csdn.net/qq_45659915/article/details/127510952

仓库管理系统是一个典型的数据库应用系统,主要用于管理仓库的库存信息。本文将详细介绍该系统的项目需求分析、功能模块、数据库设计以及具体实现。

项目环境要求

  1. 设备支持:Windows7、Windows8或Windows10;
  2. 数据库:Mysql 8.0;
  3. 软件支持:eclipse、navicat

需求分析

需求分析阶段的根本任务是要明确仓库管理系统功能需求,以便提出整个系统的总体方案。在需求分析中,主要采用业务流程图,数据流程图和数据字典来描述。

业务流程图

在分析了仓库管理系统应该具有的基本功能之后,我们确定了本系统分为三个主要模块,即:基本信息维护模块、一般用户功能、库存管理模块和安全管理模块四大模块。

具体业务如下:

  1. 基本信息维护模块:基本信息维护模块用于系统的用户登录及身份验证。用户进入系统需要经过身份验证。
  2. 库存管理模块为系统的核心模块,其主要功能有:仓库信息的管理,产品入库登记、确认入库信息、删除库内信息、借出信息登记、产品分类管理、添加人员、删除人员、查询库内信息。
  3. 安全管理:人员权限区分、事件记录、数据警告、计划备份、即时备份、数据恢复。
  4. 一般用户功能:查询库内信息、查询出库信息、查询入库信息、修改本用户密码。

系统功能简介

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

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

  2. 普通用户界面
    (1)个人信息查询界面
    主要负责:普通用户通过过个人信息查询界面查询或修改到自己的相关信息,含:姓名,地址,邮箱。
    (2)出库界面
    主要负责:用户输入商品供应商、商品名称、商品数量、商品价格等信息进行出库操作。此外用户还可以更改出库信息,查询出库信息,删除出库信息。
    (3)入库界面
    主要负责:用户输入供应商、商品名称、商品数量、商品价格等信息进行入库操作。
    此外,用户可以进行查找入库信息,更改入库,删除入库的操作。

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

系统用户及密码

系统管理员:(高级用户)
用户名:root 密码:root

普通用户:
普通用户:abc
密码:root

ER图

数据库设计实现

创建视图

CREATE VIEW instock_view AS
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;

创建存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `finonemes`(in IDs 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

创建触发器

  1. 建立入库库存更新过程
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
  1. 更改出货
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;
  1. 删除订单
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;
  1. 仓库出货
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 ;
  1. 出库表更改出货
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 ;
  1. 更新库存
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 ;




© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号