版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 VFP的结构化程序设计,4.1 程序与程序文件 4.2 程序的基本结构 4.3 模块化程序设计 本章要点,前面各章都是以交互方式,即在命令窗口中逐条输入命令或通过选择菜单来执行Visual FoxPro命令的。除此之外,常常采用程序的方式来完成更为复杂的任务。 VFP程序设计包括结构化程序设计和面向对象程序设计。前者是传统的程序设计方法;后者面向对象,用户界面可利用VFP提供的辅助工具来设计,应用程序可自动生成,但是仍需用户编写一些过程代码。就此而言,结构化程序设计仍是面向对象程序设计的基础。,4.1 程序与程序文件,4.1.1 程序的概念 程序是能够完成一定任务的命令的有序集合。这组
2、命令被存放在称为程序文件或命令文件(以.PRG为扩展名)的文本文件中。当运行程序时,系统会按照一定的次序自动执行包含在程序文件的命令。程序方式的特点: 可以利用编辑器,方便地输入、修改和保护程序。 可以用多种方式、多次运行程序。 可以在一个程序中调用另一个程序。,4.1.2 程序文件的建立与执行,1程序文件的建立与修改 以命令方式建立、编辑程序文件 MODIFY COMMAND | ? MODIFY FILE | ? w存盘 q或者放弃存盘 以菜单方式建立、编辑程序文件,2运行程序文件,(1) 菜单方式 从“程序”菜单中选择“运行”命令,打开“运行”对话框。 从文件列表框中选择要运行的程序文件
3、,并单击“运行”命令按钮。 (2) 命令方式 用命令方式运行程序文件的格式为: DO WITH DO命令默认运行.PRG程序, DO命令中的只需输入主文件名。要运行其它程序,中须包括扩展名。,4.2.2 程序书写规则 1. 命令分行 程序文件中一行只能写一条命令,并且每条命令都以回车键结尾。如果一行中写不下一条命令,需要分行书写的时候,则应该在这一行的结尾处加上续行符“;”,然后按回车键在下一行继续书写这条命令。 2. 命令注释 为了方便阅读和编辑程序,提高程序的可读性,程序员常常需要为程序命令添加一些说明语句,但是这些内容又不作为命令语句来执行,这样的内容就称作命令注释,命令注释以“*”或者
4、“Note”符号开头书写在程序代码的第一行,或者以“Return to master返回主程序。 (2)Cancel命令:Cancel命令也能终止程序的运行,清除其中所有的私有变量,最后返回到命令窗口。 (3)Quit命令:使用Quit命令可以退出VFP系统,并返回到Windows操作系统,该命令与VFP系统“文件”菜单下面的“退出”命令功能相同。,4定位输入输出命令,行,列 SAY PICTURE FUNCTION GET PICTURE FUNCTION DEFAULT WHEN RANGE , VALID READ X=0 10,6 say x get x picture z 999 r
5、ead,功能:从屏幕上指定位置开始显示GET变量的值并可接受输入新值。 说明: GET后面的变量可以是字段变量,但要先打开数据表。 GET后面的变量可以是内存变量,但要先定义(赋初值)。 READ用于激活屏幕,使当前所有的GET能接受输入(修改),不需要修改按回车键。 RANGE 限定变量(C,N)的取值范围,只有在数据修改后才检验 VALID若逻辑表达式的值为.T.或非0,结束本操作;值为1跳到下一域(GET);若值为为.F.或0,返回本域重新输入。VALID 不管数据是否修改都要检验。 WHEN 的条件表达式的值为.F.时,不能修改变量。,模式符仅对相应位置施加作用,常用模式符如下: A:
6、 纯字母 9:纯数字(可含+/-号) N :字母,数字 X:字符 # :数字(可含+/-号及空格) Y :肯定或否定符Y,y,N,n . :小数点 , :数值分节符 ! :小写换大写 功能符对整个数据施加作用,常用功能符如下: A:纯字母 Z:数值为0时显示空白 S(n):限制字符型数据的显示宽度,4.3 程序的基本结构,程序结构是指程序中命令或语句执行的流程结构。程序有三种基本结构:顺序结构、分支选择结构和循环结构。 4.3.1 顺序结构是程序中最简单、最普遍使用的一种基本结构,其特点是按照语句排列的先后顺序依次执行,以上所写程序都是顺序结构。,4.3.2 选择结构分支结构,分支结构是在程序
7、执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。支持选择结构的语句有下面几种: 1IF条件语句 IF ELSE ENDIF,N,Y,输入货物重量,计算该货物的托运费,记费标准每公斤为0.1元,当超过50公斤后,超出数为0.2元。分别用双分支选择及单分支选择编写程序,程序文件名分别为YH1.prg及YH2.prg。 用双分支选择编写YH1.prg程序如下: INPUT 请输入货物重量: TO w IF w=50 f=w*0.1 &货物重量没有超过50公斤时的计算公式 ELSE f=50*01+(w-50)*0.2 &货物重量超过50公斤时的计算公式 ENDIF
8、? 托运费为:,f,用单分支选择编写YH2.prg程序如下: INPUT “请输入货物重量:” TO w IF w50 f=50*01+(w-50)*0.2 ENDIF ? “托运费为:”,f,输入姓名,在XSQK.DBF表中查询该姓名对应的学号、身高及体重,并用定位输出命令输出,程序文件名为ifsay.prg。 USE XSQK ACCEPT “请输入姓名:” TO xm &执行此命令时要输入姓名如:马大大 Locat for 姓名=xm IF .NOT. EOF( ) &当指针没有指到文件末时,表示表中有用户输入的姓名 15,40 SAY “姓名:”+姓名 16,40 SAY “学号:”+
9、学号 15,60 SAY “身高:”+str(身高,6,2) 16,60 SAY “体重:”+str(体重,6) ELSE 15,40 SAY “查无此人!” ENDIF USE,2多分支语句 多分支语句实现一种扩展的选择结构,它可以根据条件从多组命令中选择一组执行。 DO CASE CASE CASE CASE ORTHERWISE ENDCASE,编写一个简单的菜单程序,提供“添加”、“修改”和“打印”三种功能选择并转入相应处理,程序文件名为MCASE.prg。 use jsxx CLEAR text 1.添加 2.修改 3.打印 endtext input 请选择: to op DO C
10、ASE CASE OP=1 APPEND CASE OP=2 BROW CASE OP=3 WAIT “请准备好打印机,按任一键开始” LIST TO PRINT OTHERWISE ? 选择错! ENDCASE USE,4.3.3 循环结构,循环结构也称为重复结构,是指程序在执行的过程中,其中的某段代码被重复执行若干次。 被重复执行的代码段,通常称之为循环体。VisualFoxPro 提供了多种循环结构。 1条件循环 (“当”型) DO WHILE LOOP EXIT ENDDO,Loop子句表示终止本次循环,重新跳转到循环语句的头部,继续判断循环条件是否成立,以决定是否执行下一次循环。Lo
11、op语句可以放在循环体内的任何位置,如果放在循环体的尾部,其作用相当于Enddo语句的作用,这时候Loop语句可以省略不写。 Exit子句表示强行结束循环语句的执行,退出循环体。Exit语句也可以放在循环体内的任何位置。程序执行的时候,一旦遇到Exit语句,就退出该循环语句,跳转执行Enddo后面的语句。,2步长循环 FOR = TO STEP ENDFOR | NEXT 该语句通常用于实现已知循环次数情况下的循环结构。执行该语句时,首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,循环条件为“循环变量 = 终值”)。 若循环条件成立,则执行循环体,然后循环变量增加一个步长值,并
12、再次判断循环条件是否成立,以确定是否再次执行循环体。若循环条件不成立,则结束该循环语句,执行ENDFOR后面的语句。,Clear S=0 For n=2 to 100 step 2 S=s+n Endfor ? 1100的偶数和,s Return,3表文件扫描循环 SCAN FOR WHILE ENDSCAN 该循环语句可以对内满足的记录执行。默认情况下的值为All。 该循环语句一般用于处理表中记录。语句可指明需处理的记录范围及应满足的条件。执行该语句时,记录指针在当前表的指定范围内自动、从上往下依次移到满足条件的记录上,并对每一条记录执行循环体内的命令。, For子句用于指定一个作为执行命令
13、的条件,如果的值为真,则执行后面的命令,如果的值为假,则返回循环初始位置重新判断,继续查找下一个满足条件的记录,直到搜索完内的最后一条记录,Scan循环语句才执行完毕。 While子句用于指定一个作为执行命令的条件。如果的值为真,则执行后面的命令,但是与For子句不同的是,当的值为假的时候,就会终止循环,并跳出循环体直接执行Endscan后面的语句。 Loop子句表示重新开始新的循环,Exit子句表示终止循环并退出循环体,在前面已经详细论述,在此不再重复。,4. 多重循环 一个循环的循环体中又有另外一个循环时,称为多重循环,VFP程序可以使用多重循环。 5 三种循环的比较,4.4 模块化程序设
14、计,模块是一个具有独立功能的程序,可以单独设计、调试和管理。将一个应用程序系统划分成一个个功能相对简单,单一的模块程序,不仅便于程序的开发,也利于程序的阅读和维护。 一个应用程序系统的设计就是设计组成该系统的各个模块,并把这些模块组合起来的过程。模块可以是普通的命令文件,也可以是函数和过程。,4.5 多模块程序 1. 子程序调用 子程序是以独立的程序文件形式储存在磁盘上的一个程序(扩展名为.prg),它的建立和编辑都与一般程序相同,但是在子程序中必须至少有一个返回语句,以便子程序在执行到返回语句时能返回到调用它的主程序中。 (1)格式: Do Return |To ,(2)功能:Do 是在主程
15、序中调用子程序的命令格式;Return子句是子程序中的返回执行结果的语句。当子程序执行遇到返回语句时,结束该子程序的运行,并返回到调用它的主程序中,继续执行主程序中调用子程序命令后面的语句。 其中用于指定返回给主程序的表达式,省略Return命令或者省略返回表达式则表示返回值为.T.。To子句表示将子程序的值返回给指定的程序文件。,2. 子程序的嵌套 主程序与子程序的概念是相对而言的,子程序既可以被主程序调用,也可以调用其他的子程序,这时候的子程序又充当起主程序的角色,如此形成的嵌套调用方式称作子程序的嵌套,VFP系统中的程序允许最多可以嵌套128级。子程序的返回命令因为包含嵌套关系而引出了其
16、他新的返回方法,如Return To Master。,(1)格式: Do Return|To |To Master (2)功能:Do 是在主程序中调用子程序的命令格式;Return子句是子程序中的返回执行结果的语句,其执行原理与上述介绍相同。而To Master子句则表示子程序在返回的时候会直接返回到最外层次的主程序中,而不是返回到调用它的上一级程序。,3. 带参数的子程序调用(4.7节) 在程序设计中,有时候需要将不同的参数分别传递给同一个子程序,执行同一功能的操作后返回不同的执行结果,这样的涉及参数传递的子程序调用称作带参数的子程序调用,VFP中的参数接收语句为Parameters,它具有
17、接收参数和回送参数的作用。值得注意的是,参数的传递与接收必须是一一对应的,否则很容易出错。,(1)格式: Do With Parameters &prmits Return |To (2)功能:Do With是在主程序中调用子程序并传递参数的命令格式;Parameters子句是在子程序中接收参数的语句;Return子句是子程序中的返回执行结果的语句,其执行原理与上述介绍相同。,4.6 过程与过程文件 “过程”与“子程序”基本相同,都是一段可以实现某种特定功能的程序代码。两者的区别是:“子程序”代码必须储存在一个独立于主程序的程序文件中;而“过程”代码则既可以和主程序代码编写于同一个程序文件中,
18、又可以像“子程序”代码那样储存在一个独立于主程序的程序文件中。过程在被调用之前,必须使用Procedure命令进行定义。,独立储存着“过程”代码的程序文件称作过程文件(扩展名也为.prg),它的建立和编辑方法与一般的程序文件相同。过程文件中可以只包含一个过程,完成一种功能;也可以包含多个过程,完成多种功能。过程文件中最多可以包含128个过程,过程文件在被调用的时候,会把所有的过程都调入内存中,方便主程序的调用,从而大大提高了程序执行的速度。,(1)格式: Do WithIn Procedure &prsi:d Parameters Return |To Endproc,(2)功能:如果“主程序
19、”代码和“过程”代码编写在同一个程序文件中,则使用Do With命令就可以调用过程并传递参数;如果“主程序”代码和“过程”代码分别保存在两个独立的程序文件中,则必须需要使用In子句来指定要调用的过程所在的过程文件。 Procedure子句是定义过程的开始标志,过程定义结束后应该要有Endproc子句与其对应。Parameters子句是在过程中接收参数的语句;Return子句是在过程中返回执行结果的语句,其执行原理与上述介绍相同。,4.7 参数传递,模块程序可以接收调用程序传递过来的参数,并能够根据收到的参数控制程序流程和对接收到的参数进行处理。 接收参数的命令有: PARAMETERS , L
20、PARAMETERS , PARAMETERS命令声明的形参变量被看作是模块程序中建立的私有变量,LPARAMETERS命令声明的形参变量被看作是模块程序中建立的局部变量。除此之外,两条命令没有什么不同。 不管是PARAMETERS命令还是LPARAMETERS命令,都应该是模块程序的第一条可执行命令。,格式1:DO WITH , 格式2: (,) 实参可以是常量、变量,也可以是一般形式的表达式。形参的数目不能少于实参的数目。如果形参的数目多于实参的数目,那么多余的形参取初值逻辑假.F.。 采用格式1调用模块程序时如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋值给相应的形参
21、变量。这种情形称为按值传递。如果实参是变量,那么传递的是变量的地址。这种情形称为按引用传递。 采用格式2调用模块程序时,默认情况下都以按值方式传递参数。如果实参是变量,可以通过命令SET UDFPARMS命令重新设置参数传递的方式。该命令的格式如下: SET UDFPARMS TO VALUE|REFERENCE,用户自定义函数,在VFP中,函数包括系统函数和自定义函数两大类,自定义函数则与前面介绍的过程一样,既可以和主程序代码编写于同一个程序文件中,又可以储存在一个独立于主程序的程序文件中。自定义函数必须使用Function命令进行定义,函数定义完毕后应该要有Endfunc子句与其对应。,FUNCTION PARAMETERS RETURN endfunc,(2)功能:自定义一个函数,函数名由子句来指定。注意:自定义函数的函数名既不能和VFP的系统函数同名,也不能和内存变量同名。Parameters子句是在自定义函数中接收参数的语句;Return子句是在自定义函数中返回执行结果的语句,其执行原理与上述介绍相同。 值得注意的是,在主程序中调用自定义函数的时候,不再使用前面介绍的Do命令。而是当主程序在执行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024货物赊欠买卖合同样本范文
- 物业保洁承包合同
- 个人借款合同参考
- 2024不可撤销居间合同
- 2024年商业用途日照房屋租赁合同
- 建筑安装分包合同
- 2024的厂房转让合同范文
- 2024承包施工合同范文
- 2024车辆承包经营合同书雇用车辆合同书
- 2024标准版商务咨询服务合同模板
- 水泵试运行记录表
- 三支一扶 政策介绍
- 双减背景下的作业设计与实施优秀案例PPT
- 井下充填工岗位职责(共4篇)
- 重要环境因素清单及控制措施表
- 五年级上册心理健康教育课件-学会合作 全国通用(共20张PPT)
- 一级二级三级医养结合机构服务质量评价标准(试行)
- 秦皇岛新绎旅游祖山景区新媒体矩阵运营方案
- [QC成果]高速公路路基工程隧道二次衬砌外观质量控制
- 团旗、团徽、团歌课件
- 微观经济学英文版课件
评论
0/150
提交评论