宁 波 工 程 学 院
电 信 学 院
实验报告
实验名称
Oracle 仓库管理系统设计
专业、班级
计科 111 班
姓名
日期
XXX
2014.5.27
学号 XXXXXXXX
指导教师
XXX 老师
一、 系统描述
仓库管理系统的功能:
1)、进仓管理:在货物送到仓库时,对货物信息进行了解并将相关信息输入到数据库
中,同时更新数据库。
2)、出仓管理:在货物运出仓库时,进行货物信息统计并将数据保存到数据库中,同
时更新数据库。
3)仓库货物信息提醒:当货物少于某一规定的值时,或者货物保质期将至时将发出
提醒。
4)、仓库数据管理:当仓库中的货物少于要出仓的货物时不允许出仓;当仓库货物为
满时,不允许其他货物进仓。
5)、查询修改:管理员可以进行一系列查询:查询货物类别及货物的信息、数量和货
物流动的规则(对货物出仓进仓的要求);并可以对以上查询进行修
改;可以查询某一天货物流动的信息,以及出仓及入仓的详细信息。
二、 系统需求分析
利用用例图、类图、E-R 图对系统进行需求分析。
仓库管理系统可以实现对仓库货物信息、出仓货物管理、进仓货物管理、货物数量管理
以及货物出入仓限制规则,以下为其用例图、类图及 E-R 图。
仓库管理系统用例图
表 1:产品信息表 PRO
字段名
PROID
PRONAME
PRODRESS
DREPHONE
BDATE
DEMO
数据类型
NUMBER
VARCHAR2
VARCHAR2
NUMBER
NUMBER
VARCHAR2
表 2:产品信息管理 PRO_MAN
字段名
PROID
BIRDATE
ZNUM
DEMO
数据类型
NUMBER
DATE
NUMBER
VARCHAR2
表 3:产品出库管理 C_PRO
字段名
PROID
CDATE
BIRDATE
CNUM
DEMO
数据类型
NUMBER
DATE
DATE
NUMBER
VARCHAR2
表 4:产品入库日期 R_PRO
字段名
PROID
RDATE
BIRDATE
RNUM
DEMO
数据类型
NUMBER
DATE
DATE
NUMBER
VARCHAR2
类图
长度
11
20
50
20
5
100
长度
11
20
100
长度
11
10
100
长度
11
10
100
约束
主码
NOT NULL
NOT NULL
说明
产品编号
产品名称
产品地址
产品地址号码
保质天数
说明
约束
说明
主码,外码
产品编号
主码
产品生产日期
NOT NULL
约束
主码,外码
主码
NOT NULL
NOT NULL
产品数量
说明
说明
产品编号
出库日期
生产日期
出库数量
说明
约束
说明
主码,外码
产品编号
主码
NOT NULL
NOT NULL
入库日期
生产日期
入库数量
说明
表 5:产品仓库限制规则
字段名
PROID
BIRDATE
ZNUM
DEMO
数据类型
NUMBER
DATE
NUMBER
VARCHAR2
表 6:管理员表 ADMIN
字段名
ID
USERNAME
PASSORD
数据类型
NUMBER
VARCHAR2
VARCHAR2
约束
说明
主码,外码
产品编号
主码
NOT NULL
生产日期
产品数量
说明
约束
主码
NOT NULL
NOT NULL
说明
管理员编号
管理员账号
账号密码
长度
11
20
100
长度
11
10
11
E-R 图
三、 数据库对象设计
1、表设计
通过对仓库管理系统的业务分析及查询资料了解,设计该系统的 6 个关系表,详情见
上边类图部分。
2、序列设计
为了方便仓库产品管理,在数据库中用以下序列产生相应编号
C_R_VIEW:产生产品编号,起始值 100。
3、视图设计
为了方便仓库管理员查询出入库情况、每个生产日期的库存信息及产品的总数量,
创建下列视图。
(1)创建名为“C_R_PRO_VIEW”的视图,用于查看产品的出入库汇总情况,包
括出库的产品编号,入库的产品编号,产品名称,入库日期,出库日期,出库产品
的生产日期,入库产品的生产日期,出库数量,入库数量。
(2)创建名为“SNUM”的视图,用于查询一种产品的总库存量,包括产品编号,
产品总数量。
(3)创建名为“ZNUM_PRO_VIEW”的视图,用于查询产品的库存信息,包括不同
生产日期的库存量。
4、PL/SQL 功能模块设计
利用 PL/SQL 程序创建下列各种数据库对象。
(1)创建一个当仓库产品少于最少数量或者大于最大数量时显示出产品数量、生产
日期及保质期的函数。
(2)创建一个计算距保质期时间的存储过程。
(3)创建一个计算出库后数量的函数。
(4)创建一个计算入库后数量的函数。
四、 数据库对象创建
描述数据库对象中表的创建、序列的创建、视图的创建、存储过程的创建,触发器的创
建等内容,实现系统的基本功能。
1、表的创建
(1) 产品信息 PRO:
CREATE TABLE "USERS"."PRO" (
"PROID" NUMBER(11) NOT NULL ,
"PRONAME" VARCHAR2(20) NOT NULL ,
"PRODRESS" VARCHAR2(50),
"DREPHONE" NUMBER(20),
"BDATE" NUMBER(5) NOT NULL ,
"DEMO" VARCHAR2(100),
PRIMARY KEY ("PROID") VALIDATE )
TABLESPACE "USERS"
(2)仓库产品管理 PRO_MAN
CREATE TABLE "USERS"."PRO_MAN" (
"PROID" NUMBER(11) NOT NULL ,
"BIRDATE" DATE NOT NULL ,
"ZNUM" NUMBER(20) NOT NULL ,
"DEMO" VARCHAR2(100),
PRIMARY KEY ("PROID", "BIRDATE") VALIDATE ,
FOREIGN KEY ("PROID") REFERENCES "SYS"."PRO" ("PROID") VALIDATE )
TABLESPACE "USERS"
(3)创建入库管理表 R_PRO
CREATE TABLE "USERS"."R_PRO" (
"PROID" NUMBER(11) NOT NULL ,
"RDATE" DATE NOT NULL ,
"BIRDATE" DATE NOT NULL ,
"RNUM" NUMBER(10) NOT NULL ,
"DEMO" VARCHAR2(100),
PRIMARY KEY ("PROID", "RDATE") VALIDATE ,
FOREIGN KEY ("PROID") REFERENCES "SYS"."PRO" ("PROID") VALIDATE )
TABLESPACE "USERS"
(4)出库产品管理 C_PRO
CREATE TABLE "USERS"."C_PRO" (
"PROID" NUMBER(11) NOT NULL ,
"CDATE" DATE NOT NULL ,
"BIRDATE" DATE NOT NULL ,
"CNUM" NUMBER(10) NOT NULL ,
"DEMO" VARCHAR2(100),
PRIMARY KEY ("PROID", "CDATE") VALIDATE ,
FOREIGN KEY ("PROID") REFERENCES "SYS"."PRO" ("PROID") VALIDATE )
TABLESPACE "USERS"
(5)管理规则 PRO_LIM
CREATE TABLE "USERS"."PRO_LIM" (
"PROID" NUMBER(11) NOT NULL ,
"MINUM"NUMBER(10) NOT NULL ,
"MAXUM" NUMBER(10) NOT NULL ,
"LBIRDATE" NUMBER(5) NOT NULL ,
"DEMO" VARCHAR2(100),
PRIMARY KEY ("PROID") VALIDATE ,
FOREIGN KEY ("PROID") REFERENCES "SYS"."PRO" ("PROID") VALIDATE )
TABLESPACE"USERS"
(6)管理员表 ADMIN
CREATE TABLE "USERS"."ADMIN" (
"ID" NUMBER(11) NOT NULL ,
"USERNAME" VARCHAR2(10) NOT NULL ,
"PASSWORD" VARCHAR2(11) NOT NULL ,
PRIMARY KEY ("ID") VALIDATE ) TABLESPACE "USERS"
2、序列的创建
CREATE
SEQUENCE
NOORDER
NOMAXVALUE MINVALUE 100 INCREMENT BY 1 START WITH 100
C_R_VIEW NOCYCLE
NOCACHE
3、视图的创建
(1)产品的出入库情况 C_R_PRO_VIEW
CREATE OR REPLACE VIEW C_R_PRO_VIEW
AS
SELECT
CPROID,RPROID,PRONAME,RDATE,CDATE,CBIRDATE,RBIRDATE,CNUM,RN
UM FROM PRO,
(SELECT
AS
C_PRO.PROID
AS
RPROID,RDATE,CDATE,C_PRO.BIRDATE AS CBIRDATE,R_PRO.BIRDATE AS
RBIRDATE,CNUM,RNUM FROM
C_PRO FULL JOIN R_PRO ON
C_PRO.PROID=R_PRO.PROID and CDATE=RDATE ORDER BY RPROID) R_C
WHERE PRO.PROID=CPROID AND PRO.PROID=RPROID
CPROID,R_PRO.PROID
(2)产品总数量:SNUM
CREATE OR REPLACE VIEW SNUM
AS
SELECT PRO.PROID,SUM(ZNUM) SNUM FROM PRO,PRO_MAN
WHERE PRO.PROID=PRO_MAN.PROID GROUP BY PRO.PROID
(3)产品的库存信息:ZNUM_PRO_VIEW
CREATE OR REPLACE VIEW ZNUM_PRO_VIEW
AS
SELECT PRO_MAN.PROID,PRONAME,BIRDATE,BDATE,ZNUM FROM
PRO,PRO_MAN WHER PRO.PROID=PRO_MAN.PROID
4、PL/SQL 程序设计
(1)仓库产品少于最少数量或者大于最大数量时显示出产品数量、生产日期及保质期来:
CREATE OR REPLACE FUNCTION MIN_MAX_NUM_SHOW (
V_PROID NUMBER,V_BIRDATE OUT DATE,V_BDATE OUT NUMBER)
RETURN NUMBER
AS
V_SNUM NUMBER;V_MINUM NUMBER;V_MAXUM NUMBER;
BEGIN
SELECT SUM(ZNUM) INTO V_SNUM FROM PRO_MAN WHERE PROID=V_PROID;
SELECT MINUM,MAXUM INTO V_MINUM,V_MAXUM FROM PRO_LIM WHERE
PROID=V_PROID;
SELECT BIRDATE INTO V_BIRDATE FROM PRO_MAN WHERE PROID=V_PROID;
SELECT BDATE INTO V_BDATE FROM PRO WHERE PROID=V_PROID;
IF V_SNUM-V_MINUM<=0 OR V_SNUM-V_MAXUM>=0 THEN
RETURN V_SNUM;
END IF;
END;
(2)计算距保质期时间:
CREATE OR REPLACE PROCEDURE PRO_B(
V_PROID NUMBER)
AS
V_DAYS NUMBER;
V_LBIRDATE NUMBER;
CURSOR C_BIRDATE IS SELECT BIRDATE FROM
PRO_MAN WHERE PROID=V_PROID;
BEGIN
SELECT LBIRDATE INTO V_LBIRDATE FROM PRO_LIM
WHERE PROID=V_PROID;
FOR V_BIRDATE IN C_BIRDATE LOOP
IF V_DAYS:=(SYSDATE-V_BIRDATE)>=V_LBIRDATE THEN
DBMS_OUTPUT.PUTLINE(V_DAYS);
END IF;