Visual-FoxPro-程序设计教程课件——程序设计基础_第1页
Visual-FoxPro-程序设计教程课件——程序设计基础_第2页
Visual-FoxPro-程序设计教程课件——程序设计基础_第3页
Visual-FoxPro-程序设计教程课件——程序设计基础_第4页
Visual-FoxPro-程序设计教程课件——程序设计基础_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章 程序设计基础目 录7.1 结构化程序设计概述7.2 程序文件的建立、编辑与执行7.3 程序设计辅助命令7.4 程序的基本控制结构7.5 子程序、过程文件与自定义函数7.6 程序调试7.7 结构化程序设计举例7.1 结构化程序设计概述Visual Foxpro系统的3种操作方式菜单方式命令方式程序方式7.1.1 程序的概念 程序就是计算机能够分析执行的命令集合。 程序设计就是根据问题的要求,按一定的逻辑关系,将一系列的命令组合在一起,形成一个命令序列的过程。 执行程序就是依次执行其中的每一条命令,直至全部命令执行完毕。 程序通常以文件形式存放在磁盘上,在Visual FoxPro中,程序

2、文件也称为命令文件,其扩展名为 .prg。 程序文件一旦建立,可以多次重复执行 7.1.2 程序设计和算法1算法的概念 算法是解决问题的方法和步骤 2算法的表示 算法可以有多种表示方法,常用的有自然语言法和流程图法。 起止框处理框判断框输入输出框连接点流程线图7-1 流程图常用图形符号7.2 程序文件的建立、编辑与执行7.2.1 程序文件的建立与编辑 程序文件是扩展名为 .prg的纯文本文件。建立和编辑程序文件可以使用外部编辑器或者内部编辑器 。 外部编辑器是指任何可以编辑纯文本文件的字处理软件(如记事本、写字板、Word等),内部编辑器是指Visual FoxPro本身提供的文本编辑器。采用

3、内部编辑器建立程序文件的方法如下:1菜单方式 单击“文件”下拉菜单中的“新建”命令,或者单击常用工具栏上的“新建”按钮;在“新建”对话框中选择文件类型为“程序”,然后单击“新建文件”按钮,打开编辑窗口。 单击“文件”下拉菜单中的“打开”命令,在“打开”对话框中选择已经建立的程序文件,可将其打开并进行编辑。 2命令方式格式1:Modify Command 格式2:Modify File 功能:建立或编辑程序文件。说明: 程序文件名必须以字母开头,由字母、数字、下划线组成,其默认的扩展名为.prg,使用Modify Command命令,可以省略扩展名,使用Modify File命令不能省略扩展名。

4、 执行Modify 命令时,文件名前可以加路径,系统首先在指定路径或当前路径下查找命令中指定的文件,如果未找到,则建立新文件,进入编辑窗口;如果找到了命令中指定的文件,系统自动将该文件调入内存并显示在编辑窗口中。 程序的书写规则包括: 一行只能写一条命令,写完要输入回车,表示命令结束。 一条命令的长度不得超过2048个字符。为便于阅读,可以将长的命令分成若干行书写,但要在行尾加上分号,表示下一行是本行的继续。 绝大部分命令或函数都可缩写成前四个字符。例7.3 简单程序举例:编写程序求半径为3的圆面积。设程序文件名为circle.prg,保存在D盘的vfp-userrsgl文件夹中。在命令窗口输

5、入命令:Modify Command d:vfp-userrsglcircle在打开的程序编辑窗口中,输入下列程序行:r=3s3.14159*r*r? 圆面积:,sReturn7.2.2 程序文件的调用执行 1菜单方式 单击“程序”菜单中的“运行”命令 2命令方式格式:Do With 功能:将磁盘上指定的程序文件调入内存并运行。说明: 程序执行过程中,若发生错误,系统将显示出错信息,用户可返回编辑状态进行修改。 可选项With 用于执行带参数的程序。参数的作用是向运行的程序传递数据。7.3 程序设计辅助命令1数据输入命令 Input 命令格式:Input 提示信息 T0 内存变量功能:用于接收

