1、1第七章程序设计基础2 本本 章章 要要 点点Visual FoxProVisual FoxPro的工作方式的工作方式程序文件的建立与编辑程序文件的建立与编辑程序的基本结构程序的基本结构分支结构分支结构循环结构循环结构过程过程3Visual FoxPro的工作方式 Visual FoxPro系统提供有三种工作方式:即单命令方式、菜单方式及程序文件方式。 1.1.单命令方式单命令方式 Visual FoxPro单命令方式是利用Command 窗口来实现的。用户通过Command 窗口输入命令,并执行操作。在Command 窗口中,可以输入单个的操作命令和系统命令,完成对数据库的操作管理和系统环境
2、的设置;也可以建立命令文件及运行命令文件。 Command 窗口不仅是Visual FoxPro命令的执行窗口,也是Visual FoxPro命令文件的编辑窗口。 所谓单命令方式,即输入一条命令,完成一个操作的工作方式。 4 2.2.菜单方式菜单方式 在Visual FoxPro 环境下,也可以通过系统提供的菜单选项,对数据库资源进行操作管理和对系统环境进行设置;并通过菜单建立命令文件及运行命令文件。所谓菜单方式,即通过打开不同的菜单选择并完成不同的操作。我们在以前各章所讲的内容其实都可说是菜单方式。 3.3.程序文件方式程序文件方式 程序文件(简称程序)也叫做命令文件。运用程序文件方式进行数
3、据库管理,是通过程序文件编辑工具,将对数据库资源进行操作管理的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的命令文件中,然后再通过菜单方式或命令方式运行该命令文件。所谓命令方式,即通过程序文件中的命令完成不同的操作。5*功能说明:求圆形的面积。*文件名:L501.PRGCLEARCTALK=SET(TALK)SET TALK OFFINPUT 请输入圆的半径,半径= TO RS=PI()*R*R? 半径为+ALLTRIM(STR(R)+的圆,面积=,SSET TALK &CTALKRETURN 66.1.1 程序的概念 有关此Visual FoxPro程序的几点说明 :1注
4、释语句注释语句【格式1】NOTE 【格式2】* 【格式3】& 【功能】增强程序文件的易读性或放弃中语句的执行 2对话开关语句对话开关语句【格式】SET TALK OFF|ON【功能】关闭或打开命令执行时的对话开关, 许多命令在执行时会返回一些有关执行状态的信息,这些信息通常会显示在VF主窗口、状态栏或用户自定义窗口里。SETTALK命令用以设置是(ON)否(OFF)显示这些信息。默认值为ON。3命令的分行命令的分行(续行符) ;76.1.2 程序文件的建立、修改与执行 1 1建立或修改程序文件建立或修改程序文件 可用两种方式调用系统内置的文本编辑器建立或修改程序文件 : 命令方式命令方式 MO
5、DIFY COMMAND 程序文件名菜单方式菜单方式 打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”8程序文件的建立与执行程序文件的建立与执行一建立一建立建立:文件建立:文件新建新建程序程序保存:文件保存:文件保存保存命令:命令: MODIFY COMMAND注:若指定文件存在,则打开修改;否则系统认为是要建立一个指定了名字的文件。9(2)运行程序)运行程序 下面的任一方法均可运行程序:下面的任一方法均可运行程序:选择【程序】菜单下的“运行”菜单,利用“运行”对话框选择要运行的程序;在命令窗口中输入如下命令: DO 系统就会运行这个程序。如果文件不加扩展名,系
6、统会假定它具有.PRG的扩展名,如果想运行一个具有其它扩展名的命令文件时,在输入命令时必须给出这个命令文件的全名。如:要运行上例中编辑的程序,可以在命令窗口中输入: DO L501然后按回车键执行。 102保存程序保存程序 程序输入、编辑完毕,单击【文件】|【保存】菜单项,在“另存为”对话框中指定程序文件的存放位置和文件名,并单击“保存”按钮保存程序文件并退出文本编辑器。程序文件的默认扩展名是.PRG。 113执行程序执行程序程序文件建立后,可以用多种方式、多次执行它。下面是两种常用的方式。(1)菜单方式)菜单方式 单击【程序】|【运行】菜单项,打开“运行”对话框; 从文件列表框中选择要运行的
7、程序文件,并单击“运行”命令按钮,启动运行该程序文件 (2)命令方式)命令方式【格式】DO 【功能】执行指定、下的程序文件 12执行程序文件时,将依次执行文件中的命令,直到所有命令执行完毕,或者执行到以下命令: CANCAL:终止程序运行,清除所有的私有变量,返回命令窗口; RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口; QUIT:结束程序执行并退出Visual FoxPro系统,返回操作系统 136.1.3 简单的输入输出命令6.1.3 简单的输入输出命令1字符接收语句 ACCEPT命令命令【功能】在程序执行过程中,将用户交互式输入的内容作为字符串赋值给指定内
8、存变量。 该命令只接受字符型数据,输入的字符串不需要加定界符,否则,系统会把定界符作为否则,系统会把定界符作为字符串本身的一部分。字符串本身的一部分。 格式:格式:ACCEPT TO 14 【例6-2】编程从键盘输入某数据库的文件名,要求打开该数据库并显示其内容。程序文件名为PROG2.PRGSET TALK OFFCLEARACCEPT “请输入数据库名:” TO AAAOPEN DATABASE &AAAACCEPT “请输入表名” TO BBBUSE &BBBLISTUSESET TALK ONRETURN15注: ACCEPT语句只能给字符型内存变量提供数据。如果用户想语句只能给字符型
9、内存变量提供数据。如果用户想给其它类型的内存变量提供数据,给其它类型的内存变量提供数据,可以使用下列命令:2通用数据接收命令 -INPUT命令 该命令等待用户从键盘输入数据,用户可以输入任意合法的表该命令等待用户从键盘输入数据,用户可以输入任意合法的表达式。当用户以回车键结束输入时,系统将表达式的值存达式。当用户以回车键结束输入时,系统将表达式的值存入指定的内存变量,程序继续运行。入指定的内存变量,程序继续运行。功能:功能:(1)若选用)若选用,系统会首先显示该表达式的值,系统会首先显示该表达式的值,作为提示信息。作为提示信息。(2)输入的数据可以是常量、变量等,但不能不输入任何内)输入的数据
10、可以是常量、变量等,但不能不输入任何内容直接按回车键。容直接按回车键。INPUT语句与语句与ACCEPT语句的区别语句的区别是:ACCEPT命令只能接收字符串,而INPUT语句可以接收任意类型的VFP表达式;如果输入的是字符串,ACCEPT语句不要使用字符型定界符,而INPUT语句必须用定界符括起来。 格式:INPUT TO 16【例6-4】从键盘输入两个任意正数,编程求以两数为边长的长方形面积。程序文件名为PROG4.PRGSET TALK OFFCLEARinput “长方形一边的长为:” TO AINPUT “长方形另一边的长为:” TO BS=A*B? “长方形的面积为:” , SSE
11、T TALK ON RETURN173输入一个字符语句输入一个字符语句 -WAIT命令命令o 【功能】显示提示信息,暂停程序执行,直到用户按任意键或单击鼠标时继续执行程序。o 若选择可选项TO ,将输入的单个字符作为字符型数据赋给指定的;若用户是按Enter键或单击鼠标,的值为空串。o 若省略所有可选项,屏幕显示“键入任意键继续”默认提示信息 格式:格式:WAITTO 18例:例:wait 输入无效,请重新输入!输入无效,请重新输入! window timeout 5命令执行时,在主窗口右上角出现一个提示窗口,其中显示命令执行时,在主窗口右上角出现一个提示窗口,其中显示提示信息提示信息“输入无
12、效,请重新输入!输入无效,请重新输入!。之后,程序暂停执行。之后,程序暂停执行。当用户按任意键或超过当用户按任意键或超过5秒钟时,提示窗口关闭,程序继续执行。秒钟时,提示窗口关闭,程序继续执行。19【例6-6】在STUDENT数据库的STUD表中显示任意一个系学生的情况。程序文件名为PROG6.PRGSET TALK OFFCLEAROPEN DATABASE STUDENTUSE STUDWAIT “请输入待查学生的系号(13):” TO NIF VAL(N)3WA I T “ 输 入 无 效 , 结 束 程 序 运 行 ! ” W I N D O W TIMEOUT 5RETURNELSE
13、STORE “0”+N TO AAALIST FOR 系别号=AAAENDIFCLOSE DATABASESET TALK ONRETURN 204三条输入命令的异同三条输入命令的异同o ACCEPT命令只能接受字符型数据,不需定界符,输入完毕按回车键结束;o WAIT命令只能输入单个字符,且不需定界符,输入完毕不需按回车键;o INPUT命令可接受数值型、字符型、逻辑型、日期型和日期时间型数据,数据形式可以是常量、变量、函数和表达式,如果是字符串,需用定界符,输入完毕按回车键结束。 21练习:在INPUT、ACCEPT和WAIT三个命令中,必须要以回车键表示输入结束的命令是A)INPUT、A
14、CCEPTB)INPUT、WAITC)ACCEPT、WAITD)INPUT、ACCEPT和WAIT22二、结构化的程序设计二、结构化的程序设计三大结构:顺序结构、选择结构、循环结构。三大结构:顺序结构、选择结构、循环结构。1、顺序结构、顺序结构按命令在程序中出现的先后次序依次执行。按命令在程序中出现的先后次序依次执行。23 分支结构形式有如下三种: 1 1单向分支单向分支 单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。 (1)语句格式: IF条件表达式 命令行序列 ENDIF (2)语句功能: 该语句首先计算条件表达式的值,当条件表达式的值为真时,执行命令行序列;否则,执
15、行ENDIF后面的第一条命令。分支结构 条 件 式真 语 句 序 列 假 ENDIF 之 后 语 句 24【例6-7】求一元二次方程AX2BXC0的实根。程序文件名为PROG7.PRG。SET TALK OFFCLEARINPUT TO A 2INPUT TO B 3INPUT TO C 4ZB2-4*A*CIF Z=0X1=(-B+SQRT(Z)/(2*A)X2=(-B-SQRT(Z)/(2*A)? X1,X2ENDIFSET TALK ONRETURN25 2 2双向分支双向分支 双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。 (1)语句格式: IF条件表达式
16、命令行序列1 ELSE 命令行序列2 ENDIF (2)语句功能: 该语句首先计算条件表达式的值,当条件表达式的值为真时,执行命令行序列1中的命令;否则,执行命令行序列2中的命令;执行完命令行序列1或命令行序列2后都将执行ENDIF后面的第一条命令。 真 条 件 式 假 语 句 序 列2 语 句 序 列1 ENDIF后 面 语 句 26【例6-10】编写一密码校验程序(假设密码为ABC)。程序文件名为PROG10.PRG。SET TALK OFFCLEARACCEPT “请输入您的密码:” TO AAAIF AAA=”ABC”CLEAR? “欢迎使用本系统!”ELSE?”密码错误!”WAITr
17、eturnENDIFSET TALK ON27o例1:从屏幕输入你的身份,如果是学生,则显示“好好学习,天天向上” Clear Accept “请输入你的身份” to SF IF SF=“学生” ?“好好学习,天天向上!” Endifo例2:从屏幕输入一个数字型数据到变量X中,如果x200,则给其加500;如果200 x300,则加300;否则加100在屏幕上输出x的值。 Clear input “请输入一个数字型数据:”to x If x200 and x100 do p1.prgElse if s10 do p2.prg else if s1 do p3.prg else do p4.pr
18、g endif endifendif分别写出执行分别写出执行P,P3,P4子程序的条件表达式子程序的条件表达式Do p1.prg条件为S10Do p2.prg条件为( )Do p3.prg条件为( )Do p4.prg条件为( )30 3 3多向分支多向分支 多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行 。(1)语句格式: 真 条件式 2 语句序列 1 ENDCASE 后面语句 条件式 1 Otherwise 条件式 2 真 语句序列 2 真 语句序列 n-1 有 语句序列 n 无 格式:格式:DO CASE CASE CASE CASE OTHERWISE END
19、CASE 31B)分支语句)分支语句语句序列语句序列1条件条件1格式:格式:DO CASE CASE CASE CASE OTHERWISE ENDCASE32注: (1)不管有几个CASE条件成立,只有最先成立的那个CASE条件的对应命令序列被执行。(2)若所有CASE条件都不成立,且没有OTHERWISE子句,则直接跳出本结构。(3)DO CASE和ENDCASE必须成对出现,DO CASE是本结构的入口,ENDCASE是本结构的出口33 【例6-12】假设收入(P)与税率(R)的关系如下表,编程 求税金。程序文件名为PROG12.PRG。 0 P800R= 0.05 800 P2000
20、0.08 2000P5000 0.1 P5000 SET TALK OFFCLEARINPUT “请输入收入:” TO PDO CASECASE P800 R=0CASE P2000 R=0.05CASE P5000 R=0.08OTHERWISE R=0.1ENDCASETAX=P*R? ”税金为:”,TAXSET TALK ON RETURN34例:例:计算分段函数值:计算分段函数值:2x-1(x0)3x+5(0=x3)y= x+1 (3=x5)5x-3(5=x=10)若输入若输入5,分析程序如何执行?,分析程序如何执行?35SET TALK OFFINPUT 输入输入X值:值: TO X
21、DO CASECASE X0 F=2*X-1CASE X3 F=3*X+5CASE X5F=X+1CASE X90 ?“你是优秀学生” Case cj=80 ?”你的成绩良好” Case cj=60 ?“你的成绩一般,需要继续努力!” Otherwise ?“你的成绩太差,赶紧努力!” End case return373、循环结构、循环结构 循环结构也称为重复结构,是指程序在执行的过程中,其中的某循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行若干次。被重复执行的代码段,通常称之为循环段代码被重复执行若干次。被重复执行的代码段,通常称之为循环体。体。VF中的循环结构语
22、句包括:中的循环结构语句包括:DO WHILE-ENDDO、FOR-ENDFOR和和 SCAN-ENDSCAN语句。语句。38循环结构 1DO WHILE循环语句【格式1】DO WHILE ENDDO ENDDO 后面的语句 条件表达式式 真 循环体 假 一个循环结构一般应具备如下的条件:(1)循环的初始条件:一般为给循环控制变量赋初值;(2)循环头:循环语句的起始,设置、判断循环条件;(3)循环尾:循环语句的结尾;(4)循环体:位于循环头和循环尾之间、循环控制重复执行的语句序列 39【格式2】DO WHILE LOOP EXIT ENDDO LOOP语句:强行返回到循环开始语句。EXIT语句
23、:强行跳出循环,接着执行ENDDO后的语句 40功能:功能:(1)若第一次判断条件时,条件即为假,则循环体一次都不执行。)若第一次判断条件时,条件即为假,则循环体一次都不执行。(2)若循环体包含)若循环体包含LOOP命令,那么当遇到命令,那么当遇到LOOP时,就结束循环体的时,就结束循环体的本次执行,不再执行其后面的语句,而是转回本次执行,不再执行其后面的语句,而是转回DO WHILE处重新判处重新判断条件。断条件。(3)若循环体包含)若循环体包含EXIT命令,那么当遇到命令,那么当遇到EXIT时,就结束该语句的时,就结束该语句的执行,转去执行执行,转去执行ENDDO后面的语句后面的语句(4)
24、通常)通常LOOP或或EXIT出现在循环体内嵌套的选择语句中,根据条件出现在循环体内嵌套的选择语句中,根据条件决定是决定是LOOP回去,还是回去,还是EXIT出去。出去。【格式2】DO WHILE LOOP EXIT ENDDO 41 执行该语句时,先判断执行该语句时,先判断DO WHILE处的循环条件是否成立,处的循环条件是否成立,如果条件为真,则执行如果条件为真,则执行DO WHILE与与ENDDO之间的命令序之间的命令序列(循环体)。当执行到列(循环体)。当执行到ENDDO时,返回到时,返回到DO WHILE,再,再次判断循环条件是否为真,以确定是否再次执行循环体。若条件次判断循环条件是
25、否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句,执行为假,则结束该循环语句,执行ENDDO后面的语句。后面的语句。【格式2】DO WHILE LOOP EXIT ENDDO 42例:计算例:计算S1+2+100。(。(test5.prg)分析:分析:(1)引进变量)引进变量s和和i。s用来保存累加的结果,初值为用来保存累加的结果,初值为0; i既作为被累加的数据,也作为控制循环条件是否成既作为被累加的数据,也作为控制循环条件是否成 立的变量,初值为立的变量,初值为1。(2)重复执行命令)重复执行命令s=s+i和和i=i+1,直至,直至i的的 值超过值超过100。 每一次执行,每
26、一次执行,s的值增加的值增加i,i的值增加的值增加1 4344【例6-20】逐条显示在STUDENT数据库的STUD表中性别为“男”的所有记录。程序文件名为PROG20.PRG。SET TALK OFFCLEAROPEN DATABASE STUDENTUSE STUDDO WHILE .NOT. EOF()IF 性别=”男”DISPLAYENDIFSKIPENDDOCLOSE DATABASESET TALK ONRETURN 45B)步长型循环语句步长型循环语句: FOR-ENDFOR语句语句该语句通常用于实现循环次数已知情况下的循环结构。该语句通常用于实现循环次数已知情况下的循环结构。格
27、式:格式: FOR = TO STEP ENDFORNEXT46 2FOR循环语句循环语句 格式:格式:FOR = TO step 2EXITLOOP ENDFOR/NEXT 47功能:功能:(1)的默认值为的默认值为1。(2)、和和都是数值表达式。但这都是数值表达式。但这些表达式仅在循环语句执行开始时被计算一次。在循环些表达式仅在循环语句执行开始时被计算一次。在循环语句的执行过程中,初值、终值和步长是不会改变的。语句的执行过程中,初值、终值和步长是不会改变的。(3)可以在循环体内改变循环变量的值,但这会影响循环)可以在循环体内改变循环变量的值,但这会影响循环体的执行次数。体的执行次数。(4)
28、EXIT和和LOOP命令同样可以出现在该循环语句的循命令同样可以出现在该循环语句的循环体内。当执行到环体内。当执行到LOOP命令时,结束循环体的本次执命令时,结束循环体的本次执行,然后循环变量增加一个步长值,并再次判断条件是行,然后循环变量增加一个步长值,并再次判断条件是否成立。否成立。48求1到100中偶数的和49例:从键盘输入例:从键盘输入10个数,然后找出其中的最大值和最小值。个数,然后找出其中的最大值和最小值。CLEAR&(test9.prg) INPUT “请输入一个数:请输入一个数:” TO a A=5STORE a TO ma,mi Ma=5 mi=5FOR i=2 TO 10
29、A=4 mi=4 INPUT “请输入另一个数:请输入另一个数:” TO a A=6 ma=6 IF maami=aENDIFENDFOR? “最大值:最大值:”,ma? “最小值:最小值:”,miRETURN 50 P1883、写出下列程序的运行结果Set talk offDIMENSION A(6)FOR K=1 TO 6 A(K)20-2*KENDFORK=5DO WHILE K=1 A(K)=A(K)-A(K+1) K=K-1ENDDO?A(1), A(3), A(5)SET TALK ON 运行结果:?51C)数据表扫描循环语句数据表扫描循环语句: SCAN-ENDSCAN语句语句格
30、式:格式: SCANFORWHILE ENDSCAN执行该语句时,记录指针自动、依次地在当前表的指定范围内满执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。足条件的记录上移动,对每一条记录执行循环体内的命令。2)语句功能: 该语句在指定的范围内,默认范围为ALL,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合条件表达式1或条件表达式2,执行命令行序列,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。52【例6-3
31、0】输出STUDENT数据库的STUD表中所有团员的姓名和地址。程序文件名为PROG30.PRG。SET TALK OFFCLEAROPEN DATABASE STUDENTUSE STUDSCAN FOR 是否团员 ? 姓名,地址ENDSCANCLOSE DATABASESET TALK ONRETURN53多重循环结构程序设计多重循环结构程序设计 在一个循环体中再包含有循环结构,称之为二重循环结构在一个循环体中再包含有循环结构,称之为二重循环结构(或二重循环嵌套);在二重循环结构的循环体中,若还包含循(或二重循环嵌套);在二重循环结构的循环体中,若还包含循环结构,称为三重循环结构。二重及其
32、以上的循环结构统称为多环结构,称为三重循环结构。二重及其以上的循环结构统称为多重循环结构。这里我们主要介绍二重循环结构。重循环结构。这里我们主要介绍二重循环结构。54多重循环的基本结构多重循环的基本结构DO WHILE DO WHILE ENDDO ENDDOA=0For I=1 to 3 For j=1 to 3 A=A+1 Endforendfor答案为答案为:955FOR = TO STEP FOR = TO STEP ENDFORENDFOR56多重循环的执行过程多重循环的执行过程执行过程的总体原则是:外层循环变量每取一次值,内层循环要完整地循环一遍。若、或中包含有LOOP或EXIT命
33、令,它们会改变循环程序的执行顺序。57i=0do while i10 if int(i/2)=i/2 ?偶数 else ?奇数 end if i=i+1end do586.3 过程及过程调用 Visual FoxPro与其他高级语言一样,支持结构化程序设计方法,允许将若干命令或语句组合在一起作为整体调用,这些可独立存在并可整体调用的命令语句组合称为过程 。 1.1.调用过程语句,即执行已有的过程。调用过程语句,即执行已有的过程。语句格式: DO 过程名 WITH WITH用于主程序和子程序间参数的传递。 语句功能:执行以过程名为名的过程。 2.2.过程返回语句,即返回过程的调用处。过程返回语句
34、,即返回过程的调用处。 语句格式: RETURN 语句功能:将控制返回到调用程序中调用命令的下一语句。596.3.1 外部过程 外部过程也叫子程序,和主程序一样是以程序文件(.PRG)的形式单独存储在磁盘上【例】分别建立如下程序文件,* MAIN.PRG SET TALK OFF? ”正在执行主程序”DO SUB1SET TALK ON *SUB1.PRG ? ”正在执行SUB1”RETURN 60将若干个过程按一定的规定放在一个大文件中,这个文件称为过程文件。(1)过程文件的建立)过程文件的建立命令格式与建立程序文件一样: 格式:格式:MODIFY COMMAND 过程文件的格式要求每个过程
35、文件的开头必须用下列语句: 格式:格式:PROCEDURE 功能:功能:标明是一个过程。参数描述:指定过程名称。命名方法与文件名的命名方法相同。2 2、过程与过程文件、过程与过程文件 616.3.2 内部过程 o 内部过程:把多个过程组织在一个文件中(这个文件称之为过程文件),或者把过程放在调用它的程序文件的末尾。o Visual FoxPro为了识别过程文件或者程序文件中的不同过程,规定过程文件或者程序文件中的过程必需用PROCEDURE语句说明。其格式为:PROCEDURE RETURN 62过程放在程序文件中【例】建立如下程序文件,* MAIN.PRG SET TALK OFF? ”正在
36、执行主程序”DO SUB1SET TALK ON Procedure SUB1? ”正在执行SUB1”RETURN63例:例:下面是一个模块定义和调用的程序。涉及三个文件:程序文件下面是一个模块定义和调用的程序。涉及三个文件:程序文件f1.prg,其中的代码为主程序,另外包含一个过程,其中的代码为主程序,另外包含一个过程p1;程序文件;程序文件f2.prg作为子程序被主程序调用;过程文件作为子程序被主程序调用;过程文件f3.prg包含两个过程包含两个过程p2和和p3。64set proce to f3?主程序开始主程序开始“f2()do p1?主程序结束主程序结束“* 过程过程 proce p
37、1?过程过程p1开始开始“?调用调用p3()“?返回值返回值:,p3()?过程过程p1结束结束“endproc?子程序子程序f2开始开始“?调用调用p2()“x=p2()?返回值返回值:,x?子程序子程序f2结束结束“returnproce p2returnproce p3return 100 f1.prg f2.prg f3.prg 65过程文件的建立 过 程 文 件 的 建 立 方 法 与 程 序 文 件 相 同 。 可 用MODIFY COMMAND 命令或调用其他文字编辑软件来建立。过程文件的结构一般为:PROCEDURE RETURN PROCEDURE RETURNPROCEDUR
38、E RETURN666.3.3 过程调用中的参数传递 1有参过程中的形式参数定义有参过程中的形式参数定义有参过程中的形式参数定义语句为: 【格式】PARAMETERS 该语句必需是过程中第一条语句。中的参数可以是任意合法的内存变量名 67【例5-11】计算圆面积的主程序为MYMAIN.PRG,子程序为MYSUB.PRG*MYMAIN.PRGCTALK=SET(TALK)SET TALK OFFCLEARSTORE 0 TO RR, AREADO WHILE .T.INPUT 请输入圆的半径: TO RRDO MYSUB WITH RR, AREA? 半径为+ALLTRIM(STR(RR)+的圆
39、的面积是:, AREAWAIT 还要继续计算吗(Y/N)? TO ANSWERIF UPPER(ANSWER)=YLOOPELSEEXITENDIFENDDOSET TALK &CTALK调用过程并向过程传递参数该过程接收参数并计算该过程接收参数并计算*MYSUB.PRGPROCEDURE MYSUBPARAMETERS RS=PI()*R2RETURN 接收参数语句68【例6-34】用参数传递编程,计算圆的面积。* 主程序名PROG34SET TALK OFFCLEARS=0INPUT ”请输入圆的半径:” TO R do AREA with r,s ? ”圆的面积为:”,SSET TALK
40、 ON PROCEDURE AREA & 计算面积的过程PARAMETER X,Y & 形参说明Y=3.1416*X*2RETURN69变量的作用域变量的作用域 程序设计离不开变量。一个变量除了类型和取值之外,还有一个重程序设计离不开变量。一个变量除了类型和取值之外,还有一个重要的属性就是它的作用域,变量的作用域指的是变量在什么范围内要的属性就是它的作用域,变量的作用域指的是变量在什么范围内是有效或能够被访问的。在是有效或能够被访问的。在VF中,若以变量的作用域来分,内存变中,若以变量的作用域来分,内存变量可分为公共变量、私有变量和局部变量三类。量可分为公共变量、私有变量和局部变量三类。701
41、、公共变量、公共变量o 在任何模块中都可使用的变量称为公共变量。公在任何模块中都可使用的变量称为公共变量。公共变量要先建立后使用,公共变量可用共变量要先建立后使用,公共变量可用PUBLIC命令建立。命令建立。o PUBLIC o 该命令的功能是建立公共的内存变量,并为它们该命令的功能是建立公共的内存变量,并为它们赋初值逻辑假赋初值逻辑假.F.。例如:例如:PUBLIC x,y,s(10)建立了三个公共内建立了三个公共内存变量;简单变量存变量;简单变量x和和y以及一个含以及一个含10个元素的个元素的数组数组s,它们的初值都是,它们的初值都是.F.。71注:公共变量一旦建立就一直有效,即使程序运行
42、结束返回到命令窗口也不会消失。只有执行CLEAR MEMORY、RELEASE、QUIT等命令后,公共变量才被释放。在命令窗口中直接使用而由系统自动隐含建立的变量也是公共变量。72 2、局部变量、局部变量 局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。当建立它的模块程序运行结束时,局部变量自动释放。局部变量用当建立它的模块程序运行结束时,局部变量自动释放。局部变量用LOCAL命令建立:命令建立: LOCAL 该命令建立指定的局部内存变量,并为它们赋初值逻辑假该命令建立指定的局部内存变量,并为它们赋初值逻辑假.F.。由
43、于。由于LOCAL与与LOCATE前四个字母相同,所以这条命令的命令动词不前四个字母相同,所以这条命令的命令动词不能缩写。局部变量也要先建立后使用。能缩写。局部变量也要先建立后使用。733、私有变量、私有变量在程序中直接使用(没有通过在程序中直接使用(没有通过PUBLIC和和LOCAL命令事先声命令事先声明)而由系统自动隐含建立的变量都是私有变量。私有变量的明)而由系统自动隐含建立的变量都是私有变量。私有变量的作用域是建立它的模块及其下属的各层模块。一旦建立它的模作用域是建立它的模块及其下属的各层模块。一旦建立它的模块程序运行结束,这些私有变量将自动清除。块程序运行结束,这些私有变量将自动清除
44、。74*14.prgclearPUBLIC X1&公共变量:在所有模块均有效公共变量:在所有模块均有效x1=”aaa”LOCAL X2 &局部变量:仅在本模块有效局部变量:仅在本模块有效(不能在上(不能在上 层或下层模块中使用)层或下层模块中使用) x2=bbbSTORE ccc TO X3 &私有变量:仅在本模块及其下属私有变量:仅在本模块及其下属模块模块DO P6?X1=,X1?X2=,X2 ?X3=,X3 RETURN*过程过程P6PROCEDURE P6? 主程序中主程序中?X1=,X1 ?X3=,X3 RETURN在命令窗口输入下列命令:RELEASE ALL &清除所有用户定义的内
45、存变量DO 14?”返回命令窗口时:”?”x1=”,x1756.3.6 内存变量的作用域 1全局变量 全局变量是指在所有程序模块中都有效的内存变量 在程序或过程中定义全局变量的语句为:【格式】PUBLIC 76【说明】(1)当定义多个变量时,各变量名之间用逗号隔开;(2)用PUBLIC语句定义过的内存变量,在程序执行期间可以在任何层次的程序模块中使用;(3)变量定义语句要放在使用此变量的语句之前,否则会出错;(4)任何已经定义为全局变量的变量,可以用PUBLIC语句再定义,但不允许重新定义为局部变量; (5)使用全局变量可以增强模块间的通信,但会降低模块间的独立性。 772局部变量局部变量 局
46、部变量是指在建立它的程序以及被此程序调用的程序中有效的内存变量 在程序中没有被说明为全局变量的内存变量都被看作是局部变量。局部变量也可以用PRIVATE说明,命令格式为:【格式1】PRIVATE 【格式2】PRIVATE ALL LIKE | EXCEPT 【说明】(1)用PRIVATE语句说明的内存变量,只能在本程序及其下属过程中使用,退出程序时,变量自动释放;(2)用PRIVATE语句在过程中说明的局部变量,可以与上层调用程序出现的内存变量同名,但它们是不同的变量,在执行被调用过程期间,上层过程中的同名变量将被隐藏。 78 例:例:P179*1114.prgPUBLIC x1LOCAL x
47、2STORE F TO x3DO p6?主程序中主程序中?x1=,x1?x2=,x2?x3=,x3RETURN*过程过程P6PROCEDURE 怕怕?子程序中子程序中?x1=,x1?x3=,x3Return 然后在命令窗口中输入:Do 1114795、表文件图书。DBF如下记录号 总编号 书名 出版单位 单价1 113388 高等数学 清华大学出版社 24。002 445501 数据库导论 科学出版社 27。903 332211 计算机基础 高等教育出版社 23。004 665544 VFP6。0 电子工业出版社 28。605 456788 操作系统原理 电子工业出版社 25。006 4567
48、28 操作系统概论 高等教育出版社 21。007 375666 计算机网络 清华大学出版社 37。008 245682 计算机原理 高等教育出版社 25。00 use 图书Update 图书 set 单价=单价+5 where 出版单位=“科学出版社”Select 出版单位,avg(单价) as 平均价 from 图书 group by 出版单位 into cursor lsbSelect * from lsb where 平均价30 order by 平均价 into cursor lsb1Go bottom?left(出版单位,8)Close databaseA、清华大学高等教育电子工业出
49、错信息80CLEARSET TALK OFFclose allmx=Visual FoxPromy=二级DO sum1 with my?my+mxRETURN*子程序:sum1.prgPROCEDURE sum1 parameters my my=计算机等级+myRETURN 执行命令do test后,屏幕的显示结果为A)二级Visual FoxProB)计算机等级二级Visual FoxProC)计算机等级Visual FoxProD)计算机等级二级81s=0for n=1 to 10 p=1 for i=1 to n endfor s=s+pendfor?sum=,ss=1!+2!+.+10!