宁 波 工 程 学 院
电 信 学 院
实验报告
实验名称 Oracle仓库管理系统设计
专业、班级 计科111班
姓名 XXX 学号 XXXXXXXX
日期 2014.5.27
指导教师 XXX老师
一、 系统描述
仓库管理系统的功能:
1)、进仓管理:在货物送到仓库时,对货物信息进行了解并将相关信息输入到数据库
中,同时更新数据库。
2)、出仓管理:在货物运出仓库时,进行货物信息统计并将数据保存到数据库中,同
时更新数据库。
3)仓库货物信息提醒:当货物少于某一规定的值时,或者货物保质期将至时将发出
提醒。
4)、仓库数据管理:当仓库中的货物少于要出仓的货物时不允许出仓;当仓库货物为
满时,不允许其他货物进仓。
5)、查询修改:管理员可以进行一系列查询:查询货物类别及货物的信息、数量和货
物流动的规则(对货物出仓进仓的要求);并可以对以上查询进行修
改;可以查询某一天货物流动的信息,以及出仓及入仓的详细信息。
二、 系统需求分析
利用用例图、类图、E-R图对系统进行需求分析。
仓库管理系统可以实现对仓库货物信息、出仓货物管理、进仓货物管理、货物数量管理以及货物出入仓限制规则,以下为其用例图、类图及E-R图。
仓库管理系统用例图
类图
表1:产品信息表PRO
表2:产品信息管理PRO_MAN
表3:产品出库管理C_PRO
表4:产品入库日期R_PRO
表5:产品仓库限制规则
表6:管理员表ADMIN
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 C_R_VIEW NOCYCLE NOORDER NOCACHE NOMAXVALUE MINVALUE 100 INCREMENT BY 1 START WITH 100
3、视图的创建
(1)产品的出入库情况C_R_PRO_VIEW
CREATE OR REPLACE VIEW C_R_PRO_VIEW
AS
SELECT CPROID,RPROID,PRONAME,RDATE,CDATE,CBIRDATE,RBIRDATE,CNUM,RNUM FROM PRO,
(SELECT
C_PRO.PROID AS CPROID,R_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
(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;
END LOOP;
END;
(3)计算出库后数量:
CREATE OR REPLACE FUNCTION A_C_NUM(
V_PROID NUMBER,V_BIRDATE OUT DATE)
RETURN NUMBER
AS
V_CZNUM NUMBER;
BEGIN
SELECT BIRDATE INTO V_BIRDATE FROM C_PRO WHERE PROID=V_PROID;
SELECT ZNUM-CNUM INTO V_CZNUM FROM (
SELECT PRO_MAN.PROID, PRO_MAN.BIRDATE CBIRDATE,CNUM,ZNUM FROM
C_PRO,PRO_MAN WHERE
PRO_MAN.PROID=C_PRO.PROID AND PRO_MAN.BIRDATE=C_PRO.BIRDATE) A_C
WHERE PROID=V_PROID AND A_C.CBIRDATE=V_BIRDATE;
RETURN V_CZNUM;
END;
(4)计算入库后数量:
CREATE OR REPLACE FUNCTION A_R_NUM(
V_PROID NUMBER,V_BIRDATE OUT DATE)
RETURN NUMBER
AS
V_RZNUM NUMBER;
BEGIN
SELECT BIRDATE INTO V_BIRDATE FROM R_PRO WHERE PROID=V_PROID;
SELECT ZNUM+RNUM INTO V_RZNUM FROM (
SELECT PRO_MAN.PROID, PRO_MAN.BIRDATE RBIRDATE,RNUM,ZNUM FROM
R_PRO,PRO_MAN WHERE
PRO_MAN.PROID=R_PRO.PROID AND PRO_MAN.BIRDATE=R_PRO.BIRDATE) A_R
WHERE PROID=V_PROID AND A_R.RBIRDATE=V_BIRDATE;
RETURN V_RZNUM;
END;
五、 总结
在这次的数据库实践中,我学到了很多,也收获了很多经验。刚刚开始时由于认识不足以及搜素资料不完善,将此数据库系统设计不完善,使系统无法实现。在老师的教导下,我又重新将仓库管理系统进行分析,并找同学讨论,不断完善,经过一番努力后,将此系统完成,虽然不是很复杂,功能也不是很多,但是这注入了我全部的思想。
由此次试验,我学会了做事情要循序渐进,不可能一次性就能将事情做到十全十美,在做的过程中不断思考,将事情渐渐完善。
此次的实践还让我的数据库知识更扎实,在试验中运用了存储过程,视图等功能,让我学到的知识能更加熟练掌握。
本文来源:https://www.2haoxitong.net/k/doc/c00d674d85254b35eefdc8d376eeaeaad1f316ce.html
文档为doc格式