第 4章 程序设计初步
4.1 程序文件程序文件建立与修改命令,
MODIFY COMMAND <文件名 >
程序的运行命令,
DO <文件名 >
定位输入命令,
@<行,列 > [SAY <表达式 1>] [[GET <变量名 >][DEFAULT <表达式 2>]
WAIT命令,
WAIT [<信息文本 >] [TO <内存变量 >] [WINDOW [AT <行 >,<列 >]]
[NOWAIT] [CLEAR | NOCLEAR] [TIMEOUT <数值表达式 >]
[例 4-2] WAIT命令输出信息示例。
WAIT "请检查输入内容! " WINDOW
4.2 程序的控制结构分支语句格式:
IF <逻辑表达式 >
<语句序列 1>
[ELSE
<语句序列 2>]
ENDIF
例:
USE sb
LOCATE FOR NOT 主要设备
IF FOUND() && 若查到,FOUND函数返回,T.
DISPLAY 名称,价格
REPLACE 价格 WITH 价格 *(1-0.1)
DISPLAY 名称,价格
ELSE
WAIT "无此设备! " WINDOW
ENDIF
USE
RETURN
多分枝语句格式:
DO CASE
CASE <逻辑表达式 1>
<语句序列 1>
CSAE <逻辑表达式 2>
<语句序列 2>
…
CASE <逻辑表达式 n>
<语句序列 n>
[OTHERWISE
<语句序列 n+1>]
ENDCASE
顺序结构分支结构循环结构循环语句格式与示例条件循环 步长循环
DO WHILE <逻辑表达式 >
<语句序列 >
ENDDO
FOR <内存变量 >=<数值表达式 1> TO <数值表达式 2> [STEP <数值表达式 3>]
<语句序列 >
ENDFOR? NEXT
* e4-7.prg
USE sb
DO WHILE NOT EOF( )
IF 价格 >10000
名称
ENDIF
SKIP
ENDDO
USE
* e4-9.prg
s=0 && s为累加器,初值为 0
FOR i=1 TO 100 && i为计数器,初值为 1
s=s+i && 累加
NEXT
"s=",s
扫描循环 其他
SCAN [<范围 >] [FOR< 逻辑表达式 1>] [WHILE< 逻辑表达式 2>]
<语句序列 >
ENDSCAN
循环辅助语句
LOOP语句
EXIT语句多重循环
* e4-10.prg
USE sb
SCAN FOR 价格 >10000
名称
ENDSCAN
USE
4.3 多模块程序类型 格式 调用命令子程序 [ PARAMETERS <参数表 >]
<命令序列 >
[RETURN]
DO <程序名 1> [WITH <参数表 >]
[IN <程序名 2>]
自定义函数主要在表达式中调用过程 PROCEDURE <过程名 >
[PARAMETERS <参数表 >]
<命令序列 >
[RETURN]
自定义函数
[FUNCTION <函数名 >]
[PARAMETERS <参数表 >]
<语句序列 >
[RETURN <表达式 >]
4.3.4 变量的作用域建立公共变量命令格式,PUBLIC <内存变量表 >
建立私有变量命令格式,PRIVATE [<内存变量表 >][ALL[LIKE | EXCEPT <通配符 >]]
建立本地变量命令格式,LOCAL <内存变量表 >
[例 4-17] 变量隐藏与恢复的示例。
(1) 假定已建立了如下的程序,
* e4-17.prg
PARAMETERS sj && sj为私有变量,程序调用前的 bj被隐藏起来
PRIVATE mj && mj为私有变量,程序调用前的同名变量 mj被隐藏起来
mj =3.14*sj*sj
”程序执行时的变量清单,”
LIST MEMO LIKE?j
RETURN
(2) 在命令窗口键入下列命令:
RELEASE ALL && 清除用户定义的所有内存变量
mj=0 && 在命令窗口设置的变量是公共变量
bj=3
”程序执行前的变量清单,”
LIST MEMO LIKE?j && 显示变量清单
DO e4-17 WITH bj && bj传入 e4-17
"程序执行后的变量清单," && 显示变量清单
LIST MEMO LIKE?j && 程序执行结束时,被屏蔽的变量 mj,bj被恢复
4.4 窗口设计样例
BROWSE命令定义功能键命令格式:
ON KEY [LABEL <键标号 >] [<命令 >]
窗口关闭命令
RELEASE WINDOWS [<窗口名表 >]
CLEAR WINDOWS
CLEAR ALL
信息对话框函数函数格式:
MESSAGEBOX(<字符表达式 1>[,<数值表达式 >[,<字符表达式 2>]])
[例 4-21] 设计一个可利用功能键为 SB.DBF添加记录、删除或恢复记录的浏览窗口。
* e4-21.prg
PUSH KEY CLEAR && 清除以前设置过的功能键
ON KEY LABEL f4 DO tj && F4 — 设置添加记录功能键
ON KEY LABEL f5 DO schf && F5 — 设置删除 /恢复功能键
ON KEY LABEL f6 DO pk && F6 — 清除有删除标记的记录
bs="BROWSE TITLE '设 备 表 '+' F4:添加 F5:删除 /恢复 F6:清除 '"
USE sb
&bs
PROCEDURE tj && 添加记录
APPEND BLANK && 添加一个记录
PROCEDURE schf && 删除 /恢复记录处理
IF DELETED() && 记录有删除标记返回,T.
RECALL && 当前记录有删除标记则取消它,即恢复记录
ELSE
DELETE && 当前记录无删除标记则打上删除标记
ENDIF
PROCEDURE pk && 清除有删除标记的记录
PACK && 清除有删除标记的记录,浏览窗口被关闭
&bs && 重新打开浏览窗口
4.1 程序文件程序文件建立与修改命令,
MODIFY COMMAND <文件名 >
程序的运行命令,
DO <文件名 >
定位输入命令,
@<行,列 > [SAY <表达式 1>] [[GET <变量名 >][DEFAULT <表达式 2>]
WAIT命令,
WAIT [<信息文本 >] [TO <内存变量 >] [WINDOW [AT <行 >,<列 >]]
[NOWAIT] [CLEAR | NOCLEAR] [TIMEOUT <数值表达式 >]
[例 4-2] WAIT命令输出信息示例。
WAIT "请检查输入内容! " WINDOW
4.2 程序的控制结构分支语句格式:
IF <逻辑表达式 >
<语句序列 1>
[ELSE
<语句序列 2>]
ENDIF
例:
USE sb
LOCATE FOR NOT 主要设备
IF FOUND() && 若查到,FOUND函数返回,T.
DISPLAY 名称,价格
REPLACE 价格 WITH 价格 *(1-0.1)
DISPLAY 名称,价格
ELSE
WAIT "无此设备! " WINDOW
ENDIF
USE
RETURN
多分枝语句格式:
DO CASE
CASE <逻辑表达式 1>
<语句序列 1>
CSAE <逻辑表达式 2>
<语句序列 2>
…
CASE <逻辑表达式 n>
<语句序列 n>
[OTHERWISE
<语句序列 n+1>]
ENDCASE
顺序结构分支结构循环结构循环语句格式与示例条件循环 步长循环
DO WHILE <逻辑表达式 >
<语句序列 >
ENDDO
FOR <内存变量 >=<数值表达式 1> TO <数值表达式 2> [STEP <数值表达式 3>]
<语句序列 >
ENDFOR? NEXT
* e4-7.prg
USE sb
DO WHILE NOT EOF( )
IF 价格 >10000
名称
ENDIF
SKIP
ENDDO
USE
* e4-9.prg
s=0 && s为累加器,初值为 0
FOR i=1 TO 100 && i为计数器,初值为 1
s=s+i && 累加
NEXT
"s=",s
扫描循环 其他
SCAN [<范围 >] [FOR< 逻辑表达式 1>] [WHILE< 逻辑表达式 2>]
<语句序列 >
ENDSCAN
循环辅助语句
LOOP语句
EXIT语句多重循环
* e4-10.prg
USE sb
SCAN FOR 价格 >10000
名称
ENDSCAN
USE
4.3 多模块程序类型 格式 调用命令子程序 [ PARAMETERS <参数表 >]
<命令序列 >
[RETURN]
DO <程序名 1> [WITH <参数表 >]
[IN <程序名 2>]
自定义函数主要在表达式中调用过程 PROCEDURE <过程名 >
[PARAMETERS <参数表 >]
<命令序列 >
[RETURN]
自定义函数
[FUNCTION <函数名 >]
[PARAMETERS <参数表 >]
<语句序列 >
[RETURN <表达式 >]
4.3.4 变量的作用域建立公共变量命令格式,PUBLIC <内存变量表 >
建立私有变量命令格式,PRIVATE [<内存变量表 >][ALL[LIKE | EXCEPT <通配符 >]]
建立本地变量命令格式,LOCAL <内存变量表 >
[例 4-17] 变量隐藏与恢复的示例。
(1) 假定已建立了如下的程序,
* e4-17.prg
PARAMETERS sj && sj为私有变量,程序调用前的 bj被隐藏起来
PRIVATE mj && mj为私有变量,程序调用前的同名变量 mj被隐藏起来
mj =3.14*sj*sj
”程序执行时的变量清单,”
LIST MEMO LIKE?j
RETURN
(2) 在命令窗口键入下列命令:
RELEASE ALL && 清除用户定义的所有内存变量
mj=0 && 在命令窗口设置的变量是公共变量
bj=3
”程序执行前的变量清单,”
LIST MEMO LIKE?j && 显示变量清单
DO e4-17 WITH bj && bj传入 e4-17
"程序执行后的变量清单," && 显示变量清单
LIST MEMO LIKE?j && 程序执行结束时,被屏蔽的变量 mj,bj被恢复
4.4 窗口设计样例
BROWSE命令定义功能键命令格式:
ON KEY [LABEL <键标号 >] [<命令 >]
窗口关闭命令
RELEASE WINDOWS [<窗口名表 >]
CLEAR WINDOWS
CLEAR ALL
信息对话框函数函数格式:
MESSAGEBOX(<字符表达式 1>[,<数值表达式 >[,<字符表达式 2>]])
[例 4-21] 设计一个可利用功能键为 SB.DBF添加记录、删除或恢复记录的浏览窗口。
* e4-21.prg
PUSH KEY CLEAR && 清除以前设置过的功能键
ON KEY LABEL f4 DO tj && F4 — 设置添加记录功能键
ON KEY LABEL f5 DO schf && F5 — 设置删除 /恢复功能键
ON KEY LABEL f6 DO pk && F6 — 清除有删除标记的记录
bs="BROWSE TITLE '设 备 表 '+' F4:添加 F5:删除 /恢复 F6:清除 '"
USE sb
&bs
PROCEDURE tj && 添加记录
APPEND BLANK && 添加一个记录
PROCEDURE schf && 删除 /恢复记录处理
IF DELETED() && 记录有删除标记返回,T.
RECALL && 当前记录有删除标记则取消它,即恢复记录
ELSE
DELETE && 当前记录无删除标记则打上删除标记
ENDIF
PROCEDURE pk && 清除有删除标记的记录
PACK && 清除有删除标记的记录,浏览窗口被关闭
&bs && 重新打开浏览窗口