授课 -15 VFP 应用

Preview:

DESCRIPTION

授课 -15 VFP 应用. 本课通过一些应用实例,复习巩固前面已经学习过的内容,同时补充学习一些 VFP 程序的编写方法。. 15.1 创建主表单 15.2 建立菜单 15.3 编制程序 15.4 制作子表单 15.5 连编应用程序. 15.1 创建主表单. 【 学习目标 】 表单设计器的使用 生成器的使用 【 关键概念 】 表单的属性设置. 【 任务 】 上机 F ( VF 高新考试汇编 2003 版的第 8.5 题) 1. 创建主表单: - PowerPoint PPT Presentation

Citation preview

1茂名职业技术学院

授课 -15 VFP 应用

15.1 创建主表单

15.2 建立菜单

15.3 编制程序

15.4 制作子表单

15.5 连编应用程序

本课通过一些应用实例,复习巩固前面已经学习过的内容,同时补充学习一些 VFP 程序的编写方法。

2茂名职业技术学院

15.1 15.1 创建主表单创建主表单

【学习目标】 表单设计器的使用 生成器的使用

【关键概念】 表单的属性设置

3茂名职业技术学院

【任务】 上机 F( VF 高新考试汇编 2003 版的第 8.5 题) 1. 创建主表单:

将 E:\2006VFP\DATA1 中的表 Y8_5.DBF 复制到本人的文件夹,重命名为S8_5.DBF ,并将其加入到“项目 Y” 的“自由表”中。 在“项目 Y” 中创建表单(用表单设计器),以 F8_5A 为名保存。 设置表单 F8_5A 中相关的属性,使其成为顶层表单。 按图 8-5A 所示,在表单 F8_5A 中添加“表格”控件,将表 Y8_5 的 fh ,yss , sf , yds , df , ymqs , mqf , ysfy 字段加入,标题用汉字,见图8-5A ,表的样式为“财务型”。 按图 8-5A 所示,添加三个按钮,分别是“计费”、“查询”、“退出”。其中:“计费”按钮通过调用 P8_5A.PRG 文件完成计费功能;“查询”按钮通过调用表单 F8_5B.SCX

文件完成个人收费查询;“退出”按钮可以解除事件循环并退出运行的程序。 制作完成的表单外观, 见图 8-5A 。 图 8-5A

4茂名职业技术学院

【任务分析】( 1 ) 创建表单 可以用菜单(工具钮)、项目管理器、命令创建。( 2 ) 设置表单属性下面是一些常用属性名( P244 ) :

AlwaysOnTop 是否处于最上层 AutoCenter 运行时是否自动居中 Caption 标题(往往是要修改的) Name 名称(一般不修改) ForeColor 前景色 ShowWindow 是否顶层 Value 值 Visible 是否可见( 3 )放置按钮并编写事件代码 已经讲述过,略。

注:打“√”的是本表单需要设置的

5茂名职业技术学院

( 4 ) 表格生成器的使用 见下图,在“布局”选项中,用鼠标点击某一字段的记录,就可以在标题框内修改该字段的标题了。

6茂名职业技术学院

表 1 Visual FoxPro 6.0 表单的常用属性属 性 描 述 默认值

AlwaysOnTop 指定表单是否总位于其他打开窗口之上 .F.

AutoCenter 指定表单初始化时是否自动在系统主菜单中居中显示 .F.

BackColor 指定表单窗口颜色 255,255,255

BorderStyle 指定表单边框的风格。默认为系统边框 3

Caption 指定显示在表单标题栏上的文本 Form1

Closable 指定是否通过关闭按钮或关闭框来关闭表单 .T.

DataSession 指定表单里的表是在全局访问的工作区打开 ( 默认值 1) ,还是在表单自己的工作区打开 ( 值 2)

1

MaxButton 确定表单是否有最大化按钮 .T.

MinButton 确定表单是否有最小化按钮 .T.

Movable 确定表单是否能移动 .T.

ShowWindows 控制表单是否在屏幕中 0

WindowState 指定表单的状态 0

Visible 指定表单是显示还是隐藏 .T.

7茂名职业技术学院