6、从键盘输入的表达式,并将其运算结果存入指定的内存变量中。说明: Input命令执行时,先在屏幕上显示,然后暂停程序的运行,等待从键盘输入数据。用户输入数据后,按下回车键,系统将输入的数据保存到指定的内存变量中,程序继续执行。 可选项是字符表达式,系统显示其值作为提示信息。 Input命令能够接收任意类型的Visual FoxPro表达式,计算出结果后,再赋值给内存变量。如果输入的表达式中有字符串、日期型、逻辑型常量,则必须使用定界符。 如果内存变量未定义,执行此命令时建立内存变量,类型取决于输入的数据类型。 Input语句每次只能为一个变量输入值。例7.4 编写程序,由键盘输入半径,求圆面积(

7、在程序运行时输入半径,可以实现求任意半径的圆面积,提高程序的通用性)。程序circle1.prg的内容如下:Input 半径= To r s3.14159*r*r? 圆面积=, sReturn运行程序circle1时输入半径值1,显示结果为:半径1&显示提示信息,输入半径值1圆面积3.14159&输出圆面积 Accept命令格式:Accept To 功能:将从键盘上接收的字符串存入指定的内存变量中。说明: 执行此命令时,先在屏幕上显示,然后暂停程序运行,等待用户从键盘输入数据,并以回车键结束。系统将输入的数据存入指定的内存变量中,程序继续执行。 可选项的含义与Input语句相同。 Accept

8、语句只能接收字符型数据,因此所有输入的数据都被作为字符串,并且不需要加定界符。 如果内存变量未定义,将在执行此命令时建立内存变量。Accept语句所定义的内存变量为字符型。例7.5 编程完成如下功能:从键盘输入某个表名,打开并显示此表中的数据。Accept 请输入表名 To xUse &xListUseReturn Wait命令格式:Wait To Window Nowait Timeout功能:执行该命令时,暂停程序的运行,在屏幕上显示提示信息,并等待用户从键盘输入任意一个字符,之后将其赋值给指定的内存变量,程序继续执行。说明: 可选项的含义与Input语句相同。 使用可选项To 内存变量,

9、是将用户输入的字符存入内存变量中;若按回车键,内存变量的值为空。若无此可选项,键入的值不保存。注意,内存变量中只能保存一个字符。 若无任何可选项,系统在执行此命令后,显示“Press Any Key To Continue”,表示按任意键继续执行程序。 加Window选项时,将在屏幕右上角的窗口内显示提示信息;选择Nowait选项则仅显示提示信息,而不暂停。Timeout表示最长等待时间。如果在数值表达式指定的时间内无键盘输入,则继续程序的执行。等待时间以秒计。例7.6 依次显示zgqk.dbf、gz.dbf、kyqk.dbf三个表的内容。没有按任何键时,最多等待10秒钟,即开始显示下一个表的

10、内容。Use zgqkListWait 请按任意键显示下一个表的内容 Timeout(10)UseUse gzListWait 请按任意键显示下一个表的内容 Timeout(10)UseUse kyqkListWait 请按任意键结束 Timeout(10)UseReturn 定位输入命令格式: Say Get | Default Read功能:首先在屏幕的指定位置上输出Say子句中表达式1的值以及Get子句中变量的值,之后,在执行到Read命令后,即激活当前的所有Get变量,可向变量输入新的数据。说明: 命令中的行,列是指信息在主窗口工作区中显示的坐标位置。计算机屏幕被分为多个行和列,行自顶

11、向下编号,列自左向右编号,屏幕的第一行、第一列的编号为(0,0),行、列都可以是数值表达式。 缺省Say子句时只显示Get变量之值;含有Say子句时,则先显示表达式1的值,空一格后再显示变量的值。 Get子句中的变量必须有确定的初值。如果变量在这之前没有建立,则必须使用Default子句为新建变量定义初值。初值一旦确定,该变量的类型在编辑期间就不能再改变,字符型变量的宽度与数值型变量的小数位数也无法再改变。 Read命令不能单独使用,必须与 Get命令配合使用。一个Read命令可以与多个连续的 Get命令配合。Get命令将变量存入缓冲区,Read语句依次激活缓冲区中的全部变量进行编辑。 若无R

12、ead命令,仅显示Get子句中变量的值,而不能编辑修改。 要退出变量编辑状态,可以在任何位置输入“Ctrl+W”(存储刚才的输入并退出);也可以输入“Ctrl+Q”或“Esc”(放弃刚才的输入并退出)。例7.7 用定位输入命令修改变量的值品名=Space(30)单价=0.00数量=0&定义三个内存变量,变量名均为汉字 5, 50 Say 品名 Get 品名 6, 50 Say 单价 Get 单价 6, 50 Say 数量 Get 数量Read&依次激活三个变量进行编辑Return2数据输出命令 无格式输出命令格式:?/?功能:计算并输出表达式的值。说明: 命令中的表达式可以包含字段变量和内存变

