VFP程序设计课件7_第1页
VFP程序设计课件7_第2页
VFP程序设计课件7_第3页
VFP程序设计课件7_第4页
VFP程序设计课件7_第5页
已阅读5页,还剩155页未读 继续免费阅读

下载本文档

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

文档简介

第9章结构化程序设计

第9章结构化程序设计1VFP提供一种程序执行方式,这种方式就是预先把需要执行的多条命令按一定的结构组成一个有机序列以文件的形式存储在磁盘上,这个文件就称为程序文件,这个序列的设计、编码和调试的过程就是程序设计。9.1程序设计基础

9.1.1程序设计的概念

VFP提供一种程序执行方式,这种方式就是预先29.1.2程序的控制结构

任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。

图9.1程序的控制结构

9.1.2程序的控制结构图9.1程序的控制结构39.1.3结构化程序设计方法

结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。自顶向下是指对设计的系统要有一个全面的理解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题。逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分解细化为一系列的具体步骤。模块化是结构化程序的重要原则。所谓模块化就是把大程序按照功能分为较小的程序。9.1.3结构化程序设计方法49.1.4程序文件的建立与执行

1.命令方式建立或修改程序文件命令格式:MODIFYCOMMAND[<程序文件名>|?]MODIFY.FILE.[〈文件名〉|?]

功能:启动VFP提供的文本编辑器来建立或编辑程序文件。2.菜单方式建立编辑程序文件

9.1.4程序文件的建立与执行1.命令方式建立或修改程序5命令格式:DO<程序文件名>功能:将程序文件从磁盘调入内存,编译成.FXP目标文件后并执行。3.程序文件的执行

菜单方式:①.CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。②.RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口。③.QUIT:结束程序执行并退出Visual.FoxPro系统,返回操作系统。

命令格式:DO<程序文件名>3.程序文件的执行菜69.2顺序结构程序

顺序结构是最简单、最基本的一种程序结构。在顺序结构程序中,各命令按照各自出现的先后顺序,依次执行。9.2顺序结构程序顺序结构是最简单、最基本的一79.2.1程序文件中的辅助命令

一.输入类语句格式1:STORE<表达式>TO<内存变量名表>格式2:<内存变量>=<表达式>功能:给内存变量赋值。㈠.赋值语句9.2.1程序文件中的辅助命令一.输入类语句格式18㈡.交互式语句/键盘输入命令

1.字符串数据输入命令格式:ACCEPT[<提示信息>]TO<内存变量>功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。

注:ACCEPT命令只能接受字符型常量,输入时不需加定界符。键盘输入命令主要用于程序执行过程中原始数据的输入。㈡.交互式语句/键盘输入命令1.字符串数据输入命令格式9例9-1:要求用户从键盘上输入用户名,然后把输入的用户名显示出来。ACCEPT“请输入用户名:”TONAME?NAME例9-1:要求用户从键盘上输入用户名,然后把输入的用户名显示10格式:INPUT[<提示信息>]TO<内存变量>2.数据输入命令功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。

注:INPUT命令能接受任何类型的表达式:①输入C型数据时,要使用‘’或“”作为定界符;②输入L型数据时,.T.和.F.,两边的.不能省;③输入D型数据时,要用{}或CTOD()将字符串转成日期型变量。格式:INPUT[<提示信息>]TO<内存变量>2.11例9-2:求任意两数之和。INPUT“请输入一个数x:”TOX?X+YINPUT“请输入另一个数y:”TOY例9-2:求任意两数之和。INPUT“请输入一个数x:”12J=2800

INPUT“输入J+200:”TOA

ACCEPT“输入J+200:”TOB?“A=”,A?“B=”,B注:执行时,先后两次输入同样的内容:J+200例9-3:

给出下列A、B的结果J=2800例9-3:给出下列A、B的结果13格式:WAIT[<提示信息>]TO<内存变量>[TIMEOUT<数值表达式>]3.只能输入一个字符的命令功能:当程序执行某一处需要暂停时使用此命令。

注:WAIT命令响应速度快,它只接受一个字符,不需用户键入回车键。格式:WAIT[<提示信息>]TO<内存变量>3.14****数据表操作命令菜单****打开工作数据表增加数据表记录删除数据表记录修改数据表记录打印数据表记录关闭工作数据表?“您选择的是第”+CHOICE+“个选项”WAIT“请选择相应代码:”TOCHOICE例9-4:****数据表操作命令菜单****?“您选择的是第”15格式:@<行,列>SAY<提示信息>GET<变量>[RANGE<数值表达式1>,<数值表达式2>]

READ4.格式输入语句功能:在屏幕指定的坐标位置上显示提示或输入数据。

②READ一般与GET联合起来用:当有READ时,GET<变量>的内容可以从键盘上修改;没有READ时,GET后的变量只能显示内容,不能修改;一个READ可以修改它前面的多个GET项的内容,但它可以由CLEARGETS命令隔断。注:①<变量>:该变量应在其前面定义过(赋初值)。格式:@<行,列>SAY<提示信息>GET<变量16@8,18SAY“****数据表操作命令菜单****”@9,18SAY“1.打开工作数据表”@10,18SAY“2.增加数据表记录”@11,18SAY“3.删除数据表记录”@12,18SAY“4.修改数据表记录”@13,18SAY“5.打印数据表记录”@14,18SAY“6.关闭工作数据表”@18,28SAY“您选择的是:”+LTRIM(STR(CHOICE))@16,28SAY“请选择相应代码:”GETCHOICEREAD例9-5:@8,18SAY“****数据表操作命令菜单17二.输出类语句1.非格式输出语句

