vf子程序、函数与过程

合集下载

VFP常用编程命令及常用函数

VFP常用编程命令及常用函数

VFP常用编程命令及常用函数VFP常用编程命令及常用函数常用编程命令及常用函数注:在语法中如用方括号“[]”括起来的词句,表示可以不用。

常用命令假设(if...endif) 循环(dowhile...enddo)分支(docase...endcase)赋值(store...to) 调用表单(do form) 调用子程序(do)返回调用程序(return) 启动事件处理(readevents)清除事件处理(clearevents)开关命令执行状态(set talkon/off)结束程序(cancel)常用函数数值转换字符(str()) 字符转换数值(val()) 取系统日期(date())取年份(year()) 取月份(month()) 取天日(day())取整(int()) 四舍五入(round()) 删除标记(delete())记录号(recno()) 记录数(reccount()) 找到记录(found())表结尾(eof()) 表开头(bof()) 消除后续空格(trim())消除前导空格(ltrim())假设语句根据一逻辑表达式的值,有条件的执行一组命令。

语法:IF 逻辑表达式 [THEN]程序组1[ELSE程序组2]ENDIF参数:逻辑表达式代表一逻辑值,如果这逻辑值为真,系统执行程序组1,否则不执行程序组1,如果有else及程序组2的话,则执行程序组2,如没有则什么也不执行,直接执行endif后面的语句。

备注:在if...endif之间还可以有if...endif,即该命令是可以嵌套的。

then可以有也可以没有,对程序没有影响。

else及程序组2可以有也可以没有,但如果有的话,在逻辑表达式的值为假时,程序组2将被执行。

if 与 endif 必须配对使用,即有一个 if 必须有一个 endif,否则程序会出错。

举例:例1:假如分数字段的值大于等于90,则让等级字段的值为“优”,并显示该记录。

第5章VFP语言基础-过程和函数

第5章VFP语言基础-过程和函数
.1 程序设计概述 5 .2 结构化程序设计 5 .3 面向对象的程序设计基础
本章重点
结构化程序设计
顺序、选择、循环
过程和函数
面向对象的程序设计
类和对象 属性、方法、事件
2
过程结构(子程序)
某些程序段需要反复执行多次,这些程序段不 在一个固定的位置上,而是分散在程序的许多位置 上重复执行,可将其与嵌入它的程序分开,形成独 立的程序序列,待使用时再调入程序中,以实现不 同位置上的重复操作。这样做增强了程序的可读性 和模块化。我们称这种具有独立功能而且可以被其 它程序调用的程序序列为子程序、过程或函数。
4
2、使用形式
独立的程序文件中:一个UDF独立的保
存为一个文件 过程文件中:多个UDF保存为一个文件 一个具体的应用程序中:位于一个程序 的底部 数据库的存储过程中
5
prg1
(star) … Do gc1 … … ?gc2() … … Do gc1 … … (end) Gc1 (过程) Gc2 (函数)
11
调用注意点2
过程和函数的存在方式
(2)若函数或过程集中保存在某程序 文件中,则应使用如下命令来访问

SET PROCEDURE TO 程序名
12
5、传递参数的方式1
形式参数(形参)
定义时PARAMETERS语句后面所列的参数; 最多可传递27个参数;

实际参数(实参)

调用时使用参数 例: DO Myudf WITH . . . ?Myudf( . . . )

7
3、创建方法
函数
FUNCTION
<函数名> [PARAMETERS <参数列表>] <命令组>

Visual Foxpro程序设计第四章第8讲 用户自定义函数和过程

Visual Foxpro程序设计第四章第8讲 用户自定义函数和过程
ENDFOR ENDIF RETURN (s)
中国矿业大学计算机学院 李向群
10
用户自定义函数
中国矿业大学计算机学院 李向群
例2:创建一个用户自定义函数CCDOW()。功能是: 返回一个日期是星期几,如:CCDOW({^1999/3/1}) 的返回值是“星期一”。
CLEAR
cx={} @4,20 SAY "请输入一个字符型日期: " GET cx
FUNCTION CCDOW(cx)
dx = DOW(cx)
DO CASE
CASE dx=1
title1 = "星期日"
CASE dx=2
title1 = "星期一"
……
CASE dx=7
title1 = "星期六"
ENDCASE
RETURN (title1)
ENDFUNC
15
过程
中国矿业大学计算机学院 李向群
中国矿业大学计算机学院 李向群
第四章 Visual FoxPro程序设计基础 第8讲 用户自定义函数和过程
1
中国矿业大学计算机学院 李向群
用户自定义函数和过程
在程序设计中,经常把完成一个特定功 能的程序编写成一个函数或过程,作为一个 独立的模块,以便在其他程序使用该功能时 调用此模块。
这种用以完成一个特定功能的程序,称 为用户自定义函数或过程。
……
CASE dx=7
title1 = "星期六"
ENDCASE
RETURN (title1)
ENDFUNC
12
中国矿业大学计算机学院 李向群
用户自定义函数举例(二)

vfp 7

vfp 7

