软件工程课程设计.docx
《软件工程课程设计.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计.docx(55页珍藏版)》请在冰豆网上搜索。
软件工程课程设计
t
华科学院计算机科学与技术专业
《软件工程课程设计》报告
——办公用品管理系统
(2010/2012学年第一学期)
学生姓名:
许世华
学生班级:
计算机082201H
学生学号:
200822030107
指导教师:
赵淑芳
2011年12月26日
第一章系统概述
办公用品管理系统是为各个企、事业单位做铺设计服务的,是企、事业不可或缺的一个软件。
本系统具有界面清晰、操作简易、存储数据安全性高等特点,考虑到人们的一些操作习惯,提高了其的可操作性,完全能够满足你的需求。
这是一款针对中小企业设计的程序。
有了它,您可以轻松管理您的数据库,方便的进行用品管理,灵活的搜索和查询功能使您完全摆脱传统管理模式下经营者面对庞大的办公用品,不知道有哪些用品,缺哪些物品,数量有多少。
随着科学技术的不断提高,计算机科学的日渐成熟,计算机的强大功能已被人们深刻地认识,它已经和现代社会的发展隔离不开了。
越来越多的人用计算机来处理日常事务,使计算机的应用得到普及,这样就创造出以计算机为基础的一系列生活方式。
不仅如此,计算机还被广泛的应用到商业上,越来越多的人们意识到计算机给自己带来的方便以及他所创造的巨大财富。
人们开始把计算机应用到现代的各个领域中,可以不客气地说,现代社会是一个计算机时代,如果没有计算机的应用,我们的发展就不会如此之快!
现如今,每个企业经营者,都在利用规范的管理流程来提高企业的效益。
可这一切仅靠人是很难及时准确地完成包括统计在内的工作。
针对这些企业办公用品管理存在的缺陷,我开发了这个办公用品管理系统,目的是要做到科学化、自动化、系统化、规范化,用电脑管理来替代原来以手工、简单、繁琐的办公用品管理,为广大企、事业单位提高管理效益助一臂之力。
办公用品管理系统将成为每个企、事业的小当家,在理清家务的同时,减少浪费,花出该花的,省下可省的弥补企业管理上的漏洞,提高管理员的工作效率,为公司带来经济效益。
第二章需求分析
2.1系统需求分析
需求分析是对用户需求的真正明确,是对要解决的问题的彻底理解。
需求分析也是一个建模的过程,与在概要设计中建模不同在需求分析中建模是面向用户的过程。
这个阶段的任务仍然不是具体地解决问题,而是准确地确定目标系统必须做什么,主要是确定目标系统必须具备哪些功能。
2.1.1理解需求
本系统的实现为管理人员提供办公用品的库存、采购、库存报警、以及库存、采购、领用查询统计等功能,以实现办公室办公用品管理的系统化、规范化、网络化、自动化。
2.1.2分析需求
为了实现系统以上功能我对该系统做出如下功能需求分析:
1.管理员对各种基本信息的录入
包括对用户信息、用户权限信息、供应商信息、计量单位信息、部门信息、员工信息、库位信息、库存上下限等信息的录入,这些信息是这个系统运行的基础数据。
2.用户登陆
为使系统中数据不被不是本企业的人员访问,需对用户进行合法性验证。
3.用户管理
由于企业人员变动大,需要时常对用户进行增加、删除、修改用户信息。
4.入库管理
即是对入库信息进行管理、存储。
5.领用管理
即是对领用信息进行管理、存储。
6.库存统计
即是随时对所有办公用品数量进行统计。
7.库存报警
当库存超过库存上限或者低于库存下限则产生库存报警信息
8.用品类别维护
对办公室的办公用品种类进行管理
2.2数据流图
数据流图是SA方法中用于表示系统逻辑模型的一种工具。
它以图形的方式描述数据在系统中流动和处理的过程,它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
数据流图有四种基本图形符号:
“→”箭头表示数据流;“○”圆或椭圆表述加工;“=”双杠表示数据存储;方框表示数据的源点或终点。
[6]为实现本系统设计的所有数据流图如下图2-1所示
图2.1系统数据流图
2.3数据字典
数据字典是描述数据流图中数据的信息的集合。
它对数据流图上每一个成分:
数据项、文件(数据结构)、数据流、数据存储、加工和外部项等给以定义和说明;它主要由数据流描述、加工描述和文件描述三部分组成。
从上面数据流图可知,本系统包含以下数据流、数据存储、数据加工。
1、数据流
2、数据存储
数据存储名称:
用户信息
别名:
无
简述:
对各部门使用系统的人员进行存储管理。
组成:
用户名+密码
组织方式:
索引文件,用户名为关键字
查询要求:
要求能立即查询
数据存储名称:
权限信息
别名:
无
简述:
对用户权限信息进行存储管理。
组成:
用户名+权限
组织方式:
索引文件,用户名为关键字
查询要求:
要求能立即查询
数据存储名称:
员工信息
别名:
无
简述:
对各部门员工基本信息进行存储管理。
组成:
员工编号+姓名+所属部门+电话
组织方式:
索引文件,员工编号为关键字
查询要求:
要求能立即查询
数据存储名称:
部门信息
别名:
无
简述:
对部门信息进行存储管理。
组成:
部门编号+名称+负责人+部门办公室电话
组织方式:
索引文件,部门编号为关键字
查询要求:
要求能立即查询
数据存储名称:
供应商信息
别名:
无
简述:
对供应商信息进行存储管理
组成:
供应商名称+负责人+电话+详细地址
组织方式:
索引文件,供应商名称为关键字
查询要求:
要求能立即查询
数据存储名称:
计量单位信息
别名:
无
简述:
对计量单位信息进行存储管理。
组成:
办公用品名称+计量单位
组织方式:
索引文件,以办公用品名称为关键字
查询要求:
要求能立即查询
数据存储名称:
库位信息
别名:
无
简述:
对仓库库位信息进行存储管理。
组成:
库位编号+仓库号+位号+库位描述
组织方式:
索引文件,以库位编号为关键字
查询要求:
要求能立即查询
数据存储名称:
库存上下限信息
别名:
无
简述:
对库存上下限信息进行存储。
组成:
用品类别编号+上限+下限
组织方式:
索引文件,以为用品类别编号关键字
查询要求:
要求能立即查询
数据存储名称:
办公用品类别信息
别名:
无
简述:
对所有办公用品类别信息进行存储。
组成:
办公用品类别编号+名称+规格+供应商
组织方式:
索引文件,以办公用品类别编号为关键字
查询要求:
要求能立即查询
数据存储名称:
办公用品价格信息
别名:
无
简述:
对所有办公用品价格数据进行存储。
组成:
办公用品类别编号+价格+生效日期+失效日期
组织方式:
索引文件,以办公用品类别编号为关键字
查询要求:
要求能立即查询
数据存储名称:
入库信息
别名:
无
简述:
对入库信息进行存储。
组成:
入库单编号+用品类别编号+计量单位+数量+入库日期+库位编号
组织方式:
索引文件,以入库单编号,用品类别编号为关键字
查询要求:
要求能立即查询
数据存储名称:
领用出库信息
别名:
无
简述:
对所有领用出库信息数据进行存储。
组成:
商品编码+商品名称+规格+计量单位+库存上限+库存下限
组织方式:
索引文件,以商品编码为关键字
查询要求:
要求能立即查询
数据存储名称:
采购信息
别名:
无
简述:
将采购信息进行存储。
组成:
采购表单号+用品类别编号+采购单价+采购数量+采购费用+采购员+
采购日期
组织方式:
索引文件,以采购表单号,用品类别编号为关键字
查询要求:
要求能立即查询
数据存储名称:
库存统计信息
别名:
无
简述:
对所有库存统计信息进行存储。
组成:
办公用品类别编号+数量+计量单位+统计日期
组织方式:
索引文件,办公用品类别编号,统计日期为关键字
查询要求:
要求能立即查询
数据存储名称:
库存报警信息
别名:
无
简述:
对所有库存报警信息进行存储。
组成:
报警信息编号+办公用品类别编号+报警信息+报警日期
组织方式:
索引文件,报警信息编号,办公用品类别编号为关键字
查询要求:
要求能立即查询
2.4系统E-R图
通过对本系统的分析主要包含以下实体
图2.2供应商实体
图2.3用户实体
图2.4库存办公用品实体
图2.5入库办公用品实体
图2.6领用办公用品实体
第三章总体设计
3.1系统的主要功能
1、仓库各种信息的输入,包括入库,借出,归还,需求信息的输入等
2、办公用品管理系统的各种信息查询,修改和维护
3、在库存管理中加入最高储备和最低储备字段,对仓库的设备实现监控和报警
4、对仓库用品的进货管理,对需求人员的用品需求管理
5、操作日志的管理
6、仓库用品管理系统的使用帮助
3.2系统结构图及系统流程图
图3.1系统机构图
图3.2系统流程图
第四章详细设计
4.1数据库设计
数据库结构设计是总体设计阶段非常重要的环节,好的数据库结构可以简化开发过程,使系统功能更加清晰明确。
因为数据库结构的变化会造成编码的改动,所以必须认真设计数据结构后再进行编码,从而避免无谓的重复工作。
本系统数据库文件为“Office.mdb”,数据库中包含8个表,部门信息表Department、分类信息表Types、供应商信息表Supplier、库存信息表Store、入库信息表StoreIn、领用信息表Draw、领用信息明细表DrawList、用户信息表Users
1.部门信息表Department
表Department用来保存部门信息信息,结构如下:
Department
DepId
DepName
1
技术中心
2
销售中心
3
办公室
4
人力资源部
2.分类信息表Types
表Types用来保存办公用品分类信息
Types
TypeId
TypeName
UpperId
1
公文包
0
2
签字笔
0
3
打印纸
0
4
A4纸
3
5
A3纸
3
6
帕克签字笔
2
7
软牛皮包
1
8
计算器
0
9
胶水
0
10
大胶水
9
11
剪刀
0
12
日历
0
14
小规格
12
15
中规格
12
16
普通签字笔
2
3.供应商信息表Supplier
表Supplier用来保存办公用品的供应商信息,结构:
Supplier
SId
SName
Tel
Address
Contact
Memos
1
北京七七贸易公司
3333
亮马河
往昔
2
宁夏网和技术公司
55555
宁夏
王明
4.库存信息表Store
表Store用来保存办公用品的库存信息,结构:
Store
OId
OName
OStyle
TypeId
OAmount
OMin
Memos
1
999
kkk
7
99
20
2
帕克签字笔
B1
6
9
5
3
dayinzhi
A4
4
30
10
5.入库信息表StoreIn
表StoreIn用来保存办公用品的入库信息
StoreIn
InId
OId
InDate
SId
InAmount
InSum
Memos
Flag
1
1
2005-3-4
1
10
200
1
2
2
2005-4-4
1
8
30
30
1
3
2
2006-3-2
1
20
200
1
4
1
2006-3-7
2
80
900
1
5
1
2006-3-9
2
6
60
df
1
6
2
2006-3-7
2
1
2
1
6.领用信息表Draw
表Draw用来保存办公用品的领用信息,结构
Draw
Id
CreateDate
DepId
Flag
1
2005-12-27
1
1
3
2006-2-3
2
1
4
2006-3-7
3
1
7.领用信息明细表DrawList
表DrawList用来保存家庭成员信息,结构
DrawList
Id
DId
OId
OAmount
2
1
1
1
3
1
2
1
5
3
2
2
6
4
1
2
7
3
1
3
8.用户信息表Users
表Users用来保存系统用户信息,结构
Users
UserName
UsePwd
Admin
111111
Users
111111
4.2入库管理模块
入库管理模块就是对入库信息进行管理、存储。
在入库时
IF入库单中要入库办公用品的数量<=库存上限-当前库存THEN
可入库的数量为入库单要入库办公用品的数量
ELSE
可入库数量为库存上限-当前库存
ENDIF
其流程图如下图4.1所示
图4.1入库流程图
4.3领用出库管理
领用出库管理模块就是对领用信息进行管理、存储。
在出库时
IF领用清单中要领用办公用品的数量<=当前库存-库存下限THEN
可领用的数量为领用清单中要领用办公用品的数量
ELSE
可领用的数量为当前库存-库存下限
ENDIF
其流程图如下图4.2所示
图4.2领用出库流程图
4.4库存报警的详细设计
库存报警模块实现当办公用品库存超过库存上限或者低于库存下限产生报警信息。
也即是:
IF当前库存<库存下限THEN
产生“当前库存低于库存下限”
ENDIF
IF当前库存>库存上限THEN
产生“当前库存已经超过库存上限”
ENDIF
其流程图如下图4.3所示
图4.3库存报警流程图
第五章编码实现
办公用品管理系统是一个数据库应用程序,由启动窗体、登录模块、系统主界面、基本信息管理模块、办公用品信息管理模块、数据统计管理模块等组成,具体的功能模块如下:
5.1基本信息管理模块设计:
5.1.1分类管理模块
分类信息管理窗体的名称为Frmtypeman,窗体布局如图所示
可以看到,分类信息可以分为一级分类和二级分类两种,每个二级分类必须有对应的一级分类作为其上级分类。
窗体主要代码如下:
PublicOriT1NameAsString
PublicOriT2NameAsString
PrivateSubCmd_Add_Click()
IfLen(Trim(txtName))=0Then
MsgBox"请输入分类名称"
txtName.SetFocus
ExitSub
EndIf
'判断当前选择按钮值
IfOption1.Item(0).Value=TrueThen'选择一级分类
'判断一级分类名称是否已存在
IfMyType.In_DB(Trim(txtName))Then
MsgBox"分类名称已存在"
ExitSub
Else
MyType.TypeName=Trim(txtName)
MyType.UpperId=0
MyType.Insert
MsgBox"添加成功"
LoadTypes
txtName=""
EndIf
Else'选择二级分类
'首先判断是否选择了一级分类名称
IfDataList1.SelectedItem>0Then
'判断二级分类名称是否已存在
IfMyType.In_DB(Trim(txtName))Then
MsgBox"分类名称已存在"
ExitSub
Else
MyType.TypeName=Trim(txtName)
MyType.UpperId=DataList1.BoundText()
MyType.Insert
MsgBox"添加成功"
LoadTypes
SetDataList2.RowSource=Nothing
DataList1.Enabled=True
DataList2.Enabled=False
txtName=""
Option1.Item(0).Value=True
Option1.Item
(1).Value=False
EndIf
Else
MsgBox"请选择上级分类"
ExitSub
EndIf
EndIf
EndSub
PrivateSubCmd_Back_Click()
UnloadMe
EndSub
PrivateSubCmd_Del_Click()
'判断当前选择按钮值
IfOption1.Item(0).Value=TrueThen'选择一级分类
'判断是否选择了一级分类
IfDataList1.SelectedItem>0Then
'如果此一级分类存在下级分类,则不允许删除
IfMyType.HaveSon(DataList1.BoundText())Then
MsgBox"存在二级分类,不能删除"
ExitSub
Else
MyType.Delete(DataList1.BoundText())
MsgBox"删除成功"
LoadTypes
txtName=""
EndIf
Else
MsgBox"请选择一级分类"
ExitSub
EndIf
Else
'判断是否选择了二级分类
IfDataList2.SelectedItem>0Then
'判断办公用品表中是否已经使用了此分类编号
IfMyStore.HaveTId(DataList2.BoundText())Then
MsgBox"办公用品表中存在此分类,不能删除"
ExitSub
Else
MyType.Delete(DataList2.BoundText())
MsgBox"删除成功"
LoadTypes
SetDataList2.RowSource=Nothing
DataList1.Enabled=True
DataList2.Enabled=False
txtName=""
Option1.Item(0).Value=True
Option1.Item
(1).Value=False
EndIf
Else
MsgBox"请选择二级分类"
ExitSub
EndIf
EndIf
EndSub
PrivateSubCmd_Modi_Click()
IfLen(Trim(txtName))=0Then
MsgBox"请输入分类名称"
txtName.SetFocus
ExitSub
EndIf
'判断当前选择按钮值
IfOption1.Item(0).Value=TrueThen'选择一级分类
'判断是否选择了一级分类
IfDataList1.SelectedItem<1Then
MsgBox"请选择一级分类"
ExitSub
EndIf
'判断是否修改了一级分类名称
IfTrim(txtName)<>Trim(OriT1Name)Then
'判断新的一级分类名称是否存在
IfMyType.In_DB(Trim(txtName))Then
MsgBox"分类名称已存在"
ExitSub
Else
MyType.TypeName=Trim(txtName)
MyType.Update(DataList1.BoundText())
MsgBox"修改成功"
LoadTypes
txtName=""
EndIf
EndIf
Else'选择二级分类
'首先判断是否选择了二级分类名称
IfDataList2.SelectedItem>0Then
'判断是否修改了一级分类名称
IfTrim(txtName)=Trim(OriT2Name)Then
ExitSub
EndIf
'判断新的二级分类名称是否存在
IfMyType.In_DB(Trim(txtName))Then
MsgBox"分类名称已存在"
ExitSub
Else
MyType.TypeName=Trim(txtName)
MyType.Update(DataList2.BoundText())
MsgBox"修改成功"
LoadTypes
SetDataList2.RowSource=Nothing
DataList1.Enabled=True
DataList2.Enabled=False
txtName=""
Option1.Item(0).Value=True
Option1.Item
(1).Value=False
EndIf
Else
MsgBox"请选择二级分类"
ExitSub
EndIf
EndIf
EndSub
PrivateSubDataList1_Click()
'当选择一级分类名称时,将分类编号和名称赋给变量,同时将二级分类变量置为空,并装入二级分类名称
IfDataList1.SelectedItem>0Then
OriT1Name=Trim(DataList1.Text)
txtName=OriT1Name
LoadTypes2
EndIf
EndSub
PrivateSubDataList2_Click()
IfDataList2.SelectedItem>0Then
OriT2Name=Trim(DataList2.Text)
txtName=OriT2Name
EndIf
EndSub
PrivateSubForm_Load()
LoadTypes
DataList2.Enabled=False
EndSub
'装入一级分类名称
PrivateSubLoadTypes()
Adodc1.ConnectionString=Conn
Adodc1.RecordSource="Select*FromTypesWhereUpperId=0OrderByTypeId"
Adodc1.Refresh
SetDataList1.RowSource=Adodc1
DataList1.ListField="TypeName"
DataList1.BoundColumn="TypeId"
EndSub
'根据一级分类编号装入二级分类名称