收藏 分享(赏)

VFP第5章.pptx

上传人:dreamzhangning 文档编号:3322193 上传时间:2018-10-13 格式:PPTX 页数:133 大小:1.83MB
下载 相关 举报
VFP第5章.pptx_第1页
第1页 / 共133页
VFP第5章.pptx_第2页
第2页 / 共133页
VFP第5章.pptx_第3页
第3页 / 共133页
VFP第5章.pptx_第4页
第4页 / 共133页
VFP第5章.pptx_第5页
第5页 / 共133页
点击查看更多>>
资源描述

1、1,主编 杜春敏,Microsoft,Visual FoxPro 程序设计,2,第5章 结构化程序设计,3,VFP是一种高级语言,它提供了三种工作方式:交互方式、程序方式和菜单方式。前面所学的命令就是交互式,本章介绍程序执行方式。,4,程序是指能够完成特定任务的命令序列。这些命令序列以文件形式存入磁盘,这个文件称为程序文件或命令文件,其扩展名为.prg。,5,5.1程序文件的建立与修改,5.1.1 程序的创建 在VFP中,创建程序可以使用菜单方式或命令方式。,6,1. 菜单方式, 选择“文件”菜单下的“新建(N)”,或单击工具栏中的“新建”按钮,或者直接按热键“Ctrl+N”,打开“新建”对话

2、框; 在“新建”对话框中选择“程序”,再单击“新建文件”按钮,弹出程序编辑窗口; 在程序编辑窗口中录入程序内容; 程序录入完毕,按Ctrl+W保存文件,并关闭程序编辑窗口,返回VFP主窗口。,7,2命令方式,格式:MODIFY COMMAND文件名 功能:打开一个程序编辑窗口,建立或修改程序文件。 说明:文件名缺省,则新建的程序文件默认文件名为程序1、程序2、,如图5-1所示。,8,图5-1 缺省文件名的命令方式打开的程序编辑窗口,9,5.1.2 程序的编辑及运行,1.程序的打开及编辑我们通常用如下方法打开程序文件并进行编辑修改: (1) 菜单方式(2) 命令方式,10,(1)菜单方式,选择“

3、文件”菜单下的“打开(O)”,或单击工具栏中的“打开”按钮,或者直接按快捷键“Ctrl+O”,打开“打开”对话框。在文件类型一栏选择“程序*.prg;*.spr;*.mpr;*.qpr)”,再从查找范围中找到相关文件名,单击选中,最后单击“确定”按钮即可。在打开的程序编辑窗口可对源程序进行修改。,11,(2)命令方式,直接用MODIFY COMMAND文件名,即可打开相关文件进行编辑修改。 注:VFP程序是命令行的序列,每条命令都必须以回车键结尾,一行只能写一条命令,若一条命令很长需分行写时,分行处要添加续行符“;”。,12,2.程序运行,程序编辑修改后,最好先保存。保存后便需要运行来验证结果

4、。运行程序的方法通常有以下几种:(1)菜单方式(2)命令方式,13,(1)菜单方式:选择“程序”菜单下的“运行”(或按快捷键Ctrl+D),弹出“运行”对话框;(2)命令方式格式:DO 功能:执行指定文件名的程序。,14,注:可以包含路径、程序文件的扩展名。缺省路径为当前文件夹。程序编辑窗口为当前活动窗口时,执行程序也可使用工具栏中的“!”工具按钮或按快捷键“Ctrl+E”。,15,例5-1:通过键盘输入两个数,计算两个数的乘积,并输出计算结果。,分析:按题示,步骤如下:,操作: *MODI COMM EX5-1.PRGSET TALK OFFINPUT 输入数A: TO AINPUT 输入数

5、B: TO B?A*BSET TALK ONRETURN 存盘:Ctrl+W,开始,求积:,结束,A*B,?A*B,输入两个数,输出结果:,A、B,16,补充:1.显示xs.dbf中在1985年以后出生的记录。2.显示xs.dbf中所有是党员的记录。,DISPLAY FOR 出生年月1985/12/31,LIST FOR 党员否,党员否,或:DISPLAY FOR year(出生年月)1985,17,18,5.2 简单的交互式输入/输出命令,1.非格式化输入命令1) WAIT命令(输入单个字符语句)WAIT TO WINDOWTIMEOUT 作用:接收通过键盘输入的一个字符,保存到指定的内存变

