第十章 Visual FoxPro程序设计
综合应用
10.1 数据库操作实例
10.2 表单控件应用实例
Visual FoxPro不但支持传统的面向过程的编程方法, 而且全面引入了面
向对象的程序设计方法 。 面向对象的程序设计把重点放在对象及其联系上,
而不是具体的实现细节, 它使得 Visual FoxPro应用程序的开发更加容易,
而且耗时更少, 效率更高 。
在 Visual FoxPro应用程序设计中, 大部分设计是关于表单的设计, 表单
也是 Visual FoxPro程序 。 表单设计充分体现了面向对象程序设计的风格,
是 Visual FoxPro 应用程序设计的精华所在 。
在 Visual FoxPro应用程序设计中也有大量的代码设计, 这些代码一般都
包含在表单及其控件的方法程序中, 而不是命令文件中, 这使得独立的应
用程序有了良好的封装性 。
在 Visual FoxPro的代码设计中, 有程序的各种命令语句, 包括 SQL命令
语句, 还有程序的控制语句及对象的操作语句, 它们的有机组合, 可以完
成程序所需的各种功能 。
本章综合前面所学的基本知识和操作, 分两个方面以实例的方式介绍
Visual FoxPro应用程序设计, 使用户对 Visual FoxPro应用程序设计有一
个更深入的了解, 进一步提高程序设计能力 。
10.1 数据库操作实例
数据库应用系统有两个中心:一个是数据, 一个是处理 。 数据的提供与数
据的处理方式是数据库应用系统开发过程中紧密相连的中心环节 。 数据库操
作实例主要围绕着数据库的操作, 提供一些有实用价值的数据操作界面和数
据操作工具, 这些实例可以直接使用在数据库应用系统中 。
10.1.1 浏览数据实例
1,设计思想
在数据库操作过程中, 经常需要浏览数据表中的数据, 比较直观的方法是
设计一个表单, 在表单中以列表框的形式列出当前文件夹中的数据表文件,
再建立一个表格, 以显示列表框中选定的数据表文件中的具体数据 。
2,设计成果
浏览数据程序执行结果如图 10-1所示。
图 10-1 浏览数据程序执行界面
3,实现方法
① 新建一个表单, 在表单上建立两个标签, 一个列表框, 一个表格和一
个命令按钮控件, 并选择好位置和大小 。
② 设置好控件的字体和字号 。
③ 表单控件的主要属性如表 10-1所示 。 (P186)
④ 打开, 代码编辑, 窗口, 设置, 表单, 的, Init”事件过程代码, 并分
别为, 列表框, 和, 命令按钮, 添加, Click”事件过程代码, 如图 10-2~
图 10-4所示 。
图 10-2 表单的 Init事件代码编辑界面
图 10-3 列表框的 Click事件代码编辑界面
图 10-4 关闭命令按钮 Click事件代码编辑界面
10.1.2 维护数据实例
1,设计思想
维护数据是数据库操作中的一项必不可少的重要工作,它包括:选择要维护的数据表
,进行数据的添加、修改和删除。在本例中使用一个表单,对有关学生管理的三个数
据表进行数据维护。具体方法是:在表单上建立一个有三个页面的页框,分别放置学
生数据和选课数据及课程数据,再设置 9个命令按钮,分别对三个页面中的数据进行
逐条浏览、添加记录、删除记录、修改记录和取消等操作,由于篇幅有限,本例只对
学生数据操作进行说明。
2,设计成果
维护数据程序执行过程如图 10-5~图 10-9所示 。
3,实现方法
① 新建一个表单, 在表单上建立有三个页面的页框控件, 在各个页面上将再建立 9个
命令按钮控件, 并选择好位置和大小 。
② 在数据环境设计器中添加各数据表, 并将表中的相关字段拖放到各页面中, 设置好
控件的字体和字号 。
③ 表单控件的主要属性见表 10-2( 在表中各页面的控件属性省略 ) 。
④打开, 代码编辑, 窗口,设置, 表单, 的, Init”事件过程代码,并分别为, 命令
按钮, 添加, Click”事件过程代码,如图 10-10~图 10-18所示。
图 10-5 选取首记录按钮 图 10-6 选取上一条记录按钮
图 10-7 选取添加记录按钮 图 10-8 选取修改后的确认按钮
图 10-9 选取删除记录按钮
图 10-10? 18所示 P189-191
10.1.3 学生选课实例
1,设计思想
学生选课是教学管理环节中的一项很重要的工作 。 本例提供了一个学生选课的界面,
学生在正确输入了自己的学号后, 可查阅可选的课程和自己已选的课程 。 在输入了选课
的课程号后, 系统进行判断, 如果是已选的课程, 或不是课程表中有的课程, 将给出提
示信息, 要求重新输入;对于正确的选课, 将在学生已选课程表中添加一条记录 。 如果
学生要取消已选的课程 ( 退选 ), 将在学生已选课程表中删除一条记录 。
2,设计成果
学生选课程序执行过程如图 10-19,图 10-20所示 。 3,实现方法
① 新建一个表单, 在表单上建立有四个标签控件, 三个文本框控件, 两个命令按钮控
件, 并选择好位置和大小 。
② 在学籍管理数据库中新建一个视图, 用于存入学生选课信息, 创建的主要过程如图
10-21~图 10-23所示 。
③ 在数据环境设计器中添加学生表, 课程表, 选课表和学生选课视图, 并将课程表拖
放到可选课程处;将学生选课视图拖放到已选课程处, 完成表单中两个表格的设计 。
表单控件的主要属性见表 10-3( 在表中文本框和表格的控件属性省略 ) 。
⑤ 打开, 代码编辑, 窗口, 设置, 表单, 的, Init”事件过程代码, 为文本框, txt学
号, 设置, LostFocus”事件过程代码, 并分别为, 选课, 和, 退选, 命令按钮添加
,Click”事件过程代码, 如图 10-24~图 10-27所示 。
图 10-19 选课操作 图 10-20 退选操作
图 10-21,学生选课视图, 字段选取 图 10-22,学生选课视图, 筛选条件
图 10-23,学生选课视图, 更新条件
图 10-24~图 10-27。 P193-194
10.1.4 成绩查询实例
1,设计思想
查询是最重要的一项数据库操作,有各种各样的查询方法。本例的成绩查询是基于 SQL
语句的查询,可以查询每个学生各门课程的成绩和某一门课程各个学生的成绩。其方
法是:在表单中用单选按钮的方式选择某个学生的成绩或某门课程的成绩,在相应的
文本框中输入学号或课程号,系统对学号和课程号进行判断,如果输入是学生表和课
程表中的记录,将显示相应的查询结果;否则将给出提示,要求重新输入。
2,设计成果
学生选课程序执行过程和执行结果如图 10-28~图 10-33所示 。
3,实现方法
① 新建一个表单, 在表单上建立一个选项按钮组, 两个文本框及两个命令按钮控件 。
并选择好位置和大小 。
② 在数据环境设计器中添加学生, 选课和课程数据表 。
③ 表单控件的主要属性见表 10-4( 在表中文本框控件属性省略 ) 。
④ 打开, 代码编辑, 窗口, 设置, 表单, 的, Init”事件过程代码, 并分别为, 选项按
钮, 和, 命令按钮, 添加, Click”事件过程代码, 如图 10-34~图 10-37所示 (P195-196)