格式1:?<内存变量名表>格式2:??<内存变量名表>注:语句1是在光标所在行的下一行开始显示,语句2则是在当前光标位置开始显示。功能:显示内存变量、常量或表达式的值。二.输出类语句1.非格式输出语句格式1:?<内18格式:@<行,列>SAY<表达式>

[FUNCTION<功能符>][PICTURE<格式符>]2.格式输出语句功能:按指定的坐标位置在屏幕上输出表达式的值。

注:

若选用PICTURE、FUNCTION子句,则按一定的格式输出,分别见教材P131的表6.1、6.2。格式:@<行,列>SAY<表达式>2.格式输出语句19格式:TEXT

<输出显示内容>

ENDTEXT

3.文本输出语句功能:在屏幕上原样显示TEXT和ENDTEXT之间的内容。

注:

TEXT、ENDTEXT是一条子句,不能省略其中任一条子句。格式:TEXT3.文本输出语句功能:在屏幕上原样显示TE20****数据表操作命令菜单****打开工作数据表增加数据表记录删除数据表记录修改数据表记录打印数据表记录关闭工作数据表?“您选择的是第”+CHOICE+“个选项”WAIT“请选择相应代码:”TOCHOICE例6-6TEXTENDTEXT****数据表操作命令菜单****?“您选择的是第”21三.设置会话状态语句语句格式2:SETTALKOFF功能语句1:设置会话状态开通。语句2:设置会话状态关闭。语句格式1:SETTALKON三.设置会话状态语句语句格式2:SETTALKOF22四.清屏与注释语句语句格式:CLEAR1.清屏语句功能:清除屏幕上所有显示内容,光标回到屏幕左上角。四.清屏与注释语句语句格式:CLEAR1.清屏语句功232.注释语句语句格式2:*<注释内容>注:语句1、2、3在程序中,系统不执行。语句格式1:NOTE<注释内容>功能:在程序中加入说明性语句。语句格式3:&&<注释内容>2.注释语句语句格式2:*<注释内容>注:语句24五.RETURN命令注:一般RETURN出现于程序末尾。格式:RETURN[<表达式>/TOMASTER/TO<程序名>]功能:结束一个程序的执行。五.RETURN命令注:一般RETURN出现于程序末尾。25六.终止程序执行语句语句格式2:QUIT注:语句1:在终止程序执行后,返回到VFP命令状态;语句2:返回到操作系统状态。语句格式1:CANCEL功能:终止程序执行,关闭所有打开的命令文件。六.终止程序执行语句语句格式2:QUIT注:语句格式126顺序结构程序:按语句的先后顺序组织的程序,即把处理过程的各个步骤按执行的先后顺序列出。其流程图如右图所示。顺序结构程序设计

A

B

C

N图中箭头表示程序执行的方向,方框代表不同的可执行语句。顺序结构程序:按语句的先后顺序组织的程序,即把处理过程的各个27例9-7

变量的初始化和变量的赋值。SETTALKOFFSTORE0TOX,Y,ZA=3B=A+1C=A*B?X,Y,Z?A,B,CSETTALKON例9-7变量的初始化和变量的赋值。SETTALK28例9-8

执行以下命令序列,问答问题:最后显示的值是:所有职工的平均工资;所有工资在1000元以上的职工的平均工资;所有工资在1000元以上的职工人数;所有职工人数。USEzgbSUM基本工资FOR基本工资>1000TOSGZCOPYFOR基本工资>1000TOGZK2USEGZK2num=reccount()ave=sgz/num?ave例9-8执行以下命令序列,问答问题:最后显示的值是:29在计算机应用的许多场合,要求程序根据不同的条件采用不同的处理方法。如果条件满足,则执行某一些语句;如果条件不满足,则执行另一些语句。这些需要根据判断条件来控制程序走向的程序设计称为选择结构程序设计,又称分支结构程序设计。VisualFoxPro提供双分支选择语句、多分支选择语句两种选择结构。9.3选择结构程序设计在计算机应用的许多场合,要求程序根据不同的条件采用不同的处理30

ENDIF后的语句语句序列1

ENDIF后的语句语句格式:IF

<条件>

<语句序列1>ENDIF

条件9.3.1双分支选择语句(选择判断语句)

条件.T..F.语句序列1.Y..N.语句序列2

[ELSE<语句序列2>]ENDIF后的语句语句序列1ENDIF后的语句语句格式:31注:(1)

IF和ENDIF必须配对使用,而ELSE可选。(2)

IF、ELSE、ENDIF必须各占一行。(3)<条件>可以为关系表达式、逻辑表达式。(4)在<语句序列1>和<语句序列2>中可以嵌套IF语句。执行过程:如果<条件>成立,就执行语句序列1;如果<条件>不成立,执行语句序列2。注:执行过程:32例

请改用分支结构语句编程计算电费:不超过50度,每度0.52元;超过50度时,超出部分每度0.75元。SETTALKOFFINPUT“请输入所用电量:"TODLDF=IIF(DL<=50,0.52*DL,0.52*50+0.75*(DL-50))?“应缴电费为:”+LTRIM(STR(DF,10,2))+"元"SETTALKONRETURN例请改用分支结构语句编程计算电费:不超过50度,每度33SETTALKOFFINPUT"请输入行李重量:"TOWIF

1YF=0.22*WELSEYF=0.22*40+

1ENDIF?"应交托运费为:"+LTRIM(STR(YF,10,2))+"元"SETTALKONRETURN例火车托运行李:每人不超过40公斤,每公斤0.22元;超过40公斤时,超出部分每公斤0.40元。填空完成以下程序。W<40(W-40)*0.4SETTALKOFF例火车托运行李:每人不超过34SETTALKOFFSetdefatof:\jfvfp\prgUSEzgbACCEPT“请输入要查找人的姓名:”TONLOCATEALLFORXM=NIFFOUND()DISP