6、量。注:缺省,屏幕显示:“按任意键继续”,19,2)ACCEPT命令(输入字符串语句)ACCEPT TO 3)INPUT命令(输入任意型数据)INPUT TO 作用:接收通过键盘输入的数据,保存到指定的内存变量。,操作,20,注: ACCEPT命令只能接收字符型数据,不需 加定界符引号或方括号,输入完成后按回车;INPUT命令可以接收N型,C型,D型,L型,除N型外,其他各型均要用定界符括起;WAIT命令只能接收一个字符,且不需按回车。,21,2.非格式化输出命令1)?命令? 计算表达式的值,并把表达式的值在当前行的下一行的首位输出.2)?命令? 计算表达式的值,并把表达式的值在当前行的当前光

7、标位置输出.,22,3)文本输出语句TEXTENDTEXT 功能:将文本内容原样输出。 说明:TEXT和ENDTEXT各独占一行,且必须成对使用。,23,3.格式化输入/输出命令 (1)简单的格式输出命令 SAY ,例如:输出计算机的系统日期命令为: 10,30 SAY “今天日期是:“+DTOC(DATE() 假如今天日期是2012年1月4日,命令执行后,结果如图5-2所示:,24,图5-2 格式输出示例,25,(2)简单的格式输入命令 SAY GET READ,26,例5-2:利用GETREAD语句修改XS表的当前记录。*EX5-2.PRGSET TALK OFFCLEARUSE XS3,

8、15 SAY “学号:“ GET 学号3,33 SAY “姓名:“ GET 姓名5,15 SAY “出生日期:“ GET 出生日期5,39 SAY “专业:“ GET专业7,15 SAY “班级:“ GET班级READUSESET TALK ON,思考:若要修改指定某一条记录,对该程序作何修改?,27,5.2.2 常用的程序辅助命令 1.注释命令:行首注释: NOTE*行尾注释:& ,28,2. 中止命令 CANCEL 结束程序运行,清除内存变量,返回命令窗口 QUIT结束程序运行,返回WINDOWS SUSPEND暂停程序执行,返回命令窗口。输入 RESUME继续执行,29, RETURN

9、TO MASTER/TO 结束一个程序或自定义函数返回调用程序或命令窗口.,30,3.状态设置命令设置会话状态命令SET TALK ON/Off打开/关闭人机对话框,有些命令(AVERAGE,SUM等)在执行时会返回一些有关执行状态的信息。,31,4.清屏命令(1) CLEAR清除VFP主窗口或当前窗口信息。(2) CLEAR TO 清除一个矩形区域。,32,33,5.3.1 顺序结构,一、结构化程序的基本结构VFP是一种结构化的程序设计语言,它有三种基本结构:顺序结构 、分支结构 、循环结构 顺序结构 按语句出现的先后顺序执行。,A,B,入口,入口,出口,出口,34,分支结构,根据条件真假,

10、选择两个或多个分支中的一个分支来执行。,入口,出口,入口,出口,35,循环结构,根据条件真假,重复执行一个语句块。,条件,B,真,假,B,真,条件,入口,入口,出口,出口,36,二、结构化程序设计的特点1、只有一个入口;2、只有一个出口;3、无死语句;4、无死循环。,三、结构化程序设计的方法1、自顶向下;2、逐步求精;3、模块化。,四面向对象的程序设计技术VFP提供了面向过程和面向对象的程序设计方法,37,五.VFP程序设计的步骤,分析任务、提出解决问题的办法 数据库设计 编制程序流程图 编制程序 运行调试 编制说明文档 系统维护,常用流程图符号,38,5.3.2 分支结构,1.单向分支/双向

11、分支 (1)命令格式:IF ELSE ENDIF,39,(2)执行方法: 在两个命令序列中选择一个执行,即如果条件成立,执行IFELSE之间的命令序列B1,然后执行ENDIF后面的命令;如果条件不成立,执行ELSEENDIF之间的命令序列B2 ,再执行ENDIF后面的命令。,40,如果没有ELSE之后的命令序列B2,这就是单向分支语句,那么条件不成立时,则直接跳转到ENDIF后面的语句执行。,41,例5-3:用键盘输入学号,在XS.DBF中查找指定学号的记录,找到则显示该记录;否则不作任何操作。,*MODI COMM EX5-3.PRG SET TALK OFFCLEARACCEPT “请输入

12、学号:“ TO XUSE XSLOCATE FOR 学号=X IF FOUND()DISPENDIFUSERETU,开始,打开数据表XSDA,结束,查找与输入学号相同的记录,真,输入学号:,显示该记录,思考:如何表示找到记录?,分析:,找到吗?,假,FOUND(),42,几点说明,a.IF-ENDIF要成对出现 b.ENDIF要独占一行 c.不论条件成立与否ENDIF之后的语句总是 要执行的。,43,例5-4:已知A、B、C,求解一元二次方程: AX2+BX+C=0(A0)的实根,并显示;若没有实根,则显示“方程无实根!“.,分析:通过键盘输入系数A、B、C,当B2-4AC 0时,方程有实根。

13、 设:DB*B-4*A*C X1,2=(-BSQRT(D)/(2*A),开始,结束,真,输入系数A,B,C,显示两个根,D 0?,假,计算D:D=B*B-4*A*C,计算两个根,显示方程无实根,44,*程序名:EX5-4.PRG SET TALK OFF CLEAR INPUT A= TO A INPUT B= TO B INPUT C= TO C D=B*B-4*A*C,IF D=0X1=(-B+SQRT(D)/(2*A)X2=(-B-SQRT(D)/(2*A)?“X1=“,X1,“X2=“,X2 ELSE?方程无实根! ENDIF SET TALK ON CANCEL,操作,45,练习:

14、程序填空。下面是对XS.DBF中已知学号的记录作删除标记的程序:,SET TALK OFF ACCEPT “输入待删除学生的学号:“ TO X USE XS(1) 1) A)FIND X B) SEEK X IF (2) C)LOCATE X D) LOCATE FOR 学号=XDELETE ENDIF USE 2) A)EOF() B)NOT EOF() RETURN C)EOF()=.T. D)EOF()=.F.,D,B或D,46,问题:上述IF语句可以完成对于两种情况的选择, 如果有多种情况,如何处理?,47,2.IF语句的嵌套 嵌套:是指在一个结构中包含另一个结构。 如: IF语句嵌套

