1、第9章 VFP程序设计基础,9.1 算法的描述9.2 程序设计基础知识9.3 顺序结构程序设计9.4 分支结构程序设计9.5 循环结构程序设计9.6 子程序及其调用9.7 过程和自定义函数,学习目标 了解算法的相关知识,理解语句和程序的概念,重点掌握结构化程序设计的顺序、分支和循环三种结构,并能正确运用三种结构编写程序;能够根据实际需要定义子程序、过程和函数。,第9章 VFP程序设计基础,9.2 程序设计基础知识,1. 菜单方式 2. 命令方式【格式】MODIFY COMMAND 【功能】建立或修改程序文件。,创建及修改程序文件的方法,9.2.1,【格式】DO 【功能】执行程序文件。,执行程序
2、文件的命令,9.2.2,9.2 程序设计基础知识,(1)每个命令必须以一个命令动词开头,不区分大小写,使用英文标点。 (2)命令动词和子句中的短语可以用其前面4个或4个以上的字符的缩写表示。 (3)大多数命令动词后可以跟一个或多个限定该动词的子句,命令行中的各个子句可以按任意次序排列。 (4)命令行中若有多个词,以一个或多个空格隔开,若已经有分隔符,则空格可省略。 (5)一个命令行的最大长度不能超过254个字符。 (6)一行只能写一个命令,每条命令都是以回车作为结束符并确认执行;如果一个命令太长,一行写不下,可以使用续行符“;”,然后回车,并在下一行接着写,但总长不能超过254个字符。,程序文
3、件的书写规则,9.2.3,1注释语句 【格式1】NOTE 【格式2】* 【格式3】& 【功能】NOTE格式一般用于程序、子过程、自定义函数等的开始部分,对整个程序文件或一段程序进行注释。*格式和&格式一般用在具体某一个程序语句行的后面,用于说明本行的功能等特性。,9.2 程序设计基础知识,程序设计辅助命令,9.2.4,2关闭文件语句【格式】CLOSE ALL【功能】关闭所有工作区上打开的各种类型的文件,并选择1号工作区。常用在程序的开头进行程序环境的初始化工作,程序设计辅助命令,9.2.4,9.2 程序设计基础知识,3清除命令【格式】CLEAR【功能】清除当前屏幕上的所有信息,但不清除内存变量
4、。【格式】CLEAR ALL【功能】关闭所有工作区上打开的各种类型的文件,并能清除内存变量。,程序设计辅助命令,9.2.4,9.2 程序设计基础知识,程序设计辅助命令,9.2.4,9.2 程序设计基础知识,5屏幕状态命令【格式】SET CONSOLE ON|OFF【功能】激活或终止从程序中向VFP主窗口或活动的用户自定义窗口的输出。常用于控制从键盘上输入的信息是否在显示器上显示。默认为ON,用户输入的信息在屏幕上显示,OFF为不显示。,程序设计辅助命令,9.2.4,9.2 程序设计基础知识,6安全开关命令【格式】SET SAFTY ON|OFF【功能】确定改写已有文件之前是否显示确认对话框。默
5、认为ON,指定改写已有文件之前显示一个对话框。OFF用于指定在改写已有文件时不显示对话框而直接改写。,程序设计辅助命令,9.2.4,9.2 程序设计基础知识,7结束程序执行命令【格式】CANCEL【功能】结束当前VFP程序的执行,回到VFP命令状态。 8退出命令【格式】QUIT【功能】终止程序执行且退出VFP,返回到Windows操作系统。 举例,程序设计辅助命令,9.2.4,9.2 程序设计基础知识,1单字符输入命令【格式】WAIT TO WINDOW AT 行,列【功能】显示信息并暂停VFP的执行,直到某个键盘键或鼠标左键被按下后继续执行。,基本的输入输出命令,9.2.5,9.2 程序设计
6、基础知识,2字符串输入命令【格式】ACCEPT TO 【功能】暂停VFP的执行,接收由键盘输入的字符串数据,并将输入结果保存到内存变量中,以回车结束输入。【说明】在 ACCEPT命令中输入的数据均被视为字符类型,输入时不必使用定界符,若使用定界符,则定界符也作为字符串的内容。 如果没有输入数据就按回车键,内存变量或数组元素接收的内容为空字符串。,基本的输入输出命令,9.2.5,9.2 程序设计基础知识,3其它类型数据输入命令【格式】INPUT TO 【功能】暂停VFP的执行,接收由键盘输入的数据,并将输入结果保存到内存变量中,以回车结束输入。 【说明】从键盘输入的表达式决定了内存变量;当输入的
7、数据不正确时(或直接按回车键时),会一直等待用户输入,直到正确为止。,基本的输入输出命令,9.2.5,9.2 程序设计基础知识,4自定义对话框函数【格式】 MessageBox(),【功能】显示一个用户自定义对话框,函数值为数值型。用来指定对话框中的按钮、图标和显示对话框时的默认按钮。 【说明】用于对话框中显示提示文字。用于确定对话框的按钮、图标、默认按钮等属性。(3)函数值为数值型,表示选择了对话框中的哪个按钮。,基本的输入输出命令,9.2.5,9.2 程序设计基础知识,VFP是一种面向对象的程序设计与结构化程序设计相结合的语言。 结构化程序设计方法有三种:顺序、分支和循环,也称为结构化程序
8、设计的三大结构。 顺序结构是结构化程序设计中最简单和最基本的一种结构,它是按照语句的书写顺序来执行的,每条命令执行一次。 处理问题的一般步骤是原始数据输入、中间数据处理、最终结果输出。 举例:例9-5、例9-6、例:交换两个变量的值,9.3 顺序结构程序设计,1单向分支【格式】IF ENDIF【功能】根据的值决定执行命令行序列或不执行命令行序列。如果的结果为.T.,则执行命令行序列,如果为.F.,则不执行命令行序列,而是跳转到ENDIF语句之后的语句继续执行。 【举例】例9.7、输入三个数,按从大到小的顺序排列。,9.4 分支结构程序设计,IF分支语句,9.4.1,2双向分支【格式】 IF E
9、LSEENDIF【功能】根据逻辑表达式的值,有选择地执行命令序列。【举例】例9.8、例:查找指定学号的学生,找到了就显示其信息,没找到就输出“查无此人”,9.4 分支结构程序设计,IF分支语句,9.4.1,3IIF函数 【格式】IIF(,)【功能】根据逻辑表达式的值,返回两个表达式值中的某一个。【举例】使用iff函数求两数中的较大数 INPUT “请输入X的值:“ TO X INPUT “请输入Y的值:“ TO Y ?IIF(XY,X,Y),9.4 分支结构程序设计,IF分支语句,9.4.1,4分支结构的嵌套【格式】,9.4 分支结构程序设计,IF分支语句,9.4.1,IF IF ELSE E
10、NDIF ELSEIF ELSE ENDIF ENDIF,【格式】DO CASECASE CASE CASE OTHERWISEENDCASE,多重分支语句,9.4.2,9.4 分支结构程序设计,【功能】根据不同的条件表达式结果执行不同的命令。整个的DO CASEENDCASE语句块,系统在执行时,从上到下进行判断,并且只会选择的第一个为.T.所对应的来执行,而其他忽略。 例9-11 例:输入百分制成绩,要求转换成对应的优、良、中、不及格五级制的评定。,1条件循环 【格式】DO WHILE LOOPEXITENDDO 【举例】 1. 求1100的自然数之和 2. 密码输入,9.5 循环结构程序
11、设计,循环程序结构,9.5.1,【功能】如果条件表达式的值为.T.,则执行DO WHILE 和ENDDO语句之间的命令序列,即循环体。如果在执行循环体时遇到LOOP命令,则停止循环体的本次执行,然后跳转到执行循环的入口语句DO WHILE 处,并测试该语句中的值,以决定是否继续执行该循环。如果遇到EXIT命令,则EXIT以下的命令序列不再执行,而是直接跳出循环,去执行ENDDO后面的命令。如果条件表达式的值为.F.,程序则跳转到ENDDO。,2记数循环 【格式】FOR 循环变量=初始值 TO 终止值 STEP 步长LOOPEXITENDFOR / NEXT 【功能】按循环变量指定的次数重复执行
12、一组命令。在遇到ENDFOR或NEXT 之前,始终执行FOR与ENDFOR之间的命令序列。执行过程中,每循环一次,循环变量都会自动递增一个步长,然后把循环变量的当前值与终值作比较。如果循环变量的当前值小于或等于终值,将再次执行FOR语句后的命令;如果循环变量的值大于终值,则退出FORENDFOR循环,程序继续执行ENDFOR或NEXT之后的命令。 【举例】1. 求1100的自然数之和 2. 求n! 3. 统计字符个数4. 输入10个数,求最大值 5. 判断素数,9.5 循环结构程序设计,循环程序结构,9.5.1,3、记录扫描循环 【格式】SCAN FOR/WHILE 语句序列1LOOP语句序列
13、2EXIT语句序列3ENDSCAN 【功能】在当前选定的表中移动记录指针,并对每一个满足指定条件的记录执行一组命令。 【举例】例9-15,9.5 循环结构程序设计,循环程序结构,9.5.1,一般将循环体内不含有循环语句的循环叫做单层循环,把循环体内含循环语句的循环叫多重循环,也叫循环嵌套。 【举例】 1. 打印九九乘法表 2. 求1!+2!+3!+10! 3. 找出2100内的所有的素数,并统计素数的个数。,9.5 循环结构程序设计,循环程序嵌套,9.5.2,1子程序的建立子程序也是一个命令文件,所以建立和编辑子程序的方法同VFP程序文件一样。 2子程序的参数定义 【格式】PARAMETERS
14、 【功能】定义形式参数。 【说明】 (1)该语句必须是子程序的第一个语句。 (2)形式参数如果是多个,中间用逗号隔开,它的参数类型和个数必须和调用它的实际参数的类型和个数一样。 (3)如果实际参数是一个数组(不必带数),则对应的形式参数会自动的定义为一个同样的数组。,9.6 子程序及其调用,子程序的概念及其使用,9.6.1,3子程序的调用 【格式1】 DO WITH 【格式2】 (,) 【功能】 调用指定的子程序。 【说明】 (1)子程序可以被调用多次,也可以在一个子程序中调用另一个子程序,但不自己调用自己。 (2)用来向子程序传递实际参数。 (3)实际参数可以是表达式或数组,如果实际参数是数
15、组,调用子程序时不必带维数。,9.6 子程序及其调用,子程序的概念及其使用,9.6.1,(4)在VFP中参数的传递有两种形式:按引用传递和按值传递。按引用传递是指将该实参的地址传递给形参,即形参和实参指向内存的同一个位置。这样,在子程序中修改了形参的值就相当于修改了实参的值。使用【格式1】并且实参是变量时按引用传递。按值传递是将实参的值复制一份传递给形参,在子程序中修改形参的值不影响调用程序中实参的值,使用【格式1】并且实参是表达式时按值传递,使用【格式2】也是按值传递。,9.6 子程序及其调用,子程序的概念及其使用,9.6.1,4子程序的返回 【格式】RETURN |TO |TO MASTE
16、R 【功能】终止当前运行的程序,返回到调用程序或指定程序或主程序。 【说明】 (1)如果一个程序调用了另一个子程序,则被调用程序在执行到RETUEN语句后将返回到调用处的下一个语句。 (2)如果选择了,则返回这个表达式的值,RETURN语句默认返回值为.T.。 (3)如果选择了TO MASTER,则不管是哪一级调用,都返回到最顶级主程序。 (4)如果选择了TO ,则返回到指定的过程。 【举例】例9-17,9.6 子程序及其调用,子程序的概念及其使用,9.6.1,1全局变量 【格式】 PUBLIC 【功能】 定义全局变量。 【说明】 (1)全局变量可以在主程序或子程序中定义,它的有效范围为主程序
17、和所有子程序。 (2)用PUBLIC命令创建的内存变量和数组都初始化为.F.。 (3)任何想要声明为公共内存变量或数组的变量,必须在赋值之前把它声明为公有。,9.6 子程序及其调用,程序的变量及其作用域,9.6.2,2局部变量 【格式】 PRIVATE 【功能】 显式定义局部变量(也叫私有变量)。 【说明】 (1)局部变量的定义分为隐式定义和显式定义。 (2)PRIVATE 并不创建变量,它只在当前程序中隐藏高层程序中创建的与私有变量同名的变量。 (3)局部变量的有效范围是当前程序及当前程序的所有子程序。,9.6 子程序及其调用,程序的变量及其作用域,9.6.2,3本地变量 【格式】 LOCA
18、L 【功能】 定义本地变量。 【说明】 (1)本地变量是指只能在定义它的子程序中使用的变量,不能被高层或低层程序访问。 (2)用LOCAL创建的变量或数组都初始化为“假”(.F.)。 (3)不能缩写为LOCA。 【举例】例9-18变量的作用域,9.6 子程序及其调用,程序的变量及其作用域,9.6.2,1过程及过程文件过程和子程序的概念基本相同,都能完成特定的功能。但子程序是以一个独立的文件存在的,而过程可以是以独立的文件存在,也可以放在调用它的主程序的后面作为程序的一部分。多个过程一起放在一个独立的件中,则形成了过程文件。,9.7 过程和自定义函数,过程及过程文件,9.7.1,2过程的建立 【
19、格式】PROCEDURE ()RETURNENDPROC 【功能】过程的定义。 【说明】 (1)过程名必须为合法标识符。 (2)在最后一条语句之后,过程自动执行一条隐含的RETURN命令,也可在过程最后包含RETURN命令。,9.7 过程和自定义函数,过程及过程文件,9.7.1,3过程文件的建立 存放若干过程的文件称为过程文件。过程文件也是程序文件,所以建立过程文件的方法一般程序文件,其扩展名也为.prg。 过程文件是过程的集合,所以一般过程文件是PROCEDUREENDPROC语句块的排列。,9.7 过程和自定义函数,过程及过程文件,9.7.1,4过程文件的打开 【格式】 SET PROCE
20、DURE TO 过程文件名1 ,过程文件名2,ADDITIVE 【功能】 打开一个或多个过程文件。 【说明】 (1)若选择了ADDITIVE参数,则表示打开新的过程文件的时候不关闭已经打开的过程文件,否则会自动关闭已经打开的过程文件。 (2)该语句一般出现在一个程序的开始部分。 (3)该语句也可以打开其它源代码文件。,9.7 过程和自定义函数,过程及过程文件,9.7.1,5过程的调用 【格式】DO WITH 参数表 【功能】调用过程。 【说明】过程调用与子程序的调用相同,参数使用方法也相同。,9.7 过程和自定义函数,过程及过程文件,9.7.1,6过程文件的关闭 【格式】 SET PROCED
21、URE TO 或 CLOSE PROCEDURE 【功能】 关闭用 SET PROCEDURE 打开的过程文件。 【说明】如果使用CLOSE ALL或CLEAR ALL命令,也可以关闭过程文件。 【举例】1.四则运算 2. 例9-19,9.7 过程和自定义函数,过程及过程文件,9.7.1,1自定义函数的定义 【格式】FUNCTION ()PARAMETERS RETURN ENDFUNC 【功能】定义一个自定义函数。,9.7 过程和自定义函数,自定义函数,9.7.2,2自定义函数的调用 【格式】函数名() 【说明】 (1)参数默认为按值传递。 (2)函数调用得到的返回值可以用变量名=函数名()的形式来实现。 【举例】1. 将求一个数的阶乘定义成一个函数,通过调用该函数求1!+2!+10!2. 将判断一个数是否为素数定义成一个函数,通过调用该函数显示100200之间的素数。,9.7 过程和自定义函数,自定义函数,9.7.2,