1、“过程”与主程序是在同一个文件中。
2、“过程”与主程序各自在不同的文件中。
一、
过程的基本结构
1、过程第一个语句:过程标识语句。
Procedure <过程名>
2、过程中第二个接收参数语句。
[ Parameters <参数1,参数2,…> ]
其中参数必须与调用语句中参数对应。 或者
Procedure <过程名>(<参数1,参数2,…> ) Endproc
? “ P= ” ,P return
&& 转下页
&& 调用自定义函数 && 主程序结束语句
&& 在上述同一文件中输入如下内容:
Function
fac
&& 自定义函数名
parameters N
&& 接收参数 N 值
P=1 for i=1 to N P = P *i endfor
Return P Endfunc
2、给定的参数初值。 3、调用: DO命令
DO <过程名> [ WITH <参数1,参数2,…>]
4、结束前,关闭过程文件:
Close Procedure 5、主程序后面也加上 Return
主程序
MAIN.prg
打开过 程文件
过程文件 F1.prg
Procedure P1.prg
R=5 S=3.14159*R*R ? “S=”,S
MODI COMM
<过程名>
(2)、过程文件使用:
1、打开: Set Procedure TO <过程名>

附录VF常用函数和命令

附录VF常用函数和命令

printf
格式化输出文本,类似于C语言中的printf函数。
文件删除命令
• rm:删除文件或目录。
其他文件操作命令
find
在目录中查找文件。
grep
在文件中查找匹配的文本。
sed
对文件进行流编辑,实现文本替换、删除、 插入等操作。
awk
对文本进行模式扫描和处理,实现数据提取、 统计、报告等功能。
字符串替换函数
总结词
将字符串中的某个子串替换为另一个 子串
详细描述
字符串替换函数用于在字符串中查找 指定的子串,并将其替换为另一个子 串。在VF中,可以使用该函数对字符 串进行修改,例如将特定关键词替换 为其他内容。
其他字符串处理函数
总结词
其他常用的字符串处理函数
详细描述
除了上述提到的字符串长度函数、字符串连接函数和字符串替换函数外,VF还提供了 其他常用的字符串处理函数,如字符串分割函数、字符串查找函数等。这些函数可用于
应用场景
02
用于表示变量之间的关系,如面积、体积等。
示例
03
计算2的3次方,2^3 = 8。
常用数学函数
常数函数
常数函数表示为f(x)=c,其中c是常数。
绝对值函数
表示为|x|,返回x的绝对值。
应用场景
常用于处理数值数据,进行数值计算和统计分析。
示例
计算绝对值,| -5 | = 5。
02
字符串处理函数
指数和对数函数
指数函数
以常数e(约等于2.71828)为底的 指数函数,表示为exp(x)。
对数函数
以10或e为底的对数函数,分别表示 为log10(x)和ln(x)。
应用场景

vf第5章课件

vf第5章课件

[例16]有如下程序: *主程序:MAIN.PRG SET TALK OFF CLEAR S=0 DO SUB WITH 10,S ?S RETU *子程序SUB.PRG PARAMETERS D1,D2 D1=D1+D1 D2=D1*2 RETURN 执行主程序后S的值是__________。 分析:DO...WITH语句中的实在参数除了可以是变量外,还可以是任意有数或表达式。当 为常数时, 直接把值传给对应的形参;当为表达式时,先求其值后把其值传给形参。主程序中变量S 的初值为0, S调用子程序SUB,将数值10和0对应传给子程序中的参数D1和D2,执行D1=D1+D1后, D1=20,再执行D2 =D1*2,D2=40,返回到主程序时D2将值回传给S。因此,在主程序执行?S时,屏幕显示40。
(2)编写程序要学会“拿来主义” 已学程序中的部分程序段是可以用到 新的程 序之中的,因此编写新程序时候要注意引用。 因为拿来要比原创省时间。如求和的循环思经学过的程序中找到影子,因此对于已 学程序的改尤其重要,真正做到改的体无完 肤才行。天下文章难免一抄,天下程序难免 一改! 勤练多想是最好的要诀!
[例14]有下列程序: PARAMETER A,B,C,D D=B* B-4*A*C DO CASE CASE D=O CASE D〈O D=O CASE D〉O D=2 CASE D=O D=1 ENDCASE 在主程序中执行如下命令: STORE 2 TO A,C DO SUB WITH A,B,C,D ?D D的值为————— 分析:执行主程序DO SUB WITH A,B,C,D时,把实参1,2,1,2传递给形参A,B,C,D。 在执行过程 SUB中语句D=B*B-4*A*C后的D值为O,然后执行DO CASE/ENDCASE语句,条件CASE D=O 成立,重新赋值D=1, 最后返回主程序时,把形参A,B,C,D的值1,2,1,1传给对应实参A,B,C,D此时D的值 为1。 答案: 1

实验三 VFP表达式、函数的使用

实验三 VFP表达式、函数的使用

实验三 VFP表达式、函数和命令的使用一、实验目的1、掌握VFP各类型数据的运算符和表达式,能正确由数学表达式转换为VFP 表达式;2、掌握常用VFP函数的功能和使用方法;3、知道VFP命令的一般使用格式,掌握命令的书写规则,了解命令各子句的正确书写格式;二、实验操作内容与步骤1、VFP运算符VFP中运算符分为数值运算符、字符运算符、日期运算符、逻辑运算符和关系运算符,数值运算符以数值数据为操作对象且最终运算结果也是数值数据;字符运算符以字符数据为操作对象而其运算结果可以是字符数据,也可以是逻辑数据;日期运算符以日期数据作为操作对象,运算结果可以是日期数据,也可以是数值数据;逻辑运算符以逻辑数据为操作对象,且其运算结果最终也是逻辑数据;关系运算符以数值、字符、日期、货币等为操作对象,运算最终结果只能是逻辑数据。

