1、北大飞鸟采购管理信息系统方案设计说明书(FNMIS1.0)北大 E3 班软件开发第一小组二 OO三年四月十六日项目可实施报告飞鸟公司目前的采购及库存管理环节都以手工填写单据的形式为主,工作效率低,错误率高,查询麻烦。因此开发一套以 PC 机及管理软件集成的采购管理系统是非常有必要的。开发出的软件采用 C/S(客户/服务器)模式,建立服务器端数据库进行统一集中式的管理,数据进行加密处理,不能拷贝而且不易丢失,得到安全保证,每个部门通过终端可随时访问服务器端数据库,可进行快速高效的查询及新信息录入,各个客户端使用同一台服务器上的数据库数据,保证数据的一致性和准确性,非常适合网络化管理。实施方略:为
2、每个使用部门安装具有录入及输出功能的终端,并安装服一台服务器,组建小型局域网。系统采用 OLEDB 数据连接、COM 组件、Client/Server 体系的两层结构,软件采用 VB 语言开发前台界面,后台数据库采用 SQLserver,开发完成后的系统能实现智能管理。系统网络结构图如下:综上所述,本系统的设计能够极大的满足目前本公司的需求,可以进入项目实施阶段。用户需求分析说明书北大飞鸟公司是一家以采购电脑配件组装品牌电脑出售为主的公司。为了提高工作效率,现准备采用先进的采购及库存管理系统来维护公司的日常运作,本系统需要提供的功能如下:(一)生产部门: 1 可以通过终端录入产品请购单,终端应
3、具备可供选择的产品清单并能自动生成请购单号,只需填写产品数量,请购单录入后其数据库中的状态字段自动生成为“已申请未审批” ,请购单录入后应打印请购单供部门经理审批,需打印的请购单样式如下:单据一:原始请购单(供审批)申请单号:0001 部门:生产一部 申请人:赵亮 申请日期:2003/4/18 产品编号 产品名称 产品型号 产品规格 计量单位 申请数量NC01 内存条 DDR 128M 条 15ZHB01 主板 302 可以通过终端查询请购单的状态,如果已经到货则打印请购单,凭请购单去仓库提货。(二)部门主管收到请购单后,根据请购单号在电脑中查询出对应的记录并进行处理,填写每种产品的审批数量,
4、审批人根据系统登录的用户名自动填充,请购单上相关产品的状态则根据审批数量自动更新为“已审批未订购”或“部分审批未订购“,然后打印出审批后的请购单交由采购部处理。打印的请购单样式如下:单据二:审批后的请购单(供订货)申请单号:0001 部门:生产一部 申请人:赵亮 申请日期:2003/4/18 审批人:唐梦 审批日期:2003/4/18产品编号 产品名称 产品型号 产品规格 计量单位 审批数量NC01 内存条 DDR 128M 条 10ZHB01 主板 10(三)采购部: 收到请购单后,先统计各部门需要同类产品的数量,根据产品编号查询供应商及报价信息,货比三家后下订单,为了区分同类产品不同的需求
5、用户,允许订单明细表上同类产品的多次录入,以区别来自于哪张请购单。1 操作产品表(对公司所有所需产品的详细信息进行增删改)2 操作供应商表(对所有可供所需产品的厂商信息进行增删改)3 操作订单表:根据请购单的产品 ID 在产品表中查询产品信息,在供应商表中查询报价信息,根据报价下订单。订单生成后要同步更新请购单的状态为“已订购未到货” (当订购数量=审批数量时)或“部分订购未到货” (当订购数量 0 ApplyQty ProductQty3、Factory():记录供应商信息。序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* ApplyId 请购单编号 自动编号 4 非空5 Dep
6、artName 部门名称 nvarchar 20 N6 Proposer 申请人 nvarchar 87 Taster 审批人 nvarchar 8序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* ApplyId 请购单编号 自动编号 4 非空2 ProductID 产品名称 nvarchar 10 N3 ApplyQty 请购数量 int 4 N4 ProductQty 审批数量 int 45 ApplyStatu 请购状态 nvarchar 8 N表名 Factory 实体描述 供应商表主键 FactoryId productID外键 ProductID 检查约束 UnitPr
7、ice0 4、Orders ():记录订单的主要信息。表名 Order 实体描述 订单主表主键 OrderID外键5、OrderDetails():记录订单的详细信息。表名 Order 实体描述 订单从表主键 OrderID ProductID ApplyID外键 OrderID 检查约束 Qty06、InStorageMaster():记录入库单的主要信息。表名 InDepotMaster 实体描述 入库单主表主键 InDepotID外键序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* FactoryId 供应商编号 Nvarchar 10 非空2* ProductID 产品编号
8、 Nvarchar 10 非空2 FactoryName 供应商名称 Nvarchar 40 非空3 UnitPrice 商品名称 Nvarchar 10 非空3 Tel 联系电话 Nvarchar 12 非空4 Fax 传真 Nvarchar 125 LinkMan 联系人 Nvarchar 8 非空6 Address 地址 Nvarchar 50序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* OrderID 订单编号 nvarchar 10 非空2 OrderDate 订购日期 datetime 8 非空3 OrderPerson 订购人 nvarchar 8 非空非空序号
9、字段名称 字段说明 字段类型 字段长度 属性 备注1* OrderID 订单编号 nvarchar 10 非空2* ProductID 产品号 nvarchar 10 非空3* ApplyID 请购单号 nvarchar 10 非空3 factoryID 供应商编号 nvarchar 8 非空4 Qty 产品数量 int 4 非空序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* InDepotID 入库单编号 nvarchar 10 非空2 InDepotDate 入库日期 datetime 8 非空3 SendCompany 送货单位 nvarchar 404 SendMan 送
10、货人 nvarchar 8 非空5 AcceptMan 收货人 nvarchar 8 非空7、InStoraDetails():记录入库单的详细信息。表名 InDepotDetails 实体描述 入库单从表主键 InDepotID,ProductID ,ApplyID外键 InDepotID 检查约束 InQty08、OutStorageMaster():记录出库单的主要信息。表名 OutDepotMaster 实体描述 出库单主表主键 OutDepotID外键9、OutStoraDetails():记录出库单的详细信息。表名 OutDepotDetails 实体描述 出库单从表主键 OutD
11、epotID,ProductID外键 OutDepotID 检查约束 OutQty 010、Products():记录产品的详细信息。表名 Products 实体描述 产品表主键 ProductID外键序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* InDepotID 入库单编号 nvarchar 10 非空2 ProductID 产品号 nvarchar 10 非空3 ApplyID 请购单号 nvarchar 10 非空4 InQty 入库数量 Int 4序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* OutDepotID 出库单编号 nvarchar 10 非
12、空2 OutDepotDate 出库日期 datetime 8 非空3 SendMan 出库人 nvarchar 8 非空SendMan 提货人 nvarchar 8序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* OutDepotID 出库单编号 nvarchar 10 非空2 ProductID 产品号 nvarchar 10 非空3 ApplyID 请购单号 nvarchar 10 非空4 OutQty 出库数量 Int 4序号 字段名称 字段说明 字段类型 字段长度 属性 备注1* ProductID 产品编号 nvarchar 10 非空2 ProductName 产品名
13、称 nvarchar 20 非空3 ProductModel 产品型号 nvarchar 20 非空4 ProductSpec 产品规格 nvarchar 20 非空5 Unit 计量单位 nvarchar 3(三)各表的触发器 1、 申请表审批后审批数量的变化将触发请购单状态的变化,触发器的脚本如下:CREATE TRIGGER applyStateUpdate ON dbo.ApplyDetails FOR UPDATEASif exists(select * from inserted where productqty0 and productqty=applyqty)beginprin
14、t 请购单的状态将更新为已审批未订购 update applydetails set applystate= 已审批未订购 where productqty0 and applystate= 已申请未审批endif exists(select * from inserted where productqty0 and productqty0 and applystate= 已申请未审批endif exists(select * from inserted where productqty=0)beginupdate applydetails set applystate= 已申请未审批 whe
15、re productqty=0 end2、 订单明细表的录入将触发请购单状态的变化 ,触发器脚本如下:CREATE TRIGGER orderInsertUPdateApply ON dbo.OrderDetails FOR insert,UPDATEASdeclare Oqty int,Aqty int,AID INT,PID nvarchar(10)select Oqty=orderqty, AID=applyID,PID=productID from insertedselect Aqty=productqty from applydetails where productID=PID
16、and applyiD=AIDbeginif Oqty AqtybeginPRINT 数量超出计划rollback transactionendif Oqty=Aqty beginprint 请购单的状态将更新为已订购未到货 update ApplyDetails set Applystate= 已订购未到货 WHERE applyID=AID AND productID=PIDendif OqtyAqtybeginPRINT 数量超出订购数量rollback transactionendif INqty=Aqty beginprint 请购单的状态将更新 update ApplyDetail
17、s set Applystate= 已到货未提货 WHERE applyID=AID AND productID=PIDendif INqty (select sqty from store where productID=PID )BEGINPRINT库存不足不能足额提取ROLLBACK TRANSACTIONendELSEBEGINupdate storeset sqty=sqty-pqty+OLDQTY where productID=PIDENDCREATE TRIGGER ApplyStatu ON dbo.OutDepotDetails FOR INSERT, UPDATE ASd
18、eclare outqty int,Aqty int,AID INT,PID nvarchar(10)select outqty=outqty, AID=applyID,PID=productID from insertedselect Aqty=productqty from applydetails where productID=PID and applyiD=AIDbeginif outqty AqtybeginPRINT 不能超额提取rollback transactionendif outqty=Aqty beginprint 请购单的状态将更新 update ApplyDetai
19、ls set Applystate= 已提货 WHERE applyID=AID AND productID=PIDendif outqtyAqty beginprint 请购单的状态将更新 update applydetails set applystate= 部分提货 WHERE applyID=AID AND productID=PIDendend5、 产品表的录入将触发库存表的变化,触发器脚本如下:CREATE TRIGGER insertstore ON dbo.Products FOR INSERTASdeclare PID nvarchar(10)select PID=productID from insertedinsert into store (productID,Sqty)values(PID,0)订单表的订购数量 =请购表的审批数量入库表的入库数量 =订购表的订购数量出库表的出库数量 =请购表的审批数量(四)各个表的关系如下: