小型仓库管理系统MySQL
生活随笔
收集整理的這篇文章主要介紹了
小型仓库管理系统MySQL
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.任務要求
某單位要開發一個小型倉儲管理系統。系統需要記錄物品的名稱、數量單價、采購金額、供應商、生產日期和采購人等信息。對于工作人員需要記錄每個人的姓名、電話、出生日期、職務、經理等。對于供應商需要記錄供應商的名字和聯系電話。物品入庫需要填寫入庫單,入庫單自動生成流水號作為唯一標識。出庫需要填寫出庫單。倉庫需要保證每種商品應該滿足最低的存儲數量,每種商品最低存儲不同。另外,還需要完成商品的按月盤存和必要的統計功能。
系統基本功能要求
a. 建立基本不
b. 錄入物品的最低存儲數量(存儲過程完成)。
c. 填寫入庫單(存儲過程完成)。
d. 填寫出庫單。(存儲過程完成,檢查如果出庫后商品低于最低存儲量,打印報警信息。提示:這是一個帶有事務操作的存儲過程,不得使用觸發器)。
e. 錄入員工信息。(存儲過程完成)。
f. 錄入供應商信息。(存儲過程完成)。
g. 查詢物品的最低存儲數量。(函數完成)。
h. 按日打印入庫單(存儲過程完成)。
輸入:日期
輸出:
XXX公司物品入庫單 2015-03-05
物品編號 物品名 數量 金額 供應商 經手人
102832938 打印紙 10 119 得力 張紅
121222222 文件夾 87 19 齊心 王博
。。。。。。。。。。。。。。。。。。。
i. 為了優化倉儲,需要統計每種出庫物品占所有物品的百分比(存儲過程完成)。
輸入:起始時間
輸出:
出庫物品統計
2014-12-23 至2015-06-30
物品 出庫數量 百分比
物品A 150 15.2%物品B 208 28.7%……
j. 編寫函數,查詢指定物品的剩余數量
k. 錄入盤存數據,當物品實際數量與盤存數量不一致時,用觸發器給出報警。
l. 編寫函數,返回某個月的盤粗情況
輸入:年月(格式YYYY-MM)
輸出:
序號 商品編號 商品名稱 賬面數量 實際數量 備注
1 102832938 打印紙 89 80 不一致
2 121222222 文件夾 50 50 一致
… …
邏輯結構設計
四.問題及其解決SQL語句
A建立基本表
B 錄入物品的最低存儲數量(存儲過程完成)。
create Procedure commodity_lessnumber( @cname varchar(20),@cnumber varchar(20), @snumber int,@cprice int,@lnumber int)--商品名稱,編號,存儲數量,單價,最低存儲數量 as begin insert into commodity values(@cname,@cnumber,@snumber,@cprice,@lnumber) endC 填寫入庫單(存儲過程完成)
alter Procedure godown_write(@purchaseamount int,@purchasenumber int,@data date,@commoditynumber varchar(20) ,@commodityname varchar(20),@workname varchar(20),@suppliername varchar(20),@worknumber varchar(20),@suppliernumber varchar(20))--采購金額,采購數量,入庫日期,商品編號,商品名稱供,工作人員姓名,供應商姓名,工作人員編號,供應商編號 as begin declare @number varchar(20) set @number=RAND()*1000000 while exists(select number from godown where @number=number) beginset @number=RAND()*1000000 end insert into godown values(@purchaseamount ,@purchasenumber ,@data,@commoditynumber,@commodityname, @workname,@suppliername,@number,@worknumber,@suppliernumber) update commodity set savenumber=savenumber+@purchasenumber where commodity.commoditynumber=@commoditynumber endD填寫出庫單(存儲過程完成)
alter Procedure outbound_write(@data date,--出庫日期 @commodityname varchar(20),--商品名稱 @commoditynumber varchar(20) ,--商品編號 @number int ,--出庫數量 @workname varchar(20),--工作人員姓名 @worknumber varchar(20)--工作人員編號 ) as begin declare @aanumber varchar(20)--流水單號 set @aanumber=RAND()*1000000 while exists(select number from outbound where @aanumber=aanumber) beginset @aanumber=RAND()*1000000 endbegin transactionif (select savenumber-lessnumber from commodity where commodity.commoditynumber=@commoditynumber)>@numberbegininsertinto outboundvalues(@data,@commodityname,@commoditynumber,@number,@workname,@aanumber,@worknumber)update commodityset savenumber=savenumber-@numberwhere commodity.commoditynumber=@commoditynumbercommitendelsebeginprint'出庫數量不合理,當出庫后倉庫存儲數量小于最低存儲數量'rollbackend endE錄入員工信息(存儲過程完成)
create ProceDure worker_write(@workname varchar(20) , --姓名 @worknumber varchar(20),--編號 @workphone varchar(20), --電話 @workbirthday varchar(20), --出生日期 @workduty varchar(20), --職位 @managernumber varchar(20) ) --經理編號 as begin insert into worker values(@workname,@worknumber,@workphone,@workbirthday,@workduty,@managernumber) endF錄入供應商信息。(存儲過程完成)。
create Procedure supplier_write(@suppliername varchar(20) ,--姓名 @suppliernumber varchar(20) ,--編號 @supplierphone varchar(20))--聯系電話 as begin insert into supplier values(@suppliername,@suppliernumber,@supplierphone) endG查詢物品的最低存儲數量。(函數完成)。
create function check_lessnumber(@commoditynumber varchar(20))--商品編號 returns intasbeginreturn(select lessnumberfrom commoditywhere commodity.commoditynumber=@commoditynumber)endH 按日打印入庫單(存儲過程完成)。
輸入:日期
輸出:
XXX公司物品入庫單 2015-03-05
物品編號 物品名 數量 金額 供應商 經手人
102832938 打印紙 10 119 得力 張紅
121222222 文件夾 87 19 齊心 王博
。。。。。。。。。。。。。。。。。。。
I為了優化倉儲,需要統計每種出庫物品占所有物品的百分比(存儲過程完成)。
輸入:起始時間
輸出:
出庫物品統計
2014-12-23 至2015-06-30
物品 出庫數量 百分比
物品A 150 15.2%物品B 208 28.7%…… alter procedure number_precent(@starttime date,@endtime date) as begindeclare @total intdeclare @ccommodityname varchar(20)declare @totalnumber floatset @total=(select sum(number) from outboundwhere outbound.data >@starttime and outbound.data <@endtime)declare outbound1 cursor forselect commodityname,sum(number) totalnumberfrom outboundwhere outbound.data >@starttime and outbound.data <@endtimegroup by(commodityname)open outbound1fetch outbound1 into @ccommodityname,@totalnumberprint '輸入: 起始時間和終止日期'print '輸出:'print ' 出庫物品統計 'print space(3)+cast(@starttime as varchar)+' 至'+cast(@endtime as varchar)print '------------------------------------------'print ' 物品 出庫數量 百分比 'print '------------------------------------------'while @@FETCH_STATUS=0 beginprint cast(@ccommodityname as varchar)+space(7)+cast(@totalnumber as varchar)+space(6)+cast(@totalnumber/@total*100 as varchar)+'%'fetch outbound1 into @ccommodityname,@totalnumberendclose outbound1deallocate outbound1 end
J編寫函數,查詢指定物品的剩余數量
create function refer_number(@commoditynumber varchar(20))--傳遞商品編號 returns int as beginreturn(select savenumber from commodity where commodity.commoditynumber=@commoditynumber)endK錄入盤存數據,當物品實際數量與盤存數量不一致時,用觸發器給出報警。
create Procedure true_write(@commoditynumber varchar(20),--商品編號 @commodityname varchar(20),--商品名稱 @papernumber int,--賬面數量 @data date )as begin declare @anumber int set @anumber=(select savenumber from commodity where commodity.commoditynumber=@commoditynumber) insert into true values(@commoditynumber,@commodityname,@papernumber,@anumber,@data) endgo create trigger true_insert on true for insert as beginif((select inserted.papernumber FROM inserted)!=(select inserted.turenumber FROM inserted))begin print'所輸入盤存物品實際數量與盤存數據不一樣'endendL編寫函數,返回某個月的盤粗情況
輸入:年月(格式YYYY-MM)
輸出:
序號 商品編號 商品名稱 賬面數量 實際數量 備注
1 102832938 打印紙 89 80 不一致
2 121222222 文件夾 50 50 一致
… …
M. 設計T-SQL批處理驅動程序測試你的程序。
--填寫最低數量exec commodity_lessnumber '打印紙','102832938',100,1,10--商品名稱,編號,存儲數量,單價,最低存儲數量exec commodity_lessnumber '文件夾','121222222',50,3,5exec commodity_lessnumber '手機殼','747411111',20,300,10--錄入工作人員信息exec worker_write '徐一','123456','13733','1998-01-01','CEO','123456'--姓名編號聯系電話,出生日期職務經理編號exec worker_write '宋二','789012','89898','1998-02-02','外賣員','123456'exec worker_write '黃三','345678','90909','1998-03-03','會計','123456'--錄入供應商信息exec supplier_write '李四','1711030301','1864236'--姓名 編號 聯系電話exec supplier_write '張三','1711030302','1234567'exec supplier_write '王五','1711030303','9876543'--填寫入庫單--采購金額,采購數量,入庫日期,商品編號,商品名稱,工作人員姓名,供應商姓名,工作人員編號,供應商編號exec godown_write 1,200,'1999-02-13','102832938','打印紙','徐一','李四','123456','1711030301'exec godown_write 1,300,'1999-04-18','102832938','打印紙','徐一','張三','123456','1711030302'exec godown_write 1,500,'1999-06-23','102832938','打印紙','宋二','李四','789012','1711030301'exec godown_write 3,100,'1999-07-21','121222222','文件夾','黃三','王五','345678','1711030303'exec godown_write 300,20,'2000-11-27','747411111','手機殼','宋二','李四','789012','1711030301'--填寫出庫單--日期,名稱,編號,出庫數量,工作人員姓名,工作人員編號exec outbound_write '1999-03-18','打印紙','102832938',193,'黃三','345678'exec outbound_write '1999-07-28','打印紙','102832938',120,'黃三','345678'exec outbound_write '1999-08-11','打印紙','102832938',400,'黃三','345678'exec outbound_write '1999-03-18','文件夾','121222222',13,'黃三','345678'exec outbound_write '2002-03-18','手機殼','747411111',3,'黃三','345678'--填寫盤存表exec true_write '102832938','打印紙','100','1999-02-13'--編號,名稱,賬面數量,日期exec true_write '121222222','文件夾','50','1999-02-13'exec true_write '747411111','手機殼','19','1999-02-13'exec print_remark'1999-02-15'--查詢物品最低存儲數量print '商品編號為的物品最低存儲數量為'print dbo.check_lessnumber('747411111')--按照日期打印入庫單exec print_godown '1999-04-18'--按照日期查找百分比exec number_precent '1999-02-12','2002-03-19'--查詢指定物品的盤存數量print '商品編號為的物品存儲存儲數量為'print dbo.refer_number('747411111')--某個月的盤存情況exec print_remark '1999-02-13'總結
以上是生活随笔為你收集整理的小型仓库管理系统MySQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux scp传输文件权限被拒绝,L
- 下一篇: 复利的谎言