表 2 Visual FoxPro 6.0 常用事件事件名称 产生说明

Init 在对象建立时引发

Destroy 在对象释放时引发

Error 当对象方法或时间代码在运行过程中产生错误时引发

Load 在表单对象建立之前引发

Unload在表单对象释放时引发,是表单对象释放时最后一个引发的事件

GotFocus 当对象获得焦点时引发

Click 用鼠标单击对象时引发

DblClick 用鼠标双击对象时引发

Valid在控件失去焦点前引发

InteractiveChange

当通过鼠标或键盘交互式改变一个控件的值时引发

8茂名职业技术学院

方法名称 产生说明

Release 将表单从内存中释放

Refresh 重新绘制表单或控件

Show 显示表单

Hide 隐藏表单

SetFocus 让控件获得焦点,使其成为活动对象

表 3 Visual FoxPro 6.0 常用方法

返回本课菜单

9茂名职业技术学院

15. 2 15. 2 建立菜单建立菜单【学习目标】 用菜单设计器制作菜单 主表单调用菜单的设置

【关键概念】 菜单的结果选项 顶层表单

10茂名职业技术学院

【任务】 上机 F 2. 建立菜单 ●在“项目 Y” 中创建菜单,以 M8_5.MNX 为名保存。 ●按图 8-5A 所示,建立“计费”、“查询”、“退出”三个菜单项。其中:“计费”的结果为命令,调用程序 P8_5A.PRG ;“查询”有“个人收费查询”和“楼层收费统计” 两个子项,前一个子项的结果为命令,调用表单 F8_5B.SCX ,后一个子项的结果为过程,调用查询 Q8_5.QPR和表单 F8_5C.SCX ;“退出”的结果也是过程,要求使其在退出程序之前发出询问,确认后再退出本系统,见图 8-5D 。 ●将 M8_5.MNX 设置为由顶层表单调用,生成可执行菜单文件 M8_5.MPR 。

制作完成的菜单外观,见图 8-5A 。

图 8-5A

11茂名职业技术学院

【任务分析】( 1 ) 创建菜单 可以用系统菜单(或工具钮)、项目管理器创建。( 2 ) 设置菜单由顶层表单调用 菜单设计时,在“常规选项”对话框中选择“顶层表单”复选框。( 3 ) 设计菜单 ● 在“菜单设计器”窗口中设计菜单的方法(结果的 4种选项的编辑)。 ● 完成后,先保存,再生成可执行菜单程序文件。( 4 ) 主表单属性的设置 ● 将主表单的 ShowWindow 设置为 2 (顶层表单); ● 将主表单的 AutoCenter 设置为 .T. (真) 。( 5 ) 主表单调用菜单的事件代码的编写 ● 在主表单的 Init 事件代码中添加调用菜单程序命令: DO M8_5.MPR WITH THIS, "M85" ● 在主表单的 Destroy 事件代码中添加清除菜单的命令,使得关闭表单时同时清除菜单:

RELE MENU M85 EXTN

12茂名职业技术学院

( 6)使用信息显示对话框函数 格式: [< 变量名 >]=MESSAGEBOX(< 信息内容 >; [,<对话框类型 >[,<对话框标题 >]])[例如 ]运行 Messagebox(“您真的要退出本系统吗 ?”, 4+32,“提示信息” ) 语句将显示如上图所 示对话框。

图 8-5D 的对话框 ,用 MESSAGEBOX() 函数制作。

返回本课菜单

13茂名职业技术学院

15.3 15.3 编制程序编制程序

【学习目标】 编制程序

【关键概念】 内存变量 程序的顺序、分支、循环三种结构

14茂名职业技术学院

【任务】 上机 F

3. 编制被调用的程序 编制计费程序 P8_5A.PRG 。计算表 S8_5.DBF 中的部分字段的记录值,计费方法: sf=yss*sdj , df=yds*ddj ,mqf=ymqs*mqdj , ysfy=sf+df+mqf 。

计算结果见图 8-5A 。

图 8-5A

15茂名职业技术学院

