




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封面程序设计基础交互式方式是通过在命令窗口中输入命令或通过选择菜单项来实现各种操作,适用于解决一些较为简单的问题。要处理复杂的问题,就应采取程序方式。VFPVFP的工作方式的工作方式程序由能够完成指定任务的一系列命令组成,这些命令被保存在程序文件中。程序文件又称为命令文件,其扩展名为。程序文件中既可包含能在命令窗口执行的VFP命令,也可包含一些程序控制语句(如IF语句、循环语句)。6.1.1 6.1.1 程序文件程序文件程序文件既可通过VFP内置的文本编辑器来建立和修改,也可通过其他文本编辑器(如记事本)来编辑。程序一旦建立,可以多次执行,也可被其他的程序、表单、菜单等调用。执行程序时,系统会
2、自动地按一定的顺序来执行程序中的命令。 程序的概念程序的概念6.1.2 6.1.2 程序文件的建立和修改程序文件的建立和修改选择“文件”菜单的“打开”命令,打开“打开”对话框。在“打开”对话框中,在“查找范围”下拉列表中定位到程序文件所在的文件夹,在“文件类型”下拉列表中选择“程序”,文件列表中显示出此文件夹下的程序文件。双击要打开的程序文件,或者选择它,再单击“确定”按钮,即可打开程序文件的编辑窗口。修改程序修改程序 |? 当程序文件是一个新文件名时,系统将创建一个新的程序文件,并打开其编辑窗口。当程序文件是一个已经存在的文件时,系统将打开该程序文件的编辑窗口,供用户修改。命令方式命令方式在
3、项目管理器中建立和修改程序在项目管理器中建立和修改程序在程序中,每条命令都以回车键结束,一行只能写一条命令。若命令需分行书写,应在上一行终了时输入续行符“;”。在程序中可插入注释,以提高程序的可读性。注释行以单词“NOTE”或符号“*”开头,它仅在编辑程序时显示,不会在运行程序时执行。在语句末尾也可添加注释,这种注释以符号“&”开头。 程序书写规则程序书写规则 6.1.3 6.1.3 程序的运行程序的运行在程序处于打开状态时运行程序在程序处于打开状态时运行程序 如果程序已在编辑窗口被打开,单击常用工具栏的“运行”按钮,或在“程序”菜单中选择“执行程序名.prg”命令,可执行此程序。程序
4、程序(P)(P)运行运行(D)(D)通过菜单执行程序文件通过菜单执行程序文件 通过命令执行程序文件通过命令执行程序文件由于DO命令默认是运行PRG程序。若用户要运行程序文件,则只需指定主文件名,不需指定扩展名 通过项目管理器执行程序文件通过项目管理器执行程序文件在项目管理器中,选择“代码”选项卡中“程序”选项下的程序名,单击“运行”按钮可以运行该程序文件。当VFP执行PRG源程序文件时,系统将自动对其编译,产生相应的FXP文件。系统实际执行的是FXP目标文件。在执行程序的过程中,系统会自动地按一定的顺序逐条来执行程序中的命令。 中止程序的运行中止程序的运行如果程序有错,或在执行过程中用户按了E
5、SC键中止程序,系统会打开“程序错误”对话框。中止程序的运行中止程序的运行系统将取消此次程序的执行系统将取消此次程序的执行 系统将暂停程序的运行,返回到命令窗口系统将暂停程序的运行,返回到命令窗口用户可以在执行其他的操作后,选择用户可以在执行其他的操作后,选择“程序程序”菜菜单的单的“继续执行继续执行”命令或在命令窗口中执行命令或在命令窗口中执行“RESUME”命令,从程序的中止处继续运行程序命令,从程序的中止处继续运行程序 当用户选择当用户选择“忽略忽略”时,系统将时,系统将忽略程序错误,继续执行程序忽略程序错误,继续执行程序 6.1.4 6.1.4 输入命令输入命令在VFP中,应用程序的输
6、入/输出界面通常采用表单、报表等形式。但在编写小程序时,仍然常使用传统的输入命令。 程序中执行到该语句时,在主窗口显示用户设置的提示信息,等待用户从键盘输入数据。用户输入数据后,按回车键,系统将接收到的数据作为字符串赋值给内存变量,再继续往下执行程序。 字符串接收命令字符串接收命令 是一个字符型表达式。执行此命令时,该表达式的内容作为提示信息,显示在屏幕上。 若缺省此项,则不显示提示信息。 由于此命令接收到的任何数据都会作为字符串。 用户在输入数据时,不需要输入字符串定界符。 若用户不输入任何数据,直接按回车键,则系统会 将对内存变量赋值为空串。 字符串接收命令字符串接收命令&打开图书
7、表打开图书表&接收用户要查询的条形码接收用户要查询的条形码&根据用户的输入查找记录根据用户的输入查找记录&显示图书记录的相关信息显示图书记录的相关信息&关闭数据表关闭数据表在图书表中,根据用户输入的条形码,查找书籍的条形码、书名、售价、作者信息。 该命令与ACCEPT命令类似,但该命令可接收用户输入的多种数据类型的表达式。用户可输入数值型、字符型、日期型或逻辑型表达式。系统先计算表达式的值,然后将值赋给指定的内存变量。内存变量的类型由表达式的数据类型决定。 当用户输入字符型、日期型或逻辑型常量时,应加上相应的定界符。 表达式输入命令表达式输入命令 AT , 该命
8、令与ACCEPT命令类似,但该命令只能接收用户输入的。 单个字符接收命令单个字符接收命令若缺省,执行此命令时,屏幕上显示“按任意键继续。”若指定TO TO 短语,执行此命令时,用户按任意键,不需按回车键,该键作为一个字符被接收到指定的内存变量中。若用户不输入任何数据,直接按回车键,或单击鼠标,系统会将对内存变量赋值为空串。若不指定TO 短语,此语句的功能为暂停程序的执行,显示提示信息。用户按任意键,或单击鼠标,将继续执行程序。 单个字符接收命令单个字符接收命令若指定WINDOWWINDOW短语,将显示一个窗口显示提示信息。通常,窗口显示在屏幕的右上角。若用AT AT , 短语,可指定窗口的位置
9、。TIMEOUT TIMEOUT 短语,用来设置等待用户输入的时间,以秒为单位。如果在指定的时间内用户未输入任何字符,系统将自动执行后面的命令。 单个字符接收命令单个字符接收命令例如,用户要在程序执行过程中查看数值型变量A的值,要求结果显示在10行30列位置的窗口中,显示5秒钟后继续执行程序,则语句为WAIT “变量A的值为”+STR(A) WINDOW AT 10,30 TIMEOUT 5又例如,用户要在程序执行过程中接收一个字符,将此值存储在变量B中。则语句为WAIT “请输入一个字符” TO B 单个字符接收命令单个字符接收命令6.1.5 6.1.5 其他命令其他命令在程序的结尾,通常执
10、行以下命令,以结束程序的运行。当然,如果省略这些命令,也可以终止程序。结束当前程序的执行,返回到调用它的上级程序,若无上级程序,则返回到命令窗口结束程序运行命令结束程序运行命令终止程序运行,清除所有的私有变量,返回命令窗口退出Visual FoxPro系统,返回到Windows。 结束程序运行命令结束程序运行命令清除主屏幕窗口上的所有信息。 清屏命令清屏命令 关闭所有已打开的各类文件,并将当前工作区设为1号工作区。 关闭文件命令关闭文件命令 可以关闭文件,还可以清除所有用户定义的内存变量。 关闭文件命令关闭文件命令 许多命令在执行时会返回一些执行状态的信息这些信息通常会显示在窗口或状态栏中开启
11、或关闭人机会话 设置环境参数命令设置环境参数命令 设置默认的文件路径 设置环境参数命令设置环境参数命令是根据给定的任务,设计、编写和调试出完成该任务的过程。结构化程序设计的基本思想是采用“自顶向下,自顶向下,逐步求精逐步求精”的程序设计方法和“单入口单出口单入口单出口”的控制结构。程序的基本结构程序的基本结构自顶向下、逐步求精的程序设计方法是从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图。程序的基本结构程序的基本结构“单入口单出口”的思想认为:一个复杂的程序,如果它仅是由、和三种基本程序结构通过组合、嵌套构成,那么这个一定只有一个唯一的入口和出口。据
12、此,就很容易编写出结构良好、易于调试的程序。程序的基本结构程序的基本结构是最简单的程序结构,先执行A操作,再执行B操作,依次执行各条语句。 6.2.1 6.2.1 顺序结构顺序结构6.2.2 6.2.2 选择结构选择结构是在程序执行时,根据不同的条件,选择执行不同的程序语句。VFP的分支结构程序可以分为(IF-ENDIF)、(IF-ELSE-ENDIF)以及(DO CASE -ENDCASE)三种不同的程序 . 简单选择语句简单选择语句如果条件成立,即的值为真,则执行语句序列,然后再执行ENDIF后面的语句。否则,直接执行ENDIF后面的语句。 某地的计程车收费规则为:不超过某地的计程车收费规
13、则为:不超过2 2公里时,一公里时,一律收取律收取6 6元。超过部分每公里加收元。超过部分每公里加收1.81.8元。元。编程根据行车里程计算应付车费。编程根据行车里程计算应付车费。 &接收要计算的行车里程接收要计算的行车里程 &将车费赋值为将车费赋值为6元元 &判断判断x是否超过是否超过2公里公里 &重新计算车费重新计算车费 &显示里程和车费显示里程和车费 &返回命令窗口返回命令窗口 双分支选择语句双分支选择语句如果条件成立,即的值为真,则执行语句序列1,然后执行ENDIF后面的语句。否则,执行语句序列2的语句,再执行ENDIF后面的语句。. 双
14、分支选择语句双分支选择语句某地的计程车收费规则为:不超过某地的计程车收费规则为:不超过2 2公里时,一公里时,一律收取律收取6 6元。超过部分每公里加收元。超过部分每公里加收1.81.8元。元。编程根据行车里程计算应付车费。编程根据行车里程计算应付车费。 &接收要计算的行车里程接收要计算的行车里程 &判断判断x是否超过是否超过2公里公里 &将车费赋值为将车费赋值为6元元 &将车费赋值为将车费赋值为6元加超出的部分元加超出的部分 &显示里程和车费显示里程和车费 &返回命令窗口返回命令窗口在图书表中,根据用户输入的条形码查找书籍。在图书表中,根据用户
15、输入的条形码查找书籍。如果找到,则显示书籍的条形码、书名、售价、作如果找到,则显示书籍的条形码、书名、售价、作者信息;如果没有找到,显示者信息;如果没有找到,显示查无此书查无此书。 &打开图书表打开图书表 &接收用户要查询的条形码接收用户要查询的条形码 &根据用户的输入查找记录根据用户的输入查找记录 &判断是否找到了输入条码判断是否找到了输入条码 &显示图书记录的相关信息显示图书记录的相关信息 &显示没有这本书显示没有这本书 &关闭数据表关闭数据表 &返回命令窗口返回命令窗口 嵌套选择语句嵌套选择语句在解决一些复杂问题时,需要将多
16、个选择结构语句结合起来使用。也就是说,在选择结构的中,允许包括另一个合法的选择结构,形成选择的嵌套。对于嵌套选择结构的程序而言,每一个IF必须和一个ENDIF配对。为了使程序易于阅读,内外层选择结构层次分明,通常按缩进格式来书写。某商场采取打折的方法进行促销,购物金额在某商场采取打折的方法进行促销,购物金额在3 30000元以上,按九五折优惠;购物金额在元以上,按九五折优惠;购物金额在500500元以上,元以上,按九折优惠;购物金额在按九折优惠;购物金额在10001000元以上,按八五折优元以上,按八五折优惠。编写程序,根据用户的购物金额,计算其优惠惠。编写程序,根据用户的购物金额,计算其优惠
17、额及实际付款金额额及实际付款金额 &接收要计算的购物金额接收要计算的购物金额 &判断金额是否超过判断金额是否超过300元元 &没有优惠没有优惠 &优惠额为优惠额为5% &判断金额是否超过判断金额是否超过1000元元 &优惠额为优惠额为10% &优惠额为优惠额为15% &显示优惠额和实际付显示优惠额和实际付款款 &返回命令窗口返回命令窗口 多路分支多路分支系统自上而下依次对各个CASE语句的条件进行判断。若某个的值为真,则执行该语句下的语句序列。然后,不管其他CASE语句的条件是否成立,转去执行ENDCASE后的语句。若所有
18、的值都不为真,又有OTHERWISE子句,则执行OTHERWISE后的语句序列,再转去执行ENDCASE后的语句。若所有的值都不为真,又没有OTHERWISE子句,则直接执行ENDCASE后的语句。.&接收要计算的购物金额接收要计算的购物金额&判断金额是否超过判断金额是否超过300元元&没有优惠没有优惠&判断金额是否超过判断金额是否超过500元元&优惠额为优惠额为5%&判断金额是否超过判断金额是否超过1000元元&优惠额为优惠额为10%&优惠额为优惠额为15%&显示优惠额和实际显示优惠额和实际付款付款&返回命令窗口
19、返回命令窗口由于各个CASE条件是按其排列的前后顺依次被判断的。所以,哪一个条件在前,哪一个条件在后,可能会影响程序的执行结果。编写程序时,应根据条件所蕴含的逻辑关系,认真考虑。6.2.3 6.2.3 循环结构循环结构是指在程序执行的过程中,某段代码被重复地执行若干次,被重复执行的代码段称之为循环体。VFP支持三种循环结构的控制语句:(DO WHILE-ENDDO)、(FOR-ENDFOR)、(SCAN-ENDSCAN)。 条件循环条件循环条件循环语句,是根据条件表达式的值,决定循环体语句的执行次数。 条件循环条件循环执行该语句时,先判断DO WHILE处的循环条件是否成立,如果条件为真,则执
20、行DO WHILE与ENDDO之间的命令序列(循环体)。当执行到ENDDO时,返回到DO WHILE,再次判断循环条件是否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句,执行ENDDO后面的语句。如果第一次判断条件时,条件即为假,则循环体一次都不执行。 .&打开图书表打开图书表&设置变量设置变量jx的初值的初值&根据变量根据变量jx的值判断是否循环的值判断是否循环&接收用户要查询的条形码接收用户要查询的条形码&根据用户的输入查找记录根据用户的输入查找记录&判断是否找到了输入条码判断是否找到了输入条码&显示图书记录的相关信息显
21、示图书记录的相关信息&显示没有这本书显示没有这本书&接收用户输入的字符是否继续查找接收用户输入的字符是否继续查找&关闭数据表关闭数据表&返回命令窗口返回命令窗口 条件循环条件循环在循环体中可以出现两条特殊的命令:和。如果循环体包含LOOP命令,那么当遇到LOOP时,就结束循环体的本次执行,不再执行其后面的语句,而是转回DO WHILE处重新判断条件。如果循环体包含EXIT命令,那么当遇到EXIT时,就结束该语句的执行,转去执行ENDDO后面的语句。通常LOOP和EXIT出现在循环体内包含的选择结构中,根据选择语句的条件来判断是否LOOP或EXIT。.无条件循环命
22、令无条件循环命令 无条件结束循环命令无条件结束循环命令 实现程序例6.7的功能。且如果用户输入的条形码不是8位字符,则提示用户重新输入条形码。 &打开图书表打开图书表. &循环条件永远为真值循环条件永远为真值&接收用户要查询的条形码接收用户要查询的条形码&如果用户输入的条形码不是如果用户输入的条形码不是8位位&显示警告信息显示警告信息&跳转到循环的条件判断处跳转到循环的条件判断处&根据用户的输入查找记录根据用户的输入查找记录&判断是否找到了输入条码判断是否找到了输入条码&显示图书记录的相关信息显示图书记录的相关信息&
23、;显示没有这本书显示没有这本书&接收用户输入的字符是否继续查找接收用户输入的字符是否继续查找&如果用户回答的不是如果用户回答的不是Y或或y&退出循环退出循环&关闭数据表关闭数据表&返回命令窗口返回命令窗口循环条件为逻辑常量.T.,循环条件永远成立,这种循环被称为绝对循环。这时,在循环体内应该有EXIT语句退出循环。 使用循环结构时,为使程序最终能退出循环,在循环体中必须要有使循环条件的值的发生改变的语句,或者有EXIT语句。否则程序将永远重复地执行循环体,这种情况称为。调试过程中遇到死循环时,按键盘的ESC键可结束程序的运行。 求求1 1到到100100
24、之间全部数之和之间全部数之和&设置计数变量设置计数变量i的初值为的初值为1&设置求和变量设置求和变量s的初值为的初值为0&循环条件为循环条件为i不超过不超过100&使使s的值增加的值增加i&使使i的值增加的值增加1&显示求和变量的值显示求和变量的值&返回命令窗口返回命令窗口 s i s i初值初值 0 0 1 1 循环循环1: 1 21: 1 2循环循环2: 2: 1 1+2 3+2 3循环循环3 : 3 : 1+21+2+3 4+3 4循环循环4 : 14 : 1+2+3+2+3+4 +4 5 5循环循环5: 5: 1+2+3+41+2
25、+3+4+5 +5 6 6循环循环100: 1+2+100: 1+2+100 101+100 101对于读者表的所有读者根据不同的身份对于读者表的所有读者根据不同的身份来收取押金。其中,教研人员收取来收取押金。其中,教研人员收取5050元,工元,工作人员收取作人员收取3030元,研究生收取元,研究生收取2020元。元。将所有读者的姓名,身份和押金显示出来将所有读者的姓名,身份和押金显示出来 &打开读者表打开读者表&循环条件为记录指针不指向文件尾循环条件为记录指针不指向文件尾&判断当前记录的身份字段的值是否为教研人判断当前记录的身份字段的值是否为教研人员员&对对y
26、j赋值为赋值为50&判断当前记录的身份字段的值是否为工作人判断当前记录的身份字段的值是否为工作人员员&对对yj赋值为赋值为30&判断当前记录的身份字段的值是否为研究生判断当前记录的身份字段的值是否为研究生&对对yj赋值为赋值为20&显示当前记录的姓名和身份字段及变量显示当前记录的姓名和身份字段及变量yj的值的值&向下移动记录指针向下移动记录指针&关闭数据表关闭数据表&返回命令窗口返回命令窗口 步长型循环步长型循环 步长型循环步长型循环执行该语句时,系统首先自动将初值赋给循环变量,然后判断循环变量是否超过终值。若步长值为正数,则循环
27、变量大于终值为超过;若步长值为负数,则循环变量小于终值为超过。若没有超过,则执行循环体,并将循环变量增加一个步长值。然后,再去判断循环变量是否超过终值。如果没有超过终值,则再次执行循环体;否则,转去执行ENDFOR后面的语句。在缺省步长值时,默认的步长值为1。、 、 都是数值型表达式。这些表达式的值在第一次循环时被计算出来,在以后循环的执行过程中不再会被改变。 .使用步长型循环实现例使用步长型循环实现例6.9 6.9 &设置求和变量为设置求和变量为s&设置循环变量设置循环变量i的初值为的初值为1,终值为,终值为100,步长为,步长为1&使使s的值增加的值增加i&
28、显示求和变量的值显示求和变量的值&返回命令窗口返回命令窗口判断某数是否为质数判断某数是否为质数除了除了1 1和它本身之外不能被任何一个整和它本身之外不能被任何一个整数所整除的数为质数。除了数所整除的数为质数。除了2 2以外的质数均以外的质数均为素数。为素数。要判断一个数要判断一个数n n是否素数,只需用是否素数,只需用2 2到到n-1n-1的的各个整数去除各个整数去除n n。如果都不能整除。如果都不能整除n n,则,则n n就就是素数。只要有一个数能整除是素数。只要有一个数能整除n n,则,则n n就不就不是一个素数。是一个素数。 &接收从键盘输入的整数赋值给变量接收从键盘输入
29、的整数赋值给变量n&设置循环变量设置循环变量i的初值为的初值为2,终值为,终值为n-1,步长为,步长为1&若若i整除整除n,则退出循环,则退出循环&退出循环后,判断退出循环后,判断i是否大于是否大于 n-1&若若i等于等于 n,则说明,则说明2到到n-1没有一个数整除没有一个数整除n&否则,说明是在否则,说明是在i整除整除n的情况下退出循环的情况下退出循环&返回命令窗口返回命令窗口 扫描型循环扫描型循环 扫描型循环扫描型循环执行该语句时,系统首先将记录指针指向给定范围内满足指定条件的第一条记录上。如果此时记录指针指向的不是文件尾,即EOF()为假
30、值,则执行循环体。执行完,系统自动将记录指针定位到给定范围内下一条满足指定条件的记录,然后重新判断记录指针是否指向文件尾。若不是文件尾,则再次执行循环体,否则转去执行ENDSCAN后的语句。当缺省范围和条件时,数据表的所有记录都将执行循环体的语句。.&打开读者表打开读者表&对所有记录进行扫描对所有记录进行扫描&判断当前记录的身份字段的值是否为教研人判断当前记录的身份字段的值是否为教研人员员&对对yj赋值为赋值为50&判断当前记录的身份字段的值是否为工作人判断当前记录的身份字段的值是否为工作人员员&对对yj赋值为赋值为30&判断当前记录的身
31、份字段的值是否为研究生判断当前记录的身份字段的值是否为研究生&对对yj赋值为赋值为20&显示当前记录的姓名和身份字段及变量显示当前记录的姓名和身份字段及变量yj的值的值&关闭数据表关闭数据表&返回命令窗口返回命令窗口在一个循环结构的循环体内包含另在一个循环结构的循环体内包含另一个循环结构,则称为一个循环结构,则称为,或称为或称为。前面所介绍的几种循环语句不仅自前面所介绍的几种循环语句不仅自身可以嵌套自身,也可以互相嵌套身可以嵌套自身,也可以互相嵌套,实现多重循环,实现多重循环但是,每一层次的循环开始语句和但是,每一层次的循环开始语句和循环结束语句必须互相对应,层
32、次循环结束语句必须互相对应,层次分明,不能互相交叉。分明,不能互相交叉。 多重循环多重循环显示出显示出3 3到到100100之间的所有素数,并求这些数的和之间的所有素数,并求这些数的和 &设置求和变量设置求和变量s s的初值为的初值为0 0&设置循环变量设置循环变量n n的初值为的初值为3 3,终值为,终值为100100,步长为,步长为2 2&设置设置i i的初值为的初值为2 2,终值为,终值为n n的平方根的整数值的平方根的整数值&若若i i整除整除n n,则退出循环,则退出循环&退出循环后,判断退出循环后,判断i i是否大于内层循环的终值是否大于内层
33、循环的终值&说明没有发生说明没有发生i i整除整除n n的情况,即的情况,即n n是素数是素数&使求和变量使求和变量s s的值增加的值增加n n&返回命令窗口返回命令窗口编程输出乘法九九表编程输出乘法九九表&设置求和变量设置求和变量s s的初值为的初值为0 0&外层循环变量外层循环变量i i从从1 1到到9 9&内层循环变量内层循环变量j j从从1 1到到i i&在本行显示数学式在本行显示数学式i ij j=i=i与与j j的乘积的乘积&换行输出换行输出输入输入9 9个数值,建立一个三行三列的数组,求个数值,建立一个三行三列的数组
34、,求出每行元素的最大值,并输出。出每行元素的最大值,并输出。 &定义三行三列的定义三行三列的a a数组,用来保存各行最大值的数组,用来保存各行最大值的m m数组数组* *上述语句为对二维数组的各个元素逐一赋值上述语句为对二维数组的各个元素逐一赋值&外层循环变量外层循环变量i i从从2 2到到3 3&设设m(im(i) )初值为初值为i i行的第一列的数组元素行的第一列的数组元素&内层循环变量内层循环变量j j从从2 2到到3 3&判断第判断第j j列元素是否大于列元素是否大于m(im(i) )中保存的值中保存的值&将将m(im(i) )重新赋值为
35、第重新赋值为第j j列元素列元素* *下列语句为对二维数组的各个元素逐一输出,并显示各行的最大值下列语句为对二维数组的各个元素逐一输出,并显示各行的最大值显示读者表中还有未还书籍的读者的姓名,显示读者表中还有未还书籍的读者的姓名,电话,未还书籍的本数,未还书籍的条形码和借电话,未还书籍的本数,未还书籍的条形码和借阅日期。阅日期。 &选择选择2号工作区为当前工作区号工作区为当前工作区&打开借阅表打开借阅表&选择选择1号工作区为当前工作区号工作区为当前工作区&打开读者表打开读者表&对读者表所有记录进行扫描循环对读者表所有记录进行扫描循环&设统计未还图
36、书本数的变量设统计未还图书本数的变量c的初值为的初值为0&选择借阅表为当前表选择借阅表为当前表&扫描读者证号与读者表当前记录的读者证号相同且还书日期为空的记录扫描读者证号与读者表当前记录的读者证号相同且还书日期为空的记录&未还图书本数变量未还图书本数变量c增加增加1&显示未还图书的条形码和借阅日期显示未还图书的条形码和借阅日期&内层循环结束内层循环结束&选择读者表为当前表选择读者表为当前表&判断该读者未还图书的本数是否大于判断该读者未还图书的本数是否大于0&显示该读者的姓名显示该读者的姓名,电话号码电话号码,未还图书的本数未还图书
37、的本数&外层循环结束外层循环结束&关闭读者表关闭读者表&选择借阅表为当前表选择借阅表为当前表&关闭借阅表关闭借阅表&返回命令窗口返回命令窗口结构化程序设计的基本思想是将一个复杂的规模结构化程序设计的基本思想是将一个复杂的规模较大的程序系统划分为若干个功能相关又相对独较大的程序系统划分为若干个功能相关又相对独立的一个个较小的模块。这样,既有利于程序的立的一个个较小的模块。这样,既有利于程序的编写和开发,也有利于程序的维护和扩充。编写和开发,也有利于程序的维护和扩充。此外,在程序设计中,如果某个功能的程序段需此外,在程序设计中,如果某个功能的程序段需要多次重
38、复使用的话,也要把这样的程序段独立要多次重复使用的话,也要把这样的程序段独立出来成为一个模块,当系统中任何地方要用到该出来成为一个模块,当系统中任何地方要用到该功能时,只要调用相应的模块即可,而不必再重功能时,只要调用相应的模块即可,而不必再重复编写。复编写。多模块程序设计多模块程序设计求组合数:求组合数:C Cm m= = n! (m-n)!n! (m-n)!n m ! 求阶乘求阶乘例题例题由于公式中出现了由于公式中出现了3 3个阶乘,所以程序中计算阶个阶乘,所以程序中计算阶乘的程序段重复出现三次。为了简化程序,我们乘的程序段重复出现三次。为了简化程序,我们可以把计算阶乘的功能定义为一个模块
39、。可以把计算阶乘的功能定义为一个模块。在在VFPVFP中,模块可以是一个子程序,也可以是一中,模块可以是一个子程序,也可以是一个过程。个过程。子程序就是将模块建成一个独立的命令文件,当子程序就是将模块建成一个独立的命令文件,当其他程序中需要用到该模块的功能,可以通过其他程序中需要用到该模块的功能,可以通过DODO命令来调用此子程序。由于每调用一个子程序就命令来调用此子程序。由于每调用一个子程序就要打开一个文件,减慢了程序运行的速度。为此,要打开一个文件,减慢了程序运行的速度。为此,可以通过定义过程实现模块功能,而一个程序文可以通过定义过程实现模块功能,而一个程序文件中可存放多个过程。件中可存放
40、多个过程。 多模块程序设计多模块程序设计6.3.1 6.3.1 过程的定义和使用过程的定义和使用 定义过程定义过程PROCDURE或FUNCTION命令表示过程的开始,并对过程命名。过程名必须以字母或下划线开头,可包含字母、数字和下划线。ENDPROC或ENDFUNC命令表示过程的结束。如果缺省,过程结束于下一个过程的开始处或文件结尾处。RETURN命令表示过程的返回。如果缺省RETURN命令,则在过程的结束处将自动执行一条隐含的RETURN命令。若RETURN带,则过程将返回表达式的值。若不带表达式,过程返回一个逻辑真(.T.)。定义过程定义过程过程可以保存在程序文件中,放置在程序文件正常代
41、码的后面。一个程序文件中可以存放多个过程。定义过程定义过程当主程序中要用到过程所定义的功能,可以用下列两种格式调用过程。调用过程调用过程 ()当系统运行到程序中调用过程的命令时,便从过程的第一条语句开始执行,执行中只要碰到RETURN语句,控制返回到主程序,从主程序中调用过程的下一条语句处继续执行。使用第二种格式调用过程时,该过程将返回一个值,可以作为函数出现在主程序的表达式中。调用过程调用过程使用过程的方式求组合数使用过程的方式求组合数例题例题一个应用程序往往需要用到多个过程,用户可将多个过程的定义存放在一个程序文件中,该文件被称为过程文件。过程文件过程文件 。 过程文件过程文件由于过程文件
42、也是一个扩展名为prg的程序文件,其建立和编辑的方法和其他的程序文件相同。当主程序中要用到过程文件中所定义的过程时,首先要在主程序中通过SET PROCEDURE TO命令打开过程文件。此后,主程序可以调用过程文件中的任一过程。当不再需要调用过程时,应该在主程序中使用命令CLOSE PROCEDURE或SET PROCEDURE TO关闭过程文件。 过程文件过程文件在调用过程时,往往需要将一些数据从主程序传送到被调用的过程中,或将过程运行的结果上传到主程序中。为此,在定义过程时,可以用语句来定义参数。PARAMETER必须是过程的第一个语句。在PARAMETER中所说明的变量,称其为。6.3.
43、2 6.3.2 参数传递参数传递当主程序中调用过程时,可以用 或()进行参数传递。在调用语句中的参数,称其为。实参和形参的个数、类型必须一一对应。实参可为常量、变量、表达式。若实参为变量,必须在调用前赋予初值。 参数传递参数传递使用带参数的过程实现求组合数使用带参数的过程实现求组合数 例题例题以以m m为实参,为实参,m m的值传送给的值传送给k k 调用结束后,调用结束后,t t的值通过过程名传回到主程序的值通过过程名传回到主程序 以以n n为实参,为实参,n n的值传送给的值传送给k k 过程的值为过程的值为n n的阶乘的阶乘 以以m-nm-n为实参,为实参,过程的值为过程的值为m-nm-
44、n的阶乘的阶乘 当实参是常量或表达式时,采取值传递,即实参的值传给形参,过程中形参变化的结果不传给实参。若采取DOWITH格式调用过程,当实参是变量时,采取的是地址传递,即过程中形参变化的结果将传给实参。或者说,对形参的操作实际上相当于在对实参所对应的变量进行。如果将作为实参的变量加上括号,则采取值传递,过程中形参变化的结果不传给实参。参数传递参数传递若采取过程名()格式调用过程,在进行参数传递时,默认是采取值传递方式。使用命令SET UDFPARMS TO VALUE|REFERENCE 可改变参数传递方式。SET UDFPARMS TO VALUE为按值传递,SET UDFPARMS TO
45、 REFERENCE为按参数传递。形参变量是局部变量。当控制返回到主程序后,形参变量即被清除。 参数传递参数传递参数传递举例参数传递举例 例题例题x x是地址传递,是地址传递,y y是值传递是值传递返回主程序后,返回主程序后,x x的值变为的值变为2222,y y的值仍为的值仍为7 7 x x,y y均为值传递。均为值传递。返回主程序后,返回主程序后,x x和和y y的值不变。的值不变。显示结果显示结果58 ,22,7 58 ,22,7 6.3.3 6.3.3 变量的作用域变量的作用域多模块程序中,在一个模块中定义的变量在其他模块中不一定能够使用。不同的变量有不同的作用域,即每个变量有其发挥作
46、用的有效范围。根据变量作用域不同,变量分为全局变量、局部变量和私有变量。 全局变量也称为公共变量,是在任何语句和各个程序模块中都有效的内存变量。 定义全局内存变量全局内存变量全局内存变量全局变量应先定义后赋值,不能在赋值一个变量后再将其定义为全局变量。全局变量在定义以后,默认的初值是逻辑假.F定义全局变量的程序运行结束后,全局变量并未被释放,仍然可以在其他程序中使用。只有在执行、 等命令或退出VFP后,全局变量才被释放。在命令窗口所建立的内存变量,默认为全局变量。全局内存变量全局内存变量在程序中所有未经说明而直接建立的内存变量都是私有变量。私有变量可以在创建它的模块及其调用的下层模块中使用。一
47、旦建立它的模块程序运行结束,这些私有变量将被清除。也就是说,在下层模块定义的私有变量,无法在其上层模块中使用。 私有变量私有变量局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。当建立它的模块程序运行结束,局部变量被释放。 命令定义的变量是局部变量,并赋予其初值为逻辑值假.F.。同样,局部变量也要先定义后使用。局部变量局部变量例题:变量作用域例题:变量作用域显示结果显示结果10 1010 10 显示结果显示结果10 2010 20 显示结果显示结果20 2020 20 由于一个大型的程序可能由多人开发,在下级子程序中可能会无意地改变上级程序中的私有变量。为了避免这种情况,可以在过程中使用 。该命令并不建立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抗菌药物合理使用
- 茶楼茶艺师培训与派遣合同
- 专业物流车间租赁与仓储管理合同
- 茶叶店加盟品牌售后服务合同
- 跨境电商平台临时运营专员项目执行条款
- 茶叶品牌授权与市场推广合作合同
- 成都市二手房买卖双方房屋权属变更与登记合同
- 出借合同审查与风险评估服务协议
- 研发中心场地租赁合同补充协议范本
- 智能玻璃门窗系统研发与推广合同
- 核电站辐射防护法规标准国际比较-洞察阐释
- 接处警规范化操作培训体系
- 2025年中考语文作文终极押题(附范文5篇)
- 水利水电工程科技创新与试题及答案
- 抗凝药术前停用的指南
- 储能集装箱项目可行性研究报告(模板)
- 数控车工考试试题及答案
- 餐厅食品安全培训知识
- 25黄帝的传说课件
- 2024年因公出国专项工作自查报告
- 2025甘肃省安全员C证考试(专职安全员)题库及答案
评论
0/150
提交评论