1、1目录上页下页退出2第一节第一节 程序文件程序文件 1注释语句注释语句【格式1】*【格式2】&【功能】增强程序文件的易读性2对话开关语句对话开关语句【格式】SET TALK OFF|ON【功能】关闭或打开命令执行时的对话开关3命令的分行命令的分行 Visual FoxPro程序是命令行的序列,每个命令都以回车键结束,一行只能写一条命令;若一条命令太长,一行写不下,也可分行书写,并在分行处加上续行符“;”,再按回车键。目录上页下页退出3 1 1建立或修改程序文件建立或修改程序文件 1)1)命令方式:命令方式:MODIFY COMMANDMODIFY COMMAND程序文件名程序文件名 2)2)菜
2、单方式:菜单方式:打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”目录上页下页退出4 3)3)项目管理器:项目管理器:选定项目管理器“代码”选项卡中的“程序”项,选择“新建”命令。2 2保存程序文件保存程序文件 程序输入、编辑完毕,单击【文件】|【保存】菜单项,或按Ctrl+W复合键,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。程序文件的默认扩展名是.PRG。目录上页下页退出53 3执行程序文件执行程序文件程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。1)菜单方式)菜单方式 单击【程序】
3、【运行】菜单项,打开“运行”对话框;从文件列表框中选择要运行的程序文件,并单击“运行”命令按钮,启动运行该程序文件 2)命令方式)命令方式 【格式】DO 【功能】执行指定、下的程序文件 当程序文件被执行时,文件中包含的命令将被依次执行,直到所有命令被执行完毕。目录上页下页退出6第二节程序的基本结构第二节程序的基本结构由顺序、分支、循环三种基本结构构成。(1)顺序结构,如图6-1所示,该结构先执行A操作,再执行B操作。(2)分支结构:如图6-2所示,该结构中P代表一个条件,当条件P成立时执行A操作,否则执行B操作。图6-1 顺序结构流程图 图6-2 分支结构流程图 目录上页下页退出7(3)循环结
4、构:循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。目录上页下页退出8三条输入命令的异同三条输入命令的异同 ACCEPT ACCEPT TO TO ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束。WAIT TOWAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键。INPUT INPUT TO TO INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,如果是字符串,需用定界符,输入完毕按回车键结束。目录上页下页退出9分支结构形式有如下三种:1 1单向分支单向分支 单向分支语
5、句,即根据用户设置的条件表达式的值,决定某一操作是否执行。【语句格式】IFIF条件表达式条件表达式 命令行序列命令行序列 ENDIFENDIF【语句功能】该语句首先计算条件表达式的值,当条件表达式的值为真时,执行命令行序列;否则,执行ENDIF后面的第一条命令。条 件 式真 语 句 序 列 假 E N D IF 之 后 语 句 目录上页下页退出10【例6-9】求一元二次方程AX2BXC0的实根。程序文件名为PROG9.PRG。SET TALK OFFCLEARINPUT TO AINPUT TO BINPUT TO CZB2-4*A*CIF Z=0X1=(-B+SQRT(Z)/(2*A)X2=
6、(-B-SQRT(Z)/(2*A)?X1,X2ENDIFSET TALK ON目录上页下页退出11 2 2双向分支双向分支 双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。【语句格式】IFIF条件表达式条件表达式 命令行序列命令行序列1 1 ELSEELSE 命令行序列命令行序列2 2 ENDIFENDIF【语句功能】该语句首先计算条件表达式的值,当条件表达式的值为真时,执行命令行序列1中的命令;否则,执行命令行序列2中的命令;执行完命令行序列1或命令行序列2后都将执行ENDIF后面的第一条命令。真 条件式 假 语句序列2 语句序列1 ENDIF后面语句 目录上页下页
7、退出12【例6-10】编写一密码校验程序(假设密码为ABC)。程序文件名为PROG10.PRG。SET TALK OFFCLEARACCEPT “请输入您的密码:”TO AAAIF AAA=”ABC”CLEAR?”欢迎使用本系统!”ELSE?”密码错误!”ENDIFSET TALK ON目录上页下页退出13 3 3多向分支多向分支 多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。【语句格式】DO CASEDO CASE CASE CASE条件表达式条件表达式1 1 命令行序列命令行序列1 1 CASECASE条件表达式条件表达式2 2 命令行序列命令行序列2 2 CA
8、SECASE条件表达式条件表达式N N命令行序列命令行序列N N OTHERWISEOTHERWISE 命令行序列命令行序列N+1N+1 ENDCASEENDCASE 真 条件式 2 语句序列 1 ENDCASE 后面语句 条件式 1 Otherwise 条件式 2 真 语句序列 2 真 语句序列 n-1 有 语句序列 n 无 目录上页下页退出14【语句功能】该语句根据给出的N个条件表达式的值,选择N+1个命令行序列中的一个执行。当所有CASE中条件表达式的值都是假时,如果有OTHERWISE项,则执行命令行序列N+1,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第
9、一条命令。【例6-11】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PROG11.PRG。0 P800R=0.05 800 P2000 0.08 2000P5000 0.1 P5000 目录上页下页退出15SET TALK OFFCLEARINPUT “请输入收入:”TO PDO CASECASE P800 R=0CASE P2000 R=0.05CASE P5000 R=0.08OTHERWISE R=0.1ENDCASETAX=P*R?”税金为:”,TAXSET TALK ON 目录上页下页退出16 1 1DO WHILEDO WHILE循环语句循环语句【格式1】DO
10、WHILE ENDDO ENDDO后 面 的 语 句 条 件 表 达 式 式 真 循 环 体 假 目录上页下页退出17【格式2】DO WHILE LOOP EXIT ENDDO EN D D O后 面 的 语 句 条 件 表 达 式 式 真 假 循 环 体 LO O P EX IT LOOP语句:强行返回到循环开始语句。EXIT语句:强行跳出循环,接着执行ENDDO后的语句 目录上页下页退出18【例6-12】编程求123100之和。程序文件名为PROG12.PRG。SET TALK OFFCLEARS=0I=1DO WHILE I=100 S=S+I I=I+1ENDDO?”123100”,S
11、SET TALK ON目录上页下页退出19【例6-13】逐条显示在STUDENT数据库的STUD表中性别为“男”的所有记录。程序文件名为PROG13.PRG。SET TALK OFF CLEAR CLOSE DATABASE ALL OPEN DATABASE STUDENT USE STUD DO WHILE.NOT.EOF()IF 性别=”男”DISPLAY ENDIF SKIP ENDDO CLOSE DATABASE ALL SET TALK ON 目录上页下页退出20【例6-14】编程显示STUDENT数据库的STUD表中除“孙 业 ”以 外 的 所 有 记 录。程 序 文 件 名
12、为PROG14.PRG。SET TALK OFFCLEARCLOSE DATABASE ALLOPEN DATABASE STUDENTUSE STUDDO WHILE.NOT.EOF()IF 姓名=”孙业”SKIP LOOP ENDIF DISPLAY SKIPENDDOCLOSE DATABASE ALLSET TALK ON目录上页下页退出21 2 2FORFOR循环语句循环语句【格式】FOR=TO STEP 1 LOOPLOOP 2 EXITEXIT ENDFOR/NEXTFOR语句的执行流程如右图所示。目录上页下页退出22使用FOR循环语句的有关说明:省略STEP,则步长为默认值1;
13、初值、终值和步长都可以是数值表达式,但这些表达式仅在循环语句开始执行时计算一次。循环语句执行过程中,初值、终值和步长是不会改变的,并由此确定循环的次数;EXIT和LOOP命令可以出现在循环体内。执行LOOP命令时,结束本次循环,循环变量增加一个步长值,返回FOR循环头判断循环条件是否成立。执行EXIT命令时,程序跳出循环,执行循环尾后面的语句。目录上页下页退出23 3 3“指针指针”型循环控制语句型循环控制语句 “指针”型循环控制语句,即根据用户设置的表中的当前记录指针,决定循环体内语句的执行次数据。【语句格式】SCANSCANFORFOR条件表达式条件表达式 命令行序列命令行序列 ENDSC
14、ANENDSCAN【语句功能】该语句在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合(条件表达式),执行(命令行序列),记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。目录上页下页退出24【例6-18】输出STUDENT数据库的STUD表中所有男生的姓名和地址。程序文件名为PROG18.PRG。SET TALK OFFCLEARCLOSE DATABASE ALLOPEN DATABASE STUDENTUSE STUDSCAN FOR 性别性别=“男男”?
15、姓名姓名,地址地址ENDSCANCLOSE DATABASE ALLSET TALK ON目录上页下页退出25 4 4使用循环语句时应注意的几点使用循环语句时应注意的几点(1)DO WHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。(2)循环变量应是数值型的内存变量或数组元素。(3)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断。目录上页下页退出26第三节第三节 过程的模块化过程的模块
16、化VFP模块化在具体实现上提供三种形式,它们是子程序、过程和函数。一 子程序子程序 子程序也叫外部过程,是以程序文件(.PRG)的形式单独存储在磁盘上。子程序的结构与一般的程序文件一样,可以用MODIFY COMMAND命令来建立、修改、和存盘,扩展名也默认为.PRG。子程序与其他程序文件的唯一区别是其末尾或返回处必须有返回语句RETURN。子程序的调用:DO 目录上页下页退出27 内部过程:把多个过程组织在一个文件中(这个文件称之为过程文件),或者把过程放在调用它的程序文件的末尾。过程文件格式为:PROCEDURE PARAMETER RETURN 过程有两种存放方式:(1)把所有的过程集中
17、写入一个被称为过程文件(.prg文件)的磁盘文件中(2)直接把过程写在调用它的主程序文件中,主程序被打开时,过程同时被调入内存(调用时可节省时间)。(3)如果缺省RETURN,则在过程尾部自动执行一条隐含的RETURN命令,若不带则返回逻辑值.T.。目录上页下页退出28【例6-22】建立如下程序文件,过程放在程序文件中。*MAIN.PRG SET TALK OFF?”正在执行主程序”DO SUB1DO SUB1SET TALK ONProcedure SUB1Procedure SUB1?”正在执行SUB1”RETURNRETURN目录上页下页退出29 过程文件的建立方法与程序文件相同。可用M
18、ODIFY COMMAND 命令或调用其他文字编辑软件来建立。过程文件的结构一般为:PROCEDURE RETURN PROCEDURE RETURNPROCEDURE RETURN目录上页下页退出301过程文件的调用过程文件的调用 调用某过程文件中的过程时,必须先打开该过程文件,打开过程文件命令为:【格式】SET PROCEDURE TO 任何时候系统只能打开一个过程文件,当打开一个新的过程文件时,原已打开的过程文件自动关闭。调用过程文件 DO WITH 参数表参数表2过程文件的关闭过程文件的关闭关闭过程文件可用下列命令:【格式一】SET PROCEDURE TO 【格式二】CLOSE PR
19、OCEDURE 目录上页下页退出31参数传递参数传递 当用主程序调过程时,可以将主程序中的参数传递给过程,在过程中经过处理后再返回到主程序。调用程序的格式:格式1:DO WITH,格式2:,实参可以是常量、变量或表达式。调用程序时将发送实参。接收参数命令:PARAMETERS,此时形参为私有变量。L PARAMETERS,此时形参为局部变量。目录上页下页退出32规则:(1)当实参数量大于形参数量时,系统将提示出错。(2)当实参数量等于形参数量时,实、形参数一一对应发、接参数。(3)当实参数量小于形参数量时,多余的形参将被赋值为逻辑假F。参数的两种传递方式:(1)按值传递。形参变量值的改变不会影
20、响实参变量的值。(2)按地址(引用)传递。形参变量值的改变时,实参变量也随之改变。两种方式的设置命令:SET UDFPARMS TO VALUEREFERENCE按值传递按地址目录上页下页退出33变量的作用域变量的作用域变量的作用域指的是变量在什么范围内是有效(或能够被访问)的。内存变量可分为:公共、私有、局部三类。1.公共变量:在任何模块中都可使用的变量称为公共变量。可用:PUBLIC 建立,其初值被赋为逻辑假.F.。2.私有变量:可在本模块及其下属的各层模块中使用。在程序中直接使用的变量,均为私有变量。一但建立它的模块程序运行结束,私有变量将自动清除。3.局部变量:只能在建立它的模块中使用,当建立它的模块程序结束时,局部变量自动释放。可用:LOCAL 建立,其初值被赋为逻辑假.F.。34结束