4.2数据库设计数据库的结构设计是一个非常重要的问题,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响,好的数据库结构设计会减少数据库的存储量,数据的完整性和一致性比较高,系统具有较快的响应速度。在数据库系统开发设计的时候应该尽量考虑全面,尤其应该仔细考虑用户的各种需求,避免在设计中浪费不必要的人力和物力。4.2.1数据库需求分析数据库需求分析是数据库结构设计的第一阶段,是非常重要的一个阶段。在这个阶段主要是手机基本数据、数据结构以及确定数据处理的流程,为以后进一步设计打下基础。在仔细调查企业仓库物资设备管理过程的基础上,我们得到本系统所处理的数据流程,如图4-2所示。仓库现有库存各部门需求企业总体生产计划汇总处理设备采购设备出库设备入库设备还库图4-2数据流程图针对本实例,通过对企业仓库管理的内容和流程分析,设计的数据项和数据结构如下。设备代码信息包括的数据项有设备号、设备名称现有库存信息包括的数据项有现有设备、现有数目、总数目、最大库存、最小库存等。设备入库信息包括的数据项有设备号、入库时间、供应商、供应商电话、入库数量、价格、采购员等。设备出库信息包括的数据项有设备号、使用部门、出库时间、出库状况、经手人、出库数量、领取人、用途等。设备采购信息包括的数据项有采购的设备、采购员、供应商、采购数目、采购时间等。设备归还信息包括的数据项有归还设备、归还部门、归还数目、归还时间、经手人等。设备需求信息包括的数据项有需求的部门、需求设备、需求数目、需求时间等。日志信息包括操作员、操作人员、操作内容。有了上面的数据结构、数据项和数据流程,就能进行下面的数据库设计。4.2.2数据库概念结构设计这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。本实例根据上面的设计规划出的实体有库存实体、入库实体、出库实体、采购实体、还库实体、需求实体。实体和实体之间的关系E-R图如图4-3~4-8所示。现有库存设备号现有库存警戒库存总数图4-3库存实体E-R图入库设备号供应商信息采购价格信息采购员图4-4入库实体E-R图出库设备号使用部门数量时间经手人图4-5出库实体E-R图计划采购设备号库存信息供应信息时间图4-6设备采购实体E-R图设备还库设备号还库时间人还库数量经手人图4-7还库实体E-R图部门需求设备号需求部门需求数量需求时间图4-8部门需求实体E-R图实体和实体之间的关系图如图4-9所示。入库现有库存出库还库部门需求设备采购图4-9实体关系图4.2.3数据库逻辑结构设计需要将上面的数据库概念结构转化为VisualFoxPro60.数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。在上面的实体以及实体之间关系的基础上,形成数据库中表以及各个表之间的关系。仓库管理系统数据库中各个表的设计结果如下面的几个表格所示,每个表格表示在数据库中的一个表。表4-1为设备代码表表4-1列名数据类型可否为空设备号(主键)数值型(20)不能为空设备名称字符型(50)可为空表4-2为设备入库表表4-2列名数据类型可否为空设备号数值型(20)不能为空入库时间(主键)日期型(8)可为空供应商字符型(50)可为空供应商电话字符型(15)可为空入库数量数值型(20)可为空价格字符型(10)可为空采购员字符型(20)可为空表4-3为设备出库表表4-3列名数据类型可否为空设备号数值型(20)不能为空出库时间(主键)日期型(8)可为空使用部门字符型(50)可为空出库状况数值型(20)可为空经手人字符型(20)可为空出库数量数值型(10)不能为空领取人字符型(50)可为空用途字符型(50)可为空表4-4为现有库存表表4-4列名数据类型可否为空设备号(主键)数值型(20)不能为空现有库存数值型(20)可为空最大库存数值型(20)可为空最小库存数值型(20)可为空总数数值型(20)可为空表4-5为部门需求表表4-5列名数据类型可否为空设备号(主键)数值型(20)不能为空部门名称字符型(20)不能为空需要数量数值型(20)可为空需求开始时间日期型(8)可为空需求结束时间日期型(8)可为空表4-6为设备还库表表4-6列名数据类型可否为空设备号(主键)数值型(20)不能为空还库时间日期型(8)不能为空仓库管理员数值型(20)可为空归还数量数值型(20)可为空归还人字符型(10)可为空表4-7为操作日志表表4-7列名数据类型可否为空操作员字符型(50)不能为空操作内容字符型(50)不能为空操作时间日期型(8)可为空表4-8为设备采购计划表表4-8列名数据类型可否为空设备号数值型(20)不能为空现有库存数值型(20)可为空总库存数值型(20)可为空最大库存数值型(20)可为空购买数量数值型(20)可为空供应商字符型(20)不能为空价格字符型(10)可为空计划采购时间(主键)日期型(8)可为空4.3数据库结构的实现在需求分析、概念结构设计的基础上得到数据库的逻辑结构之后,我们就可以在VisualFoxPro60.数据库系统中实现该逻辑结构。图4-10新建数据库打开如图4-10所示的“仓库管理”项目后,在项目管理器中展开数据文件夹,用鼠标选中数据库,单击右侧的“新建”按钮,在弹出的对话框中将该数据库文件储存为C:\仓库管理\仓库管理.dbc。在弹出的如图4-11所示的数据库设计器中单击鼠标右键,选择“新建表”,为数据库添加数据表(表的内容如表4-1至表4-8所示)。下面以表4-1为例来介绍表的建立过程。选择“新建表”,在弹出的对话框中将表存储为C:\仓库管理\设备代码.dbf。在弹出的如图4-12所示的表设计器中填写表的内容。请读者将其与表4-1比较,可以发现表的字段名就是列名。由于在以后编写的程序中对数据库数据的操作通常是应用表的字段,因此读者在设计字段名时要挑选容易理解的名称。字段设置完成后,单击“确定”按钮后为表输入数据,如不想现在输入,可以先“取消”,以后再输入。具体方法如下:图4-13为表输入数据(1)如图4-13所示,选中要输入的数据的表,单击“浏览”按钮。(2)此时弹出的无数据的表,在VisualFoxPro的主窗口中选择“表”,选择“追加薪记录”后,就可以在表中输入数据了,如图4-14所示。不过这种方法只能一次输入一条记录,要输入第二条记录时,需要再次追加新记录。如果有一个已有的数据的表,可以使用“使用追加记录”将这个有数据的表追加到当前表中,不过执行那个该操作要求这两个表的结构完全相同。4.4各个功能模块的创建按照前面的分析,我们将管理系统的逻辑模块统一到6个实际功能模块中,如图4-15所示。切换面板用于切换不同的操作,每项具体操作结束后,都会返回到切换面板。下面对各模块的作用进行说明:设备入库模块添加设备到库存中。设备出库模块将设备从库从中取出并记录。设备还原模块将归还待库存的设备保存到数据库。设备需求模块记录各部门的设备要求。设备采购模块记录要采购的设备。切换面板用于切换到不同的操作,如设备入库、设备出库等。显示报表显示库存过多、库存不足等信息。下面就按照功能模块图来设计该仓库管理系统。首先在VisualFoxPro6.0中建立一个项目管理器,以便管理本系统中所有数据,命名为仓库管理。一下操作均在该项目管理器中进行。以下所有表单的“Desktop”属性全部为“.T.-真”。4.4.1功能选择界面的设计这一模块的主要功能是作为系统主界面为进入本系统不同功能界面选择提供一个接口,使用一个窗口来实现这一功能。首先建立一个表单,设其“Caption”属性分别为“仓库管理”。在该表单上添加6个“按钮”控件,它们的“Caption”属性分别为“设备入库”、“设备出库”、“设备还库”、“部门需求”、“设备采购”和“显示报表”。然后在表单上添加“图像”控件,并设其“Stretch”属性为“2-Stretch(扩展)”,“Picture”属性为图片所在位置,本例中为“C:\仓库管理\001.jpg”。在“command1”(“Caption”属性为“设备入库”)控件的“Click”事件中添加如下代码:doform设备入库表thisform.release在“command2”(“Caption”属性为“设备出库”)控件的“Click”事件中添加如下代码:doform设备出库表thisform.release在“command3”(“Caption”属性为“设备还库”)控件的“Click”事件中添加如下代码:doform设备还库表thisform.release在“command4”(“Caption”属性为“部门需求”)控件的“Click”事件中添加如下代码:doform部门需求表thisform.release在“command5”(“Caption”属性为“设备采购”)控件的“Click”事件中添加如下代码:doform设备采购表thisform.release在“command6”(“Caption”属性为“显示报表”)控件的“Click”事件中添加如下代码:doform显示报表thisform.release在“form1”的属性里选择“autocenter”设置为“.T.-真”,同时将“backcolor”设置为“255,255,255”,“windowstate”设置为“0-普通”。添加“form1”的“Init”事件的代码如下:setdirectorytoc:\仓库管理\*将程序的默认的路径指向资源所在的文件夹该表单设计结果如图4-16所示:4.4.2设备入库模块的设计在设备入库模块中将实现设备数据的添加和入库等功能。在前面的几章的例子中已经详细介绍了关于如何制定具有标准查询并修改功能的表单,其实VisualFoxPro6.0本身也具有生成具有上述功能表单的功能。下面就介绍如何通过表单导向完成设备入库表单的设计。首先在项目管理器的文档视图下单击“新建”按钮,如图4-17所示。然后选择“表单导向”,如图4-18、图4-19所示。图4-18图4-19在接下来的向导中,“数据库和表”选择“仓库管理”以及“设备入库表”,这是前面定义好的数据库和表。由于设备入库需要显示所有的字段,因此我们将可用字段全部移至选定字段,如图所示,单击“下一步”按钮,在表单样式中,选择“阴影式”以及“图片按钮”,如图所示。左上角的窗口提供了表单样式的预览功能,图片按钮和文本按钮的区别在于显示的时候是以图片来表达功能还是文字来表达,实现功能的函数没有区别。选择“上一步”按钮可以跳回上一个界面对表单中显示的字段进行修改。单击“下一步”按钮后,向导进行到“步骤3-排序次序”,如图所示,选择“设备号”为索引,并选择升序排列。最后预览表单,核对每项的设置,完成表单向导,如图4-23所示。值得注意的是,在结束表单向导前,可选择“保存表单以备将来使用”,“保存并运行表单”,或者“保存表单并用表单设计器修改表单”。由于VisualFoxPro6.0向导生成的表单只具有普遍性,对于当前设计的仓库管理系统还需要一定的改变,因此以我们选择“保存表单并用表设计器修改表单”。单击“完成”按钮系统提示保存表单,将表单保存为“设备入库表.scx”,存于C:\仓库管理目录下。然后打开表单修改器生成的表单,如图所示。在修改BUTTONSET时,可以通过属性窗口的下拉列表选定单个按钮,调整其位置和其它属性。如图4-25所示。根据功能需求,把“cmdPrint”、“”cmdExit、“cmdDelete”和“cmdEdit”的Visible属性都设为“.F.-假”。添加2个命令按钮,Caption属性分别设为“修改库存”和“回主界面”。在“回主界面”命令按钮的Click事件中添加代码如下:thisform.releasedoform仓库管理在修改库存命令按钮的Click事件中添加代码如下:select现有库存表again*先在该表单的数据环境中添加现有库存表,如图4-26所示getid=thisform.设备号1.