15、是在IF- ENDIF结构中包含IF- ENDIF 结构。,格式: IF ELSEIF ELSEENDIF ENDIF,48,注:在IF语句嵌套中,要正确划分IF与 ENDIF结构。第一个ENDIF总与离它最近的IF语句 匹配。,49,例5-5:求个人所得税公民收入在3000元到6000元(含6000元)的税率为20%,6000元到9000元(含9000元)的税率为30%,9000元以上为40%,低于3000元(含3000元)的不纳税。,50,分析: 可分为4种情况:收入 税率03000 030006000 20% 60009000 30%9000以上 40%,用SR表示收入,ZS表示所得税。

16、 思考:怎样计算所得税?,所得税ZS=SR*税率,51,开始,结束,真,输入个人收入,显示个人所得税,分析:,SR9000?,假,计算所得税 ZS=SR*0.4,真,SR6000?,假,计算所得税 ZS=SR*0.3,真,SR3000?,假,计算所得税 ZS=SR*0.2,计算所得税: ZS=SR*0,52,SET TALK OFF & 程序EX5-5.PRGINPUT 请输入收入情况: TO SRIF SR9000ZS=SR*0.4ELSEIF SR6000 ZS=SR*0.3 ELSEIF SR3000 ZS=SR*0.2ELSEZS=0ENDIFENDIFENDIF?应征税为:,ZSRE

