工厂物料管理系统(数据库课设)

news2024/11/25 2:58:17

 1.课设要求描述 

●实现物料的分类管理;

●实现部门和员工信息管理;

●实现物料的入库和领用管理;

●实现物料的转仓管理;

●创建触发器,实现物料入库和领用时相应物料库存的自动更新;

●创建触发器,实现转仓时转入仓库物料增加、转出仓库物料减少;

●创建存储过程统计各仓库各种物料的现存数量;

●创建存储过程统计指定时间段内各种物料的入库数量和领用数量;

●建立数据库相关表之间的参照完整性约束;

2.制作思路及基础讲解

此项目主要是用于完成大二下半学期的数据库课设,随手记录。技术面大二下之前只学过Java,MySQL/SQLServer。所以此项目没有前端界面,只通过命令行的形式来操作该系统,制作思路:首先是数据库作为存储数据的地方,编写根据课设要求编写好对应的建表语句和存储过程,视图,触发器等。然后编写好对应系统的Java代码,最后通过JDBC将Java代码与数据库连接起来。

  部分学生可能学的比较浅,不理解mysql,sqlserver,java,c等一堆名词之间的含义。之前有同学找我做过这类似的课设。问的问题都比较抽象,例如用mysql做一个系统之类的。在此简单说一下我对于这些的理解,mysql,sqlserver都是数据库的一种,只不过是外国的所以都是用英文表示,大部分上课不听的同学看到这一堆英文都会比较懵,其实只需简单把数据库(mysql,SQLServer)理解成存储数据的地方,而java,c等语言是用来编写系统逻辑功能的代码。当然在数据库中的存储过程或者触发器什么的,这些功能也能在代码编程语言中通过特定的逻辑实现类似的功能,只不过我们在数据库中写好的话,免去了Java中代码的编写量,并且查询时速度会更快。

3.使用工具及语言详解

不同的学校要求不同,有的是sqlserver,有的是mysql,但其实这两者的区别在我看来区别不大,大部分的语句格式都是一样的,所以我选择了我熟悉的一种,mysql来进行编写。在语言方面,我大一的时候学过c,但是当时没有认真听,后来也慢慢都忘了,大二时学了Java,并且之后又系统性的学了一遍,所以选择来用Java语言编写。对于编译器我使用的是IDEA,版本随意,这个不影响,但需要注意IDEA不是免费的,可以去试用30天,也可以自行网上找方法安装破解版。数据库可视化工具使用的是Navicat,这个工具同样也不是免费的,但提供14天试用期,有长期需求也需要各位自行找破解版。

PS:这里又提到两个新名词,IDEA和Navicat,这不是编程语言,而是工具的名字,大家需要慢慢熟悉这些名词,简单来说就是他能让你的编程之路变得更顺畅,提供了可视化的界面,不需要一直在黑窗口中输入代码

4.数据库建表代码

-- 创建数据库
CREATE DATABASE IF NOT EXISTS MaterialManagement;
USE MaterialManagement;

-- 创建物料分类表
CREATE TABLE MaterialCategories (
    CategoryID INT AUTO_INCREMENT PRIMARY KEY,
    CategoryName VARCHAR(255) NOT NULL,
    Description TEXT
);

-- 创建部门表
CREATE TABLE Departments (
    DepartmentID INT AUTO_INCREMENT PRIMARY KEY,
    DepartmentName VARCHAR(255) NOT NULL,
    Location VARCHAR(255)
);

-- 创建员工表
CREATE TABLE Employees (
    EmployeeID INT AUTO_INCREMENT PRIMARY KEY,
    EmployeeName VARCHAR(255) NOT NULL,
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);

-- 创建仓库表
CREATE TABLE Warehouses (
    WarehouseID INT AUTO_INCREMENT PRIMARY KEY,
    WarehouseName VARCHAR(255) NOT NULL,
    Location VARCHAR(255)
);

-- 创建物料表
CREATE TABLE Materials (
    MaterialID INT AUTO_INCREMENT PRIMARY KEY,
    MaterialName VARCHAR(255) NOT NULL,
    CategoryID INT,
    FOREIGN KEY (CategoryID) REFERENCES MaterialCategories(CategoryID)
);

