




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VFP程序设计基础,-第五章,本章内容,1. 程序文件的建立与运行 2. VFP的基本语句,3. 输入命令和输出命令 4. 顺序结构程序设计,5. 分支结构程序设计 6.循环结构程序设计,7.模块结构程序设计,1、程序文件的建立与运行,1.1 程序文件的建立 1.2 程序文件的运行 1.3 程序文件的修改,1.1 程序文件的建立与运行,第一章VFP的工作方式有哪两种?,交互操作方式 程序执行方式 将一批经常要执行的命令编写成程序,并将其存储为程序文件,1.1 程序文件的建立与运行,程序文件可用VFP自身提供的编辑器,也可用任一文本编辑器来建立和修改 建立方式: 菜单方式 命令方式 格式:MOD
2、IFY COMMAND 利用项目管理器,举例,【例1】:在默认目录上建立一个查看xsda表结构和内容的命令文件 MODIFY COMMAND W1 CLEAR USE XSDA LIST STRUCTURE LIST USE,1.2 程序文件的运行,菜单方式(程序运行) 命令方式 格式: Do 程序名 【例2】:运行已建立的文件W1.PRG do W1.PRG “换行了” 注意: 作为续行符的;只能出现在行尾,2.3 注释语句,功能:提高程序的可读性 行首注释 格式: Note * 行尾注释 格式: 2、摄氏转换成华氏” to z if z=1 Input “请输入华氏温度:” to F C=
3、5*(F-32)/9 ? “华氏”+STR(F,4)+“度, 摄氏”+STR(C,4)+“度” else Input “请输入摄氏温度:” to C F=C*9/5+32 ? “摄氏”+STR(C,4)+“度, 华氏”+STR(F,4)+“度” endif cancel,(见w7.prg),【例8】:铁路托运行李,假设每张车票可按每公斤0.5元托运50公斤以内的行李,如果超过50公斤时,超过的部分每公斤加价0.3元。 (见w8.prg) 计算公式如下: X=0.5W W50 SET TALK OFF INPUT 请输入行李的重量为: TO W IF W=50 X=0.5*W ELSE X=0.
4、5*50+0.8*(W-50) ENDIF ?“行李的重量为:”+STR(W,6,2)+“公斤,其运费为:”+STR(X,6,2)+“元” CANCEL,根据学生档案表(XSDA.dbf),按输入的姓名查找其基本情况。 分析:查找记录可以使用locate命令,判断是否找到记录可以使用found函数。 SET TALK OFF CLEAR USE XSDA ACCEPT “” TO XM LOCATE FOR 姓名=XM IF FOUND() ?”姓名:” +姓名 ?“性别:”,性别 ?“年龄:”+STR(年龄,2) ?”出生年月:”+dtoc(出生年月) else ?”对不起,没有查找到此人!
5、” endif close all return,5.3 分支嵌套语句,有IF必有ENDIF,成对出现 每一层的IF和ELSE及ENDIF必须一一对应 IF-ELSE-ENDIF 每个命令各占一行,不能在同一行出现,第 一 层,ENDIF,ENDIF,IF 条件,ELSE,语句组3,第 三 层,ENDIF,第 二 层,【例9】 :判断某个数是正数还是负数。 Input “请输入一个数:” to num If num0 ? “是正数!” Else if num0 ? “是负数!” else ? “是0!” endif Endif cancel,(见w9.prg),Input “ 请输入成绩:”
6、to score If score=90 ? “成绩等级:” + “优秀” Else if score=80 ? “成绩等级:” + “良好” else if score=70 ? “成绩等级:” + “中等” else if score=60 ? “成绩等级:” + “及格” else ? “成绩等级:” + “不及格” endif endif endif endif cancel,【例10】 :把成绩转换成等级分数,(见w10.prg),DO CASE CASE 条件表达式1 语句组1 CASE 条件表达式2 语句组2 : OTHERWISE 语句组 ENDCASE,5.4 多路分支语句,
7、执行多重选择,用于嵌套层数较多的情况,Input “ 请输入成绩:” to score Do case case score=90 ? “成绩等级:” + “优秀” case score=80 ? “成绩等级:” + “良好” case score=70 ? “成绩等级:” + “中等” case score=60 ? “成绩等级:” + “及格” case score60 ? “成绩等级:” + “不及格” Endcase cancel,【改编程序】:把成绩转换成等级分数,(见w10_1.prg),Set talk off Clear Use xscj Accept “” to xm Loc
8、ate for 姓名=xm 平均分=int(语文+数学+外语+政治)/4 If found() do case case 平均分=90 pd=“优秀” case 平均分=80 and 平均分90 pd=“良好”,根据学生成绩表(xscj)输入学生的姓名,并 计算其平均成绩及等级。,(见li5-14.prg),case 平均分=70 and 平均分=60 and 平均分70 pd=“及格” otherwise pd=“不及格” Endcase ?xm+”+str(平均分,6,2)+” 等级为:”+pd Else ?”对不起,没有找到这个人!” Endif Close all return,6、循
9、环结构程序设计,当型循环结构,6.1,步长型循环结构,6.2,扫描型循环结构,6.3,循环是指按照给定的条件去重复执行一段具有特定功能的程序,6.1 当型循环结构,语句格式: DO WHILE 条件表达式 语句组 ENDDO 语句功能: 当条件表达式的值为真时,执行语句;否则执行ENDDO后面的语句。,循环体,循环体可以是一个语句。 一组语句。 也可以是一个VFP子程序,说明,循环语句本身不会修改执行的条件 要在循环体内设置修改循环条件的语句。 否则会出现死循环。,循环语句流程图:,【例11】 :以显示方式输出1到10的数字 SET TALK OFF CLEAR I1 DO WHILE I=1
10、0 ?I II1 ENDDO 说明:语句II1就是用来修改循环条件,(见w11.prg),【例12】有程序如下:,(见w12.prg),STORE 0 TO C,W USE XSDA DO WHILE .NOT.EOF( ) DO CASE CASE 性别=.t. W=W+1 CASE 性别=.f. C=C+1 ENDCASE SKIP ENDDO ? “ 男生人数为: ,W ? “ 女生人数为: ,C SET TALK ON CANCEL,转跳语句(LOOP),在DO WHILEENDDO循环体内提供了一条短路语句,可以起到转跳作用 语句格式: LOOP 语句功能: 中断本次循环体的执行 跳
11、回到DO WHILE的开始处,重复条件的判断,说明:,LOOP语句一定要用在DOWHILE的循环体内才有意义 LOOP语句使它后面的语句在本次循环时不被执行 在具有多重DO WHILEENDDO嵌套的程序中, LOOP只返回到与它本身所处的内层循环体相匹配的 DO WHILE语句,出口语句(EXIT),如果在循环的中途,需要结束循环而转到本层循环的后继命令去执行,可以用出口命令 语句格式: EXIT 语句功能: 终止DO WHILEENDDO的正常循环 无条件地转到ENDDO的后继命令去执行 多重循环,只能跳出一层,多重循环中LOOP和EXIT的作用域,循环的嵌套: 如果在一个循环程序的循环体
12、内又包含着另一些循环,就构成了多层次(多重)循环 LOOP和EXIT语句放在哪一个层次,它就只能在那个层次中起作用, 这个层次就是它的作用域,DO WHILE DO WHILE LOOP EXIT ENDDO LOOP EXIT ENDDO,【例13】 :求0100之间奇数之和 SET TALK OFF X=0 Y=0 DO WHILE X100 X=X+1 IF INT(X/2)=X/2 LOOP ELSE Y=Y+X ENDIF ENDDO ? 0100之间的奇数之和为: , Y SET TALK ON CANCEL,用INT(X/2)是否等于X/2判断X是否为偶数 是则执行LOOP语句,
13、返回DO WHILE。 如果INT(X/2)不等于X/2 说明X的值为奇数。 执行LOOP后面的语句,将奇数累加。,(见w13.prg),【例14】 :计算123100的和 SET TALK OFF N1 S0 DO WHILE .T. IF N100 EXIT ENDIF S=S+N N=N+1 ENDDO ? “S=”,S,S N,1,2,3,3,6,4,10,5,+N,+1,5050,101,(见w14.prg),【例】 在学生档案表(xsda)中,依次显示性别为男的学生,并统计出男生的总人数。,Set talk off Clear Use xsda Do while !eof() if
14、 性别=.f. skip loop endif disp 编号,学号,姓名,性别,年龄,出生年月 skip Enddo Count for 性别 to T_no ?”以上显示的是男生的基本档案,共计有:”+str(T_no,3)+”人” Close all return,语句格式: FOR 循环变量= TO STEP 命令序列 LOOP EXIT ENDFOR 语句功能: 循环过程是首先将初值赋于循环变量,每当执行一次循环,循环变量增加一个步长,直到循环变量值大于终值时结束循环。 LOOP语句用于转到FOR语句继续执行循环。 EXIT用于跳出循环,转到ENDFOR后面命令执行。,6.2 步长型
15、循环结构,例 判断下列几个程序的结果,1、For n=1 to 11 step 2 ? “,n Endfor 2、For n=1 to 10-1 ? Endfor 3、For n=1 to 10 ? Endfor, n=1+2=3 n=3+2=5 n=5+2=7 n=7+2=9 n=9+2=11 n=11+2=13, n=1+1=2 n=2+1=3 n=3+1=4 n=4+1=5 n=5+1=6 n=6+1=7 n=7+1=8 n=8+1=9 n=9+1=10, n=1+1=2 n=2+1=3 n=3+1=4 n=4+1=5 n=5+1=6 n=6+1=7 n=7+1=8 n=8+1=9 n=
16、9+1=10 n=10+1=11,语句格式: SCAN范围FOR条件表达式 命令序列 LOOP EXIT ENDSCAN,SCAN的功能是在表中移动并重执行命令序列。 循环开始时记录指针指向满足条件的第一个记录。 执行到ENDSCAN时,记录指针指向第二个满足条件记录。 控制又回到SCAN循环的开始,直到所有记录处理完,循环也就结束了。,6.3 扫描型循环结构,例:查找入学成绩500分的记录。 SET TALK OFF USE xsda SCAN Disp for 入学成绩500.00 ENDSCAN USE RETURN,用SCANENDSCAN命令显示表的记录 USE XSDA SCAN
17、DISPLAY ENDSCAN RETURN 用FOR.ENDFOR命令显示表的记录 USE XSDA FOR I=1 TO 5 GO I DISPLAY ENDFOR RETURN,判断以下程序的运行结果:,S=0 P=1 DO WHILE P=100 S=S+P P=P+1 ENDDO ? S=,S CANCEL,(1) 1+2+100的值,S=0+1=1 P=1+1=2,S=1+2=3 P=2+1=3,S=3+2+1=6 P=3+1=4,S=100+3+2+1=5050 P=1+1+1+1=101,(2) 5!的值,SET TALK OFF T=1 N=1 DO WHILE N=5 T=
18、T*N N=N+1 ENDDO ? T=,T CANCEL,T=1*1=1 N=1+1=2,T=1*2=2 N=2+1=3,T=(1*2)*3=6 N=3+1=4,T=(1*2*3)*4=24 N=4+1=5,T=(1*2*3*4)*5=120 N=5+1=6 T=120,SET TALK OFF S=0 T=1 N=1 DO WHILE N=5 T=T*N S=S+T N=N+1 ENDDO ? S=,S CANCEL,(3)求S=1!+2!+3!+5!的值,T=1*1=1 S=0+1=1 N=1+1=2,T=1*2=2 S=1+(1*2)=3 N=2+1=3,T=(1*2)*3=6 S=1
19、+(1*2)+(1*2*3)=9 N=3+1=4,T=(1*2*3)*4=24 S=1+2!+3!+4!=33 N=4+1=5,T=(1*2*3*4)*5=120 S=1+2!+3!+4!+5!=153 N=5+1=6 S=153,SET TALK OFF I=1 DO WHILE I=3 J=5 DO WHILE J=7 ? I,J J=J+1 ENDDO I=I+1 ENDDO CANCEL,1 5 1 6 1 7 2 5 2 6 2 7 3 5 3 6 3 7,FOR I=10 TO 1 STEP -2 ? I=,I ENDFOR ? I RETURN,I=10 I= 8 I= 6 I=
20、 4 I= 2 0,7、模块结构程序设计,应用程序一般都是多模块程序,可包含多个程序模块。模块是可以命名的一个程序段,可指子程序、函数、过程,能够完成一定功能的可供其它程序使用(调用)的独立程序段称为子程序。它独立存在,但可以被多次调用,调用子程序的程序称为主程序。,7.1 子程序,1、建立、修改子程序 方法同前 modify command 要注意两个问题, 一是每个子程序必须单独使用一个文件名保存起来 二是主程序和子程序之间有关变量值的传递关系。 子程序文件名的扩展名也是.PRG。,7.1 子程序,2、子程序的返回 RETURN TO MASTER |TO 说明: a. 该语句放在一个程序
21、的末尾。 b. 不带参数的RETURN语句的功能是将程序控制权返回到调用该子程序的主程序的下一条命令语句。 c. RETURN TO MASTER:如果有多级程序调用,某一子程序的该语句将使程序控制权返回到最高一级调用程序。 d. RETURN TO :表示将控制权交给指定的程序。,7.1 子程序,3、子程序的调用 DO with 说明: a. 程序文件名1:指定要执行程序的名字。DO 直接执行或调用指定的程序。 b. WITH :指定传递到子程序的参数,在中列出的参数可以是表达式、内存变量、常量、字段或用户自定义函数。,【例15】 利用主程序调用子程序的方法计算任意3个自然数的阶乘和,即求s
22、=a!+b!+c!,factor=1 FOR x=n TO 1 STEP -1 factor=factor*x ENDFOR RETURN 注意,该子程序中的变量n的值需要由主程序传递。将该子程序保存文件名为:jc 调用该子程序的主程序为: CLEAR INPUT a= to a INPUT b= to b INPUT c= to c,s=0 &定义存放阶乘的累加和的变量 factor=1 &定义与子程序传递阶乘计算结果的变量 n=a &定义计算阶乘需要自然数的传递变量 DO jc s=factor n=b DO jc s=s+factor n=c DO jc s=s+factor ?ALLT
23、RIM(STR(a,3)+“!+”+ALLTRIM(STR(b,3)+“!+”+ ; ALLTRIM(STR(c,3)+!=,s RETURN,(见w15.prg),7.2 过程,过程是实现某个功能的程序段,是子程序的另一种形式。 过程是主程序的一部分,常把它写在主程序的最后 格式: procedure parameters return to master/to 调用格式: DO WITH ,7.3 自定义函数,自定义函数和子程序、过程相似,也是实现某个功能的一个程序块。自定义函数既可以写在主程序的后面,也可以是一个独立的程序。 与其他程序不同,自定义函数必须通过Return返回一个函数值。
24、 自定义函数格式 Function parameters return 函数调用格式 ,7.3 自定义函数,例:定义一个计算求立方数的函数。,(1)创建函数 求立方数函数。函数名为cube(即以cube.prg为文件名存盘)。 PARAMETERS v RETURN v*v*v 下面程序中调用求立方函数cube.prg,求1到10的立方数。,(2)在程序中调用函数 *求1到10的立方数。程序名为CX23 CLEAR FOR i=1 TO 10 ?i,cube(i) ENDFOR RETURN 自定义函数cube不仅可以在程序中调用,也可以命令窗口里调用。,主程序和子程序或过程的参数传递,为了正
25、确传递参数,被调用的子程序或过程的第一条可执行命令必须是: PARAMETERS 私有变量 LPARAMETERS 局部变量 调用子程序或过程的命令格式为: DO | WITH | ( ) 实参可以是常量、变量或表达式。调用子程序或过程时,系统会自动把实参传递给形参。实参和形参数目应尽量一致。若形参的数目多于实参数目,多于形参初值为逻辑值.F.,接收参数 的命令,参数的传递方式,按DO | WITH 格式调用模块程序时 如果实参是常量或表达式,系统会将实参的值传递给形参,这样的传递方式称为按值传递。 如果实参是变量那么传递给形参的是变量的地址,形参变量值的改变将影响实参变量值,这种参数的传递称
26、为按引用传递。 按 |( ) 格式调用模块程序时, 默认按值传递参数。 如果实参是变量,可以通过如下命令重新设置参数传递方式: SET UDFPARMS TO VALUE | REFERENCE TO VALUE:为按值传递。形参变量值的改变不会影响实参变量的值 TO REFERENCE:为按引用传递。形参变量值和实参变量值同时改变,procedure he parameters x,y z=x+y return z endproc,Do he with m,n 按地址传递 Do he with (m),(n) 按值传递(表达式) Do he with 5,4 按值传递(常量) He(m,n)
27、 按值传递 He(m),(n) 按值传递 He(5,4) 按值传递,Set udfparms to reference He(m,n) 按地址传递 He(m),(n) 按值传递 He(5,4) 按值传递,参数传递的注意事项,: 形参的数目不能少于实参的数目,否则系统产生运行时错误。 如果形参的数目多于实参的数目,多余的形参取初值即逻辑值. F . 。 SET UDFPARMS TO 命令仅影响 过程名()形式 : 按值传递:形参的值不影响实参的值; 按引用传递:形参的值将改变实参的值。,参数的传递方式实例,CLEAR STORE 100 TO x1,x2 SET UDFPARMS TO VAL
28、UE DO p4 WITH x1,(x2) ?第一次:,x1,x2 STORE 100 TO x1,x2 P4(x1,(x2) ?第二次:,x1,x2 SET UDFPARMS TO REFERENCE DO p4 WITH x1,(x2) ?第三次:,x1,x2,STORE 100 TO x1,x2 P4(x1,(x2) ?第四次:,x1,x2 *过程p4 PROCEDURE p4 PARAMETERS x1,x2 STORE X1+1 TO X1 STORE X2+1 TO X2 ENDPROC,变量的作用域,变量和数组的作用域指的是变量和数组在什么范围内是有效的或能够被访问。 在Visual Foxpro6.0中,变量的作用域共有三类:全局变量、私有变量和局部变量。可以使用PUBLIC、LOCAL、PRIVATE命令强制规定变量的作用范围。,全局变量,全局变量也称为公共变量,在任何程序模块中都可以使用。 公共变量要先建立后使用。用PUBLIC命令建立。 PUBLIC 该命令的功能是建立公共的内存变量,并为它们赋值.F. 全局
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 写营销合同样本
- 出租鼓楼摊位合同样本
- 中介新房合作合同样本
- 公司汽车合同样本
- 出租流动冷库合同样本
- 农业咨询服务合同标准文本
- 农业产销合同样本
- 出国焊工劳务合同样本
- 分期付款方合同标准文本
- 代理协议合同标准文本诉讼
- 眼镜店销售培训课件
- 中小学学校落实中央八项规定自查报告
- 宜宾市属国有企业人力资源中心宜宾临港投资建设集团有限公司下属子公司2025年第一批项目制员工公开招聘笔试参考题库附带答案详解
- 2025年山东鲁泰控股集团有限公司下属驻陕西煤矿企业招聘(150人)笔试参考题库附带答案详解
- 2025届上海市浦东新区高三二模英语试卷(含答案)
- 2024-2025学年高一政治统编版下学期期中考试测试卷B卷(含解析)
- 内蒙古自治区呼和浩特市2025届高三第一次模拟考试物理答案
- 仓库管理奖惩制度
- 中级银行管理-2025中级银行从业资格考试《银行管理》点睛提分卷1
- 乳腺癌诊治指南与规范(2024年版)解读
- 酒店前台培训知识
评论
0/150
提交评论