13、量,表达式之间以逗号分隔。 两个命令的区别在于:? 命令先换行,再开始输出;? 命令不换行即开始输出。 ? 后面若没有表达式表,则只进行换行操作。 定位输出命令格式: Say 功能:在屏幕的指定位置上输出Say子句中表达式的值。说明:本命令能实现定位输出,一个命令只能输出一个表达式,因此要在一个命令中输出多个表达式的值时,需要将这些表达式组合成一个表达式。例7.9 Use zgqkGo 5 10, 20 Say xm+zc&输出两个字符型变量连接运算的值 10, 35 Say jbgz-1007.3.2 其它常用程序命令1返回命令格式:Return To Master |功能:结束当前程序的执

14、行,返回到调用它的上级程序,如果没有上级程序,则返回到命令窗口。说明: Return通常是程序的最后一条语句,一般允许缺省。 可选项用于子程序嵌套调用时指定返回位置,或者用于自定义函数 2终止命令格式:Cancel功能:终止程序运行,返回命令窗口。3参数定义命令参数可以在不同程序之间进行数据传递。使用参数也可以增强程序的通用性。格式1:Parameters 形式参数表格式2:LParameters 形式参数表功能:定义形式参数,以接收Do命令中实际参数所传送的数据。参数定义命令说明: 参数表中可以有一个或多个参数,各参数之间用逗号分隔。编辑带参数的程序文件时,必须把参数定义命令作为程序中的第一

15、条语句,其中的参数是有效的任意变量名,称为形式参数。Do命令中使用的参数称为实际参数。 参数不仅可以接收数据,还可以向调用程序时使用的变量回送数据。 调用程序时,形式参数的数目必须等于或多于实际参数的数目,否则系统产生运行错误。如果形式参数多于实际参数,多余的形式参数取逻辑值 .F. 。 格式2定义的参数为“本地参数”,这种参数的使用范围与普通参数不同,与本地变量性质相同。 例7.10 带参数程序文件的编制与调用示例:求任意半径的圆面积。程序名circle2.prg,程序内容如下:Parameters ra3.14159*r*r? 圆面积:, aReturn要求半径为5的圆面积,只须键入命令:

16、 Do circle2 With 5 则输出为:圆面积:94.257704注释命令为增加程序的可读性,常常要在程序中加入一些注释,对程序中使用的变量、算法进行说明。注释仅起说明作用,不参与程序运行。Visual FoxPro提供了2种注释的方法其一:在程序行开头加“*”或“Note”,表示本行为注释行其二:命令行中字符“&”后面的部分为注释 7.4 程序的基本控制结构7.4.1 顺序结构 按顺序结构组织程序,只需先把处理过程的各个步骤详细列出,然后把有关命令按照处理的逻辑顺序自上而下地排列起来便可。 7.4.2 分支结构1单分支选择结构格式:If 条件命令序列Endif功能:条件值为.T.时,

17、执行命令序列,然后执行Endif后的命令;条件取值为.F.时,命令序列不执行,直接执行Endif后的命令。执行过程如 P167 图7-4所示。 例7.11 键盘输入一个实数,计算并输出其绝对值。Input 请输入一个实数 To x If x0 x= - xEndif? 其绝对值为:, xReturn2双分支选择结构格式:If 条件 命令序列1Else 命令序列2Endif功能:根据条件的取值在命令序列1与命令序列2这两条路径中选择一条执行。条件值为.T.时,执行;条件取值为.F.时,执行;然后执行Endif后的命令。执行过程如 P167 图7-5所示。说明:If、Else 和 Endif 必须

18、配对使用,且这三条子句应各占一行;和中可以嵌套If语句,但不能交叉。 例7.13 键盘输入一个表名,若文件存在,则显示其记录,若不存在,则显示提示信息“文件不存在”。Clear All&关闭所有文件,清除所有内存变量Accept 请输入文件名 To sIf File(s) Use &s Disp AllElse ? 文件不存在!EndifReturn 例7.14 编写程序实现:从键盘输入3个整数,输出其中最大的一个。Input x= To xInput y= To yInput z= To zIf xy If xz ? 最大值为, x Else ? 最大值为, z EndifElse If y

