第 7章 FoxPro程序设计初步
第 7章 FoxPro程序设计初步
7.1 FoxPro程序 — 命令文件的
建立和执行
7.2 流程图介绍
7.3 顺 序 执 行
7.4 判断分支
7.5 几个有用的命令
第 7章 FoxPro程序设计初步
7.1 FoxPro程序 — 命令文件的建立和执行
7.1.1建立和编辑命令文件
1.用 MODIFYCOMMAND命令建立命令文件
常用命令格式,MODIFYCOMMAND[ 〈 文件名 〉 ]
文件名的默认扩展名为 PRG。 系统首先在磁盘上
寻找该文件, 若未找到, 则建立之, 在屏幕上打开一
编辑窗, 供用户输入内容;若找到, 则在屏幕上打开
一编辑窗, 把该文件内容调至编辑窗, 由用户进行编
辑, 并在磁盘上复制一同名, 同内容的 BAK文件 。
第 7章 FoxPro程序设计初步
编辑结束时, 可用 ^End或 ^W结束命令并存盘 。 也
可用 Esc键作废编辑并结束命令 。
2,在操作系统下,利用其它编辑软件建立编辑命令
文件
FoxPro的命令文件是 ASCII码文件,可用其它编辑
程序如,WORDSTAR,WPS等建立和编辑之 。
第 7章 FoxPro程序设计初步
7.1.2执行命令文件
运行 FoxPro的程序有两种方式:一种是处于 FoxPro
的控制下;另一种则是在操作系统状态下执行的方式 。
1,在 FoxPro的命令窗口 (COMMAND窗口 )中执行
命令格式,DO〈 命令文件名 〉
此命令将首先打开该 〈 命令文件名 〉,然后从第一
条语句开始执行 。 执行完毕,自动关闭此命令文件,回到
命令窗口 。
2,在操作系统状态下执行
对于 FoxPro的命令文件, 在操作系统状态下, 键入
第 7章 FoxPro程序设计初步
FOX〈 命令文件名 〉
之后, 由 DOS自动装入 FoxPro并执行命令文件 。
省略扩展名时的执行情况同 FoxPro命令窗中的 DO命令 。
3,通过 CONFIG.FP文件执行
在 FoxPro系统中设置 CONFIG.FP文件,并在此文件
中设置要执行的命令文件名 。 然后,系统每次在操作系
统状态下调入 FoxPro时,都将首先自动打开并执行此命
令程序 。 执行完毕,关闭此命令程序,系统处于 FoxPro命
令状态 。 这时,调入 FoxPro的工作才算完成 。
第 7章 FoxPro程序设计初步
可利用任何文本编辑程序建立 CONFIG.FP文件 。 在
CONFIG.FP中设置
COMMAND=DO〈 命令文件名 〉
第 7章 FoxPro程序设计初步
7.2 流程图介绍
在编制程序时,尤其是编制复杂程序时,常用流程图
来进行程序设计和介绍程序的结构 。 流程图是形象地
描述程序设计思想的好方法,它的特点是比较直观, 清
晰, 一目了然 。
本书中,我们使用结构化程序流程图的三种基本图
形,如图 7— 1所示。
第 7章 FoxPro程序设计初步
图 7—1
(a)顺序结构; (b)分支结构;
(c)循环结构
第 7章 FoxPro程序设计初步
图 7—1中 (a),(b),(c)分别对应顺序, 分支, 循环
三种程序流程 。
图 7—1(a)中的每个矩形框对应输入, 输出及处理功
能 。 它们的执行顺序按从上至下进行, 反映了程序结
构的顺序情形 。
图 7—1(b)中, 程序的执行出现了分支, 即根据不
同情况 (条件 ),执行不同功能 。 (b1)反映了二分支即两
种情况的情形, (b2)反映了多分支即可能出现多种情况
的情形 。 (b)中的三角形是一种分支, 当满足该条件时,
执行该分支下面的功能, 而其余分支下的功能不论是
否满足条件, 一律不被执行 。
第 7章 FoxPro程序设计初步
图 7—1(c)是循环结构图形, 图形中包含顶部和左侧
区域是循环的条件和范围 。 顶部的条件如果满足, 则
执行范围给定的语句 。 然后, 再次返回顶部, 判断条
件是否满足:若满足, 则继续执行以下语句;若不满
足, 则退出循环, 结束循环结构 。
第 7章 FoxPro程序设计初步
7.3 顺 序 执 行
7.3.1顺序执行语句
1.SETTALK命令
基本命令格式,SET TALK ON/OFF
在 FoxPro中,有很多 SET命令,其中很大一部分是用以
转换状态的 。 本命令就是转换 TALK的状态的 。
2,SETP RINTER命令
基本命令格式,SET PRINTER OFF/ON
PRINTER的初始状态为 OFF。 当 PRINTER状态为
OFF时,关闭向打印机的输出 。 执行 SET PRINTER ON
第 7章 FoxPro程序设计初步
命令后,PRINTER状态为 ON,此时,输出结果将传送到打
印机打印输出 。
7.3.2顺序执行程序入门
完全由顺序执行语句组成的程序称为顺序执行程
序 。 顺序执行方式是最简单的,也是最基本, 最常见的
一种程序执行方式 。
第 7章 FoxPro程序设计初步
7.3.3@命令的基本功能
@命令的功能很强,这里只介绍它的基本功能 。
1.显示器的坐标
不同计算机系统的显示器坐标系统是有差别的,用
户在使用时,必须了解实际的坐标系统 。 图 7—2给出了
一个显示器桌面的显示坐标系 。
图 7—2中,x表示行,取值 0~24y表示列,取值 0~79。 桌
面左上角坐标为 (0,0)。
2,屏幕输出格式设计命令的基本格式
利用输出格式设计命令,用户可以在桌面的任何一
个坐标点上显示有关内容 。
第 7章 FoxPro程序设计初步
例 1 G1.PRG程序如下:
CLEAR
@1,20SAY“职工号,
@2,10SAY“3*5+2=”
@ROW(),COL()SAY3*5+2
@ROW()+1,5SAY“这是一本书,
执行后,屏幕显示如下,
职工号
3*5+2=17
这是一本书
第 7章 FoxPro程序设计初步
第一条 @命令在第 1行第 20列开始显示,职工号 。
第二条 @命令在第 2行第 10列开始显示,3*5+2=。
第三条 @命令在光标当前位置开始显示表达式
3*5+2的值,17。
第四条 @命令在下一行第 5列开始显示,这是一本书。
第 7章 FoxPro程序设计初步
3,屏幕输入格式设计命令的基本格式
命令基本格式,@〈 行,列 〉 [ SAY〈 表达式 1〉 ]
GET〈 变量名 〉 [ DEFAULT〈 表达式 2〉 ]
〈 变量名 〉 可以是一个内存变量, 下标变量
或当前打开库文件的一个字段名 。
该命令将从 〈 行,列 〉 规定的坐标开始,首先输出
SAY子句 (若存在 )〈 表达式 1〉 的值,空一格后,再接着输
出 GET子句中 〈 变量名 〉 的值 。
第 7章 FoxPro程序设计初步
DEFAULT〈 表达式 2〉,若 GET子句中的 〈 变量
名 〉 不存在,则命令中必须包含本子句 。 本子句将建立
一个值为 〈 表达式 2〉 的变量 。 若 〈 变量 〉 存在,本子句
被忽略 。
第 7章 FoxPro程序设计初步
例 2 G2.PRG程序如下,
USE职工
CLEAR
@3,5SAY“职工姓名为,”GET姓名
@4,5SAY“月工资为,”GET工资
执行后,屏幕显示如下,
职工姓名为,胡一民 1
月工资为,8500
第 7章 FoxPro程序设计初步
4,READ命令的基本功能
READ命令有着丰富的功能,这里仅介绍它的基本功
能 。 READ命令的基本格式为,
READ
执行 READ命令时,光标返回到屏幕上第一条 @命令中
GET子句的变量值处 。 若用户键入新值,该变量值即被新
值代替若仅以回车键响应,则原变量值不变 。 用新数据取
代旧数据时,以回车键或达到原定义的变量长度为结束 。
然后,光标跳到下一条 @命令中 GET子句的变量值处,用户
重复上述修改过程,直至 READ命令前所有 @命令中变量
都修改后,结束此命令,并把各变量新值送回各变量 。
第 7章 FoxPro程序设计初步
例 3 G3.PRG程序如下,
USE 职工
CLEAR
@3,5SAY“职工姓名为,”GET姓名
@4,5SAY“月工资为,”GET工资
READ
程序执行后,屏幕上显示,
职工姓名为,胡一民 1
月工资为,8500
这时光标在, 姓名, 字段值, 胡一民 1”的首字符
处,用户可修改两字段值 。
第 7章 FoxPro程序设计初步
7.3.4顺序执行程序
对于 7.3.2的例,我们进行一些修改 。
例 7.3.2例程序修改后,内容如下,
SETTALKOFF
USE
XM=“”
XZC=“”
@10,10SAY“请输入姓名,”TO XM
@12,10SAY“请输入新职称,”TO XZC
READ
第 7章 FoxPro程序设计初步
LOCA FOR姓名 =XM
REPL职称 WITHXZC
DISP
USE
SET TALK ON
上述程序不能对输入值进行分析 。 判断分支语句可
解决此问题 。
第 7章 FoxPro程序设计初步
7.4 判断分支
7.4.1条件转向语句 ——IF…ENDIF
这是一种简单的分支语句,语句格式如下,
IF〈 条件表达式 〉
〈 语句行序列 〉
ENDIF
〈 条件表达式 〉 值为, 真, 时,
顺序执行 IF和 ENDIF间的语句行序列, 然后再执行
ENDIF 后的语句;若其值为, 假, 时, 则直接跳到
ENDIF后面的语句继续执行 。
第 7章 FoxPro程序设计初步
IF和 ENDIF必须成对出现 。 图 7—3给出了此语句的
流程 。
图 7— 3 条件转向语句流程图
第 7章 FoxPro程序设计初步
图 7—4 本页例的流程图
第 7章 FoxPro程序设计初步
7.4.2 条件选择转向语句 ——IF...ELSE…ENDIF
语句格式,IF[WB]〈 条件表达式 〉
〈 语句行序列 1〉
ELSE
〈 语句行序列 2〉
ENDIF
执行此语句时,计算机首先判断条件表达式的值是
否为真:若为真,执行 〈 语句行序列 1〉,然后跳过 〈 语
句行序列 2〉,从 ENDIF后面的语句开始继续执行若条件
表达式的值为假,则直接跳转执行 〈 语句行序列 2〉,然
后再执行 ENDIF后面的语句 。 流程图如图 7— 5所示 。
第 7章 FoxPro程序设计初步
图 7— 5条件选择转向语句的流程图
第 7章 FoxPro程序设计初步
图 7— 6按本例题意编制的流程图
第 7章 FoxPro程序设计初步
7.4.3 IF语句的嵌套
一个 IF语句可以有两个完整的分量:其一是从 IF
〈 条件表达式 〉 到 ELSE之间的 〈 语句行序列 1〉 ;其
二是从 ELSE到 ENDIF之间的 〈 语句行序列 2〉 (无 ELSE
时,IF语句只有一个完整的分量,即从 IF〈 条件表达式 〉
到 ENDIF之间的语句行序列 )。 所谓 IF语句的嵌套,是指
在一个 IF语句的一个完整的分量中,包含了另一个完整
的 IF 语句 。
第 7章 FoxPro程序设计初步
例 为鼓励存款,对定期存款时间少于一年的,利率
为 3%等于或大于一年而少于三年的,利率为 5%等于或
大于三年而少于五年的,利率为 7%五年以上的,利率为
9%。
按题意画流程图如图 7—7所示 。
程序清单如下,
SET TALK OFF
CLEAR
NX=0
@5,10SAY“输入定期年限,”GETNX
第 7章 FoxPro程序设计初步
READ
IF NX< 1
LL=0.03
ELSE
IF NX< 3
LL=0.05
ELSE
IF NX< 5
LL=0.07
ELSE
LL=0.09
ENDIF
ENDIF
ENDIF
“利率 =”,LL
SET TALK ON
第 7章 FoxPro程序设计初步
图 7— 7 按本例题意编制的流程图
第 7章 FoxPro程序设计初步
7.4.4情况语句 ——DOCASE...ENDCASE
情况语句中有许多成分语句,它根据条件的具体情
况选择执行其中的某一个成分语句,它是 IF… ENDIF语
句的发展 。
情况语句的格式如下,
DO CASE
CASE 〈 条件表达式 1〉
〈 语句行序列 1〉
CASE 〈 条件表达式 2〉
〈 语句行序列 2〉

