![第五章程序设计基础课件_第1页](http://file4.renrendoc.com/view/2f2225eb053378b7f0b6abb28efaa0d8/2f2225eb053378b7f0b6abb28efaa0d81.gif)
![第五章程序设计基础课件_第2页](http://file4.renrendoc.com/view/2f2225eb053378b7f0b6abb28efaa0d8/2f2225eb053378b7f0b6abb28efaa0d82.gif)
![第五章程序设计基础课件_第3页](http://file4.renrendoc.com/view/2f2225eb053378b7f0b6abb28efaa0d8/2f2225eb053378b7f0b6abb28efaa0d83.gif)
![第五章程序设计基础课件_第4页](http://file4.renrendoc.com/view/2f2225eb053378b7f0b6abb28efaa0d8/2f2225eb053378b7f0b6abb28efaa0d84.gif)
![第五章程序设计基础课件_第5页](http://file4.renrendoc.com/view/2f2225eb053378b7f0b6abb28efaa0d8/2f2225eb053378b7f0b6abb28efaa0d85.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章程序设计基础----结构化(过程化)程序设计----面向对象程序设计7/20/20231
VisualFoxPro的工作方式
程序文件的建立与编辑程序文件的调用
程序的基本结构分支结构循环结构过程与用户自定义函数结构化(过程化)程序设计7/20/20232一、VisualFoxPro的工作方式
VisualFoxPro系统提供有三种工作方式:即单命令方式、菜单方式及程序文件方式。1.单命令方式:
VisualFoxPro单命令方式是利用命令窗口来实现的。用户通过Command窗口输入命令,并执行操作。在Command窗口中,可以输入单个的操作命令和系统命令,完成对数据库的操作管理和系统环境的设置;也可以建立命令文件及运行命令文件。Command窗口不仅是VisualFoxPro命令的执行窗口,也是VisualFoxPro命令文件的编辑窗口。
所谓单命令方式,即输入一条命令,完成一个操作的工作方式。
7/20/202332.菜单方式
在VisualFoxPro环境下,也可以通过系统提供的菜单选项,对数据库资源进行操作管理和对系统环境进行设置;并通过菜单建立命令文件及运行命令文件。
所谓菜单方式,即通过打开不同的菜单选择并完成不同的操作。我们在以前各章所讲的内容其实都可说是菜单方式。3.程序文件方式
程序文件(简称程序)也叫做命令文件。7/20/20234
运用程序文件方式进行数据库管理,是通过程序文件编辑工具,将对数据库资源进行操作管理的命令和对系统环境进行设置的命令,集中在一个以(.PRG)为扩展名的命令文件中----指令集(即程序)。
程序---为完成某一具体任务而编写的一系列指令集。(也称代码集)
代码---可以是一条VFP命令、或者函数、或者VFP系统可以识别的任何操作指令等。
7/20/20235程序设计—即利用系统所提供的设计工具,按照程序设计语言的规范,编写程序的过程。VFP提供两种程序设计环境:
----结构化(过程化)程序设计(SP)----面向对象程序设计(OPP)利用程序解决问题的优点(p136)结构化程序设计本质---功能设计(方法:自顶向下、功能分解)
优点是系统结构性强、便于设计和理解.7/20/20236
VisualFoxPro程序文件,是一个以(.PRG)为扩展名的、包含系列命令集的文本文件。任何可以建立、编辑文本文件的工具,都可以创建和编辑VisualFoxPro程序文件。
这些文本编辑工具,可以是VisualFoxPro系统提供的内部编辑器,也可以是其它常用文本编辑软件。在文本编辑环境下,不仅可以对程序文件进行输入和修改,还可以实现字符串查找、替换、删除和编辑功能。
建立、编辑程序文件有两种方式:1.命令方式
2.菜单方式二、程序文件的建立与编辑
7/20/20237新建程序:打开“文件”菜单“新建”或“常用工具栏”“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”;在“程序文件”编辑窗口,输入程序文件,并保存,此时建立程序文件的操作结束。通过“项目管理器”——“代码”——”程序”——“新建”MODIFYCOMMAND已经存在的程序如何打开、修改?“文件—打开”“常用工具栏—打开”“项目管理器---修改”“命令窗口”----MODIFYCOMMAND
<要打开、修改的程序文件名〉7/20/20238三、程序文件的调用(运行)
调用程序文件,即运行程序文件,是程序文件建立的最终目的。在VisualFoxPro系统中,调用程序文件有很多方法,在这里仅介绍其中三种方法。1.命令方式(p138)在命令窗口中,输入如下命令,则程序文件被调用:DO〈程序文件名〉[with参数]2.菜单方式在VisualFoxPro系统主菜单下,打开“程序”菜单,选择“运行”。3.其他方式P138“!”一旦运行程序文件:系统会自动地对程序文件(.prg)进行编译,生成“伪编译”程序(.fxp)。执行程序文件时,系统实际上是执行.fxp文件。7/20/20239四、程序的基本结构
VisualFoxPro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。
如何有效组织?
语法规则+程序结构
程序结构—指根据不同的情况和条件,控制程序去执行相应操作的语句系列及运作规则VisualFoxPro系统的程序流程控制模式:
由顺序、分支、循环、(子程序(过程))三种基本结构构成。(即使面向对象程序模块,在每个模块的内部也是由上述程序控制流组成)7/20/202310
VFP常见的程序控制结构介绍:1.顺序结构
顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。
顺序结构是VFP系统的默认执行顺序(p139)2.分支结构
分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。7/20/2023113.循环结构
循环结构则能够使某些语句或程序段重复执行若干次。如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。4.过程结构
在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行。这时可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入某程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立功能而且可以被其它程序调用的程序序列为过程或函数。7/20/202312例1:UsejsAppendblankEditUse例2:交换两个变量的值X=8Y=9Z=xx=yY=z?x?y顺序结构语句A语句B7/20/202313分支结构
分支结构形式有如下三种:1.单向分支
单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。语句格式:
IF〈条件表达式〉〈命令行序列〉ENDIF语句功能:
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为.T.时,执行〈命令行序列〉;否则,执行ENDIF后面的第一条命令。7/20/2023142.双向分支双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。语句格式:
IF<条件表达式〉〈命令行序列1〉ELSE〈命令行序列2〉ENDIF语句功能:
该语句首先计算〈条件表达式〉的值,当〈条件表达式〉的值为.T.时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。7/20/202315IF……ELSE……ENDIFIf条件表达式命令组1[ELSE命令组2]ENDIFIF对条件表达式求值命令组1命令组2ENDIF.T..F.7/20/202316例1:若变量nWaterTemp(水温度)的值小于100,则不执行任何操作。
IFnWaterTemp>=100lBoiling=.T.&&水已沸ENDIF例2:根据变量X的正负符号情况决定变量Y的值为1或-1:
IFX>0Y=1ELSEY=-1ENDIF7/20/2023173.多向分支
多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应的执行。语句格式:
DOCASECASE〈条件表达式1〉〈命令行序列1〉[CASE〈条件表达式2〉〈命令行序列2〉……CASE〈条件表达式N〉〈命令行序列N〉]
[OTHERWISE〈命令行序列N+1〉]ENDCASE7/20/202318语句功能:该语句根据给出的N个〈条件表达式〉的值,选择N+1个〈命令行序列〉中的一个执行。当所有CASE中〈条件表达式〉的值都是假时,如果有OTHERWISE项,则执行〈命令行序列N+1〉,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第一条命令。7/20/202319多分支要求下,IF嵌套结构不清晰(例5.4)DOCASE……ENDCASEDOCASECASE<条件表达式1><命令组1>[CASE<条件表达式2><命令组2>………….CASE<条件表达式n><命令组n>][OTHERWISE<其他命令组>]ENDCASEDOCASEENDCASE条件1命令组1条件2命令组2条件n命令组n其他命令组.f..f..t..t..t.7/20/202320示例:根据一元二次方程的系数a,b,c,判断方程根的情况Delta=b*b-4*a*cDOCASECASEdelta>0?“方程有两个不等的实数根:”??(-b+sqrt(delta))/(2*a)??(-b-sqrt(delta))/(2*a)CASEdelta=0?“方程有两个相等的实数根:”??–b/(2*a)CASEdelta<0?“方程有两个复根:”real_part=-b/(2*a)img_part=sqrt(-delta)/(2*a)
?alltrim(str(real_part))+”+”+alltrim(str(img_part))+”I”
?alltrim(str(real_part))+”-”+alltrim(str(img_part))+”I”ENDCASE7/20/2023214.使用分支语句应注意的几点1)IF……ENDIF和DOCASE……ENDCASE必须配对使用,DOCASE与第一个CASE<条件表达式>之间不应有任何命令。2)<条件表达式>可以是各种表达式或函数的组合,但其运算结果值必须是逻辑值。3)<命令行序列>可以由一个或多个命令组成,可以是条件控制语句组成的嵌套结构。4)DOCASE……ENDCASE命令,每次最多只能执行一个<命令行序列>。在多个CASE项的<条件表达式>值为真时,只执行第一个<条件表达式>值为真的<命令行序列>,然后执行ENDCASE的后面的第一条命令。7/20/202322【例】假设收入(P)与税率(R)的关系如下表,编程求税金。程序文件名为PRG1.PRG。
0 P<800R=0.05 800≤P<20000.08 2000≤P<50000.1 P≥50007/20/202323SETTALKOFFCLEARINPUT“请输入收入:”TOPDOCASECASEP<800R=0CASEP<2000R=0.05CASEP<5000R=0.08OTHERWISER=0.1ENDCASETAX=P*R?”税金为:”,TAXSETTALKONRETURN7/20/202324循环结构常用的循环语句有以下三种形式:FOR……ENDFORDOWHILE……ENDDOSCAN……ENDSCAN
当程序遇到重复性操作时,要使用循环结构.循环可使一组语句重复执行若干次重复次数:有时可知,有时不可知(由某种结果确定)次数:预先指定(次数可知)
预先不指定(次数不可知)而设定循环控制条件入口语句……(循环体)……出口语句7/20/2023251.“计数”型循环控制语句:FOR……ENDFOR特点:预先知道循环次数
“计数”型循环控制语句,即根据用户预先设置的循环变量的初值、终值和步长,决定循环体内语句的执行次数。1)语句格式:
FOR<循环变量>=<循环变量初值>TO<循环变量终值>;[STEP〈循环变量步长〉]
〈命令行序列〉ENDFOR|NEXT2)语句功能:
该语句用<循环变量>来控制<命令行序列>的执行次数.执行语句时,首先将<循环变量初值>赋给〈循环变量〉,然后判断〈循环变量〉是否大于或小于〈循环变量终值〉,若结果为“真”,则结束循环,执行ENDFOR后面的第一条命令;否则,执行〈命令行序列〉,〈循环变量〉自动按〈循环变量步长〉增加或减少,再重新判断〈循环变量〉当前的值是否大于或小于〈循环变量终值〉,直到其结果为真。7/20/202326FOR循环变量=<初值>判断循环变量是否等于或大于终值.F.命令语句组循环变量=循环变量+步长.T.ENDFOR7/20/202327示例
计算100以内的奇数和S=1+3+5+……+99,100的阶乘P=1*2*3*……*100
#DEFINEN100&&设置循环终值常量s=0
&&累加器,初始化为0***以下循环计算n以内的奇数和
FORi=1toNSTEP2s=s+iENDFOR
?N,“以内的奇数和S=”,S
***以下循环计算N的阶乘
p=1
&&累乘器,初始化为1
FORI=1TONp=p*IENDFOR
?N,“的阶乘=”,pP143例如5.7、5.8、5.97/20/2023282.“当”型循环控制语句DOWHILE…ENDDO特点:预先不能确定循环次数
“当”型循环控制语句,是根据循环条件表达式的值,决定循环体内语句的执行次数。1)语句格式:
DOWHILE〈条件表达式〉〈命令行序列〉
[LOOP][EXIT]ENDDO2)语句功能:
该语句通过〈条件表达式〉的值来控制循环次数。执行语句时,反复判断〈条件表达式〉的值,当〈条件表达式〉的值为“真”时,执行〈命令行序列〉否则,结束循环,并执行ENDDO后面的第一条命令。7/20/202329DOWHILE……ENDDO语句使用场合:循环次数未知DOWHILE对<条件表达式>求值循环语句组.T..F.ENDDO7/20/202330******程序功能:将ASCⅡ字符组成的字符串反序显示(例如将Microsoft反序显示为tfosorciM)CLEARcString="Microsoft"cResult=cString+"反序显示为"DOWHILELEN(cString)>0cResult=cResult+RIGHT(cString,1)cString=SUBSTR(cString,1,LEN(cString)-1)ENDDO?cResult特别提示:DOWHILE循环体中的操作,必须对<条件表达式>的值有所影响,否则会造成“死循环”7/20/202331【例】编程求1+2+3+……+100之和。SETTALKOFFCLEARS=0I=1DOWHILEI<=100S=S+II=I+1ENDDO?”1+2+3+……+100=”,SSETTALKONRETURN其他例题:P145例5.10、例5.11、例5.12、例5.137/20/2023323.“指针”型循环控制语句:SCAN…ENDSCAN
特点:用于对当前表记录执行同一操作(循环处理)即使用场合:对表中所有记录执行某一相同操作
“指针”型循环控制语句,是根据用户设置的表中的记录指针访问范围(记录数),决定循环体内语句的执行次数。1)语句格式:
SCAN[<范围>][FOR〈条件表达式1〉]
〈命令行序列〉[LOOP][EXIT]
ENDSCAN7/20/2023332)语句功能:该语句将在指定的<范围>内,根据<条件表达式>要求,利用表记录指针移动操作来控制循环次数。语句执行时,记录指针将在指定的范围移动,随着记录指针的移动,SCAN循环对范围内每条符合<条件表达式>的记录重复执行<命令行序列>内容,然后再移到的下一条符合条件的记录上进行处理操作,直到按范围搜寻完为止,结束循环。7/20/202334示例扫描JS表中全部记录,逢记录号为双号的,显示其工号和姓名:USEJSSCANFORRECNO()%2=0 ?JS.GH,JS.XMENDSCAN7/20/202335循环结构中的LOOP命令和EXIT命令LOOP命令(短路语句)例,求1~100之间非3倍数的所有奇数之和 S=0
FORI=1TO100STEP2
IFMOD(I,3)=0
LOOP
ENDIF S=S+I
ENDFOR7/20/202336EXIT命令(退出语句)(结束循环)例,随机产生一个要求在70~80之间的数
x=0
dowhile.t.
x=rand()*100ifx>70andx<80
exitendif
enddo7/20/2023374.使用循环语句时应注意的几点1)DOWHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。2)〈命令行序列〉可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。3)〈循环变量〉应是数值型的内存变量或数组元素。4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变〈命令行序列〉中部分命令的执行次数。EXIT、LOOP可以出现在〈命令行序列〉的任意位置。7/20/202338结构的嵌套以上三种控制结构相互间可以嵌套----
即在一种结构中可以包含其他控制结构中的任何一种结构S=0
FORI=1TO20
P=1
FORJ=1TOI
P=P*J
IFP>100EXITENDIF
ENDFOR
S=S+P
ENDFOR
7/20/202339过程结构
在许多应用程序中,有一些程序段需要反复执行多次,这些程序段不在一个固定的位置上,而是分散在程序的许多位置上重复执行,可将其与嵌入它的程序分开,形成独立的程序序列,待使用时再调入程序中,以实现不同位置上的重复操作。这样做增强了程序的可读性和模块化。我们称这种具有独立功能而且可以被其它程序调用的程序序列为子程序、过程或函数。VPF:通过过程\用户自定义函数实现过程结构(子程序)7/20/202340*VFP允许子程序(过程\用户自定义函数)调用即:主应用程序的许多功能可以编写成一个个独立的过程或用户自定义函数,然后通过调用方式将其组装到主程序中去*调用方式:
DO过程名称[WITH<参数>]
或:?函数名(参数)—标准函数操作方式一个VFP程序可以调用任意多个子程序(过程\用户自定义函数),子程序还可以调用其它子程序,嵌套的DO调用层数为128层。7/20/202341五、过程与用户自定义函数
在VisualFoxPro系统中,程序一般是独立存放在磁盘上的程序文件,使用时用户通过文件名调用并执行。为了实现用户的某种目的,一个程序很可能需要由多个子程序组合完成。1.过程或用户自定义函数(UDF)
即将经常执行的功能对应的一段代码独立出来,创建一个过程或函数。通常用户通过为自己的应用程序创建一些专用的过程或函数,以供自己的应用程序调用。7/20/2023422.过程或函数的创建和调用
创建过程过程:PROCEDURE<过程名>
[PARAMETERS<参数列表>]
<命令组>RETURN[eExpression]
ENDPROC
举例:PROCEDUREgc1
PARAMETERSx,y
z=x+yRETURNzENDPROC7/20/202343函数:FUNCTION<函数名>
[PARAMETERS<参数列表>]
<命令组>RETURN[eExpression]
ENDFUNC
创建函数:7/20/202344*RETURN:返回语句,即返回过程或函数的调用处。(1)语句格式:
RETURN[eExpression](2)语句功能:返回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球及中国低轨互联网星座行业头部企业市场占有率及排名调研报告
- 2025年全球及中国碳封存解决方案行业头部企业市场占有率及排名调研报告
- 2025-2030全球高速木屑制粒机行业调研及趋势分析报告
- 2025-2030全球家用吊扇灯行业调研及趋势分析报告
- 2025年全球及中国非动力重力滚筒输送机行业头部企业市场占有率及排名调研报告
- 2025年全球及中国超声波封订机行业头部企业市场占有率及排名调研报告
- 2025-2030全球PTC热敏电阻烧结炉行业调研及趋势分析报告
- 2025-2030全球纤维蛋白密封剂行业调研及趋势分析报告
- 2025-2030全球全向堆高AGV行业调研及趋势分析报告
- 2025-2030全球天花板安装防护罩行业调研及趋势分析报告
- 2024护理不良事件分析
- 光伏项目的投资估算设计概算以及财务评价介绍
- 粮油厂食品安全培训
- 南京信息工程大学《教师领导力》2022-2023学年第一学期期末试卷
- 电力安全工作规程(完整版)
- 电力基本知识培训课件
- 2024年湖南省公务员录用考试《行测》试题及答案解析
- 借名买车的协议书范文范本
- 《2024 ESC血压升高和高血压管理指南》解读
- 北京中考英语词汇表(1600词汇)
- 20世纪西方音乐智慧树知到期末考试答案章节答案2024年北京大学
评论
0/150
提交评论