第7章开发实例(6学时)
一、【教学目标】
1.掌握小型数据库应用程序的开发过程和方法。
2.掌握系统发布及生成的方法。
二、【重点和难点】
重点:
1.小型数据库应用程序的开发过程和方法。
2.系统发布及生成的方法。
难点:
1.小型数据库应用程序的开发过程和方法。
三、【教学要点】
7.1系统设计流程

一个应用软件如小型数据库应用系统,其开发过程采用生命周期法的理论,设计过程可以分为六个阶段:需求分析、概念设计、逻辑设计、物理设计、数据库实施和运行、数据库的使用和维护。结合VFP本身的特点,下面给出一个数据库应用系统的设计流程,如图7.1所示:
图7.1
通常,项目由用户提出,开发人员到用户处进行初步调查了解情况,拟定出初步的方案,征得用户同意后,开始系统的分析与设计。我们以商品进货销售系统为例,说明怎样用VFP完整地开发一个应用系统。
7.2需求分析及主要功能模块
通过与用户的交流,我们了解商品进货销售系统的主要功能包括:系统功能模块、数据维护模块、数据查询模块、报表打印模块。
商品进货销售系统完整的结构如图7.2所示:
这些都是从用户角度看到的商品进货销售系统的主要功能,随着需求的进一步细化,用户会增加一些功能,每个功能模块又可以划分为几项子功能。

图7.2
7.3数据库规划与设计
先建立系统的存储结构,通过数据分析,按照数据库设计的规范化原则,先对每个主题建立一个或多个表。然后再根据系统运行的需要建立一些辅助表。进入VFP,建立一个商品管理数据库,并建立表结构及表间关系。
1、几个主要表的表结构
(1)商品表:

(2)供应商表

(3)订购单表

(4)销售表

(5)客户表

(6)商品类别表
![]()
2、表间的主要关系(在此省略各个实体的属性)如图7.3所示:

图7.3
7.4输入/输出设计
1、表单设计
系统设计的核心是表单。对数据的操作类型从表中记录的观点看,可分为:输入新数据、修改已有数据,删除已有数据,查询数据,打印数据和统计分析数据。
数据的录入包括商品录入、供应商录入、客户录入、订购单录入、销售录入等。信息录入表单的运行效果如图所示:

图7.4
设计步骤如下:
(1)新建表单“增加记录”
(2)通过表单控件工具栏,在表单上添加一个标签Label1,一个选项按钮组Optiongroup1,两个命令按扭Command1、Command2,并调整好各控件的位置和大小。
(3)定义表单的Caption属性值为“增加记录”,AutoCenter属性为T,Label1 的Caption属性为:“请选择要增加记录的表:”,Command1和Command2的Caption属性分别为“确定”和“退出”,设置选项按钮组的ButtonCount属性为:5.
(4)设置第一个按钮Option1:右击选项按钮组空间,在弹出的快捷菜单中选择“编辑”命令,单击选中第一个按钮,将其Caption属性值设置为:商品表。
(5)用同样的方法设置第二个按钮Option2的Caption属性值为:订购单表;设置第三个按钮Option3的Caption属性值为:供应商表;设置第四个按钮Option4的Caption属性值为:销售表;设置第五个按钮Option5的Caption属性值为:客户表;
(6)为Optiongroup1的Click Event设计如下代码:
do case
case this.value=1
select 商品
case this.value=2
select 订购单
case this.value=3
select 供应商
case this.value=4
select 销售
case this.value=5
select 客户
endcase
(7)为Command1的Click Event设计如下代码:
append
(8) 为Command2的Click Event设计如下代码:
thisform.release
(9)保存表单,调试运行。
2、数据浏览表单的设计:
我们以商品表的浏览为例设计器设计方法。商品浏览表spll.scx的运行效果如图7.5:

图7.5
设计步骤如下:
(1)新建表单“商品浏览表单”,在其数据环境中添加商品.dbf
(2)通过表单控件工具栏在表单上添加一个页框控件PageFrame1和6个命令按钮控件分别为:Command1、Command2、Command3、Command4、Command5,并调整好各控件的位置和大小。
(3)定义表单的Caption属性值为“商品浏览表单”,AutoCenter属性为T,Command1的
Caption属性值为“第一条”,Command2的Caption属性值为“前一条”,Command3的Caption属性值为“后一条”,Command4的Caption属性值为“最后一条”,Command5的Caption属性值为“退出”。设置页框PageFrame1的PageCount属性为3。
(4)设置第一个页面Page1:右击页框控件,在弹出的快捷菜单中选择“编辑”命令,单击选中第一个页面,然后直接从数据环境设计器中直接将“商品编号”、“商品名称”、“类别编码”“单位” 4个字段拖入该页面。拖入的各字段将自动实现与表中对应字段的数据绑定。调整各字段控件的大小和布局,再将该页面Page1的Caption属性设置为“基本信息”。
(5)设置第二个页面Page2:用类似的方法选中第二个页面,从数据环境设计器中直接将“简介”字段拖入该页面,调整该控件的大小与位置,再将该页面Page2的Caption属性设置为“简介”。
(6)设置第三个页面Page3:用类似的方法选中第三个页面,从数据环境设计器中直接将“图片”字段拖入该页面,调整该控件的大小与位置,再将该页面Page3的Caption属性设置为“图片”。
(7)为Command1的Click Event设计如下代码:
go top
thisform.pageframe1.page1.refresh
thisform.pageframe1.page2.refresh
thisform.pageframe1.page3.refresh
(8)为Command2的Click Event设计如下代码:
skip -1
if bof()
go top
thisform.command2.enabled=.f.
endif
thisform.command3.enabled=.t.
thisform.pageframe1.page1.refresh
thisform.pageframe1.page2.refresh
thisform.pageframe1.page3.refresh
(9)为Command3的Click Event设计如下代码:
skip
if eof()
go bottom
thisform.command3.enabled=.f.
endif
thisform.command2.enabled=.t.
thisform.pageframe1.page1.refresh
thisform.pageframe1.page2.refresh
thisform.pageframe1.page3.refresh
(10)为Command4的Click Event设计如下代码:
go bottom
thisform.pageframe1.page1.refresh
thisform.pageframe1.page2.refresh
thisform.pageframe1.page3.refresh
(11)为Command5的Click Event设计如下代码:
thisform.release
(12)保存表单,调试运行。
3、打印报表的设计
打印报表是系统中常见的功能,报表的设计一般使用报表设计器和报表向导来完成,我们以销售分组报表(按客户分组)为例,说明打印报表的设计方法,销售分组报表的设计效果如下:

图7.6
设计步骤如下:
(1)为正确进行分组,必须对销售表中的记录按“客户编号”进行排序,通常以此字段为关键字建立索引
(2) 采用菜单方式或命令方式打开“报表设计器”窗口。然后执行主窗口“报表”菜单中的“快速报表”命令,在弹出的“打开”对话框中选取销售表作为报表的数据源。并在出现的“快速报表”对话框中指定报表的布局,然后单击右下角的“字段”按钮,在弹出的“字段选择器”对话框中为报表选择需要输出的字段。
(3)单击“确定”按钮,关闭“字段选择器”对话框回到“快速报表”对话框。再次单击“确定”按钮,所设计的快速报表框架出现在“报表设计器”窗口中。
(4)执行“报表”菜单中的“数据分组”命令,或者单击“报表设计器”工具栏上的“数据分组”按钮,在弹出的“数据分组”对话框中,单击第一个“分组表达式”右侧的对话框按钮,在出现的“表达式生成器”对话框中选择“销售表.客户编号”作为分组依据,单击“确定”按钮后返回“数据分组”对话框。如图7.7所示:
(5)在“数据分组”对话框下部的“组属性”框中,根据需要作进一步的选择设置后单击“确定”按钮,可以看到“报表设计器”窗口中增加了“组标头”和“组注脚”两个带区。
(6)执行主窗口“报表”菜单下的“标题/总结”命令,在“报表设计器”窗口中添加一个“标题”带区,并调整其高度,然后单击“报表控件”工具栏 中的“标题”按钮,在其中输入报表标题“销售表(按客户分组)”,并适当设置其字体大小与位置。

