FoxPro For Windows http://cc.synu.edu.cn 1
FoxPro程序设计
第 4讲 程序设计基础
程序的编辑与调用
输入输出程序设计
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro程序设计
程序编辑、调用
? 命令和程序方式的区别
命
令
窗
口
程
序
编
辑
窗
口
输入单条命令,
回车执行,
结果显示在背景窗。
输入若干条命令
保存程序文件
运行程序文件
成功执行返回运行结果。
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro程序设计
? 程序的建立和修改
MODIFY COMMAND [<file>|?] &&默认扩展名为,prg
或 MODIFY FILE [<file>|?] &&无默认扩展名,需指定。
程序编辑:
?书写规则,动词开头,子句任意,隔以
空格; 一行一条,<2048字符,以‘ ;?续
行;关键字可缩写前 4个,大小写任意。
?文本编辑,选定、剪切、复制、粘贴,可
用控制键,也可借助 dit菜单;
?存盘退出,按 [Ctrl+W]键。
?放弃存盘退出,按 [Esc]或 [Ctrl+Q]。
?从 File菜单上选择 "Close"。
【 例 】
程序编辑窗口
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro程序设计
? 程序文件的结构
【 例 】 简单的程序 结构:
*xsgl.prg
*2003.3
RETURN 返回程序调用处
CANCEL 结束运行,返回命令窗口。
QUIT 结束运行,退出 Foxpro。
注释命令,* |NOTE <注释内容 > (行 )
&& <注释内容 > (尾部 )
SET TALK OFF 状态设置命令,
USE STUDENT
COPY TO PX
USE PX
LIST
程序的主体:
RETURN 返回命令,
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro程序设计
? 程序的调用、执行
程序(源程序,prg) 编译目标文件 (.fxp) 执行
DO 文件名
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro程序设计
【 例 】 试编写按学号查询程序
*按学号查询 [Play52.prg]
SET TALK OFF
USE STUDENT
LOCATE FOR sno='990101'
DISPLAY
RETU
运行时在命令窗口输入:
DO play52
【 例 】 试编写将工程师工资增加
100元,然后显示的程序。
Set talk off
USE GZK
Repl 工资 with 工资 +100 for 职称 =‘工程师’
LIST for 职称 =‘工程师’
RETU
假如只给几个人增加工资呢?
需要交互语句!!
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro程序设计
【 例 】
*按学号查询 [play53.prg]
SET TALK OFF
USE STUDENT
ACCEPT "请输入学号," TO sno1
LOCATE FOR sno=sno1
DISPLAY
RETURN
只接受字符型数据!!!
提示信息
输入输出程序设计
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro程序设计
【 例 】 INPUT语句输入任意类型数据
INPUT,A=” TO A
&& 24 数值型
INPUT,请输入欲查询学生姓名:, TO XM
&&,王亚洲, 字符型
INPUT,请输入欲查询日期:, TO RQ
&& {80/10/25}
CTOD(“80/10/25”)
注意:日期、字符要加定界符
引号、括号要用半角(英文)。
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro程序设计
【 例 】
*浏览 student数据库 [play54.prg]
SET TALK OFF
USE STUDENT
WAIT
DISP
WAIT, 请按下任意键继续 ……" WINDOW TIMEOUT 5
SKIP
DISPLAY
RETURN
只接受键盘单字符
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro程序设计
? 基本输入命令
ACCEPT [<expC>] TO <memvar>
INPUT [<expC>] TO <memvar>
WAIT [<expC>] TO <memvar>[WINDOWS][TIMEOUT<expN>]
功能,中断程序运行,等待用户从键盘输入。
ACCEPT,只接收字符型数据,不必用定界符;
INPUT,接收任意类型数据,不同类型数据要用不同定界符区分。
WAIT,接收由键盘输入的单个字符。使程序暂停并显示提示信息。
。 <expC> 为提示信息,
。 TO <memvar> 输入字符保存在内存变量中,无此项,不保存。
。 WINDOWS:把提示信息中的内容显示在屏幕右上角的一个窗口内。
。 TIMEOUT<expN>:设置等待时间,到时后自动执行下一条命令。
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro程序设计
? 内存变量赋值命令 (p8)
<内存变量名 >=<表达式 > &&只能为一个变量赋值
STORE <表达式 > TO <内存变量表 > &&可同时为多个变量赋相同值
【 例 】 x=5
y=6
STORE x+y TO d &&? d
STORE 0 TO a,b,c &&? a,b,c
STORE space(8) TO xm &&?xm
name=? 大山’
name=alltrim(name)
?变量使用前必须先赋值;
?赋值时注意数据类型,内存变量与表达式的数据类型要一致;
?允许重新赋值,重新赋值时可以改变数据类型。
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro程序设计
? 基本输出命令
<expr list> 换行输出表达式的值(当前行的下一行)
<expr list> 不换行输出表达式的值(当前行)
【 例 】
*按学号查询 [play55.prg]
SET TALK OFF
USE STUDENT
ACCEPT "请输入学号," TO bh
LOCATE FOR sno=bh
"学号,",bh
,姓名:”,name
,出生日期:”,birthday
USE
SET TALK ON
RETURN 能否在指定位置输出?
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro程序设计
? 格式输出命令
@ <row,col> [SAY <expr>]
[FUNCTION<expC1>]
[PICTURE <expC2>]
说明:
? <row,col> 输出数据起始行、列坐标。( CGA 0-24,0-79)
? SAY <expr> 从指定的坐标位置输出表达式 <expr>。
? FUNCTION <expC1> 控制输出格式,单一功能符控制所有输出项
格式。功能符见表 5.2( p81),控制符要用字符定界符括起来。
? PICTURE <expC2> 与 FUNC类似,不同是每个控制符只限制指定
位的单个字符。格式符如表 5.3所示。使用功能符时,功能符前要
加 @号。
0,0 0,99
33,0 33,99
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro程序设计
【 例 5.13】 执行下列命令:
SET TALK OFF
m="abcdefg"
n=1234.567
CLEAR
@3,10 SAY m
@4,10 SAY n &&数值型整数部分宽度默认为 10
@5,10 SAY n FUNCTION "$" &&显示货币符号
@6,10 SAY n PICTURE "9999.99"
@7,10 SAY m PICTURE "@!" &&功能符前加 @,小写转大写。
@8,10 SAY m PICTURE "!!!!" &&小写转大写
@9,10 SAY m PICTURE "@s4" &&字符型数据显示宽度限制为 4
RETURN
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro程序设计
【 例 5.14】 用格式命令对 student数据库编写按姓名查询程序。
SET TALK OFF
USE student
CLEAR
ACCEPT,输入姓名,” TO xm
LOCATE FOR name=xm
@4,10 SAY "学号,"+sno
@4,30 SAY "姓名,"+name &&字符串连接用加号
@5,10 SAY "性别,"+sex
@5,30 SAY "出生日期,"+DTOC(birthday) &&注意数据类型一致
@6,10 SAY "成绩," +STR(score,3)
@6,30 SAY "奖学金,"+STR(schoship,3)
USE
SET TALK ON
RETURN
字符转日期函数,CTOD(<字符表达式 >)
日期转字符函数,DTOC(<日期型表达 >)
数值转字符串函数,STR(<数值表达式 >[,<长度 >][,<小数位数 >]
字符串转数值函数,VAL(<字符串表达式 >)
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro程序设计
? 格式输入命令
@ <row,col> [SAY <expr>] GET <memvar>|<field>
……
READ
说明:
? GET 可以是内存变量、数组、字段。
? GET 由 READ命令激活,才能用键盘输入数据修改变量的值。
? RANGE<expr3>,<expr4> 指定输入数据的范围 (下、上限)。
? VALID<expL1|expN1>[ERROR<expC4>]为 GET编辑项设置校验。
校验表达式可以是逻辑型的或数值型的。
如校验表达式值为假或为零,则报警并显示出错信息,
选择 ERROR子句,系统以字符串 <expC4>为出错提示信息,
省略 ERROR项,系统默认错误提示是 " Invalid Input"。
按空格键可重新恢复输入数据。
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro程序设计
【 例 5.15】 用格式输入命令给数据库文件追加记录。
SET TALK OFF
USE student
APPEND BLANK
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex VALID sex$ "男女 " ERROR "应为男或女 "
@5,30 SAY "出生日期," GET birthday RANGE {86/01/01},{90/01/01}
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
READ &&激活上述变量,可以修改。
USE
SET TALK ON
RETURN
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro程序设计
? 清屏幕与画图命令
清屏幕命令,
@<row1,col1> [CLEAR [TO<row2,col2>] ]
该命令有三种使用方法:
(1)@<row1,col1> 在 row1行中清除从 col1列开始的所有字符。
(2)@<row1,col1> CLEAR 清除 <row1,col1>为左上角直到屏幕右下角。
(3)@<row1,col1> CLEAR TO <row2,col2> 清除屏幕上矩形区域。
CLEAR &&清屏幕
CLEAR ALL &&清内存
CLEAR GETS &&释放 GETS
CLEAR READ &&终止 READ
Clear
Set color to w/R
@ 5,15
@ 15,60 clear
@ 20,30 clear to 25,50
Wait
Set color to
clear
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro程序设计
画矩形框命令,
@<row1,col1>,<row2,col2> BOX
说明:
? <row1,col1>和 <row2,col2>分别为矩形框左上角和右下
角的坐标。
? 若 row1=row2则紧缩为一条横线
col1=col2则紧缩为一条竖线。
【 例 】 用 @…BOX 命令在屏幕上画个矩形框。
CLEAR
@3,10,5,30 BOX
FoxPro程序设计
第 4讲 程序设计基础
程序的编辑与调用
输入输出程序设计
FoxPro For Windows http://cc.synu.edu.cn 2
FoxPro程序设计
程序编辑、调用
? 命令和程序方式的区别
命
令
窗
口
程
序
编
辑
窗
口
输入单条命令,
回车执行,
结果显示在背景窗。
输入若干条命令
保存程序文件
运行程序文件
成功执行返回运行结果。
FoxPro For Windows http://cc.synu.edu.cn 3
FoxPro程序设计
? 程序的建立和修改
MODIFY COMMAND [<file>|?] &&默认扩展名为,prg
或 MODIFY FILE [<file>|?] &&无默认扩展名,需指定。
程序编辑:
?书写规则,动词开头,子句任意,隔以
空格; 一行一条,<2048字符,以‘ ;?续
行;关键字可缩写前 4个,大小写任意。
?文本编辑,选定、剪切、复制、粘贴,可
用控制键,也可借助 dit菜单;
?存盘退出,按 [Ctrl+W]键。
?放弃存盘退出,按 [Esc]或 [Ctrl+Q]。
?从 File菜单上选择 "Close"。
【 例 】
程序编辑窗口
FoxPro For Windows http://cc.synu.edu.cn 4
FoxPro程序设计
? 程序文件的结构
【 例 】 简单的程序 结构:
*xsgl.prg
*2003.3
RETURN 返回程序调用处
CANCEL 结束运行,返回命令窗口。
QUIT 结束运行,退出 Foxpro。
注释命令,* |NOTE <注释内容 > (行 )
&& <注释内容 > (尾部 )
SET TALK OFF 状态设置命令,
USE STUDENT
COPY TO PX
USE PX
LIST
程序的主体:
RETURN 返回命令,
FoxPro For Windows http://cc.synu.edu.cn 5
FoxPro程序设计
? 程序的调用、执行
程序(源程序,prg) 编译目标文件 (.fxp) 执行
DO 文件名
FoxPro For Windows http://cc.synu.edu.cn 6
FoxPro程序设计
【 例 】 试编写按学号查询程序
*按学号查询 [Play52.prg]
SET TALK OFF
USE STUDENT
LOCATE FOR sno='990101'
DISPLAY
RETU
运行时在命令窗口输入:
DO play52
【 例 】 试编写将工程师工资增加
100元,然后显示的程序。
Set talk off
USE GZK
Repl 工资 with 工资 +100 for 职称 =‘工程师’
LIST for 职称 =‘工程师’
RETU
假如只给几个人增加工资呢?
需要交互语句!!
FoxPro For Windows http://cc.synu.edu.cn 7
FoxPro程序设计
【 例 】
*按学号查询 [play53.prg]
SET TALK OFF
USE STUDENT
ACCEPT "请输入学号," TO sno1
LOCATE FOR sno=sno1
DISPLAY
RETURN
只接受字符型数据!!!
提示信息
输入输出程序设计
FoxPro For Windows http://cc.synu.edu.cn 8
FoxPro程序设计
【 例 】 INPUT语句输入任意类型数据
INPUT,A=” TO A
&& 24 数值型
INPUT,请输入欲查询学生姓名:, TO XM
&&,王亚洲, 字符型
INPUT,请输入欲查询日期:, TO RQ
&& {80/10/25}
CTOD(“80/10/25”)
注意:日期、字符要加定界符
引号、括号要用半角(英文)。
FoxPro For Windows http://cc.synu.edu.cn 9
FoxPro程序设计
【 例 】
*浏览 student数据库 [play54.prg]
SET TALK OFF
USE STUDENT
WAIT
DISP
WAIT, 请按下任意键继续 ……" WINDOW TIMEOUT 5
SKIP
DISPLAY
RETURN
只接受键盘单字符
FoxPro For Windows http://cc.synu.edu.cn 10
FoxPro程序设计
? 基本输入命令
ACCEPT [<expC>] TO <memvar>
INPUT [<expC>] TO <memvar>
WAIT [<expC>] TO <memvar>[WINDOWS][TIMEOUT<expN>]
功能,中断程序运行,等待用户从键盘输入。
ACCEPT,只接收字符型数据,不必用定界符;
INPUT,接收任意类型数据,不同类型数据要用不同定界符区分。
WAIT,接收由键盘输入的单个字符。使程序暂停并显示提示信息。
。 <expC> 为提示信息,
。 TO <memvar> 输入字符保存在内存变量中,无此项,不保存。
。 WINDOWS:把提示信息中的内容显示在屏幕右上角的一个窗口内。
。 TIMEOUT<expN>:设置等待时间,到时后自动执行下一条命令。
FoxPro For Windows http://cc.synu.edu.cn 11
FoxPro程序设计
? 内存变量赋值命令 (p8)
<内存变量名 >=<表达式 > &&只能为一个变量赋值
STORE <表达式 > TO <内存变量表 > &&可同时为多个变量赋相同值
【 例 】 x=5
y=6
STORE x+y TO d &&? d
STORE 0 TO a,b,c &&? a,b,c
STORE space(8) TO xm &&?xm
name=? 大山’
name=alltrim(name)
?变量使用前必须先赋值;
?赋值时注意数据类型,内存变量与表达式的数据类型要一致;
?允许重新赋值,重新赋值时可以改变数据类型。
FoxPro For Windows http://cc.synu.edu.cn 12
FoxPro程序设计
? 基本输出命令
<expr list> 换行输出表达式的值(当前行的下一行)
<expr list> 不换行输出表达式的值(当前行)
【 例 】
*按学号查询 [play55.prg]
SET TALK OFF
USE STUDENT
ACCEPT "请输入学号," TO bh
LOCATE FOR sno=bh
"学号,",bh
,姓名:”,name
,出生日期:”,birthday
USE
SET TALK ON
RETURN 能否在指定位置输出?
FoxPro For Windows http://cc.synu.edu.cn 13
FoxPro程序设计
? 格式输出命令
@ <row,col> [SAY <expr>]
[FUNCTION<expC1>]
[PICTURE <expC2>]
说明:
? <row,col> 输出数据起始行、列坐标。( CGA 0-24,0-79)
? SAY <expr> 从指定的坐标位置输出表达式 <expr>。
? FUNCTION <expC1> 控制输出格式,单一功能符控制所有输出项
格式。功能符见表 5.2( p81),控制符要用字符定界符括起来。
? PICTURE <expC2> 与 FUNC类似,不同是每个控制符只限制指定
位的单个字符。格式符如表 5.3所示。使用功能符时,功能符前要
加 @号。
0,0 0,99
33,0 33,99
FoxPro For Windows http://cc.synu.edu.cn 14
FoxPro程序设计
【 例 5.13】 执行下列命令:
SET TALK OFF
m="abcdefg"
n=1234.567
CLEAR
@3,10 SAY m
@4,10 SAY n &&数值型整数部分宽度默认为 10
@5,10 SAY n FUNCTION "$" &&显示货币符号
@6,10 SAY n PICTURE "9999.99"
@7,10 SAY m PICTURE "@!" &&功能符前加 @,小写转大写。
@8,10 SAY m PICTURE "!!!!" &&小写转大写
@9,10 SAY m PICTURE "@s4" &&字符型数据显示宽度限制为 4
RETURN
FoxPro For Windows http://cc.synu.edu.cn 15
FoxPro程序设计
【 例 5.14】 用格式命令对 student数据库编写按姓名查询程序。
SET TALK OFF
USE student
CLEAR
ACCEPT,输入姓名,” TO xm
LOCATE FOR name=xm
@4,10 SAY "学号,"+sno
@4,30 SAY "姓名,"+name &&字符串连接用加号
@5,10 SAY "性别,"+sex
@5,30 SAY "出生日期,"+DTOC(birthday) &&注意数据类型一致
@6,10 SAY "成绩," +STR(score,3)
@6,30 SAY "奖学金,"+STR(schoship,3)
USE
SET TALK ON
RETURN
字符转日期函数,CTOD(<字符表达式 >)
日期转字符函数,DTOC(<日期型表达 >)
数值转字符串函数,STR(<数值表达式 >[,<长度 >][,<小数位数 >]
字符串转数值函数,VAL(<字符串表达式 >)
FoxPro For Windows http://cc.synu.edu.cn 16
FoxPro程序设计
? 格式输入命令
@ <row,col> [SAY <expr>] GET <memvar>|<field>
……
READ
说明:
? GET 可以是内存变量、数组、字段。
? GET 由 READ命令激活,才能用键盘输入数据修改变量的值。
? RANGE<expr3>,<expr4> 指定输入数据的范围 (下、上限)。
? VALID<expL1|expN1>[ERROR<expC4>]为 GET编辑项设置校验。
校验表达式可以是逻辑型的或数值型的。
如校验表达式值为假或为零,则报警并显示出错信息,
选择 ERROR子句,系统以字符串 <expC4>为出错提示信息,
省略 ERROR项,系统默认错误提示是 " Invalid Input"。
按空格键可重新恢复输入数据。
FoxPro For Windows http://cc.synu.edu.cn 17
FoxPro程序设计
【 例 5.15】 用格式输入命令给数据库文件追加记录。
SET TALK OFF
USE student
APPEND BLANK
@4,10 SAY "学号," GET sno
@4,30 SAY "姓名," GET name
@5,10 SAY "性别," GET sex VALID sex$ "男女 " ERROR "应为男或女 "
@5,30 SAY "出生日期," GET birthday RANGE {86/01/01},{90/01/01}
@6,10 SAY "成绩," GET score
@6,30 SAY "奖学金," GET schoship
@7,10 SAY "简历," GET experience
READ &&激活上述变量,可以修改。
USE
SET TALK ON
RETURN
FoxPro For Windows http://cc.synu.edu.cn 18
FoxPro程序设计
? 清屏幕与画图命令
清屏幕命令,
@<row1,col1> [CLEAR [TO<row2,col2>] ]
该命令有三种使用方法:
(1)@<row1,col1> 在 row1行中清除从 col1列开始的所有字符。
(2)@<row1,col1> CLEAR 清除 <row1,col1>为左上角直到屏幕右下角。
(3)@<row1,col1> CLEAR TO <row2,col2> 清除屏幕上矩形区域。
CLEAR &&清屏幕
CLEAR ALL &&清内存
CLEAR GETS &&释放 GETS
CLEAR READ &&终止 READ
Clear
Set color to w/R
@ 5,15
@ 15,60 clear
@ 20,30 clear to 25,50
Wait
Set color to
clear
FoxPro For Windows http://cc.synu.edu.cn 19
FoxPro程序设计
画矩形框命令,
@<row1,col1>,<row2,col2> BOX
说明:
? <row1,col1>和 <row2,col2>分别为矩形框左上角和右下
角的坐标。
? 若 row1=row2则紧缩为一条横线
col1=col2则紧缩为一条竖线。
【 例 】 用 @…BOX 命令在屏幕上画个矩形框。
CLEAR
@3,10,5,30 BOX