ELSE?[查无此人]ENDIFUSESETTALKONRETURN例

编程:在ZGB.DBF中查找某人。SETTALKOFF例编程:在ZGB.359.3.2多分支选择语句(选择语句|情况语句)说明:①DOCASE和第一个CASE子句之间不能插入任何语句。②DOCASE和ENDCASE必须配对使用,且DOCASE,CASE,OTHERWISE和ENDCASE各子句必须各占一行。③在<语句序列>中可嵌套情况语句。

语句格式:

DOCASE

CASE<条件表达式1><语句序列1>

CASE<条件表达式2><语句序列2>┇

CASE<条件表达式n><语句序列n>[OTHERWISE<语句序列n+1>]

ENDCASE

9.3.2多分支选择语句(选择语句|情况语句)说明:语句格36功能:系统依次测试语句中各个条件表达式的值:若为真,即执行相应<条件表达式>后的<语句序列>,然后脱离情况语句,执行ENDCASE的下一语句。若所有的条件表达式的值均为假,则执行OTHERWISE后面的语句序列,然后脱离情况语句,执行ENDCASE下一语句。开始判断语句序列1序列2序列n序列n+1ENDCASE后面的语句条件1条件2条件n其它……功能:系统依次测试语句中各个条件表达式的值:若为真,即执行37例

已知cjb.dbf中包含xingming,avcj等字段。试用avcj来判断该生成绩属于优(≥90)、良(≥80)、及格(≥60)或不及格(<60)。USEcjbACCEPT′请输入姓名:′TOxmLOCATEFORALLTRIM(xingming)=ALLTRIM(xm)n=avcjDOCASE

CASEn>=90dj=″优″

CASEn>=80dj=″良″

CASEn>=60dj=″及格″

OTHERWISEdj=″不及格″ENDCASE@5,10SAYxingming+[同学的成绩等级为:]+dj例已知cjb.dbf中包含xingming,avcj等字38A=3000DOCASE

CASEA<1000B=A/2

CASEA>=1000B=A

CASEA>=2000B=2*A

CASEA>=3000B=3*AENDCASE?B例

阅读下列程序段,写出运行结果:

例阅读下列程序段,写出运行结果:39SettalkoffSetdefatof:\yyfoxclearcho=0@8,18SAY“****数据表操作命令菜单****”@9,18SAY“1.打开工作数据表”@10,18SAY“2.增加数据表记录”@11,18SAY“3.删除数据表记录”@12,18SAY“4.修改数据表记录”@14,18SAY“5.关闭工作数据表”@15,28SAY“请选择相应代码:”GETchoReadDocase

casecho=1accept“请输入表文件名:”tobmuse&bm例

利用CASE语句实现简单的菜单功能

Settalkoff例利用CASE语句实现简单的菜40

casecho=2append

casecho=3input“请输入要删除的记录号:”tojlhgojlhdele

casecho=4browse

casecho=5use

otherwise

@15,28SAY“选择代码错!”

endcaseSettalkonreturncasecho=241循环,就是按给定的条件连续地重复执行一段特定功能的程序。循环结构也称为重复结构。9.4循环结构程序设计

VisualFoxPro给出了三种循环结构:条件循环(DOWHILE……ENDDO)计算循环(FOR……ENDFOR)扫描循环(SCAN……ENDSCAN)循环,就是按给定的条件连续地重复执行一段特定功能的程42语句格式:DOWHILE<条件><语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>

ENDDO

循环体