17、TU,- 9000以上,- 6000 9000,- 30006000,- 03000,操作,53,几点说明,a.IF-ELSEENDIF三者要匹配 b.ELSE,ENDIF要独占一行 c.ENDIF总是离与它最近的IF语句匹配。,54,2多向分支多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行 。,55,(1)语句格式:DO CASECASE条件表达式1命令行序列1CASE条件表达式2命令行序列2 CASE条件表达式N命令行序列N OTHERWISE 命令行序列N+1ENDCASE,B2,Bn,B,条件1,条件2,条件n,Y,B1,56,在情况分支语句中,有多组序列,根

18、据条件的具体情况选择一组命令序列来执行。该命令按顺序检测条件表达式的值,一旦某个条件表达式的值为真,则相应的命令序列被执行,然后DO CASE 语句结束,转到ENDCASE 之后的语句执行。,57,注:DO CASE与第一个CASE之间的语句没有作用!,例5-6:修改计算所得税之例(程序EX5-6.PRG)。SET TALK OFFINPUT 请输入个人收入(单位:元): TO SRDO CASECASE SR=3000ZS=0CASE SR6000ZS=SR*0.2CASE SR=9000ZS=SR*0.3OTHERWISEZS=SR*0.4ENDCASE?“应交所得税:”,ZS, “元”R

19、ETU,操作,58,例5-7:编程能对CJ.DBF显示菜单,并做如下操作:1.追加 2.浏览 3.插入 4.删除 5.退出,程序EX5-7.PRG如下:SET TALK OFF USE CJTEXT1.追加 2.浏览3.插入 4.删除5.退出ENDTEXT,59,ACCEPT 请输入选择(1-5): TO CH DO CASECASE CH=1APPENDCASE CH=2BROWSECASE CH=3 INPUT 请输入记录号: TO NUMGO NUMINSERT CASE CH=4INPUT 请输入记录号: TO NUMGO NUMDELETECASE CH=5? 结束,再见! CANC

20、ELOTHERWISE ? 选择有错! ENDCASE,操作,60,作业与上机,1上机运行调试本节例题及补充例题 2输入X值,编程计算Y:|x| x=3,61,5.3.3 循环结构,输出如下图形 * * * *,SET TALK OFF CLEA ?”*” ?”*” ?”*” ?”*” RETU,SET TALK OFF CLEA I=1 DO WHILE I=4?”*”I=I+1 ENDDO RETU,62,凡需要重复做的工作,在计算机中都可用循环结构程序来实现.FOXPRO提供三条语句支持循环结构程序设计:1.DO WHILE - ENDDO循环与分支的嵌套循环与循环的嵌套2.FOR -

21、ENDFOR3.SCAN - ENDSCAN,63,1. 当循环 DO WHILE ENDDO,格式:DO WHILE ENDDO,条件,B,真,假,B,真,条件,64,执行过程:该语句先测试WHILE 后面的表达式,如果条件为真,则重复执行 DO WHILE ENDDO 之间的命令序列(循环体);如果条件为假则转到ENDDO之后的命令继续执行。 注:为使程序能退出循环,在循环过程中 必须修改循环条件的值,否则将变成死循环。,65,SET TALK OFF CLEAR USE XSDA DO WHILE NOT EOF() DISPWAITSKIPENDDORETU,操作,例5-8:逐一显示X

22、S.DBF中的每条记录。(程序EX5-8.PRG),66,Set talk offx=0s=0do while x100x=x+1s=s+xenddo?sRETURN,操作,例5-9:计算1+2+3+100的和。,67,问题:条件能不能写成x=100?若要写成x=100, 例5-9程序该如何修改?,68,程序修改如下: SET TALK OFFX=1S=0DO WHILE X=100S=S+XX=X+1ENDDO?SRETURN,69,例5-10:根据键盘输入的姓名,在XS中快速查找,若找到则显示其信息,否则显示“查无此人!”,完成后输入Y继续查找,输入N退出。,70,USE XS INDEX