数值运算符有:(),^或**,*,,/,+,-,%字符运算符有:+,-,日期运算符有:+,-关系运算符有:<,>,<=,>=,<>或#,=,==,$逻辑运算符有: .NOT.或!,.AND.,.OR.2、VFP表达式(1)数值表达式?2004/4-99^0.5+30%2 491.05a=5b=4c=3n=(a+b+c)/2?”S=”,(n*(n-a)*(n-b)*(n-c))^0.5 6?54%7 5 125.00?5^3(2)字符表达式C1=”CHINA ” &&(注意有四个空格)C2=”中国”C3=”610041 ” &&(注意有四个空格)C4=”2004”?C1+C2 CHINA 中国?C3+C4 6100412004?C1-C2 CHINA中国?C2$C1 .F.?”0”$C3.T.(3)日期表达式?DATE()03/25/11D1=DATE()+20D2={^2004-02-26}D3=DATE-10?D1-DATE() 20?D1+30 05/14/11?D2-D1 -2604?D2>D1 .F.(4)关系表达式?a=b .F.?a>b .T.?a+b>=b+c .T.?c1>C2 .F.?d2<D1 .T.(5)逻辑表达式L1=.T.L2=.F.?.NOT.L1 .F.?L1.Or.L2 .T.?1>2.AND.L1 .F.?DATE()={^2004-02-25}.OR.L1.ANDL2.F.3、常用函数(1)数值函数①、绝对值函数——ABS()?ABS(7-2*4),ABS(-3^4),ABS(200-45) 1 81.00 155②、指数函数——EXP()?EXP(0),EXP(1),EXP(-1) 1.00 2.72 0.37③、取整函数——INT()?INT(100/3),INT(1/6),INT(2**2)33 0 4④、平方根函数——SQRT()?SQRT(9),SQRT(60) 3.00 7.75⑤、最大值和最小值函数——MAX()和MIN()?MAX(12,30,40,90),MIN(1,0,-20,45/9) 90 1⑥、求余函数——MOD()?MOD(4,2),MOD(9,2),MOD(20,-3),MOD(-3,20) 0 1 -1 17MOD(A,B)的功能说明:当A*B>0时,MOD(A,B)=B/|B|*MOD(|A|,|B|)当A*B<0时,MOD(A,B)=B/|B|*(|B|-MOD(|A|,|B|))⑦、圆周率函数——PI()?PI() 3.14(2)字符函数①、求子串位置函数——AT()、ATC()、AT-C()和ATCC()?AT(”FOX”,”Visual FOXPro”),ATC(‘FOX’,“FoxPRO”)8 1 ?ATCC(‘技术’,“发展高新技术产业”) 5②、取子串函数——SUBSTR()和SUBSTRC()?SUBS(“我是中国人”,3,4),SUBSTRC(“我是中国人”,2,2)中国是是③、测试字符串长度函数——LEN()和LENC()?LEN(“中国人民”),LENC(“中国人民”)8 4④、英文字母大小写转换函数——LOWER()和UPPER()?LOWER(“ABCdFG”),UPPER(“dir foxpro”)abcdefgDIR FOXPRO(3)日期时间函数——DATE()、YEAR()、MONTH()和DAY()?DATE(),YEAR(DATE()),MONTH(DATE()),DAY(DATE())03/25/11 2011 3 25(4)转换函数①、ASCII码值与字符转换函数——ASC()和CHR()?ASC“A”),ASC“a“) A a?CHR(65),CHR(97)65 97②、日期形式字符数据与日期数据的转换——CTOD()和DTOC()?CTOD(“03-08-04“)+10,”今天是“+DTOC(DATE())03/18/04 今天是03/25/11③、数值与字符数据的转换函数——STR()和VAL()?STR(12345),VAL(“12345“)12345 12345.004、VFP命令的使用方法(1)、命令名称必须位于命令行的开始位置,其余子句间的位置可以任意,子句间用空格分隔,关键词和命令可以缩写为前四字母组成,大小写等效;(2)、命令中的标点符号必须是英文半角状态下的标点符号;(3)、屏幕行输入不完命令行可以断行于下一行输入,但上行行尾必须使用分号“;“。

VFP命令、函数及程序语句大全

VFP命令、函数及程序语句大全