【相关知识】 几个与内存变量有关的命令 定义: publ 全局变量 local 局部变量 显示: 例 disp memo like ?7_2

保存 : 例 save to 7_2A all like ?7_2

恢复 : 例 rest from 7_2c addi

16茂名职业技术学院

【相关知识】【相关知识】 程序的基本结构 1. 顺序结构 顺序结构是程序设计中最简单、最常用的基本结构。

在该结构中,程序按语句出现的先后顺序依次执行。 事实上,程序中的命令如果不进行特殊说明,

就自动按其前后排列顺序执行。我们以前介绍的几个例题都是顺序结构程序设计题目。

17茂名职业技术学院

2. 分支结构 单条件选择语句 格式: IF < 条件 > [命令序列 1] [ELSE [命令序列 2]] ENDIF 功能:若条件为真( .T. ) , 则执行命令序列 1, 如果条件为假( .F. ) , 则执行命令序列 2 。

18茂名职业技术学院

[例 15-1] 设出租车不超过 3公里时一律收费 7 元钱,超过时则超过部分每公里加收 2.3元。试根据里程数编程计算并显示出应付车费。程序如下:

CLEAR INPUT " 请输入里程数: " TO lc IF lc<=3 cf=7 ELSE cf=7+(lc-3)*2.3 ENDIF ?" 车费为: ",cf RETURN

19茂名职业技术学院

多条件选择语句 格式: DO CASE CASE < 条件 1> [命令序列 1] CASE < 条件 2> [命令序列 2] ...... CASE < 条件 n> [命令序列 n] [OTHERWISE [命令序列 n+1]] ENDCASE

20茂名职业技术学院

功能: 系统依次判断各 <条件 >是否满足,若某一 < 条件>为 .T. ,就执行该 < 条件 >下的 [命令序列 ],执行后不再判断其它 <条件 >,而转去执行 ENDCASE后面的第一条命令。

如果没有一个 < 条件 >为 .T. ,就执行 OTHERWISE后面的 [命令序列 ],直到 ENDCASE;如果没有 OTHERWISE,则不作任何操作就转向 ENDCASE之后的第一条命令。

21茂名职业技术学院

[例 15-2]使用多条件选择语句的例题。给 GZJ.DBF 中每位职工增加工资,原则:职称为教授的基本工资加 20%,副教授的加 15%,讲师的加 10%,否则,若基本工资低于 380 的按 380 计算。

set talk off use gzj Do while .not. Eof() Do case case 职称 =“教授” repl 基本工资 with 基本工资 *1.2 case 职称 =“副教授” repl 基本工资 with 基本工资 *1.15 case 职称 =“讲师” repl 基本工资 with 基本工资 *1.1 case 基本工资 <380 repl 基本工资 with 380 Endcase skip Enddo use set talk on return

22茂名职业技术学院

3. 循环结构 在程序设计中,有时需要从某处开始有规律地反复执行某些类似的操作,这些类似的操作一般用循环结构程序设计来解决。在 VFP 中,提供了“当型”、“步长型”和“表扫描型”循环结构。

当型循环 DO WHILE 格式: DO WHILE < 条件 > [命令序列 ] [EXIT] [LOOP] ENDDO 说明: DO WHILE 和 ENDDO 语句应配对使用,各占一行。

23茂名职业技术学院

功能: 1 )当型循环执行的过程是:根据 <条件 > 逻辑值进行判断。如果 < 条件 >为 .T. ,则执行 [命令序列 ],[命令序列 ]执行完返回到 DO WHILE 语句,每执行一遍就判断一次 DO WHILE 语句中的 < 条件 >。如果 < 条件 > 仍然为 .T. ,则继续执行 [命令序列 ],直到 < 条件 >的逻辑值为 .F. ,则结束循环,转去执行 ENDDO 之后的第一条命令。

2 )在 [命令序列 ]的适当位置可以放置 EXIT 和 LOOP 语句,用以对循环过程作特殊处理。 EXIT 的功能是:无条件结束循环命令。 LOOP 语句的功能是:提前结束本次循环命令。

24茂名职业技术学院

3 )逐个表中符合条件的记录 先用 LOCATE或 FIND 或 SEEK 定位到符合条件的第一个记录