23、 ON 姓名 tag xm DO WHILE .T.ACCEPT “请输入姓名:” TO XMseek xmif found()dispelse?查无此人!endifWAIT 是否继续查找(Y/N)? TO XIF UPPER(X)=N EXITENDIF ENDDO Return,71,*2程序名:LX2.PRG SET TALK OFF SET STATUS OFF CLEAR S=0 T=1 N=1 DO WHILE N=20T=T*NS=S+TN=N+1 ENDDO ?“S=“,S SET STATUS ON SET TALK ON CANCEL,上机练习: 1.计算:1*2*3*10

24、0 2.计算1+2!+3!+.+20!,72,二) 循环和分支的嵌套: 循环语句可以和分支语句嵌套,形成较为复杂的程序结构。,73,1) 循环短路命令:LOOP 功能:返回循环结构的起始处。 2) 退出命令:EXIT 功能:退出循环结构,转向执行ENDDO之后的命令。 注: LOOP与EXIT在DO WHILEENDDO中使用,可以放在循环结构的任何位置。 LOOP通常与分支结构一起使用。,74,set talk offclear x=1y=20do while xx/2x=1+x2y=y+1loopelsex=x+1endifEnddo ?x=,x,y=,y,答案: X=122 Y=23,操

25、作,例5-11:写出程序运行后X,Y的值。,75,set talk offstore 0 to m,ndo while .t.n=n+2do case case int(n/3)*3=nloopcase n10exitotherwisem=m+nendcaseenddo ? m= ,m, n= ,n,答案: M=24N=14,操作,例5-12:写出程序运行后M,N的值,76,三)循环常用的控制方式,格式1: USE DO WHILE NOT EOF()SKIPENDDO,(1)对数据表记录操作时的控制:,77,格式2: USE LOCATE FOR DO WHILE NOT EOF()CONT

26、INUEENDDO,78,(2)有限次循环的控制,格式1:加法循环 K=0 DO WHILE K K=K+1ENDDO,格式2:减法循环 Ka DO WHILE K0 K=K-1ENDDO,注:a为自然数,79,(3)无限次循环的控制,格式1: DO WHILE .T. IF EXITENDIF . ENDDO,格式2: DO WHILE .T.DO CASECASE EXITCASE .ENDCASE.ENDDO,80,四)循环的嵌套,IF语句可以和自身嵌套,DO WHILE 语句可以和IF-ENDIF语句嵌套,同样,DO WHILE 语句自身也可以嵌套,形成更为复杂的程序结构。,DO WH

27、ILE 第 第 DO WHILE 一 二 第 DO WHILE 三 层 ENDDO层 ENDDO 层 ENDDO,81,在循环的嵌套时,要注意循环语句在执行的顺序,一般来说,在一次循环中,遵循先内层循环,后外层循环的顺序。,82,例5-13:打印乘法口诀表。,分析:乘法口诀表的式子如下:11=1它由两个乘数和一个积组成。在运行时,这三个量都在变,即需要三个变量。两个乘数要做+1的操作,这个操作对两个乘数来说不同步,所以一个循环无法解决这个问题,只有用循环嵌套。同时考虑到乘法口诀表为三角形,所以还要对循环条件加以限制。,83,SET TALK OFFCLEAR A=1DO WHILE A=9B=

28、1DO WHILE B=A P=A*B?STR(A,1)+STR(B,1)+ =+STR(P,2)+ B=B+1ENDDO?A=A+1ENDDO,操作,控制输出行数,控制B行输出式子的个数,84,例5-14:求3100的素数.这个例子是经典的循环嵌套的例子。所谓素数就是除了1和它本身之外,再也没有可以被它整除的整数的整数。而可以整除的数最大的取值范围为2M/2.同时,有这样一个性质,即除了2之外的所有素数都是奇数。有了这样两个性质,我们可以减少程序的循环执行次数。,85,SET TALK OFFM=3DO WHILE MN?M, 是素数ENDIFM=M+1ENDDO,操作,思考:若要每输出10