VFP命令、函数及程序语句大全(2)二、常用函数1、数学函数函数用途ABS(<数值表达式>)绝对值,|x|CEILING(<数值表达式>)>=自变量的最小整数EXP(<数值表达式>)对基E的幂,e=2.71828FLOOR(<数值表达式>)<=自变量的最大整数INT(<数值表达式>)取整(舍尾)自变量LOG(<数值表达式>)自变量的自然对数,ln xLOG10(<数值表达式>)自变量的普通对数,lg xMAX(<表达式1>,<表达式2>)两个值的最大值MIN(<表达式1>,<表达式2>)两个值的最小值MOD(<数值表达式1>,<数值表达式2>)求余数RAND([<数值表达式1>])返回伪随机数ROUND(<数值表达式1>,<数值表达式2>)四舍五入第一个自变量SIGN(<数值表达式>)自变量的符号SQRT(<数值表达式>)平方根(正根)2、字符串操作函数函数用途&<内存变量> 用于代替内存变量内容LEN(<字符串表达式>)返回字符串表达式的字符个数SPACE(<数值表达式>)生成空格SUBSTR(<字符串表达式>,<数值表达式n>[,<数值表达式L>])求子字符串,从指定的字符串表达式第n个开始,总长为L的字符串LOWER(<字符串表达式>)将字符串字母转换成小写字母UPPER(<字符串表达式>)将字符串字母转换成大写字母TRIM(<字符串表达式>)删除字符串尾空格ASC(<字符串表达式>)返回字符串表达式最左边的第一个字符的ASCII码CHR(<数值表达式>)将数值表达式转换成字符AT(<字符串表达式1>,<字符串表达式2>[,<数值表达式n>])确定字符串表达式1在字符串表达式2中的位置,n 为字符串表达式第几次出现STR(<数值表达式>[,<数值表达式L>][,<数值表达式n>)将数值转换为字符串,L为数值表达式总长,n为小数位数VAL(<字符串表达式>)将数字字符串转换为数字TYPE(<表达式>)检测表达式值的数据类型LTRIM(<字符串表达式>)删除字符串左部空格RTRIM(<字符串表达式>)删除字符串右部空格LEFT(<字符串表达式>,<数值表达式n>)取字符串左边部分字符,n为返回的字符个数RIGHT(<字符串表达式>,<数值表达式n>)取字符串右边部分字符,n从右边截取字符个数3、表(.dbf)操作函数函数用途BOF([<工作区号或别名>])查表文件开始函数EOF([<工作区号或别名>])表文件结尾测试函数RECNO([<工作区号或别名>])测试当前或指定工作区表的当前记录号DELETED([<工作区号或别名>])记录删除测试函数FILE(<"字符串">)测试文件是否存在函数DBF([<工作区号或别名>])检测表的文件名函数4、日期、时间函数函数用途DATE()查系统当前日期函数TIME([<数值表达式>])查系统当前时间函数YEAR(<日期型表达式>|<日期时间型表达式>)由日期查年函数MONTH(<日期型表达式>|<日期时间型表达式>)从日期查月份函数CMONTH(<日期型表达式>|<日期时间型表达式>)由日期查月份名函数DAY(<日期型表达式>|<日期时间型表达式>)从日期查当月的日函数DOW(<日期型表达式>|<日期时间型表达式>[,<数值表达式>])由日期查星期函数CDOW(<日期型表达式>|<日期时间型表达式>)从日期查星期名函数DTOC(<日期型表达式>|<日期时间型表达式>)日期转换为字符函数CTOD(<字符串表达式>)字符串转换为日期函数CTOT(<字符串表达式>)返回日期时间值函数TTOC(<日期时间型表达式>)返回字符值5、显示、打印位置函数函数用途ROW()判断光标行位置函数COL()判断光标列位置函数INKEY([<数值表达式>])检测用户所击键对应的ASCII码函数,数值表达式以秒为单位等待击键的时间6、其他函数函数用途DISKSPACE()返回默认磁盘驱动器中可用字节数函数OS()检测操作系统名称的函数VERSION()返回VFP版本号的函数VFP命令、函数及程序语句大全(3)三、主要程序语句1、条件判断语句(1)IF <条件><命令语句组>ENDIF说明:如果条件为真,则执行命令语句组中的各语句,否则跳过这些命令语句不执行,而执行ENDIF后的语句。

vf子程序、函数与过程

vf子程序、函数与过程

私有变量
在程序中直接使用(没有预先声明),而 由系统自动隐含建立的变量都是私有变 量。 私有变量的作用域是建立它的模块及其 下属的各层模块。
*主程序 main.prg r=100 DO sub ?p RETURN *子程序sub.prg p=2*3.14*r RETURN
*主程序 main.prg r=100 DO sub ?p RETURN *子程序sub.prg PUBLIC p p=2*3.14*r RETURN
子程序: z2.prg x3=x3+1 return to master
例建立函数,计算N!
function jc &&自定义jc函数 parameters jcn &&将n的值传给参数jcn f=1 &&阶乘初值 for k=1 to jcn f=f*k &&计算阶乘,结果存入f endfor return f &&将f的值返回调用函数
DO <子程序名> [WITH <实参表>] DO <子程序名> <子程序名> (实参表) <子程序名> ( ) 说明: 1、执行子程序,子程序结束后返回到上级调用该子程 序命令的下一条命令处。子程序可嵌套调用。 2、实参表:指定传递到子程序的参数,实参可以是表达 式、内存变量、常量、字段名或用户定义函数等。各 参数之间用逗号分隔。传递给一个子程序的参数最多 为24个。实参与形参的个数、类型、顺序要匹配。
一、子程序定义形式:
[PROCEDURE|FUNCTION<子程序名>] [PARAMETERS <形参>] <命令序列> [RETURN[<表达式>]] [ENDPROC|ENDFUNC]

VF数据库带参数的子程序调用201210

VF数据库带参数的子程序调用201210

●带参数的子程序调用:1、建立子程序SUBJC.PRG,功能是求x的阶乘,代码如下:Parameters x , y && 定义形式参数N=1Y=1Do while n<=xY=Y*n &&累计乘积的表达式,结果保存y变量中N=N+1Enddoreturn &&返回主程序, 将y值回传给s,即s=y2、建立主程序JCMAIN.PRG,代码如下:S=0Do SUBJC with 5, S && 调用子程序,并传递参数5,S, 即x=5 y=s ? S &&120 5的阶乘值●带参数的过程文件调用1、建立过程文件SP1.PRG,功能是求x的阶乘,代码如下:Procedure JC &&在过程文件中定义一个名为JC的过程Parameters x , y &&定义形式参数N=1Y=1Do while N<=xY=Y*NN=N+1EnddoReturn &&返回主程序,将y值回传给s,即s=y注:多个过程可以放在一个过程文件中,用过程名来区分。

实际上,过程和子程序是一回事,只不过把多个子程序保存在一个PRG文件中,在PRG文件中每个子程序(过程)用Procedure 语句单独定义罢了,而把这个PRG文件成为过程文件。

2、建立主程序SPMAIN.PRG,代码如下:Set procedure to sp1 &&打开过程文件SP1.PRGS=0Do JC with 5,S &&调用JC过程,并传递参数5,S,即x=5 y=s? SSet procedure to &&关闭过程文件。

VFP程序设计子程序过程函数

VFP程序设计子程序过程函数
10
子程序 子程序文件
过程 过程 过程
程序 过程 过程
过程文件 复杂的过程文件
11
三.过程及过程文件-建立
一)建立 1.方法:用MODI COMM命令.
例如: modi comm general 2.过程的结构:
PROCEDURE <过程名> <过程体>
RETURN [TO MASTER/TO <过程名>] 或Endproc
X=M DO jc &&求阶乘 DO sum &&求和 ENDFOR SET PROC TO RETU
*主程序jc.prg
PROC jc T=1 FOR F=1 TO X
T=T*F ENDFOR X=T RETU
PROC sum ?M,S S=S+X
RETU
过程文件:general.prg 16
四、自定义函数
<过程体> RETURN [TO MASTER/TO <过程名>]
13
三.过程及过程文件-打开、关闭、调用
二)过程文件的打开和关闭 打开:SET PROCEDURE TO <过程文件名> 关闭:SET PROCEDURE TO
或:CLOSE PROCEDURE 三)调用
打开过程文件后, 用 DO <过程名>[WITH 参数表]
子程序、过程或自定义函数。
他们在命名方式、存储方法和参数传递 上略有不同。
4
子程序、过程和自定义函数
一、子程序 子程序是一个相对独立的程序段。子程序总
是被其他程序调用,一般不单独执行。
一)建立和修改 用MODI COMM命令 例如:MODI COMM SUM.PRG MODI COMM TJ