上,再用 NOT EOF()或 FOUND()作为循环条件,循环体内必须含有记录指针移动的语句。

[例 15-3]在 GZJ.DBF 中给职称为教授的职工加工资 20%,每加一个就显示该职工的情况。

set talk off use gzj locate for 职称 =“教授” Do while found() repl 基本工资 with 基本工资 *1.2 display continue Enddo use

25茂名职业技术学院

4 )不定次数的循环 先用某变量 =6作为循环条件,在循环体内用对话框函数作判断条件 , 判断是否继续执行循环 , 这是 DO 循环很典型的用法。

[例 15-4] 根据输入的姓名在 GZJ.DBF 中查询工资情况。 set talk off use gzj x=6 Do while x=6 accept " 输入要查的人名 :" to xm locate for 姓名 =xm If found() display Else ?"查无此人! " Endif x=messagebox(" 还要查吗 ?",4+32," 提示 ") Endd ?"再见! " Use RETU

26茂名职业技术学院

步长型循环 FOR 格式: FOR <内存变量 >=< 初值 > TO < 终值 > [STEP < 步长值 >] [命令序列 ] [EXIT] [LOOP] ENDFOR/NEXT 功能: 首先将初值赋值给循环变量,然后判断循环变量的值是否超过终值,

不超过就执行循环体,遇到 ENDFOR或 NEXT语句,自动使循环变量增加一个步长值,再将循环变量的值与终值比较,如果循环变量的值不超过终值,就再执行循环体,不断循环执行。如果循环变量的值超过终值则转去执行 ENDFOR或 NEXT语句后面的第一条语句。

27茂名职业技术学院

说明: 1) < 初值 >、 < 终值 >、 < 步长值 > 都是数值表达式;若步长为正数,计数器增加;若步长为负数,则计数器减少;当 <步长值 >是 1时,可以省略 STEP 子句。

2) ENDFOR或 NEXT语句为循环终端语句,用以标明本循环结构的终点。该语句必须和 FOR 语句配对使用。

3)在循环体内的 EXIT 和 LOOP语句,作用和用法与当型循环结构类似。

28茂名职业技术学院

[例 15-5]编程求 S=1!+2! +……+n! set talk off input “请输入终值( n≥3 )” to n s=0 For i=1 to n t=1 For j=1 to I t=t*j Endfor s=s+t Endfor ?“1! +2! +…+”+alltrim(str(n))+“! =”+alltrim(str(s))

29茂名职业技术学院

表扫描型循环 SCAN 针对表记录、逐条处理表记录的一种循环。 格式: SCAN [ 范围 ] [FOR < 条件 1> |WHILE < 条件 2>] 语句序列 [EXIT] [LOOP] ENDSCAN 功能: 在当前表中给定范围内对符合条件的记录逐个执

行语句序列,若符合条件的记录处理完毕,则执行 ENDSCAN后面的语句。

30茂名职业技术学院

说明: 1 )范围有 ALL、 NEXT n 、 REST 、 RECORD n四种,省略

时默认为 ALL。 2 ) EXIT 和 LOOP语句,功能和用法同其他循环结构类似。 3 )表扫描型循环结构每循环一遍,记录指针自动移动到下

一条记录,不需要设置 SKIP语句。[例 15-6]在主窗口中逐个显示 GZJ.DBF 中前 5条记录中男性

的记录。 use gzj Scan for 性别 =" 男 " next 5 display Endscan ?" 显示完毕! " retu

31茂名职业技术学院

【循环的归纳小结】 DO 循环的格式 DO WHILE < 条件 > [命令序列 ] [EXIT] [LOOP] ENDD FOR 循环的格式 FOR <内存变量 >=< 初值 > TO < 终值 > [STEP < 步长值 >] [命令序列 ] [EXIT] [LOOP] ENDF SCAN 循环的格式 SCAN [ 范围 ] [FOR < 条件 1> |WHILE < 条件 2>] [命令序列 ] [EXIT] [LOOP] ENDS

32茂名职业技术学院