19、z ? 最大值为, y Else ? 最大值为, z EndifEndifReturn 3多分支选择结构格式:Do Case Case条件l 命令序列1 Case条件2命令序列2 Case条件n 命令序列nOtherwise 命令序列m Endcase 功能:依次判断命令中列出的条件,只要找到某一条件取值为.T.,就执行与之相关的命令序列,余下的条件便不再判断,有关的命令当然亦不执行。在没有一个条件取值为.T.时,若有可选项Otherwise,就执行命令序列m,否则,什么也不做。因此,在众多的命令序列中,多分支选择结构最多只选择执行其中的一个命令序列,有可能一个也不执行。执行过程如 P168

20、图7-6所示。说明: Do Case和第一个Case子句之间不能插入任何命令。 Do Case 和 Endcase必须配对使用,且Do Case、Case、Otherwise 和 Endcase各子句必须各占一行。 中可含有任何Visual FoxPro命令,包括可嵌套Do Case命令。例7.15 P169 .DO CASE CASE A=0 AND B=0 5,20 SAY “此方程无效!” case A=0 AND B0 5,20 SAY “单根” CASE otherwiseENDDO7.4.3 循环结构 循环结构也称为重复结构,是指程序执行过程中,其中的某段代码被重复执行若干次。被重

21、复执行的代码段,通常称之为循环体。Visual FoxPro支持循环结构的命令包括:Do While-EnddoFor-EndforScan-Endscan1Do While命令格式:Do While 条件 命令序列 Loop 命令序列 Exit 命令序列Enddo功能:首先判断条件表达式的值,若为.T.,就执行Do While与Enddo之间的命令序列(称为循环体),然后再判断条件表达式的值,重复刚才的过程。一旦条件取值为.F.,就跳出循环体转而执行Enddo后的下一条命令。说明: Do While和Enddo必须成对出现。 可选项Exit能立即跳出循环,执行Enddo后的下一条命令。 可选

22、项Loop则把控制转到循环结构的开始,并根据条件的取值决定是否开始一次新的循环。Exit与Loop可以出现在循环体内的任何位置上。 循环是否继续取决于条件表达式的当前取值,一般情况下循环体中应含有改变条件表达式值的命令,否则将形成死循环。 循环结构也能自身嵌套,还能与分支结构的各种形式嵌套。 例7.16 利用循环结构计算1到1000中偶数的和。i=0s=0Do While i1000exit endiEndd 5, 20 say sretu永真循环的循环体中一般有选择判断语句2For-Next循环命令格式:For 内存变量=表达式l To 表达式2 Step 表达式3命令序列ExitLoopE

23、ndfor | Next功能:本命令中的内存变量(又称循环变量)的作用类似于计数器。它的取值范围由表达式1(初值)与表达式2(终值)确定。通过判断内存变量的取值是否在指定范围中来确定循环体是否重复执行 说明: 表达式3表示步长,每执行一次循环体,循环变量增加一个步长,步长值可正可负。缺省时则默认为1。 循环变量的初值、终值和步长,决定了循环的执行次数,因此For循环命令通常用于循环次数能完全确定的情况。 一般情况下,For循环体中不应包含改变循环变量值的命令,否则循环执行的次数也将随之改变。 Exit与Loop命令可放置在For与Endfor之间的任意位置。它们的功能与用法与Do While循

24、环相同。如果循环可通过计数来控制,则使用For循环比用Do While循环更为方便。 例7.20 从键盘输入10个数,找出其中的最大值和最小值Cleari=1Input 请输入第+Str(i, 2)+个数 To aStore a To mina, maxaFor i=2 to 10 Input 请输入第+Str(i, 2)+个数 To a If amaxa maxa=a Endif If amina mina=a EndifEndfor? 最大值: , maxa? 最小值: , minaReturn3Scan-EndScan命令格式:Scan For Exit LoopEndScan功能: 对

25、当前表的指定记录,依次重复执行循环体,每循环一次,表的指针自动下移一位。说明:在数据库应用程序中,经常要对表中的指定记录逐个进行某种处理,Visual FoxPro专门提供了表记录扫描循环,利用它能非常方便地完成逐条记录扫描。请注意,Scan循环只能用于表打开的情况。例7.21 P173 4多重循环循环可以嵌套。例如,若在循环体中又包含一个循环,即形成两层循环嵌套。按其所处的位置分别称为外循环与内循环。Visual FoxPro中循环嵌套层数最多允许128层,内循环必须完全嵌在外循环中,不能出现交叉。内、外循环的循环变量通常使用不同的变量名。不论哪一种循环,循环入口和出口是配套的。即endd、

