版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Visual FoxPro数据库技术及应用第第 8 章章返回返回8.1 程序设计概述8.2 程序文件的建立和执行8.3 程序的基本结构8.4 过程与过程调用8.5 数组返回返回 程序是为了完成某项任务所需执行的命令序列,这些命令按照一定的结构有机地组合在一起,并以文件的形式存储在磁盘上,它的扩展名为扩展名为.PRG。 VFP应用程序一般由以下几个部分组成:指出程序的名称、功能、作者等信息。设置程序的运行环境。包含实现某项功能的所有命令序列,一般包含数据的输入输出、数据的处理以及结果输出等。一些整理工作,如关闭各种文件,使系统状态恢复到标准状态。返回到系统的命令窗口状态或操作系统状态。 返回返回
2、 一个大型的程序设计的基本步骤可以描述为: 对问题进行说明; 对问题进行分解; 编制各个分支模块; 测试以及完善各个分支模块; 组装全部模块; 整体程序的测试。 返回返回8.2.1 程序文件的建立与修改8.2.2 程序文件的执行8.2.3 程序的常用命令返回返回程序文件的概念程序文件的概念 在VFP中,要实现对数据操作的某一种功能,总要通过执行命令来完成。对于较为简单的功能,执行一个命令即可,但对于较复杂的功能,则往往需要执行多条命令多条命令来加以实现。 把多条命令多条命令组织起来,保存于一个文件中,便构成了一个程序文件,它的扩展名为.PRG。返回返回1、使用菜单、使用菜单建立程序文件:建立程
3、序文件: 1)第一步:)第一步: 选择菜单文件 新建命令 或单击常用工具栏中的“新建”按钮 2)第二步:)第二步: 从右图的对话框中选中“程序”,并单击“新建文件”按钮 进入编辑窗口,输入程序的内容,按+W存盘退出。返回返回2 2、使用命令使用命令建立程序文件建立程序文件格式:格式:MODIFY COMMAND 实例:实例:显示“教师信息表”中所有信息,再按职称分类汇总,然后显示各类职称的工资总和 MODIFY COMMAND MODIFY COMMAND GZZH (建立文件) DO DO GZZH (执行文件)程序文件内容如下页:程序文件内容如下页:返回返回clearUSE 教师信息表LI
4、ST INDEX ON 职称 TO ZCTOTAL ON 职称 TO BUFUSE BUFCOPY TO GZZH FIELD 职称 ,基础工资USE GZZHLIST FIELD 职称 ,基础工资返回返回【例8.1】建立名为8-1.prg的应用程序,使其能够打开表文件“学生.dbf”,并且可以根据输入的学生姓名在该表文件中查找并输出该学生的基本情况,然后关闭该文件。 在命令窗口中键入如下命令。 打开程序编辑窗口,在其中输入以下代码。输入完毕后单击输入完毕后单击“关闭关闭”按钮,在弹出的按钮,在弹出的“保存保存”对话框中输入对话框中输入“8-1.prg”即完成了应用程序的建立。即完成了应用程序
5、的建立。 返回返回 在Visual FoxPro系统中,除了用上面介绍的建立、编辑程序文件方法外,还可以借助于“表单设计器”、“类设计器”、“菜单设计器”、“报表设计器”和“项目管理器”等代码设计工具完成程序文件的建立与编辑。返回返回1)用命令 MODIFY COMMAND 程序名 MODIFY FILE 程序名.prg 2)利用菜单文件-打开选择“程序程序”类型选择程序名程序名 返回返回方法方法1 1:命令方式:命令方式 DO DO 运行一个程序文件(.prg)时,会先把它翻译成一个目标文件(.fxp),再运行该目标文件。也可直接运行目标文件:DO 程序名.fxp方法方法2 2:菜单方式:菜
6、单方式程序-运行或直接选择最下面的执行当前程序的命令返回返回 在程序运行过程中执行到下述命令时将会中断运行而退出:终止程序运行,消除所有的私有变量,返回命令窗口;转去执行另一个程序;结束当前程序的运行,返回到调用它的上级程序,若没有上级程序就返回命令窗口。退出VFP程序,返回到操作系统。返回返回l 在程序运行过程中,若按下ESC键可使得运行强行中断。系统将给予用户3种选择:中断程序的运行,这是默认选项;忽略ESC的中断作用,继续执行程序;暂时中断程序的运行,返回命令窗口,当再次运行时可以从中断处继续运行程序。返回返回(1) ACCEPT从键盘得到一字符串字符串(2) WAIT从键盘得到一个字符
7、字符(3) INPUT给内存变量赋值(多种类型多种类型)返回返回 格式:格式: 命令功能:暂停程序的运行,等待用户键入字符型常量以赋给指定的内存变量。 说明:说明: 为可选项,它是一个用于提示说明的字符型表达式。当程序执行到可选项时,将会计算该表达式的值并将其显示出来。 如果不键入任何字符而只按ENTER键,则赋给内存变量的值将是一个空字符串。 该命令最多能接收254个字符。返回返回【例8-2】从键盘输入表文件名。返回返回 WAIT TO WINDOW AT , TIMEOUT 功能:功能:屏幕出现提示符的内容,等待等待从键盘上接收输入;或在指定时间或地点屏幕出现提示符;也可以不要提示,按任意
8、键继续。说明:说明:内存变量只能接受一个字符,不要加回车不要加回车返回返回【例】在屏幕第【例】在屏幕第2020行行5050列显示信息框列显示信息框“请稍候” 2秒钟WAIT WAIT 请稍候请稍候 WINDOW WINDOW AT 20,50AT 20,50 TIMEOUT 2 TIMEOUT 2执行时,屏幕出现小窗口:停留2秒钟【例】等待输入一个字符后,继续往下【例】等待输入一个字符后,继续往下WAIT WAIT 请回答请回答(Y/N) TO OP(Y/N) TO OPIF OP=Y OR OP=“y ? YESELSE ? NOENDIF返回返回【例】在【例】在信息框信息框显示提示内容显示
9、提示内容停留停留5 5秒钟秒钟CLEARUSE 教师信息表ACCEPT 请输入职称: TO ZCLIST FOR 职称=ZCWAIT “职称为 ”+ZC+“ 的纪录已显示”; WINDOW AT 20,30 TIMEOUT 5* *注意:当屏幕出现提示字符串时,注意:当屏幕出现提示字符串时,* *输入:副教授输入:副教授返回返回格式:格式:INPUT TO 功能:功能:屏幕出现提示符的内容,等待等待从键盘上接收输入接收输入数据。注意:注意:1)两端要加引号2)可以为字符字符、数值数值、日期日期等类型3)内存变量的类型,取决于输入的值返回返回【例】将马大大的出生日期改为83.4.2CLEARIN
10、PUT “INPUT “请输入马大大的出生日期请输入马大大的出生日期: TO DD: TO DDUSE A班学生信息REPLACE 出生日期 WITH DD FOR 姓名=马大大BROW*注意:当屏幕出现提示字符串时,输入:*CTOD(“04/02/83”)或1983-4-2或date(1983,4,2)返回返回【例8-4】输入学生姓名,把“A班学生信息”表中该学生的信息显示出来。USE A班学生信息班学生信息INPUT 请输入要查询的学生姓名:请输入要查询的学生姓名: TO nameLOCATE FOR 姓名姓名 = nameDISPLAYUSE 程序运行时,根据提示输入“马大大”,显示马大
11、大信息。(思考:接收字符型数据,使用哪个命令更思考:接收字符型数据,使用哪个命令更好?)好?) 返回返回(1)注释命令(2)文本输出命令(3)定位输出命令(4)设置会话状态命令(5)清除命令简介返回返回为了提高程序的可读性或帮助读者了解程序的结构,程序设计人员会对某些语句作一些解释性的说明。 命令格式一: 命令格式二: 命令格式三: 如:LOCATE FOR 姓名 = 马大大“ & 定位到“姓名”为“马;大大”的记录 返回返回 格式:格式: 功能:功能:在屏幕或打印机上按原样输出文本的内容。【例8-5】TEXT的使用示例。返回返回 命令格式: 功能:从指定的行、列坐标位置开始显示SAY子句中表
12、达式的值。:有GET时,起提示作用。GET 子句用来显示待输入数据的变量值,该变量必须事先定义。DEFAULT 子句用于给GET中的变量赋初值。执行 READ 语句时,系统允许用户从键盘上输入新的值,并将其赋给GET中的变量。返回返回【例8-6】.SAYGETREAD的使用示例。 要求用户输入姓名和基本工资,用户输入后,将结果赋给相应变量 返回返回 格式: 功能:设置是否显示命令执行的响应信息。格式一: 功能:清除当前屏幕上的所有信息。格式二: 功能:关闭所有文件,释放所有内存变量。格式三: 功能:释放所有的内存变量。格式四: 功能:清除键盘缓冲区。 返回返回结构化程序设计把程序的基本结构分为
13、三种:分为三种: 1、 顺序结构:语句按输入的顺序依次执行。 2、 分支结构:语句按条件选择执行。 3、循环结构:反复执行循环体语句返回返回数据过程特定过程准备判断连接端点流线返回返回 1 1顺序结构顺序结构(流程图)顺序结构是在程序执行时,根据程序中语句的物理顺序物理顺序依次执行的命令序列。语句A语句B返回返回2 2、分支结构、分支结构(流程图) 双分支 单分支表达式语句B后续语句语句A表达式后续语句语句AYNyn返回返回返回返回3 3、循环结构、循环结构(流程图)当满足某条件时循环,否则结束循环条件式语句A后续语句yn返回返回顺序结构程序也称直接程序或简单程序。它自始至终严格按照程序中语句
14、的。它是最基本、最普遍的结构形式。【例8-7】在表文件中查看学号为“1161009”的学生的信息。CLEARUSE 学生学生LOCATE FOR 学号学号 = 1161009DISPLAYUSE返回返回【例8-8】请用户为“课程”表输入一条记录。CLEARUSE 课程? 录入课程数据? =ACCEPT 课程ID: TO CIDACCEPT 课程名: TO CACCEPT 类型id: TO TIDACCEPT 学分: TO CRACCEPT 类型: TO T* 把用户输入的数据插入数据库APPEND BLANKREPLACE 课程ID WITH CID,课程名 WITH C,类型id WITH
15、TID,学分 WITH VAL(CR),类型 WITH TUSE返回返回 选择结构程序是由判断语句或选择语句构成的双重或多重走向的程序。 选择结构可分为选择和选择两种不同的结构形式,分别由语句和语句实现。通常有一个入口和两个出口,包括以下几种情况。 命令格式:返回返回【例8-9】询问是否要显示教师信息表?若是,显示该表。返回返回 命令格式:返回返回【例8-10】按姓名查找学生,找到则显示该学生信息,否则显示“查无此人!”。返回返回【例8-11】广州向某地寄送特快专递,计费标准为每克0.04元,当邮件重量超过100克之后,超出的重量为每克0.02元,请根据邮件重量编写程序计算邮费。CLEARIN
16、PUT 请输入邮件的重量:请输入邮件的重量: TO weightIF weight = 80 ? Sname, ,Ssex, 优优 CASE Score11 = 60 ? Sname, ,Ssex, 合格合格 OTHERWISE ? Sname, ,Ssex, 不合格不合格ENDCASE返回返回【例8-16】根据键入的自变量x的值,计算分段函数的函数值。 )10(6)105(65)53(5)30(13)0(12)(2322xxxxxxxxxxxxf返回返回三种类型的循环语句:三种类型的循环语句:1、WHILE循环:循环: (当型)(当型)循环的次数不确定的,用其他条件式控制2、FOR循环:循环
17、: (步长型)(步长型)能确定循环的次数的情况3、SCAN循环:循环: (扫描型(扫描型或指针型或指针型)对数据表的记录操作返回返回根据条件表达式的值决定循环体内语句的执行次数。 返回返回【例8-17】编程求和S=1+2+3+100。CLEARJ = 1sum = 0DO WHILE J = 100 sum = sum + J J = J + 1ENDDO? 从从1到到100的和是:的和是:+ALLTRIM(STR(sum)返回返回【例8-18】输出“学生”表中1982年出生的学生记录。CLEARUSE 学生学生LOCATE FOR YEAR(出生日期出生日期) = 1982DO WHILE
18、NOT EOF() DISPLAY *WAIT 请按任意键显示下一条记录!请按任意键显示下一条记录! CONTINUEENDDO? 查询结束。查询结束。返回返回CLEARUSE 学生学生INDEX ON YEAR(出生日期出生日期) TAG birthdaySEEK 1982DO WHILE NOT EOF() DISPLAY WAIT 请按任意键显示下一条记录!请按任意键显示下一条记录! SKIP IF YEAR(出生日期出生日期) != 1982 EXIT ENDIFENDDO? 查询结束。查询结束。返回返回【例8-19】输出“教师信息表”中职称为“副教授”的教师基本信息,并统计出“副教授
19、”的人数。CLEARUSE 教师信息表教师信息表DO WHILE NOT EOF() IF 职称职称 副教授副教授 SKIP LOOP ENDIF DISPLAY SKIPENDDOCOUNT FOR 职称职称 = 副教授副教授 TO P_NO? 以上显示的是副教授的基本信息,共计有:以上显示的是副教授的基本信息,共计有:+STR(P_NO)+人人返回返回找到了吗?找到了吗?显示显示“查无此人!显示该人信息从键盘接收从键盘接收输入姓名输入姓名定位定位NY3次以上?NYloopexitClearI=0use A班学生信息do while .t. accept 请输入姓名: to xm I=I+1
20、 locate for 姓名=xm if not found() ? 查无此人! if I 3 loop endif else disp endif exitenddo? bye !return返回返回Clearuse A班学生信息for i=1 to 3 accept 请输入姓名: to xm locate for 姓名=xm if not found() ? 查无此人! loop else disp endif exitendfor? bye !returnLoopExit跳到循环开始处跳到循环的后继语句限制最多3次返回返回 = 或返回返回【例8-20】有FORENDFOR语句求出1200
21、之间的偶数的和。 返回返回 特点:特点:“指针指针”自动移动自动移动(不需要(不需要SKIPSKIP)返回返回【例8-22】统计“学生”表中男学生的人数 DO WHILEENDDO返回返回【例8-23】用表扫描循环结构将教师信息表中基础工资小于1000的姓名、基础工资两个字段输出,并统计这些职工的人数。SET TALK OFFCLEARUSE 教师信息表教师信息表n = 0SCAN FOR 基础工资基础工资 1000 ? 姓名姓名,基础工资基础工资 n = n + 1ENDSCAN? 基础工资在基础工资在1000元以下的人数有:元以下的人数有:+STR(N,2)+人。人。SET TALK ON
22、 返回返回【例8-24】统计 “学生”表中各个专业的人数。(SCAN中套中套CASE)CLEARSTORE 0 TO A,B,C,DUSE 学生学生SCAN DO CASE CASE 专业专业=土木工程土木工程 A=A+1 CASE 专业专业=计算机计算机 B=B+1 CASE 专业专业=电子电子 C=C+1 CASE 专业专业=机电机电 D=D +1 ENDCASEENDSCAN? 土木工程专业的人数为:土木工程专业的人数为:,ALLTRIM(STR(A)? 计算机专业的人数为:计算机专业的人数为:,ALLTRIM(STR(B)? 电子专业的人数为:电子专业的人数为:,ALLTRIM(STR
23、(C)? 机电专业的人数为:机电专业的人数为:,ALLTRIM(STR(D)SET TALK ON 返回返回4. 多重循环多重循环(循环嵌套循环嵌套) DO WHILE 条件表达式条件表达式1 语句行序列语句行序列11 DO WHILE 条件表达式条件表达式2 语句行序列语句行序列21 DO WHILE 条件表达式条件表达式3 语句行序列语句行序列31 ENDDO&3 语句序列语句序列22 ENDDO&2 语句行序列语句行序列12 ENDDO&1返回返回【例8-25】打印一个6行5列的自然数矩阵。SET TALK OFFCLEARDIME A(6,5)FOR I=1 TO 30 A(I)=IE
24、NDFORFOR I=1 TO 6 FOR J=1 TO 5 ?A(I,J) ENDFOR ?ENDFORSET TALK ON 二维数组可以当作一维数组来处理返回返回【例8-27】编写程序,输出九九乘法表。CLEARFOR Y=1 TO 9 FOR X=1 TO 9 Z= Y * X * ? Y,*,X,= ,Z ? STR(Y,1)+*+STR(X,1)+= +STR(Z,2)+ ENDFOR ?ENDFOR 返回返回 在应用程序系统中,一般是根据实际需要将整个系统划分为若干个模块,然后在主控模块的控制下,调用各个功能模块实现系统的各种功能操作。 通常将这些可被调用的功能模块可被调用的功能
25、模块或能完成某种能完成某种特定功能的独立程序特定功能的独立程序称作,而把把调用其他程序而没有被其他程序调用的程序段调用其他程序而没有被其他程序调用的程序段,称为。 返回返回 结构化程序的总体结构 :主模块主模块子模块子模块子模块子模块子模块子模块调用调用返回返回返回返回 子程序的建立方法与程序文件的建立方法相同,扩展名为.prg。 调用子程序的命令格式为: WITH 指定传递到子程序的参数 返回返回【例8-28】编写主程序调用子程序,计算Z=f(x1)+f(x2)+f(x3)的值,其中f(x)=x2+1。*主程序开始主程序开始INPUT x1= TO x1INPUT x2= TO x2 INP
26、UT x3= TO x3STORE 0 TO z,yx=x1DO SUB& 调用子程序调用子程序SUB,求,求f(x1)z=z+y& 将结果将结果y加入加入z,下同,下同x=x2 DO SUB& 调用子程序调用子程序SUB,求,求f(x2)z=z+yx=x3 DO SUB& 调用子程序调用子程序SUB,求,求f(x3)z=z+y ? z=,zRETURN*子程序开始,文件名为:子程序开始,文件名为:sub.prgy=x2+1RETURN 返回返回 过程定义的命令格式为:PROCEDURE PARAMETER RETURN 表达式表达式ENDPROC 过程调用的命令格式为:过程调用的命令格式为:
27、DO IN WITH 返回返回【例8-29】编写过程求圆的面积并在主程序内调用这个过程。SET TALK OFFCLEARDO AREA&调用过程调用过程SET TALK ONPROCEDURE AREA&过程开始过程开始STORE 0 TO RINPUT 请输入圆的半径:请输入圆的半径: TO RS=3.14156*R*R? 圆的面积为:圆的面积为:+STR(S,8,5) 返回返回有时,在一个程序的执行过程中,可能需要多次执行到某个程序段。这时,用户也可以把这个需要反复执行的程序段程序段编成为独立的程序。当需要执行到这个程序段时,以合适的形式调用调用执行这个程序段。例如例如编写程序计算从编写
28、程序计算从m个元素中取个元素中取n个的组合数,即计算个的组合数,即计算 该公式用到了三个阶乘。为了避免重复,可以把阶乘的计算该公式用到了三个阶乘。为了避免重复,可以把阶乘的计算用一个用一个子程序子程序来实现。来实现。)!( !nmnmcnm返回返回 过程可以作为一个文件独立地存储在磁盘上,因此,每调用一次过程都要打开一个磁盘文件。 (外部过程 ) 所谓过程文件就是过程的集合。 其中每个过程用PROCEDURE 来标识 过程文件中的过程又称作内部过程内部过程 返回返回 过程文件的命令格式如下:PROCEDURE RETURNPROCEDURE RETURNPROCEDURE RETURN 过程文
29、件的建立和修改建立和修改命令的命令格式为:MODIFY COMMAND 1)过程文件的类型名:.PRG2)一个过程文件中最多可以有一个主程序,且必须放在最前。返回返回 打开过程文件打开过程文件的命令格式为:SET PROCEDURE TO 该命令打开指定的过程文件,并将过程文件中所包含的过程全部调入内存。 过程文件的调用过程文件的调用命令格式为:DO WITH 。若要修改过程文件内容,则一定要先关闭该过程文件。 关闭过程文件关闭过程文件的命令格式为:格式1:CLOSE PROCEDURE格式2:SET PROCEDURE TO 当退出VFP系统时,所有已打开的过程文件将会自动关闭。 返回返回文
30、件f1.prg的程序内容为:* 主程序:f1.prgCLEARSET PROCEDURE TO f3 &打开过程文件f3DO f2&调用DO p1* 过程p1PROCEDURE p1? 调用p3()? 返回值:,p3()ENDPROC 文件f2.prg的内容为:* 子程序f2.prg? 子程序f2开始? 调用p2()x = p2()? 子程序f2结束RETURN*过程文件f3.prgPROCEDURE p2RETURNPROCEDURE p3RETURN 100返回返回一、变量的作用域 (内存变量的作用范围)有三种内存变量: 全局变量:全局变量:在关闭VFP应用程序之前一直有效。用语句来定义全
31、局变量。 局部变量:局部变量:在定义它的程序段以及由它所调用到的子程序中保持有效。用语句来定义局部变量。 私有变量:私有变量:在定义它的程序段才有效。用语句来定义私有变量。返回返回(1)全局变量 程序执行完毕,它们,必须使用RELEASE命令予以清除。 在VFP的命令窗口中建立的内存变量,系统默认为全局变量,并赋初值逻辑假。 定义方式有两种: 格式1: 该命令是将中指定的内存变量定义为全局变量。 格式2:(,) (,) 该命令定义数组变量并将其元素定义为全局变量。返回返回【例8-31】主程序和过程中的全局变量。SET TALK OFFCLEAR AA=1DO SUB_PROC?“主程序中:A,
32、B,C,DRETURN *过程Proc SUB_PROC B,C B=2 =3 ?在过程中:A,B,C,DRETURN SET TALK ON 由于变量由于变量D不是全局变量,不是全局变量,在主程序中不能被识别在主程序中不能被识别全局变量全局变量全局变量全局变量全局变量全局变量返回返回(2) 局部变量局部变量 局部变量,。当建立它的模块程序运行结束时,局部变量将自动释放。 定义局部变量的命令格式为: 建立局部变量时,系统赋初值逻辑假。 局部变量要建立后使用。返回返回【例8-32】局部变量的使用。CLEARLOCAL XX=10DO SUB? Y & 出错:找不到变量出错:找不到变量Y(因为(因
33、为Y是过程中局部变量)是过程中局部变量)RETURNPROCEDURE SUBLOCAL YY=20? X & 出错:找不到变量出错:找不到变量X (因为因为X是主程序中局部变量是主程序中局部变量)RETURN 返回返回(3) 私有变量私有变量 没有通过PUBLIC或者LOCAL命令事先声明。 作用域是建立它的模块及其下属的各层模块 命令格式为: 此命令作用是隐藏在上层隐藏在上层模块中可能已经存在的内存变变量量,使得这些变量在当前模块程序中暂时无效暂时无效。 此时,这些变量名就可用来命名可用来命名在当前模块当前模块中需要的私有变量或者局部变量变量。 当前模块程序运行结束返回返回上层模块时时,被
34、隐藏的内存变量就自动恢复有效性恢复有效性,并保持原有保持原有的取值值。返回返回【例8-33】私有变量的使用。CLEARA=1 B=2 D=0?: A=,A, B=,B , D=,D?:A=,A, B=,B, C=,C,D=,DRETURN PROC SUB1PRIVATE B,DPUBLIC CA=10B=11C=12D=13? : A=,A, B=,B, C=,C,D=,D RETURN过程中变量过程中变量主程序中的变量主程序中的变量恢复为主程序中的变量恢复为主程序中的变量返回返回【例8-34】局部变量和私有变量比较示例。CLEARPUBLIC x,y& 定义全局变定义全局变量量x=5y=1
35、0?x,y & 显示显示 5,bbbRETURN *SUB3x=“aaa“ & x为为SUB2中建立的私有变量中建立的私有变量 &y=bbb“ & RETURN*SUB2PRIVATE x& 隐藏主程序中隐藏主程序中xx=50 & 建立私有变量建立私有变量LOCAL y & 建立局部变量建立局部变量y &?x,y & &RETURN1234返回返回 在VFP中把向过程发送消息称为过程调用中的参数传递。 方法是: 在定义过程时定义过程时,设置一个参数表,用来接收过程调用时传递来的参数,称为形式参数表形式参数表; 在调用过程时调用过程时,通过一个参数表向被调用过程传递实际值,这个参数表称为实际参数
36、表实际参数表。 这两个参数表中参数这两个参数表中参数个数相同个数相同,数据,数据类型一致类型一致且排序且排序顺序一一对应顺序一一对应。 返回返回1. 接收参数命令接收参数命令格式1:PARAMETERS 格式2:LPARAMETERS 说明:(1)该命令必须位于被调用过程的第一条可执行语句处位于被调用过程的第一条可执行语句处。(2)格式1声明的形参变量被看作是建立的私有变量,格式2中声明的形参变量看作是模块程序中建立的局部变量,除此之外,二者没有区别。(3)。返回返回 2. 通过过程调用命令传递参数通过过程调用命令传递参数格式1:DO | WITH 格式2: | () 说明: (1)实参可以是
37、常量、变量,表达式。调用时,系统自动把实参传递给对应的形参。形参的数目不能少于实参形参的数目不能少于实参的数目,否则系统会产生运行错误的数目,否则系统会产生运行错误。如果形参数目多于如果形参数目多于实参数目,多余的形参将取逻辑假实参数目,多余的形参将取逻辑假.F.。 (2),由于实参形式的不同,参数传递有两种方式:返回返回 当实参是时,在实参与形参之间的参数传递是按值按值传送的。这时在调用过程时,形参所得到的是实参的值,过程调用结束时,实参将得不到形参的值。按值传送时,实参与形参之间的传递是的。只是实参向形参传递值。返回返回CLEARSET PROC TO P3-4DIME A(3),G(2)
38、G(1)=20STORE 3 TO B,CA=5DO P WITH A(2),B+4,C,G? A(2),B,C,G(1)SET TALK ONRETURNPROCEDURE PPARA X,Y,Z,UX=X+10Y=2*YZ=Y+ZU(1)=X+Y+Z? X,Y,Z,U(1)ENDPROC输入、出输入、出参数参数传值传值返回返回 当实参是内存变量内存变量或数组名数组名时,在实参与形参之间的参数传递是按地址传送的。这时在调用过程时,形参所得到的是实参的地址,过程调用结束时,实参将得到与形参相同的值。 按址传送时,实参与形参之间的传递是双向双向的,即可以是输入参数,也可以是输出参数(返回值)。返
39、回返回SET PROC TO P3-3STORE 0 TO A,B,CINPUT M= TO MINPUT N= TO NDO SUB WITH M,ADO SUB WITH N,BDO SUB WITH M-N,CW=A/(B*C)?W=+STR(W,7) RETURNPROC SUBPARAMETER K,TT=1 FOR I=1 TO KT=T*IENDFORRETURN形式参数形式参数实际参数实际参数输入输入参数参数输出输出参数参数返回返回2. 通过过程调用命令传递参数通过过程调用命令传递参数格式1:DO | WITH 格式2: | () (3)采用格式2时,默认以按值方式传递参数。如
40、果实参是变量,可以通过命令重新设置参数传递方式。重新设置参数传递方式命令如下: 说明: TO VALUE:按值传递。 TO REFERENCE:按址传递。返回返回【例8-36】按值传递和按地址传递示例。CLEARSTORE 100 TO x1,x2SET UDFPARMS & 设置按值传递DO P1 WITH x1,(x2) & x1按地址按地址传递,(x2)按值传递?第一次:,x1,x2STORE 100 TO x1,x2 & x1,(x2)都传递传递?第二次:,x1,x2SET UDFPARMS & 设置引用传递DO P1 WITH x1,(x2) & x1按地址按地址传递,(x2)按值传
41、递?第三次:,x1,x2STORE 100 TO x1,x2 & x1传递,(x2)按值传递?第四次:,x1,x2RETURNPROCEDURE P1PARAMETERS x1,x2STORE x1+1 TO x1STORE x2+1 TO x2ENDPROC (x2)有一对圆括号,是一有一对圆括号,是一般形式的表达式,所以总般形式的表达式,所以总是按值传递。是按值传递。返回返回 8.5.1数组的建立及使用数组的建立及使用 数组是具有相同变量名相同变量名并在内存中占有连续存储连续存储单元的一组数据,数组中的各个变量称为数组元素。 每一个数组元素在内存中独占一个内存单元。为了区分不同的数组元素,
42、每一个数组元素都是通每一个数组元素都是通过数组名和下标来访问的过数组名和下标来访问的。 数组与变量具有相同的作用域原则,可以存储任何类型的数据,数组必须先定义后使用先定义后使用。返回返回1. 数组的定义数组的定义 格式:DIMENSION | DECLARE (,) ,(,)返回返回 在VFP中,规定数组下标的下界为1,最大值将受内存的限制。例如:返回返回 2. 数组的赋值数组的赋值给数组赋值,就是分别给每个数组元素赋值,与给内存变量赋值操作完全相同。 格式格式1: 功能功能:将表达式的值赋给数组中所有元素或某一个元素。例如: STORE 0 TO A &将数值0赋给数组A的所有元素 STOR
43、E 陈红陈红 TO A(2,1) &将“李磊”赋给数组A的第2行第1列的元素 格式格式2: 功能功能:可以用赋值语句直接赋值给数组。例如: A=.T. & 将逻辑真值赋给数组A的所有元素返回返回 【例8-37】定义一维数组,给数组赋值并输出结果。CLEARx = 5& 赋值给数据所有元素STORE 3 TO y(1),y(2)& 赋值给数组前两个元素? x:,x(1),x(2),x(3)? y:,y(1),y(2),y(3)& y(3)的值显示为.F.返回返回 数组变量建立后,数组中的每一个元素的其性质及其使用方法与普通内存变量是类似的 注意:(1)可用STORE命令或其他各种能对内存变量赋值
44、的命令对某个数组元素赋值;(2)可用LIST | DISPLAY MEMORY、RELEASE、CLEAR MEMORY等命令查看、释放或清除已建立的数组变量;(3)可用SAVE命令将数组存入内存变量文件(.mem),或用RESTORE命令将其恢复到内存中来。(4)在同一运行环境中,应注意数组名与一般的内存变量名不要重名。 返回返回 【例8-38】定义二维数组,给数组赋值并输出结果。CLEAR MEMORYDIMENSION aa(2,3)aa(1,1)=王楠aa(2)=是STORE 奥运冠军 TO aa(1,3)aa(6)=ChinaLIST MEMORY LIKE aa 返回返回 1. 将记录内容传递到数组将记录内容传递到数组格式格式1: 功能:将所打的数据表当前记录的各个数据复制并传送到指定数组的各个元素中。 说明: (1)若指定短语FIELDS ,则只传送指定的各字段内容,否则传递所有字段内容。 (2)传递时,从第一个字段开始依次向对应的数组元素传递,各数组元素的数据类型则应由该记录对应的字段类型所决定。 (3)若数组元素的个数比字段个数多,则多余数组元素的值仍保留不变;若数组元素的个数比字段个数少或未定义数组,则系统将自动建立一个新的一维数组来接受传递过来的数据。返回返回格式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外协生产市场调研策略
- 垃圾分类处理挖机租赁协议样本
- 市政道路新建工程路基施工合同
- 智能停车场建设合同
- 科技资源拓展房屋拆迁施工合同
- 曲棍球比赛场地租赁合同
- 天津市菜市场市场调研数据备份
- 洗衣店装修工程投标样本
- 精神健康诊所医生聘用合同样本
- 加拿大餐厅门面租赁合同
- 特种行业许可证申请表
- 书签式三项并列关系图表PPT课件
- 浅析牵引变压器非电量保护误动原因及解决方案
- [精品]台湾地区零售药店的现状与发展趋势
- 小学二年级等量代换
- 焙烧炉烟气换热器的设计方案
- 燃气公司安全管理奖罚办法
- 客位大金湖旅游船初步设计
- KCl-NaCl-H2O三元体系相图
- 血浆置换及临床的应用业内特制
- 雨蝶(李翊君)原版正谱钢琴谱五线谱乐谱.docx
评论
0/150
提交评论