
指导书
昆明理工大学自动化系
20xx年12月
数据库技术是近年来计算机科学技术中发展最快的领域之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。《数据库原理及应用》课程设计重视实践环节,对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的和要求有以下几方面:
一、课程设计目的:
1.加深对讲授内容的理解
《数据库原理及应用》中有关数据库技术的基本理论、基本概念、设计与实现的方法和阶段性知识,光靠课堂讲授既枯燥无味又难以记住,但它们都很重要,要想熟练掌握,必须经过大量实践环节加深对它们的理解。
2.通过课程设计,掌握数据库系统设计与开发的方法及步骤
数据库是一门应用性很强的学科,开发一个数据库系统需要集理论、系统和应用三方面为一体,以理论为基础,以系统(DBMS)作支柱,以应用为目的,将三者紧密结合起来。同时结合实际需要开发一个真实的数据库系统,对于较大型的系统可多人一起完成,但无论如何都应完成数据库的需求分析、数据的分析与建模、数据库的建立、数据库的开发与运行等全部过程。在此过程中将所学的知识贯穿起来,达到能够纵观全局,分析、设计具有一定规模的题目要求,基本掌握数据库系统设计与开发的基本思路和方法并且做到对知识的全面掌握和运用。
3.培养学生自学以及主动解决问题的能力
通过本次设计,使同学能够主动查阅与数据库相关资料,掌握一些课堂上老师未曾教授的知识,从而达到培养学生自学以及主动解决问题的能力的目的。
二、课程设计基本要求:
1.课程设计应由学生本人完成完成,严禁抄袭,如果发现最后的设计基本相同者(系统需求分析与功能设计、数据库的概念设计、逻辑设计,数据库的实现与运行等内容基本相同),一经验收教师认定其抄袭行为,则成绩均为不及格。
2.掌握所学的基础理论知识,数据库的基本概念、基本原理、关系数据库的设计理论、设计方法等。熟悉数据建模工具PowerDesigner与数据库管理系统SqlServer软件的使用。
3.按时上机调试,认真完成课程设计。
4.认真编写课程设计报告,课程设计报告的书写格式见附录2
数据库技术是近年来计算机科学技术中发展最快的领域之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。《数据库原理及应用》课程设计重视实践环节,对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的和要求有以下几方面:
3、前言
设计物资管理数据库系统的目的是为了全面管理仓库中储存的商品和货物、维护公司资产的安全完整、缩短库存信息流转时间,使经营公司的物资管理层次分明、井然有序,为采购和销售提供依据,从而提高公司的经营效率。物资管理数据库主要通过存储供货商、购货商、产品等的信息,实现下列任务:保管好库存物资,做到数量充足和准确、质量完好、确保安全、收发迅速、服务周到、降低费用、加速资金周转。
4、需求分析
1、主要的需求分析及要求
1)一个存放商品的仓库,每天都有商品出库和入库。
2)种商品都有名称、生产厂家、型号、规格等。
3)出入库时必须填写出入库单据,单据包括商品名称、生产厂家、型号、规格、数量、日期、时间、入库单位(或出库单位)名称、送货(或提货)人姓名。
4)实现按商品名称、出入库日期的查询。
5)实现分别按日、月和年对出入库商品数量的统计
2、主要的管理模块
库存物资管理大体可以分为以下3 大模块,如下图所示:首先是商品入库模块,该模块主要就是描述把采购回来的商品,分类别的放置到指定的仓库中去,然后是商品出库模块,该模块主要描述从指定的仓库中拿出商品;最后时库存模块,这个模块主要是记录商品的库存数量变化。
4、数据逻辑设计
关系模式如下:
商品(商品编号、商品名称、生产厂家、型号、规格),商品编号为主键
仓库(仓库号、仓库名称),仓库号为主键
库存(商品编号,仓库号,库存数量),(商品编号,仓库号)为主键,同时也分别为外键
入库(入库号,商品编号,仓库号,入库数量,入库日期,送货人姓名),(入库号)为主键,(商品编号,仓库号)为外键
出库(出库号,商品编号,仓库号,出库数量,出库日期,提货人姓名) (出库号)为主键,(商品编号,仓库号)为外键
5、E-R图
5、数据库实现
表1 goods(商品)表结构
| 字段名 | 数据类型 | 字段长度 | 允许空否 | 字段说明 |
| g_num | Char | 10 | Not Null | 商品编号,主键 |
| g_name | Varchar | 50 | Not Null | 商品名称 |
| g_fac | Varchar | 50 | Not Null | 生产厂家 |
| g_type | Varchar | 20 | Not Null | 型号 |
| g_norms | Varchar | 20 | Not Null | 规格 |
| 字段名 | 数据类型 | 字段长度 | 允许空否 | 字段说明 |
| sNo | Char | 10 | Not Null | 仓库号,主键, |
| Sname | Varchar | 50 | Not Null | 仓库名称 |
| 字段名 | 数据类型 | 字段长度 | 允许空否 | 字段说明 |
| g_num | Char | 10 | Not Null | 商品编号,主键,外键(参照goods表) |
| sNo | Char | 10 | Not Null | 仓库号,主键,外键(参storage照表) |
| ramount | int | Not Null | 库存数量 |
| 字段名 | 数据类型 | 字段长度 | 允许空否 | 字段说明 |
| s_num | Char | 10 | Not Null | 入库号(主键) |
| g_num | Char | 10 | Not Null | 商品编号(外键,goods) |
| sNo | Char | 10 | Not Null | 仓库号(外键,storage) |
| samount | Int | Not Null | 入库数量 | |
| sdate | smalldatetime | Not Null | 入库日期 | |
| supplier | Varchar | 50 | Not Null | 送货人姓名 |
| 字段名 | 数据类型 | 字段长度 | 允许空否 | 字段说明 |
| o_num | Char | 10 | Not Null | 出库号(主键) |
| g_num | Char | 10 | Not Null | 商品编号(外键,goods) |
| sNo | Char | 10 | Not Null | 仓库号(外键,storage) |
| oamount | Int | Not Null | 出库数量 | |
| odate | smalldatetime | Not Null | 出库日期 | |
| buyers | Varchar | 50 | Not Null | 提货人姓名 |
CREATE DATABASE Logistics
CREATE TABLE goods
( g_num Char(10) Not Null primary key,
g_name Varchar(50) Not Null,
g_fac Varchar(50) Not Null,
g_type Varchar(20) Not Null,
g_norms Varchar(20) Not Null,
);
CREATE TABLE storage
(sNo char(10) NOT NULL primary key,
sname varchar(50) NOT NULL,
) ;
CREATE TABLE reserve
(g_num char(10) NOT NULL,
sNo char(10) NOT NULL,
ramount int NOT NULL,
primary key(g_num,sNo),
foreign key (g_num) references goods(g_num),
foreign key (sNo) references storage(sNo) ,
);
CREATE TABLE Stocking
( s_num char(10) NOT NULL primary key,
g_num char(10) NOT NULL,
sNo char(10) NOT NULL,
foreign key (sNo) references storage(sNo),
samount Int NOT NULL,
sdate smalldatetime NOT NULL,
Supplier varchar(50) NOT NULL ,
) ;
CREATE TABLE outbound
(o_num char(10) NOT NULL primary key,
g_num char(10) NOT NULL ,
sNo char(10) NOT NULL,
foreign key (sNo) references storage(sNo),
oamount int NOT NULl ,
odate smalldatetime NOT NULL,
buyers varchar(50) NOT NULL ,
) ;
插入数据
insert
into goods
values ('100000','衣服','小心怕怕','aaa','a1');
insert
into goods
values ('100001','裤子','柚子美衣','bbb','a2');
insert
into goods
values ('100002','鞋子','美人记','ccc','a3');
insert
into goods
values ('100003','袜子','淘宝屋','ddd','a4');
insert
into goods
values ('100004','帽子','衣衣不舍','eee','a5');
insert
into storage
values ('00001','A');
insert
into storage
values ('00002','B');
insert
into reserve
values ('100000','00001','3');
insert
into reserve
values ('100000','00002','5');
insert
into reserve
values ('100001','00001','2');
insert
into reserve
values ('100001','00002','1');
insert
into reserve
values ('100002','00001','6');
insert
into reserve
values ('100002','00001','2');
insert
into reserve
values ('100003','00002','3');
insert
into reserve
values ('100003','00001','0');
insert
into reserve
values ('100004','00001','6');
insert
into reserve
values ('100004','00002','8');
insert
into stocking
values ('001','10000', '00002','50','2013-10-27','小林');
insert
into stocking
values ('002','10001','00002','50','2013-12-12','冰冰');
insert
into stocking
values ('003','10003','00001','50','2013-1-23','小王');
insert
into stocking
values ('004','10004','00001','50','2012-2-11','小王');
insert
into stocking
values ('005','10002','00001','50','2009-3-5','冰冰');
insert
into stocking
values ('006','10002','00002','50','2010-5-6','小林');
insert
into stocking
values ('007','10001','00001','50','2011-12-12','小王');
insert
into stocking
values ('008','10003','00002','50','2010-11-11','小王');
insert
into outbound
values ('11','10000','00001','10','2011-3-5','小王');
insert
into outbound
values ('12','10001','00002','20','2013-9-2','冰冰');
insert
into outbound
values ('13','10002','00001','15','2009-12-28','小王')
按商品名称查询商品的入库情况
按商品入库日期查询商品的入库情况
select s_num,r.g_num,r.sNo,samount,sdate,Supplier,ramount
From reserve as r,stocking
where sdate='2013-12-12 00:00:00' and r.g_num=stocking.g_num and r.sNo=stocking.sno;
按商品名称查询商品的出库情况
select o_num,r.g_num,r.sNo,oamount,g_name,odate,buyers,ramount
from reserve as r,outbound,goods
where g_name='帽子';
实现按年商品数量统计
select g_name,SUM(samount) Ssum
from Stocking,goods
where YEAR(sdate)=2009 and Stocking.g_num=goods.g_num
group by g_name
实现按月商品数量统计
select g_name,SUM(samount)Ssum
from Stocking,goods
where exists
(select*
where month (sdate)=1 and Stocking.g_num=goods.g_num and YEAR (sdate)=2009)
group by g_name;