vf命令函数程序设计

vf命令函数程序设计
母转换为小写。 3) UPPER(<字符串表达式>) – 将字符串中小写字母转
换为大写。 4) SPACE(<数值表达式>) – 生成包含指定个数空格 符的字符串。 5) TRIM(<字符串表达式>) – 去掉字符串尾部连续空格。 6) LTRIM(<字符串表达式>) – 去掉字符串首部连续空
格。 7) ALLTRIM(<字符串表达式>) – 去掉字符串首尾连续
11. 浏览数据、修改数据
BROWSE [FIELDS <字段名列表>] [NOEDIT] [TITLE <标题>]
LIST STRUCTURE LIST [OFF] [记录范围] [FIELDS <字段名列表>] [FOR <逻辑表达式>]
DISPLAY STRUCTURE DISPLAY [OFF] [记录范围] [FIELDS <字段名列 表>] [FOR <逻辑表达式>]
10. 记录检测函数
函数格式
返回值说明
RECCOUNT([<工作区号> | <"表别名">])
RECNO([<工作区号> | <"表 别名">])
BOF([<工作区号> | <"表别 名">]) EOF([<工作区号> | <"表别 名">]) DELETED([<工作区号> | <" 表别名">]) FOUND([<工作区号> | <"表 别名">])

vf子程序、函数与过程

vf子程序、函数与过程
子程序: z2.prg x3=x3+1 return to jc &&自定义jc函数 parameters jcn &&将n的值传给参数jcn f=1 &&阶乘初值 for k=1 to jcn f=f*k &&计算阶乘,结果存入f endfor return f &&将f的值返回调用函数
modify command main
*main.prg set talk off input "输入n:" to n s=0 do sum with n ?s set talk on return procedure sum parameters sn for k=1 to sn s=s+k endfor endproc
modify command main
*main.prg set talk off input "输入x:" to x input "输入y:" to y z=fun2(x,y) ?x,y,z set talk on return
modify command fun2
*fun2.prg parameters a,b c=a*a-b*b return c
例求组合:Cn
modify command cmn set talk off input “输入m” to m input “输入n” to n c=jc(m)/(jc(n)*jc(n-m)) ?c set talk on return
m
function jc parameters jcn f=1 for k=1 to jcn f=f*k endfor return f

VFP-程序设计-子程序过程函数

VFP-程序设计-子程序过程函数

21
例:编写自定义函数 sum(n)=1+2+3+…+n 方法二 编写自定义函数
set proc to general s=0 do sum with 100 ?s ?sum(100) x=sum(100) ?x Function sum PARA N S=0 I=1 DO WHILE I<=N S=S+I I=I+1 ENDDO RETU S Endfunc
5
子程序、 子程序、过程和自定义函数
调用、 二)调用、返回 调用 1.调用子程序 调用子程序 DO <子程序文件名 [WITH 参数表 子程序文件名> 参数表] 子程序文件名 例如: 例如:DO SUM WITH 100,200 DO TJ 2. 返回 RETURN [TO MASTER] 从子程序返回上一级子程序. 从子程序返回上一级子程序 TO MASTER选项 则返回主控程序. 选项,则返回主控程序 选项 则返回主控程序
VFP程序设计VFP程序设计-子程序过程函数
主讲:杜春敏
[问题 问题] 问题
如果程序中需要多次使用相同或相似的代码段, 如果程序中需要多次使用相同或相似的代码段,有没有更好 的方法来解决? 的方法来解决?
S=0 I=1 一个循环,两次调用 Do while I<=100 s= s+I I=I+1 Enddo I=1 Do while I<=200 s= s+I 并列的两个循环 I=I+1 Enddo Do sum with 100 Do sum with 200 S=0 I=1
4
子程序、 子程序、过程和自定义函数
一、子程序 子程序是一个相对独立的程序段。 子程序是一个相对独立的程序段。子程序总 是被其他程序调用,一般不单独执行。 是被其他程序调用,一般不单独执行。

