第七章VFP程序设计基础大纲要求
1、命令文件的建立与运行:
(1)程序文件的建立。
(2)简单的交互式输入输出命令。
(3)应用程序的调试与执行。
2、结构化程序设计:
(1)顺序结构程序设计。
(2)选择结构程序设计。
(3)循环结构程序设计。
3、过程与过程调用。
(1)子程序设计与调用。
(2)过程与过程文件。
(3)局部变量和全局变量、过程调用中的参数传递。
4、用户定义对话框(MESSAGEBOX)的使用。
知识要点
1.Visual FoxPro的工作方式
Visual FoxPro系统提供有三种工作方式:即命令操作方式、菜单操作方式及程序文件操作方式。
2.程序的概念
有关此Visual FoxPro程序的几点说明:
(1)注释语句
【格式1】NOTE<注释内容>
【格式2】*<注释内容>
【格式3】&&<注释内容>
【功能】为程序行加注释说明,以增强程序文件的易读性。
(2)对话开关语句
【格式】SET TALK OFF|ON
【功能】关闭或打开命令执行时的对话开关
(3)命令的分行
Visual FoxPro程序是命令行的序列,每个命令都以回车键结束,一行只能写一条命令;若一条命令太长,一行写不下,也可分行书写,并在分行处加上续行符“;”,再按回车键。
3.建立或修改程序文件
可用两种方式调用系统内置的文本编辑器建立或修改程序文件:
命令方式
MODIFY COMMAND[<盘符>][<路径>]〈程序文件名〉
或
MODIFY FILE[<盘符>][<路径>]〈程序文件名〉
菜单方式
打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”
4.保存程序
程序输入、编辑完毕,单击【文件】|【保存】菜单项,或按Ctrl+W复合键,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。程序文件的默认扩展名是.PRG。
5.执行程序
程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。
(1)菜单方式
①单击【程序】|【运行】菜单项,打开“运行”对话框,选择程序文件,单击“运行”按钮;
②从文件列表框中选择要运行的程序文件,打开该程序文件,并单击“运行”命令按钮。
(2)命令方式
【格式】DO[<盘符>][<路径>\]<文件名>
【功能】执行指定<盘符>、<路径>下的程序文件
注意:
执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕。以下是终止程序运行的几个常用命令:
①CANCAL:终止程序运行,清除所有私有变量,返回命令窗口。
②DO:转去执行另一个程序。
③RETURN:结束当前程序的执行,返回到调用它的上级程序,若无上级程序则返回到命令窗口。
④QUIT:退出VF系统,返回到操作系统。
例题:
(1)在Visual FoxPro中,程序文件的扩展名为____。
A..prg
B..qpr
C..scx
D..sct
【解析】本题考查的知识点是程序文件的扩展名。在V1sual FoxPro中,程序文件的扩展名为.prg。
答案A是程序文件的扩展名。选项B是生成的查询程序文件的扩展名。选项C是表单文件的扩展名。选项D是表单备注文件的扩展名。
【答案】A
(2)在Visual FoxPro中,用来建立程序文件的命令是____。
A.OPEN COMMAND<文件名>
B.CREATE COMMAND<文件名>
C.MODIFY COMMAND<文件名>
D.以上答案都不对
【解析】本题考查的知识点是建立程序文件的命令的使用。在VisualFoxPro中,建立程序文件的命令是MODIFY COMMAND<文件名>。
选项A和B语法错误。选项C是建立程序文件的命令。选项D的说法错误。
【答案】C
6.输入命令INPUT
【格式】INPUT[<提示信息>]TO<内存变量>
【功能】在程序执行过程中,将用户交互式输入的内容赋值给指定内存变量,可以输入字符型、数值型、逻辑型、日期型和日期时间型等类型数据,而且可以是常量、变量、函数或表达式等形式,按回车键结束输入,系统将输入的数据赋值给<内存变量>。
注意:
(1)如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息。
(2)输入的数据可以是常量、变量、表达式。但不能不输入任何内容直接按回车。
(3)输入字符串时必须加定界符,逻辑常量必须用圆点定界,日期常量用大括号(如{^20 04-12-23})
【举例】
1.输入”张航”到XM变量中。
INPUT”请输入员工姓名:”TO XM
请输入员工姓名:”李小林”
?XM
李小林
2.输入逻辑值到HF变量中表示婚姻状况。
INPUT”已婚否:”TO HF
已婚否:.T.
?HF
.T.7.输入命令ACCEPT
【格式】ACCEPT[<提示信息>]TO<内存变量>
【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内存变量。该命令只接受字符型数据,输入的字符串不需要加定界符。
注意:
(1)如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息。
(2)该命令只能接收字符串。在输入字符串时不需要加定界符。
(3)如果不输入任何内容直接按回车。系统会把空串赋给指定的内存变量。
【例1】输入“平衡”到XM变量中。
ACCEPT”请输入教师姓名:”TO XM
请输入教师姓名:平衡
?XM
平衡
【例2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。程序文件名为PA1.PRG。
MODI COMMAND PA1
SET TALK OFF
CLEAR
ACCEPT"请输入数据库名:"TO A
OPEN DATABASE&&A
ACCEPT"请输入表名:"TO B
USE&&B
LIST
USE
SET TALK ON
RETURN8.WAIT命令
【格式】WAIT[<提示信息>][TO<内存变量>][WINDOW[AT<行>,<列>]][NOWAIT][CL EAR|NOCLEAR][TIMEOUT<数值表达式>]
【功能】显示提示信息,暂停程序执行,直到用户按任意键或单击鼠标时继续执行程序。
若选择可选项[TO<内存变量>],将输入的单个字符作为字符型数据赋给指定的<内存变量>;若用户是按Enter键或单击鼠标,<内存变量>的值为空串。
若省略所有可选项,屏幕显示“键入任意键继续……”默认提示信息。
【例】在STUDENT数据库的STUD表中显示任意一个系学生的情况。
程序文件名为PA2.PRG
SET TALK OFF
CLEAR
OPEN DATABASE学生管理
USE学生
WAIT"请输入待查学生的学号(1-3):"TO N
IF VAL(N)<1.OR.VAL(N)>3
WAIT"输入无效,结束程序运行!"WINDOW TIMEOUT 5
RETURN
ELSE
STORE"0"+N TO AAA
LIST FOR学号=AAA
ENDIF
CLOSE DATABASE
SET TALK ON
RETURN
三条输入命令的异同
INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。
ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束;
WAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键;
例题
1.下列关于Visual FoxPro输入输出指令的说法不正确的是____。
A.INPUT命令用来从键盘输入数据
B.用INPUT命令输入数据时,若不输入任何数据,直接按回车键,则系统会把空字符赋给指定的内存变量
C.ACCEPT命令只能接收字符串
D.WAIT命令能暂停程序执行,直到用户按任意键或单击鼠标时继续程序
【解析】本题考查的知识点是一些基础知识。本题一目了然选择B。
【答案】B
9.程序结构
是指程序中命令或语句执行的流程结构。Visual FoxPro提供了三种基本结构:顺序结构、选择结构、循环结构。
10.顺序结构程序设计
是程序中最简单、最基本的结构。使用该结构只需先把过程的各个步骤详细列出,然后将有关命令按处理的逻辑顺序自上而下排列起来。
Visual FoxPro就能按程序排列的顺序,一条接一条地依次执行。
11.分支结构形式有如下三种:
(1)单向分支
单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。
①语句格式:
IF〈条件表达式〉
〈命令行序列〉
ENDIF
②语句功能:
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列〉;否则,执行ENDIF后面的第一条命令。
【例】求一元二次方程AX2+BX+C=0的实根。程序文件名为PA3.PRG。
SET TALK OFF
CLEAR
INPUT"A="TO A
INPUT"B="TO B
INPUT"C="TO C
Z=B^2-4*A*C
IF Z>=0
X1=(-B+SQRT(Z))/(2*A)
X2=(-B-SQRT(Z))/(2*A)
?X1,X2
ENDIF
SET TALK ON
RETURN
(2)双向分支
双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。
①语句格式:
IF〈条件表达式〉
〈命令行序列1〉
ELSE
〈命令行序列2〉
ENDIF
②语句功能:
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为真时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。
【例】编写一密码校验程序(假设密码为ABC)。程序文件名为PA4.PRG。
SET TALK OFF
CLEAR
ACCEPT“请输入您的密码:”TO AAA
IF AAA=”ABC”
CLEAR
?”欢迎使用本系统!”
ELSE
?”密码错误!”
WAIT
QUIT
ENDIF
SET TALK ON
(3)多向分支
多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。
①语句格式:
DO CASE
CASE〈条件表达式1〉
<命令行序列1〉
CASE〈条件表达式2〉
<命令行序列2〉
……
CASE〈条件表达式N〉
〈命令行序列N〉]
[OTHERWISE
命令行序列N+1〉]
ENDCASE【例】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PA 5.PRG。
0 P<800
R=0.05 800≤P<2000
0.08 2000≤P<5000
0.1 P≥5000
SET TALK OFF
CLEAR
INPUT“请输入收入:”TO P
DO CASE
CASE P<800
R=0
CASE P<2000
R=0.05
CASE P<5000
R=0.08
OTHERWISE
R=0.1
ENDCASE
TAX=P*R
?”税金为:”,TAX
SET TALK ON
RETURN
②语句功能:
该语句根据给出的N个〈条件表达式〉的值,选择N+1个〈命令行序列〉中的一个执行。当所有CASE中〈条件表达式〉的值都是假时,如果有OTHERWISE项,则执行〈命令行序列N+1〉,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第一条命令。
(4)使用分支语句应注意的几点
①IF……ENDIF和DO CASE……ENDCASE必须配对使用,DO CASE与第一个CAS E〈条件表达式〉之间不应有任何命令。
②〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值。
③〈命令行序列〉可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。
④DO CASE……ENDCASE命令,每次最多只能执行一个〈命令行序列〉。在多个C ASE项的〈条件表达式〉值为真时,只执行第一个〈条件表达式〉值为真的〈命令行序列〉,然后执行ENDCASE的后面的第一条命令。
【例】下面程序段的功能是计算-个函数f(x)的值,请写出表达式。
SET TALK OFF
INPUT“请输入x值:”TO x
DO CASE
CASE x<-l
f=0
CASE X<1
f=2*x*x-x
CASE x<5
f=x
OTHERWISE
f=0
ENDCASE
?…f(X)=?,f
SET TALK ON
RETURN
由以上程序得A:f(x)=____。
【解析】本题考查的知识点是用分支语句来实现求一个函数的值。由分支语句的特点和程序的结构可知,函数f(x)是一个分段函数,我们可以较为容易地写出函数的表达式。
【答案】
0(x<-1或x>5)
f(x)=2x2-x(-1<=x<1)
x(1<=x<5)
12.循环结构程序设计
循环结构也称为重复结构,是指程序在执行过程中,其中的某段代码被重复执行若干次。被重复执行的代码段通常称为循环体。
Visual FoxPro支持循环结构的语句包括:
DOWHILE-ENDDO、
FOR-ENDFOR
SCAN-ENDSCAN语句。
(1)DO WHILE循环语句
【格式1】DO WHILE<条件表达式>
<语句序列>
ENDDO
【功能】执行该语句时,先判断<条件表达式>是否成立,如果为真,执行<循环体>,执行到ENDDO时,返回到DO WHILE,再判断<条件表达式>。若条件为假,则结束循环,执行ENDDO后面的语句。
【格式2】
DO WHILE<条件表达式>
<语句序列1>
[LOOP]
<语句序列2>
[EXIT]
<语句序列3>
ENDDO
LOOP语句:强行返回到循环开始语句。
EXIT语句:强行跳出循环,接着执行
ENDDO后的语句
DO WHILE循环一般由如下部分组成:
①初始部分。通常位于程序开头,用来保证循环程序能够开始执行。如果第一次判断条件时,条件为假,则循环体一次都部执行。
②工作部分,即循环体。这部分除了需要重复执行的命令外、还应包括对于循环控制变量的修改,使循环进行有限次以后能够自动终止。
③控制部分。控制部分应保证循环程序按预定条件恰到好处地执行完毕。做到这一点,不仅要选择适当的入口条件,还要给有关的量设定适当的初值,并在循环体中对有关的量进行适当的修改,关键在于这三者恰到好处地配合。【例1】编程求1+2+3+……+100之和。程序文件名为PA6.PRG。
SET TALK OFF
CLEAR
S=0
I=1
DO WHILE I<=100
S=S+I
I=I+1
ENDDO
?”1+2+3+……+100=”,S
SET TALK ON
RETURN
【例2】逐条显示在“学生管理”数据库的“学生”表中性别为“男”的所有记录。程序文件名为PA7.PRG。
SET TALK OFF
CLEAR
OPEN DATABASE学生管理
USE学生
DO WHILE.NOT.EOF()
IF性别=”男”
DISPLAY
ENDIF
SKIP
ENDDO