Visual FoxPro的工作方式.docx
《Visual FoxPro的工作方式.docx》由会员分享,可在线阅读,更多相关《Visual FoxPro的工作方式.docx(40页珍藏版)》请在冰豆网上搜索。
![Visual FoxPro的工作方式.docx](https://file1.bdocx.com/fileroot1/2023-1/31/81ef9e6a-fb51-4d9a-b221-9a032974561a/81ef9e6a-fb51-4d9a-b221-9a032974561a1.gif)
VisualFoxPro的工作方式
VisualFoxPro的工作方式
VisualFoxPro系统提供有三种工作方式:
即单命令方式、菜单方式及程序文件方式。
1.单命令方式
VisualFoxPro单命令方式是利用Command窗口来实现的。
用户通过Command窗口输入命令,并执行操作。
在Command窗口中,可以输入单个的操作命令和系统命令,完成对数据库的操作管理和系统环境的设置;也可以建立命令文件及运行命令文件。
Command窗口不仅是VisualFoxPro命令的执行窗口,也是VisualFoxPro命令文件的编辑窗口。
所谓单命令方式,即输入一条命令,完成一个操作的工作方式。
2.菜单方式
在VisualFoxPro环境下,也可以通过系统提供的菜单选项,对数据库资源进行操作管理和对系统环境进行设置;并通过菜单建立命令文件及运行命令文件。
所谓菜单方式,即通过打开不同的菜单选择并完成不同的操作。
我们在以前各章所讲的内容其实都可说是菜单方式。
3.程序文件方式
程序文件(简称程序)也叫做命令文件。
运用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库资源进行操作管理的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的命令文件中,然后再通过菜单方式或命令方式运行该命令文件。
所谓命令方式,即通过程序文件中的命令完成不同的操作。
第一节程序文件
一、VisualFoxPro程序的几点说明
1.注释语句
【格式1】NOTE<注释内容>
【格式2】*<注释内容>
【格式3】&&<注释内容>
【功能】增强程序文件的易读性或放弃<注释内容>中语句的执行
2.对话开关语句
【格式】SETTALKOFF|ON
【功能】关闭或打开命令执行时的对话开关
3.命令的分行
VisualFoxPro程序是命令行的序列,每个命令都以回车键结束,一行只能写一条命令;若一条命令太长,一行写不下,也可分行书写,并在分行处加上续行符“;”,再按回车键。
二、程序文件的建立、修改与执行
1.建立或修改程序文件
可用以下方式调用系统内置的文本编辑器建立或修改程序文件:
1)命令方式:
MODIFYCOMMAND[<盘符>][<路径>]〈程序文件名〉
或
MODIFYFILE[<盘符>][<路径>]〈程序文件名〉
2)菜单方式:
打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”
3)项目管理器:
选定项目管理器“代码”选项卡中的“程序”项,选择“新建”命令。
2.保存程序文件
程序输入、编辑完毕,单击【文件】|【保存】菜单项,或按Ctrl+W复合键,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。
程序文件的默认扩展名是.PRG。
3.执行程序文件
程序文件建立后,可以用多种方式、多次执行它。
下面是两种常用的方式。
1)菜单方式
①单击【程序】|【运行】菜单项,打开“运行”对话框;
②从文件列表框中选择要运行的程序文件,并单击“运 行”命令按钮,启动运行该程序文件
2)命令方式
【格式】DO[<盘符>][<路径>]<文件名>
【功能】执行指定<盘符>、<路径>下的程序文件
当程序文件被执行时,文件中包含的命令将被依次执行,直到所有命令被执行完毕,或者执行到以下命令:
执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令:
(1)CANCAL:
终止程序运行,清除所有的私有变量,返回命令窗口;
(2)RETURN:
结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口;
(3)QUIT:
结束程序执行并退出VisualFoxPro系统,返回操作系统
(4)DO<程序文件名>:
转去执行另一个程序。
3)项目管理器
若程序包含在一个项目中,则在项目管理器中选定它并选择“运行”命令。
第二节 程序的基本结构
VisualFoxPro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。
VisualFoxPro系统的程序有两个特点:
一是程序控制流模式,由顺序、分支、循环三种基本结构构成。
二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。
一、结构化程序设计基础
1.原则和方法
结构化程序设计是一种程序设计方法,其设计原则和方法是:
自顶向下,逐步求精,程序结构模块化。
2.基本结构
结构化程序由若干基本结构组成,每一个基本结构可以包含一个或多个命令,它们有以下三种基本结构。
(1)顺序结构,如图6-1所示,该结构先执行A操作,再执行B操作。
(2)分支结构:
如图6-2所示,该结构中P代表一个条件,当条件P成立时执行A操作,否则执行B操作。
(3)循环结构:
循环结构则能够使某些语句或程序段重复执行若干次。
如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。
该结构有以下两种形式:
①当型循环结构,如图6-3所示。
②直到型循环结构,如图6-4所示。
(4)过程结构
在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。
这样做增强了程序的可读性和模块化。
我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程。
3.使用结构化程序设计的优点
(1)可读性强:
每个模块功能明确、模块间的关系简单、 清晰。
(2)独立性好:
每个模块内部的修改尽可能不影响其它 模块。
(3)易验证:
每个模块的正确性容易验证,各模块连接 起来后,整个程序也便于验证。
二、交互式命令
1.输入字符串语句ACCEPT
【格式】ACCEPT[<提示信息>]TO<内存变量>
【功能】在程序执行过程中,将用户交互式输入的内 容作为字符串赋值给指定内存变量。
【说明】该命令只接受字符型数据,输入的字符串不 需要加定界符。
【例6-2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。
程序文件名为PROG2.PRG。
MODICOMMANDPROG2
SETTALKOFF
CLEAR
ACCEPT“请输入数据库名:
”TOAAA
OPENDATABASE&AAA
ACCEPT"请输入表名"TOBBB
USE&BBB
LIST
USE
SETTALKON
RETURN
2.INPUT命令
【格式】INPUT[<提示信息>]TO<内存变量>
【功能】在程序执行过程中,将用户交互式输入的内 容赋值给指定内存变量。
【说明】可以输入字符型、数值型、逻辑型、日期型 和日期时间型等类型数据,而且可以是常量、 变量、函数或表达式等形式,按回车键结束 输入,系统将输入的数据赋值给<内存变量>。
【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。
程序文件名为PROG4.PRG
SETTALKOFF
CLEAR
INPUT“长方形一边的长为:
”TOA
INPUT“长方形另一边的长为:
”TOB
S=A*B
“长方形的面积为:
”,S
SETTALKON
RETURN
3.WAIT命令
【格式】WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<数值表达式>]
【功能】显示提示信息,暂停程序执行,直到用户按任意 键或单击鼠标时继续执行程序。
【说明】若选择可选项[TO<内存变量>],将输入的单个 字符作为字符型数据赋给指定的<内存变量>; 若用户是按Enter键或单击鼠标,<内存变量>的 值为空串。
若省略所有可选项,屏幕显示“键入任意键继 续……”默认提示信息。
【例6-6】在STUDENT数据库的STUD表中显示任意一个系学生的情况。
程序文件名为PROG6.PRG
SETTALKOFF
CLEAR
OPENDATABASESTUDENT
USESTUD
WAIT“请输入待查学生的系号(1—3):
”TON
IFVAL(N)<1.OR.VAL(N)>3
WAIT“输入无效,结束程序运行!
”WINDOWTIMEOUT5
RETURN
ELSE
STORE“0”+NTOAAA
LISTFOR系别号=AAA
ENDIF
CLOSEDATABASE
SETTALKON
RETURN
4.三条输入命令的异同
ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束。
WAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键。
INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。
5.编辑修改变量语句
【格式】@<行号,列号>[SAY“提示信息”][GET<变量>]
READ
【功能】在屏幕上或窗口中指定的坐标位置对内存变量 (它已预先赋值)或表中当前记录的字段名变量进 行编辑修改。
【说明】@…GET语句必须与编辑修改语句READ一起使用 才有意义。
当执行READ语句时,系统将光标移到 @…GET的变量位置,这时如果从键盘上键入新的 数据,则变量中原来的数据被取代
【例6-7】建立程序文件,要求通过程序方式在“读者”表中添加一条新记录,程序文件名为PROG7.PRG。
CLEAR
USE读者
APPENDBLANK
@2,8SAY"读者基本情况输入界面:
"
@4,10SAY"读者编号:
"GET读者编号
@6,10SAY"读者姓名:
"GET姓名
@8,10SAY"读者性别:
"GET性别
@10,10SAY"出生日期:
"GET出生日期
@12,10SAY"少数民族否:
"GET少数民族否
@14,10SAY"籍贯"GET籍贯
READ
USE
【例6-8】编写程序文件PROG8.PRG,修改读者表中第三条记录的姓名和籍贯两个字段。
SETTALKOFF
USE读者
GO3
@2,20SAY“姓名” GET姓名
@4,20SAY"籍贯"GET籍贯
READ
DISPLAY
USE
RETURN
三、分支结构
分支结构形式有如下三种:
1.单向分支
单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。
【语句格式】
IF〈条件表达式〉
〈命令行序列〉
ENDIF
【语句功能】
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列〉;否则,执行ENDIF后面的第一条命令。
【例6-9】求一元二次方程AX2+BX+C=0的实根。
程序文件名为PROG9.PRG。
SETTALKOFF
CLEAR
INPUTTOA
INPUTTOB
INPUTTOC
Z=B^2-4*A*C
IFZ>=0
X1=(-B+SQRT(Z))/(2*A)
X2=(-B-SQRT(Z))/(2*A)
?
X1,X2
ENDIF
SETTALKON
RETURN
2.双向分支
双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。
【语句格式】
IF〈条件表达式〉
〈命令行序列1〉
ELSE
〈命令行序列2〉
ENDIF
【语句功能】
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。
【例6-10】编写一密码校验程序(假设密码为ABC)。
程序文件名为PROG10.PRG。
SETTALKOFF
CLEAR
ACCEPT“请输入您的密码:
”TOAAA
IFAAA=”ABC”
CLEAR
”欢迎使用本系统!
”
ELSE
”密码错误!
”
WAIT
QUIT
ENDIF
SETTALKON
3.多向分支
多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。
【语句格式】
DOCASE
CASE〈条件表达式1〉
<命令行序列1〉
CASE〈条件表达式2〉
<命令行序列2〉
……
CASE〈条件表达式N〉
〈命令行序列N〉]
[OTHERWISE
〈命令行序列N+1〉]
ENDCASE
【语句功能】
该语句根据给出的N个〈条件表达式〉的值,选择N+1个〈命令行序列〉中的一个执行。
当所有CASE中〈条件表达式〉的值都是假时,如果有OTHERWISE项,则执行〈命令行序列N+1〉,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第一条命令。
【例6-11】假设收入(P)与税率(R)的关系如下表,编程求税金。
程序文件名为PROG11.PRG。
0P<800
R=0.05800≤P<2000
0.082000≤P<5000
0.1P≥5000
SETTALKOFF
CLEAR
INPUT“请输入收入:
”TOP
DOCASE
CASEP<800
R=0
CASEP<2000
R=0.05
CASEP<5000
R=0.08
OTHERWISE
R=0.1
ENDCASE
TAX=P*R
”税金为:
”,TAX
SETTALKON
RETURN
4.使用分支语句应注意的几点
(1)IF……ENDIF和DOCASE……ENDCASE必须配对使 用,DOCASE与第一个CASE(条件表达式)之间不应有 任何命令。
(2)(条件表达式)可以是各种表达式或函数的组合,其 值必须是逻辑值。
(3)(命令行序列)可以由一个或多个命令组成,可以是 条件控制语句组成的嵌套结构。
(4)DOCASE……ENDCASE命令,每次最多只能执行 一个(命令行序列)。
在多个CASE项的(条件表达式〉 值为真时,只执行第一个(条件表达式)值为真的(命 令行序列),然后执行ENDCASE的后面的第一条命令。
四、循环结构
1.DOWHILE循环语句
【格式1】DOWHILE<条件表达式>
<语句序列>
ENDDO
一个循环结构一般应具备如下的条件:
(1)循环的初始条件:
一般为给循 环控制变量赋初值;
(2)循环头:
循环语句的起始,设 置、判断循环条件;
(3)循环尾:
循环语句的结尾;
(4)循环体:
位于循环头和循环尾 之间、循环控制重复执行的语 句序列。
【格式2】DOWHILE<条件表达式>
<语句序列1>
[LOOP]
<语句序列2>
[EXIT]
<语句序列3>
ENDDO
•LOOP语句:
强行返回到循环开始语句。
•EXIT语句:
强行跳出循环,接着执行ENDDO后的语句
【例6-12】编程求1+2+3+……+100之和。
程序文件名为PROG12.PRG。
SETTALKOFF
CLEAR
S=0
I=1
DOWHILEI<=100
S=S+I
I=I+1
ENDDO
”1+2+3+……+100=”,S
SETTALKON
RETURN
【例6-13】逐条显示在STUDENT数据库的STUD表中性别为“男”的所有记录。
程序文件名为PROG13.PRG。
SETTALKOFF
CLEAR
OPENDATABASESTUDENT
USESTUD
DOWHILE.NOT.EOF()
IF性别=”男”
DISPLAY
ENDIF
SKIP
ENDDO
CLOSEDATABASE
SETTALKON
RETURN
【例6-14】编程显示STUDENT数据库的STUD表中除“李宁”以外的所有记录。
程序文件名为PROG14.PRG。
SETTALKOFF
CLEAR
OPENDATABASESTUDENT
USESTUD
DOWHILE.NOT.EOF()
IF姓名=”李宁”
SKIP
LOOP
ENDIF
DISPLAY
SKIP
ENDDO
CLOSEDATABASE
SETTALKON
RETURN
2.FOR循环语句
【格式】
FOR<循环变量>=<初值>TO<终值>[STEP<步长>]
<语句序列1>
[LOOP]
<语句序列2>
[EXIT]
<语句序列3>
ENDFOR/NEXT
FOR语句的执行流程如右图所示。
使用FOR循环语句的有关说明:
①省略STEP<步长>,则〈步长〉为默认值1;
②〈初值〉、〈终值〉和〈步长〉都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。
循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数;
③可以在循环体内改变循环变量的值,但会改变循环执行次数;
④EXIT和LOOP命令可以出现在循环体内。
执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立。
执行EXIT命令时,程序跳出循环,执行循环尾后面的语句。
【例6-15】从键盘输入10个数,编程找出其中的最大值和最小值。
程序文件名为PROG15.PRG。
SETTALKOFF
CLEAR
INPUT“请从键盘输入一个数:
”TOA
STOREATOMAX,MIN
FORI=2TO10
INPUT“请从键盘输入一个数:
”TOA
IFMAXMAX=A
ENDIF
IFMIN>A
MIN=A
ENDIF
ENDFOR
?
“最大值为:
”,MAX
?
“最小值为:
”,MIN
SETTALKON
RETURN
【例6-16】编程判断一个数是否素数,程序文件名为PROG16.PRG。
SETTALKOFF
CLEAR
INPUT"请输入一个数:
"TOx
FORi=2TOx-1
IFMod(x,i)=0
EXIT
ENDIF
ENDF
IFi>=x
STR(X)+“是素数”
ELSE
STR(X)+"不是素数"
ENDIF 程序N-S流程图
【例6-17】从键盘输入任意的10个数,按从大到小的顺序依次输出,程序文件名为PROG17.PRG。
DIMEA(10)
FORi=1TO10
INPUT"请输入一个数"TOa(i)
?
a(i)
ENDFOR
FORi=1TO9
FORj=1TO10-i
IFa(j)t=a(j)
a(j)=a(j+1)
a(j+1)=t
ENDIF
ENDFOR
ENDFOR
FORi=1TO10
?
?
a(i) 程序N-S流程图
ENDFOR
3.“指针”型循环控制语句
“指针”型循环控制语句,即根据用户设置的表中的当前记录指针,决定循环体内语句的执行次数据。
【语句格式】
SCAN[〈范围〉][FOR〈条件表达式1〉
[WHILE〈条件表达式2〉]]
〈命令行序列〉
ENDSCAN
【语句功能】
该语句在指定的范围内,用数据记录指针来控制循环次数。
执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合(条件表达式1)或(条件表达式2),执行(命令行序列),记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。
【例6-18】输出STUDENT数据库的STUD表中所有团员的姓名和地址。
程序文件名为PROG18.PRG。
SETTALKOFF
CLEAR
OPENDATABASESTUDENT
USESTUD
SCANFOR是否团员
?
姓名,地址
ENDSCAN
CLOSEDATABASE
SETTALKON
RETURN
4.使用循环语句时应注意的几点
(1)DOWHILE和ENDDO、FOR和ENDFOR、SCAN和 ENDSCAN必须配对使用。
(2)〈命令行序列〉可以是任何FoxPro命令或语句, 也可以是循环语句,即可以为多重循环。
(3)〈循环变量〉应是数值型的内存变量或数组元素。
(4)EXIT和LOOP命令嵌入在循环体内,可以改变循环 次数,但是不能单独使用。
EXIT的功能是跳出循 环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第 一条命令;LOOP的功能是转回到循环的开始处, 重新对“条件”进行判断,相当于执行了一次 ENDDO、ENDFOR、ENDSCAN命令,它可以改变〈命 令行序列〉中部分命令的执行次数。
EXIT、LOOP 可以出现在〈命令行序列〉的任意位置。
5.多重循环
多重循环即循环的嵌套,是在一个循环结构的循环体中又包含另一个循环。
我们称外层循环为外循环,被包含的循环为内循环。
嵌套层数一般没有限制,但内循环的循环体必须完全包含在外循环的循环体中,不能相互交叉。
正确的嵌套关系如:
DOWHILE<条件表达式1>
<语句序列11>
DOWHILE<条件表达式2>
<语句序列21>
DOWHILE<条件表达式3>
<语句序列3>
ENDDO
<语句行序列22>
ENDDO
<语句行序列12>
ENDDO
【例6-19】编程输出下三角形乘法口诀表。
程序文件名为PROG19.PRG。
SETTALKOFF
CLEAR
X=1
DOWHILEX<=9
Y=1
DOWHILEY<=X
S=X*Y
?
?
STR(Y,1)+”*”+STR(X,1)+”=”+STR(S,2)+”“
Y=Y+1
ENDDO
?
X=X+1
ENDDO
SETTALKON
RETURN
第三节过程的模块