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,两个命令按扭Command1Command2,并调整好各控件的位置和大小。

3)定义表单的Caption属性值为“增加记录”,AutoCenter属性为TLabel1 Caption属性为:“请选择要增加记录的表:”,Command1Command2Caption属性分别为“确定”和“退出”,设置选项按钮组的ButtonCount属性为:5.

4)设置第一个按钮Option1:右击选项按钮组空间,在弹出的快捷菜单中选择“编辑”命令,单击选中第一个按钮,将其Caption属性值设置为:商品表。

5)用同样的方法设置第二个按钮Option2Caption属性值为:订购单表;设置第三个按钮Option3Caption属性值为:供应商表;设置第四个按钮Option4Caption属性值为:销售表;设置第五个按钮Option5Caption属性值为:客户表;

6)为Optiongroup1Click 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)为Command1Click Event设计如下代码:

append

(8) Command2Click Event设计如下代码:

thisform.release

(9)保存表单,调试运行。

2、数据浏览表单的设计:

我们以商品表的浏览为例设计器设计方法。商品浏览表spll.scx的运行效果如图7.5

 


7.5

设计步骤如下:

1)新建表单“商品浏览表单”,在其数据环境中添加商品.dbf

2)通过表单控件工具栏在表单上添加一个页框控件PageFrame16个命令按钮控件分别为:Command1Command2Command3Command4Command5,并调整好各控件的位置和大小。

3)定义表单的Caption属性值为“商品浏览表单”,AutoCenter属性为TCommand1

Caption属性值为“第一条”,Command2Caption属性值为“前一条”,Command3Caption属性值为“后一条”,Command4Caption属性值为“最后一条”,Command5Caption属性值为“退出”。设置页框PageFrame1PageCount属性为3

4)设置第一个页面Page1:右击页框控件,在弹出的快捷菜单中选择“编辑”命令,单击选中第一个页面,然后直接从数据环境设计器中直接将“商品编号”、“商品名称”、“类别编码”“单位” 4个字段拖入该页面。拖入的各字段将自动实现与表中对应字段的数据绑定。调整各字段控件的大小和布局,再将该页面Page1Caption属性设置为“基本信息”。

5)设置第二个页面Page2:用类似的方法选中第二个页面,从数据环境设计器中直接将“简介”字段拖入该页面,调整该控件的大小与位置,再将该页面Page2Caption属性设置为“简介”。

6)设置第三个页面Page3:用类似的方法选中第三个页面,从数据环境设计器中直接将“图片”字段拖入该页面,调整该控件的大小与位置,再将该页面Page3Caption属性设置为“图片”。

7)为Command1Click Event设计如下代码:

go top

thisform.pageframe1.page1.refresh

thisform.pageframe1.page2.refresh

thisform.pageframe1.page3.refresh

8)为Command2Click 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)为Command3Click 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)为Command4Click Event设计如下代码:

go bottom

thisform.pageframe1.page1.refresh

thisform.pageframe1.page2.refresh 

thisform.pageframe1.page3.refresh

11)为Command5Click 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系统定制

7.5.1系统详细设计

详细设计阶段的目标是确定应该怎样具体地实现系统的各项要求。利用VFP创建一个项目,在项目管理器中,进行各个功能的设计,例如:设计表单、菜单、报表和程序,完成所要求的功能

1、系统主表单

系统主表单是进入系统后用户所见到的第一个界面,它将给用户留下一个深刻的印象,所以设计应尽可能简洁、大方。

1)新建表单“登录.scx”,创建一个文本框Text1,一个组合框按钮Combo1,两个标签控件Label1Label2,两个命令按钮Command1Command2

2)设置Label1Caption属性为“用户名”,Label2Caption属性为“密码”,Command1Caption属性为“登录”,Command2Caption属性为“退出”。

3)为Command1Click 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)为Command1Click Event设计如下代码:

thisform.release

7.5.2主菜单的设计

主菜单是用户使用系统的主要途径,菜单与系统的功能结构的划分有关系,进入不同的菜单完成不同的功能。创建主菜单.mnx的工作主要在“菜单设计器”中完成,建立菜单一般的步骤为:

1)规划和设计系统:确定需要哪些菜单,它们在主菜单的位置,以及每个菜单有哪些子菜单等。

2)创建菜单和子菜单:使用“菜单设计器”定义菜单的菜单项和子菜单。

3)菜单项任务的指定:根据实际要求,指定菜单所要执行的任务,例如是执行命令还是执行过程。

4)生成菜单程序。

菜单设计器应用示例,创建步骤如下:

(1)                创建第一级菜单。在“项目管理器”中选择“其他”选项卡,再选择“菜单”选项,然后单击“新建”按钮。出现“菜单设计器”,在其中输入各菜单名称及结果,建立其本系统所需要的菜单,如图7.6所示:

 


7.6

2)创建子菜单。单击子菜单后的“创建”按钮,可创建其子菜单。如单击“数据维护”子菜单后的“创建”按钮进入如图7.7所示窗口,建立“数据维护”子菜单。

3)指定菜单或菜单项的任务。选择一个菜单或菜单项可以执行相应的任务,这个任务可以 一条命令或者是一个过程调用。

例如:当选择“增加记录”菜单项时将执行一条命令,可在“选项”中输入如下命令完成功能。

      Do  form  zjjl.scx

用同样的方法为所有菜单和菜单项指定任务。

 


7.7

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