-- 创建物料库存表
CREATE TABLE MaterialStock (
    StockID INT AUTO_INCREMENT PRIMARY KEY,
    MaterialID INT,
    WarehouseID INT,
    Quantity INT,
    FOREIGN KEY (MaterialID) REFERENCES Materials(MaterialID),
    FOREIGN KEY (WarehouseID) REFERENCES Warehouses(WarehouseID)
);

-- 创建物料入库记录表
CREATE TABLE MaterialInbound (
    InboundID INT AUTO_INCREMENT PRIMARY KEY,
    MaterialID INT,
    WarehouseID INT,
    Quantity INT,
    InboundDate DATETIME,
    FOREIGN KEY (MaterialID) REFERENCES Materials(MaterialID),
    FOREIGN KEY (WarehouseID) REFERENCES Warehouses(WarehouseID)
);

-- 创建物料领用记录表
CREATE TABLE MaterialIssue (
    IssueID INT AUTO_INCREMENT PRIMARY KEY,
    MaterialID INT,
    EmployeeID INT,
    Quantity INT,
    IssueDate DATETIME,
    FOREIGN KEY (MaterialID) REFERENCES Materials(MaterialID),
    FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);

-- 创建物料转仓记录表
CREATE TABLE MaterialTransfer (
    TransferID INT AUTO_INCREMENT PRIMARY KEY,
    MaterialID INT,
    FromWarehouseID INT,
    ToWarehouseID INT,
    Quantity INT,
    TransferDate DATETIME,
    FOREIGN KEY (MaterialID) REFERENCES Materials(MaterialID),
    FOREIGN KEY (FromWarehouseID) REFERENCES Warehouses(WarehouseID),
    FOREIGN KEY (ToWarehouseID) REFERENCES Warehouses(WarehouseID)
);








-- 创建触发器,物料领用时自动更新库存

DELIMITER //

CREATE TRIGGER AfterMaterialIssue
AFTER INSERT ON MaterialIssue
FOR EACH ROW
BEGIN
    -- 声明变量以存储MaterialStock表中对应记录的ID
    DECLARE stock_id INT;
    
    -- 通过MaterialID查找对应的MaterialStock记录的ID
    SELECT StockID INTO stock_id FROM MaterialStock
    WHERE MaterialID = NEW.MaterialID
    LIMIT 1;
    
    -- 使用找到的ID来更新MaterialStock表的Quantity字段
    UPDATE MaterialStock
    SET Quantity = Quantity - NEW.Quantity
    WHERE StockID = stock_id;
END; //

DELIMITER ;


-- 创建触发器,物料入库时自动更新库存
DELIMITER //
CREATE TRIGGER AfterMaterialInbound
AFTER INSERT ON MaterialInbound
FOR EACH ROW
BEGIN
    UPDATE MaterialStock
    SET Quantity = Quantity + NEW.Quantity
    WHERE MaterialID = NEW.MaterialID AND WarehouseID = NEW.WarehouseID;
END; //
DELIMITER ;


-- 创建触发器,物料转仓时自动更新库存
DELIMITER //
CREATE TRIGGER AfterMaterialTransfer
AFTER INSERT ON MaterialTransfer
FOR EACH ROW
BEGIN
    UPDATE MaterialStock
    SET Quantity = Quantity - NEW.Quantity
    WHERE MaterialID = NEW.MaterialID AND WarehouseID = NEW.FromWarehouseID;
    
    UPDATE MaterialStock
    SET Quantity = Quantity + NEW.Quantity
    WHERE MaterialID = NEW.MaterialID AND WarehouseID = NEW.ToWarehouseID;
END; //
DELIMITER ;

-- 创建存储过程统计各仓库各种物料的现存数量
DELIMITER //
CREATE PROCEDURE GetMaterialStockSummary()
BEGIN
    SELECT MaterialID, MaterialName, WarehouseID, SUM(Quantity) AS TotalStock
    FROM MaterialStock
    JOIN Materials ON MaterialStock.MaterialID = Materials.MaterialID
    GROUP BY MaterialID, WarehouseID;