VFP命令、函数及程序语句大全.

VFP命令、函数及程序语句大全.

VFP命令、函数及程序语句大全(1)VFP命令是一种实现对数据库系统进行操作的动词或短语。

VFP命令可在VFP命令窗口中单独运行,也可编制成程序成批运行,由命令和函数编制的程序可对数据库系统进行自动、复杂的操作,使数据库系统应用起来更加友好、方便。

VFP常用命令分类表类别命令建立文件类CREATE,MODIFY,COPY,SAVE等数据库操作类USE,CLOSE,COPY,MODIFY S TRUCTURE等等数据编辑类BROWSE,EDIT,CHANG,REPLACE,UPDATE记录指针操作类GOTO,LOCATE,SEEK,FIND,SKIP等等记录操作类APPEND,DELETE,INSERT数据显示类BROWSE,LIST,DISPLAY等等数据统计类SUM,COUNT,AVERAGE,TOTAL等存变量操作类ACCEPT,INPUT,READ,SAVE程序控制类DO,DO WHILE…ENDDO,IF…ENDIF等系统设置类SET TALK,SET DEFAULT TO等命令格式VFP命令一般由命令动词和控制短语构成。

一般格式:命令动词[FROM<源文件>][TO<目标文件>][记录范围][FOR/WHILE<条件>] [FIELDS<字段名表>][ ]表示可选,<>表示必选, / 表示或选例如:(1)APPEND FROM C:\RSDA.DBF FOR 基本工资>100 FIELDS 编号,姓名,职称,基本工资。

从C:\RSDA.DBF 表中把基本工资大于100元的记录添加到当前表添加字段为:编号,姓名,职称,基本工资。

(2)COUNT FOR 职称="高工"TO GG 统计高工的记录数到内存变量GG。

控制短语规定了对数据库操作的限制条件:1.指向输入输出目标FROM/TOAPPEND FROM,COPY FILE TO <目标文件>2.限制记录范围(SCOPE)ALL 所有记录NEXT<n> 本记录后的第几个记录RECORD<1> 第1个记录REST 当前记录之后所有记录3.选择字段FIELDS<字段表>选择输入/输出的字段。

vfp中的过程与作用域

vfp中的过程与作用域
7-5 过程与变量的作用域

一、子程序与主程序的概念
1、结构化程序设计方法:核心思想是程序的模块化,它可把一个大的复杂的应 用程序按功能分解成若干个相对独立的模块,这些模块就叫做子程序(过程)。
使用时可以用一个主程序调用这些过程。
2、模块化程序设计优点: 1)方便开发、调试和调用。 2)子模块本身可以反复被调用,可避免重复输入。 3、主程序 — 程序执行过程中,调用其他程序的称为主程序。
例1:编写一个求1到N的累加和的过程,并在过程中输出和。 clear input "Please input n :" to x do leijia with x Return procedure leijia parameters n sum=0 for i=1 to n sum=sum+i endfor ?sum return
①调用程序:
格式1:do <文件名> with 实参1,实参2……
实参为常量、表达式,把值给形参(按值传递) 实参为变量,把地址给形参,这时形参、实参为同一个变量(按引用(址)传递)
格式2:<文件名>(实参1,实参2……) 默认按值传递,可以通过命令 set udfparms to value | reference 重设参数的传递方式
RETURN
Procedure P2.prg
R=5 S=R*R ? “S=”,S
RETURN
Procedure P3.prg
R=5 V= R*R*R ? “V=”, V
RETURN
例题1 : *把上例的两个过程放在过程文件中。MODIFY COMMAND GCWJ1 procedure GC1 ?"这是过程1" Return procedure GC2 ?"这是过程2" Return *调用上面定义的过程文件中的两个过程。 SET TALK OFF ?"这是主程序" set procedure to gcwj1 DO GC1 DO GC2 close procedure SET TALK ON RETURN

VFP程序设计子程序过程函数

VFP程序设计子程序过程函数
VFP程序设计-子程序过程函数
主讲:杜春敏
[问题]
如果程序中需要多次使用相同或相似的代码段,有没有更好 的方法来解决?
S=0 I=1 Do while I<=100 一个循环,两次调用 S=0 I=1 Do sum with 100 Do sum with 200
s= s+I
I=I+1 Enddo
使用方法: Set proc to general X=100 Y=200 S=0 Do jia with x,y,s ?s Do jian with x,y,s ?s …… Set proc to
PROCEDURE jia para x,y,s s=x+y Endproc
PROCEDURE jian para x,y,s s=x-y Endproc
17
四、自定义函数 一个自定义函数有两种形式: (1)一个自定义函数是一个独立的命令 文件,其扩展名为.PRG,函数文件与一 般命令文件的区别是函数命令文件通过 RETURN命令返回一个函数值。 (2)一个自定义函数是一个独立的命令模 块,放在过程文件中。函数通过RETURN命 令返回一个函数值。
子程序FACT.PRG
实际操作: 运行:DO JS
7
主程序JS.PRG
例:写出程序运行结果.
set talk off X2=x2+1 x3=x3+1
store 2 to x1,x2,x3
x1=x1+1
do z2
?x1+x2+x3 Z1.PRG
return to; master
Z2.PRG
do z1
主程序SAN.PRG
S=SQRT(T*(T-x)*(T-y)*(T-z))

