教学设计
您当前的位置: 澳门新葡京app>教学设计

14.1子程序、过程及应用

发布时间: 2019-01-27      信息来源:       阅读次数:

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分钟