版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、讲师:徐红波 E-mail: x_h_,Visual FoxPro程序设计教程,第5章 程序设计基础,VFP的工作方式: 1)交互式工作方式是直接在命令窗口中执行命令或用菜单及工具栏按钮执行命令。 2)自动化工作方式是用编写的程序或用各种生成器生成程序文件再执行。,5.1 程序文件的建立、修改、执行5.1.1 程序,程序是能够完成一定任务的命令集合。程序文件的扩展名为prg。,5.1.2 程序文件的建立和修改,1)用界面方式建立和修改程序 2)用命令方式建立和修改程序 格式:MODIFY COMMAND |? 功能:打开程序编辑器,用于建立或修改程序文件,5.1.3 程序文件的执行,1)用界面
2、方式执行程序文件 2)用命令方式执行程序文件 格式:DO 功能:执行指定的程序,5.1.4 程序的书写规则,一个程序是由若干行组成,每行由回车键结束 1)命令行:一个命令可以写在一行也可以分多行书写,分行书写时应该在行尾加续行符“;” 2)命令的注释:注释符有 where 学生.姓名=name and 学生成绩.学号=学生.学号 close database all return,2)ACCEPT命令 格式:ACCEPT TO 功能:从键盘输入字符串数据,赋给内存变量 说明: 1)为提示信息。 2)输入的字符串不需加定界符,否则会将定界符作为字符串的一部分。 3)若不输入数据直接按回车键,将空
3、串赋给变量。,3、WAIT命令 格式:WAIT TO WINDOW AT NOWAIT CLEAR|NOCLEAR TIMEOUT 功能:暂停程序运行,字符表达式为提示信息,待从键盘输入一个字符赋给内存变量,程序继续执行。 说明: 1)省略,则显示默认信息,按任意键继续。 2)对于TO ,若直接回车,变量中内容为空串,省略此项,输入字符不保存。 3)WINDOW AT 设置信息窗口在屏幕上的位置,省略AT 信息将显示在屏幕的右上角。 4)NOWAIT不等待输入直接往下执行。 5)CLEAR清除提示信息窗口,NOCLEAR不清除提示信息窗口,直到执行一条WAIT WINDOW命令或WAIT CL
4、EAR命令为止。 6)TIMEOUT由数值表达式指定等待输入的秒数。若超出秒数,则不等待自动往下执行。,例5.3 WAIT的应用,wait 继续? to x window time 10,5.2.2 输出命令,格式: SAY GET DEFAULT 功能:在屏幕指定行列输出表达式的值并修改内存变量的值。 说明: 1)中行自上而下编号,列自左至右编号,编号从0开始,行列可以使用小数精确定位。 2)省略SAY选项,GET变量值在行列指定位置开始显示。若选SAY选项,先显示表达式的值,然后再显示GET变量值。 3)GET中的变量必须有初值或用DEFAULT中的命令定值。 4)GET选项必须用READ
5、命令激活。,例5.4 查找学生成绩大于等于指定成绩的或数学大于等于指定分数的学生学号,姓名,入学成绩,数学成绩。,clear open database 学生 10, 10 say 输入入学成绩: get rxcj default 0 10, 10 say 输入数学分数: get sxfs default 0 read 10, 10 say 入学成绩为+str(rxcj)+“ 数学为 +str(sxfs) select 学生.学号, 学生.姓名, 学生.入学成绩, 学生成绩.数学; from 学生, 学生成绩 where 学生.入学成绩 = rxcj and 学生成绩.数学 = sxfs; a
6、nd 学生.学号=学生成绩.学号 close database all return,5.3 程序的基本结构,程序设计一般采用顺序,条件,循环这三种基本结构,这三种结构贯穿于整个程序的设计中。,5.3.1 三种基本结构,1)顺序结构:程序是按语句排列的先后顺序来执行。 2)选择结构:条件为真执行一部分语句,否则执行另一部分语句。 3)循环结构:当条件为真执行循环体,否则结束循环。,5.3.2 顺序结构程序设计,例5.7 求圆面积 s=0 r=0 input 输入r: to r s=3.14*r*r ? s=, s return,5.3.3 选择结构程序设计,1、二分支选择结构 格式:IF EL
7、SE ENDIF 功能:当条件成立时执行命令序列1,否则执行命令序列2。当不包含ELSE时,条件成立执行命令序列1,否则执行ENDIF后的语句。 说明:IF和ENDIF必须成对出现,此语句可以嵌套使用,条件是逻辑表达式,例5.8 当r=0时计算圆面积否则输出不合题意,set talk off s=0 r=0 input 输入r: to r if r0 s=pi( )*r*r ?s=, s else ?r0不合题意! endif ?程序结束 return,例5.9 输入学号,在学生表中查询学生姓名,学生入学成绩,若没有找到,输出无此学生,clear open database 学生 use 学生
8、 input 输入学号: to xh locate for 学号=xh if found() ? 学号:+学号+space(2)+姓名:+姓名+ space(2)+str(入学成绩, 3) else ? 无此学生 endif close database all return,2、多分支选择结构 格式: DO CASE CASE CASE OTHERWISE ENDCASE 功能:依次判断条件是否成立,若某个条件成立,则执行对应的语句序列,然后执行ENDCASE的后面语句,若所有条件都不成立,就执行OTHERWISE语句序列n+1。 说明:1)条件为逻辑表达式。 2)DO CASE与ENDCA
9、SE 必须成对出现。,例5.10 输入学生姓名,成绩,给出成绩的等级,成绩为百分制,成绩的等级情况为90-100为优秀,70-89为良好,60-69为及格,0-59为不及格,name=“” number=0 grade= input 输入学生姓名: to name input 输入学生成绩: to number do case case number=90 and number=70 and number=60 and number=0 and number=59 grade=不及格 otherwise grade=输入错误 endcase ?name, number, grade retur
10、n,5.3.4 循环结构程序设计,VFP有三种循环结构,它们是DO WHILE, FOR, SCAN。 1、DO WHILE循环 格式: DO WHILE LOOP EXIT ENDDO 功能: 1)当条件成立时执行DO WHILE与END DO之间的命令,这些命令称为循环体。 2)程序执行到END DO时自动返回到WHILE 处重新判断条件是否成立,以决定是否循环。 3)当条件不成立时,结束循环,执行END DO下面命令。 说明: 1)DO While与END DO必须成对出现。 2)执行LOOP命令时结束本次循环,自动返回DO WHILE处重新判断循环条件。 3)遇到EXIT命令时结束循环
11、,执行END DO下面命令。,例5.11 求1+2+3+100的值,sum=0 n=1 do while n=100 sum=sum+n n=n+1 enddo ? s=, s return,例5.12 对 100个任意数求和,正数求和,负数不求和,当输入0.001时停止输入,sum=0 n=1 do while n=100 input x: to x n=n+1 if x0 loop endif if x=0.0001 exit endif sum=sum+x enddo ?“sum=, sum return,2、FOR 循环 格式:FOR = TO STEP ENDFOR | EXIT 功
12、能:先把初值赋给循环变量,再判断循环条件是否成立。若不成立就结束循环,执行循环后面的命令,若条件成立,就执行循环体,循环再执行一此,循环变量自动增加一个步长。再判断循环变量是否成立,以判断是否执行循环体。 说明: 1)循环变量为内存变量,初值,终值,步长为数值表达式。 2)当步长为0时循环变量无增量,将死循环,步长默认值为1。 3)在循环体内可以改变循环变量,但这会改变循环次数。 4)在循环体内可以包括,LOOP和EXIT。当遇到LOOP时,本次循环结束,循环变量增加一个步长值,进入下一次循环,当遇到EXIT时,结束循环,执行下面的命令。,例5.13 求1+2+n,sum=0 input 输入
13、n: to n for i=1 to n sum=sum+i endfor ? s=, s return,3、 SCAN循环 格式:SCAN FOR WHILE ENDSCAN 功能:在当前表的指定范围内记录指针自动移到满足条件1或条件2的记录上,执行循环体,然后再将记录指针自动移动到下一个满足条件1或条件2的记录上再一次执行循环体直至超出范围。默认范围为表中所有记录。 说明:1)循环体内可包含LOOP与EXIT命令,当遇到LOOP命令时,结束本次循环返回到SCAN处进入下一次循环。当遇到EXIT时,结束循环,执行ENDSCAN后面的命令 。,例5.14 逐条显示学生表中入学成绩大于等于490
14、分的学生的学号,姓名,入学成绩,并统计人数,clear n=0 open database 学生 use 学生 scan for 入学成绩=490 dispplay 学号,姓名,入学成绩 n=n+1 endscan close database all ? n=, n return,4、循环的嵌套:在循环命令的循环体中包含了其他循环。循环嵌套就是指多重循环。 例5.15 输出乘法表: for i=1 to 9 for j=1 to i ?str(j, 2)+*+str(i, 2)+spac(2)+=+str(i*j, 3) endfor ? endfor return,5.4 多模块程序结构,
15、多模块程序结构是将一个大的程序划分为一个主调程序和几个被调程序。将主调程序称为主程序模块,被调程序称为子程序模块。由于子程序模块可以多次被调用又可以相互调用,提高代码的重用率,也便于软件修改与维护。VFP实现子程序模块有三种方式:子程序、过程、自定义函数。三者主要区别:子程序无返回值,而过程和自定义函数有返回值。,5.4.1 子程序、过程、自定义函数,一、子程序 1)定义:子程序是一个程序文件,它与主程序的主要区别:主程序只能调用其他程序而不能被其他程序调用,子程序既能被主程序调用也能被其他子程序调用。 2)格式: PARAMETERS RETURN 3)说明:PARAMETERS 中的形参用
16、于接收DO命令发送的实参值。当返回调用程序时把这些形参值回送给相应的实参变量。多个形参之间用逗号隔开。,4)调用 格式:DO WITH 功能:调用由文件名指定的程序。 说明: (1)实参表中实参是传给子程序的,实参可为常量,变量,表达式。若实参个数少于形参个数,多余的形参值取逻辑假。若实参个数多于形参个数,系统提示错误信息。 (2)实参为常量或一般表达式时,系统将其值传给对应形参变量,称为值传递。若实参为变量,此时形参与实参实际上是同一个变量,称为地址传递或引用传递。,5)调用过程。 主程序 子程序 DO 子程序 RETURN,例5.16 用主程序与子程序方式求长方形的面积,请用传参数和不传参
17、数两种方式,不传参数 clear do CZ1 return * CZ1.prg x=0 y=0 s=0 input 输入长: to x Input 输入宽:“ to y s=x*y ?s=, s return,传参数 x=0 y=0 s=0 input 输入长: to x input 输入宽: to y do CZ2 with x, y, s ?s=, s return * CZ2.prg parameters a, b, c c=a*b return,二、过程 1)概念:过程和子程序的作用基本是一样的,调用关系也相同,主要区别:过程可以和主程序存在同一个文件中,也可以一个或多个过程存在一个
18、文件中,而一个文件只能有一个子程序,多个子程序要存在多个文件中。子程序可直接调用,而过程如果与主调程序存在一个文件中,可直接调用,如果未与主调程序存在一个文件中,必须通过打开过程文件才可以调用。使用完再将过程文件关闭。子程序无返回值,过程有返回值。,2)格式: PROCEDURE PARAMETERS RETURN ENDPROC 说明: 1)RETURN 子句作用是返回表达式的值,若只有RETURN将返回逻辑真。若无此子句,过程结果时自动执行一条隐含的RETURN命令。 2)ENDPROC子句表示过程结束,一般可不选。 3)过程与子程序一样可以嵌套调用。,3)过程文件的打开 格式:SET P
19、ROVEDURE TO ADDITIVE 功能:打开由过程文件名列表指定的过程文件,过程名列表是用逗号分隔的过程文件名。 说明: (1)无任何选项将关闭所有打开的过程文件。 (2)选ADDITIVE,在新打开过程文件时并不关闭原来打开的过程文件。 4)关闭过程文件 格式1:RELEASE PROCEDURE 格式2:CLOSE PROCEDURE 功能:格式1用于关闭过程文件列表中过程文件,格式2用于关闭所有过程文件 5)过程的调用 格式1: DO WITH 格式2:() 功能:格式1调用由指定的过程。格式2不用传递参数直接调用,例5.17 求长方形面积。用主程序与过程在一个文件做,再用主程序
20、与过程不在一个文件做。再用调用格式2做,主程序与过程在一个文件中 x=0 y=0 s=0 input 输入x:“ to x input 输入y: to y do p1 with x, y, s ?s=, s return procedure p1 PARAMETERS a, b, c c=a*b return,主程序与过程不在一个文件中 set procedure to f1 x=0 y=0 s=0 input 输入x:“ to x input 输入y: to y do p1 with x, y, s ?s=, s close procedure Return *f1.prg procedur
21、e p1 parameters a, b, c c=a*b return input 输入x: To x input 输入y: To y s=x*y return s,调用格式2 x=0 y=0 s=0 s=p1() ? s=,s return procedure p1 input 输入x:“ to x input 输入y:“ to y s=x*y return s,例5.18 传递数组的应用,clear dimension a(5) for i=1 to 5 a(i)=i endfor s=0 do p1 with a, s for i=1 to 5 ?a(i), space(2) endf
22、or ?s=, s return proceudre p1 parameters b, s for i=1 to 5 b(i)=2*b(i) s=s+b(i) endfor return,三、自定义函数 1)概念:函数与子程序,过程一样,是独立子模块,调用关系也相同,它的程序段要和主调程序在同一文件中,它的调用与标准函数相同。它可以进行参数传递,可以有返回值 2)格式 FUNCTION PARAMETERS RETURN ENDFUNC 说明: (1)RETURN 子句是返回函数的值,若无表达式,RETURN返回逻辑真 (2)若不选RETURN 子句,在函数结束处自动执行一条隐含的RETURN
23、命令 (3)ENDFUNC表示函数的结束,一般不用 3)调用 格式:函数名() 功能:调用由函数名指定的自定义函数,例5.19 求长方形的面积,clear x=0 y=0 s=0 input 输入x: to x input 输入y: to y s=f(x, y) ?s=, s return function f parameters a, b c=a*b return c,5.4.2 变量的作用域,变量的作用域是变量在程序中的有效区域。在多模块程序结构模块中定义的变量不一定在另一个模块中有效。按变量的作用域将变量分为公有(public)变量,私有(private)变量,局部(local)变量三种。 公有变量是在任何模块中都能使用的变量,即它的有效区域是整个程序,它必须是先经过public定义为公有才能使用。 私有变量是在本模块及下属各层模块中有效,凡是没有经过public与local定义的或用private定义的变量都是私有变量。 局部变量的有效区域只限于本模块,用local 定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业示范温室大棚安装协议
- 儿童玩具设计总监聘任合同
- 厂房水电施工合同:印刷业篇
- 演出器材租赁合同
- 生态农业园绿化施工合同
- 建筑公司项目经理聘请协议
- 知识产权保护合同规范
- 图书馆资料储存分类方法
- 煤矿安全监查员工作规范
- 旅游景点设施管理
- 1D4 10kV避雷器试验报告
- 中小学教师信息技术培训
- 国家基本公共卫生服务项目培训课件
- 工程图学习题集答案合工大课件
- 2023年江苏省沿海开发集团有限公司校园招聘笔试模拟试题及答案解析
- 压花制作(观赏植物学)课件
- 《夏商周考古》第5章西周文化(4-6节)
- 惠普的管理流程-详细解读
- T-CIATCM 008-2019 中医药卫生经济信息标准体系表
- 地下车库给排水及管线综合设计要求
- 2022年安全员上岗证继续教育考试答案
评论
0/150
提交评论