




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 五 章VFP程序设计根底VFP 程序设计言语概述面向过程程序设计(构造化程序设计)面向对象程序设计终了放映?YES(是)NO(否) VFP提供了一整套的程序设计言语,供用户进展运用程序开发。 这些言语可以在命令窗口、程序设计、表单事件中运用。 在命令窗口仅是了解或了解各种命令的功能及语法,但有些命令在窗口中是不能运用的。 在程序设计、表单事件中运用,才干到达某种要求。 程序设计方法程序设计方法面向过程的程序设计构造化程序设计程序由三种根本构造组成,程序按照开发者规定的流程进展。面向对象的程序设计从运用程序开发者的角度来看,不再着重于代码的全部流程,而主要思索建立对象和赋予对象怎样的特征与行
2、为。从用户的角度来看,运算的顺序不是按运用程序开发者在设计时规定好的流程进展,而是根据用户的需求进展。构造化程序设计的概念 在程序设计方法学中,构造化程序设计是程序设计的根本方法。所谓构造化程序设计,通常是指用构造化编程语句来编写程序。其根本思想是逐渐求精、模块化,其程序控制的根本构造是顺序、分支(选择)、循环,程序的流程由程序员控制,程序设计相对简单。构造化程序设计是面向对象程序设计的根底。本节主要引见程序的创建和保管、程序的运转及其构造化语句、过程和用户自定义函数。 面向对象程序设计是一种系统化的程序设计方法,允许笼统化、模块化的分层构造。 面向对象的程序设计是经过对类、子类和对象等的设计
3、来表达的。利用类可以简化程序设计,提高程序代码的可重用性。经过类之所以可以简化运用程序的设计,是由于类具有承继性、多态性、封装性、笼统性等特点。面向对象的程序设计概述创建程序方法之一:“工程管理器-“代码选项卡-“程序项-“新建按钮方法之二:主菜单的“文件-“新建命令-“程序项-“新建文件按钮方法之三:常用工具栏“新建按钮-“程序项-“新建文件按钮方法之四:命令窗口:MODIFY COMMAND 程序名留意:1、只需方法之一,新建的程序在“工程管理器中能见到,其他三种方法都不见到,必需在“工程管理器中用“添加按钮,才干参与在“工程管理器中。2、 创建程序后,留意保管文件:主菜单的“文件-“保管
4、命令3、 扩展名为:.PRG输入以下程序段,看执行的结果是什么CLEARNEWNUM=0FOR I=1 TO 100 NEWNUM=NEWNUM+IENDFOR? NEWNUM另一程序为:CLEARNEWNUM=0FOR I=1 TO 9 ? FOR J=1 TO 9 ?STR(I,2)+*+STR(J,1)+=+STR(I*J,2) ENDFORENDFOR修正程序修正程序前,要翻开指定的程序,其方法:方法之一:“工程管理器-“代码选项卡-“程序项-选定要修正的程序- “修正按钮方法之二:主菜单的“文件-“翻开命令-在对话框中选定要修正的程序-“确定按钮方法之三:常用工具栏“翻开按钮-选定要
5、程序的程序- “确定按钮方法之四:命令窗口:MODIFY COMMAND 程序名/? 运转程序方法之一:“工程管理器-选定要执行的程序序-“运转按钮常用工具栏的“运转按钮方法之二:命令窗口:DO 程序名.PRG 面向过程程序设计 (构造化程序设计)程序的根本构造 顺序构造、分支(选择)构造、循环构造 例题分析过程和用户自定义函数(UDF)过程和用户自定义函数过程和用户自定义函数的概念UDF的创建、保管和调用参数传送的两种方式过程和用户自定义函数(UDF)的概念 用户自定义函数扩展了VFP言语,经过定义UDF来为本人的运用程序建立一些公用函数。UDF包括保管在独立程序文件.PRG中、程序中的过程
6、和函数、以及数据库的存储过程中。在VFP中,过程和函数的区别不大。 为了创建一个过程或函数,需求运用PROCEDURE或FUNCTION命令给过程或函数赋予一个过程名或函数名,其后可是恣意条数的其他语句,以实现特定的功能。UDF的创建过程的定义如下: PROCEDURE 过程名 PARAMETERS 参数表 语句组 RETURN 表达式ENDPROCUDF的创建函数的定义如下:FUNCTION 函数名 PARAMETERS 参数表 语句组 RETURN 表达式ENDFUNC 为了使一个UDF可以接受一定的参数,在PROCEDURE或FUNCTION命令后面的第一个可执行语句必需是PARAMET
7、ERS语句。语法如下: PARAMETERS ParameterList参数ParameterList指定接纳数据的内存变量或数组的列表。其中的参数运用逗号分隔。最多可传送27个参数。 例如: PROCEDURE myudf PARAMETERS p1,p2,p3 语句组 ENDPROC UDF的参数 RETURN语句前往一个值给调用程序。省略了RETURN语句的UDF,其缺省的前往值为真(.T.)。 函数的前往值可以直接打印在活动窗口中,也可以用一个变量接纳下来。如: var=myfunc()UDF的前往值UDF的保管UDF的保管将一个自定义函数以独立文件保管文件名应与函数名同名 例题分析保
8、管在一个程序文件的最后 例题作为过程文件将几个函数保管在一个文件中。例题存储在数据库当中,作为数据库的存储过程例题:求1到10的阶乘的和CLEARnResult=0FOR n=1 TO 10nResult=nResult+jc(n)ENDFOR?nResult*以下部分为自定义函数FUNCTION JC PARAMETERS num &传送一个数值参数num,前往num的阶乘s=1FOR n =1 TO nums=s*nENDFORRETURN s例题:*自定义函数JC()用于计算阶乘FUNCTION jcPARAMETERS num&传送一个数值参数num,前往num的阶乘s=1FOR n
9、=1 TO nums=s*nENDFORRETURN s*自定义函数LJH()用于计算累加和FUNCTION ljh PARAMETERS num&传送一个数值参数num,前往num的累加和s=0FOR n =1 TO nums=s+nENDFORRETURN s 调用一个过程,可以运用DO命令;调用一个函数,那么与VFP中的规范函数的调用完全一样,可直接用该函数的称号和随后的一对括号来调用。如: DO myprocIN ProgramNameWITH ParameterList =myfunc(ParameterList)例如:DO Myudf WITH tp1,tp2,tp3Myudftp
10、1,tp2,tp3UDF的调用UDF的调用UDF的调用 假设过程或函数存在于单独的程序文件中,那么可以运用SET PROCEDURE TO命令访问它们。例如,保管过程或函数的文件名为PROCS.PRG,可运用如下命令来访问它们: SET PROCEDURE TO procs.prg参数传送的两种方式 有两种方式将参数传送给UDF:按援用传送方式和按值传送方式。 按援用Reference传送方式是将作为参数的变量和数组元素的地址传送给UDF,当一个值在被调用过程中更改时,新值传送回调用程序中相关的变量或数组。 按值Value传送方式是把变量和数组元素的值直接传送给UDF,当UDF中参数的值发生变
11、化时,原来的变量或数组元素的值不变化。系统默许情况下,系统经过值将参数传送给自定义函数,经过援用将参数传送给过程。在调用之前可以运用SET UDFPARMS TO REFERENCE |VALUE命令来改动参数传送的方式。强迫设定一种传送方法:用括号括起一个变量,那么设定按值传送;在变量之前加符号,设定以援用传送方式。 例题FUNCTION plu para a a=a+1Return aSet udfparams to valueStore 1 to gnz?plu (gnz),gnzSet udfparams to refeStore 1 to gnz?plu(gnz),gnz按值传送按地
12、址传送Store 1 to gnz?plu (gnz),gnzStore 1 to gnz?plu (gnz),gnz 定义一个函数ntoc(),当传送给一个09之间的阿拉伯数字时,前往一个中文的“零九。在命令窗口中执行MODIFY COMMAND ntoc命令,在编辑窗口中输入如下代码: FUNCTION ntoc PARAMETERS pDigit LOCAL cString cString=零一二三四五六七八九 return substr(cString, pDigit*2+1, 2) ENDFUNC 可以把该函数保管为独立的程序文件ntoc.prg。以下是对该函数的调用: ? ntoc
13、(3)& 显示“三UDF的例题分析例:把普通的日期改写成汉语字符方式function dtocc para dedate cyear=str(year(dedate),4)+年 cmonth=str(month(dedate),2)+月 cday=str(day(dedate),2)+日 retu cyear-cmonth-cdayendfunc UDF的例题分析程序的创建和保管 VFP程序是包含一系列命令的文本文件。可以运用菜单或工具栏中的“新建命令或在命令窗口中执行如下命令来创建程序: MODIFY COMMAND 或 MODIFY COMMAND 运转程序 程序创建之后便可运转。方法有:
14、 1.假设程序包含在一个工程中,那么在“工程管理器中选定它并选择“运转命令。 2.在“程序菜单中选择“运转菜单项。在程序列表中,选择想要运转的程序,单击“运转按钮。 3.在“命令窗口中,按如下方式键入DO命令以及要运转的程序名: DO 4.在程序的编辑窗口翻开的情况下,按组合键【Ctrl+E】。顺序(sequential) 顺序构造是指一组命令按照特定的次序存放在程序文件中,程序运转时,依次执行程序中的各条命令行。例如:USE JSAPPEND BLANKEDITUSE例题分析例1: 知圆的半径,求圆的周长和面积。 R=5 S=2*R*3.14159 AREA=R*2*3.14159 ? 圆的
15、周长为,S ? 圆的面积,AREA例2: 将A,B中的数对调。 A=5 B=10 C=A A=B B=C ? A,B顺序构造例题分析条件分支(conditional branching) 条件分支构造用于程序中根据条件的测试结果执行不同的运算。 VFP中有两条命令实现条件分支: IFELSEENDIF DO CASEENDCASE 在VFP中还可运用IIF()函数实现条件分支。IFELSEENDIF语句语句格式:IF 条件表达式命令组1ELSE命令组2 ENDIF 该语句指定当条件表达式结果为.T.和.F.时程序执行语句的顺序。假设含有ELSE子句,那么条件表达式结果为.T.时,执行命令组1,
16、否那么执行命令组2;假设不含有ELSE子句,那么条件表达式结果为.T.时,执行命令组1,否那么执行ENDIF后面的语句。请参见流程图。例题分析对条件表达式求值命令组1命令组2IFENDIF.T.F.IFELSEENDIF语句流程图 例1: 根据变量X的正负符号情况决议变量Y的值为1或-1。 X=5 IF X0 Y=1 ELSEY=-1 ENDIF ? Y例2: 求A,B两数中的最大数。 A=5 B=10 MAX=A IF BMAX MAX=B ENDIF ? MAX或:A=5B=10IF AB MAX=AELSE MAX=BENDIF?MAXIFELSEENDIF语句例题分析例3:Dbirth
17、day=1985/10/15If dbirthday=1000 JL=JL*0.8 CASE JL=600 JL=JL*0.85 CASE JL=300 JL=JL*0.9ENDCASE? 实践付款金额为:, JLDO CASE ENDCASE语句例题分析 例题:设购300元商品9折,购600元商品8.5折,购1000元以上商品8折,根据购物情况计算出实践付款金额。USE JS S1=0 S2=0 S3=0 SCAN DO CASE CASE JBGZ=600 S1=S1+1例: 教师表JS.DBF中有10条记录,且根本工资字段(JBGZ)中的值在300以下有2人,300至599之间有3人,6
18、00元及以上有5人。 case JBGZ=300 s2=s2+1 OTHERWISE S2=S2+1 ENDCASE ENDSCAN ?S1,S2,s3循环(Looping) 循环就是使得一组语句组反复执行假设干次。可以预先指定要循环的次数。也可以预先不指定次数,只需某个条件成立,就可以不断循环下去,直到该条件不成立。 循环语句有三种: 1.SCANENDSCAN(扫描循环) 2.FORENDFOR(计数循环) 3.DO WHILEENDDO(条件循环)SCANENDSCAN 语句 假设对表中一切记录执行某一运算,可以运用该语句。随着记录指针的挪动,SCAN循环对每条记录执行一样的代码块。语句
19、格式为: SCAN NOOPTIMIZE范围FOR条件 WHILE条件 命令组 LOOP 命令组 EXIT 命令组 ENDSCAN SCAN命令自动将记录指针移到下一条满足FOR和WHILE指定条件的记录,并执行相应的命令块,因此,在命令组中应防止运用挪动记录指针的命令,如GO、GO TOP、LOCAT、SEEK以及统计,否那么会呵斥错误甚至死循环。请参见例题分析。 例1:扫描JS表中全部记录,逢记录号为双号的,显示其工号和姓名: USE JS SCAN FOR RECNO()%2=0 ? JS.GH, JS.XM ENDSCANXHKCDMCJ950101019095010202859501
20、010377例2:知CJ表中含有如下3条记录: 现运转包含以下代码的程序:CLOSE ALLUSE CJS=0CNT=0SCAN FOR CJ=60 IF CJ=80 S=S+1 ENDIF CNT=CNT+CJENDSCAN?S,CNT clear n=0 m=0 use xs scan all while xb=男 n=n+1 endscan m=reccount( )-n ?m,n例3:clearstore 0 to ;a1,a2,a3,a4,a5use cjgo topscan do case case cj60 a1=a1+1 case cj70 a2=a2+1 case cj80
21、a3=a3+1 case cj=8 S1=S1+1 CASE I=9 S2=S2+1 ENDCASEENDFOR?S1,S2例5:程序清单如下S=0P=0FOR I=1 TO 20 DO CASE CASE I%2=0 S=S+1 CASE I%3=0 P=P+1 ENDCASEENDFOR? S,PDO WHILEENDDO语句 假设循环次数不知,而是根据某一条件决议能否终了循环,可以运用DO WHILEENDDO语句,其格式为: DO WHILE 条件 语句组 LOOP 语句组 EXIT 语句组 ENDDO 请参见流程图与例题分析。DO WHILEENDDO语句流程图对条件表达式求值语句组
22、DO WHILEENDDO.T.F.DO WHILEENDDO语句例题分析 例1:求1000以内的奇数之和。(此题可以运用FOR循环,这里用DO WHILE循环来处置。) X=0 I=1 DO WHILE I=1000 X=X+I I=I+2 ENDDO ? “1000以内的奇数之和=:,X 例2:输出26个字母clearSET TALK OFFCRT=AN=1DO WHILE N0cResult=LEFT(cString,1)+ cResultcString=SUBSTR(cString,2)ENDDO? cResult例4:程序功能:将非汉字字符组成的字符串反序显示例如将Microsoft
23、显示为tfosorciMCLEARcString=DO WHILE . ENDDO CommandcResult=space(0)DO WHILE LEN(cString)0cResult=cResult+RIGHT(cString,1)cString=SUBSTR(cString,1,LEN(cString)-1)ENDDO? cResult例5:程序功能:将含有汉字字符组成的字符串反序显示CLEARStore “nanjing南京 to c,cp=space(0)Do while len(c)0 x=asc(left(c,1) if x127 i=2 else i=1 endif p=le
24、ft(c,i)+p c=substr(c,i+1)enddo?cc+的反序为+p 例6:程序功能:统计由ASCII码字符组成的字符串中包含字母的个数CLEARcString=The United States of America is abbreviated to U.S.A.nResult=0DO WHILE LEN(cString)0c=LEFT(cString,1)IFBETWEEN(c,a,z) or BETWEEN(c,A,B)nResult=nResult+1ENDIFcString=SUBSTR(cString,2)ENDDO? 包含+ALLT(STR(nResult)+个英文
25、字母短路语句LOOP 假设循环体中含有LOOP语句,那么当执行到LOOP语句时,将跳过LOOP语句与循环出口语句之间的一切命令,进入下一次循环。 例如,求1100之间非3的倍数的一切奇数之和: s=0 FOR i=1 to 100 STEP 2 IF MOD(i,3)=0 LOOP ENDIF s=s + i ENDFOR ? s程序功能:统计由ASCII码字符组成的字符串中包含字母的个数CLEARcString=The United States of America is abbreviated to U.S.A.nResult=0m=LEN(cString)FOR n=1 TO mc=SUBSTR(cString,n,1)IF!BETWEEN(c,a,z) AND !BETWEEN(c,A,B)LOOPENDIFnResult=nResult+1ENDFOR? 包含+ALLT(STR(nResult)+个英文字母退出语句EXIT EXIT是退出语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生职业生涯规划课程总结
- 电脑计算机课程
- 沙地越野美术课件
- 2025年电子工程师职业资格考试试题及答案
- 家长幸福教育课程
- 特色酒店客房设计:空间美学与功能性的完美融合
- 美间酒店设计方案
- 大班安全教育教案《安全用电》
- 2025年中国海关专用清洗王市场调查研究报告
- 2025年中国汽车座椅装配线市场调查研究报告
- 福建省漳州地区校联考2024-2025学年七年级下学期期中考试语文试卷(含答案)
- 2025年便利店店员劳动合同
- GB/T 196-2025普通螺纹基本尺寸
- 2025年陕西省汉中市宁强县中考一模道德与法治试题(含答案)
- 工地分红合同协议
- 变配电工多选试题及答案
- 零售业智能转型:DeepSeek驱动的消费行为分析与推选系统
- 中华人民共和国农村集体经济组织法
- GB/T 25052-2024连续热浸镀层钢板和钢带尺寸、外形、重量及允许偏差
- 中药学电子版教材
- 肌筋膜链与脊柱稳定简述板
评论
0/150
提交评论