VFP自定义过程和函数

VFP自定义过程和函数

[课题]:自定义过程、函数与子程序[目的要求]:了解子程序、自定义过程与函数,掌握自定义过程与函数的格式、参数、调用,通过实例领会自定义过程与函数的编写。

了解有关形参与实参的概念,掌握调用过程与函数时参数的传递[重点]:过程与函数的格式、参数、调用;过程与函数的编写;参数的传递。

[难点]:解决问题能力的培养和提高。

[学时]:4学时[教学过程及内容]:导入:程序设计时,将一个大的程序按功能分解成若干相对独立的模块,一个模块用来完成一个特定的任务。

由其它模块调用的、完成某种特定功能的独立程序,叫做子程序或过程、函数。

例如求8!+6!+9!的和。

如果我们把求阶乘的程序写成一个子程序或过程或函数,那么在执行时只是参数不同罢了。

这样就大大地简化了我们的程序。

今天我们一起来了解有关于子程序、过程、函数的有关内容。

新授内容:一、子程序概念:子程序实质上是一个程序文件。

1、建立:modi comm 子程序名2、格式:与程序一样3、调用:do 子程序名 [WITH 参数]4、例:求8!+6!+9!的和&&main.prg JC.PRGSET TALK OFF SET TALK OFFCLEAR CLEARS=0 P=1N=8 FOR I=1 TO NDO JC P=P*IN=6 ENDFORDO JC S=S+PN=9 RETURNDO JCSRETURN或&&MAIN.PRG JC.RPGSET TALK OFF PARAMETERS NCLEAR P=1S=0 FOR I=1 TO NDO JC WITH 8 P=P*IDO JC WITH 6 ENDFORDO JC WITH 9 S=S+PS RETURNRETURN二、自定义过程概念:由procedure开头,endproc结尾一段代码,我们称之为过程。

1、格式:PROCEDURE 过程名[LPARAMETERS 参数列表]过程体[RETURN [TO MASTER|TO 程序名]]ENDPROC2、例CLEARS=0DO JC WHIT 8DO JC WITH 6DO JC WITH 9“8!+6!+9!的和为:”SRETURNPROCEDURE JCLPARAMETERS XP=1FOR I=1 TO XP=P*IENDFORS=S+PENDPROC3、说明:(1)过程名的定义同变量命名规则(2)参数用于接受从调用语句传过来的值(do jc with 6),各参数间用“,”分隔。

VFP过程设计课件

VFP过程设计课件
5.6 过程程序设计
1、子程序
2、过程
3、参数传递 4、自定义函数
2014年11月18日
主程序:cc.prg @2,3 say “好好学习 Do p1 3 Do p2 个 Return 程 序 子程序p1.prg 文 @3,3 say “********” 件 子程序p2.prg @4,3 say “天天向上”
流程二
多个子程序
定 义 为 procedure
流程一 过程文件:存放多个过程的程序文件, 多个子程序 扩展名 .prg
打开过程文件: 义 procedure Set procdure to [过程文件名] 为 多个过程 关闭过程文件: Set procdure toΒιβλιοθήκη 存 放 于定多个过程
存 放 于
一个过程文件
定 义 为
procedure
流程一
多个过程
存 放 于
自 动 打 开
主程序后面
练习一
Clear @4,10 say “白日依山尽” 编程:输出下面唐诗,要求主程 Do p1 序aa.prg只输出第一句,其他三 Do p2 Do p3 句分别使用三个过程输出,定义 Return 的过程放在主程序后面 Procedure p1 @5,10 say “黄河入海流” 白日依山尽 Endproc Procedure p2 黄河入海流 @6,10 say “欲穷千里目” 欲穷千里目 Endproc Procedure p3 更上一层楼 @7,10 say “更上一层楼” endproc
流 程 二
改写
Clear @4,10 say “白日依山尽” Set procedure to f:\gc.prg Do p1 Do p2 Do p3 Set procedure to Return Procedure p1 @5,10 say “黄河入海流” Endproc F:\gc.prg Procedure p2 @6,10 say “欲穷千里目” Endproc Procedure p3 @7,10 say “更上一层楼” endproc
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例 写出下列程序的输出
clear store 3 to x store 5 to y
do plus with x ,y
?x,y procedure plus parameters a1,a2 a1=a1+a2 a2=a1+a2 endproc

area=sub( x,y,z )

? "Area="+STR(area,6,2)

RETURN