26、endf、endscan总是和最近的do whil、for、scan配套。Loop字句,规定它必须转到所在层次的循环入口而不能转到外层的循环入口;exit子句只能退出当前的循环不能一次退出多层循环体。例7.22 打印九九乘法表。九九乘法表是一个二维表,必须用二重循环才能输出,外循环控制打印的行数,内循环控制打印的列数。ClearFor i=1 to 9 For j=1 To I ? Str(i, 1)+ *+Str(j, 1)+ =+Str(i*j, 2)+Space(2)Endfor?EndforReturn7.5 子程序、过程文件与自定义函数 在程序设计中,如果某个功能的程序段需多次重复使

27、用,可以把这个程序段独立出来单独保存成一个程序,称为子程序。此后凡需要完成该功能时,只要调用相应的子程序便可。 使用子程序的另一个优点是:可以将一个较大的程序按一定的功能分解成若干个小的子程序,以简化程序的设计和调试过程,提高程序设计效率,更方便管理整个程序系统。 调用子程序的程序称为上级程序或主程序。供其它程序调用的程序称为子程序。 1子程序调用 子程序调用使用Do命令。为使子程序具有通用性,通常子程序中都带有参数。 例7.23 P1752子程序嵌套 子程序可以嵌套调用,在这种情况下,被调用的子程序执行Return命令时,返回到调用它的上级程序处。见图 P176 图7-8、图7-9子程序嵌套

28、示意图。7.5.2 过程与过程文件 1过程的定义过程的定义方式有两种。其一,将多个过程保存成一个独立的程序文件(称为过程文件);其二,直接与主程序保存在一起,通常把它写在主程序的后面。过程的定义格式如下:Procedure ReturnProcedure Return说明:每个过程以Procedure开头,以Return结尾。2过程的调用过程的调用与子程序调用一样,使用Do命令。对于独立保存的过程文件,主程序调用其中的过程前,首先要打开这个过程文件,使用完后要关闭。与主程序保存在一起的过程,则无须打开和关闭过程文件。 打开过程文件格式:Set Procedure To Addtive功能:打开

29、一个或多个过程文件。说明:若有Addtive可选项,在打开新的过程文件时,并不关闭已经打开的过程文件。若无此可选项,在打开新的过程文件时,自动关闭原来已打开的过程文件。 关闭过程文件格式1:Close Procedure格式2:Set Procedure To格式3:Release Procedure 功能:格式1、格式2关闭所有打开的过程文件;格式3关闭指定的过程文件。 例7.24 P1777.5.3 自定义函数1自定义函数的定义自定义函数与过程定义方法相似,主要区别为: 过程以Procedure开头,而自定义函数必须以Function开头来定义。 自定义函数必须返回一个函数值,而子程序或过

30、程却无此限制。格式:Function 函数名命令序列Return 表达式自定义函数说明: 自定义函数必须以Return 结尾,表示用函数名返回此表达式的值。 自定义函数名不能与Visual FoxPro系统的标准函数同名,也不能与内存变量同名。 通常自定义函数放在程序文件中,也可以象子程序一样保存为一个单独的程序文件,此时程序文件名就是函数名 2自定义函数的调用自定义函数的调用方法有两种,其一,与系统标准函数一样,作为命令语句中的一个因子;其二,与过程一样,使用Do命令,但第二种方法无法体现作为函数调用的优越性。例7.26 自定义函数应用示例 P1797.5.4 变量的作用域 变量能够合法使用的程序范围就叫做变量的作用域。在Visual FoxPro中,根据变量的作用域,可将内存变量划分为:全局变量局部变量本地变量1全局变量 在主程序和任何子程序(包括过程和自定义函数)中都可使用的变量称为全局变量。它只能用下面两种方法之一定义: 在命令窗口中定义的变量。尽管它们不从属于某一个应用程序,但它们都是全局变量。 在任何程序模块中,用Public命令定义的变量也是全局变量。命令格式如下:Public 内存变量表全局变量的特点: 全局变量可以在任何程序代码中使用,包括主程序和各级子程序。 全局变量必须使用Release、Clear all、Clear memo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论