29、个数后暂停,当按任意键时,继续显示,应怎样修改该程序?,SET TALK OFF M=2 F=O DO WHILE MN?M, 是素数F=F+1ENDIFIF F=10WAIT 按任意键继续F=0ENDIFM=M+1ENDDO,86,y= “ i=2 input “请输入一个整数:“ to zs do whil i0i=i+1loopelse y=y+ “ *“+str(i) zs=zs/iif zs=1 ?“y=“+y endifendifenddoretu,例5-15:输入一个整数,分解成质因数之积,并输出其式子。,操作,87,SET TALK OFFDIMENSION K(2,3)I=1

30、 DO WHILE I=2 J=1DO WHILE J=3K(I,J)=I*J?K(I,J), J=J+1ENDDO?I=I+1ENDDO,操作,2 3 2 4 6,例5-16:下列语句执行完后,求数组K中各元素的值,88,SET TALK OFFCLEARX=中华人民共和国Y=DO WHILE LEN(X)=4Y=Y+SUBSTR(X,1,2)+ X=SUBSTR(X,3)ENDDO?Y+X,例5-17:上机习题:将中华人民共和国显示为 中 华 人 民 共 和 国.,操作,89,小 结,我们可以对DO WHILE语句的条件表达式做如下归纳:1.计数循环:1)加法循环 XM X=X-step2

31、. 数据表循环访问 .NOT. EOF()3.循环的人工干预(预设陷阱,全真循环)循环表达式为.T.,但在循环体内必须有可以执行到的EXIT语句.,90,2. FOR-ENDFOR(指定循环次数)当循环的循环次数用户是不知道的,表达式稍加改动就得不到正确的结果。所以FOXPRO提供了限定次数的循环:计数循环。格式如下:,91,FOR = TO STEPEXITLOOP ENDFOR,92,例5-18:按学号顺序逐条显示CJ表中前9个学生的成绩。SET TALK OFFUSE CJFOR I=1 TO 9GO IDISPWAIT ENDFORUSE,操作,93,例5-19:用FOR-ENDFOR

32、语句打印乘法口诀表:SET TALK OFFCLEARFOR A=1 TO 9FOR B=1 TO AP=A*B?STR(B,1)+ *+STR(A,1)+ +STR(P,2)+ ENDFOR?ENDFORRETU,操作,SET TALK OFF CLEAR FOR A=1 TO 9FOR B=1 TO A P=A*BA-1,7*B SAY STR(B,1)+ *+STR(A,1)+ =+STR(P,2)+ ENDFOR ENDFOR RETU,94,例5-20:编程实现打印下面图形,* * * *,方法一:利用函数 SET TALK OFF CLEAR FOR I=1 TO 4I,1 SAY

33、 REPLICATE(*,I) ENDFOR RETURN,95,方法二:利用嵌套 SET TALK OFF CLEAR FOR I=1 TO 4FOR J=1 TO II,J SAY *ENDFOR? ENDFOR RETURN,96,* *,*,* *,*,上机练习:修改上例程序实现打印如下图形,* * * *,1,2,3,4,5,6,7,8,9,97,set talk offf1=1f2=1for I=1 to 20?f1,f2f1=f1+f2f2=f2+f1endfor,例5-21:求斐波那契数列的前40数F1=1 n=1F2=1 n=2Fn=Fn-1+Fn-2 n=3,操作,98,上

34、机习题:1.利用FOR-ENDFOR语句改写求素数程序。2.求水仙花数 (153=13+53+33 )3.求1000之内的完数.一个数恰好等于它的因子之和称其为完数.如6=1+2+3.,99,3.SCAN-ENDSCAN专门用于数据表记录的循环处理.SCAN 范围 FOR WHILELOOPEXITENDSCAN,100,例5-22:显示CJ表中成绩高于80的学生.SET TALK OFFCLEARUSE CJSCAN ALL FOR 成绩80DISP=INKEY(3)ENDSCAN,操作,101,问题如果程序中需要多次使用相同或相似的代码段,有没有更好的方法来解决?,题目: 计算1-100的