第 7章 FoxPro程序设计初步
CASE〈 条件表达式 n〉
〈 语句行序列 n〉
[ OTHERWISE语句行序列 〉 ]
ENDCASE
在情况语句的格式中,各条件表达式的值都必须是
逻辑值, 真, 或, 假, 。 OTHERWISE语句及其后面
的语句行序列为可选项 。 有此可选项时,它必须放在所
有成分语句之后,ENDCASE之前 。 执行情况语句时,系
统依次查看每一个 CASE的条件,碰到第一个条件成立
者,系统则执行该条件下的语句行序列 。
第 7章 FoxPro程序设计初步
在情况语句中,如果条件为真的情况多于一个,则仅
仅执行第一个条件为真者 。
DO CASE和 ENDCASE必须成对出现 。
在 DO CASE与第一个 CASE之间的任何语句,永远
都不执行 。
情况语句流程图如图 7— 8所示。
第 7章 FoxPro程序设计初步
图 7— 8 情况语句流程图
第 7章 FoxPro程序设计初步
例 1 用情况语句重新编制 74.3中的例,比较情况语句
与条件转向语句的用法 。 依据情况语句流程图,重新画
流程图如图 7— 9。
图 7— 9 例 1的流程图
第 7章 FoxPro程序设计初步
程序清单如下,
SETTALKOFF
CLEAR
NX=0
@5,10SAY“输入定期年限,”GETNX
READ
DOCASE
CASENX< 1
LL=003
CASENX< 3
LL=005
CASENX< 5
LL=007
OTHERWISE
LL=009
ENDCASE
“利率 =”,LL
SETTALKON
第 7章 FoxPro程序设计初步
DO CASE语句也可以嵌套 。 在 DOCASE语句中,语
句行序列 1,语句行序列 2,…,都是完整的分量 。 所谓
DOCASE语句的嵌套,是指在一个 DOCASE语句的一个
完整的分量中,包含了另一个完整的 DOCASE语句 。 但
在 DOCASE与第一个 CASE之间不能有任何语句 。
DO CASE语句和 IF语句可以互相嵌套,即一个语句
的一个完整分量中包含了另一个完整的语句 。 下面,结
合一个实例来看一下它们互相嵌套的情况 。
第 7章 FoxPro程序设计初步
例 2 已知一元二次方程 AX 2+BX+C=0,输入 A、
B,C的值后,根据不同情况计算并输出方程的根 。
分析,根据 A,B,C的输入数据,可分成如下几种
情况,
(1) A和 B均为零,输出, 输入数据错误, 。
(2) A为零,B不为零,输出方程的单根 。
(3) A不为零,C为零,输出方程的双根,其中一个根为
零 。
(4) A和 C均不为零,又可分做三种情况,
第 7章 FoxPro程序设计初步
① 判别式 D为零,输出方程的两个相等实根;
② 判别式 D大于零,输出方程的两个不等实根;
③ 判别式 D小于零,输出方程的两个不等复根 。
根据题意,绘制流程图如图 7— 10。
第 7章 FoxPro程序设计初步
图 7— 10 例 2的流程图
第 7章 FoxPro程序设计初步
7.5 几个有用的命令
7.5.1键盘输入单字符语句 —— WAIT
语句基本格式, WAIT[, 提示信息, ]
[ TO〈 内存变量名 〉 ]
WAIT语句首先显示提示信息 (若语句中有提示信
息项,则显示语句中给定提示信息否则,显示 WAIT语句
固有提示信息,按任一键继续 ……),接着暂停程序的执行,
等待用户键入另一键 。
第 7章 FoxPro程序设计初步
用户按下另一键后,这个键的值 (若是回车键或不能
打印键或组合键,值为空串 )作为一个单字符字符串,送
〈 内存变量名 〉 (若选择了 TO子句的话,它可以是一个
内存变量,也可以是一个下标变量 。 如果内存中不存在,
则自动生成之 )。 WAIT语句执行完毕,程序继续执行 。
WAIT语句响应速度快,它只接受单个字符,并且不
需要再按回车键 。
WAIT语句常用于两种情况,
(1)用于只需从键盘输入单个字符的第一种情况 。
现举例说明 。
第 7章 FoxPro程序设计初步
(2) WAIT语句常用的第二种情况 。
当程序执行的结果在屏幕上显示出来后,为了让用
户能看清所显示的内容 (由于程序在不断执行,屏幕上显
示的结果会一闪而过 ),在程序的适当位置可以用 WAIT
语句使屏幕显示的结果停留下来,当你看清屏幕上的内
容之后,再按任意键让程序继续执行 。 在这种情况
下,WAIT语句具有独特的优越性 。
第 7章 FoxPro程序设计初步
7.5.2 键盘输入字符串语句 ——ACCEPT
语句格式,ACCEPT[, 提示信息, ] TO
〈 内存变量名 〉
执行本命令时, 首先输出 〈 提示信息 〉 (若存在 );
然后等待用户从键盘键入数据 。 用户输入完数据, 按回
车键后, 系统把用户输入的数据作为一个字符串 (用户
不要输入字符括号 )送给 〈 内存变量名 〉 指定的变量 。
用户也可键入一个字符表达式, 系统将其值送指定变量 。
第 7章 FoxPro程序设计初步
7.5.3键盘输入语句 ——INPUT
格式,INPUT[, 提示信息, ] TO〈 内存变量名 〉
执行时, 首先在桌面输出, 提示信息,, 并等待用
户键入数据;用户按回车键后, 即把用户键入的表达
式求值, 送 〈 内存变量名 〉 。 表达式是什么类型,
〈 内存变量名 〉 即是什么类型 。
第 7章 FoxPro程序设计初步
7.5.4 中止程序执行语句 ——CANCEL
中止程序执行语句格式,CANCEL
该语句将中止正在执行的程序,把控制权返回给
COMMAND窗口 。 CANCEL将释放所有局部性内存变
量 (见第 10章 )。
在程序设计中,常用 CANCEL语句在某种条件满足
时中止程序的执行,因此它常与条件选择语句一起使用 。
下面举一个例子,主要看 CANCEL语句的应用 。
第 7章 FoxPro程序设计初步
7.5.5 程序注释语句 ——NOTE/*
格式 1:NOTE〈 注释字符 〉
格式 2:*〈 注释字符 〉
注释语句的作用是对程序作注释,不执行任何操作 。