【本项任务的解决】 由于有数据共享的问题,表单中的数据更新计算一般使用 SQL 的数据更新命令。

UPDA S8_5 SET SF = SDJ*YSS UPDA S8_5 SET DF = DDJ*YDS UPDA S8_5 SET MQF = MQDJ*YMQS UPDA S8_5 SET YSFY = MQF+SF+DF RETU 可见,这是一个顺序结构的编程问题。

返回本课菜单

33茂名职业技术学院

15.4 15.4 制作子表单制作子表单【学习目标】 向导、设计器、生成器等综合应用制作表单 查询的方法

【关键概念】 控件的类库 查询的分组统计

34茂名职业技术学院

【任务】 上机 F( VF 高新考试汇编 2003 版的第 8.5 题)4. 创建两个子表单 按图 8-5B 所示,在“项目 Y” 中创建个人收费 查询子表单 ( 使用表单向导 ) ,表单以 F8_5B.SCX 为名保存。表单的数据源为表 S8_5.DBF 。 按楼层分组制作楼层收费统计的查询。查询的数据源为表 S8_5.DBF ,查询输出到表 S8_5A.DBF 中,保存在“项目 Y” 的“自由表”中。查询文件以 Q8_5.QPR 为名保存在“项目 Y” 的“查询”中。 按图 8-5C 所示,在“项目 Y” 中创建楼层收费统计子表单 ( 使用表单设计器 ) ,以 F8_5C.SCX 为名保存。表单的数据源为表 S8_5A.DBF 。结果见图 8-5B 、图 8-5C 。

图 8-5B 图 8-5C

35茂名职业技术学院

【任务分析】

( 1 )本任务的表单 F8_5B 可以使用表单向导制作,然后用表单设计器进行布局方面的修改。

( 2 )本任务的第 2 点是要制作一个查询,通过查询形成一个楼层收费表 S8_5A.DBF 。为了完成这个查询,需要在表 S8_5.DBF

中添加一个字段“ lc” ,其各记录的值为“ fh” 的百位数字。查询可以用查询设计器制作,用“ lc” 作为分组,并应用求和函数完成查询。

( 3 )本任务的表单 F8_5C 使用表单设计器、生成器制作,数据源为查询形成的表 S8_5A.DBF 。 F8_5C 的“ ShowWindows”

属性要设置为:“ 1—在顶层表单中”。

36茂名职业技术学院

【相关知识】

其实,表单 F8_5B也可以直接用表单设计器制作。

添加控件

点击 [ 表单控件 ] 中的某个控件,再在表单中施放即可。

实例 添加文本按钮组的方法:

(在“表单控件”工具栏中进行如下三步操作)

● 单击“查看类”按钮,选择“添加”命令;

● 在“打开”对话框中,选择要加载的通用数据操纵控制按钮组类库文件 VFP98\WIZARDS\WIZBTNS.VCX;

● 将控件 TXTBTNS拖放添加到表单中。

37茂名职业技术学院

表单对象的布局

在表单中施放的各个对象,可能会很散乱,可以用鼠标先将需要对齐的对象选定,再用布局工具栏中的各种对齐按钮使之对齐。

图 14

38茂名职业技术学院

用多种工具制作表单 使用多种工具制作表单的一般步骤:

(1) 用表单向导制作表单;

(2) 用表单设计器进行布局修改;

(3) 增加表单控件,用表单生成器进行局部修改;

(4) 编写一些必要的事件代码;

(5) 通过对控件、表单属性等的设置,修饰表单。

39茂名职业技术学院

属性的设置( 1 )用属性窗口在设置框键入、选择或使用生成器,若输入表达式,须先

键入“ =” 。( 2 )在运行中设置(编写代码)绝对引用格式:容器对象名 . 对象名 . 属性名 = 属性值例: Formset1.Text1.Value=DATE () Formset1.Text1.Forecolor=RGB ( 128 , 0 ,

0 )

40茂名职业技术学院

控件介绍常用的控件( P267 , 21 个)

标签、文本、编辑、按钮、按钮组、选项、复选、组合、列表、微调、表格

图像、计时器、页框、 OLE 对象、 O绑定、线条、形状、容器、分隔、链接

