您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第7章VFP程序设计
第7章VFP程序设计VFP系统提供了三种工作方式,即窗口单命令执行方式、人工编写程序(面向过程编程)并执行程序的方式、面向对象编程及其执行方式。7.1输入和输出命令1.ACCEPT命令格式:ACCEPT[提示信息字符串]TO内存变量功能:从键盘输入一个字符串并存入指定的内存变量中。说明:输入的字符串不必使用定界符。例7-1P200格式:INPUT[提示信息字符串]TO内存变量功能:从键盘输入一个表达式并将其值存入指定的内存变量中。说明:1)输入表达式的类型决定内存变量的类型。2)用ACCEPT命令接受的字符串不需使用定界符,而用INPUT命令输入字符串时,必须使用定界符。3)与ACCEPT命令的不同之处在于:ACCEPT命令只能输入字符型数据,而INPUT命令可以输入表达式。例7-2P2012.INPUT命令格式:WAIT[提示信息字符串][TO内存变量][TIMEOUTN]功能:暂停程序的执行,等待用户从键盘输入一个字符。说明:1)[To内存变量]:输入的字符存入内存变量中。2)若输入的是回车键或非打印字符,则内存变量中存入一个空字符。3)[TIMEOUTN]:设定等待的时间(秒数),超过此时间,系统自动往下执行。3.WAIT命令“?”、“??”命令其他用于输出的命令,不常用,面向对象的程序设计中使用另外的方法来实现输入与输出。4.关于输出命令7.2程序的三种基本结构与其他程序设计语言一样,VFP的程序结构也有三种:顺序结构、分支结构与循环结构。7.2.1顺序结构特点:计算机按照程序中命令的顺序逐条执行。例7-3程序内容如下:P202use学1in0select学1accept“请输入要查询的学生姓名:”tonamelocatefor姓名=namecleardisplayusereturn7.2.2分支结构特点:根据条件成立与否来决定命令的执行顺序。1.简单分支语句(IF—THEN)格式:IF条件语句行序列ENDIF功能:条件成立时执行语句行序列,再执行ENDIF后面的语句;否则只执行ENDIF后面的语句。条件语句行序列执行过程:NY例7-4程序内容如下:P203clearuse学1accept“请输入要查询的学生姓名:”tonamelocatefor姓名=nameif.not.eof()displayendifuse2.选择分支语句(IF…ELSE…ENDIF)格式:IF条件语句行序列1ELSE语句行序列2ENDIF功能:条件成立时执行语句行序列1,再执行ENDIF后面的语句;否则执行语句行序列2,再执行ENDIF后面的语句。例7-5、7-6P204关于SETTALKOFF和SETTALKON命令P205。条件语句行序列2执行过程:NY语句行序列13.分支语句的嵌套特点:分支语句中又含有分支语句。注意:各分支语句中的IF与ENDIF必须配对使用。参考教材图7.3P206例7-7P2054.结构式多分支选择语句(docase–endcase)特点:用于处理多重选择问题时,结构清晰,层次分明。格式:docasecase条件1语句行序列1case条件2语句行序列2……case条件n语句行序列n[otherwise语句行序列n+1]endcase功能:依次检查每个case项中的条件,若某个条件成立,则执行其后的语句行序列,然后再执行endcase后的语句;若没有条件成立,则执行otherwise后的语句行序列,然后再执行endcase后的语句。执行流程图条件1条件2条件n……语句序列n+1语句序列2语句序列1Endcase后的语句语句序列nYYYNNNNDOCASE—ENDCASE与IF—ENDIF一样,也允许嵌套使用。例7-8P207例7-9P2077.2.3循环结构特点:重复执行一段程序。功能:若条件成立,则执行一遍循环体;若遇到enddo,再去判断条件是否成立,若条件成立,则再执行一遍循环体,如此反复下去,直到条件不成立时,退出循环体,执行enddo后的语句。1.条件循环dowhile---enddo格式:dowhile条件语句行序列1[loop]语句行序列2[exit]语句行序列3enddo循环体执行流程图Dowhile前面的语句条件loopexit遇到enddoenddo后面的语句Y循环体N说明:1)当遇到loop或enddo时,总是返回到dowhile去判断条件是否成立,再决定如何执行;2)当遇到exit时,则结束循环,执行enddo后面的语句。执行过程:若条件成立,则执行一遍循环体。若遇到enddo则再去判断条件是否成立,若成立则再执行一遍循环体,如此反复下去,直到条件不成立时去执行enddo后面的语句。例7-10(P209)、例7-11、7-12(P210)格式:for循环变量=初值to终值[step步长]语句行序列next|endfor功能:重复执行for…next之间的语句N次。其中N=int((终值-初值+1)/步长)执行过程:首先将初值赋给循环变量,然后判断是否超过终值。若未超过,则执行一遍循环体,遇到next时,将循环变量增加一个步长值,再去判断是否超过终值,如此反复,直到超过终值时结束循环,跳到next后面的语句执行。超过的含义:若步长为正数,超过是指循环变量值大于终值;若步长为负数,超过是指循环变量值小于终值例7-13、例7-14P2112.计数循环for--next格式:scan[范围][for条件][while条件]语句行序列endscan功能:在当前数据表中依次查找满足条件的记录,并对每个符合条件的记录执行循环体。说明:1)[范围]的默认值为all。2)exit与loop也可以用于循环体中。例7-15(P212)、7-16(P213)3.条件循环scan-endscan特点:在循环体内又包含循环(P213图7.6)。说明:1)内层循环与外层循环不得交叉。2)循环开始语句与结束语句必须成对出现。例7-17P213、思考:如何用FOR…NEXT来编写完成上述功能的程序?例7-18P2144.多重循环7.3.1过程与过程文件的概念过程:具有独立功能的程序段,亦称为子程序。过程文件:由若干个过程构成的程序文件。1.过程的一般格式procedure过程名过程的全部语句return过程文件的一般格式:由若干个过程构成的程序文件。2.说明:1)过程名一般以字母开头,由字母、数字和下划线组成,最多8个字符。2)过程一般包含一条return语句作为结束,其格式如下:return[tomaster]。7.3过程调用过程文件一般形式如下:PROCEDURE过程名1过程1的全部语句RETURNPROCEDURE过程名2过程2的全部语句RETURN……PROCEDURE过程名N过程N的全部语句RETURN1.程序文件的调用外部调用:每个过程以独立的程序文件(.prg)形式存在,调用时使用命令:do程序文件名例7-19(P216)2.过程文件中过程的调用将多个过程(最多128个)放于一个过程文件中,可以大大提高过程调用的速度。过程文件(.prg)由若干个相互独立的过程组成,其建立方法同程序文件。打开过程:setprocedureto过程文件名关闭过程:closeprocedure过程文件中的过程的调用:do过程名例7-20(P219)7.3.2过程调用特征:执行一个过程时,调用第二个过程;执行第二个过程时,调用第三个过程…。图7.7(P220)、图7.8(P221)7.3.4带参数的过程调用如果每次调用过程时都须使用不同的数据,这时需要带参数调用过程。1.参数语句的格式:PARAMETERS虚参列表说明:被调用过程的第一条语句或PROCEDURE之后的语句必须为PARAMETERS虚参列表,用于存放主调程序传来的数据。虚参的数目不能少于实参的数目,若虚参的数目多于实参的数目,多余的虚参自动取.F.。7.3.3过程的嵌套调用命令格式:DO文件名|过程名WITH实参列表说明:调用时,实参与虚参一一对应。当实参的数目多于虚参的数目时会产生运行错误;当实参的数目少于虚参的数目时,多余的虚参自动取.F.3.参数传递的方式(1)引用方式执行过程时,先将实参值传递给对应的虚参(虚实结合),再执行过程中的语句,过程执行完毕后,将虚参值返回给对应的实参,从而获得计算结果。实参值随着虚参值的变化而变化。例7-21P132(2)传值方式如果在执行过程时,不希望实参值随着虚参值的变化而变化,则在DO命令中用小括号将实参括起来。例7-22P1332.用DO命令实现带参数调用过程的语句按作用范围,内存变量分为:公用内存变量或全局变量:public专用内存变量或私有变量:private局部内存变量:local1.公用内存变量1)命令窗口中定义的变量。2)用public命令说明的变量:public变量名表3)可以在任何过程中定义,定义后即可使用4)过程或程序结束时仍然有效,必须用clearmemory或release释放。7.4内存变量的作用范围2.专用内存变量及其有效范围1)没用public命令说明的变量。2)所在过程执行结束后自动释放。3)主程序中定义的专用内存变量在子程序中一直有效4)若子程序中定义的专用内存变量与主程序中定义的专用或公用内存变量同名,应在子程序中使用Private命令将主程序中的同名内存变量隐藏起来。子程序执行结束后,主程序中的同名内存变量自动恢复。5)private语句的格式private变量表privateall[like|except变量通配名]3.局部内存变量及其有效范围局部内存变量仅在定义它的过程中有效,不能在它的上层或下层中使用。当所在过程执行结束后自动释放。格式:LOCAL内存变量表说明:1)用LOCAL创建的局部内存变量初值为.F.;2)LOCAL不能缩写;3)LOCAL也具有隐藏上层过程中同名变量的作用。图7.9P1364.内存变量的释放1)clearmemory|all2)release内存变量表3)releaseall[like|except变量通配名]7.内存变量的保存和恢复1)将内存变量保存到内存变量文件(.MEM)saveto文件名all[like|except变量通配名]2)将内存变量文件中保存的内存变量恢复到内存restorefrom文件名[additive]其中additive表示保留内存中原有变量。7.5数组的使用7.7.1数组的作用范围和一般使用1.数组定义形式:格式1:DECLARE|DIMENSION数组1名(下标l[,下标2])[,数组名2(下标1[,下标2])]…]格式2:PUBLIC数组名1(下标1[,下标2])[,数组名2(下标1[,下标2])]…]2.说明:数组也有公用和专用之分。使用DECLARE或DIMENSION定义的数组为专用数组,使用PUBLIC定义的数组为公用数组。数组及其元素的有效性同公用和专用变量完全一致。例7-23P1377.7.2数组与数据表之间的数据交换1.scatter命令格式:scatter[fields字段名表][memo]to数组名功能:将当前数据表文件的当前记录中由[FIELDS字段名表]指定的各字段变量的值赋给数组各元素。说明:1)当无[FIELDS字段名表]时,按记录各字段的先后顺序传送所有字段(备注和通用字段被忽略),否则按字段名表指定的顺序传送,字段的类型决定数组各元素的类型。若字段名表后带有MEMO关键字,则字段名表可以包含备注字段。但通用字段总是被忽略。2)数组元素个数多于字段名表中字段个数时,多余数组元素的值不变;数组元素个数少于字段名表中字段个数时,系统自动增加数组元素个数。例7-24P1392.GATHER命令格式:GATHERFROM数组名[FIELDS字段名表][MEMO]功能说明:1)该命令的功能与SCATTER相反,是用数组各元素的值顺序替换当前数据表文件的当前记录中由字段名表指定的各字段的值。2)当无[FIELDS字段名表]时,按数组各元素顺序从左到右顺序替换记录各字段的值(
本文标题:第7章VFP程序设计
链接地址:https://www.777doc.com/doc-3382052 .html