END; //
DELIMITER ;

-- 创建存储过程统计指定时间段内各种物料的入库数量和领用数量
DELIMITER //
CREATE PROCEDURE GetMaterialInboundAndIssueSummary(IN startDate DATETIME, IN endDate DATETIME)
BEGIN
    SELECT MaterialID, SUM(Quantity) AS TotalInbound, 0 AS TotalIssue
    FROM MaterialInbound
    WHERE InboundDate BETWEEN startDate AND endDate
    GROUP BY MaterialID
    UNION ALL
    SELECT MaterialID, 0 AS TotalInbound, SUM(Quantity) AS TotalIssue
    FROM MaterialIssue
    WHERE IssueDate BETWEEN startDate AND endDate
    GROUP BY MaterialID;
END; //
DELIMITER ;

5.Java代码思路及结构

此处只放部分代码截图

6.效果运行实例 

 

 附带说明书,任务书,sql文件及源码,需要后台私信  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性卷积(相关)和圆周卷积(相关)以及FFT之间的关系(AEC举例)

时域自适应滤波算法中的线性卷积和线性相关运算量较大,导致计算复杂度升高,我们更愿意把这两个信号变换到频域,通过频域相乘的方式来取代时域复杂度相当高的卷积或相关运算。 预备知识:线性卷积(相关)和圆…

单一管理平台 - Enterprise Global Console

大约三年前,当我们向客户和社区推出控制台时,MinIO 的世界发生了变化。这是可访问性的巨大飞跃。可靠的 CLI 和 MC 命令很快让位于我们新的基于浏览器的 GUI 的速度和直观可用性。对于开发人员和企业 IT 管理员来说,这是一个游戏规则的改变者…

单片机建立自己的库文件(4)

文章目录 前言一、新建自己的外设文件夹1.新建外设文件夹,做项目好项目文件管理2.将之前写的.c .h 文件添加到文件夹中 二、在软件中添加项目 .c文件2.1 编译工程保证没问题2. 修改项目列表下的名称 三、在软件项目中添加 .h文件路径四、实际使用测试总结 前言 提示…

使用 C# 进行面向对象编程:第 10 部分

封装和抽象之间的区别 对于 OOP 初学者来说,封装和抽象之间存在非常基本的区别。他们可能会对此感到困惑。但如果你详细了解这两个主题,就会发现它们之间存在巨大差异。 抽象意味着向用户隐藏不必要的数据。用户只需要所需的功能或根据其需求的输出。例…

遵循法规,科学检测:可燃气体报警器多久检测一次?

在工业生产和日常生活中,可燃气体报警器作为一种重要的安全设备,能够实时监测并预警潜在的可燃气体泄漏风险,对于防范火灾和爆炸事故至关重要。 在这篇文章中,佰德将围绕可燃气体报警器的检测频率展开探讨,包括其功能…

基于WPF技术的换热站智能监控系统15--实时读取PLC数据

1、创建PLC实时数据 1、添加数据块 2、创建6个变量 用来表示水泵1和水泵2的参数,可以根据现场实际情况添加更多的变量参数 3、设置块属性并编译 4、下载该程序到PLC中 5、添加监控表 2、读取设备数据 S7协议下的tcp直接通讯,配置简单,一般P…

大模型泡沫退去,谁能活到下半场?

前言 从今年3月开始,国内企业纷纷下场大模型,铆足劲秀肌肉,如今转向垂直行业淘金,试图争霸行业大模型。我们的心态也逐渐从看乐子,到严肃讨论。 在人工智能的世界,我们经历了众多的概念游戏,在…

泛微开发修炼之旅--18泛微OA节点后操作代码自动退回流程的代码示例

文章链接:17泛微OA节点后操作代码自动退回流程的代码示例

短视频压缩与编码技术在短剧APP小程序开发中的应用

在短剧APP小程序开发中,短视频压缩与编码技术是实现高效视频处理的关键。本文将对这两项技术在短剧APP中的应用进行深入分析。 一、短视频压缩技术的重要性 节省存储空间:通过压缩技术,可以减小视频文件的大小,从而节省服务器和用…

