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

    VFB程序设计教程教学课件丶第七章.ppt

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

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

    VFB程序设计教程教学课件丶第七章.ppt

    第7章 Visual FoxPro程序设计,7.1 程序与程序文件,Visual FoxPro支持两种程序设计:结构化程序设计(面向过程的编程方式)面向对象的程序设计,7.1.1 程序,1.程序的概念程序是命令的有序集合程序以文本文件的形式存储在磁盘上,称为程序文件程序文件的扩展名为.prg,2.程序方式与交互方式的区别程序可完成复杂的任务,命令只能完成简单任务 命令不被保存,程序可长期保存并可多次修改和运行 一个程序中可以调用其他程序,命令则不能,7.1.2 程序文件的建立、编辑、保存和运行,1建立和编辑程序文件(1)命令方式格式:modify command 说明:扩展名.prg可以省略,由系统自动添加。(2)菜单或工具栏方式,7.1.2 程序文件的建立、编辑、保存和运行,2保存程序文件保存:菜单或工具栏按钮、关闭窗口、组合键【Ctrl+W】【ESC】或【Ctrl+Q】放弃当前修改,7.1.2 程序文件的建立、编辑、保存和运行,3程序文件的运行(1)命令方式运行程序格式:DO With 说明:文件名可以是.prg文件,也可以是其他类型文件 如:.exe、.mpr、.qpr,所以要加上扩展名。(2)菜单或工具栏方式运行程序,7.1.3 程序中常出现的错误,遗漏关键字和变量之间的空格遗漏定界符,或定界符使用了中文标点符号 关键字、变量名和文件名拼写错误内存变量没有初始化 表达式和函数中的数据类型不匹配控制语句缺少结束语句 控制语句嵌套错误,7.2 程序中常用的命令,7.2.1 基本输入命令,1Input命令格式:INPUT 提示信息 TO 功能:从键盘上接收数据(可为任何类型)赋给内存变量说明:提示信息要使用定界符定界,提示信息可以省略不能不输入任何内容直接按回车键输入的字符数据需加定界符,输入日期数据时加大括号,输入逻辑值时加圆点定界符()。举例:input to AAinput 请输入学生姓名:to nameinput 请输入该生的出生日期:to birthInput 请输入该生的党员值:to 党员,2Accept命令格式:ACCEPT 提示信息 TO 功能字符串接收命令,仅从键盘上接收字符型数据并赋给内存变量。输入的字符串不加定界符,否则,系统会认为定界符也是输入字符串本身的一部分。如果想输入123,此时的123也是字符型数据不能用于计算。举例:accept 请输入学生证号 to noaccept to abaccept“请输入学生姓名 to XM,3Wait 命令格式:WAIT 提示信息 TO Window Timeout 功能:等待用户按键盘上任一个键。说明省略提示信息后,系统默认为提示“按任一键继续”。wait to x用于保存用户按键的字符,可省略此项。如指定Window项,主窗口的右上角会出现一个Wait提示窗口,来显示提示信息,否则显示在屏幕工作中。如指定Timeout 项,用于设定等待时间,Timeout 为间隔秒数,一旦超时,系统自动往下执行。wait 请输入一个字母 to m window timeout 3,【例7-1】输入任意一个数据,判断该数的数据类型。程序如下:CLEARINPUT“请输入任意类型的一个数据”TO X?X,“的数据类型为:”,VARTYPE(X)第一次运行:请输入任意类型的一个数据:123第二次运行:请输入任意类型的一个数据:123第三次运行:请输入任意类型的一个数据:.T.第四次运行:请输入任意类型的一个数据:1991-05-03,【例7-2】查询学生表中某些学生的信息。程序如下:USE 学生.DBFACCEPT 请输入您要查询的学生姓名 TO NAMELOCATE FOR 姓名=NAMEDISPWAIT“您还要查询其他内容?”WINDOW TIMEOUT 5INPUT 请输入您要查询的学生的身高 TO HEIGHTLOCATE FOR 身高=HEIGHTDISPUSE RETURN,7.2.2 基本输出命令,1表达式输出命令格式:?|?,功能:对一个或多个表达式求值,并将结果输出到系统主窗口上。说明:?:表达式的值换行显示;?:表达式的值不换行显示;?:单个?表示需要光标换行。举例:?3+4,date(),67use 学生表?姓名,性别,出生日期?姓名,身高,体重,2文本输出命令格式:Text EndText功能:将文本信息输出在屏幕上。说明:Text 和EndText必须成对出现。举例:text 系 统 主 菜 单 1.数据输入 2.数据查询 3.数据统计 4.退出系统endtext,7.2.3 定位输入输出命令,1定位输出命令格式:SAY 功能:在屏幕指定位置输出表达式的值。说明:指定了输出的位置。标准屏幕是25行80列,左上角顶点为(0,0),右下角坐标为(24,79)。行、列都可以为表达式,还可为小数。举例:10,10 say hello!15,20 say how are you!20,35 say 大家好!,2定位输入命令格式:SAY(提示信息)GET READ 功能:在屏幕指定位置接收键盘输入的新值说明SAY子句:用于显示提示信息,提示信息加定界符GET子句:用于为显示变量的值,并允许输入新值 GET子句中的变量必须有确定的初值 初值决定了该变量的类型和宽度 READ:使GET后的进入编辑状态;让光标自动跳到该变量值所在位置上等待编辑修改;可在多个定位输入命令后面使用一个read语句。,clearname=张晓磊grade=98.6birth=2002-09-07团员=.t.0,10 say name get nameread1,10 say grade get graderead2,10 say birth get birthread3,10 say 团员 get 团员read?name,grade,birth,团员,clearuse 学生表go 20,10 say 姓名:get 姓名1,10 say 性别:get 性别2,10 say 出生日期:get 出生日期3,10 say 党员:get 团员3,10 say 身高:get 身高read,7.2.4 清屏命令,格式:CLEAR功能:清除屏幕或窗口中的显示内容,光标回到屏幕左上角。,7.2.5 终止程序执行和返回命令,1Cancel 终止程序执行,关闭所有打开的程序,返回命令窗口。2Return 结束当前程序执行,返回到调用它的上一级主程序,若无上级程序则返回命令窗口。3Quit 退出Visual Foxpro系统。,7.2.6 MessageBox()函数,1.语法格式:MESSAGEBOX(提示信息,对话框的属性,对话框窗口标题)2.功能:显示一个自定义的对话框。常用作提示之用,也可作一些简单的选择,比如“确定”、“取消”等3.举例:messagebox(请选择,32+3+0,测试)4.说明:(1)提示信息:对话框中所用到的提示文字。,(2)对话框的属性:MESSAGEBOX(提示信息,对话框的属性,对话框窗口标题)例如:messagebox(请选择,32+3+0,测试),设置图标,设置按钮属性,设置默认按钮,(3)对话框窗口标题MESSAGEBOX(提示信息,对话框的属性,对话框窗口标题)例如:messagebox(请选择,32+3+0,测试)(4)返回值:该函数执行后有返回值,类型为数值型 n=messagebox(请选择,32+3+0,测试)?n,7.3 程序的基本控制结构,程序的概念命令(或语句)的有序集合,以文件(.prg)形式存储一个程序一般包括三个部分:数据定义或输入部分数据处理部分数据输出部分程序的三种基本控制结构:顺序结构选择结构循环结构,7.3.1 顺序结构,顺序结构程序的含义按语句排列的先后顺序,从上到下依次执行各语句。每个语句执行一次,且只执行一次。【例7-3】编程计算圆的周长和面积。Clear Input 请输入圆的半径 To R Pi=3.14 L=2*PI*R S=PI*R*R?圆的周长为:,L?圆的面积为:,S Return,输入半径R的值,定义圆周率变量pi,计算周长L和面积S,输出L和S的值,清屏幕,【例7-4】查询学生表中所有男同学和女同学的学生证号,姓名,性别和年龄,并分别显示男同学和女同学的信息。程序分析:clearuse 学生表?男同学的信息disp 学生证号,姓名,性别,;(year(date()-year(出生日期);for 性别=男?女同学的信息disp 学生证号,姓名,性别,;(year(date()-year(出生日期);for 性别=女use,打开学生表,提示先显示男同学信息,逐页显示男同学信息,关闭打开的表,清屏幕,提示先显示女同学信息,逐页显示女同学信息,7.3.2 选择结构,选择结构又称分支结构,它是在程序执行过程中,通过判断某些条件是否成立来控制程序走向的程序结构。分支程序结构的分类:单(向)分支双(向)分支多(向)分支,1单(向)分支,格式:IF ENDIF功能:若成立,则执行;否则执行ENDIF后面的语句。说明:IF 和ENDIF必须成对出现。是一个逻辑值表达式。可以是多条语句的集合。,clearinput 请输入一个正整数 to xif x0?输入的是正整数?x=,xendifreturn,【例7-5】判断一个数是正负、负数、还是零。程序分析:ClearInput 请输入一个数 to NIf N0?是正数。EndifIf N0?是负数。EndifIf N=0?是零。Endif,【例7-6】在学生表中根据所输入的学生证号查找该学生记录。程序分析:ClearUse 学生表Accept 请输入所要查找的学生证号:TO XSZHLocate For 学生证号=XSZHIf Found()DispEndIfUseReturn,2双(向)分支,格式 IF ELSE ENDIF功能:若条件成立,则执行,否则执行。说明:IF 和ENDIF必须成对出现;ELSE 本身占一行。,【例7-7】用双分支实现判断一个数的正负。程序分析:ClearInput 请输入一个数 to NIf N=0?是正数。Else?是负数。Endif?程序运行结束RETURN,是正数,N=0,否,是,是负数,输入一个数,程序运行结束,分支语句的嵌套IF IF ELSE ENDIFELSE IF ENDIFENDIF,ClearInput 请输入一个数 to NIF N0?是正数。ELSE IF N=0?是零。ELSE?是负数。ENDIFENDIF?程序运行结束RETURN,ClearInput 请输入一个数 to NIF N=0 IF N0?是正数。ELSE?是零。ENDIFELSE?是负数。ENDIF?程序运行结束RETURN,【例7-8】在学生表中根据所输入的姓名查找该学生记录 程序分析:ClearUse 学生表Accept 请输入所要查找的姓名:TO XMLocate For 姓名=XMIf Found()DispELSE?”查无此人!”EndIfUseReturn,显示当前记录,找到?,否,是,显示查无此人,按XM查找记录,关闭表,打开学生表,输入要查找的姓名-XM,3多(向)分支,格式:DO CASE CASE CASE CASE OTHERWISE ENDCASE,【例7-9】根据所输入的日期判定今天是星期几。程序分析:输入日期 INPUT 根据日期判断星期几 DOW(日期变量)程序结构分析:单分支双分支多分去,Input 请输入今天日期:To DIF DOW(D)=1?日期日ENDIFIF DOW(D)=2?日期一ENDIFIF DOW(D)=3?日期二ENDIFIF DOW(D)=4?日期三ENDIFIF DOW(D)=5?日期四ENDIFIF DOW(D)=6?日期五ENDIFIF DOW(D)=7?日期六ENDIF,【例7-9】根据所输入的日期判定今天是星期几。程序分析:输入日期 INPUT 根据日期判断星期几 DOW(日期变量)程序结构分析:单分支双分支(嵌套)多分去,Input 请输入今天日期:To DIF DOW(D)=1?日期日ELSE IF DOW(D)=2?日期一 ELSE IF DOW(D)=3?日期二 ELSE IF DOW(D)=4?日期三 ELSE IF DOW(D)=5?日期四 ELSE IF DOW(D)=6?日期五 ELSE IF DOW(D)=7?日期六 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIFENDIF,【例7-9】根据所输入的日期判定今天是星期几。程序分析:输入日期 INPUT 根据日期判断星期几 DOW(日期变量)程序结构分析:单分支双分支多分去,Input 请输入今天日期:To DDo Case Case Dow(D)=1?“星期日”Case Dow(D)=2?“星期一”Case Dow(D)=3?“星期二”Case Dow(D)=4?“星期三”Case Dow(D)=5?“星期四”Case Dow(D)=6?“星期五”OTHERWISE?“星期六”EndCase,Accept 请输入学生证号:To XSZHUse 成绩表Locate For 学生证号=XSZHDo Case Case 期末成绩=90?优秀 Case 期末成绩=80 and 期末成绩=70 and 期末成绩=60 and 期末成绩=69?及格 Case 期末成绩60?不及格EndCase,【例7-10】根据所输入的学生证号,,为成绩表中“期末成绩”字段的值判定等级。期末成绩在:90分以上的为优秀,80至89为良好,70至79为中等,60至69为及格,60以下为不及格。程序分析:学生证号的输入 成绩的判断 分支结构,7.3.3 循环结构,循环结构(简称循环):程序中,根据某些条件有规律地重复执行某程序段被重复执行的程序段,称为循环体循环体通过循环结构语句来实现循环循环结构可以减少程序代码重复书写的工作量,使编程效率大大提高,VFP的循环结构语句主要三种当型循环步长型循环表扫描型循环,命令格式1DO WHILE 循环体语句ENDDO,1当型循环(DO WHILEENDDO),语句功能:(1)判断是否为真(.T.),是真执行循环体语句,否则执行ENDDO后面语句(2)执行DO WHILE和ENDDO之间的命令序列(循环体)(3)遇到ENDDO,转(1)(4)结束循环,转到ENDDO后面的语句。,【例7-11】输出至100之间所有能被3整除的数。ClearY=1Do While Y=100 If mod(Y,3)=0?Y EndIf Y=Y+1EndDoRETURN,显示y值,y=100?,N,ENDDO后面语句,Y,定义变量y=1,y整除3?,Y,N,y值增1,【例7-12】把学生表所有民族为汉族的学生逐条输出。程序PR7-12.prg如下:ClearUse 学生表.dbfDo While not EOF()If 民族=汉族 Disp EndIf SkipEndDOUSE,命令格式 2 DO WHILE 命令序列1 EXIT 命令序列2 LOOP 命令序列3 ENDDO语句功能:在执行循环体语句的过程中遇到exit语句,立即结束循环体的执行,转到ENDDO的后面;在执行循环体语句的过程中遇到loop语句,立即结束循环体的本次执行,转到DO WHILE处,重新判断循环条件。EXIT和LOOP命令只能出现在循环体中,并且可以出现在循环体中的任何位置。,【例7-12-1】编写一个能多次计算任意半径的圆的周长和面积的程序,当输入的半径小于或等于 0时,停止运行。Clearinput 请输入圆的半径:to rPi=3.14L=2*PI*RS=PI*R*R?圆的周长为:,L?圆的面积为:,S,ClearR=1do while R0 Input 请输入圆的半径:To R if R=0 loop endif L=2*3.14*R S=3.14*R*R?圆的周长为:,L?圆的面积为:,S enddo,Cleardo while.T.Input 请输入圆的半径:To R if R=0 exit endif L=2*3.14*R S=3.14*R*R?圆的周长为:,L?圆的面积为:,S enddo,2步长型循环(FORENDFOR),格式:FOR=TO STEP LOOP EXITENDFOR|NEXT说明:(1)、和是数值表达式(2)值可以为正,也可以为负。省略时默认值为1。步长值不能为0,否则造成死循环。(3)ENDFOR 可以用NEXT代替。(4)循环次数=INT(终值初值)步长+1,for i=1 to 1+7 sete 2?iendfor,2步长型循环(FORENDFOR),格式:FOR=TO STEP LOOP EXITENDFOR|NEXT循环的执行过程:(1)将初值赋给循环变量,(2)循环变量与终值比较,若超过终值转(5),否则转(3)(3)执行循环体(EXIT和LOOP意义同前)(4)遇到ENDFOR子句时,循环变量自动按增值,然后转(2)(5)退出循环,执行ENDFOR后面的语句,for i=1 to 1+7 sete 2?iendfor,【例7-13】计算1+2+3+100=?ClearS=0For i=1 to 100 S=S+iNext i?“1=2+3+100=”,SRETURN,S=0i=1DO WHILE i=100 S=S+i i=i+1ENDDO,【例7-14】向学生表中一次添加10条新记录。采用循环结构,每次添加一条记录先插入一条空记录利用定位输入输出命令输入记录内容 ClearUse 学生表For i=1 to 10 APPEND BLANK 2,1 SAY 学生证号:GET 学生证号 PICTURE 9999999999 4,1 SAY 姓名:GET 姓名 6,1 SAY 性别:GET 性别 8,1 SAY 出生日期:GET 出生日期 10,1 SAY 民族:GET 民族 READENDFORUSE,格式:SCAN FOR WHILE LOOP EXITENDSCAN功能:在表的指定内扫描,查找满足的 记录并执行循环体中的命令序列。说明:(1)默认为ALL;(2)每执行一遍循环体,指针自动下移一个记录,并自动判断是否指向文件尾,是则结束循环,转到ENDSCAN后面。,3表扫描型循环(SCANENDSCAN),SCAN ENDSCAN,do while not eof()skipenddo,【例7-15】查询学生表中所有女党员并输出。clearuse 学生表scan for 党员 and 性别=女 displayendscanusereturn【例7-15-1】将上述程序,用当型循环改写【例7-15-2】将上述程序,用步长型循环改写,7.4 子程序、过程与自定义函数,7.4.1 子程序1子程序的概念子程序与主程序:子程序是指可以被多次反复地调用,能完成特定功能的特殊程序段,以独立的程序文件方式存储;相对而言,把调用子程序的程序称为“主程序”。子程序的优点:子程序是相对独立的、通用的一段代码。一个程序由若干个子程序组成,子程序独立编码和测试,子程序还可以重复使用,这样可以方便地生成程序,减少代码的编写量,并易于修改和维护程序。,7.4.1 子程序,2子程序的建立:MODIFY COMMAND 子程序文件名3子程序的调用调用语句格式:DO With 说明:WITH 用于主程序和子程序间参数的传递子程序参数定义:PARAMETERS 子程序返回语句的四种格式 RETURN 返回到调用它的上一级主程序或VFP窗口 RETURN 将表达式的值返回给调用程序 RETURN TO 返回指定程序文件 RETURN TO MASTER 直接返回到第一级主程序,7.4.1 子程序,子程序调用语句的执行过程(功能)执行调用语句时,系统将指定的子程序调入内存并执行该子程序,程序转到子程序中;当执行到子程序中的返回语句时,程序返回主程序,执行该调用语句的下一条可执行语句。,主程序:ClearDo zj1.prgDo zj2.prgReturn,zj1.prg:P=1 FOR i=1 TO 100 P=P*iENDFOR?100的阶乘为,pRETURN,Zj2.prg:S=0 FOR i=1 TO 100 S=S+iENDFOR?1-100的和为,SRETURN,【例7-16】用子程序求任意一个数的阶乘。ClearInput 请输入要求阶乘的数:To MDo JieCheng.prg With M Return*JieCheng.prg子程序*PARAMETERS NP=1 FOR i=1 TO N P=P*iENDFOR?N,的阶乘为,pRETURN,主程序PR7-16-1.prg如下(带两个参数):ClearInput 请输入要求阶乘的数:To MX=1Do JieCheng.prg With M,X?M,的阶乘为,XReturn*JieCheng.prg子程序*PARAMETERS N,PFOR i=1 TO N P=P*iENDFORRETURN,7.4.2 过程和过程文件,1过程过程的的概念:过程是以PROCEDURE开头,以ENDPROC结尾的一段程序。它可以放在调用程序中,也可以独立存储为一个过程文件。过程定义的语法格式:PROCEDURE PARAMETERS RETURN ENDPROC,【例7-17】把求任意一个数的阶乘的程序用过程来实现。程序与过程在一个程序文件中(不带参数):ClearInput 请输入要求阶乘的数:To NDo JC*过程JC,也在程序PR7-17-1中Procedure JC P=1 FOR i=1 TO N P=P*i ENDFOR?N,的阶乘为,pENDPROCRETURN,程序PR7-17-2.prg如下(带一个参数):ClearInput“请输入要求阶乘的数:”To MDo JC With M*过程JC,也在程序PR7-17-2中*Procedure JC PARA N P=1 FOR i=1 TO N P=P*i ENDFOR?N,”的阶乘为”,pENDPROCRETURN,2.过程文件过程文件:包括一个或多个过程的程序文件(.prg)。语法格式:PROCEDURE RETURN ENDPROC PROCEDURE RETURN ENDPROC PROCEDURE RETURN ENDPROC,过程文件的建立:与程序文件的建立方法完全相同 过程文件的打开与过程的调用要调用过程,必须先打开包含此过程的过程文件。打开过程文件的格式:SET PROCEDURE TO,ADDITIVE说明:可以打开一个或多个过程文件。过程文件打开后,文件中所有过程都可以被调用 参数ADDITIVE表示不关闭原先已打开过程文件 过程文件的关闭 SET PROCEDURE TO 或 CLOSE PROCEDURE,【例7-18】输入任意半径,计算圆的周长,圆的面积和球的体积用过程文件实现。程序分析:主程序 main.prg过程文件 pp.prg*主程序 main.prg*ClearInput 请输入半径:To RSet Procedure to PP.prg Do ZC With RDo MJ With RDo TJ With RSet Procedure To,*过程文件 PP.prg*Proc ZC PARA X L=2*PI()*X?”周长为:”,LENDPROCPROC MJ PARA X S=PI()*X*X?”面积为:”,SENDPROCPROC TJ PARA X V=4/3*PI()*X*X*X?“体积为:”,VENDPROC,内容回顾,程序例如:求任意一个整数的阶乘和1到该整数的和子程序过程函数,ClearInput 请输入一个整数:To NP=1 FOR i=1 TO N P=P*iENDFOR?N,的阶乘为:,pS=0 FOR i=1 TO N S=S+iENDFOR?1-,N,的和为:,SRETURN,ClearInput 请输入一个整数:To MSet Procedure to pd.prgdo pd1 with Mdo pd2 with MSet Procedurt toreturn,*过程文件pd.prg*procedure pd1 Parameters N P=1 FOR i=1 TO N P=P*i ENDFOR?N,的阶乘为:,pendprocprocedure pd2Parameters NS=0 FOR i=1 TO N S=S+iENDFOR?1-,N,的和为:,Sendproc,*主程序:m1.prg*ClearInput 请输入一个整数:To MDo sub1 with MDo sub2 with MRetrun,内容回顾,程序例如:求任意一个整数的阶乘和1到该整数的和子程序过程函数系统函数用户定义函数date()year(date()int(123.4)mod(23,2)bof()eof()found()recno()reccount(),7.4.3 用户自定义函数,用户自定义的函数和系统内部函数一样,以函数的方式调用,即:函数名()用户自定义的函数不能与系统函数同名。用户自定义函数的语法格式:FUNCTION PARAMETER RETURN ENDFUNC,【例7-19】用函数实现求组合CLEARINPUT 第一个数:TO rINPUT 第二个数:TO nC=JC(n)/(JC(r)*JC(n-r)?从,n,里取,r,的组合为,CRETURN*JC()函数:求任意一个数x的阶乘*FUNCTION JCPARAMETERS XP=1FOR i=1 TO X P=P*iENDFORRETURN P&返回 P 的值ENDFUNC,7.4.4 参数传递和变量的作用域,1参数传递 在主程序调用子程序时,有时需要调用程序与被调用程序之间进行参数传递。调用程序用 DO WITH 把实参数据传递给被调用程序中的形参数据,被调用程序中用 PARAMETERS 来接收参数。,*主程序:m1.prg*ClearInput 请输入一个整数:To MDo sub1 with MRetrun,*sub1.prg*paramerters NP=1 FOR i=1 TO N P=P*iENDFOR?N,的阶乘为,pReturn,(1)参数传递在VFP中分为两种方式,第一种参数传递方式:按值传递 将实参值的副本传递给形参,形参值的改变不影响实参变量的值。第二种参数传递方式:按地址(引用)传递 将实参的地址传给形参,此时形参变量和实参变量同用一个地址内数据,形参的改变直接影响实参值。参数传递方式的设置:SET UDFPARMS TO VALUE|REFERENCE 其中:VALUE表示按值传递,REFERENCE表示按地址传递。,(2)两种格式进行带参调用:,第一种调用方式格式1:DO WITH 说明:如果实参是非变量的常量或表达式即具体值,此时的参数传递为按值传递;但如果实参是 变量,这时是按地址传递第二种调用方式格式2:()说明:默认情况下都按值传递,如果想要按地址传递 可用命令SET UDFPARMS重新设定。SET UDFPARMS TO REFERENCE,Clear?采用格式2的参数传递Y=1?格式2按值传递PP(Y)?外部,Y?-Y=1Set UDFPAR To REFERE?格式2按地址传递PP(Y)?外部,Y?#?采用格式1的参数传递Y=1?格式1按地址传递,DO PP WITH Y?外部,Y?-Y=1Set UDFPARMS To Values?格式1按值传递DO PP WITH Y?外部,Y?-Y=1?格式1常量按值传递DO PP WITH 1?外部,Y?-RETURN,*过程PP*PROC PPPARA X X=2*X+1?内部,XRETURNENDPROC,【例7-20】两种格式、两种方式的参数传递应用。,采用格式2的参数传递格式2按值传递 内部 3 外部 1格式2按地址传递 内部 3 外部 3#采用格式1的参数传递格式1按地址传递 内部 3 外部 3格式1按值传递 内部 3 外部 3格式1按常量按值传递 内部 3 外部 1,7.4.4 参数传递和变量的作用域,2变量作用域(1)变量的作用域:是指变量作用的有效范围。(2)按变量的作用域来划分,变量可分为种:全局变量(public)私有变量(private)本地变量(local),全局变量PUBLIC在所有程序模块中都有效的内存变量全局变量在程序或过程结束后不会自动释放,必须使用RELEASE或CLEAR MEMORY命令才能释放。全局变量的作用域为从定义点开始,到退出FoxPro时所执行的所有的程序或过程。全局变量须先说明(定义)后使用,通常在主程序中定义,也可在子程序中定义,还可在命令窗口中定义。格式:PUBLIC 举例:public a,b,c说明:变量被说明时即被产生,同时赋初值.F.,私有变量PRIVATE在建立它的程序模块以及该程序嵌套调用的各级子程序中使用的内存变量。局部变量一旦离开定义它们的程序,就将失去意义。程序中没有被说明为全局的内存变量,都被看成是局部变量。局部变量也可以用PRIVATE来说明。格式1:格式2:PRIVATE ALL LIKE/EXCEPT说明:变量被说明的同时并不产生变量,当第一次被赋值时才产生。没被说明,但在程序中被赋初值,系统默认其为单元的局部变量(隐式说明)。在主程序中说明的局部变量其作用域等同于整个程序的全局变量。,本地变量Local 用Local定义的本地内存变量只能在定义它的程序模块中存在,一旦定义它的程序运行完毕,本地变量就会从内存中释放。其它程序中不能访问本地变量。,【例7-21】全局变量、局部变量及其作用域示例。*主程序*CLEARCLEAR MEMORYPublic A1 A1=1DO 子程序1?主程序中内存变量有:LIST MEMORY LIKE A*RETURN,PROCEDURE 子程序1 PUBLIC A2 A2=2PRIVATE A3STORE 3 TO A1,A2,A3?子程序1中第一次显示内存变量LIST MEMORY LIKE A*DO 子程序2?子程序1中第二次显示内存变量LIST MEMORY LIKE A*RETURNPROCEDURE 子程序2PRIVATE A2 LOCAL A4STORE 4 TO A1,A2,A3,A4?子程序2中第一次显示内存变量LIST MEMORY LIKE A*RETURN,子程序1中第一次显示内存变量A1 Pub C 3A2 Pub C 3A3 Priv C 3子程序2中第一次显示内存变量A1 Pub N 4A2(hid)C 3A3 Priv N 4A4 本地 N 4A2 Priv N 4子程序1中第二次显示内存变量A1 Pub N 4A2 Pub C 3A3 Priv N 4主程序中内存变量有:A1 Pub N 4A2 Pub C 3,程序填空,*-*【程序填空】*-*功能:下面程序是计算1+3+5+99之和的程序。*请在【】处添上适当的内容,使程序完整。*-SET TALK OFF*SPACE*【?】*SPACE*FOR I=1 TO 99【?】S=S+IENDFOR*SPACE*?结果=,【?】SET TALK ONRETURN,答案:=(答案1)=s=0=(答案2)=step 2=(答案3)=s=或=str(s)=或=str(s,4),*-*【程序填空】*-*功能:依次显示XSDB.DBF数据表中的记录内容。请在【】处添上适当*的内容,使程序完整。*-SET TALK OFF*SPACE*【?】*SPACE*DO WHILE【?】DISP*SPACE*【?】ENDDOUSE SET TALK ONRETURN,答案:=(答案1)=use xsdb=(答案2)=.not.eof()=或=!eof()=或=not eof()=或=Eof()!=.T.=(答案3)=SKIP,*-*【程序填空】*-*功能:现有职工工资库文件GZ.DBF和职工档案DA.DBF。*要求对职工工资库文件中的“基本工资”、“应发工资”*、“扣款工资”和“实发工资”的字段进行赋值。*请在【】处添上适当的内容,使程序完整。*-SET TALK OFFCLEARSELE AUSE GZINDEX ON 编号 TO GZBHSYSELE BUSE DA*SPACE*INDE ON【?】TO DABHSY SELE A*SPACE*UPDA ON 编号 FROM DA REPL 基本工资 WITH【?】*SPACE*【?】应发工资 WITH 基本工资+奖金,扣款合计 WITH 水费+电费+房租费,实发工资 WITH 实发工资-扣款合计LISTCLOSE DATABASESET TALK ONRETURN,答案:=(答案1)=编号=(答案2)=B.基本工资=或=B-基本工资=(答案3)=REPL ALL,程序改错,*-*【程序改错】*-*题目:表XSDA.DBF结构为:学号(C,6),姓名(C,6),性别(C,2),入学成绩(N,6,2)。本程序实现按学号查找记录,直到输入#为止。*-*注意:不可以增加或删除程序行,也不可以更改程序的结构。*-SET TALK OFFUSE XSDA*FOUND*ACCEPT 请输入要查找的学号 ON XHDO WHILE XH!=#*FOUND*LOCATE FOR 学号=CJ IF FOUND()?学号,姓名,入学成绩 ELSE?无此学号 ENDIF ACCEPT 请继续输入要查找的学号 TO XH*FOUND*ENDFOR?谢谢使用本查找系统USESET TALK ONRETU,答案:=(答案1)=ACCEPT 请输入要查找的学号 TO XH=(答案2)=LOCATE FOR 学号=XH=(答案3)=ENDDO=或=ENDD,*-*【程序改错】*-*题目:计算出1-50以内(包含50)能被3和5整除的数之和。*-*注意:不可以增加或删除程序行,也不可以更改程序的结构。*-SET TALK OFFCLEARX=0*FOUND*Y=1*FOUND*DO WHIL NOT EOF()X=X+1 DO CASE CASE MOD(X,5)=0 AND MOD(X,3)=0 Y=Y+X CASE X50 EXIT ENDCASEENDDO*FOUND*?XSET TALK ONRETU,答案:=(答案1)=Y=0=(答案2)=DO WHIL.T.=(答案3)=?Y,*-【程序改错】-*题目:已有员工数据库YG.DBF和工资数据库GZ.DBF。给定MODI.PRG程序的功能是根据用户输入的岗位查询相应 的岗位工资、教学津贴和科研津贴,并显示聘任为该岗位 的人员情况。*-*注意:不可以增加或删除程序行,也不可以更改程序的结构。-*SET TALK OFFAN=YSELECT 0USE GZINDEX ON 雇员号 TO GZ1SELECT 0USE YG*FOUND*SET RELATION ON 雇员号 TO GZDO WHILE UPPER(AN)=Y CLEAR GW=教授?请输入岗位:,GW*FOUND*SEEK 岗位 IF!FOUND()?没有此岗位!ELSE?岗位,GZ-岗位工资,GZ-科研津贴 LIST OFF 姓名,性别,职称,岗位 FOR 岗位=GW ENDIF*FOUND*INPUT 是否继续?TO UPPER(AN)ENDDO?再见!SET TALK ON,答案:=(答案1)=SETRELATO雇员号INTOGZ=或=SETRELATO雇员号INTOA=(答案2)=LOCAFOR岗位=GW=(答案3)=WAIT是否继续?TOAN=或=ACCE是否继续?TOAN,程序设计,*-*【程序设计】*-*题目:设表RSDA.DBF结构为:学号(C,5),姓名(C,6),*职称(C,6)统计出RSDA.DB

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开