14.1子程序、过程及应用
目的与要求: 通过本次课的学习,掌握VFP的子程序、过程与自定义函数。 | ||
教学内容与时间安排、教学方法: 教学安排: 自定义函数和过程设计 40分钟 子程序的调用、变量和作用域 40分钟 教学方法: CAI、图形、表格 | ||
教学重点及如何突出重点、难点及如何突破难点: 教学重点: 自定义函数和过程设计、子程序的调用、变量和作用域 教学难点: 子程序的调用、变量和作用域 | ||
基本内容 |
教学 |
课堂设计 |
8.6 过程和函数程序设计 在程序设计过程中,经常把能够完成一个特定功能的程序编写成一个过程,作为一个模块。以便在其它程序中使用该功能时调用该程序。这种可以完成一个特定功能的程序称为自定义函数或过程 1.自定义函数 对一些常用算法,可以编写成通用程序,例如为了将一个小写字符串转换成大写的字符串,系统提供了 UPPER() 函数。系统将一些通用的算法编写成一个个程序提供给用户使用,这就是所谓的系统函数。而用户自定义函数是用户根据需要自己编写的函数。 一、自定义函数的建立 自定义函数的格式如下。 【格式】FUNCTION <函数名> PARAMETERS <参数表> <语句序列> RETURN <表达式> 【功能】定义一个用户自定义函数。 【说明】若使用FUNCTION语句来指出函数名,表示该函数包含在调用程序中。若缺省该语句,表示此函数是一个独立文件,函数名将在建立文件时确定,其扩展名默认为.PRG,并可使用命令MODIFY COMMAND <函数名>来建立或编辑该自定义函数。还需注意,自定义函数的函数名不能和Visual FoxPro系统函数同名,也不能和内存变量同名。 <语句序列>组成函数体,用于进行各种处理,简单函数的函数体可以为空。 RETURN 语句用于返回函数值,其中的<表达式>值就是函数值。若缺省该语句,则返回的函数值为.T.。 自定义函数与系统函数调用方法相同,通过函数名调用,形式为:函数名(<参数表>)。 2过程设计 过程是子程序的另一种形式,它和函数的不同之处是:在程序结束之后,不必返回值。如果希望返回参数,可以通过PARAMETERS语句返回,而不是通过 RETURN 词句。当调用过程时,将参数传递给被调用的过程,过程执行完后,将参数通过 PAMETERS 再传递给主程序。所以,在过程中 RETURN 语句并不是必须的,有 RETURN 语句只不过是形式上更完整而已。 【格式】PROCEDURE <过程名> [PARAMETERS <参数表>] <命令序列> [RETURN] 【功能】定义一个过程。 【说明】过程作为程序的一部分时往往列在程序的最后。 ⑴ 过程的格式是通过PROCEDURE 过程名…ENDPROC括起来的; ⑵ PARAMETERS语句即可传入参数,也可以输出参数; ⑶ 过程调用可以使用命令:DO过程名 WITH 参数|参数变量,如果没有参数可以省略WITH关键字; ⑷ 在参数传递过程中,一次可以传递若干个变量。每次传递多少个变量,反映在调用命令中写多少个变量,接收命令中也要写多少个变量,传递变量之间存在一一对应关系。这实际是一种按地址传递变量的方式。在函数的PARAMETER参数传递过程中还提供了一种按值传送方式,需要使用SET UDFPARMS TO VALUE|REFERENCE命令进行设置。
-----------本节课结束-----------
3.主程序和子程序 一、带参数子程序的调用 【格式】DO <程序名1> [WITH <参数表>][IN <程序名2>] 【功能】主程序<程序名2>调用子程序<程序名1>。 【说明】<参数表>中的参数可以是表达式,但若为内存变量必须具有初值; 调用子程序时参数表中的参数要传送给子程序,子程序中也必须设置相应的参数接收语句。PARAMETERS 可以完成此项功能,但必须是子程序的第一条语句。 二、子程序的返回 主程序与子程序的概念是相对的,子程序还可调用它自己的子程序,即子程序可以嵌套调用。Visual FoxPro的返回命令包含了因嵌套而引出的多种返回方式。 【格式】RETURN [TO MASTER|TO <程序文件名>] 【功能】TO MASTER 使返回时直接返回到最外层主程序,TO <程序文件名>强制返回到指定的程序文件。 【例】计算S=1!+2!+3!+4!+5!,要求在子程序中计算n!,并 定义为函数。运行 * 主程序: E7_20.PRG CLEAR S=0 && 累加器初值为0 FOR i=1 TO 5 ?STR(i)+"的阶乘=",STR(mul(i),3) && 输出每个数的阶乘 S=S+mul(i) && 通过子程序名调用子程序函数,累加阶乘 NEXT ?"1+2!+3!+4!+5!=",STR(S,5)
* 子程序函数:mul.PRG PARAMETERS n && 定义参数 mul=1 && 累乘器初值为1 FOR j=1 TO n mul=mul*j && 累乘 NEXT RETURN mul && 返回累乘结果
.3.4变量作用域 当程序使用函数或过程作为子程序来设计时,弄清楚变量的作用域尤其重要。变量的作用域指的是变量在什么范围内是有效或能被访问的。在Visual FoxPro中关于变量声明分为如下几种情况。 一、全程变量 在任何模块中都可使用的变量称为全程变量,全程变量必须先定义后使用。全程变量可以通过关键字 PUBLIC 命令来定义。 【格式】PUBLIC <内存变量表> 【功能】将<内存变量表>指定的变量设置为公共变量,并将这些变量的初值赋以.F.。 【说明】若下层模块中建立的内存变量要供上层模块使用,或某模块中建立的内存变量要供并列模块使用,必须将这种变量说明成公共变量。 二、局部变量 局部变量使用 LOCAL 关键字来说明,局部变量只在当前定义的程序中有效,一旦该程序执行完成将自动释放局部变量。 注意:LOCAL 与 LOCATE 前4个字符字母相同,故不可使用缩写。 三、私有变量 在程序中使用,没有通过PUBLIC和LOCAL声明而由系统自动创建的内存变量是私有变量。这种变量不同于局部变量和全局变 量,它的作用范围在本(子)程序及下属的子程序内有效,而在定义它的模块程序运行结束时自动清除。 私有变量允许与上层模块程序的变量同名,但此时为了分清楚两者是不同的变量,系统会采用暂时屏蔽上级模块变量。这种隐蔽说明只是对上级程序的变量进行屏蔽,而不创建变量。隐蔽的目的是为了当前程序使用同名变量时不至于冲突。私有变量也可以使用PRIVATE关键字来说明。 【格式】PRIVATE [<内存变量表>][ALL[LIKE|EXCEPT <通配符>]] 【功能】声明私有变量并隐藏上级程序的同名变量,直到声明它的程序、过程或自定义函数执行结束后,才恢复使用先前隐藏的变量。 【说明】“声明”与“建立”不一样,前者仅指变量的类型,后者包括类型与值。PUBLIC命令除声明变量的类型外还赋了初值,故称为建立;而PRIVATE并不自动对变量赋值,仅是声明而已。 在程序模块调用时,参数接收命令PARAMETERS声明的参变量也是私有变量,与PRIVATE命令相同。 |
讲述
|
自定义函数介绍5分钟
自定义函数的建立15分钟
过程设计15分钟
带参数子程序的调用8分钟
子程序的返回10分钟
全程变量8分钟
局部变量8分钟
私有变量8分钟
|