【普中】基于51单片机的电子秒表数码管显示( proteus仿真+程序+设计报告+讲解视频)

这里写目录标题 设计资料内容清单&&下载链接资料下载链接:讲解视频:1.主要功能:2.仿真3. 程序代码4. 设计报告 【普中】基于51单片机的电子秒表数码管显示 ( proteus仿真程序设计报告讲解视频) 仿真图proteus8.16(有低版…

8.12 矢量图层面要素单一符号使用一(简单填充)

文章目录 前言简单填充(Simple fill)QGis设置面符号为简单填充(Simple fill)二次开发代码实现简单填充(Simple fill) 总结 前言 本章介绍矢量图层线要素单一符号中简单填充(Simple fill&#x…

玩转nRF52840-DK开发套件(1)

Nordic Semiconductor nRF52840开发套件 (nRF52840-DK) 是一款采用nRF52840多协议SoC(片上系统)的多功能单板开发工具,适用于蓝牙5.2/蓝牙低功耗、802.15.4 / Thread、ANT/ANT以及2.4GHz专有应用。nRF52840-DK与 Arduino Uno Revision 3 标准…

【html】用html5+css3+JavaScript制作一个计数器

目录 简介: 效果图: 源码: html: CSS: JS: 源码解析: 简介: 在日常生活当中很多事情都需要用到计数器特别是在体育运动当中,可以我们那么我们可不可以通过网页来制作一个计数器呢答案是肯定的我们需要利…

猫头虎推荐20个值得体验的通用大模型

猫头虎推荐20个值得体验的通用大模型 🚀 大家好,我是猫头虎,一名专注于科技领域的自媒体博主。今天是周一,新的开始,我们来深入探讨一下当前最值得体验的通用大模型。这些AI模型不仅功能强大,而且在各自领…

YonSuite银企直联:成长型企业数智转型的强力引擎

在当今数字化转型的浪潮中,成长型企业正面临着前所未有的发展机遇与挑战。在这场数字化转型的竞技场上,银企直联凭借其独特的优势,成为企业金融管理的重要利器,为企业带来前所未有的资金管理体验。用友YonSuite作为领先的数智化转…

rk3588 rkllm 安装部署

这是测试版本。 下载转换工具 $ git clone https://github.com/airockchip/rknn-llm.git安装转换环境 遵循此文档在PC Linux上安装Conda。 https://conda.io/projects/conda/en/stable/user-guide/install/linux.html 创建conda $ conda create -n RKLLM-Toolkit python3.…

RAG未来的出路

总有人喊RAG已死,至少看目前不现实。 持这个观点的人,大多是Long context派,老实说,这派人绝大多数不甚理解长上下文的技术实现点,就觉得反正context越长,越牛B,有点饭圈化 ,当然我并不否认长上下文对提升理解力的一些帮助,就是没大家想的那么牛B而已(说个数据,达到…

清远mes管理系统助力企业降本增效

清远MES管理系统可以帮助企业降本增效的方式包括但不限于以下几个方面: 生产过程优化:清远MES系统可以实时监控生产过程中的各个环节,包括设备状态、生产进度、质量指标等,帮助企业管理人员及时了解生产情况并做出相应的调整和控制…

白酒:茅台镇白酒的品牌合作与跨界营销案例

云仓酒庄豪迈白酒,作为茅台镇的知名品牌,在品牌合作与跨界营销方面也有着杰出的表现。通过与不同领域品牌的合作,豪迈白酒进一步拓宽了市场渠道,提升了品牌曝光度和影响力。 首先,云仓酒庄豪迈白酒与品质餐产品牌的合作…

怎么制作酒店订房功能

在这个快节奏的时代,每一次旅行都如同一次心灵的远航。而酒店,作为旅途中的“避风港”,它的选择显得尤为重要。你是否曾在忙碌的行程中,为了寻找一家心仪的酒店而焦头烂额?是否曾在深夜的街头,为了找到一个…