FUNCTION sub
PARAMETER a,b,c
p=(a+b+c)/2
s=SQRT(p*(p-a)*(p-b)*(p-c))
RETURN s
SET TALK OFF area=0 CLEAR INPUT "请输入第一边大小:" TO x INPUT "请输入第二边大小:" TO y INPUT "请输入第三边大小:" TO z DO sub WITH x,y,z ? "Area="+STR(area,6,2) RETURN
*exb.prg
r=100
p=10
10
do sub
?p
return
procedure sub private p p=2*3.14*r return
局部变量
局部变量只能在建立它的模块中使用, 不能在上层或下层模块中使用。程序结 束时,自动释放局部变量。
LOCAL<内存变量表>
该变量同样给建立的内存变量赋以初值 逻辑假.F.,也必须先定义后使用。
该命令并不建立内存变量,它只是隐藏指定的 在上层模块中可能已经存在的内存变量,但是 当模块程序返回到上层模块时,被隐藏的变量 就自动恢复有效性,保持原值。
*exa.prg r=100 p=10 do sub ?p
return procedure sub p=2*3.14*r return
628.00
行使用PARAMETERS <形参>命令,否则可省略。
一、子程序定义形式:
[PROCEDURE|FUNCTION<子程序名>] [PARAMETERS <形参>] <命令序列> [RETURN[<表达式>]]
[ENDPROC|ENDFUNC]
说明: 4、子程序执行到RETURN命令,控制权转回到上级调 用程序。需要返回一个值,则选用RETURN <表达式> 命令;使用 RETURN TO MASTER 转回到最上级主 程序;缺省RETURN命令,子程序结束处自动执行一 条隐含的RETURN命令;若RETURN命令不带表达式, 则返回逻辑真.T. 。
procedure sum parameters sn for k=1 to sn s=s+k endfor
return
SET TALK OFF
area=0
例 计 算
CLEAR INPUT "请输入第一边大小:" TO x INPUT "请输入第二边大小:" TO y INPUT "请输入第三边大小:" TO z
(实参与形参之间的数据传递)
常量和表达式只能使用值传递方式
内存变量既可以使用值传递方式,又可以使 用地址传递方式。使用值传递方式的变量要 用括号括起来,使用地址传递方式的变量不 加括号。
采用 子程序名(实参) 方式调用时,默
认按值传递方式传递参数。
例 写出下列程序的输出
set talk off x=1 y=3 do sub with x,(y),5 ? x,y return procedure sub parameter a,b,c a=a+b+c b=a+b-c return
endfunc
modify command main
*main.prg set talk off input "输入x:" to x input "输入y:" to y z=fun2(x,y) ?x,y,z set talk on return
modify command fun2
*fun2.prg parameters a,b c=a*a-b*b return c
PROCEDURE sub PARAMETER a,b,c p=(a+b+c)/2 area=SQRT(p*(p-a)*(p-b)*(p-c)) RETURN
7.5.2 内存变量的作用域
变量的作用域指的是变量在什么范 围内是有效或能够被访问的。 Visual FoxPro中,分为公共变 量、私有变量和局部变量3类。
modify command main
*main.prg set talk off input "输入n:" to n s=0 do sum with n ?s set talk on return
procedure sum parameters sn for k=1 to sn s=s+k endfor
endproc
modify command main
*main.prg set talk off input “输入圆半径" to r do area with r return
modify command area
*area.prg para cr s=pi()*cr*cr ?cr,s return
function fun1 parameters a,b c=a*a-b*b return c
endfunc
形参为子程序中的局部
变量,这些局部变量可以
接收上级程序中实参传
递来的参数,也可以回送 子程序运行的结果。
实参可以是常量、变量或 一般表达式,调用模块程 序时,形参的数目不能少 于实参的数目,当形参数 目多于实参数目时,多余 的形参取初值逻辑假.F.。
公共变量
在任何程序模块中都可使用的变量称为公共 变量。公共变量必须先定义后使用。
PUBLIC <内存变量名表>
该命令是建立公共的内存变量,并赋以初值 逻辑假.F.。建立好的公共变量一直有效, 即使程序结束返回命令窗口也不会消失,只 有执行CLEAR MEMORY,RELEASE或 QUIT等命令后,才能被释放。
二、子程序的调用
DO <子程序名> [WITH <实参表>] DO <子程序名> <子程序名> (实参表) <子程序名> ( )
说明: 1、执行子程序,子程序结束后返回到上级调用该子程
序命令的下一条命令处。子程序可嵌套调用。 2、实参表:指定传递到子程序的参数,实参可以是表达
式、内存变量、常量、字段名或用户定义函数等。各 参数之间用逗号分隔。传递给一个子程序的参数最多 为24个。实参与形参的个数、类型、顺序要匹配。
主程序
… DO A …
子程序A
… DO B

RETURN
子程序B
… RETURN
主程序
子程序A
… DO A …
… DO B …
RETURN
子程序B

RETURN TO MASTER
主程序
… DO A

子程序A
… DO B

RETURN
子程序B

RETБайду номын сангаасRN … …
主程序: z.prg
set talk off store 2 to x1,x2,x3 x1=x1+1 do z1 ?x1+x2+x3 return
例创建过程文件,计算 1+2+3+….+n
procedure sum
parameters sn &&将n的值传递给参数sn
for k=1 to sn
s=s+k
&&计算连加和,结果存入s
endfor
return
&&返回调用程序
*main.prg set talk off input "输入n:" to n s=0 do sum with n ?s set talk on return
modify command main
*main.prg set talk off input "输入x:" to x input "输入y:" to y z=fun1(x,y) ?x,y,z set talk on return
function fun1 parameters a,b c=a*a-b*b return c
7.5 程序的模块化
模块化程序设计思想 子程序、函数、过程 内存变量的作用域 调用子程序时的数据传递
7.5.1 子程序、过程和函数
应用程序一般都是多模块程序,包 含多个程序模块。模块是相对独立的一 个程序段,他可以被其它模块调用,也
可以去调用其他的模块。被其它程序调 用的模块称为子程序。调用其它模块而
值传递和地址传递
(实参与形参之间的数据传递)
值传递方式:则子程序中参数变化后的值不 回传给上级调用程序。
地址传递方式:则子程序中参数变化后的值 要回传给上级调用程序 如果不允许子程序改变传递参数变量的值, 应该使用值传递方式。如果允许子程序改变 传递参数变量的值,则要使用地址传递方式。
值传递和地址传递
10
子程序: z1.prg x2=x2+1 do z2 x1=x1+1 return
子程序: z2.prg x3=x3+1 return
相关文档
最新文档