欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    VFP第7章 结构化程序设计.ppt

    • 资源ID:2332212       资源大小:835.50KB        全文页数:76页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VFP第7章 结构化程序设计.ppt

    Visual FoxPro,1,第七章,结构化 程序设计,Visual FoxPro,2,7.1.1 程序设计的概念 交互工作方式,要求用户必须比较熟悉数据库知识,了解数据组织结构,如果要同时对数据表格多次进行某些操作,就必须反复执行相关命令,这些命令不被保存。对于使用大量数据的最终用户来说,直接使用交互方式管理数据是不现实的。因此,要建立真正的管理信息系统必须编制程序。程序设计反映了利用计算机解决问题的全过程,先要对问题进行分析并建立数学模型,然后考虑数据的组织方式和算法,进行算法设计,画出流程图,并用某一种程序设计语言编写程序,最后调试程序,使之运行后能产生预期的结果。这个过程称为程序设计。,7.1 程序设计基础,Visual FoxPro,3,程序执行方式是预先把多条命令按一定的规则组织成一个有机的序列,这个命令序列称为程序。程序存放在程序文件中,运行程序时,系统按照一定的顺序自动执行文件中的命令。程序设计方法是软件工程的一个重要组成部分。在程序设计中使用最广的是“结构化程序设计方法”。他要求程序按照一定的规则编写,具有良好的顺序结构,且容易阅读和理解。结构化程序设计要求程序由若干个“基本结构”顺序构成,每个基本结构作为程序的一个“单元”,每个“单元”由一个或若干个语句组成,若干个“单元”组成一个结构化程序。,Visual FoxPro,4,程序流程图:用一些符号来表示各种操作,形象直观、简单,易于理解、修改和交流。,【例】用框图描述如下函数的求解过程:,start,Input x,X0?,y=5,y=-5,Output y,end,N,Y,Visual FoxPro,5,7.1.2 程序的控制结构结构化程序有三种基本结构:顺序结构、选择结构和循环结构。1.顺序结构 在这种结构中语句的执行是按照出现的先后顺序。A块执行完毕后,再执行B块,该结构只有一个入口和一个出口。A块、B块可以是若干条语句,也可以是一个基本结构。2.选择结构 这种结构的特点是根据条件的真假,选择两个或多个分支中的一个分支来执行。B1块、B2块中只有一个块被执行,该结构只有一个入口和一个出口。,Visual FoxPro,6,3.循环结构该结构的特点是根据条件,重复执行一个语句块。重复执行的部分称为循环体。当给定条件满足时,执行B块,执行B块后再返回测试条件是否满足,如此循环反复执行B块,直到条件测试不满足为止。B块可以是单个语句,也可以是基本块。该结构只有一个入口,只有一个出口。,4.结构化程序的特点*任何结构化程序都可以分解为三种“基本结构”。*每一个基本结构只有一个入口。*每一个基本结构只有一个出口。*没有永远执行不到的语句。*没有死循环。*修改一个基本结构时,不影响其他基本结构中的语句。*整个结构化程序层次分明,结构清晰。,Visual FoxPro,7,7.1.3 程序文件的建立与执行1.建立或修改程序文件建立或修改程序文件也有菜单和命令两种操作方式。(1)命令方式 要建立或者修改一个程序文件,使用MODIFY命令。格式是:MODIFY COMMAND 其中指建立或者修改的文件。如果省略文件名,在关闭窗口时要求输入文件名。如果没有给文件指定扩展名,则默认为.prg。(2)菜单方式 选择“文件”菜单中的“新建”命令,并选择“程序”单选按钮,并单击“新建文件”命令按钮。在文本编辑窗口输入程序内容。,Visual FoxPro,8,2.保存程序 不管是用命令方式还是用菜单方式,打开文本编辑窗口后,就可以一条一条地输入命令。在输入过程中出现错误,可用编辑命令进行修改。当程序建立或修改完毕后,可用Ctrl+W或Ctrl+End存盘,退出编辑窗口。3.执行程序 执行一个Visual FoxPro程序文件命令方式格式为:DO 如果文件名不带扩展名,则Visual FoxPro按下列顺序寻找并执行这些程序:可执行文件(.EXE)、应用程序(.app)、编译后的目标程序文件(.fxp)和程序文件(.prg)。,Visual FoxPro,9,4.程序文件中的辅助命令 1).程序注释命令 NOTE|*&2)常用状态设置命令(1)置会话状态命令 命令格式:SET TALK ON|OFF(2)置打印状态命令 命令格式:SET PRINT ON|OFF 3)程序结尾的专用命令:RETURN&结束程序执行并返回到调用它的上级环境中继续。允许缺省。CANCEL&终止程序的运行并清除程序的私有变量,返回到命令窗口。QUIT&退出VFP系统,返回到操作系统状态。,Visual FoxPro,10,例EX501:编程查询并显示一个入学成绩570的男学生信息MODI COMM E1(或MODI FILE E1.PRG)*查询 SET TALK OFF CLEAR USE 学生 LOCA FOR 入学成绩570 AND 性别=“男”DISP USE SET TALK ON RETURN DO E1,7.2 顺序结构程序,Visual FoxPro,11,7.2.1 交互式输入命令1.字符串接收命令 字符串接收命令显示提示信息,等待用户从键盘输入一个字符串并按回车键后,存入指定的内存变量中。命令格式为:ACCEPT TO 例E2 编程实现从键盘输入某数据库的文件名,并要求打开该数据库中的某张表并显示其中的内容。SET TALK OFFCLEARACCEPT 请输入数据库名:TO AOPEN DATABASE&AACCEPT 请输入表名:TO BUSE&BLISTUSESET TALK ONRETURN,Visual FoxPro,12,2.任意数据输入命令 命令格式:INPUT TO 该命令与ACCEPT命令的区别在于键入的数据类型不同,它不仅可以接收字符型数据,还可以接收数值型、日期型和逻辑型表达式的值。其中,对于字符串的输入必须用定界符括起来;输入数值或表达式,不加任何定界符;输入日期型数据,除使用日期型的格式外,还要用大括号将其括起来。例如 INPUT 请输入一个数值表达式:TO num INPUT 请输入一个日期:TO dat 执行情况如下:请输入一个数值表达式:98/10/10 请输入一个日期:1998-10-10,Visual FoxPro,13,例E3:从键盘输入两个任意正数,编程求出以这两个数为长和高的三角形面积。MODI COMM E3SET TALK OFFCLEARINPUT 三角形的长为:TO AINPUT 三角形的高为:TO BS=(A*(B)/2?三角形面积为:,SSET TALK ONRETURNDO E3,Visual FoxPro,14,3.单个字符接收命令 WAIT TO WINDOW NOWAIT TIMEOUT 命令暂停程序执行,等待用户键入任何一个字符后继续。使用说明:(1)当命令中有TO 可选项,则定义一个字符型内存变量,并将键入的一个字符存入该变量中。(2)若包含提示信息,则在屏幕上显示提示信息的内容;若没有该选择项,则显示系统默认的提示信息:Press any key to continue(3)如果选择WINDOW,在VFP主窗口的左上角会出现一个提示信息窗口,有关提示信息便在此窗口中显示。(4)如果选择NOWAIT,则命令并不会暂停程序的执行,仅在VFP主窗口的左上角提示窗口中显示提示信息,并且用户只要一移动鼠标或按下任意键,提示窗口便会自动被清除。(5)TIMEOUT子句用于指定WAIT命令等待的时间。如果在由所限定的秒数之内用户仍未移动鼠标或按下任一键,则程序便继续执行。(6)WAIT只需用户按一个键,命令的执行速度快,常用于等待用户对某个问题的确认。,Visual FoxPro,15,4.三条输入命令的异同(1)WAIT 只允许字符型,且C=1。(2)ACCEPT 也只允许字符型,且C254。(3)INPUT允许C型、N型、D型和L型。当是C型时,输入要加引号,且C254。当是N型时,可以直接输入,且N19。当是D型时,要用严格的日期格式。当是L型时,两边的圆点不能丢。,Visual FoxPro,16,5、非格式输出命令:命令格式:?|?功能:一个问号是从屏幕下一行的第一列开始显示表达式表的结果,二个问号是从屏幕当前行、当前列开始显示表达式表的结果。“表达式表”可以由一个或多个表达式组成的输出项,若多个表达式,则表达式之间用逗号“,”分隔。,6、格式输出命令的基本形式命令格式:SAY 命令在指定位置输出表达式的值。(1)指定了输出的位置。标准屏幕是25行80列,左上角顶点为(0,0),右下角坐标为(24,79)。(2)行、列都可为表达式,还可为小数。,例如:2,10 say“请输入记录号:”2,10 say 100/5/2,Visual FoxPro,17,格式输入命令:命令格式:say get default 功能:在屏幕上按“行、列”指定位置上显示“say”子句的“表达式1”的值,并可修改“get”子句的变量值。注意:“get”子句的变量必须用“read”命令来激活。激活命令:命令格式:read 功能:用于激活“get”子句中的变量。,【例】set talk off clear use students appe blank 10,20 say“请输入学号”get xh1 default space(8)11,20 say“请输入姓名”get xm1 default space(8),read repl xh with xh1,xm with xm1 disp set talk on use,Visual FoxPro,18,7.2.2 顺序结构:顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。【例5】将学生表中学号为20050008的学生姓名“万华”改为“万强”。CLEARSET TALK OFFOPEN DATABASE学生学籍USE学生ACCEPT 请输入要修改记录的学号:to xh LOCATE FOR 学号=xhREPLACE 姓名 WITH 万强USECLOSE DATABASESET TALK ONRETURN,Visual FoxPro,19,7.3.1 双分支选择语句 语句格式:IF ELSE ENDIF 执行过程:如果成立,就执行命令组1,命令组1执行完成后就转到ENDIF之后的命令。如果不成立,当有ELSE子句时,执行命令组2,命令组2执行完成后转去执行ENDIF之后的命令,当没有ELSE子句时,则直接转到ENDIF之后的命令。,7.3 选择结构程序,e,.T.,BLOCK1,ENDIF,.F.,BLOCK2,Visual FoxPro,20,【例6】试编一程序,根据输入的三角形边长,求三角形面积。,clea input”请输入边长a:”to a input”请输入边长b:”to b input”请输入边长c:”to c if a+bc or b+ca or c+ab WAIT(”输入的三个边长不能组成三角形!”)retu endif l=(a+b+c)/2?”三角形面积s=”,sqrt(l*(l-a)*(l-b)*(l-c)retu,Visual FoxPro,21,例E7:任意输入一个正整数,编程判断是“奇数”还是“偶数”。,SET TALK OFF CLEAR INPUT 请输入一个正整数:TO X IF MOD(X,2)=0&INT(X/2)=X/2?X,该数为偶数 ELSE?X,该数为奇数 ENDIF RETURN,Visual FoxPro,22,例E8:输入两个数,按大小顺序打印。,INPUT TO I1 INPUT TO I2IF(I1=I2)ELSE K=I1 I1=I2 I2=KENDIF SET PRINT ON?I1,I2RETU,BLOCK1为空。,Visual FoxPro,23,7.3.2嵌套分支语句,如果IF的分支的一个块中又包含一个完整的分支结构,称这种形式为嵌套。,IF(e1)IF(e2)ELSEENDIFELSE ENDIF,外层块,内层块,最内层的IF语句和其最近的ENDIF匹配,从内到外;为便于识别可采用缩格写法;,Visual FoxPro,24,CLEARINPUT 请输入一个正整数:TO PIF P500 IF P=0 R=0 ELSE IF P100 R=0.03 ELSE R=0.04 ENDIF ENDIF ELSE IF P1000 R=0.05 ELSE IF P2000 R=0.06 ELSE R=0.08 ENDIF ENDIFENDIFTAX=P*R?TAX=,TAXRETURN,例E9:假定利润的征税率规定如下:利润(P)在100元以下的税率为3%,100元P500元的税率为4%,500元P1000元的税率为5%,1000元P2000元的税率为6%,P2000元的税率为8%,利润为0或亏本的不征税。,Visual FoxPro,25,例E10:根据键入X的值,计算下面分段函数的值,并显示结果。SET TALK OFFCLEARINPUT X=TO XIF X0 IF X10 Y=X*X+1 ELSE Y=3*X*X-2*X+1 ENDIFELSE Y=X*X+4*X-1ENDIF?分段函数值为:+STR(Y,10,2)SET TALK ONRETURN,Y=X2+4X-1(X0)Y=3 X2-2X+1(0X10)Y=X2+1(X10),Visual FoxPro,26,7.3.3 多分支选择语句 语句格式:DO CASE CASE CASE OTHERWISE ENDCASE,说明:1.DO CASE与第一个CASE语句间不 能有任何语句。2.DO CASE与ENDCASE要成对出现。,Visual FoxPro,27,例E11:征税问题:1000以下税率为3%10002000税率为4%20003000税率为5%3000以上税率6%,INPUT TO ADO CASE CASE A1000 T=0.03 CASE A2000 T=0.04 CASE A3000 T=0.05 OTHE T=0.06ENDCASETA=A*T?TA=,TARETU,Visual FoxPro,28,例E12:用DO CASE语句修改E10计算分段函数的例子。SET TALK OFFCLEARINPUT X=TO XDO CASE CASE X0.AND.X10 Y=X*X+1ENDCASE?分段函数值为:+STR(Y,10,2)SET TALK ONRETURN,Visual FoxPro,29,例E13:在学生库中 进行追加、修改、插入和删除操作。SET TALK OFF CLEAR USE 学生 TEXT 1。追加记录 2。修改记录 3。插入记录 4。删除记录 5。退出 ENDTEXT WAIT“请输入你的选择(1-5):”TO CH DO CASE CASE CH=1 APPEND CASE CH=2 BROWSE CASE CH=3 INPUT“请输入插入记录号:”TO IB GO IB INSERT,CASE CH=4 INPUT“请输入删除记录 号:”TO DB GO DB DELETECASE CH=5?结束,再见!OTHE?重新输入数据!ENDCASE SET TALK ON RETU,Visual FoxPro,30,前面讲述了顺序结构的程序设计和分支结构的程序设计,顺序结构程序中的指令只执行一次就结束了,分支结构程序则要根据条件的不同,执行一组命令序列,也只执行一次,或者直接跳过,一条命令也不执行。而在日常生活中,需要重复地做某些事情的情况也是很多的。凡需要重复做的工作,在计算机中可用循环结构程序来实现。VFP提供三条语句支持循环结构程序设计:DO WHILE-ENDDO,FOR-ENDFOR,SCAN-ENDSCAN。,7.4 循环结构程序,Visual FoxPro,31,7.4.1 DO WHILE循环 语句格式:DO WHILE EXIT LOOP ENDDO,当循环语句首先测试WHILE后面的条件表达式,如果条件为真,则执行DO WHILE和ENDDO之间的命令序列;如果条件为假,则转到ENDDO之后的命令继续执行。每执行完一次DO WHILE和ENDDO之间的命令序列(这部分也叫循环体)后,程序回到DO WHILE处,重新判断条件表达式,从而实现循环。,条件:逻辑表达式;EXIT:强制退出循环;LOOP:使循环短路,返回DO WHILE语句。,Visual FoxPro,32,【E14】编程求246100之和。SET TALK OFFCLEARS=0I=2DO WHILE I=100 S=S+I I=I+2ENDDO?“246100”,SSET TALK ONRETURN,Visual FoxPro,33,(1)DO WHILE和ENDDO必须一一对应,且条件表达式的值必须是逻辑型.T.或.F.,一般对数据库用.NOT.EOF(),对建立菜单程序中的循环条件用.T.。,(2)可选项LOOP可以在循环体中的任何位置,它的功能是跳过LOOP与ENDDO之间的所有语句,而返回起始语句DO WHILE。(3)选择子句EXIT也可放在循环体中任何位置,它的功能是使程序执行直接跳出当前循环,去执行ENDDO后面的第一个语句。(4)循环起始语句DO WHILE与结束语句ENDDO都不会改变起始语句中条件表达式的值,因此,在循环体中必须包含能对的值进行修改的语句,否则,有可能进入死循环。,注意:,Visual FoxPro,34,构成循环的条件一般有三种形式:1.变量=初值 DO WHILE 变量=终值 变量=变量+步长 ENDDO2.DO WHILE.T.EXIT ENDDO3.DO WHILE.NOT.EOF()SKIP ENDDO,使条件趋假的语句,强制退出循环语句,改变数据库的指针语句,Visual FoxPro,35,例E15:有限次循环计算1+2+3+.+100的和。,*E15.PRGSET TALK OFFX=0S=0DO WHILE X100 X=X+1 S=S+XENDDO?SSET TALK ONRETURN,【例】编程求1100之间奇数之和。,cleastore 0 to i,tdo while i100 i=i+1 if int(i/2)=i/2 loop endif t=t+ienddo?1100奇数和为:,tretu,Visual FoxPro,36,*EX0519.PRGSET TALK OFFUSE SBDO WHILE.T.CLEAR TEXT 1-追加 2-浏览 3-退出 ENDTEXT ACCEPT 请输入功能号(1-3):TO XZ DO CASE CASE XZ=1 APPEND CASE XZ=2 BROWSE CASE XZ=3 EXIT OTHERWISE LOOP ENDCASEENDDOUSESET TALK ONRETURN,例E16:无限次循环(循环的次数不定):假设有一主控程序,控制对“学生.DBF”数据的追加、浏览等模块,可编程如下:,Visual FoxPro,37,例E17:逐条显示在“学生学籍”数据库的“学生”表中性别为“男”的所有记录。SET TALK OFFCLEAROPEN DATABASE 学生学籍USE 学生DO WHILE.NOT.EOF()IF 性别=男 DISPLAY ENDIF SKIPENDDOUSECLOSE DATABASESET TALK ONRETURN,Visual FoxPro,38,多重循环:在一个循环程序中又包含了另一个完整的循环称多重循环,即循环嵌套。被循环体所包含的循环称为内层循环。DO WHILE DO WHILE ENDDO ENDDO注意:多重循环允许与IF-ENDIF或DO CASE-ENDCASE 语句配合使用,但必须完全嵌套,不能出现交叉。,Visual FoxPro,39,多重循环的说明,(1)循环嵌套时,内循环必须完整地包含于外循环之中,不得交叉;,DO WHILE I=3 DO WHILE J=5 J=J+1 ENDDO I=I+1 ENDDO,(2)同层循环可以使用相同的循环控制变量。如果嵌套,则不能使用相同的循环控制变量。,I=1DO WHILE I=3.ENDDO I=1DO WHILE I=5.ENDDO,I=1 DO WHILE I=3 I=1 DO WHILE I=5 ENDDOENDDO,DO WHILE I=3 DO WHILE J=5 I=I+1 ENDDO J=J+1ENDDO,OK!,OK!,ERR!,ERR!,Visual FoxPro,40,I 1 2 3 4 5 6 7 8 9J 1 11 12 19 2 21 22 29 9 91 92.99,如打印一99的乘法表:,I=1时,J从1变化到9,完成I*J。,内层循环,外层循环,执行过程:进入循环后,先执行外层循环,进入内层循环后,执行完内层循环后,再到外层。如此往复,直到结束。,DO WHILE DO WHILE DO WHILE ENDDO 结束条件N ENDDO 结束条件2ENDDO 结束条件1,Visual FoxPro,41,例E19:打印九九乘法表 SET TALK OFF CLEAR I=1 DO WHILE I=9 J=1 DO WHILE J=I K=J*I?STR(J,1)+*+STR(I,1)+=+STR(K,2)+J=J+1 ENDDO I=I+1?ENDDO RETURN,1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9 1*9=9 2*9=18 3*9=27 9*9=81,Visual FoxPro,42,例E20:编程打印下面图形.*SET TALK OFF CLEAR I=1 DO WHILE I=5 J=1 DO WHILE J=I?*J=J+1 ENDDO I=I+1?ENDDO RETU,Visual FoxPro,43,7.4.2 FOR循环 语句格式:FOR=TO STEP EXIT LOOP ENDFOR|NEXT执行过程:首先计算初值、终值和步长值,并将初值赋给循环变量,再将循环变量的值与终值比较,如果循环变量的值在初值与终值范围内,则执行FOR与ENDFOR之间的命令,然后循环变量按步长值增加或减小,再重新比较,直到循环变量的值不在初值与终值范围内,结束循环,转去执行ENDFOR后面的第一条命令。循环变量可以是一个内存变量或数组元素。、和均为数值型表达式。如果省略STEP子句,则默认步长值是1。退出循环后,循环变量的值等于最后一次循环时的值为加上步长值。,Visual FoxPro,44,例E21:求1000之内所有偶数之和。SET TALK OFFCLEARS=0FOR I=0 TO 1000 STEP 2 S=S+INEXT?“1000之内所有偶数之和为”,SSET TALK ONRETURN,Visual FoxPro,45,例E22:从键盘输入10个数,编程找出其中最大值和最小值。SET TALK OFF CLEAR INPUT“从键盘输入一个数:”TO A STORE A TO max,min FOR I=2 TO 10 INPUT“从键盘输入一个数:”TO A IF maxA min=A ENDIF ENDFOR?“最大值为:”,max?“最小值为:”,min SET TALK ON RETURN,Visual FoxPro,46,例E23:编程打印乘法口诀表,*E23.PRGSET TALK OFFCLEARFOR A=1 TO 9 FOR B=1 TO A P=A*B?STR(A,1)+X+STR(B,1)+=+STR(P,2)ENDFOR?ENDFORSET TALK ONRETURN,1X1=1 2X1=2 2X2=23X1=3 3X2=6 3X3=99X1=9 9X2=18 9X9=81,Visual FoxPro,47,7.4.3 SCAN循环 语句格式:(专用于数据库)SCAN FOR WHILE EXIT LOOP ENDSCAN执行过程:首先将表记录指针移动到指定范围内的第一条记录上,然后判断记录指针是否超过指定范围以及该记录是否满足条件子句所描述的条件,若记录指针超过指定范围或该记录不满足条件子句所描述的条件,则结束扫描循环,执行ENDSCAN后面的语句。对指定范围内满足条件的记录执行命令组。若省略范围,则默认为ALL。SCAN语句自动把记录指针移向下一个符合指定条件的记录,并执行同样的命令组。,Visual FoxPro,48,例E24:输出“学生学籍”数据库的“学生”表中所有党员的姓名、性别和入学成绩。SET TALK OFFCLEAROPEN DATABASE 学生学籍USE 学生SCAN FOR 党员?姓名,性别,入学成绩ENDSCANUSECLOSE DATABASESET TALK ONRETURN,Visual FoxPro,49,例E25:分别统计“学生”表中男生和女生的人数。SET TALK OFFCLEAROPEN DATABASE 学生学籍USE 学生STORE 0 TO X,YSCAN IF 性别男 X=X+1 ENDIF IF 性别女 Y=Y+1 ENDIFENDSCAN?男生人数,X,女生人数,YUSECLOSE DATABASESET TALK ONRETURN,Visual FoxPro,50,例E26:显示“学生”表中入学成绩在600分以上的学生名单。SET TALK OFFCLEAROPEN DATABASE 学生学籍USE 学生SCAN FOR 入学成绩600 DISPLAY学号,姓名,入学成绩ENDSCANUSECLOSE DATABASESET TALK ONRETURN,【例】编程逐行显示学生表中入学成绩大于600分的学生学号、姓名、性别和入学成绩。,clear use students go top do while not eof()if rxcj600?xh,xm,xb,rxcj endif skip enddo use,Visual FoxPro,51,7.5.1 子程序、过程和函数 1.子程序在程序中可以通过DO命令调用另一个程序文件,称调用程序为主程序,被调用程序为子程序。子程序也用MODIFY COMMAND命令来建立和修改,扩展名默认为.PRG。子程序和其他程序文件的惟一区别是其末尾或返回处必须有返回语句。命令格式:RETURN TO MASTER|命令功能:中止一个程序、过程或用户定义函数的执行,返回到上一级调用程序。TO MASTER子句,返回到最高一级调用主程序。RETURN 表示将表达式的值返回调用程序,用于自定义函数。,7.5 程序的模块化,Visual FoxPro,52,子程序调用命令与主程序执行命令相同,其格式都为:DO|WITH 其中,WITH 子句指定传递到程序或过程的参数,在中列出的参数可以是表达式、内存变量、常量、字段名或用户定义函数。可把参数放在圆括号中,各参数用逗号分隔。子程序的嵌套调用。主程序可以调用子程序,子程序还可以调用另外的子程序,这就是子程序嵌套调用。,*MAIN.PRGDO BRETURN,*B.PRGDO C1DO C2RETURN,*C1.PRGRETURN,*C2.PRGRETURN TO MASTER,Visual FoxPro,53,例EX0531:根据数据库学生.dbf编写一个菜单程序MAIN.PRG,完成对数据库查询程序CX.PRG和删除程序SC.PRG的调用。*主程序(MAIN.PRG)SET TALK OFF CLEAR USE 学生 DO WHILE.T.TEXT 1.查询 2.删除 3.退出 ENDTEXT ACCEPT“输入选择号(13)”TO K DO CASE CASE K=“1”DO CX CASE K=“2”DO SC CASE K=“3”EXIT OTHERWISE LOOP ENDCASE ENDDO CLOSE ALL RETU,*子程序一(CX.PRG)CLEAR ACCE“请输入待查询学号”TO XH LOCATE FOR 学号=XH disp USE RETU,*子程序二(SC.PRG)CLEAR ACCE“请输入待删除学号”TO XH LOCATE FOR 学号=XH DELE PACK USE RETU,Visual FoxPro,54,2.自定义函数用户根据实际需要,自己加以定义的函数称为自定义函数。(1)自定义函数的结构。一个自定义函数实际上就是一个子程序,惟一的差别是在RETURN语句后带有表达式,以指出函数的返回值。自定义函数的格式:FUNCTION PARAMETERS RETURN(2)自定义函数的调用。自定义函数的调用形式是:()其中,自变量可以是任何合法的表达式,自变量的个数必须与自定义函数中PARAMETERS语句里的变量个数相等,自变量的数据类型也应符合自定义函数的要求。,Visual FoxPro,55,例EX0532:定义一个符号函数。当自变量为正 时返回1,为零时返回0,为负时返 回-1。*符号函数(SGN.PRG)PARA X IF X0 Y=1 ELSE IF X=0 Y=0 ELSE Y=-1 ENDIF ENDIF RETU Y,*主程序(MAIN.PRG)SET TALK OFF CLEAR A1=5 A2=-5 STORE SGN(A1)TO B1 STORE SGN(A2)TO B2?B1,B2 RETU 或:SET TALK OFF CLEAR A1=5 A2=-5 DO SGN WITH A1 B1=Y DO SGN WITH A2 B2=Y?B1,B2 RETU,Visual FoxPro,56,【例6-21】计算圆面积。SET TALK OFFCLEARINPUT 请输入圆的半径:TO R?圆的面积为:,AREA(R)SET TALK ONFUNCTION AREA&计算面积的函数PARAMETER X&形参说明RETURN(3.1416*X*2),Visual FoxPro,57,3过程与过程文件过程是子程序的另一种形式,过程与子程序的不同之处是:子程序是一个独立的文件,当调用子程序时,运行程序时需要多次调用磁盘文件,这样就增加了磁盘的读写次数。而过程是过程文件的一个组成部分,通常可以把多个过程写在一个过程文件中。过程文件被打开时,它所包含的多个过程同时被调入内存,从而克服了调用子程序多次访问磁盘的问题,提高了程序的运行速度。(1)过程的结构。过程的一般格式是:PROCEDURE PARAMETERS RETURN每一个过程均以PROCEDURE 开始,同时定义了过程名,以RETURN结束。过程的调用 格式:DO WITH,Visual FoxPro,58,例EX0534:使用带传递参数的过程调用方式计算三角形面积。SET TALK OFF area=0 STORE.T.TO rep DO WHILE rep CLEAR INPUT 请输入第一边大小:TO x INPUT 请输入第二边大小:TO y INPUT 请输入第三边大小:TO z IF x=0.OR.y=0.OR.z=0.OR.x+y=z.OR.y+z=x.OR.x+z=y?不能够成一个三角形,请重新输入!LOOP ENDIF rep=.F.ENDDO,Visual FoxPro,59,DO sub WITH x,y,z,area?Area=+STR(area,6,2)RETURN PROCEDURE sub PARAMETER a,b,c,s p=(a+b+c)/2 s=SQRT(p*(p-a)*(p-b)*(p-c)RETURN,Visual FoxPro,60,(2)过程文件。一个过程可以以文件形式单独存在,也可以将多个过程合并到一个文件中,这个文件称为过程文件。在过程文件中,每个过程仍然是独立的,可以单独调用。过程文件也是程序文件用MODIFY COMMAND命令进行编辑。过程文件与过程是两个不同的概念,它们有各自的名字。过程文件名是编辑该文件时建立在磁盘文件目录上的文件名;而过程名是用于标识过程文件中某个过程的名字,以便程序调用。一个过程文件最多允许128个过程。,Visual FoxPro,61,例如:假设有三个过程:p1,p2,p3,把它们组织到过程文件proc.prg中。*proc.prg过程文件 PROCEDURE p1?过程p1 RETURN PROCENURE p2?过程p2 RETURN PROCEDURE p3?过程p3 RETURN,Visual FoxPro,62,【例6-19】用过程编写一个求和与乘积的程序。SET TALK OFF S=1 P=1 DO ABC?S=,S SET TALK ONRETURNPROCEDURE ABC M=3 N=5 S=M+N P=S*N?P=,Preturn,Visual FoxPro,63,【例6-20】用带参数的过程计算圆面积。SET TALK OFFYMJ=0INPUT请输入半径TO BJDO SUB1 WITH BJ,YMJ&调用过程SUB1并以传址方式传递参数?圆的面积=,YMJ&显示圆面积RETURN&程序结束语句,允许省略PROCEDURE SUB1&过程SUB1开始语句PARAMETERS R,S&接收参数S=PI()*R*RENDPROC,Visual FoxPro,64,例EX0536:打印S=1+X1/1!+X2/2!+Xn/n!*主程序(MAIN.PRG)SET TALK OFF CLEAR M=1 W=1 F=1 T=1 INPUT“X=”TO X INPUT“N=”TO N SET PROCEDURE TO SS DO WHILE M=N DO C1 WITH M,X,F DO C2 WITH M,T W=W+F/T M=M+1ENDDO?W=,W SET PROCEDURE TOSET TALK ONRETU,*过程文件(SS.PRG)PROC C1 PARA M,X,F F=XMRETU PROC C2 PARA M,T T=1 I=1 DO WHILE I=M T=T*I I=I+1 ENDDO RETU,Visual FoxPro,65,三种区别:1.子程序 PARAMETERS RETU 2.过程 PROCEDURE PARAMETERS RETU 3.自定义函数 PARAMETERS.RETU,Visual FoxPro,66,7.5.2 内存变量的作用域 1、全局内存变量 全局内存变量是指在上、下各级程序中都有效的内存变量。定义全局内存变量或数组需用下面的命令。PUBLIC PUBLIC ARRAY(,),(,),使用说明:中可以包含普通变量,也可以包含数组变量。任何全局内存变量或数组必须先定义,后赋值。定义后尚未赋值的全局变量其值为逻辑值.F.。全局变量在程序结束时不释放。当进入下一级子程序时,已在上级由PUBLIC说明过的与之同名的内存变量可以用PRIVATE命令暂时隐藏起来,作为本级程序的局部变量使用。待本级子程序结束返回上一级程序后,便释放它们作为本级程序的局部变量特性,恢复它们全局变量的特性和内容。,Visual FoxPro,67,2局部内存变量 局部内存变量只能在定义它的程序及其下级程序中使用,一旦定义它的程序运行结束,它便自动被清除。也就是说,在某一级程序中定义的局部变量,不能进入其上级程序使用,但可以到其下级程序中使用,而且当在下级程序中改变了该变量的值时,在返回本级程序时被改变的值仍然保存,本级程序可以继续使用改变后的变量值。例 分析下列程序的执行情况*主程序main.prg r=100 DO sub?P&未定义出错 RETURN*子程序sub.prg p=2*3.14*r?P&628 RETURN,Visual FoxPro,68,

    注意事项

    本文(VFP第7章 结构化程序设计.ppt)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开