仓库管理系统设计15403217.docx
- 文档编号:6011895
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:96
- 大小:850.02KB
仓库管理系统设计15403217.docx
《仓库管理系统设计15403217.docx》由会员分享,可在线阅读,更多相关《仓库管理系统设计15403217.docx(96页珍藏版)》请在冰点文库上搜索。
仓库管理系统设计15403217
(此文档为word格式,下载后您可任意编辑修改!
)
One
此课程设计共分为几个部份:
需求分析,数据流程图,数据字典,全局ER图,局部ER图,关系模式,建库和建表的SQL语句,表的约束SQL语句,建视图的SQL语句,存储过程和触发器的SQL语句,前台抓图,所有过程,决无抄袭。
从中我们学到了很多,对数据库这门课程有了更多了解。
注意:
商品编号的编法前2位为部门编号,次两位位批次,后4位为商品名编号
数据流程图:
部门提出购买计划交给仓库,仓库通过与现有库存作对比,如有必要进货,就将此购买计划交给采购员,采购员负责与供应商进行谈价,达成协议,于是填写合同,采购员带回的叫做预订单,供应商留下的叫做订单。
供应商带着订单送货到企业,仓库拿出预订单核对,经检查订单与预订单匹配则确认有效托收,托收后进行检验入库,入库同时填写好入库单作好登记。
企业各个部门根据所需的物资设备总额和部门生产活动需求开出出库申请表。
仓库根据现有的物资判断是否该出库,如果可以就根据出库申请核对发放设备,并填写好出库单作好登记。
设备使用完毕后需要及时还库登记填写好还库单,如有超期或损坏现象就要如实交罚金并登记。
数据字典:
1.对图中"采购",在数据字典中可对其作如下描述:
处理过程:
确定订单
说明:
采购员以购买计划为准,确定价格,数量,总金额,供应商,在采购过程中生成订单及订单.
输入:
计划单编号
输出:
订单
预订单
程序提要:
A在购买计划表中查找是否在价格范围之内
B在价格范围之内,则单价乘以数量是否在总金额范围之内
C若A,B都满足,则添加一条记录
D处理完后,形成订单和预订单
2.对图中"检验",在数据字典中可对其作如下描述:
处理过程:
核对物品信息后生成入库单
说明:
送货员将物品送到后,管理员以预订单为准核对物品信息,确定无误后,登记入库单.
输入:
预订单编号
输出:
入库单
程序提要:
A在预订单中查找物品(例如:
M)信息进行核对
B如若无误,则在入库单中添加一条物品(M)记录
C核对完后,形成入库单
3.对图中"入库",在数据字典中可对其作如下描述:
处理过程:
入库后修改(增加)现有库存表
说明:
入库后增加现有库存表
输入:
入库单编号
输出:
现有库存表
程序提要:
A在入库单中查找到每一种物品的数量,在现有库存表中相应增加
B处理完后,形成现有库存表
4.对图中"出库",在数据字典中可对其作如下描述:
处理过程:
出库后登记入库单并修改(减少)现有库存表
说明:
提货员提交出库申请,由管理员批准后,登记出库单并修改(减少)现有库存表
输入:
出库申请编号
输出:
出库单
现有库存表
程序提要:
A在出库申请单中查找物品(例如:
M)信息进行核对,出库数量是否超过库存或出库后数量小于最小库存
B如若无误,则在出库单中添加一条物品(M)记录
C核对完后,形成出库单
D在出库单中查找到每一种物品的数量,在现有库存表中相应加减少
E处理完后,形成现有库存表
5.对图中"对比",在数据字典中可对其作如下描述:
处理过程:
核对归还物品信息后生成还库单
说明:
将物品归还时,管理员以出库单为准核对物品信息,确定无误后,登记还库单,如若有误,登记惩罚表.
输入:
出库单编号
输出:
还库单
惩罚表
程序提要:
A管理员在出库单中查找物品(例如:
M)信息进行核对
B如若无误,则在还库单中添加一条物品(M)记
C核对完后,形成入库单
D如若有误,则登记惩罚表
E处理完后,形成惩罚表
6.对图中"归还入库",在数据字典中可对其作如下描述:
处理过程:
还库后修改(增加)现有库存表
说明:
还库后增加现有库存表
输入:
还库单编号
输出:
现有库存表
程序提要:
A在还库单中查找到每一种物品的数量,在现有库存表中相应增加
B处理完后,形成现有库存表
关系模式:
购买计划表(计划编号,商品编号,商品名,数量,单价范围,所需部门,金额范围,部门经理签字,计划时间,);
订单(订单号,商品编号,商品名,数量,价格,供应商,所求单位,采购员,送货时间,计划编号);
预订单(预订单号,商品编号,商品名,数量,价格,供应商,所求单位,采购员,收货时间订单号);
入库单(入库单编号,商品号,商品名,数量,价格,入库时间,采购员,仓库管理人员,预订单号);
仓库现有库存表(商品编号,商品名,最大库存,最小库存,现有库存);
申请出库(申请表单号,商品编号,商品名,数量,价格,出库时间,还库时间,部门名称,部门经理签字);
出库单(出库表编号,出库数量商品号商品名,出库性质,所需部门,仓库管理员,提货人员,出库时间,还库时间,出库申请表号);
还库表(还库表单号,商品编号,商品名,数量,归还部门,出库时间,还库时间,仓库管理员,出库表编号);
惩罚表(惩罚表编号,所罚部门,商品编号,商品名,拖还时间,是否损坏,罚款额,罚款时间);
建库和建表SQL语句:
createdatabase仓库管理系统
on
(
name=仓库_dat,
filename='e:
\MicrosoftSQLServer\MSSQL\Data\仓库.mdf',
size=10,
maxsize=150
)
Logon
(name=仓库_log,
filename='e:
\MicrosoftSQLServer\MSSQL\Data\仓库.ldf',
size=10,
maxsize=80
)
createtable购买计划表
(
计划编号char(10)primarykey,
商品编号char(12)notnull,
商品名char(16),
数量float(8),
单价范围float(8),
所需部门char(30),
金额范围float(8),
部门经理签字char(10),
计划时间datetime,
);
createtable订单
(
订单号char(10)primarykey,
商品编号char(12)notnull,
商品名char(16),
数量float(8),
价格money,
供应商char(30),
所求单位char(30),
采购员char(16),
送货时间datetime,
计划编号char(10)references购买计划表(计划编号)
);
createtable预订单
(
预订单号char(10)primarykey,
商品编号char(12)notnull,
商品名char(16),
数量float(8),
价格money,
供应商char(30),
所求单位char(30),
采购员char(16),
收货时间datetime,
订单号char(10)references订单(订单号)
);
createtable入库单
(
入库单编号char(10)primarykey,
商品号char(12)notnull,
商品名char(16),
数量float(8),
价格money,
入库时间datetime,
采购员char(16),
仓库管理人员char(16),
预订单号char(10)references预订单(预订单号)
);
createtable出库申请
(
出库申请表单号char(10)primarykey,
商品编号char(12),
商品名char(16),
数量float(8),
价格money,
出库时间datetime,
还库时间datetime,
部门名称char(30),
部门经理签字char(16)
);
createtable出库单
(
出库表编号char(10)primarykey,
出库数量float(8),
商品号char(10),
商品名char(16),
出库性质char(10),
所需部门char(30),
仓库管理员char(16),
提货人员char(16),
出库时间datetime,
还库时间datetime,
出库申请表单号char(10)references出库申请(出库申请表单号)
);
createtable惩罚表
(
惩罚表编号char(10)primarykey,
所罚部门char(30),
商品编号char(10),
商品名char(16),
拖还时间int,
是否损坏char(4),
罚款额float(8),
罚款时间datetime
);
createtable仓库现有库存表
(
商品编号char(10)primarykey,
商品名char(16),
最大库存float(10),
最小库存float(10),
现有库存float(10)
);
表的约束SQL语言:
/*将单价范围订在10到50之间*/
altertable购买计划表
addconstraint单价范围check(单价范围between10and50);
/*金额范围必须小于50000*/
altertable购买计划表
addconstraint金额范围check(金额范围<50000);
/*出库性质只能是'售出'或'借出'*/
altertable出库单
addconstraint出库性质check(出库性质in('售出','借出'))
/*是否损坏的范围是'是'或'否'*/
altertable惩罚表
addconstraint是否损坏check(是否损坏in('是','否'))
建视图的SQL语言:
/*1.部门计划月所需与实际所用物品的比较(反映部门的发展状况)*/
createview计划_实际(所需部门,月计划总量,月出库总量,月份,商品名)
as
select出库表.所需部门,sum(购买计划表.数量),sum(出库表.出库数量),
month(出库时间),出库表.商品名
from出库表,购买计划表
groupby出库表.商品名,month(出库时间),出库表.所需部门
/*2.可从视图上看到企业每种商品月进货总量*/
createview企业每种商品月进货总量(商品号,商品名,商品月总进货数,月份)
as
select入库单.商品号,商品名,sum(入库单.数量),month(入库时间)
from入库单
groupby商品号,商品名,month(入库时间)
/*3.可以从视图上看到在如库,出库,还库过程中的现有库存修改后的信息*/
createview现有库存(商品编号,商品名,现有库存,时间)
AS
SELECT仓库现有库存表.商品编号,仓库现有库存表.商品名,(sum(现有库存)+sum(入库单.数量)+sum(还库表.数量)-sum(出库单.出库数量)),day(入库单.入库时间)
FROM入库单,出库单,还库表,仓库现有库存表
GROUPBY仓库现有库存表.商品名,day(入库单.入库时间),仓库现有库存表.商品编号
存储过程的SQL语句:
/*判断是否该出库(条件:
现有库存-要求出库数量>最小库存)*/
createproc判断是否该出库@商品编号char(10),@要求出库数量float(8)
as
ifexists(select*from仓库现有库存表where商品编号=@商品编号)
begin
ifexists(select*from仓库现有库存表where(现有库存-@要求出库数量)<最小库存)
rollbacktransaction
raiserror('你现在不能从仓库中取出商',16,10)
end
/*测试程序,在'',''中填入数据*/
execute判断是否该出库
触发器的SQL语句:
/*不准修改罚款金额的存储过程*/
createtrigger[修改罚款金额]on[惩罚表]
forupdateas
ifupdate(罚款额)
begin
rollbacktransaction
raiserror('在未交罚金前不能修改罚款金额',16,10)
insertintomodify_log
values(current_user,getdate())
select*frommodify_log
end
/*为了预防超期不准修改还库时间的存储过程*/
createtrigger[修改还库时间]on[出库单]
forupdateas
ifupdate(还库时间)
begin
rollbacktransaction
raiserror('在未交还库前不能修改还库时间',16,10)
insertintomodify_log
values(current_user,getdate())
select*frommodify_log
end
/*为了预防超期不准修改出库时间的存储过程*/
createtrigger[修改出库时间]on[出库单]
forupdateas
ifupdate(出库时间)
begin
rollbacktransaction
raiserror('能修改出库时间',16,10)
insertintomodify_log
values(current_user,getdate())
select*frommodify_log
end
insertinto购买计划表(计划编号,商品编号,商品名,数量,单价范围,所需部门,金额范围,经理签字,计划时间)
玉’,’2003/6/1’)
insertinto订单(订单号,商品编号,商品名,数量,价格,供应商,所求单委,采购员,送货时间,计划编号)
insertinto预订单(预订单号,商品编号,商品名,数量,价格,供应商,所求单委,采购员,送货时间,订单号)
(因为我们数据的插入是手动生成的,现只给出三个表的数据插入)
前台抓图:
1.登录窗口(拥有两个登录方式,不同的方式访问权限不同)
Two:
#include
#include
#include
#include
structInfo
{
charnum[20];
charname[20];
intprice;
intamount;
};
charmenu()/*菜单选择函数*/
{
charn;/*n记录选择的菜单*/
system("cls");
puts("\t\t欢迎来到仓库货物管理系统");
puts("\t\t***********************MENU***********************\n");
puts("\t\t*1.录入货物信息*\n");
puts("\t\t*2.显示货物信息*\n");
puts("\t\t*3.查找货物信息*\n");
puts("\t\t*4.修改货物信息*\n");
puts("\t\t*5.删除货物信息*\n");
puts("\t\t*6.退出系统*\n");
puts("\t\t**************************************************\n");
puts("*********************************");
printf("*请选择你要输入数(1-6):
*\n");
puts("*********************************");
while
(1)
{
n=getchar();
getchar();
if(n<'1'||n>'6')
{
puts("**********************************");
printf("*出错了!
请再次输入(1-6):
*\n");
puts("**********************************");
}
else
break;
}
returnn;
}
voidappend()/*货物信息输入函数*/
{
structInfoinfo;
FILE*fp;
charch;
if((fp=fopen("F:
\\test\\filemolde\\123.txt","wb"))==NULL)
{
printf("******************\n");
printf("*不能打开文件!
*\n");
printf("******************\n");
getch();
exit
(1);
}
do
{
printf("\tnum:
");
gets(info.num);
printf("\tname:
");
gets(info.name);
printf("\tprice:
");
scanf("%d",&info.price);
printf("\tamount:
");
scanf("%d",&info.amount);
getchar();
fwrite(&info,sizeof(info),1,fp);
printf("***************************\n");
printf("*还需要输入吗?
(Y/N):
*\n");
printf("***************************\n");
ch=getchar();
getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
voidprintf1()
{
printf("*************************************************************************\n");
printf("\t\t%-10s\t%-10s\t%-10s\t%-10s\n","num","name","price","amount\n");
printf("*************************************************************************\n");
}
voidprintf2(structInfoinfo)
{
printf("\t\t%-10s\t%-10s\t%-10d\t%-10d\n",info.num,info.name,info.price,info.amount);
}
voiddisplay()/*货物信息显示函数*/
{
structInfoinfo;
FILE*fp;
intm=0;
if((fp=fopen("F:
\\test\\filemolde\\123.txt","rb"))==NULL)
{
printf("******************");
printf("*不能打开文件!
*");
printf("******************");
getch();
exit
(1);
}
while(fread(&info,sizeof(info),1,fp)==1)
{
m++;
if(m==1)
printf1();
printf2(info);
if((m!
=0)&&(m%10==0))
{
printf("*****************************\n");
printf("*输入任何键继续*");
printf("*****************************\n");
getch();
puts("\n\n");
printf1();
}
}
fclose(fp);
printf("************************************\n");
printf("*总共有%d条记录在其中!
*\n",m);
printf("************************************\n");
getch();
}
voidsearch()/*货物信息查询函数*/
{
structInfoinfo;
FILE*fp;
intflag;/*flag为1按编号查询,flag为2按姓名查询*/
inttotal=0;/*记录符合条件的记录的个数*/
charch[10];
charf;
if((fp=fopen("F:
\\test\\filemolde\\123.txt","rb"))==NULL)
{
printf("************************************\n");
printf("*\t不能打开文件!
*\n");
printf("************************************\n");
getch();
exit
(1);
}
do
{
rewind(fp);
printf("************************************\n");
printf("*查询通过(1:
编号2:
姓名):
*\n");
printf("************************************\n");
while
(1)
{
scanf("%d",&flag);
getchar();
if(flag<1||flag>2)
{
printf("*****************************************\n");
printf("*出错了!
请再次输入[1:
编号][2:
姓名]*\n");
printf("*****************************************\n");
}
else
break;
}
if(flag==1)/*按编号进行查询*/
{
printf("************************************\n");
printf("*请输入你要查询的编号:
*\n");
printf("****************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 仓库 管理 系统 设计 15403217