图 10-28 查询指定学生的成绩图 图 10-29 指定学生的成绩查询结果
图 10-30 查询指定课程的成绩 图 10-31 指定课程的成绩查询结果
图 10-32 输入不是学生表中的学号
图 10-33 输入不是课程表中的课程号
图 10-34~图 10-37 P195-196。
10.1.5 教师课程查询实例
1,设计思想
教师课程查询也是基于 SQL语句的查询, 它将 SQL的查询结果作为表格的
数据源 。 本例的具体实现是:在表单的文本框中输入教师的教师号, 如果
该教师号存在于教师表中, 将查询教师的授课情况, 有授课记录, 则在表
格中显示, 没有则给出提示信息 。
2,设计成果
教师课程查询程序执行过程和执行结果如图 10-38~图 10-40所示 。
3,实现方法
① 新建一个表单, 在表单上建立两个标签, 一个文本框, 两个命令按钮
和一个表格控件 。 并选择好位置和大小 。
② 在数据环境设计器中添加教师, 授课和课程数据表 。
③ 表单控件的主要属性见表 10-5( 在表中文本框控件属性省略 ) 。
④ 打开, 代码编辑, 窗口, 为, 命令按钮, 添加, Click”事件过程代码
,其中, 查询, 命令按钮的, Click”事件过程代码如图 10-41所示 。
图 10-38 输入的教师号有授课记录 图 10-39 输入的教师号没有授课记录
图 10-40 输入的教师号不在教师表中 图 10-41 查询命令按钮 Click事件代码编辑界面
10.1.6 计算平均年龄实例
1,设计思想
本例的设计思想是:通过在选项按钮中选取, 男, 或, 女,, 或, 所
有学生,, 再点击计算按钮, 在表单的下部将显示男生的或女生的, 或
男女生的平均年龄 。 当点击退出按钮后, 退出系统 。
2,设计成果
计算平均年龄程序执行过程和执行结果如图 10-42和图 10-43所示
3,实现方法
① 在表单中创建一个, 选项按钮组, 控件和两个, 命令按钮, 控件及
一个, 标签, 控件, 并选择好位置和大小 。
② 打开, 数据环境设计器,, 添加, 学生, 数据表 。
③ 表单控件的主要属性见表 10-6( 在表中文本框控件属性省略 ) 。
④ 打开, 代码编辑, 窗口, 设置, 表单, 的, Init”事件过程代码, 见
图 10-44。
为, 命令按钮, 添加, Click”事件过程代码,其中计算命令按钮的
,Click”事件过程代码如图 10-45所示。
图 10-42 计算男生平均年龄 图 10-43 计算男女生平均年龄
图 10-44 表单的 Init事件代码编辑界面
图 10-45 计算命令按钮 Click事件代码编辑界面
10.2 表单控件应用实例
在此处介绍的几个表单控件应用实例不涉及数据库应用的表单及控件在其他方面
的应用, 它展示了 Visual FoxPro应用程序除了应用在数据库系统方面之外, 在其
他应用方面也具有强大的功能 。
10.2.1 求素数实例
1,设计思想
在各种高级语言程序设计中, 经常可以看到求素数的程序, 在此处介绍的求素数
的过程是通过表单及控件的动态计算过程来完成的 。 首先在表单上建立容器控件,
当程序运行时在容器中产生标签控件, 再通过逐步排除非素数的数值标签, 剩余的
数值标签就代表求出的素数 。
2,设计成果
求素数程序执行过程和执行结果如图 10-46和图 10-47所示
3,实现方法
① 新建一个表单, 在表单上建立一个容器控件和两个命令按钮控件 。 并选择好位
置和大小 。
② 设置好控件的字体和字号 。
③ 表单控件的主要属性见表 10-7。
④打开, 代码编辑, 窗口,设置, 容器, 的, Init”事件过程代码,并分别为,
命令按钮 1”和, 命令按钮 2”添加, Click”事件过程代码,如图 10-48~图 10-50所示
。 (P199-200)
图 10-46 求素数程序执行过程 图 10-47 求素数程序执行结果
10.2.2 打字测试实例
1,设计思想
在此处介绍的打字测试实例在功能上比较简单, 主要是通过用户单击表单中的
产生命令按钮, 系统将在一个文本框中使用随机函数自动产生 30个大写英文字母
范文, 在另一个文本框中用户根据范文输入字母, 当输入字母达到 30个时, 系统
自动退出输入, 并在正确率文本框中给出准确率 。
2,设计成果
打字测试程序执行结果如图 10-51所示 。
3,实现方法
①新建一个表单,在表单上建立三个标签控件、三个文本框控件和两个命令按
钮控件。并选择好位置和大小。
② 设置好控件的字体和字号 。
③ 表单控件的主要属性见表 10-8。
④打开, 代码编辑, 窗口,为, 命令按钮 1” 添加, Click”事件过程代码,并为
,文本框 2”添加, KeyPrass”事件过程代码,如图 10-52和图 10-53所示。
图 10-51 打字测试程序执行结果 图 10-52 产生命令按钮 Click事件代码编辑界面
图 10-53,文本框 2,的 KeyPress事件代码编辑界面
10.2.3 算术计算实例
1,设计思想
由计算机来出算术运算题并给出成绩 。 其过程是:计算机自动给出一系列的 1~10
之间的操作数和加, 减, 乘, 除运算符, 学生输入该题的答案, 计算机根据学生的
答案判断正确与否, 当结束时给出成绩 。
2,设计成果
打字测试程序执行过程和执行结果如图 10-54和图 10-55所示 。
3,实现方法
① 新建一个表单, 在表单上建立一个标签控件, 一个文本框控件和一个编辑框控
件及三个命令按钮控件 。 并选择好位置和大小 。
② 设置好控件的字体和字号 。
③ 表单控件的主要属性见表 10-9 (其中文本框和编辑框控件的属性没有列出 )。
打开, 代码编辑, 窗口,设置, 表单, 的, Load”事件过程代码,并分别为, 命令
按钮 1”和, 命令按钮 2”及, 命令按 钮 3”添加, Click”事件过程代码,如图 10-56~图
10-59所示。 (P202)
图 10-55 算术计算程序执行结果
图 10-54 算术计算程序执行过程
10.2.4 数值排序实例
1,设计思想
由计算机在一个编辑框中自动产生 10个数值 (在其中排除了相同的数值 ),通
过单击排序按钮, 在另一个编辑框中按数值的大小由低到高将排序后的数值输