图7.7
(7)将“客户编号”字段域控件从“细节”带区拖放到“组标头”带区的左端,再将“页标头”带区的“客户编号”字段标签拖动到该带区的左端。然后调整“页标头”带区其他标题的位置和“细节”带区其他域控件的位置,使相应的控件上下对齐。如图7.8所示:
(8)指定数据源的主控索引:单击“报表设计器”工具栏上的“数据环境”按钮,打开数据环境设计器,单击鼠标右键,在弹出的快捷菜单中执行“属性”命令,在打开的“属性”窗口中,确认其上端的对象框中显示的是“Cursor1”,然后单击“数据”选项卡,将其中的“Order”属性设定为“客户编号”。
(9)单击“常用”工具栏上的“保存”按钮将设计结果命名后保存。单击“打印预览”按钮进行预览,效果如图7.9所示:

图7.8

图7.9
7.5系统定制
详细设计阶段的目标是确定应该怎样具体地实现系统的各项要求。利用VFP创建一个项目,在项目管理器中,进行各个功能的设计,例如:设计表单、菜单、报表和程序,完成所要求的功能
1、系统主表单
系统主表单是进入系统后用户所见到的第一个界面,它将给用户留下一个深刻的印象,所以设计应尽可能简洁、大方。
(1)新建表单“登录.scx”,创建一个文本框Text1,一个组合框按钮Combo1,两个标签控件Label1和Label2,两个命令按钮Command1和Command2。
(2)设置Label1的Caption属性为“用户名”,Label2的Caption属性为“密码”,Command1的Caption属性为“登录”,Command2的Caption属性为“退出”。
(3)为Command1的Click Event设计如下代码:
if (alltrim(thisform.combo1.value)=="孙瑞"and alltrim(thisform.text1.value)=="123456") ;
or (alltrim(thisform.combo1.value)=="刘燕" and alltrim(thisform.text1.value)=="abcdef")
thisform.release
do 主菜单.mpr
else
num=num+1
if num<3
messagebox("用户名或密码错误,请重试",0+48,"注意")
thisform.combo1.value=""
thisform.text1.value=""
thisform.combo1.setfocus
thisform.refresh
else
messagebox("登陆失败,请退出")
thisform.command1.enabled=.f.
thisform.command2.setfocus
endif
endif
(4)为Form1 的Init Event设计如下代码:
public num
num=0
thisform.combo1.additem("孙瑞")
thisform.combo1.additem("刘燕")
(5)为Command1的Click Event设计如下代码:
thisform.release
主菜单是用户使用系统的主要途径,菜单与系统的功能结构的划分有关系,进入不同的菜单完成不同的功能。创建主菜单.mnx的工作主要在“菜单设计器”中完成,建立菜单一般的步骤为:
(1)规划和设计系统:确定需要哪些菜单,它们在主菜单的位置,以及每个菜单有哪些子菜单等。
(2)创建菜单和子菜单:使用“菜单设计器”定义菜单的菜单项和子菜单。
(3)菜单项任务的指定:根据实际要求,指定菜单所要执行的任务,例如是执行命令还是执行过程。
(4)生成菜单程序。
菜单设计器应用示例,创建步骤如下:
(1) 创建第一级菜单。在“项目管理器”中选择“其他”选项卡,再选择“菜单”选项,然后单击“新建”按钮。出现“菜单设计器”,在其中输入各菜单名称及结果,建立其本系统所需要的菜单,如图7.6所示:

图7.6
(2)创建子菜单。单击子菜单后的“创建”按钮,可创建其子菜单。如单击“数据维护”子菜单后的“创建”按钮进入如图7.7所示窗口,建立“数据维护”子菜单。
(3)指定菜单或菜单项的任务。选择一个菜单或菜单项可以执行相应的任务,这个任务可以 一条命令或者是一个过程调用。
例如:当选择“增加记录”菜单项时将执行一条命令,可在“选项”中输入如下命令完成功能。
Do form zjjl.scx
用同样的方法为所有菜单和菜单项指定任务。

图7.7
(4)生成菜单程序,测试菜单系统。