课程设计课程:数据库系统概论题目:仓库管理系统专业:计算机科学与技术班级:座号:姓名:2012年6月12日一、系统定义随着各个公司经营的范围慢慢扩大,业务流量比较大,需要处理的数据比较多,为了能对公司的业务进行有效的管理,减少手工操作的繁琐,同时可以根据公司业务的运营情况,分析出公司发展的潜在信息,顺应时代的发展变化,使管理更加简单化。
二、需求分析1、最终仓库管理系统功能如下:(1)资料管理功能人员信息:用于登记公司的员工信息资料、客户信息资料、和供应商信息资料,对员工信息资料支持员工信息的录入、修改和删除。
最高权限的管理员能录入和删除工作人员,普通权限的工作人员只能修改自己的密码产品信息:支持产品信息的录入、修改和删除,可以对各个产品进行查询。
(2)业务管理功能进出仓库明细:用于查看进货明细、进货退货、销售明细、销售退货、实现录入、修改和删除。
退货时,需要指定相应的退货单,可以查询进出仓库明细。
盘库:通过人工清点当前库存物品,与理论上仓库内物品数量对比,分析盘盈、盘亏问题(3)统计分析功能物品分析:用于对物品进行分析,主要是销售分析,包括对利润、进货、退货、库存等进行分析,可以通过报表显示。
人员分析:由于需求加大,需要各种职务的工作人员,分析职务需求,可供人才参考利润分析:对产品销售的利润进行分析,可以看出货物的供求关系(4)系统帮助功能:制作人员介绍使用帮助2、给出系统的逻辑模型:数据流程图、数据字典数据流图例子(可根据需要用多层数据流图表示):采购货物数据流图:数据字典:数据项:仓库:{仓库编号,仓库名,仓库类型,管理员,员工编号};供应商:{供应商编号,姓名,联系方式,地址};供应商供应的货物存入仓库数据结构:供应商提供货物,存入相应的仓库数据流:需求的货物进入相应的仓库数据存储:产品描述,应付款处理过程:需求货物->送订单号->订单处理->付款->货物入库管理数据流图:数据字典:数据项:员工:{员工编号,姓名,登录密码,性别,生日,联系方式,职称,家庭住址};货物:{货物编号,名称,类型,数量,单位,进价,售价,订单号};管理员管理仓库和资料库数据结构:管理员进行相关的操作,显示相应的信息,或存储相应的物品、资料数据流:操作信息,操作数据,相关信息表数据存储:查询时将数据信息显示出来,入出库数据进行存储处理等等处理过程:管理员操作->获得操作信息->实行相应的处理三、系统设计1、概念结构设计画出系统E-R图。
2、逻辑结构设计将E-R图(或其他概念设计图)转换为具体的DBMS对应的关系模式。
员工:{员工编号,姓名,登录密码,性别,生日,联系方式,职称,家庭住址};货物:{货物编号,名称,类型,单位,进价,售价};仓库:{仓库编号,仓库名,仓库类型,员工编号};供应商:{供应商编号,姓名,联系方式,地址};客户:{客户编号,货物编号,姓名,联系方式,地址,订单号};库存: {仓库编号,货物编号,数量 }进仓:{入单号,进仓时间,入库数量,所付金额 }出仓:{出单号,出仓时间,出库数量,所付金额 } 盘库:{盘库号,盘库时间,盘库数量 }数据库设计:员工表仓库表货物表供应商表客户表进仓表出仓表库存表序号字段名称数据类型大小可否为空主键说明1 cangku_no 可变字符10 否是仓库号2 material_no 可变字符10 否是货物编号3 qty 长整形否否数量盘库表序号字段名称数据类型大小可否为空主键说明1 panku_no 可变字符10 否否盘库号2 staff_no 可变字符10 否否员工编号3 panku_date 日期否否盘库日期4 material_no 可变字符10 否否货物编号5 panku_qty 长整形否否盘库数量3、系统功能模块图画出系统功能模块图,并对子模块功能进行详细说明。
四、详细设计主要的SQL语句--数据库的建立CREATE DATABASE ckglON PRIMARY( NAME='ckgl_data',FILENAME='f:\cg\ckgl_data.mdf',SIZE=5mb,FILEGROWTH=15%)LOG ON( NAME='ckgl_log',FILENAME='f:\cg\ckgl_log.ldf',SIZE=2mb,MAXSIZE=100mb,FILEGROWTH=1MB)GO--员工表create table staff(staff_no varchar(10) primary key,staff_password varchar(10) not null,staff_name varchar(10) not null,staff_sex char(2) not null,staff_birthday datetime,staff_phone char(15)not null,staff_rank char(10) not null,staff_family_address varchar(50),)go--货物表create table material(material_no varchar(10) primary key,material_name varchar(10)not null,material_type varchar(10) not null,material_in_price varchar(10)not null,material_out_price varchar(10)not null, material_unit char(4) not null,)go--仓库表create table cangku(cangku_no varchar(10) primary key,cangku_name varchar(10)not null,cangku_type varchar(10)not null,staff_no varchar(10) not null,foreign key(staff_no) references staff(staff_no),)Go--库存表create table cunhuo(cangku_no varchar(10),material_no varchar(10),qty bigint,primary key(cangku_no,material_no),foreign key(cangku_no) references cangku(cangku_no), foreign key(material_no) references material(material_no), )--供应商表create table supplier(supplier_no varchar(10),material_no varchar(10),supplier_name varchar(10)not null,supplier_phone char(15) not null,supplier_address varchar(50),primary key(supplier_no,material_no),foreign key(material_no) references material(material_no), )--进仓表create table material_in(rudan_no int not null,supplier_no varchar(10) not null,material_no varchar(10) not null,in_data datetime not null,ru_qty bigint not null,supp_pay bigint not null,staff_no varchar(10) not null,foreign key(supplier_no,material_no) references supplier(supplier_no,material_no),foreign key(staff_no) references staff(staff_no),)--客户表create table kehu(kehu_no varchar(10) primary key,kehu_name varchar(10)not null,kehu_password varchar(10)not null,kehu_phone char(15)not null,kehu_address varchar(50),)--出仓表create table material_out(chudan_no int not null,kehu_no varchar(10) not null,material_no varchar(10) not null,out_data datetime not null,chu_qty bigint not null,kehu_pay bigint not null,staff_no varchar(10) not null,foreign key(kehu_no) references kehu(kehu_no),foreign key(material_no) references material(material_no),foreign key(staff_no) references staff(staff_no),)--盘库表create table panku(panku_no varchar(10) not null,staff_no varchar(10) not null,panku_date datetime,material_no varchar(10)not null,panku_qty bigint,foreign key(material_no) references material(material_no),foreign key(staff_no) references staff(staff_no),)Go建立进出仓的存储过程入仓:create procedure material_in_pro@rudan_no int,@supplier_no varchar(10),@material_no varchar(10),@in_data datetime,@ru_qty bigint,@supp_pay bigint,@staff_no varchar(10),@out varchar(20)='0' outputasDECLARE @n1 intselect @n1=count(material_no) from materialwhere material_no=@material_noif (@n1=0)beginselect @out='此物料不存在,如果要进仓,请先登记新物料信息!!'returnendelsebegininsert into material_in values(@rudan_no,@supplier_no,@material_no,@in_data,@ru_qty,@supp_pay ,@staff_no)update cunhuo set qty=qty+@ru_qty where material_no=@material_noselect @out='操作成功!!'returnendgo出仓:create proc material_out_pro@chudan_no int,@kehu_no varchar(10),@material_no varchar(10),@out_data datetime,@chu_qty bigint,@kehu_pay bigint,@staff_no varchar(10),@out varchar(20)='0' outputasDECLARE @n1 intselect @n1=count(material_no) from materialwhere material_no=@material_noif (@n1=0)beginselect @out='此物料不存在!'returnendelsebeginif @chu_qty>(select qty from cunhuo where material_no=@material_no)beginselect @out='库存数量不足!!'returnendelsebegininsert into material_out values(@chudan_no,@kehu_no,@material_no,@out_data,@chu_qty,@kehu_pay, @staff_no)update cunhuo set qty=qty-@chu_qty where material_no=@material_noselect @out='操作成功!!'returnendend盘库:procedure TForm4.Button8Click(Sender: TObject);begin//insert into panku(panku_no,staff_no,panku_date,material_no,panku_qty)//select 1,1001,'2012-4-1',material_no,qty from cunhuo//将盘库结果插入到盘库表中with datamodule2.panku dobeginsql.clear;sql.add('insert into panku(panku_no,staff_no,panku_date,material_no,panku_qty)');sql.add('select'''+edit4.text+''','''+combobox11.text+''','''+datetostr(datetimepicker4.dateti me)+''',material_no,qty from cunhuo');close;execsql;showmessage('盘库成功!!');button8.enabled:=false;//一次登录不允许重复盘库,以免多占空间资源end;//显示本次盘库结果with datamodule2.panku1 dobeginsql.clear;sql.add('select * from panku,material where panku.material_no=material.material_no and panku_no = '''+edit4.text+'''');close;open;end;end;//盘库后盘库单号自动加1,便于下次盘库procedure TForm4.FormCreate(Sender: TObject);var max:integer;beginwith DataModule2.ADOQuery1 dobeginsql.Clear;sql.Add('select max(panku_no) as max from panku ');close;open;max:=DataModule2.ADOQuery1.fieldbyname('max').AsInteger;edit4.Text:=inttostr(max+1);end;End;主要模块的程序流程图。