第6章VisualFoxPro程序设计基础第6章6.1程序与程序文件6.1.1程序的概念程序是能够完成一定任务的命令的有序集合。程序方式的特点:可以利用编辑器方便地输入、修改和保存程序程序文件一旦建立,可以被多次运行,一个程序可以调另一个程序在程序中可以出现在命令窗口中无法使用的命令和语句*功能说明:求圆的周长和面积*文件名:例2-40.PRGclear&&清除VisualFoxPro主窗口或当前用户自定义窗口里的全部内容*设置半径r=3*依次计算周长和面积l=2*PI()*rs=PI()*r^2*输出计算结果?周长=,l?面积=,sRETURN1、从形式上看,VFP的程序是由若干有序的命令行组成,且满足下列规则:(1)一个命令行内只能写一条命令,命令行的长度不得超过2048个字符,命令行以回车键结束。(2)一个命令行可以由若干个物理行组成,即一条命令在一个物理行内写不下时,可以分成几行。换行的方法有两种:一种是在物理行的末尾加符号“;”,表示下一行输入的内容是本行的继续;另一种是系统自动换行,即输入程序时,只管逐条命令输入,无需考虑本条语句是否超过屏幕行宽的最大限度,当输入的语句超过屏幕的最大行宽时,系统自动换行。输入时只需在一行结束时按回车键,通知系统本命令行输入完毕。(3)为便于阅读,可以按一定的格式输入程序,即一般程序结构左对齐,而控制结构内的语句序列比控制结构的语句缩进若干格。2、从功能上看,程序可以分为三个部分:第一部分是程序的说明部分,在本例程序中是前几行,一般用于说明程序的功能、文件名等需要说明的有关信息。第二部分是进行数据处理的部分。通常任何一个有意义的程序,总是要有一些原始数据,否则,这个程序就没有处理对象。同样,程序运行的结果也有必要显示或打印出来,否则,用户将不知道程序干了一些什么。因此,第二部分程序常包括下列三个部分,依次为:提供原始数据部分、数据处理部分、输出结果部分。第三部分是程序的控制返回部分。它控制程序返回到调用该程序的调用处。6.1.2程序文件的建立1.程序文件建立与修改菜单方式命令方式:MODIFYCOMMAND文件名打开程序编辑窗口在程序编辑窗口中输入程序代码用Ctrl+W存盘退出编辑窗口,或单击程序编辑窗口上的【关闭】按钮,在弹出的对话窗口中确定存盘,生成例2-40.prg文件。注释命令:NOTE|*注释字符串&&注释字符串上述命令不作任何操作,只是注释标记,用于说明程序或命令的功能等。注释内容不需要用定界符定界,执行时也不显示。注释信息如果在一行内没有写完,换行时也必须再写注释命令。NOTE或*是用于整行注释的,因此,它必须写在每一个注释行的开头;而&&命令是用于注释一行的部分内容的,因此,它可以写在行中(命令的尾部、注释信息的头部),这是程序中唯一可以在一个逻辑行写二个语句的命令。6.1.3程序文件的执行2.执行程序文件菜单方式命令方式:DO文件名,将执行到文件尾或到以下命令CANCEL、DO、RETURN、QUIT使用DO命令执行文件时,如不跟文件扩展名,将依次查找.exe、.app、.fxp、.prg文件。6.2.1输入命令1.INPUT命令格式:INPUT[字符表达式]TO内存变量可输入常量、变量或表达式,格式必须符合语法要求,且必须输入值。例2-40-1.PRG2.ACCEPT命令格式:ACCEPT[字符表达式]TO内存变量只接收字符串,且字符串不需要定界符,可不输入直接回车。例2-40-3.PRG3.WAIT命令格式:WAIT[字符表达式]TO内存变量[WINDOWS[AT行,列][NOWAIT][CLEAR|NOCLEAR][TIMEOUT数值表达式]。例2-40-2.PRG6.2程序中的常用命令6.2.2输出命令1.?|??命令格式:?|??[表达式1][,表达式2][,…]功能:将表达式的值显示输出说明:?输出前要换行从下行开始输出,??输出前不换行从当前光标处输出。2.MessageBox()函数格式:MESSAGEBOX(提示字符串)功能:弹出提示框显示提示字符串内容说明:提示字符串必须是字符串界定符6.2.3其他命令1.CLEAR命令格式:CLEAR功能:清除主窗口区中的内容2.RETURN格式:RETURN功能:结束当前程序,返回到调用程序的上级程序,如无上级则返回命令窗口3.CANCEL格式:CANCEL功能:终止程序执行并关闭所有打开的文件,返回命令窗口4.QUIT功能:退出VFP返回Windows操作系统6.3程序的基本结构程序结构是指程序中命令或语句执行的流程结构。有顺序结构、选择结构和循环结构三种基本结构。6.3.1顺序结构顺序结构是最简单的程序结构,它按命令在程序中出现的先后次序依次执行。但是绝大多数问题仅用顺序结构是无法解决的,还要用到选择结构和循环结构。clearr=3l=2*PI()*rs=PI()*r^2?周长=,l?面积=,sRETURN语句序列1……语句序列n6.3.2选择结构1.简单形式的条件语句语句格式:IF条件表达式语句序列ENDIF条件语句序列6.3.2选择结构2.一般形式的条件语句语句格式:IF条件语句序列1ELSE语句序列2ENDIF条件语句序列1语句序列2真假6.3.2选择结构3.多分支语句语句格式:DOCASECASE条件1语句系列1CASE条件2语句系列……CASE条件n语句系列n[OTHERWISE语句系列]ENDCASE条件1条件2条件nOTHERWISE语句系列1语句系列2语句系列n语句系列真假真假真假真6.3.3循环结构1.DOWHILE-ENDDO语句语句格式:DOWHILE条件命令序列ENDDO条件循环体真假6.3.3循环结构1.DOWHILE-ENDDO语句语句格式:DOWHILE条件命令序列ENDDO条件真假循环体LOOPEXIT6.3.3循环结构FOR-ENDFOR语句语句格式:FOR循环变量=初值TO终值[STEP步长]循环体[LOOP][EXIT]ENDFOR|NEXT6.3.3循环结构SCAN-ENDSCAN语句语句格式:SCAN[范围][FOR条件1][WHILE条件2]循环体[LOOP][EXIT]ENDSCAN6.4多模块程序设计6.4.1模块的定义1.模块及其定义PROCEDURE|FUNCTION过程名命令序列[RETURN[表达式]][ENDPROC|ENDFUNC]过程保存在称为过程文件的单独文件里。过程文件包含的过程数量不限。过程文件的建立仍然使用MODIFYCOMMAND命令,文件的扩展名仍为.PRG。过程也可以保存在命令文件里,但必须放在命令文件正常代码的后面。这样,一个命令文件中就可以包含许多模块。6.4.2模块的调用2.模块的调用格式1:使用DO命令DO文件名|过程名格式2:在名字后加一对小括号文件名|过程名()要调用过程文件中的过程,首先要打开过程文件SETPROCEDURETO过程文件1[,过程文件2[,……]][ADDITIVE]6.4.2模块的调用2.模块的调用当过程文件中的过程不再需要调用时,应该及时关闭过程文件,释放所在的内在格式1:SETPROCEDURETO格式2:RELEASEPROCEDURE过程文件1[,过程文件2[,……]]6.4.3参数传递模块程序可以接收调用程序传递过来的参数,并能够根据接收到的参数控制程序流程或对接收的参数进行处理,从而大大提高模块程序功能设计的灵活性。接收参数的命令有PARAMETERS和LPRAMETERS格式1:PRAMETERS形参1[,形参2[,……]]格式2:LPRAMETERS形参1[,形参2[,……]]参数传递示例:例2-496.4.4变量的作用域全局变量PUBLIC内存变量表全局变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不会消失局部变量LOCAL内存变量表只能在建立它的模块中使用,不能在上层或下层模块中使用私有变量没有通过PUBLIC和LOCAL命令声明的变量私有变量的作用域是建立它的模块及其下层模块中使用。全局变量、私有变量、局部变量及其作用域示例隐藏变量PRIVATE内存变量列表并不建立内存变量,作用是隐藏指定的在上层模块中可能已经存在的内存变量,使得这些变量在当前模块程序中暂时无效。设计一下按不同幼儿年龄服药的程序,年龄变量为AGE,每天服药次数COUNT,每次服药量MOUNT。提示:使用多分支语句.年龄次数服药量54次/天每次1片104次/天每次2片=103次/天每次2片有一张厚0.5毫米,面积足够大的纸,将它不断对折.问对折多少次后,其厚度可达珠穆朗玛峰的高度(8848米)提示:使用循环结构.设计一个登录程序,当用输入用户名为ADMIN,且密码为SCCTCM时,提示输入正确,否则提示输入错误,并提示重新输入,但重新输入不得超过3次.提示:使用条件选择和循环语句.