通过实例学习典型的用法。

41茂名职业技术学院

控件应用举例[ 例 15-7] 制作字体能变形的表单 Bd8-1zx.scx 。运

行结果见右图:

内有: 1 个标签框, 1 个选项组, 3 个复选组, 1 个

组合框, 1 个按钮。

42茂名职业技术学院

1.Check1 的 Click 代码:if this.value=1

thisform.label1.fontbold=.t.

else

thisform.label1.fontbold=.f.

Endif

2. Check2 的 Click 代码:if this.value=1

thisform.label1.fontunderline=.t.

……

3. Check3 的 Click 代码: if this.value=1

thisform.label1.fontItalic=.t.

4.OptionGroup1 的 Click 代码:n=this.value

do case

case n=1

thisform.label1.fontname='宋体 '

case n=2

thisform.label1.fontname='楷体 _GB2312'

case n=3

thisform.label1.fontname='隶书 '

case n=4

thisform.label1.fontname='华文新魏 '

endc

43茂名职业技术学院

5.Combo1 的 Init 代码:this.additem("15")

this.additem("18")

this.additem(“20")

this.additem("24")

6. Combo1 的 Interactivechang 代码:thisform.label1.fontsize=

val(alltrim(this.displayvalue))

7.Command1 的 Click 代码:thisform.release

8. 标签的属性设置(略)

返回本课菜单

44茂名职业技术学院

15.5 15.5 连编应用程序连编应用程序【学习目标】 用项目管理器连编应用程序文件

【关键概念】 主文件 包含和排除 应用程序文件

45茂名职业技术学院

【任务】 上机 F5. 建立应用程序 在“项目 Y” 中创建 “我的主程序 .PRG” 主程序文件,程序应能设置一些必要工作环境(如:路径、日期格式等),能调用表单 F8_5A ,激活事件响应。 在“项目 Y” 中连编应用程序“应用 VF.APP” 。将“应用 VF.APP” 添加到“项目 Y” 的“应用程序”中。 结果见右图(共 22 个文件)

46茂名职业技术学院

【任务分析】

( 1 )本任务主要是要求同学们掌握使用项目管理器进行程序文件的连编(连接并编译)方法。连编是大多数应用程序设计都要进行的一项工作。

( 2 )本任务的第 1 点是要编写一个“我的主程序 .PRG” 的主程序文件。主程序文件通常是进入某一应用系统的首个文件,负责设置应用系统的工作环境等,该文件的程序清单 (参考方案 )如下:set talk offset safe offSET DEFA TO SYS(5)+SYS(2003)SET ESCA ONSET DATE ANSISET CENT ON

SET MARK TO '-'SET COLL TO 'PINYIN'DO FORM F8_5AREAD EVEN

47茂名职业技术学院

( 3 )本任务的第 2 点是要连编一个应用程序文件。连编之前,一般要做好以下的三件事:① 在项目管理器中添加、移走文件;② 指定主文件(指定后,文件名的字体较粗);③ 设置有关文件的“包含 \排除”状态(数据文件 , 如表、库,一般不包含 ,其余为包含)。 之后,就可以点击项目管理器的“连编”按钮,进行连编。见右图,首次连编,可以先选择“重新连编项目”,若连编过程可以正常完成,再选择“连编应用程序”,连编之后,会产生一个后缀为 .APP (小狐狸)的文件。

48茂名职业技术学院

【上机 F 的评分标准】 ( 1 )文件夹内有 22 个 VFP 的文件。 ( 2 )点击“小狐狸”文件进入,点击菜单,能观看到“图 8

_5A” 、 “图 8_5B” 、 “图 8_5C” 、 “图 8_5D”这四个画面。

( 3 ) 各项的评分为:第 0项 5分,第 1项 20 分,第 2项每项 20分,第 3项 15 分,第 4项 30 分,第 5项 10 分。满分 100 分。

( 4 ) 在 90 分钟内完成不扣超时分。以后每增加用时 1分钟扣 1 分(不足 1 分钟按 1分钟计算)。 -- 结束 --

返回本课菜单