2,设计成果
数值排序程序执行结果如图 10-60所示
3,实现方法
① 在表单上建立两个标签控件, 两个编辑框控件和两个命令按钮控件, 并选
择好位置和大小 。
② 设置好控件的字体和字号 。
③ 表单控件的主要属性见表 10-10 (在表单编辑框的属性没有列出 )。
④ 打开, 代码编辑, 窗口, 设置, 表单, 的, Load”和, Init”事件过程代码
,如图 10-61和图 10-62所示 。
为命令按钮添加, Click”事件过程代码, 其中, 排序命令按钮的, Click”事
件过程代码如图 10-63所示 。
图 10-60 数值排序程序执行结果
思考题
1.在进行面向对象程序设计时,是否可以包含面向过程的程序设计语句?
2.一般在表单的, Load”和, Init”事件过程代码中主要应设置什么内容?
3.如果要使一个文本框的初始内容为,,,应在表单的, Load”或, Init”事件过
程代码中设置什么?
4.全局变量可在什么事件过程代码中定义?
5.为了在程序运行中尽量避免误操作,经常在设计多个命令按钮时,使某些命令
按钮不能用,应怎样进行设计?
6.在表单运行时,有多种提示信息的方式,简述其设计方法。
7.函数 Tableupdate()和 Tablerevert()的作用是什么?在使用该函数之前,应先
在表单的, Init”事件中定义什么?
8.要在表单上输出程序运行中的结果,可以有哪几种方法?
9.以本章中的例题为例比较文本框的, LostFocus”事件和, KeyPress”事件的使用
有什么不同。
10.用本章中的例子说明在表单设计中使用的面向过程程序设计语句和面向对象程
序设计语句及 SQL语句在程序中的作用。