2015安徽专升本_VF程序设计基础知识.pdf_第1页
2015安徽专升本_VF程序设计基础知识.pdf_第2页
2015安徽专升本_VF程序设计基础知识.pdf_第3页
2015安徽专升本_VF程序设计基础知识.pdf_第4页
2015安徽专升本_VF程序设计基础知识.pdf_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 1 程序设计基础知识程序设计基础知识 程序是为了完成一项任务而编写的指令的集合, 在某种程度上 vfp 中的程序设计同传 统的程序设计有很大的不同。在 vfp 中可以同时应用面向过程和面向对象两种编程方法, 面向对象的程序设计是其主要特色。一般来说,对于制作简单、较小的应用程序,使用过 程编程方式比较容易,同时这也是面向对象编程方式的基础。本章主要介绍的是面向过程 的编程方法。 4.1 程序设计概念 4.1.1 程序设计与算法简介4.1.1 程序设计与算法简介 程序设计从某种意义上来说, 是根据算法步骤把命令、函数、变量、常量、表达式等 以逻辑的方式组合成程序文件或系统。确定算法和编写程序是两个重要步骤。 算法是指为解决一个问题而采取的方法和步骤,或者说解决步骤的精确描述。算法分 为数值运算算法和非数值运算算法。数值运算算法的目的是计算数值解,如求方程的根, 求函数的定积分等。非数值运算算法,包括的范围很广,常见的办公室自动化系统、管理 领域、商业领域及医学应用等等,主要是描述其解决应用问题的逻辑步骤。 描述实现算法的逻辑步骤,一般采用流程图方式,流程图分传统流程图;n-s 流程图 等。传统流程图是用一些图框,流程线以及文字说明来描述操作过程,这样的表示算法, 直观,形象,容易理解。如图 4.1 和图 4.2: .“起止框”用来表示算法的开始和结束。 “处理框”用来表示一般的数据处理。 “输入/出框”表示输入,输出操作。 “流程线”表示流程的方向(执行方向) 。 “连接点”用于将画在不同地方的线连接起来。 “判断框”用来根据给定条件是否满足,决定执 行两条路径中的某一路径。 拿到一个问题后, 首先拟定并写出算法, 画出结 构流程图,然后再根据算法书写程序,是一个良好的习 惯。这样做不仅可提高所写程序的正确性,也容易修改 程序,提高整个程序设计的效率 4.1.2 源程序实例4.1.2 源程序实例 例:显示”student.dbf”表中“总成绩 “小于 360 的所有学生的学号,姓名,总成绩. 分析问题:逐一判断每条记录的总成绩字段的值是否大于 360,如果大于就显示,否则 不显示.根据分析结果画出结构流程图,如:图 4.2,然后写出源程序如下: set talk off clear open database students use student1 图 4.1 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 2 do while !eof() if 总成绩=360 ? 学号,姓名,总成绩 skip else skip endif enddo close database return 4.1.3程序的创建、编辑和运行4.1.3程序的创建、编辑和运行 vfp6.0源 程 序 文 件 的 扩 展 名 是.prg, 程序运行时,系统自动编译产生扩 展名为.fxp 的文件, 其文件主名与.prg 为 扩展名的文件主名相同, 在 vfp 下若修改 了.prg 为扩展名的文件,系统也会自动重 新编译. 4131 程序文件的创建4131 程序文件的创建 创建 vfp6.0 源程序文件,可使用任何文本 编辑器建立;本系统中使用自身编辑器创建,编 辑源程序文件。vfp 提供了以下三种方法。 方法一方法一 可以在 vfp 主窗口的 “文件“ 菜单中选择“新建“或工具栏中的“新建” 按钮, 选择“程序“ 如图 4-2 所示。然后单击“新建文件” ,这时系统将打开一个编辑窗口,可 图 4-3 编辑文件窗口 图 4-2 新建 文件 n n y n y yn 初始化 打开数据库和表 是 否 表 末 总成 显示,移记录指针移记录指针 结束 图 4.2 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 3 以往里输入程序,如图 4-3 所示。 源程序输完后, 利用文件菜单进行保存。 也可立即利用 【程序】【运行】菜单 和【程序】【编译】菜单,进行编译和运行程序。程序执行结果显示在主窗口中。 方法二方法二在命令窗口中执行命令: modifycommand 这时,系统将打开一个如图 4-3 的编辑窗口,可以往里输入程序代码。编辑完毕,使用 ctrl+w 键,则存盘退出。 方法三方法三在“项目管理器”中选择“代码”选项卡中的程序选项,选择“新建”命令。系 统将打开编辑窗口,可以创建一个程序,如图 4-4 所示。 4132 程序的保存4132 程序的保存 程序输入完毕后,可以选择“文件”菜单中的“保存”项保存程序文件。 若用户要关闭一个没有保存的程序,则会弹出相应的对话框,提示用户是保存还是放弃已 图 4-4 在项目管理器中建立程序 图 4-5 关闭没有保存的程序时将出现询问 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 4 作的修改,如图 4-5 所示。 若用户保存了一个由“项目管理器”创建的程序,则该程序被加入项目中。若用户保存了 一个尚未命名的程序,则会打开“另存为。 。 。 。 ”对话框,用户应该从中选择或输入正确的 盘符、路径、文件名。程序保存后,用户可以在其后任一时刻运行或修改程序。 4133 程序的修改4133 程序的修改 程序的修改即对源程序文件打开进行编辑。有以下方法: 方法一方法一若程序包含在某一个项目中,则可以在“项目管理器“中选定它,并选择“修改” 方法二方法二在“文件”菜单中选择“打开”命令,这时将出现一个包含文件列表的“文件类 型”对话框。从中选择“程序” ,然后找到要编辑修改的程序,选定后单击“确定”按钮, 如图 4-6 所示。 方法三方法三在“命令”窗口中键入如下命令: modifycommand 然后将出现程序文件编辑窗口, 如图 4-3 所示。接下来可对显示在编辑窗口中的程序 进行修改。 4134程序的运行4134程序的运行 程序创建或修改完毕,最终需要运行。运行程序有如下几种方法。 方法一方法一在“程序”菜单中选择“运行”菜单项,然后选择一个程序文件,如图 4-6 方 法方 法 二二 在 命 令窗口中运行命令:do 方法三方法三若程序包含在一个项目中,则可以在“项目管理器”中选定它并选择“运行”命 图 4-6 在打开文件窗口中选定要修改的程序 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 5 令,如图 4-4 所示。 42 常用命令和语句 vfpvfp 的一个特点,是大量使用系统环境设置命令以及其他一些控制命令,以帮助用户 进行数据处理、安全管理、程序调试、结果输出等方面的工作。本节主要介绍一些常用的 命令和语句。 421 基本输入、输出语句421 基本输入、输出语句 程序最基本的操作就是输入、输出。输入是从键盘或鼠标等设备中接收数据。输出 是指将计算机所做的运算结果输出到屏幕或打印机。 4211 输入命令4211 输入命令 1)字符型键盘输入命令 accept 格式:accept to 功能:建立内存变量,并用键盘输入的方式将字符型数据赋值给内存变量。 说明:表示需输入内容的提示信息,是命令执行时显示的内容。一般为字符 型常量,字符型变量或字符型表达式。 表示存储字符数据的字符变量或数组元素。 输入的数据作为字符型数据处理,不需要定界符括起来。若使用定界符,则定界 符成为输入字符的一部分。输入回车健则按空字符处理。 例 11-2输入班级编号和姓名,并打印出来。 accept “请输入班级编号: ”to number accept “请输入姓名: ”to name ?“班级编号: ” ,number,“姓名: ” ,name 2)任意类型键盘输入命令 input 格式:input to 功能: 建立内存变量,并用键盘输入的方式将数值型,字符型,逻辑型或日期型数据 赋值给内存变量。 说明:是命令执行时显示的提示内容。可是一个字符型表达式。 可为数组元素。内存变量不必事先定义。 从键盘输入的数据可以是命令允许的四种类型表达式。 执行该命令时计算键 盘输入的表达式的值,将其赋给内存变量。 字符型常量必须有定界符,且不能单用回车输入。 3)程序暂停,等待接收单字符命令 wait 格式:wait to window at timeout 功能: 显示提示并暂停程序运行,直到按下任意一键或鼠标按键程序才继续执行。 说明: 表示要显示提示的内容, 省略提示, 系统给出 “按任意键继续。 。 。 。 。 。 。 ”。 to表示键盘的输入以字符形式存入指定的内存变量。 内存变量类 型为字符型,宽度为 1。 window表示在 visual foxpro 主窗口右上角出现的系统消息窗口的位置中 显示消息。wait window 支持多行消息。 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 6 at指 visual foxpro 主窗口中消息窗口的位置。 nowait表示在消息被显示后不移去消息窗口,立即继续执行程序。省略时, 程序暂停直到按下一个键或鼠标按钮,并将消息窗口从主窗口中移走。 4212 格式输出命令4212 格式输出命令 格式: saypicturefunction 功能:在指定坐标位置按格式输出表达式的值。 例 11-5在程序编辑窗口输入如下内容 *ex1.prg vb1=49562.89 vb2=-0.5 3,10 sayvb1 function”b” 5,10 sayvb1 function”c” 7,10 sayvb2 function”x” 运行 ex1.prg 结果显示 49562.89 49562.89cr _0.5db 4213 格式输入命令格式输入命令 格式:sayget function picture range, valid readsave 功能:在指定行、列首先显示,接着按规定的格式反显 get 后变量的值; 当执行命令 read 时,子命令 get 被激活,其变量值处于编辑状态。一个 read 语句可 以激活多个在它前面的 get 子命令。 说明: 命令中的功能符和模式符代码及其含义如下表 11-1 和表 11-2 命令的执行过程是,系统先在指定的行列显示 say 后的提示信息,在提示信息 后显示 get 变量的值,此前 get 后的变量必须赋值,且变量值反显,当顺序执行 read 语句后,反显的变量值被激活,此时,可编辑变量的值,按回车键可结束此过程。 一个 read 命令可激活多个 get 的编辑区, 因此, 只要 get 语句是在 read 语 句前,当第一个 get 激活变量值编辑后光标可自动跳到下一个 编辑区,依次执行。 range 中数值表达式 1 和 2,表示数据编辑和显示的下限和上限。 valid表示数据编辑和显示的条件范围。 表 4-1picture 模式符代码表 代码含义代码含义 a只允许字母l只允许逻辑型数据 n只允许字母或数字x允许任何字符 y只允许逻辑数据且小写换大写g只允许数字 允许数字,空格和正负号!小写转换成大写 ¥数值前显示货币符号指定小数点位置 ,分隔多位数数值前显示星号 表 4-2function 功能符代码表 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 7 代码含义代码含义 a只允许字符字母b数值数据在显示区左对齐 c在正数之后显示 cr 表示贷款d使用当前的 setdate 日期格式 e使用欧洲日期格式 dd/mm/yyl数值显示时显示前导,而不是空格 x在负数后面显示 db 表示借贷t去掉表达式首尾空格 s(n)限制字符显示的宽度为 n 个字符z数值为时刻用空格显示 c将负数括在括号内!将小写字母转化成大写字母 用科学计数法显示¥用 set currency 指定货币格式显示 例 4-6指定坐标位置的格式输出例 1。 *exp.prg va1=47612.78 va2=-0.6 4,10 say va1 function “b” 8,10 say va1 function “c” 10,10 say va2 function “x” 将以上程序存盘,并运行。 结果显示: 47612.78 47612.78cr -0.6db 例 4-7 格式输出例 2。 *exp.prg vbr1=space(20) vbr2=0 vbr3=date() var4=.f. clear 4,15 say “编辑字符:” get vbr1 function “s14!” 5,15 say “编辑数字:” get vbr2 picture “999999.99”range 1000,40000 6,15 say “编辑日期:” get vbr3 vlalid vbr3 或 note 2) 行末注释 格式格式 s cancel 例 11-18 设计一个保密口令程序,要求用户使用某个系统时,必须回答口令,该程序口令为“49712” 才能允许进入系统,但最多只允许输入三次,否则,退 foxpro 系统。程序如下: set talk off for i=1 to 3 clear 10,10 say “请输入口令: “ set console off accept to k1 set console on if k1=“49712” wait“欢迎使用本系统! ”timeout 10 exit else wait“口令错,请按任意键后重新输入! ” endif endfor if i3 wait “对不起,你不能使用本系统! “timeout 10 quit endif return 3、循环结构 scan_endscan 对数据表和记录的处理,用 do whileenddo 和 forendfor 循环命令编程时,需要 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 16 编写记录指针的移动和控制移动的多条命令。由于,这两条命令用于操作数据记录的编程 不够理想,效率不高。vfp 提供了 scanendscan 命令,使用该命令编写处理记录的程序 时,不仅形式简练,而且程序执行速度和效率都能得到提高。 格式:scannooptimize scopeforwhile 命令组 loop exit endscan 功能:对当前数据表中符合指定条件的数据记录按照命令组序列进行处理(scan 表 示循环开始,并按指定条件移动记录指针;endscan 表示一次循环结束,使循环返回。 ) 说明: nooptimize 参数禁止扫描 rushmore 优化。若 vfp 使用 rushmore 技术来 优化数据处理。刚技术可以提高其性能。 scope 参数指定扫描范围,只有在范围内的记录才能扫描,扫描范围为 all、 next、record n 和 rest,缺省为 all for exp1 是一个过滤条件,它能够过滤掉不扫描的记录。while exp2 指定条件表 达式,只要其值为真,命令就执行。 loop 使控制直接返回到,放在 scan 和 endscan 之间任意位置,exit 使控制 转向 endscan 后的第一条命令。用法与在 do while 循环结构中使用一样。 例 4-19输出临床医学,学制五年的全体学生的学号,姓名,专业,学制. set talk off clear open database students use student clear scan for 专业= “临床医学”.and. 学制= 五 ? 学号,姓名,专业,学制 endscan close databases cancel 44 数组及其应用 数组是 vfp 中处理数据而采用的一种重要内存变量表达形式。 当处理大批量数据时, 若使用简单变量就不胜其烦,而使用数组就显得相当方便,简洁。数组是将一组排列有序 的,个数有限的变量作为一个整体,用一个统一的名字来表示,这些有序变量的全体称为 数组。如 s(1),s(2),s(50)等称为数组 s,构成数组的成员为数组元素,也称下标变量, 如 s(15),s 为数组名,用园括号括起来的 15 为下标(即序号) ,s(15)是一个数组元素 或数组变量。数组使用时具有以下特点: 一个数组下标变量的作用域和类型与一个简单内存变量一样, 并且都可存放一个数 据,都可被赋值和引用。 数组变量的类型取决最初一次被赋值的类型。vfp 中,不同类型的数据可同时存在 于同一数组中。 数组在内存中以一片连续区域存储,每个数组元素可通过下标来访问;数组元素的 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 17 下标可以是变量,常量,表达式,如 a(4),a(i),a(i+4),且下标必须是整数值。 44. 1数组的创建44. 1数组的创建 vfp 支持一维数组和二维数组, 编程中可用命令 dimension, declare, public 和 local 建立变量数组(或称声明数组变量) ,本书只对前两条命令建立数组作较详细介 绍。 建立数组命令 dimension 和 declare 格式:dimension (,下标 2),(,下标 2) diclare (,下标 2),(,下标 2) 功能:两条命令都是建立一维或二维内存变量数组。 说明: 数组名最长达 254 字符,包含字母,数字及下划线。若只选择数值表达式 1,则 定义数组的一维。次数组为一维数组。若既选择数值表达式 1,有选择数值表达式 2,则数 组的二维下标(或行下标,列下标)数组为二维数组。 数组中的表达式为非整数要取整,下标计算的下界为 1,不能为负数或 0。 数组的维数确定此数组能表示的数组元素个数,元素的个数为:一维数组一般为下 标的最大数 (上界) , 二维数组为行下标与列下标上界的乘积。 如 dimension myarray12,5 即表示拥有 12*5=60 个元素。又如,decelare myarry1(5)表示拥有 5 个数组元素。 在 vfp 中, 每个数组最多可拥有 65000 个元素。 内存是多的情况, 最多可建立 65000 个数组。如 dimension a1(7),ab1(12,3),xy(9) 二维数组中的存储单元按行的次序顺序排列, 因此二维数组也可当作为一维数组去 存取。 44. 2数组变量的赋值和引用数组变量的赋值和引用 用命令定义数组后,数组元素的值一般为逻辑值 f,只有在用赋值命令 store、=或 scatter 命令,对数组元素赋值后,数据的类型确定数组中各元素的类型,因此同一数组 中各数组元素可采用不同的数据类型。 举例:dimension xx(2,3) displaymenmorylike xx 显示:xxpuba (1,1)lf (1,2)lf (1,3)lf (2,1)lf (2,2)lf (2,3)lf 显示表明,数组定义后,没有赋值前,数组元素中的值都是逻辑值 f。 用 store 或=赋值后,各数组单元内容发生了变化,如应用以下命令,可得到: 举例:store”aa”toxx(1,2) store 5 to xx(6) xx(1)=t xx(2,2)=”hello” displaymenmorylike xx 显示: xxpuba (1,1)lt 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 18 (1,2)c“aa” (1,3)lf (2,1)lf (2,2)c“hello” (2,3)n5(5.0000000) 举例:dimensonyy(5) storeotoyy displaymenmory 显示: yypuba (1)no (2)no (3)no (4)no (5)no 此例说明给数组变量赋值时,不指明数组的下标,表明该数组的所有元素赋同一值。 一维数组和二维数组都可重新定义维数,即一维数组可重新定义成二维数组,二维数 组可重新定义为一维数组。 443数组与数据表之间的数据传递:数组与数据表之间的数据传递: 数组和表之间的数据传递 vfp 提供多种方法, 但 scatter 和 gather 命令使用较为 灵活。以下予以介绍。 将数据表中的数据传递给数组的命令 格式:scatter fields to 功能:将当前表文件中当前记录指定的值顺序的传递给数组中各数组元素。 在传递时,从第一字段开始依次向数组中相应次序的元素传递,该元素的类型由响应 字段类型决定。如数组元素的个数比字段个数少,则 scatter 命令先删除该数组,再重建 立一个同名的数组,其元素个数正好等于字段的个数。 将数组中的数据传递给数据表的命令 格式:gather fromfields 功能:将数组中的数据顺序传递给当前表文件当前记录中指定的字段, , 注意,数组与表文件各字段的类型必须一致。备注字段不受本命令的影响,当遇到备 注字段时就越过它处理下一个字段。 例:将 student.dbf 的首记录复制到最末尾。 clearmemory dimearray(10) usestudent scattertoarray listmemory gotobottom append blank gatherfromarray 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 19 4.5 过程和自定义函数 一个大的应用程序往往是由若干个较小的程序模块(称为过程) 、函数等组成,这些 也称为子模块。过程和函数可以将常用代码集中在一起,供应用程序在需要时调用,这样 做提高了程序代码的可读性和可维护性,在需要修改程序时,不必对程序进行多次修改, 而只变动一个过程或函数即可。 451 过程451 过程 4511子程序的概念4511子程序的概念 vfp 中,一个应用程序可以由若干模块组成。各个模块之间存在调用关系。一般把主 调模块成为主程序,将被调模块称为子程序。这些模块可以放在一个。prg 文件中,也可 以放在几个。prg 文件中。其中,主程序和子程序是相对而言的。子程序也可以调用下一 级程序,则该程序相对下一级程序来说,便是主程序。 一个程序调用子程序后,系统就从子程序的第一条命令开始执行。子程序结束后,返 回主程序。 1、子程序可以单独存在于一个.prg 文件中。这时,应注意: 第一,文件名必须以子程序名命名,文件必须放在 主程序同一目录或指定目录下。 第二,子程序可以用以下命令返回结束 格式:returnto master 功能:结束子程序运行,返回上一级调用的主程序命令的下一条命令。 to master 选项,返回最初的程序调用处的下一条命令,如图 4-5-1 所示 * * 主程序 main.prg*子程序 prog1.prg*子程序 prog2.prg 2、子程序也可以放在主调用程序中。这时, 子程序也称为过程。过程是重要的。因为: 第一, 如果子程序都以单独的文件形式存在,则每调用一次子程序都要进行 i/o 操作,影 响应用程序的工作效率。 第二, 系统允许打开的文件数是有限的。 vfp 过程的格式: procedureprocedurename parametervarname , varname 图 4-5-1 子程序调用与返回 。 。 。 do prog2 。 。 。 。 。 。 do prog2 。 。 return 。 。 。 。 return return tomaster 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 20 statement endproc procedure 指明过程的开始,endproc 指明过程的结束。procedurename 指定要创建的 过程名。 过程的命名规则: 1必须以字母或下划线开头,可以包含字母、数字和下划线的任意组合 2过程名的长度小于 255 个字符 parameter 指明过程所需的参数,varname 是形参变量,其作用域仅限于本过程及被调 用过程(由它调用的其它过程)中。 如过程无参数,则 parameter 命令不能在过程中出现;如过程有参数,则 parameter 命令必须紧位于 procedure 命令之后。 过程调用的格式: doprocedurenamewithexp , exp infilename 注:exp 是实参,可以是常量、变量或表达式。in filename 显式指明过程所在的文件 有参过程在调用时,实参与形参均从左依次开始一一传递,实参数目不能超过形参的 数目,多余形参的值为逻辑假值。如果实参数目大于形参数目,将产生错误。 所有常量、表达式的传递均以值引用方式进行,此时形参值的改变不影响实参。而变 量的传递有值引用和地址引用两种方式,默认方式是地址引用方式,既将实参本身的地址 传递给形参,此时形参值的改变将同时引起实参值的改变。在程序设计中,若采用地址引 用方式,可从被调用过程中返回值。如果将实参用括号括住,则强制参数传递以值引用方 式进行。在 vfp 中,也可使用如下命令明确参数传递的方式: setudfparmstoreference | value 注:1.reference 明确指定地址引用方式,value 明确指定值引用方式 2.本命令一经设置就永远有效,直到再次用本命令改变设置为止。 例 4.1:下面的程序说明了过程的用法及参数是如何传递的: *this is a main program*this is a procedure set talk offprocedure proc1 private q1, q2parameter p1, p2 q1 = 1? step 3: p1 = , p1, p2 = , p2 q2 = 2p1 = p1 + 10 ? step 1:q1 = , q1, q2 = , q2p2 = p2 + 10 do proc1 with (q1), q2? step 4:p1 = , p1, p2 = , p2 ? step 2:q1 = , q1, q2 = , q2endproc return 如果过程很多,将所有的过程存放在主调程序中,显得过于繁琐,这时可以定义一个过程 文件。过程文件是一个。prg 文件。过程文件有多个过程连接而成。vfpxitong 规定一个 过程文件中最多存放 1170 个过程。 过程文件的定义 *过程文件名 procedure endproc 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 21 procedure过程 2 endproc procedure 语句系列 n endproc 注意注意过程文件名与过程名是两个概念,一个过程文件中可以存放多个过程。 452自定义函数(udf)452自定义函数(udf) 除系统提供的标准函数外,用户还可以自己定义函数,称为 udf(user define function ) vfp 自定义函数格式如下: functionfunctionname parametervarname , varname statement returnreturnvalue endfunc 自定义函数的命名规则、参数传递方式与过程一样。但有两种调用方式: 1.过程调用方式:在此种方式下,自定义函数等同于过程,其返回值无效 2.系统函数调用方式:自定义函数与系统函数的地位一样,但这时参数的传递方 式只能用命令setudfparmstoreference | value 确定。 例 5.17:下面的程序说明了自定义函数的用法及参数是如何传递的: *this is a main program*this is a user define function set talk offfunction func1 private q1, q2, qparameter p1, p2 q1 = 1? step 4:p1 = , p1, p2 = , p2 q2 = 2p1 = p1 + 10 ? step 1:q1 = , q1, q2 = , q2p2 = p2 + 10 do func1 with (q1), q2? step 5:p1 = , p1, p2 = , p2 ? step 2:q1 = , q1, q2 = , q2return p1 + p2 q=func1(q1, q2)endfunc ? step 3:q1 = , q1, q2 = , q2 return 453变量的作用域453变量的作用域 应用结构化程序设计方法,大大简化了程序设计过程,然而也给变量的使用带来了一些问 题。这主要跟变量的作用范围有关。比如调用程序和被调用程序往往由不同的人编写,而 他们可能使用了相同的变量名,这时就有可能出现问题。例如:计算 1!+3!+5! ,编程 如下: 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 22 下面我们再看一个例子,编写一个程序,从键盘输入 x 的,根据 x 的值计算 y 的值,利用 过程编程如下:运行该程序时,发现执行到 do jisuan 时程序给出 x 变量未定义错误。因 为在前一个子程序 shuru 中定义的变量 x,在执行过程 jisuan 时不再存在。 s=0 for i=1 to 5 step 2 s=s+fun(i) endfor ?“s=“,s return function fun parameter k s=1 for i=1 to k s=s*i endfor ?str(k,1)+“!=“,s return s endfunc 运行结果 1!= 1 4!=24 s=25 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 23 从上面的两个例子可以看出,变量的作用范围有时需要限定在定义它的程序内, 有时 又希望扩大到别的子程序内。这就是变量的作用域问题。 vfp 中,根据变量的作用范围可将变量分为全局变量、私有变量和局部变量。变量的 作用域由关键词 local、private 和 public 指定。 local 定义局部变量,局部变量只能在当前模块或过程中使用,而不能被其它更高层 或更低层的过程调用。当所属程序停止运行时,局部变量或数组被释放。 private 定义私有变量。私有变量在调用程序中将自身隐藏,这样用户就可在当前程 序中可引用和这些变量同名的变量,而不影响这些变量初始值。当调用私有变量的程序段 结束时,所有被声明为私有的变量和数组都可以重新被访问。在一个过程内部定义的未指 明作用域的变量自动成为私有变量。 public 定义全局变量。 全局变量在任何程序中都可被调用和修改, 直到全部程序结束。 命令窗口中创建的变量和数组自动赋予全局变量的属性。 定义变量作用域的格式是: local 变量表/ private 变量表/ public 变量表 注意:全局变量一经说明,则自动建立,其值为.f. ,而私有变量和局部变量则要赋值后 才能建立。 set talk off do shuru do jisuan ? “y=“,y return proc shuru input “请输入 x 的值:“ to x return endproc procjisuan if x=0 y=x+10 else y=x-10 endif return endproc 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 24 应用变量作用域的概念,现可将上述两个程序略加修改,以便得到正确结果。修改如下: 35 4应用举例应用举例 例 11-24 编程实现对数据库 student.dbc 中表文件 student.dbf 进行显示,增加,修 改和删除等操作 *主程序 exm.prg set talkk off set procedure to tzz&打开过程文件 tzz.prg open databasestudent usestudent do while .t. clear 2,10say “对数据表 student 文件的修改” 4,14say “1.显示记录2.增加记录” 6,14say “3.修改记录4.删除记录” 8,14say “5.退出系统” input“请输入菜单功能号(15) : ”to zgh do case case zgh=1 wait“显示记录,按任意键开始! ”windows do zgproc1 wait windows s=0 for i=1 to 5 step 2 s=s+fun(i) endfor ?“s=“,s return function fun parameter k privatei s=1 for i=1 to k s=s*i endfor ?str(k,1)+“!=“,s return s endfunc set talk off do shuru do jisuan ? “y=“,y return proc shuru publicx input “请输入 x 的值:“ to x endproc procjisuan if x=0 y=x+10 else y=x-10 endif endproc 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 25 case zgh=2 wait“增加记录,按任意键开始! ”windows do zgproc2 case zgh=3 wait“修改记录,按任意键开始! ”windows input “请输入要修改的记录号: “ tojh do zgproc3 case zgh=4 wait“删除记录,按任意键开始! ”windows do zgfunc1 case zgh=5 wait“退出系统,按任意键结束! ”windows do zgproc4 otherwise wait“选择有误,请重新选择功能号! ”windows endcase enddo set procedure to return *过程文件 tzz.prg procedure zgproc1 list endproc procedure zgproc2 append endproc procedure zgproc3 parametwr rh change record rh endproc function zgfunc1 input “请输入要删除的记录号” to rh delete record rh endfunc procedure zgproc4 use quit endproc 2015 年安徽省普通高校“专升本”大学计算机复习资料 安徽专升本网 内部资料 26 习题四 4.1执行 vfp 程序有几种方式?能用

温馨提示

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

评论

0/150

提交评论