1 / 48

授课 -15 VFP 应用

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

leia
Download Presentation

授课 -15 VFP 应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 授课-15 VFP应用 本课通过一些应用实例,复习巩固前面已经学习过的内容,同时补充学习一些VFP程序的编写方法。 15.1 创建主表单 15.2 建立菜单 15.3 编制程序 15.4 制作子表单 15.5 连编应用程序

  2. 15.1 创建主表单 • 【学习目标】 • 表单设计器的使用 • 生成器的使用 • 【关键概念】 • 表单的属性设置

  3. 【任务】上机F(VF高新考试汇编2003版的第8.5题)【任务】上机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. 属 性 描 述 默认值 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. 表1 Visual FoxPro 6.0表单的常用属性

  7. 事件名称 产生说明 Init 在对象建立时引发 Destroy 在对象释放时引发 Error 当对象方法或时间代码在运行过程中产生错误时引发 Load 在表单对象建立之前引发 Unload 在表单对象释放时引发,是表单对象释放时最后一个引发的事件 GotFocus 当对象获得焦点时引发 Click 用鼠标单击对象时引发 DblClick 用鼠标双击对象时引发 Valid 在控件失去焦点前引发 InteractiveChange 当通过鼠标或键盘交互式改变一个控件的值时引发 表2 Visual FoxPro 6.0常用事件

  8. 方法名称 产生说明 Release 将表单从内存中释放 Refresh 重新绘制表单或控件 Show 显示表单 Hide 隐藏表单 SetFocus 让控件获得焦点,使其成为活动对象 表3 Visual FoxPro 6.0 常用方法 返回本课菜单

  9. 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 编制程序 • 【学习目标】 • 编制程序 • 【关键概念】 • 内存变量 • 程序的顺序、分支、循环三种结构

  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计算。[例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 制作子表单 • 【学习目标】 • 向导、设计器、生成器等综合应用制作表单 • 查询的方法 • 【关键概念】 • 控件的类库 • 查询的分组统计

  34. 【任务】上机F(VF高新考试汇编2003版的第8.5题)【任务】上机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-5C 图8-5B

  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 连编应用程序 • 【学习目标】 • 用项目管理器连编应用程序文件 • 【关键概念】 • 主文件 • 包含和排除 • 应用程序文件

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

  46. 【任务分析】 (1)本任务主要是要求同学们掌握使用项目管理器进行程序文件的连编(连接并编译)方法。连编是大多数应用程序设计都要进行的一项工作。 (2)本任务的第1点是要编写一个“我的主程序.PRG”的主程序文件。主程序文件通常是进入某一应用系统的首个文件,负责设置应用系统的工作环境等,该文件的程序清单(参考方案)如下: set talk off set safe off SET DEFA TO SYS(5)+SYS(2003) SET ESCA ON SET DATE ANSI SET CENT ON SET MARK TO '-' SET COLL TO 'PINYIN' DO FORM F8_5A READ EVEN

  47. (3)本任务的第2点是要连编一个应用程序文件。连编之前,一般要做好以下的三件事:(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分钟计算)。 -- 结束 -- 返回本课菜单

More Related