第 15章 综合实例学习要点
1,数据需求和功能需求
2,逻辑设计和物理设计
3,总体设计,用户界面设计
4,设计 与编码,数据装载第 15章 综合实例
15.1 需求分析
15.2 数据库设计
15.3 应用程序设计
15.4 运行设计第 15章 综合实例本章通过一个实例 ——“摩托车修理管理系统,来介绍 Visual FoxPro6.0应用系统的开发过程 。
15.1 需求分析
15.1.1 数据需求在调研的过程中,用户提供了该系统所需的输入,
输出单据 ( 见图 15-1~ 15-7) 。 输入单据包括修车登记单,摩托车修理单,零件入库单和零件出库单等
4种;输出单据包括季度零件订货计划,摩托车修理发票和工资月报表等 3种 。 不少单据都填写了数据,
这是开发人员所需要的,同时也为数据库设计提供了数据样例 。
15.1.2 功能需求功能分析的任务,是弄清用户对目标系统数据处理功能所提出的需求 。 根据系统目标和数据需求并与用户充分讨论后,本例的功能需求可归纳为以下 5个方面 。
1.数据登记登记功能用于把各种手填单据中的数据及时登记到系统将要定义的表中,还要求能进行修改 。 这些单据包括修车登记单,
摩托车修理单,零件入库单和零件出库单 。
2.查询能查询登记单,修理单,摩托车,车主,修理工,零件库存的有关数据 。
15.1.2 功能需求
3.编制零件订货计划需要找出要订货的零件,订货条件为:
零件库存量<最低库存量 。 订货量可由用户输入或修改 。
4.打印发票发票中除包含顾客,摩托车及修理项目等数据外,还要计算出修车费,修车费包括修理费和零件费,按下列各式计算:
零件费 =∑(零件价格 × 耗用数量)
修理费 =小时工资 × 修理工时 × 3
总计 =零件费 +修理费不难看出,发票包含的信息来自修车登记单,摩托车修理单和零件出库单等各种单据,这是一项涉及面很广的功能 。
5.打印修理工工资月报表某修理工的月工资 = ∑修理小时 × 小时工资
15.2 数据库设计数据库设计的任务是确定系统所需的数据库 。 数据库是表的集合,通常一个简单系统只需一个数据库 。 数据库设计可分为逻辑设计与物理设计两个步骤 。 第一步确定数据库所包含的表及其字段 。 第二步确定表的具体结构,即确定字段的名称,类型及宽度;此外还要确定索引,为建立表的关联准备条件 。
15.2.1 逻辑设计设计从分析输入数据着手,输入数据中的某类相关数据可以归纳为一个表 。 对需要同时调用的若干表,应使它们符合关联要求 。 数据库设计好后,可通过分析输出数据来验证其可用性,
若发现有的输出数据不能从输入数据导出,须继续向用户征集数据 。
15.2.2 物理设计下面列出摩托车修理管理系统所有表的结构与索引,为便于理解,也列出表的部分记录 。
1.修理单 (d:\mtcxl\xld.dbf)
2.摩托车 (d:\mtcxl\mtc.dbf)
3.车主 (d:\mtcxl\cz.dbf)
4.修理工 (d:\mtcxl\xlg.dbf)
5.零件用量 ( d:\mtcxl\ljyl.dbf)
6.零件库存 ( d:\mtcxl\ljkc.dbf)
除上述 6个表外,零件入库,出库时还需要暂存表 。 零件入库表为 ljrk.dbf,其结构与 ljkc.dbf 相同 。 零件出库表
(d:\mtcxl\ljck.dbf)的结构为,ljck( 零件号 c(6),数量
n(2)) 。
15.3 应用程序设计
15.3.1 总体设计按照功能分类是总体设计中常用的方法,系统的总体结构可用层次图 ( Hierarchy Chart简称 HC图 ) 来表示 ( 见图 15-9) 。 这种图自上而下进行分层:第一层为系统层,通常对应主程序;第二层为子系统层,
一般起分类控制作用,但是当该层没有下一层次时也可直接用来表达功能 ( 例如图中的查询功能 ) ;第三层为功能层;第四层为操作层 。
15.3.2 初始用户界面设计从总体结构图很容易列出应用程序的菜单,
由总体结构图转换到菜单时,其对应情况如下:
系统层对应菜单文件,子系统层对应菜单标题;
功能层则对应子菜单项 。
15.3.3 模块设计与编码
1.主文件 (mtcxl.prg)
菜单文件名定为 mtcxlcd( 摩托车修理菜单 ),并设置一个主文件来调用它 。 主文件代码编写如下:
SET TALK OFF
SET DEFA TO d:\vfp6\mtcxl
CLEA ALL
SET VIEW TO sjhj.vue
PUBLIC xldh,zljf
Xldh=SPACE(4)
DO FORM fm
KEYB?{CTRL+F4}?
MODI WIND SCREEN TITL?摩托车修理管理系统 ’
CLEA
15.3.3 模块设计与编码
*以上为初始化环境代码
DO mtcxlcd.mpr
READ EVENT
QUIT
图 15-11 摩托车修理管理系统的数据环境
15.3.3 模块设计与编码
2.菜单程序 (mtcxlcd.mpr)
往命令窗口键入命令 MODI MENU mtcxlcd,就会出现菜单设计窗口 。
⑴,退出,菜单项的命令
CLEAR EVENTS
⑵ 按图 15-10设置调用各表单的命令,例如对
,修车登记,菜单项可键入命令 DO FORM xcdj。
⑶ 从 菜 单 文 件 mtcxlcd.mnx 生 成 菜 单 程 序
mtcxlcd.mpr。
15.3.3 模块设计与编码
3.“修车登记,表单 (xcdj.scx)
修车登记表单用于输入,修改或添加修车登记单,
它具有以下特点:
① 将多个表的输入,修改,添加等多种维护功能集于一体,并使屏幕显示与修车登记单格式一致,方便用户操作 。
② 能提供翻页和寻页两种方式来查找修车登记单 。
寻页按钮供用户直接键入 xld.编号来查找记录 。
③ 增页按钮用于增加新的修车登记单,登记单编号自动加 1,并可增加新的摩托车与车主 。
15.3.3 模块设计与编码
④ 若输入的摩托车牌号在 mtc.dbf中已有,
则摩托车与车主的数据会自动填入表格 。 这不仅可减少输入击键,而且减少了输入出错机会 。
自动填入的数据还允许立即修改,此时系统会更新有关的表,即具有实时维护摩托车与车主数据的能力 。
⑤ 设有专用按钮,可当场临时维护摩托车与车主数据 。
15.3.3 模块设计与编码现将设计 xcdj.scx表单的主要操作步骤列出如下:
⑴ 创建表单,往命令窗口键入命令 MODIFY FORM xcdj,便出现标题为 xcdj.scx的表单设计器窗口 。
图 15-12,修车登记,表单窗口
15.3.3 模块设计与编码
⑵ Forml的属性设置
Caption 属 性 设 置 为,修 车 登 记,;
AutoCenter属性设置为,T.,使表单在主窗口内居中显示 。
⑶ 在表单上创建各标签和文本框
⑷ 添加表格线条:利用表单控件工具栏的线条按钮画出表格的所有横线和竖线 。
15.3.3 模块设计与编码
⑸ 创建命令按钮组图 15-13,输入修理单号”表单窗口
15.3.3 模块设计与编码
4.“输入修理单号,表单 ( srxldh.scx)
⑴ 创 建 表 单,往 命 令 窗 口 键 入 命 令 MODIFY
FORM srxldh,便出现表单设计器窗口 。
⑵ 属性设置,Form1的 Caption属性为,输入,;
Labell的 Caption属性为,请输入修理单号:,;
Command1的 Caption属性为,确定,。
⑶ Text1文本框的 LostFocus事件代码编写如下:
xldh=THISFORM.Text1.VALUE
⑷ Command1命令按钮的 Click事件代码编写如下:
THISFORM.Release
15.3.3 模块设计与编码
5.“摩托车修理,表单 (mtcxl.scx)
图 15-14,摩托车修理,表单窗口
15.3.3 模块设计与编码
⑴ 创建 表单,往 命令窗 口键 入命令 MODIFY
FORM mtcxl,便出现表单设计器窗口 。
⑵ Form1的属性设置将 Caption属性设置为,摩托车修理,修理情况,。
⑶ 按图 15-14在表单上创建各标签和文本框
⑷ 在 xlg表选取修理工的工号,并存入 xld.工号
⑸ Form1的 Refresh事件代码编写
15.3.3 模块设计与编码
6.“零件订货计划,表单 ( ljdh.scx)
⑴ 创建表单:往命令窗口键入命令 MODIFY FORM ljdh,便出现表单设计器窗口,如图 15-15所示 。
图 15-15,零件订货计划,表单窗口
15.3.3 模块设计与编码
⑵ 按图 15-15在表单上创建 Label1标签和 List1列表框各一个 。
⑶ 创建变量属性 jd( 表示,季度,),用表单菜单的新建属性命令创建一个变量属性 jd,然后在属性窗口将该变量属性的初值设置为,1”。
⑷ 属性设置
⑸ List1的 Init事件代码
⑹ List1的 DblClick事件代码
15.3.3 模块设计与编码
7.“打印发票,表单 (dyfp.scx)
⑴ 创建表单:往命令窗口键入命令 MODIFY FORM dyfp,便出现表单设计器窗口,如图 15-16所示 。
图 15-16,打印发票,表单窗口
15.3.3 模块设计与编码
⑵ 按图 15-16在表单上创建 Label1标签
Text1文本框和 Command1命令按钮各一个 。
⑶ 属性设置:将 Form1的 Caption属性设置为,打印发票,;将 Command1命令按钮的
Caption属性设置为,确定,。
⑷ Text1的 LostFocus事件代码编写如下:
xldh=THISFORM.Text1.VALUE
⑸ Command1的 Click事件代码
15.3.3 模块设计与编码
8.“发票,报表 (fp.frx)
图 15-17,发票,报表设计器
15.3.3 模块设计与编码
⑴ 创建报表:在命令窗口键入命令 MODIFY
REPORT fp,便出现 fp.frx报表设计器窗口 。
⑵ 创建报表变量 ljf( 零件费 ) 和 xlf( 修理费 ),
选定报表菜单的变量选项 → 在报表变量对话框的变量列表中键入 ljf→ 在,要存储的值,与,初始值,文本框中均键入 zljf。
可用类似的方法来创建 xlf报表变量,但在,要存储的值,与,初始值,两框中均键入,xld.修理小时
*xlg.小时工资 *3。
15.3.3 模块设计与编码
⑶ 在报表设计器窗口中创建表达式控件:用报表控件工具栏中的域控件按钮创建如图 15-17所示的 9
个表达式控件,它们分别是 xld.完工日期,mtc.车主名,cz.地址,xld.牌号,xld.修理项目,xld.送修日期,ljf,xlf和 ljf+xlf。 ljf和 ljf+xlf两个表达式控件创建时,在报表表达式对话框中的格式文本框均设置
9999.99。
15.4 运行设计
15.4.1 装载数据在应用系统投入运行之前,通常要往数据库装入必要的数据 。 本系统也可在运行时装载某些数据,例如通过登记功能来装载,但是上例中的修理工管理和零件入库程序尚未编写,故这些信息只得打开相应的表来输入 。
15.4.2 设置应用系统程序项本系统可直接在 Visual FoxPro 6.0中运行,
只 要 在 命 令 窗 口 中 键 入 命 令 DO
d:\mtcxl\mtcxl 就可行 。 也可在 Windows的开始菜单中建立程序项来运行 。 建立程序项的步骤如下:
① 进入 Windows 98;
15.4.2 设置应用系统程序项
② 选定,开始,|“设置,选项的,任务栏,菜单命令 → 选定,任务栏属性,对话框的,开始菜单程序,选项卡 → 选定,添加,按钮 → 在,创建快捷方式,对 话 框 中 的,命 令 行,文 本 框 中 键 入
d:\vfp6\vfp6.exe d:\mtcxl\mtcxl -t→ 选定下一步按钮 → 认同缺省文件夹 programs,选定下一步按钮 → 在为程序选定标题对话框中键入:摩托车修理管理系统 → 选定完成按钮返回任务栏属性对话框 →
选定确定按钮,,摩托车修理管理系统,程序项已建立在,开始,|“程序,的菜单中 。