35、和加上1-200的和,S=0 I=1 Do while I=100s= s+II=I+1 Enddo I=1 Do while I=200s= s+II=I+1 Enddo,S=0 I=1 Do sum with 100 Do sum with 200,*sum.prg Para t I=1 Do while I=ts= s+II=I+1 Enddo,并列的两个循环,一个循环,两次调用,102,103,1,2,两段代码,一段代码,两次调用,104,过程和自定义函数,为了提高程序的通用性,常采用模块化的程序设计方法。一个结构上相对独立的程序段就是一个模块,这种模块可以是:过程或自定义函数。他们在

36、命名方式、存储方法和参数传递 上略有不同。,105,过程是过程文件的组成部分,可以把多个过程包含在一个文件当中。这样,当过程文件打开时,它所包含的多个程序也同时调入内存,这样就提高了程序运行速度。注:命令文件和过程文件可以并存,但一次只能打开一个过程文件。,5.4.1 过程与过程文件,106,过程,过程,过程,过程文件,过程,程序,过程,复杂的过程文件,107,一)建立1.方法:用MODI COMM命令.例如: modi comm general2.过程的结构:PROCEDURE RETURN TO MASTER/TO 或ENDPROC,一.过程及过程文件,108,例如:procedure j

37、iapara x,y,ss=x+yendproc,109,过程文件可以由多个过程构成:,PROCEDURE RETURN TO MASTER/TO PROCEDURE RETURN TO MASTER/TO PROCEDURE RETURN TO MASTER/TO ,110,二)过程文件的打开和关闭 打开:SET PROCEDURE TO 关闭:SET PROCEDURE TO 或:CLOSE PROCEDURE 三)调用打开过程文件后, 用 DO WITH 参数表,111,例5-23:调用过程文件实现两个数的四则运算。,*主程序EX5-23.PRG: Set proc to SUB1 X=

38、100 Y=200 S=0 Do jia with x,y,s ?S Do jian with x,y,s ?S Do cheng with x,y,s ?S Do chu with x,y,s ?S Set proc to,112,PROCEDURE jiapara x,y,ss=x+y EndprocPROCEDURE jianpara x,y,ss=x-y EndprocPROCEDURE chengpara x,y,ss=x*y EndprocPROCEDURE chupara x,y,ss=x/y Return,过程文件 SUB1.prg,113,SET TALK OFF SET P

39、ROC TO SUB2 N=10 S=0 FOR M=1 TO NX=MDO jc &求阶乘DO sum &求和 ENDFOR SET PROC TO RETU,PROC jc T=1 FOR F=1 TO XT=T*F ENDFOR X=T RETUPROC sumS=S+X?M,SRETU,例5-24:打印出1!+2!+n!,当N=1,2 10时的值.,*主程序EX5-24.prg,*过程文件:SUB2.prg,114,尽管FOXPRO向我们提供了近百个内部函数,但为了完成特定的要求,这些函数并不够用,所以FOXPRO允许用户定义属于自己的有特殊功能的专用函数,这种函数称为自定义函数。,5

40、.4.2 自定义函数,115,(1)一个自定义函数是一个独立的命令文件,其扩展名为.PRG,函数文件与一般命令文件的区别是函数命令文件通过RETURN命令返回一个函数值。,一个自定义函数有两种形式:,(2)一个自定义函数是一个独立的命令模块,放在过程文件中。函数通过RETURN命令返回一个函数值。,116,过程,过程,过程文件,函数文件,函数,函数,117,FUNCTION PARAMETERS RETURN ENDFUNC,调用方式: ?函数名(参数表) 或:变量名=函数名(参数表) 或: DO 函数名 WITH 参数表,自定义函数的命令格式:,118,PARAMETERS NS=0I=1D

41、O WHILE I=NS=S+II=I+1ENDDORETU S,s=0 do sum with 100?s?sum(100)x=sum(100)?x,例5-25:编写自定义函数 sum(n)=1+2+3+n 方法一,主程序main.prg,自定义函数文件sum.prg,运行do main,结果: 5050 5050 5050,119,Function sum PARA NS=0I=1DO WHILE I=NS=S+II=I+1ENDDORETU S Endfunc,set proc to general s=0 do sum with 100?s?sum(100)x=sum(100)?x,例

