




已阅读5页,还剩82页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1 VFP程序命令文件的建立和执行 5.2 VFP常用编程命令及函数 5.3 VFP流程图介绍 5.4 顺序执行 5.5 判断分支 5.6 循环结构 5.7 过程与用户自定义函数,第五章 Visual FoxPro程序设计入门,返回,5.1 VFP程序命令文件的建立和执行 5.1.1 建立和编辑命令文件 1用MODIFY COMMAND命令建立命令文件 命令格式:MODIFY COMMAND 命令功能:打开命令文件编辑窗口创建/编辑指定命令文件。 说明: 文件名的默认扩展名为.PRG。 指定文件存在时,首先在磁盘上复制一同名、同内容的.BAK文件。 编辑结束时,可用End或W结束命令并存盘。也可用Esc键作废编辑并结束命令。,2使用菜单操作建立命令文件 操作过程:文件新建选择“程序”单选按钮单击“新建文件”,将打开一编辑窗口,供用户输入程序。 3使用项目管理器建立命令文件 有关项目管理器的详细内容参见第十三章。 操作过程:首先打开项目管理器选择“代码”选项卡选择“程序”选项单击“新建”按钮,也将打开一编辑窗口供用户输入程序。,5.1.2 执行命令文件 命令基本格式:DO 命令功能:首先打开指定的命令文件,然后从其第一条语句开始执行。执行完毕,自动关闭该命令文件。,5.2 VFP常用编程命令及函数,1SET TALK命令 命令格式:SET TALK ON/OFF 命令功能:使命令结果显示/不显示。,5.2 VFP常用编程命令及函数 1系统初始化命令CLEAR ALL 命令格式:CLEAR ALL 命令功能:关闭所有打开的库文件、表文件及其相关文件索引文件、备注文件等,清除所有内存变量,清除所有用户自定义下拉菜单、弹出式菜单和窗口,选择1号工作区为当前工作区。,2清屏命令CLEAR 命令格式:CLEAR 命令功能:清除VFP主窗口或当前用户自定义窗口。,3终止程序执行语句CANCEL 命令格式:CANCEL 命令功能:终止正在执行的程序,把控制权返回给COMMAND窗口。,4. 程序注释语句NOTE/* 命令格式1:NOTE 命令格式2:* 命令功能:标识一个非执行的注释行。,5.3 VFP流程图介绍,在编制程序尤其是编制复杂程序时,常用流程图来进行程序设计和介绍程序的结构。流程图是形象的描述程序设计思想的好方法,它的特点是比较直观、清晰。,5.4 顺 序 执 行,5.4.1 顺序执行程序 顺序执行程序特点:命令的执行顺序就是命令在程序中的排列顺序,每条命令均被执行一次。 例1 根据圆的半径计算圆的面积。 程序清单: Clear Input请输入半径: to r ? 圆的面积为:,pi()*r*r,5.5 判 断 分 支,5.5.1 条件转向语句IFENDIF 这是一种简单的分支语句,语句格式如下: IF ENDIF 值为“真”时,顺序执行IF和ENDIF间的语句行序列,然后再执行ENDIF后的语句;若其值为“假”时,则直接跳到ENDIF后面的语句继续执行。 IF和ENDIF必须成对出现。,图5 4 条件转向语句流程图,例2 读程序清单,分析程序功能. Clear Input请输入一个随机正整数: to n If mod(n,7)=0 ? Pass! Endif,5.5.2 条件选择转向语句IFELSEENDIF 语句格式: IF ELSE ENDIF 执行过程:计算条件表达式的值,若为真,则执行,然后跳过,从ENDIF后面的语句继续执行;否则,执行,然后再执行ENDIF后面的语句。,例3 读程序清单,分析程序功能. Clear Input请输入一个随机正整数: to n If mod(n,7)=0 ? Pass! Else ? Sorry! Endif,5.5.3 IF语句的嵌套 例4 为鼓励存款,对定期存款时间少于1年的,利率为3%;等于或大于1年而少于3年的,利率为5%;等于或大于3年而少于5年的,利率为7%;5年以上的,利率为9%。 程序清单如下:,图5 8 例4的流程图,5.5.4 情况语句DO CASE ENDCASE 情况语句格式: DO CASE CASE CASE CASE OTHERWISE ENDCASE,执行过程:依次计算每一个CASE语句对应的条件表达式,遇到第一个为真值者,则执行该语句下面对应的语句序列段,执行完后,直接跳转至ENDCASE后。如果所有的条件都不为真值,若无OTHERWISE子句,则不执行任何语句序列,跳转至ENDCASE后;有可选项OTHEWISE时,执行OTHERWISE子句对应的语句序列,再跳转至ENDCASE后。 如果有多个条件表达式为真值,也仅仅执行第一个条件表达式为真值者对应的语句序列。 DO CASE和ENDCASE必须成对出现。 DO CASE与第一个CASE之间的任何语句将不会被执行。,例5 用情况语句重新编制例4,比较情况语句与条件转向语句的用法。,5.6 循 环 结 构,5.6.1 三种循环语句 1DO WHILE循环 (1) 语句格式: DO WHILE ENDDO,(2)执行过程: 执行到DO WHILE语句时,首先计算的值,为真时,顺序执行循环体中的语句,即执行循环体;为假时,跳到ENDDO的下面一句去执行,即跳出循环体,循环结束。 执行到循环结束语句ENDDO时,系统返回循环起始语句,再一次执行DO WHILE语句。 (3)说明: ENDDO和DO WHILE语句必须成对出现;在循环体内必须有使逐渐为假的语句,否则,将进入死循环。,图511 DO WHILE循环语句流程图,例:将一张厚度0.1mm并充分大的纸对折多少次后厚度超过珠峰的高度?,2SCAN循环 语句格式: SCAN FOR ENDSCAN 其中,SCAN为循环起始语句,ENDSCAN为循环结束语句。 语句功能:对当前表指定范围内满足条件的记录依次执行所规定的操作。范围省略值为ALL。 例:使用循环在一行内显示女职工姓名。,3 FOR循环 (1) 语句格式: FOR = TO STEP ENDFOR/NEXT (2) 执行过程,(3) 说明: 在执行循环体时,若对初值、终值和步长三个表达式中所含变量的值作了修改,不会影响循环初值、循环终值和步长。 循环初值、循环终值和步长值必须合理,否则,不执行循环。 执行循环体时,若修改了循环变量值,将会影响到循环执行次数。,例:计算N!=1*2*3*N 例:计算I=1+2+3+N 例:找出3位的水仙花数,若一个3位正整数的各位数字的立方和等于该数本身,则称这样的数为水仙花数。 算法:枚举。把100-999之间的每一个数都检验一遍,输出满足定义的即可。,5.6.2 对表文件记录进行操作时的循环控制方式 1对表文件记录进行逐条操作的循环控制方式 格式1:SCAN ENDSCAN 格式2:DO WHILE.NOT.EOF( ) SKIP ENDDO,例11 用逐条记录循环操作的方法,打印输出表文件职工.DBF中每条记录的姓名和工资。 依题意,本例的流程图如下。,图513 例11的流程图,CLEAR SET PRINTER ON ? “姓名 工资“ OPEN DATABASE 雇员管理 USE 职工 SCAN ? 姓名+ “ “ ?工资 ENDSCAN,USE CLOSE DATABASE SET PRINTER OFF,2选择表文件中符合条件的记录进行循环操作 格式1:SCANFOR ENDSCAN 格式2:LOCATEFOR DO WHILE FOUND( ) CONTINUE ENDDO,例12 修改表文件职工.DBF中职工的工资,对工资不超过600元且不低于500元者加10元。 依题意,画流程图如图所示。,图514 例12的流程图,采用SCAN语句,程序如下: CLEAR OPEN DATABASE 雇员管理 USE 职工 SCAN FOR 工资=500 REPLACE 工资 WITH 工资+10 ENDSCAN USE CLOSE DATABASE,若采用DO WHILE语句,则程序其它部分不变,仅把循环部分改为: LOCA FOR工资=500 DO WHILE FOUND( ) REPL 工资 WITH 工资+10 CONT ENDDO,5.6.3 循环结构的两条专用语句 1退出循环语句EXIT 前面介绍的循环语句格式中,一旦进入循环,循环次数实际上已经确定。但在实际应用中,常希望在某种情况下,强迫循环语句结束,去继续执行循环语句后的其它语句。EXIT语句可实现这一要求。 语句格式:EXIT 语句功能:立即退出循环,转去执行循环终端语句之后的语句。,EXIT语句通常包含在IF语句或DO CASE语句中,当某条件出现时,才被执行。通常用于无限次循环的控制,例如: DO WHILE . T . IF EXIT ENDIF ENDDO 类似地,EXIT可出现在DO CASE 的某语句序列中。,例13 打印某种报表,每打印完一张,便提示用户是否还要打印,由用户输入的信息来进行控制,试编程序实现这种功能。 依题意画流程图如图所示。 程序如下:,图515 例13的流程图,CLEAR ALL DO WHILE .T . CLEAR ANSWER=MESSAGEBOX(“继续打印吗? “,36, “打印提示“) IF ANSWER=7 EXIT ENDIF ENDDO,2短路循环语句LOOP 语句格式:LOOP 语句功能:强迫结束本次循环体的执行,使流程返回循环开始语句。,例14 假设有一个表文件“工资.DBF”,其中包括有“姓名”、“实发工资”等字段,有20个记录。现在要求显示出此表中前10个记录的“姓名”和“实发工资”,但是,如果遇到“姓名”为“王林”的则不显示。编程序实现。 依题意绘制流程图如图所示。,图516 例14的流程图,采用SCAN循环语句,程序如下: CLEAR OPEN DATABASE 雇员管理 USE 工资 SCAN FOR RECNO()=10 IF 姓名=“王林“ LOOP ENDIF ?姓名,实发工资 ENDSCAN USE CLOSE DATABASE 采用DO WHILE循环语句的程序见P.98,自学。,例15 令计算机从零开始计数,并将奇数累加求和。当奇数累加和大于300时,结束计数;否则,继续计数。依题意编程如下:,X=0 JSH=0 DO WHILE .T. X=X+1 DO CASE CASE INT(X/2)=X/2 LOOP,CASE INT(X/2)X/2 JSH=JSH+X IF JSH300 EXIT ENDIF ENDCASE ENDDO ? “奇数和=“ ? JSH,5.6.4 循环结构应用举例 1. 循环语句与其它分支判断语句的嵌套 所谓嵌套,即为:在一个语句结构中,包含了另一个完整的语句结构。,例16 建立一个命令文件修改表文件职工.DBF中的工资,对于工资500元与600元之间的职工增加20元,而对于工资大于600元的职工增加100元。要求逐条记录进行操作。 OPEN DATABASE 雇员管理 USE 职工 SCAN DO CASE CASE 工资 =500 REPLACE 工资 WITH 工资+20 CASE 工资600 REPLACE 工资 WITH 工资+10 ENDCASE ENDSCAN USE CLOSE DATABASE,在嵌套使用时,注意不要互相交叉,下面给出两种错误的形式, 如图518所示。,例17 假设某中学有一个管理记录本校学生成绩的表文件XSCJ.DBF,它的结构如下:,学号(N,5), 姓名(C,8),性别(C,2), 年级(N,2), 语文(N,5,2), 数学(N,5,2),物理(N,5,2),化学(N,5,2), 英语(N,5,2), 主平均(N,5,2), 总平均(N,5,2),升留判定(C,6) 编写程序:根据表中录入的各门课成绩,计算出每个学生的语文和数学两门主课的平均成绩与五门课的总平均成绩,然后根据学生的成绩来决定学生是升级、留级,还是补考。如果主课平均成绩及格者,则升级;主课平均成绩不及格,但总平均成绩及格的,则同意补考;主课平均成绩不及格且总平均成绩也不及格者,则留级。最后分别打印出升级学生名单,留级学生名单和补考学生名单。依题意,本例的流程图如图519所示。,图519 例17的流程图,USE XSCJ SCAN REPLACE 主平均 WITH (语文+数学)/2 REPLACE 总平均 WITH ; (语文+数学+物理+化学+英语)/5 DO CASE CASE 主平均=60 REPLACE 升留判定 WITH “升级“ CASE 主平均=60 REPLACE 升留判定 WITH “补考“ ENDCASE ENDSCAN,LIST FOR 升留判定=“升级“ TO PRINT LIST FOR 升留判定=“留级“ TO PRINT LIST FOR 升留判定=“补考“ TO PRINT USE,2多重循环 多重循环即循环的嵌套,在一个循环的循环体中,包含有另一个循环。我们称外层循环为外循环,被包含的循环称为内循环。以DO WHILE为例,多重循环的一般格式如图520所示。,例18 编制一张九九乘法表,要求格式如下:,* 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 72 81,CLEAR ? “ * “ FOR A=1 TO 9 ? A ENDFOR ? FOR A=1 TO 9 ? A B=1 DO WHILE B=A P=A*B ? P B=B+1 ENDDO ? ENDFOR,CLEAR ? “ * “ FOR A=1 TO 9 ? A ENDFOR ? FOR A=1 TO 9 ? A FOR B=1 TO A P=A*B ? P ENDFOR ? ENDFOR,例:找出100以内的素数-只能被1和自身整除的正整数。 分析:枚举法。检查2-100之间的每一个数(外循环),对每一个数用2N-1去除(内循环),均不能被整除的数就是要找的素数。,例:显示矩阵 1 2 3 4 5 6 7 8 9 分析:外循环变量I用于表示行号 内循环变量J用于表示列号 任一数据可表示为:(I-1)*3+J 又例:生成一个4行4列的数组存储两位的随机数整数并显示该数组值。,例:百元买百鸡问题。假设小鸡每只5角,公鸡每只2元,母鸡每只3元,若要用100元买到100只鸡,共有多少种方案。(枚举法解多解方程问题) 设小鸡,公鸡,母鸡各为x,y,z只,则据题意可列出方程: x+y+z=100 0.5x+2y+3z=100 算法:令x,y,z分别从0变化到100,检验每一种取值,输出满足上述条件的组合。 进一步简化:z最大只能取33,y最大只能取50,当y,z取定后x只能为100-y-z。,例:编写程序计算组合数 = ,其中n!=12n。 CLEAR CLEAR INPUT “ 请输入N: “ TO N INPUT “ 请输入N: “ TO N INPUT “ 请输入M: “ TO M INPUT “ 请输入M: “ TO M C1=1 STORE 1 TO C1,C2,C3 FOR I=1 TO N DO FAC WITH N,C1 C1=C1*I DO FAC WITH M,C2 ENDFOR 计算N! DO FAC WITH N-M,C3 C2=1 ? “组合数: “,C1/C2/C3 FOR I=1 TO M SET TALK ON C2=C2*I ENDFOR 计算M! PROCEDURE FAC C3=1 PARAMETERS X,Y FOR I=1 TO N-M FOR I=1 TO X C3=C3*I Y=Y*I ENDFOR 计算(N-M)! ENDFOR ? “组合数= “ ,C1/C2/C3 RETURN,学生成绩管理系统,5.7 过程与用户自定义函数 5.7.1 过程 1创建过程 过程是为完成某个操作而编写的程序段。过程定义的语法格式如下:,PROCEDURE PARAMETERS RETURN TO MASTER ENDPROC,RETURN称返回语句 格式一: RETURN 格式二: RETURN TO MASTER 格式二在过程嵌套调用时使用,表示返回到最高级调用者;格式一为返回上级调用过程,即当程序执行该语句时,控制返回到其上级程序,按程序流程从调用该过程命令的下一条命令处继续执行。 最多可使用254个字符。 过程的存放位置:调用程序之后或过程文件中。,2. 调用过程 1) 常用格式: DO WITH 这个语句出现在要调用某过程的主程序中。当主程序执行到该语句时,立即转去执行指定过程中的命令语句块;当在过程中遇到RETURN语句或遇到ENDPROC语句时,又转回主程序,按程序流程执行DO命令的下一条语句。,2) 其它格式 VFP还提供了另外两种调用过程的方法: 命令格式:= ( ) 命令格式:( ),3. 过程调用的嵌套 主程序调用一个过程,这个过程又可以调用第二个过程,第二个过程又可以调用第三个过程,在系统允许的嵌套范围内这样一个一个地调用下去,这种调用就称为过程的嵌套。如图所示。,图523 过程的嵌套1,过程的嵌套,5.7.2 用户自定义函数 用户根据具体问题需要自己定义的函数,称为用户自定义函数。 1. 创建自定义函数 语句格式: FUNCTION PARAMETERS &命令语句序列 RETURN ENDFUNC 说明: 存放位置:调用程序段之后或过程文件中。 用于向调用程序返回函数值。,2调用自定义函数 调用格式:() 执行过程和参数的传递过程与过程调用语句相同。,例 创建一自定义函数MYFUN用于计算N!,再编写主程序来调用该函数计算组合数。,自定义函数“Myfun”的内容如下: FUNCTION Myfun PARAMETERS N S=1 I=1 FOR I=1 TO N S=S * I ENDFOR RETURN S ENDFUN,主程序的内容为: CLEAR INPUT “ 请输入N: “ TO N INPUT “ 请输入M: “ TO M A=Myfun(N)/Myfun(M)/Myfun(N-M) ? “组合数= “ ,A,5.7.3 过程文件 1建立过程文件 在设计过程时也可以把它们保存在单独的程序文件中,我们把这种程序文件称为过程文件。在一个过程文件中,可以包含某主程序所调用的全部过程。打开一个过程文件就打开了它所包含的所有过程。采用这种方式,既可以使主程序代码显得简练,也使程序结构更加紧凑。 过程文件的建立方法与命令文件一样,使用MODIFY COMMAND命令打开代码编辑窗口,在其中定义多个过程或函数。其默认的扩展名为.PRG。P.106例20。,2使用过程文件 调用过程文件中的过程,应首先打开该过程文件。 命令格式:SET PROCEDURE TO ,3关闭过程文件 (1) 用SET PROCEDURE TO 打开一个过程文件时,原已在内存中打开的过程文件即被关闭。即,内存中最多只能存在一个过程文件。 (2) 在主程序末尾应关闭过程文件。 命令1:CLOSE PROCEDURE 命令2:SET PROCEDURE TO,5.7.4 设置内存变量属性 内存变量可以具有两种属性:全局性和局部性(本地性)。 内存变量的属性表明了内存变量的作用范围。,1. 内存变量的局部性 在程序中所定义的内存变量,如果未加说明将具有局部性,其特点为: (1)如果未加特别说明,则在定义它的程序执行完后,将被系统清除。 (2) 如果定义它的程序还要调用其它过程,那么它还可以在被调用的过程中使用。 (3) 在被调用的过程或函数执行当中,如果仍未做特别说明而改变了该内存变量的值,则在从过程或函数返回主程序时,该变量仍然保留它在过程或函数中被改变了的值,主程序在此基础上可继续使用。 从内存变量的固有性质可知,在有过程嵌套的情况下,较高一级的程序中生成的变量可以供较低一级使用,而反之则不可,这就是内存变量的局部性。,例22 由键盘输入一个梯形的上底、下底和高的值,在主程序中定义它们,然后在函数中求这个梯形的面积,分别看看这些变量在主程序与函数中的情况。P.108,自学。,2. 设置全局性内存变量语句PUBLIC 在程序设置中,对有些函数中定义的内存变量,我们希望在主程序中仍能使用,或者希望它在整个的程序中均能使用,这时,应该使用全局性的内存变量。全局性内存变量定义格式如下: 命令格式:PUBLIC 命令功能:定义指定的内存变量或数组具有全局性。,全局性内存变量的性质: (1) 用PUBLIC语句声明过的内存变量可以在整个的程序以及各过程或函数中使用。在任何过程或函数中改变了该变量的值,当该变量进入到其它过程或函数时,仍然保留该改变了的变量值。 (2) 当整个程序结束后,用PUBLIC语句声明过的内存变量依然存在,若要清除它们,必须借助于RELEASE命令。 在VFP命令窗口下建立的内存变量都是全局性内存变量。无须用PUBLIC说明。 在程序中,内存变量用PUBLIC命令说明为全局性变量之后,变量的初值为逻辑假(.F.)。 例23见P.110。,3. 隐藏内存变量语句PRIVATE 命令格式: PRIVATE / 命令功能:隐藏指定内存变量的已有定义。 说明:后一选项可以有以下三种形式: (1)ALL:将所有的内存变量均隐藏。 (2)ALL LIKE:内存中所有变量名与通配符相匹配的内存变量均隐蔽。 (3) ALL EXCEPT:内存中除了变量名能与通配符相匹配的内存变量,其余的均隐蔽。,PRIVATE并不产生新的变量。它只是把上级程序中定义的内存变量隐蔽起来,不再使用,而在当前过程中若要使用同名内存变量,需重新定义(不影响被隐蔽的内存变量值)。退出当前过程后,所有与被隐蔽内存变量同名的内存变量的定义被清除,复现原定义。 PRIVATE语句的使用,使得过程中的变量与上层程序中的变量同名而不同值成为可能。 例24 仍采用上一例,但在函数中把内存变量“面积”隐藏起来。见P.112。,从实例运行结果来看,对于没有做过任何说明的内存变量和做过隐藏说明又重新定义的内存变量,VFP将它们都标记为priv(局部的)。因此,在定义(或说明)它们的程序结束时,它们均被清除。两者仅有一点不同,即:未做任何说明的内存变量在过程返回时保持被改变了的值;而在函数中做过隐蔽型说明的内存变量在返回主程序时则恢复被隐藏前的值。,5.7.5 过程调用中的参数传递 1带参数调用过程命令 命
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇产复习测试有答案(一)
- 2025年山东省泰安市泰山区中考一模道德与法治试题(原卷版+解析版)
- 绿色农业卓越品质
- 旅游业务全景解析
- 2025四川省房屋买卖合同书范本
- 大学生创业:净菜配送公司创业商业计划书
- 中医治未病资料
- 《2025劳动合同证明模板》
- 2025扬州房屋租赁合同
- 2025融资合同股权转让协议
- 2024年平顶山职业技术学院高职单招语文历年参考题库含答案解析
- 2025年北师大版数学六年级下册教学计划(含进度表)
- 2025社保政策培训
- 2025年苏州工业园区国企招聘笔试参考题库含答案解析
- 2025年上海市规划和国土资源管理局所属事业单位工作人员招考高频重点提升(共500题)附带答案详解
- 资产管理岗管理制度内容
- 超声检查的临床义及超声报告的解读课件
- 《空心胶囊规格尺寸及外观质量》(T-CNPPA 3008-2020)
- 2024年江苏省常州市中考英语真题卷及答案解析
- 售前售中售后服务培训
- 彼得 卒姆托简介 彼得 卒姆托的建筑解读 彼得 卒姆托的建筑思想解读 小32课件讲解
评论
0/150
提交评论