1、 福 建 工 程 学 院 课程设计 课 程: 数据库应用课程设计 题 目: 仓库管理系统 专 业: 信息管理与信息系统 班 级: 座 号: 姓 名: 2012年 6 月 24 日 目录 一.系统定义 二.需求分许 (1)功能需求 (2)用户需求 三.数据流图 四、系统设计 1、概念结构设计 2、
2、逻辑结构设计 3、系统功能模块图 4、其它设计图形工具 五、详细设计 六、系统实现与测试 1、开发平台和工具选择 2、系统测试 七、课程设计总结 一、系统定义 具有一定规模的公司或商店都需要为自己公司或商店里的货物进行管理,仓库管理系统就是为了管理货物而开发的数据库软件。仓库管理系统是企业日常经营管理中十分重要的一个组成部分,它包括日常的销售出库、产品入库、盘点等业务。仓库管理系统帮助企业的仓库管理员对仓库物品的入库、出库、盘点等操作进行全面的控制和管理,达到提高仓库控制精度、降低仓库量,提高客户服务水平,保证生产经营活动顺利进行的目的。 二、需求分析
3、 (1)功能需求 该系统主要分为四大功能:、一般用户功能、管理员功能、信息安全功能还有报表功能。 1). 一般用户功能:查询库存信息、查询出库信息、查询入库信息、修改本用户密码。 2). 信息安全功能:人员权限区分、事件记录、数据警告、计划备份、即时备份、数据恢复; 3). 管理员功能:确认添加及修改产品入库信息、产品出库信息、库存信息,查询库存信息、盘点等功能。 (2)用户需求 根据用户需求,该系统应该实现以下功能: 1). 进、出库管理。对进、出库信息进行记录。 2).查询功能。仓库管理对查询要求高,通过主菜单记录当前操作用户的用户编号,保证了对进、出库信息录入负责
4、人的确认。 3). 由于计算机能存贮大量的数据,而且数据只要一次存入,便可多次重复使用,所以管理数据达到完整,统一,原始记录能保证及时,准确。 4). 许多重复性的工作,都可由计算机去执行,从而使管理人员从事务性工作解脱出来,真正变为从事一些信息的分析,判断,决策等创造性的工作。 5).还包括根据月份对出入库报表的打印。以及授权功能。 三.数据流图 1.数据流图 1)顶层数据流图: 出/入库信息处理 出库信息处理 订货单 库存信息处理 入库信息处理 仓库管理员 成品库仓库管理系统 仓库管理员 商家 2)第一层数据流图: 订货单 产品入库、出库、库存信息
5、 产品库存信息表 产品出库信息表 产品入库信息表 入库信息 出库信息 仓库管理员 1.产品入库信息管理 2.产品出库信息管理 3.产品库存信息管理 仓库管理员 商家 入库信息 出库信息 3)第二层数据流图: 产品入库信息管理细化: 入库单 不合格单据 合格的入库单 1.2 入库 产品入库信息表 1.3 调整单据 1.1 检验 仓库管理员 产品出库信息管理细化: 四、系统设计 1、概念结构设计 画出系统E-R图 1 n m n 仓库 管理 管理员 库存 产品 购买 商家 1 m 2、逻
6、辑结构设计 将E-R图(或其他概念设计图)转换为具体的DBMS对应的关系模式。 人员(人员编号,人员名称,住址,电话) 产品(产品编号,产品名称,产品数量,产品规格) 入库(入库编号,入库时间,入库数量) 出库(出库编号,出库时间,出库数量) 3、系统功能模块图 画出系统功能模块图,并对子模块功能进行详细说明。 仓库管理 管理员 职工 人员管理 物料管理 进仓管理 出仓管理 物料报表出入库报表 出入库查询 报表查询 4、其它设计图形工具 特别提示:允许用其他分析、设计工具。 在此补充在设计过程中采用的其它设计工具图形。 五、详细设计
7、主要的表。 一. 物料信息表 create database studb on primary ( name='studata', filename='d:\db\studat.mdf', size=3mb, filegrowth=3mb ) log on (name='stulog', filename='d:\db\stulog.ldf', size=1mb, maxsize=10mb, filegrowth=10% ) use studb go create table xg0301worker (pno char(5) pri
8、mary key, pname char(10), birth datetime, sex char(5), id char(20), home char(10), dizhi char(50), tele char(20), secret char(5), zhiwei char(10), quanxian char(25), beizhu char(20) ) 二. 员工信息表 use studb go create table xg0301wuliao (wno char(10) , rkbh char(6) primar
9、y key, wname char(15), guige char(20), danwei char(10), kucun int, beizhu char(20) ) 三. 入库信息表 use studb go create table xg0301ruku ( rkdh int , rkrq datetime, wno char(10), wname char(10), people char(10), shuliang int, beizhu char(20), primary key(wno) ) 四.
10、出库信息表 use studb go create table xg0301chuku ( ckdh int , ckrq datetime, wno char(10), wname char(10), people char(10), shuliang int, beizhu char(20), primary key(wno) ) 六、界面设计 一:登录界面: 分别设置了两个职位,管理员和职工。登入后界面不一样。登录代码如下: var auth_desc:string; begin with adoquery1 d
11、o begin close; sql.Clear; sql.Add('select quanxian from xg0301worker'); sql.Add('where pno='''+edit1.Text+''' and secret='''+edit2.Text+''''); open; auth_desc:=adoquery1.fieldbyname('quanxian').AsString; if adoquery1.RecordCount<=0 then begin sh
12、owmessage('输入的密码错误或者用户名不存在!!请重新输入!'); end else begin if strpos(pchar(auth_desc),'1')<>nil then xg0301_jiemian.N1.Enabled:=true else xg0301_jiemian.N1.Enabled:=false; if strpos(pchar(auth_desc),'2')<>nil then xg0301_jiemian.N2.Enabled:=true else xg0301_jiemian.
13、N2.Enabled:=false; if strpos(pchar(auth_desc),'3')<>nil then xg0301_jiemian.N3.Enabled:=true else xg0301_jiemian.N3.Enabled:=false; if strpos(pchar(auth_desc),'4')<>nil then xg0301_jiemian.N4.Enabled:=true else xg0301_jiemian.N4.Enabled:=false; if strpos(pchar(auth_desc
14、),'5')<>nil then xg0301_jiemian.N5.Enabled:=true else xg0301_jiemian.N5.Enabled:=false; if strpos(pchar(auth_desc),'6')<>nil then xg0301_jiemian.N6.Enabled:=true else xg0301_jiemian.N6.Enabled:=false; if strpos(pchar(auth_desc),'7')<>nil then xg0301_jiemian.N7.Enabled:=true else
15、xg0301_jiemian.N7.Enabled:=false; if strpos(pchar(auth_desc),'8')<>nil then xg0301_jiemian.N17.Enabled:=true else xg0301_jiemian.N17.Enabled:=false; if strpos(pchar(auth_desc),'a')<>nil then xg0301_jiemian.N11.Enabled:=true else xg0301_jiemian.N11.Enabled:=false; if str
16、pos(pchar(auth_desc),'b')<>nil then xg0301_jiemian.N16.Enabled:=true else xg0301_jiemian.N16.Enabled:=false; if strpos(pchar(auth_desc),'c')<>nil then xg0301_jiemian.N9.Enabled:=true else xg0301_jiemian.N9.Enabled:=false; if strpos(pchar(auth_desc),'d')<>nil then xg0301_jiemian.N
17、10.Enabled:=true else xg0301_jiemian.N10.Enabled:=false; if strpos(pchar(auth_desc),'e')<>nil then xg0301_jiemian.N14.Enabled:=true else xg0301_jiemian.N14.Enabled:=false; if strpos(pchar(auth_desc),'f')<>nil then xg0301_jiemian.N15.Enabled:=true else xg0301_jiemian.N15.Enabled:=
18、false; xg0301_root.Hide; xg0301_jiemian.Show; end; end; 二:主界面 当登录者为管理员时,主界面如下: 当登陆者为职工时,主界面如下: 三:人员管理界面 刷新人员代码; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('select * from xg0301worker'); adoquery1.open; 增加人员代码: if (combobo
19、x1.Text='')and (edit1.Text ='') and (edit2.Text='')and (edit4.Text='')and (edit5.Text='')and (edit6.Text='')and (edit7.Text='')then begin showmessage('请把信息添加完整!'); exit; end; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('insert into xg0301worker(pn
20、o,pname,birth,sex,id,home,dizhi,tele,beizhu) values('''+edit1.Text +''','''+edit2.Text+ ''','''+datetimetostr(date())+''','''+combobox1.Text +''','''+edit4.Text+ ''','''+edit5.Text+ ''','''+edit6.Text+ ''','''+edit7.Text+ ''','''+edit8.Text+ ''') '); adoquery1.execsql; showmessage('信息添加成功');
21、 删除人员代码: adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('delete xg0301worker where pno='''+edit1.Text +''''); adoquery1.execsql; showmessage('删除成功!'); 根据编号姓名查询人员代码: with ADOQuery1 do begin if radiogroup1.ItemIndex=0 then begin close; sql.Clear;
22、sql.add('select * from xg0301worker where pno='''+edit3.Text+''''); open; end else begin close; sql.Clear; sql.add('select * from xg0301worker where pname like '''+'%'+edit3.Text+'%'+''''); open; end; edit1.Text:=fieldbyname('pno').AsString; edit2.Text:=fie
23、ldbyname('pname').AsString; combobox1.Text:=fieldbyname('sex').AsString; datetimepicker1.DateTime:=fieldbyname('birth').AsDateTime; edit4.Text:=fieldbyname('id').AsString; edit5.Text:=fieldbyname('home').AsString; edit6.Text:=fieldbyname('dizhi').AsString; edit7.Text:=fieldbyname('
24、tele').AsString; 四:物料管理界面 刷新物料代码: adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('select * from xg0301wuliao'); adoquery1.open; 增加物料代码: if (combobox1.Text='')and (edit3.Text ='') and (edit2.Text='')and (edit4.Text='')and (edit5.Text='')and (edit6.Text='')and(edit1.Tex
25、t='')then begin showmessage('请把信息添加完整!'); exit; end; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('insert into xg0301wuliao(wno,rkbh,wname,guige,danwei,kucun,beizhu) values('''+combobox1.Text +''','''+edit1.Text +''','''+edit2.Text+ ''','''+edit3.T
26、ext +''','''+edit4.Text+ ''','''+edit5.Text+ ''','''+edit6.Text+ ''') '); adoquery1.execsql; showmessage('信息添加成功'); end; 删除物料代码: adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('delete xg0301wuliao where rkbh='''+edit1.Text +''''); adoquery1.execsql; showmessa
27、ge('删除成功!'); 五:入库界面 添加新单号代码: var i:integer; begin with ADOQuery1 do begin close; sql.clear; sql.add('select max(rkdh) dh from xg0301ruku'); open; end; i:=ADOQuery1.fieldbyname('dh').asinteger; edit1.Text:=inttostr
28、i+1); 添加新记录代码: begin if (edit1.Text ='') and (edit2.Text='')and (edit3.Text='')and (edit5.Text='')then begin showmessage('请把信息添加完整!'); exit; end; adoquery1.close; adoquery1.sql.clear; adoquery1.sql.add('insert into xg0301ruku(rkdh,wno,rkrq,wname,people,
29、shuliang,beizhu) values('''+edit1.Text +''','''+combobox2.Text+ ''','''+datetimetostr(date())+''','''+edit5.Text +''','''+combobox1.Text+ ''','''+edit2.Text+ ''','''+edit3.Text+ ''') '); adoquery1.execsql; showmessage('入库成功'); end; 六:出库界面 添加新单号代码: var i:integer; begin with
30、 ADOQuery1 do begin close; sql.clear; sql.add('select max(ckdh) dh from xg0301chuku'); open; end; i:=ADOQuery1.fieldbyname('dh').asinteger; edit1.Text:=inttostr(i+1); 添加新记录代码: var i,j:integer; begin with adoquery1 do
31、 begin close; sql.Clear; sql.Add('select kucun from xg0301wuliao'); sql.Add('select shuliang from xg0301chuku') ; open; end; i:=ADOQuery1.fieldbyname('kucun').asinteger; j:=strtoint(edit2.Text); if(j>i) then showmessage('出库数量超过库存数量,请重新确认!')
32、 else begin with adoquery1 do begin active:=true; close; SQL.Clear; sql.add('insert into xg0301chuku(ckdh,wno,ckrq,wname,people,shuliang,beizhu) values('''+edit1.Text +''','''+combobox2.Text+ ''','''+datetimetostr(date())+''','''+edit5.Text +''','''+combobox
33、1.Text+ ''','''+edit2.Text+ ''','''+edit3.Text+ ''') '); execsql; showmessage('出库成功'); end; end; end; procedure Txg0301_chuku.Button5Click(Sender: TObject); var i:integer; begin with ADOQuery1 do begin close; sql.clear; sql.add('s
34、elect max(ckdh) dh from xg0301chuku'); open; end; i:=ADOQuery1.fieldbyname('dh').asinteger; edit1.Text:=inttostr(i+1); 七:出入库查询界面 入库查询代码 with ADOQuery1 do begin if radiogroup1.ItemIndex=0 then begin close; sql.Clear; sql.add('select * from
35、 xg0301ruku where wno='''+combobox1.Text+''''); open; end else if radiogroup1.ItemIndex=1 then begin close; sql.Clear; sql.add('select * from xg0301ruku,xg0301wuliao where xg0301ruku.wname='''+combobox2.Text+''' and xg0301wuliao.wno=xg0301ruku.wno'); open; end
36、 else if radiogroup1.ItemIndex=2 then begin close; sql.Clear; sql.add('select * from xg0301ruku where rkrq>='''+formatdatetime('yyyy-mm-dd',datetimepicker1.DateTime)+''' and rkrq<='''+formatdatetime('yyyy-mm-dd',datetimepicker2.DateTime)+''''); open; end else begin
37、 close; sql.Clear; sql.add('select * from xg0301ruku'); open; end; 出库查询代码: with ADOQuery1 do begin if radiogroup1.ItemIndex=0 then begin close; sql.Clear; sql.add('select * from xg0301chuku where wno='''+combobox1.Text+''''); open; end else if
38、 radiogroup1.ItemIndex=1 then begin close; sql.Clear; sql.add('select * from xg0301chuku,xg0301wuliao where xg0301chuku.wname='''+combobox2.Text+''' and xg0301wuliao.wno=xg0301chuku.wno'); open; end else if radiogroup1.ItemIndex=2 then begin close; sql.Clear
39、 sql.add('select * from xg0301chuku where ckrq>='''+formatdatetime('yyyy-mm-dd',datetimepicker1.DateTime)+''' and ckrq<='''+formatdatetime('yyyy-mm-dd',datetimepicker2.DateTime)+''''); open; 八:物料统计界面 物料进出仓统计代码: with ADOQuery1 do begin close; sql.Clear; sql.add('select wname,wno
40、sum(shuliang) count1'); sql.Add('from xg0301ruku'); //sql.Add('where xg0301wuliao.wno=xg0301ruku.wno' ); sql.add('where rkrq>='''+formatdatetime('yyyy-mm-dd',datetimepicker1.DateTime)+''' and rkrq<='''+formatdatetime('yyyy-mm-dd',datetimepicker2.DateTime)+''''); sql.add('group by wname,wno');
41、open; with ADOQuery2 do begin close; sql.Clear; sql.add('select wname,wno,sum(shuliang) count1'); sql.Add('from xg0301chuku'); //sql.Add('where xg0301chuku.wno=xg0301wuliao.wno'); sql.add('where ckrq>='''+formatdatetime('yyyy-mm-dd',datetimepicker1.DateTime)+''' and ckrq<='''+formatdatetim
42、e('yyyy-mm-dd',datetimepicker2.DateTime)+''''); sql.add('group by wname,wno'); open; 九:根据月份打印入库表界面 打印代码: with ADOQuery1 do begin close; sql.Clear; sql.Add('select * from xg0301ruku where rkrq like '''+'%'+edit1.Text+'%'+''''); open; 十:根据月份打印出库表界面 打印代码: with ADOQuery1
43、do begin close; sql.Clear; sql.Add('select * from xg0301chuku where ckrq like '''+'%'+edit1.Text+'%'+''''); open; 十一:授权进入界面 授权代码: var auth_desc:string; begin with adoquery1 do begin close; sql.Clear; sql.Add('select * from xg0301worker'); sql.Add('
44、where pno='''+combobox1.Text+''' and pname='''+edit1.Text+''''); open; end; if adoquery1.RecordCount-1>=0 then begin xg0301quanxian.Label1.Caption:='员工'+adoquery1.Fields[0].AsString+'权限设置'; auth_desc:=adoquery1.Fields[10].AsString; if strpos(pchar(auth_desc),'1')<>n
45、il then xg0301_qxxz.CheckBox1.Checked:=true else begin xg0301_qxxz.CheckBox1.Checked:=false end; if strpos(pchar(auth_desc),'2')<>nil then xg0301_qxxz.CheckBox2.Checked:=true else begin x
46、g0301_qxxz.CheckBox2.Checked:=false end; if strpos(pchar(auth_desc),'3')<>nil then xg0301_qxxz.CheckBox3.Checked:=true else begin xg0301_qxxz.CheckBox3.Checked:=false end; if strpos(pchar(auth_desc),'4')<>nil then
47、 xg0301_qxxz.CheckBox5.Checked:=true else begin xg0301_qxxz.CheckBox5.Checked:=false end; if strpos(pchar(auth_desc),'6')<>nil then xg0301_qxxz.CheckBox11.Checked:=true else begin xg0301_qxxz.Che
48、ckBox4.Checked:=false; xg0301_qxxz.CheckBox6.Checked:=false; end; if strpos(pchar(auth_desc),'7')<>nil then xg0301_qxxz.CheckBox6.Checked:=true else begin xg0301_qxxz.CheckBox8.Checked:=false; xg0301_qxxz.checkb
49、ox10.Enabled:=false; xg0301_qxxz.checkbox9.Enabled:=false; xg0301_qxxz.checkbox7.Enabled:=false; xg0301_qxxz.checkbox12.Enabled:=false; end; if strpos(pchar(auth_desc),'8')<>nil then xg0301_qxxz.CheckBox13.Checked:=true else xg0301_qxxz.Chec
50、kBox13.Checked:=false; if strpos(pchar(auth_desc),'1')<>nil then xg0301_qxxz.CheckBox1.Checked:=true else xg0301_qxxz.CheckBox1.Checked:=false; if strpos(pchar(auth_desc),'2')<>nil then xg0301_qxxz.CheckBox2.Checked:=true else xg0301_qxxz.CheckBox2.Checked:=false; if st