42、5-26:编写自定义函数 sum(n)=1+2+3+n 方法二,主程序main.prg,过程文件general.prg,运行do main,结果: 5050 5050 5050,120,参数是主程序和过程、函数进行信息交换的渠道,而内存变量在程序中起数据存储和传递的作用,所以我们要先看一下内存变量数据传递的属性。FOXPRO 中内存变量按其作用范围可分为两类:全局变量和局部变量。,5.4.3 参数的传递,121,FOXPRO由系统直接建立的内存变量为全局变量,在整个程序的运行期间始终有效,在所有程序模块中均可以修改,在程序运行结束后也不能自动清除。也可以自定义全局变量。格式: PUBLIC ,

43、1、全局变量,122,注: 任何想说明为PUBLIC的变量都应在赋值前定义,若先分配一个值给内存变量,再定义它为全局变量是错误的.已定义为全局变量的变量可以再定义为局部变量,但已定义为局部变量的变量不能再定义为全局变量.,123,A1=5A2=0DO KK1? A1=,A1? A2=,A2? A3=,A3RETU,例5-27:全局变量的定义与使用,注:在子程序中定义的变量返回到主程序依然可以用.,KKZ.PRG,PUBLIC A3A2=1A1=A1+A2A3=A1+A2,KK1.PRG,124,未用PUBLIC命令定义而直接使用的内存变量均为局部变量。局部变量只在定义它的局部范围内有效,也可用

44、PRIVATE和LOCAL语句定义。 PRIVATE为私有变量,LOCAL为本地变量。,2.局部变量,125,格式:PRIVATE 注: 1.私有变量在定义它的程序执行完后会自动清除. 2.调用它的程序若要调用其他子程序,则该变量还可以在子程序中使用.若在子程序中改变了它的值,则返回时则保留改变后的值. 3.若上级程序中已被定义为私有变量下层子程序中若要使用同名内存变量时,则要重新定义.进入该子程序时上层同名内存变量被屏蔽.,2.局部变量-私有变量,126,格式:LOCAL 注:1.本地变量在定义它的程序执行完后会自动清除. 2.调用它的程序若要调用其他子程序,则该变量不能在子程序中使用.,2

45、.局部变量-本地变量,127,SET TALK OFF V1=10 V2=15 Do sub ?v1,v2,PRIVATE v1v1=2008/07/31v2=100?”v1 v2”?v1,v2 retu,主程序 main.prg,子程序sub.prg,例5-28 局部变量示例。,128,Public x,y A=50 B=100 Do P1 ?A,B,*P1.PRG PRIVATE A A=80 LOCAL B DO P2 ?A,B retu,主程序 MM.prg,例5-29 内存变量示例。,*P2.PRG A=ATCM B=(0551)5169268 retu,129,1)调用子程序、过程

46、、函数的命令格式DO WITH 2)被调用程序的命令格式PARAMETERS 注:两条命令中参数表中参数的个数,类型,位置必须一致,各参数之间用逗号隔开.,3.参数传递,130,参数传递主要有两种形式: (1)按值传递例如:do sum with 100,x+10,(x) (2)按地址传递例如: do sum with x,y 其中按地址传递的参数必须是变量名,而 且变量将在被调用模块中可以被任意修改,131,SET TALK OFF INPUT 请输入一个正整数: TO A P=0 DO SUB WITH A,P? 阶乘值=,P DO SUB WITH A,(P)? 阶乘值=,P DO SUB WITH 8,P? 阶乘值=,P DO SUB WITH A+1,P? 阶乘值=,P RETU,PARA K,PP=1FOR I=1 TO KP=P*IENDFORRETU,例5-29:当输入3时,求程序的运行结果.,主程序main.prg,SUB.PRG,132,上 机 练 习,1. 编程利用自定义函数计算:S=1!+2!+20! 2. 通过键盘输入一个数,利用自定义函数判断其是否为素数。编程要求:若是素数,则输出该数。否则,可继续输入其他数。当输入一个非正数时,中止程序执行。,133,Visual FoxPro 程序设计,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报