第10章 子程序、过程、自定义函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

参数说明: ◆ Procedure〈过程名〉:过程总是写在主程序的后面,每 个过程都要用Procedure〈过程名〉开头来说明过程名,主 程序通过Do命令能够直接调用过程。 ◆〈过程体命令序列〉:是一个完成指定任务的程序段, 是过程的核心部分。 ◆ Return :是过程的结束语句,每个过程必须用Return结 束。
四、 自定义函数的调用 自定义函数的调用与系统标准函数的调用方法相同,其 形式为:
<函数名> [<参数表>]
例:用自定义函数的形式,编写程序计算圆面积 *主程序 Clear Input "请输入圆的半径:" To A && 输入要计算圆的半径 P=Area(A) && 调用自定义函数area, (A)为实际参数 ? “圆面积s=”,P Return *自定义函数 Function Area && 定义函数名为area Parameters R && 定义函数的形参 R S=3.14159*R*R Return S && 返回函数的值
求阶乘的过程Jc,注意:应直接写在主程序后面。 Procedure Jc T=1 For I=1 To X T=T*I Endfor Return
10.3 过程文件 如果在主程序中过程太多,那么,主程序调用多个过程、 多次访问磁盘会影响到程序的运行速度。为了克服调用多 个过程、多次访问磁盘的问题,一般使用过程文件来解决。 过程文件是由若干个过程组成的一个独立程序文件。它 把多个过程放在一个过程文件中,其文件类型仍为Prg。过 程文件一旦被打开,过程文件中包含的所有过程都被打开。 从而,克服了调用多个过程、多次访问磁盘的问题,提高 了程序运行的速度。
第10章 子程序、过程、自定义 函数、内存变量与数组
10.1 子程序
一、子程序与主程序的概念 结构化程序设计方法的一个核心思想是程序的模块化, 它可把一个大的复杂的应用程序按功能分解成若干个相对 独立的模块,这个模块就叫做子程序。通过模块的组合来 完成一个大的复杂的应用程序的编写。
子程序是一个为实现某个功能的独立程序。其特点是: 它总被其它程序调用而一般不能单独执行。通常把调用它 的程序称为主程序,被主程序调用的程序称为子程序。当 然,其概念也是相对的,即子程序也可以调用其他子程序。
Do Case Case K=1 Do Zj &&调用追加记录过程zj.Prg Case K=2 Do Xg &&调用修改记录过程xg.Prg Case K=3 Do Sc &&调用删除记录过程sc.Prg Case K=4 Exit Otherwise Wait ”输入的选择号有错,请重新选择输入!” Endcase Enddo
例:假设主程序名为MAIN.PRG,过程文件名为GCWJ.PRG,过程 文件中包含二个名为PA和PB的过程。过程文件及主程序内容如 下: * 主程序MAIN.PRG Set Procedure To Gcwj && 打开过程文件 Do Pa &&调用过程pa Do Pb && 调用过程pb ? "这是主程序" Close Procedure && 关闭过程文件 Return * 过程文件gcwj.Prg Procedure Pa ? "这是过程pa" Return Procedure Pb ? "这是过程pb" Return
二、 子程序的建立与修改 1.建立、修改子程序 Modify Command <子程序文件名> 参数说明: ◆ 子程序的建立、修改和存盘与其它VFP程序一样,用 Modify Command <程序文件名>命令或用菜单建立和修改, 其扩展名也是Prg。 ◆ 子程序一定要用Return命令结束。
2.Return命令 Return 参数说明: ◆ Return如不作任何选项,该语句结束子程序文件的运行, 返回到调用子程序的主程序的下一个语句,继续执行。
10.2 过程 过程是子程序的另一种形式,一个过程也是一个为了实 现某个功能的程序段。 过程是主程序文件的一个组成部分,习惯上常把它写在 主程序的最后。一个主程序可以包括多个过程,但每个过 程都要用Procedure〈过程名〉开头来说明过程名、用 Return来结束一个过程。
一、过程的编写格式
Procedure〈过程名〉 &&以过程说明语句开头 〈过程体命令序列〉 &&过程体 Return [To Master/To <程序名>] &&过程的结束语句
二、自定义函数的建立 1、自定义函数可以和调用程序共处同一程序文件中,习 惯上常把它写在主程序的最后。 2、也可以用Modify Command <程序文件名>命令建立一 个独立的程序,程序名应定义为函数名,其扩展名也是Prg。
三、 自定义函数的编写格式 不论自定义函数是写在主程序的后面,还是作为一个独 立的程序来建立,其编写格式均为: Function〈函数名〉 [Parameters〈形式参数表〉] 〈函数体〉 Return〈表达式〉
Procedure〈过程名n〉 〈过程体命令序列n〉 Return
三、 过程文件的使用 使用过程文件一般要经过以下几步:打开过程文件、调用 过程文件和关闭过程文件。 1.打开过程文件 Set Procedure To <过程文件名> 在主程序调用过程前,一定要打开包含该过程的过程文件。 过程文件一旦打开,包含在该过程文件中的所有过程都已打开。 系统规定,某一时刻只能打开一个过程文件。
二、过程的调用 Do〈过程名〉
例:对任意给的正整数A、B、C,用过程编写程序计算 S=A!+(3/5)*B!+(C!/2) *主程序JSG.PRG Set Talk Off Clear T=1 Input “A=” To X Do Jc A1=T Input “B=” To X Do Jc B1=T Input “C=” To X Do Jc C1=T ?” S=”,A1+(3/5)*B1+(C1/2) Return
Set Procedure To Return
*Gc.Prg过程文件 Procedure Zj Append Return
&& 追加记录的过程zj && 用全屏幕追加记录
Procedure Xg && 修改功能过程xg Input "请输入修改记录的学号:" To Xh Locate For 学号=Xh If Found() Edit && 用edit修改该记录 Else ? “查无该学生!” EndIf Return
子程序Cx.Prg功能:输入姓名查询记录 Do While .T. Clear Accept "请输入待查询的姓名" To Xm Locate For 姓名=Xm If Eof() ? "查无此人!" Else Display Endif Wait "是否继续查询(Y/N)?" To A If Upper(A)<>"Y" Exit Endif Enddo Return
10.4 自定义函数 尽管Visual FoxPro系统提供了丰富的标准函数,但有 时它们并不能满足某些应用程序的设计要求。这时,用户 就可以为应用程序定义一些特殊的函数,用户自定义函数。
一、 自定义函数的基本概念 自定义函数和子程序、过程相似,也是实现某个功能 的一个程序块。自定义函数既可以写在主程序的后面,也 可以是一个独立的程序。所不同的是自定义函数必须通过 Return <表达式>返回一个函数值。
一、 建立过程文件 Modify Command〈过程文件名〉 过程文件是一个独立程序文件,同样是用Modify Command〈过程文件名〉建立的。
二、 过程文件的编写格式 过程文件中的每一个过程都要用Procedure <过程名>开始 来说明一个过程名,用Return来结束一个过程。 Procedure〈过程名1〉 〈过程体命令序列1〉 Return &&每个过程都要用return结束 „„
2.过程文件中的过程的调用 Do〈过程名〉 过程文件被打开后,能用DO〈过程名〉命令来调用过程 文件中的任何一个过程。主程序执行到过程调用语句,就 转去执行指定的过程,执行到Return语句则返回主程序调 用过程的下一条命令。 3.过程文件的关闭 Set Procedure To Close Procedure 过程文件打开后,若不再调用过程。为了节省内存空间 和保护过程文件,应将过程文件关闭。
Use 学生档案表 Do While .T. Clear K=0 @ 6,12 Say "1.按姓名查询" @ 8,12 Say "2.按学号删除记录" @ 10,12 Say "3.退出系统" @ 12,12 Say "请输入相应的选择号" Get K Read
Do Case Case K=1 Do Cx &&调用子程序cx.Prg Case K=2 Do Sc &&调用子程序sc.Prg Otherwise @ 14,20 Say “输入的选择号有错!” Endcase Wait "是否继续(Y/N)?" To A If Upper(A)<>"Y" Exit Endif Enddo Return
例:把主菜单程序中的追加记录、修改记录、删除记录作为 3个过程编写成一个过程文件。 *主程序Main.Prg Set Talk Off K=0 Use Xsda Set Procedure To Gc Do While .T. Clear K=0 @ 6,12 Say ”1. 追加记录” @ 8,12 Say “2. 修改记录” @ 10,12 Say “3. 删除记录” @ 12,12 Say ”4. 退出系统” @ 14,12 Say “请输入相应的选择号” Get K Read
三、 子程序的调用 Do〈子程序文件名〉 主程序调用子程序后,会通过子程序中的Return命令返 回到主程序调用子程序的下一条命令继续运行。
例: 编程求N!+M!的和 Sum=0 P1=1 Do Jc Sum=Sum+P1 Do Jc Sum=Sum+P1 ?”N!+M!的值=”+Str(Sum) Return
Procedure Sc && 删除功能过程sc Accept "请输入删除记录的条件表达式:" To Nr Locate For &Nr If Found() Display Delete Wait “是否要作物理删除(Y/N)?” To A1 If Supper(A1)=”Y” Pack EndIf Else ? “查无满足条件的记录!” Endif Return
பைடு நூலகம்
**子程序Sc.Prg功能:输入学号删除记录
Do While .T. Clear Accept "请输入要删除的记录的学号:" To Xh Locate For 学号=Xh If Found() Dele Display Wait "是否要作物理删除(Y/N?)" To B If Upper(B)=="Y" Pack EndIf Else ?"输入有错,没有该学号!" Endif Wait "是否继续删除(Y/N)?" To A If Upper(A)<>"Y" Exit EndIf EndDo Return
参数说明: ◆ <函数名>:它是由字母、数字或下划线组成,必须以字 母或下划线开头,不能与系统提供的标准函数名同名。 ◆ 必须用Function〈函数名〉说明语句开头。 ◆ Parameters:如果要向函数中传递参数,则必须用该语 句定义形式参数表,各参数间用逗号隔开。尤其注意,形 式参数表中各参数的类型必须与主程序的实际参数表相一 致。 ◆ Return<表达式>:将<表达式>的值作为函数值返回到调 用程序中。
Modi Comm Jc &&建立子程序jc P1=1 Input “请输入计算阶乘的值” To A For I=1 To A P1=P1*I EndFor Return
例:编写一个完成对“学生档案表”按“姓名”查询或按 “学号”删除的程序。主程序名Main.Prg。查询子程序名 Cx.Prg,Sc.Prg删除子程序名Sc.Prg。 *主程序main.Prg
相关文档
最新文档