ENDDO后的语句条件.T..F.条件循环结构流程图一、条件循环循环体功能:有条件连续地重复执行DOWHILE与ENDDO之间的语句序列,直到<条件>为假或因执行EXIT语句而结束。条件语句格式:循环体ENDDO后的语句条件.T..F.条件循43(2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后面的语句,转回DOWHILE处重新判断。其作用相当于一个特殊的“短路”返回控制。(3)循环体中的EXIT也是可选项。遇到它时便无条件地退出循环,转到ENDDO后面的语句。其作用相当于一个紧急出口。(4)通常LOOP或EXIT出现在循环体内嵌套的分支语句中,根据条件来决定是LOOP回去,还是EXIT出去。功能说明:(1)系统执行该语句时,先判断循环开始DOWHILE的条件是否成立,如果条件为真,则执行循环体中的语句序列。当执行到ENDDO时,返回到DOWHILE,再次判断条件是否为真,以确定是否再次执行循环体。若条件为假,则结束循环,执行ENDDO后面的语句。如果第一次判断条件时,条件即为假,则循环体一次都不执行,这就是称为“先判断后执行”的语句。(2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后44SETTALKOFF

SETTALKONRETURNCLEAR?[OK]?[OK]?[OK]…例在屏幕上换行显示字符串“OK”20次SETTALKOFFSETTALK45i=1?[OK]i=i+1ENDDODOWHILESETTALKOFF

SETTALKONRETURNCLEARi<=20循环次数循环前i值循环后i值112223………202021&&设置循环变量初值&&修改循环变量例在屏幕上换行显示字符串[OK]20次?[OK]i=1?[OK]i=i+1ENDDODOWHILES46①DOWHILE语句之前一定要有设置循环变量初值的语句。

在以循环变量作为循环控制参数的条件循环中②循环体内一定要有修改循环变量的语句,否则就会出现死循环。注意①DOWHILE语句之前一定要有设置循环变量初47例求自然数1至4的和。

分析算法:s=s+i;i=i+1;1.i=1,s=0;2.累加第i个数3.累加次数加14.当i<=4重复做2;5.?s。例求自然数1至4的和。分析算法:s=s+i;i=48例求自然数1至4的和。

SETTALKOFFS=0

&&定义一个变量表示和,并初始化&&指定以循环次数作判断条件

S=S+i&&把S的值加上i后再赋给S,即求和&&修改循环变量i=1DOWHILE

i<=4i=i+1ENDDO?S&&输出求和的结果

SETTALKON

RETURN&&设置循环变量的初值例求自然数1至4的和。SETTALKOFFS49程序流程图S=0i=11<=4S=0+1i=1+1.T.2<=4S=1+2i=2+13<=4S=3+3i=3+14<=4S=6+4i=4+15<=4.F.?10SETTALKOFFS=0i=1DOWHILEi<=4S=S+ii=i+1ENDDO?SSETTALKONRETURN×程序流程图S=0i=11<=4S=0+1i=1+1.T.2<50

若求自然数1至N的和呢?[程序:求自然数1至4的和]SETTALKOFFS=0i=1INPUT〞请输入N的值:〞TONDOWHILEi<=4S=S+ii=i+1ENDDO?SSETTALKON

RETURNi<=N推广1若求自然数1至N的和呢?[程序:求自然数1至4的和]51

若求自然数1至N的积呢?[程序:求自然数1至N的和]SETTALKOFFS=0i=1INPUT〞请输入N的值:〞TONDOWHILEi<=NS=S+ii=i+1ENDDO?SSETTALKON

RETURN推广2S=1S=S*i若求自然数1至N的积呢?[程序:求自然数1至N的和]52例

阅读程序,并说出程序的运行结果IFi=3

LOOPENDIF程序结果23456程序结果2456RETURNSETTALKONSETTALKOFFi=1DOWHILEi<=5i=i+1ENDDO?i?“E”EE例阅读程序,并说出程序的运行结果IFi=3LOOP53例

求1~100以内所有奇数的和。

SETTALKOFFS=0I=0Dowhile

I<100I=I+1Ifint(I/2)=I/2LoopendifS=S+IEnddo?“1到100的奇数和S=”,SSETTALKONReturn以循环变量作为控制参数控制循环。S=0I=1Dowhile

I<100S=S+II=I+2Enddo?s程序改进:例求1~100以内所有奇数的和。SETTALK54SETTALKOFFCLEARUSEzgbACCEPT“请输入要查找人的姓名:”TONLOCATEALLFORXM=NDOWHILE.NOT.EOF()DISPCONTINUWAIT“按任意键继续,按ESC键退出”ENDDOUSE?“查找结束”SETTALKONRETURN例

编程:在zgb.dbf中查找某人。利用数据表的操作函数的返回值控制循环——————SETTALKOFF例编程:在zgb.55例

求连乘数1*2*3*4*……,当积大于720时退出程序。SettalkoffClearS=1I=1Dowhile

.T.S=S*II=I+1Enddo?“S=”,S

SettalkonReturn循环控制条件恒为真,要使用EXIT语句结束循环—————IFS>720

EXITENDIF例求连乘数1*2*3*4*……,当积大于720时退出56例求[1,100]内所有能被3或被5整除的数的个数。i=1DOWHILEi<=100i=i+1ENDDO

IFMOD(i,3)=0.OR.MOD(i,5)=0N=N+1ENDIFN=0&&定义一个变量表示个数,并初始化&&总个数增加1

SETTALKOFF?〞满足条件的数的个数为〞,NSETTALKONRETURN?i&&显示满足条件的这个数例求[1,100]内所有能被3或被5整除的数的个数。i=57语句格式:

FOR

X=ATOB

[STEPC]<语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>

ENDFOR

|

NEXT

二、计数循环循环体功能:将FOR……ENDFOR循环中的<语句序列>执行指定的次数。循环变量循环初值步长值循环终值语句格式:二、计数循环循环体功能:将FOR……ENDFOR58例

求1~100之和。

SETTALKOFFClearS=0for

I=1

to

100

S=S+IEndfor?“S=”,SSETTALKONReturn

若求100的阶乘呢?思考1例求1~100之和。SETTALKOFF59例

求1~100之奇数和。

SETTALKOFFClearS=0for

I=1to100step

2S=S+INext?“S=”,SSETTALKONReturn

若求1~100的偶数和呢?思考2例求1~100之奇数和。SETTALKOFF60例

阅读程序,写出程序运行结果SETTALKONSETTALKOFFS=0FORK=1TO10STEP2S=S+K

ENDFOR?SRETURNIFK=7LOOPENDIF思考3若改成EXIT呢?例阅读程序,写出程序运行结果SETTALKO61语句格式:

SCAN

[<范围>][FOR<条件>]<语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>ENDSCAN

三、表文件扫描循环循环体功能:在指定的范围内,扫描满足给定条件的记录,执行相应的语句。语句格式:三、表文件扫描循环循环体功能:在指定的范围内,扫62SETTALKOFFUSEzgbACCEPT“请输入要查找人的姓名:”TONSCANFORXM=NDISPWAIT“按任意键继续,按ESC键退出”ENDSCANUSE?“查找结束”SETTALKONRETURN例

用SCAN语句编程:在zgb.dbf中查找某人。SETTALKOFF例用SCAN语句63对数据表扫描时三种循环的等价格式表文件扫描循环:SCANFOR…………ENDSCAN条件循环:DOWHILE.NOT.EOF() ……

SKIP ……ENDDO计数循环:n=RECCOUNT()FORi=1TOn

…… GOi

……ENDFOR对数据表扫描时三种循环的等价格式表文件扫描循环:条件循环:计64循环嵌套循环体内又设置循环的情况称为多重循环,又称为循环嵌套。内外循环的层次必须分明,不允许有交叉现象出现。循环结构可以与分支结构嵌套,同样不允许有交叉现象出现。

以下交叉情形不允许出现:

循环嵌套循环体内又设置循环的情况称为多重循环,又称为循环嵌套65例

已知S1=1,S2=1+2,S3=1+2+3,……,Sn=1+2+3+……+N,编程求S1+S2+……+S100的和。s=0n=1Dowhile

n<=100i=1sub=0

Dowhile

i<=nsub=sub+ii=i+1

Enddos=s+subn=n+1Enddo?“S1+S2+……+S100=”,s

例已知S1=1,S2=1+2,S3=1+2+3,……66

(1)求[1,30]之间所有偶数的乘积。(3)求s=1!+2!+……+n!练习(2)已知S=1*2*3*…*N当S>800时退出,求此时最小的S值(4)求(5)求(1)求[1,30]之间所有偶数的乘积。(3)求s=1679.5程序的模块化

9.5.1子程序、过程和函数

1.子程序(1).子程序的结构子程序与其他程序文件的惟一区别是其末尾或返回处必须有返回语句。命令格式:RETURN.[TO.MASTER|TO.〈程序文件名〉|〈表达式〉]

9.5程序的模块化9.5.1子程序、过程和函数68

(2).子程序的调用子程序调用命令与主程序执行命令相同,其格式都是:DO〈程序文件名〉|〈过程名〉[WITH.〈参数表〉](3).子程序的嵌套调用主程序可以调用子程序,子程序还可以调用另外的子程序,这就是子程序的嵌套调用。实际上,子程序和主程序都是相对的,任何一个程序可以调用其他程序,也可以被其他程序调用。每个被调用程序的末尾或返回处都要加上RETURN命令。

(2).子程序的调用692.自定义函数(1).自定义函数的结构[FUNCTION.〈函数名〉][PARAMETERS.〈参数表〉]〈命令组〉RETURN.[〈表达式〉](2).自定义函数的调用调用格式是:〈函数名〉(〈自变量表〉)

2.自定义函数703.过程与过程文件(1).过程的结构过程的一般格式是:PROCEDURE〈过程名〉[PARAMETERS〈参数表〉]〈命令组〉RETURN(2).过程文件一个过程可以以文件形式单独存在,也可以将多个过程合并到一个文件中,这个文件称为过程文件。在过程文件中,每个过程仍然是独立的,可以单独调用。

3.过程与过程文件71(3).过程文件的打开与关闭打开过程文件命令格式是:SET.PROCEDURE.TO.[〈过程文件名〉]关闭过程文件命令格式是:SET.PROCEDURE.TO或者CLOSE.PROCEDURE

(3).过程文件的打开与关闭729.5.2内存变量的作用域

1.全局内存变量定义全局变量的命令格式:命令格式1:PUBLIC〈内存变量表〉|ALL|ALLLINK〈通配符〉|ALLEXCEPT〈通配符〉命令格式2:PUBLIC.[ARRAY]〈数组名〉(〈下标上界1〉[,〈下标上界2〉])[,〈数组名〉(〈下标上界1〉[,〈下标上界2〉]),…]功能:定义全局内存变量或数组。

9.5.2内存变量的作用域1.全局内存变量732.局部内存变量局部内存变量只能在定义它的程序及其下级程序中使用,一旦定义它的程序运行结束,它便自动被清除。也就是说,在某一级程序中定义的局部变量,不能进入其上级程序使用,但可以到其下级程序中使用,而且当在下级程序中改变了该变量的值时,在返回本级程序时被改变的值仍然保存,本级程序可以继续使用改变后的变量值。

2.局部内存变量743.隐藏内存变量如果某级程序中使用的局部变量与上级程序中的局部变量或全局变量同名,就容易造成混淆。为了避免这种情况,可使用PRIVATE命令在该程序中将全局变量或上级程序定义的一些变量隐藏起来,这时就像这些内存变量不存在一样,可以再定义同名的内存变量。命令格式:PRIVATE.〈内存变量表〉|ALL|ALL.LIKE.〈通配符〉|ALL.EXCEPT.〈通配符〉

3.隐藏内存变量759.5.3调用子程序时的数据传递

调用子程序时的数据传递可以通过两种方式来解决。1.利用变量的作用域实现数据传递:合理地利用前面介绍的内存变量作用域特性,可以实现调用子程序时的数据传递。2.利用参数实现数据传递。命令格式是:PARAMETERS.〈内存变量表〉功能:该命令指定子程序中的局部变量名,并由这些局部变量接收上级程序中用DO…WITH传递来的参数。

9.5.3调用子程序时的数据传递调用子程序时的数769.6程序调试

9.6.1程序调试概述

程序调试就是确定程序出错的位置,然后加以改正,一直到满足预定的设计要求为止。程序调试往往是先分模块调试,当各模块都调试通过以后,再联合起来进行调试,通过联调后,便可试运行,试运行无误即可投入正常使用。程序的错误有两类:语法错误和逻辑错误。

9.6程序调试9.6.1程序调试概述779.6.2调试器窗口选择“工具”菜单中的“调试器”命令或在命令窗口输入DEBUG命令,系统打开调试器窗口。1.跟踪窗口2.监视窗口3.局部窗口4.调用堆栈窗口9.6.2调试器窗口789.6.3设置断点在调试器窗口可以设置以下4种类型的断点:类型1:在定位处中断。类型2:如果表达式值为真则在定位处中断。类型3:当表达式值为真时中断。类型4:当表达式值改变时中断。不同类型断点的设置方法大致相同,但也有一些区别。

9.6.3设置断点799.6.4“调试”菜单项在调试器窗口中的“调试”菜单项包含执行程序、选择执行方式、终止程序执行、修改程序以及调整程序执行速度等命令。各命令的具体功能请参考教材。

9.6.4“调试”菜单项80第9章结构化程序设计

第9章结构化程序设计81VFP提供一种程序执行方式,这种方式就是预先把需要执行的多条命令按一定的结构组成一个有机序列以文件的形式存储在磁盘上,这个文件就称为程序文件,这个序列的设计、编码和调试的过程就是程序设计。9.1程序设计基础

9.1.1程序设计的概念

VFP提供一种程序执行方式,这种方式就是预先829.1.2程序的控制结构

任何复杂的程序都由3种基本控制结构组成。它们是顺序结构、选择结构和循环结构。

图9.1程序的控制结构

9.1.2程序的控制结构图9.1程序的控制结构839.1.3结构化程序设计方法

结构化程序设计采用自顶向下、逐步求精和模块化的分析方法。自顶向下是指对设计的系统要有一个全面的理解,从问题的全局入手,把一个复杂问题分解成若干个相互独立的子问题。逐步求精是指程序设计的过程是一个渐进的过程,先把一个子问题用一个程序模块来描述,再把每个模块的功能逐步分解细化为一系列的具体步骤。模块化是结构化程序的重要原则。所谓模块化就是把大程序按照功能分为较小的程序。9.1.3结构化程序设计方法849.1.4程序文件的建立与执行

1.命令方式建立或修改程序文件命令格式:MODIFYCOMMAND[<程序文件名>|?]MODIFY.FILE.[〈文件名〉|?]

功能:启动VFP提供的文本编辑器来建立或编辑程序文件。2.菜单方式建立编辑程序文件

9.1.4程序文件的建立与执行1.命令方式建立或修改程序85命令格式:DO<程序文件名>功能:将程序文件从磁盘调入内存,编译成.FXP目标文件后并执行。3.程序文件的执行

菜单方式:①.CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。②.RETURN:结束程序执行,返回调用它的上级程序,若无上级程序则返回命令窗口。③.QUIT:结束程序执行并退出Visual.FoxPro系统,返回操作系统。

命令格式:DO<程序文件名>3.程序文件的执行菜869.2顺序结构程序

顺序结构是最简单、最基本的一种程序结构。在顺序结构程序中,各命令按照各自出现的先后顺序,依次执行。9.2顺序结构程序顺序结构是最简单、最基本的一879.2.1程序文件中的辅助命令

一.输入类语句格式1:STORE<表达式>TO<内存变量名表>格式2:<内存变量>=<表达式>功能:给内存变量赋值。㈠.赋值语句9.2.1程序文件中的辅助命令一.输入类语句格式188㈡.交互式语句/键盘输入命令

1.字符串数据输入命令格式:ACCEPT[<提示信息>]TO<内存变量>功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。

注:ACCEPT命令只能接受字符型常量,输入时不需加定界符。键盘输入命令主要用于程序执行过程中原始数据的输入。㈡.交互式语句/键盘输入命令1.字符串数据输入命令格式89例9-1:要求用户从键盘上输入用户名,然后把输入的用户名显示出来。ACCEPT“请输入用户名:”TONAME?NAME例9-1:要求用户从键盘上输入用户名,然后把输入的用户名显示90格式:INPUT[<提示信息>]TO<内存变量>2.数据输入命令功能:在屏幕上显示提示信息,等待用户从键盘输入,再把输入内容赋值给指定的内存变量。

注:INPUT命令能接受任何类型的表达式:①输入C型数据时,要使用‘’或“”作为定界符;②输入L型数据时,.T.和.F.,两边的.不能省;③输入D型数据时,要用{}或CTOD()将字符串转成日期型变量。格式:INPUT[<提示信息>]TO<内存变量>2.91例9-2:求任意两数之和。INPUT“请输入一个数x:”TOX?X+YINPUT“请输入另一个数y:”TOY例9-2:求任意两数之和。INPUT“请输入一个数x:”92J=2800

INPUT“输入J+200:”TOA

ACCEPT“输入J+200:”TOB?“A=”,A?“B=”,B注:执行时,先后两次输入同样的内容:J+200例9-3:

给出下列A、B的结果J=2800例9-3:给出下列A、B的结果93格式:WAIT[<提示信息>]TO<内存变量>[TIMEOUT<数值表达式>]3.只能输入一个字符的命令功能:当程序执行某一处需要暂停时使用此命令。

注:WAIT命令响应速度快,它只接受一个字符,不需用户键入回车键。格式:WAIT[<提示信息>]TO<内存变量>3.94****数据表操作命令菜单****打开工作数据表增加数据表记录删除数据表记录修改数据表记录打印数据表记录关闭工作数据表?“您选择的是第”+CHOICE+“个选项”WAIT“请选择相应代码:”TOCHOICE例9-4:****数据表操作命令菜单****?“您选择的是第”95格式:@<行,列>SAY<提示信息>GET<变量>[RANGE<数值表达式1>,<数值表达式2>]

READ4.格式输入语句功能:在屏幕指定的坐标位置上显示提示或输入数据。

②READ一般与GET联合起来用:当有READ时,GET<变量>的内容可以从键盘上修改;没有READ时,GET后的变量只能显示内容,不能修改;一个READ可以修改它前面的多个GET项的内容,但它可以由CLEARGETS命令隔断。注:①<变量>:该变量应在其前面定义过(赋初值)。格式:@<行,列>SAY<提示信息>GET<变量96@8,18SAY“****数据表操作命令菜单****”@9,18SAY“1.打开工作数据表”@10,18SAY“2.增加数据表记录”@11,18SAY“3.删除数据表记录”@12,18SAY“4.修改数据表记录”@13,18SAY“5.打印数据表记录”@14,18SAY“6.关闭工作数据表”@18,28SAY“您选择的是:”+LTRIM(STR(CHOICE))@16,28SAY“请选择相应代码:”GETCHOICEREAD例9-5:@8,18SAY“****数据表操作命令菜单97二.输出类语句1.非格式输出语句

格式1:?<内存变量名表>格式2:??<内存变量名表>注:语句1是在光标所在行的下一行开始显示,语句2则是在当前光标位置开始显示。功能:显示内存变量、常量或表达式的值。二.输出类语句1.非格式输出语句格式1:?<内98格式:@<行,列>SAY<表达式>

[FUNCTION<功能符>][PICTURE<格式符>]2.格式输出语句功能:按指定的坐标位置在屏幕上输出表达式的值。

注:

若选用PICTURE、FUNCTION子句,则按一定的格式输出,分别见教材P131的表6.1、6.2。格式:@<行,列>SAY<表达式>2.格式输出语句99格式:TEXT

<输出显示内容>

ENDTEXT

3.文本输出语句功能:在屏幕上原样显示TEXT和ENDTEXT之间的内容。

注:

TEXT、ENDTEXT是一条子句,不能省略其中任一条子句。格式:TEXT3.文本输出语句功能:在屏幕上原样显示TE100****数据表操作命令菜单****打开工作数据表增加数据表记录删除数据表记录修改数据表记录打印数据表记录关闭工作数据表?“您选择的是第”+CHOICE+“个选项”WAIT“请选择相应代码:”TOCHOICE例6-6TEXTENDTEXT****数据表操作命令菜单****?“您选择的是第”101三.设置会话状态语句语句格式2:SETTALKOFF功能语句1:设置会话状态开通。语句2:设置会话状态关闭。语句格式1:SETTALKON三.设置会话状态语句语句格式2:SETTALKOF102四.清屏与注释语句语句格式:CLEAR1.清屏语句功能:清除屏幕上所有显示内容,光标回到屏幕左上角。四.清屏与注释语句语句格式:CLEAR1.清屏语句功1032.注释语句语句格式2:*<注释内容>注:语句1、2、3在程序中,系统不执行。语句格式1:NOTE<注释内容>功能:在程序中加入说明性语句。语句格式3:&&<注释内容>2.注释语句语句格式2:*<注释内容>注:语句104五.RETURN命令注:一般RETURN出现于程序末尾。格式:RETURN[<表达式>/TOMASTER/TO<程序名>]功能:结束一个程序的执行。五.RETURN命令注:一般RETURN出现于程序末尾。105六.终止程序执行语句语句格式2:QUIT注:语句1:在终止程序执行后,返回到VFP命令状态;语句2:返回到操作系统状态。语句格式1:CANCEL功能:终止程序执行,关闭所有打开的命令文件。六.终止程序执行语句语句格式2:QUIT注:语句格式1106顺序结构程序:按语句的先后顺序组织的程序,即把处理过程的各个步骤按执行的先后顺序列出。其流程图如右图所示。顺序结构程序设计

A

B

C

N图中箭头表示程序执行的方向,方框代表不同的可执行语句。顺序结构程序:按语句的先后顺序组织的程序,即把处理过程的各个107例9-7

变量的初始化和变量的赋值。SETTALKOFFSTORE0TOX,Y,ZA=3B=A+1C=A*B?X,Y,Z?A,B,CSETTALKON例9-7变量的初始化和变量的赋值。SETTALK108例9-8

执行以下命令序列,问答问题:最后显示的值是:所有职工的平均工资;所有工资在1000元以上的职工的平均工资;所有工资在1000元以上的职工人数;所有职工人数。USEzgbSUM基本工资FOR基本工资>1000TOSGZCOPYFOR基本工资>1000TOGZK2USEGZK2num=reccount()ave=sgz/num?ave例9-8执行以下命令序列,问答问题:最后显示的值是:109在计算机应用的许多场合,要求程序根据不同的条件采用不同的处理方法。如果条件满足,则执行某一些语句;如果条件不满足,则执行另一些语句。这些需要根据判断条件来控制程序走向的程序设计称为选择结构程序设计,又称分支结构程序设计。VisualFoxPro提供双分支选择语句、多分支选择语句两种选择结构。9.3选择结构程序设计在计算机应用的许多场合,要求程序根据不同的条件采用不同的处理110

ENDIF后的语句语句序列1

ENDIF后的语句语句格式:IF

<条件>

<语句序列1>ENDIF

条件9.3.1双分支选择语句(选择判断语句)

条件.T..F.语句序列1.Y..N.语句序列2

[ELSE<语句序列2>]ENDIF后的语句语句序列1ENDIF后的语句语句格式:111注:(1)

IF和ENDIF必须配对使用,而ELSE可选。(2)

IF、ELSE、ENDIF必须各占一行。(3)<条件>可以为关系表达式、逻辑表达式。(4)在<语句序列1>和<语句序列2>中可以嵌套IF语句。执行过程:如果<条件>成立,就执行语句序列1;如果<条件>不成立,执行语句序列2。注:执行过程:112例

请改用分支结构语句编程计算电费:不超过50度,每度0.52元;超过50度时,超出部分每度0.75元。SETTALKOFFINPUT“请输入所用电量:"TODLDF=IIF(DL<=50,0.52*DL,0.52*50+0.75*(DL-50))?“应缴电费为:”+LTRIM(STR(DF,10,2))+"元"SETTALKONRETURN例请改用分支结构语句编程计算电费:不超过50度,每度113SETTALKOFFINPUT"请输入行李重量:"TOWIF

1YF=0.22*WELSEYF=0.22*40+

1ENDIF?"应交托运费为:"+LTRIM(STR(YF,10,2))+"元"SETTALKONRETURN例火车托运行李:每人不超过40公斤,每公斤0.22元;超过40公斤时,超出部分每公斤0.40元。填空完成以下程序。W<40(W-40)*0.4SETTALKOFF例火车托运行李:每人不超过114SETTALKOFFSetdefatof:\jfvfp\prgUSEzgbACCEPT“请输入要查找人的姓名:”TONLOCATEALLFORXM=NIFFOUND()DISP

ELSE?[查无此人]ENDIFUSESETTALKONRETURN例

编程:在ZGB.DBF中查找某人。SETTALKOFF例编程:在ZGB.1159.3.2多分支选择语句(选择语句|情况语句)说明:①DOCASE和第一个CASE子句之间不能插入任何语句。②DOCASE和ENDCASE必须配对使用,且DOCASE,CASE,OTHERWISE和ENDCASE各子句必须各占一行。③在<语句序列>中可嵌套情况语句。

语句格式:

DOCASE

CASE<条件表达式1><语句序列1>

CASE<条件表达式2><语句序列2>┇

CASE<条件表达式n><语句序列n>[OTHERWISE<语句序列n+1>]

ENDCASE

9.3.2多分支选择语句(选择语句|情况语句)说明:语句格116功能:系统依次测试语句中各个条件表达式的值:若为真,即执行相应<条件表达式>后的<语句序列>,然后脱离情况语句,执行ENDCASE的下一语句。若所有的条件表达式的值均为假,则执行OTHERWISE后面的语句序列,然后脱离情况语句,执行ENDCASE下一语句。开始判断语句序列1序列2序列n序列n+1ENDCASE后面的语句条件1条件2条件n其它……功能:系统依次测试语句中各个条件表达式的值:若为真,即执行117例

已知cjb.dbf中包含xingming,avcj等字段。试用avcj来判断该生成绩属于优(≥90)、良(≥80)、及格(≥60)或不及格(<60)。USEcjbACCEPT′请输入姓名:′TOxmLOCATEFORALLTRIM(xingming)=ALLTRIM(xm)n=avcjDOCASE

CASEn>=90dj=″优″

CASEn>=80dj=″良″

CASEn>=60dj=″及格″

OTHERWISEdj=″不及格″ENDCASE@5,10SAYxingming+[同学的成绩等级为:]+dj例已知cjb.dbf中包含xingming,avcj等字118A=3000DOCASE

CASEA<1000B=A/2

CASEA>=1000B=A

CASEA>=2000B=2*A

CASEA>=3000B=3*AENDCASE?B例

阅读下列程序段,写出运行结果:

例阅读下列程序段,写出运行结果:119SettalkoffSetdefatof:\yyfoxclearcho=0@8,18SAY“****数据表操作命令菜单****”@9,18SAY“1.打开工作数据表”@10,18SAY“2.增加数据表记录”@11,18SAY“3.删除数据表记录”@12,18SAY“4.修改数据表记录”@14,18SAY“5.关闭工作数据表”@15,28SAY“请选择相应代码:”GETchoReadDocase

casecho=1accept“请输入表文件名:”tobmuse&bm例

利用CASE语句实现简单的菜单功能

Settalkoff例利用CASE语句实现简单的菜120

casecho=2append

casecho=3input“请输入要删除的记录号:”tojlhgojlhdele

casecho=4browse

casecho=5use

otherwise

@15,28SAY“选择代码错!”

endcaseSettalkonreturncasecho=2121循环,就是按给定的条件连续地重复执行一段特定功能的程序。循环结构也称为重复结构。9.4循环结构程序设计

VisualFoxPro给出了三种循环结构:条件循环(DOWHILE……ENDDO)计算循环(FOR……ENDFOR)扫描循环(SCAN……ENDSCAN)循环,就是按给定的条件连续地重复执行一段特定功能的程122语句格式:DOWHILE<条件><语句序列1>[LOOP]<语句序列2>[EXIT]<语句序列3>

ENDDO

循环体

ENDDO后的语句条件.T..F.条件循环结构流程图一、条件循环循环体功能:有条件连续地重复执行DOWHILE与ENDDO之间的语句序列,直到<条件>为假或因执行EXIT语句而结束。条件语句格式:循环体ENDDO后的语句条件.T..F.条件循123(2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后面的语句,转回DOWHILE处重新判断。其作用相当于一个特殊的“短路”返回控制。(3)循环体中的EXIT也是可选项。遇到它时便无条件地退出循环,转到ENDDO后面的语句。其作用相当于一个紧急出口。(4)通常LOOP或EXIT出现在循环体内嵌套的分支语句中,根据条件来决定是LOOP回去,还是EXIT出去。功能说明:(1)系统执行该语句时,先判断循环开始DOWHILE的条件是否成立,如果条件为真,则执行循环体中的语句序列。当执行到ENDDO时,返回到DOWHILE,再次判断条件是否为真,以确定是否再次执行循环体。若条件为假,则结束循环,执行ENDDO后面的语句。如果第一次判断条件时,条件即为假,则循环体一次都不执行,这就是称为“先判断后执行”的语句。(2)循环体中的LOOP是可选项。遇到LOOP时,不再执行后124SETTALKOFF

SETTALKONRETURNCLEAR?[OK]?[OK]?[OK]…例在屏幕上换行显示字符串“OK”20次SETTALKOFFSETTALK125i=1?[OK]i=i+1ENDDODOWHILESETTALKOFF

SET

温馨提示

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

评论

0/150

提交评论