1 / 34

任务六 学用 visualfoxpro 的编程功能

任务六 学用 visualfoxpro 的编程功能. 内容提要: 程序和程序文件 程序的基本结构 多模块程序 程序调试 学习目的与要求: 了解程序的概念,多模块的概念 熟悉程序的基本结构,模块的调用、参数传递和变 量的作用域 掌握 条件语句、循环语句的使用及程序的分析方法 重点 : 掌握程序的结构及程序结构的使用 难点 : 程序的编写及参数传递. 任务六 学用 visualfoxpro 的编程功能. 程序概述及结构. 第一讲. 选择和循环结构. 第二讲. 多模块程序. stop. 第三讲. 程序设计. 实训二.

homer
Télécharger la présentation

任务六 学用 visualfoxpro 的编程功能

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 任务六 学用visualfoxpro的编程功能 • 内容提要: 程序和程序文件 程序的基本结构 多模块程序 程序调试 • 学习目的与要求: 了解程序的概念,多模块的概念 熟悉程序的基本结构,模块的调用、参数传递和变 量的作用域 掌握条件语句、循环语句的使用及程序的分析方法 • 重点:掌握程序的结构及程序结构的使用 • 难点:程序的编写及参数传递

  2. 任务六 学用visualfoxpro的编程功能 程序概述及结构 第一讲 选择和循环结构 第二讲 多模块程序 stop 第三讲 程序设计 实训二 多模块程序及参数传递 实训三

  3. 第一讲 程序概述及结构 • 授课内容: 程序的概念 程序文件的建立和执行 输入输出命令 程序的结构 • 学习目的: 了解程序的概念,程序文件的建立和执行 熟悉输入输出命令及程序的结构 掌握读程序的方法及编程方法 • 重点:程序的结构及读程序 • 难点:掌握编写程序的方法

  4. 6.1 程序概述 一、概念 • 程序 程序是能够完成一定任务的命令的有序集合。 • 程序文件 程序文件(或命令文件)以文本文件的形式存在,扩展名为.prg。 二、程序文件的建立 • 通过“文件”菜单中的“新建”命令建立 • 通过命令方式建立:modify comm <命令文件名> 三、程序文件的运行 格式:Do 应用程序名.prg 注意: 执行程序文件时最好能加上扩展名,因为如果没有指定扩展名,系统将按下列程序执行:.exe(可执行文件)→.app(应用程序文件)→.fxp(编译文件)→.prg(命令文件)

  5. 四、简单的输入输出命令 1、输入命令 INPUT [<字符表达式>] to <内存变量> 功能:显示<字符表达式>的值作为提示信息,暂停程序执行,等待用户从键盘输入一个任意合法的表达式,输入完成后,用户应按回车键,系统将该表达式的值存入指定的内存变量,程序继续执行 注:1) 若选择<字符表达式>,则系统会显示该表达式的值作为提示信息,在提示信息后出现光标等待用户输入一个表达式,否则只有光标提示 2)用户键入一个表达式后必须按回车键,否则该命令被反复执行 3)用户输入表达式必须加相应的定界符 ACCEPT命令 功能:等待用户输入字符型数据,若不键入字符串直接回车,则系统将空串赋给内存变量

  6. WAIT [<字符表达式>] [ to <内存变量>] [windows [at <行,列>]][timeout<数值表达式>] 功能:显示<字符表达式>的值作为提示信息,暂停程序执行,等待用户从键盘输入单个字符或单击鼠标后继续程序的执行 注:1)若不指定字符表达式,则显示默认的提示信息“按任意键继续……” 2)若有可选项to <内存变量>,则<内存变量>用来保存用户键入的字符,其类型为字符型,否则输入的字符不保留。 3)若指定了windows子句,则在主窗口出现一个wait提示窗,用来显示提示信息,at <行,列>指定窗口在主窗口显示的位置,默认显示在主窗口右上角 4)timeout<数值表达式>设定等待时间单位是秒。。。

  7. INPUT命令应用示例 例1、求通过键盘输入的任一数值的绝对值并输出。 clear input "输入任一数值:" to x if x<0 x=-x endif ?'X的绝对值是:',x return

  8. ACCEPT命令应用示例 例2、将小写字母转换成大写字母的命令文件aaa.prg set talk off clear accept "请输入任一字符串:" to x y=upper(x) ?"转换的结果是:",y set talk on return

  9. 五、程序的基本结构 有三种基本的控制结构:顺序结构、选择结构、循环结构 1)顺序结构 例、编程输出每个仓库的平均工资(pjgz.prg) clear open database 订货管理 select 仓库号,avg(工资) as 平均工资 from 职工; group by 仓库号 into table pjgz use pjgz browse close all return 返回 结束

  10. 第二讲 选择结构和循环结构 • 授课内容: 选择结构及举例 循环结构及举例 • 学习目的: 熟悉选择、循环结构的语句格式及特点 掌握读程序的方法及选择、循环结构程序的编写方法 • 重点:掌握读程序的方法 • 难点:程序的编写

  11. 一、选择结构 1、若条件成立,则执行<语句序列>,然后执行endif的下一条语句,否则转向endif的下一条语句执行 2、If和endif必须成对出现 分为条件语句和分支语句 • 条件语句 (1) If <条件> <语句序列> endif (2) If <条件> <语句序列1> else <语句序列2> endif 1、若条件成立,则执行<语句序列1>,否则执行<语句序列2>然后执行endif的下一条语句 2、If和endif必须成对出现

  12. 选择结构举例 例1、求任一个数的绝对值并输出 clear input "请输入任一个数值:" to x if x<0 x=-x endif ?"该数的绝对值是:",x return

  13. 例2、利用海伦公式求三角形的面积 clear input 'a=' to a input 'b=' to b input 'c=' to c if a+b>c and b+c>a and a+c>b s=(a+b+c)/2 area=sqrt(s*(s-a)*(s-b)*(s-c)) ?'面积为:',area else ?‘该三角形不存在!' endif return

  14. 1、系统自上而下逐个判断条件,遇到第一个case条件为真时则执行该子句中的语句序列然后执行endcase的下一条语句,若case子句条件均为假,看是否有otherwise子句,若有则执行语句序列n+1,否则执行endcase的下一条语句1、系统自上而下逐个判断条件,遇到第一个case条件为真时则执行该子句中的语句序列然后执行endcase的下一条语句,若case子句条件均为假,看是否有otherwise子句,若有则执行语句序列n+1,否则执行endcase的下一条语句 2、docase和endcase成对出现 • 分支结构 Do case case <条件1> <语句序列1> …… case <条件n> <语句序列n> [otherwise] <语句序列n+1>] endcase

  15. 分支结构 例3、将学生成绩分为 “不及格”、“及格”、“良好”和“优秀”等次。 clear input "输入学生成绩:" to score do case case score>=0 and score<60 ?"不及格" case score>=60 and score<70 ?"及格" case score>=70 and score<85 ?"良好" case score>=85 and score<=100 ?"优秀" otherwise ?"不合法的数据!" endcase

  16. 二、 循环结构 也称“重复处理”结构,当满足某个指定条件时,反复执行某段程序代码。被重复执行的程序段通常称之为“循环体” VFP支持三种格式的循环控制语句: • do while … enddo(当型循环) • for … endfor(“计数型”循环) • scan … endscan(“扫描型”或“指针型”循环)

  17. 条件 真 循环体 LOOP EXIT ENDDO后面的语句 1、Do while …enddo循环 该循环的语句格式及执行过程如下: Do while <条件> <语句序列1> [loop] <语句序列2> [exit] <语句序列3> enddo • loop命令的作用是转回循环的开始处,重新对条件进行判断。 exit命令的作用是跳出循环

  18. 循环结构示例 例1、求前100个自然数中的偶数和。(使用DO循环) 方法一: Clear s=0 i=2 do while i<=100 s=s+i i=i+2 enddo ?“前100个自然数中的偶数和为:",s return

  19. 方法二: s=0 i=1 do while i<=100 if mod(I,2)=0 s=s+i i=i+1 else i=i+1 loop endif enddo ?"前100个自然数中的偶数和为:",s return

  20. 循环的嵌套示例 例2:输出九九乘法口诀表。 clear i=1 do while i<10 j=1 do while j<=i s=i*j ??str(j,1)+'*'+str(i,1)+'='+str(s,2)+' ' j=j+1 enddo i=i+1 ? Enddo return

  21. 循环变量=循环变量初值 循环变量=循环变量初值 循环变量<=循环变量终值 (步长大于0时) 循环变量>=循环变量终值 (步长小于0时) N N Y Y 执行循环体后,循环变量自动按步长增加 执行循环体后,循环变量自动按步长减少 Endfor的后继语句 Endfor的后继语句 2、For…endfor(计数式循环) • 该语句用循环计数器<循环变量>来控制循环体的执行次数。常用于实现循环次数已知情况下的结构 • 执行时,首先将循环变量初值赋予循环变量,然后判断循环变量是否不大于(步长大于0时)或不小于(步长小于0)循环变量终值,若循环条件为真,则执行循环体,然后循环变量增加或减少一个步长值,并再次判断循环条件是否为真,以确定是否再次执行循环体,直到循环条件为假,则执行endfor后面的语句

  22. FOR循环示例 例3、求前100个自然数中的偶数和。 clear s=0 for I=2 to 100 step 2 s=s+i endfor ?“前100个自然数中的偶数和是:",s return

  23. 3、Scan … endscan(扫描型循环) 例4、统计职工表中工资大于1230元的职工人数。 clear use 职工 n=0 scan for 工资>1230 n=n+1 endscan ?‘工资大于1230的职工人数:’,n use return

  24. 使用循环语句时应注意 • do while和enddo、for和endfor、scan和endscan必须配对使用。 • 循环体可以是任何VFP命令或语句。 • 循环变量应是数值型的内存变量或数组。 • exit和loop命令可以嵌入循环体内,改变循环次数,但不能单独使用。 exit命令的作用是跳出循环, loop命令的作用是转回循环的开始处,重新对条件进行判断。 返回 结束

  25. 第三讲 多模块程序 • 授课内容: 模块的定义和调用 参数传递 变量作用域 • 学习目的: 了解模块的含义和定义及参数传递规则 熟悉模块调用规则及变量作用域 掌握读多模块程序的方法 • 重点:熟悉模块调用规则及变量作用域 • 难点:理解模块的含义及读多模块程序

  26. 模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他的模块。模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他的模块。 • 子程序:被其他模块调用的模块;主程序:调用其他模块而没有被其他程序调用的模块。在vf中模块可以是命令文件,也可以是过程。 • 一、模块的定义和调用 • (一)过程定义:procdure|function <过程名> • <命令序列> • [return [<表达式>]] • [endproc|endfunc] • 注释:(1) procdure|function表示一个过程的开始,并命名过程名,过程名必须以字母或下划线开头,可以包含字母、数字和下划线 • (2) endproc|endfunc表示一个过程的结束

  27. (3)档过程执行到return时,控制将转会到调用程序或命令窗口,并返回表达式的值。如果缺省则在过程结束处自动执行一条隐含的return命令,若return不带表达式则返回逻辑真.t.(3)档过程执行到return时,控制将转会到调用程序或命令窗口,并返回表达式的值。如果缺省则在过程结束处自动执行一条隐含的return命令,若return不带表达式则返回逻辑真.t. • (二)过程文件的建立 • 过程可以放在程序文件代码的后面,也可以保存在称为过程文件的单独文件里。过程文件的建立仍使用modify command • (三)过程文件的打开 • 过程文件里只包含过程,这些过程能被任何其他程序所调用,但在调用过程文件中的过程之前,首先要打开过程文件,打开过程文件的命令: • Set procedure to [<过程文件1>[,<过程文件2>,……]][additive] • (四)关闭过程文件 • 1、set procedure to关闭所有打开的过程文件 • 2、release procedure <过程文件1>[,<过程文件2>……]

  28. (五)模块调用格式 • 格式1:do <文件名>|<过程名> • 格式2: <文件名>|<过程名>()该格式即可以作为命令使用,也可以作为函数出现在表达式里。这里两种格式里的文件名不能包含扩展名 • 例: • 二、模块调用中的参数传递 • 模块程序可以接受调用程序传递过来的参数,并能根据接收到的参数控制程序流程或对接收到的参数进行处理 • (一)接收参数的命令 • Parameters <形参变量1>[,<形参变量2>,……] • lparameters <形参变量1>[,<形参变量2>,……] • Parameters声明的形参变量被看作模块中建立的私有变量 • lparameters 声明的形参变量被看作模块中建立的局部变量

  29. (二)调用模块程序的格式 • 格式1 : do <文件名>|<过程名> with <实参1>[,<实参2>……] • 格式2:<文件名>|<过程名> with <实参1>[,<实参2>……] • 注释:1、实参可以是常量、变量、也可以是一般形式的表达式,调用模块程序时,系统会自动把实参传递给形参。 • 2、形参的数目不能少于实参数目,如果形参数目多于实参数目,那么多于的形参取初值.f. • 3、采用格式1,如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋值给相应的形参变量——按值传递;如果实参是变量,那么传递的将不是变量的值,而是变量的地址,这时形参和实参实际上是同一个变量,在模块程序中对形参变量的值的改变同样是对实参变量值的改变——按引用传递 • 4、采用格式2调用模块程序时,默认情况下都以按值方式传递,如果实参是变量,可以通过:set udfparms重新设置参数传递的方式: set udfparms to value|reference

  30. (三)数组传递 • 实参是数组元素:按值传递元素值 • 按值传递:传递数组的第一个元素 • 实参是数组名: • 按引用传递:传递整个数组 • 例: • 三、变量的作用域 • 变量的作用域指变量在什么范围内有效或能被访问,在vf中,以变量的作用域来分,内存变量可分为公共变量、私有变量和局部变量 • (一)公共变量 • 1、在任何模块中都可使用的变量 • 2、公共变量的建立:public <内存变量> 1、为变量赋初值,.f. 2、一旦建立一直有效清除用clear, memory, release,quite

  31. (二)私有变量 • 1、在程序中直接使用,系统自动隐含建立的变量 • 2、私有变量的作用域是建立他的模块及其下层的各层模块,一旦建立他的模块程序运行结束,这些私有变量将自动清除 • (三)局部变量 • 1、局部变量只能在建立他的模块中使用,不能在上层或下层模块中使用,当建立他的模块程序运行结束时,局部变量自动释放 • 2、局部变量的建立:local <内存变量表> 该命令建立指定的局部内存变量,并为他们赋初值.f. • 举例: • (四)private命令 • 主要作用是在子程序中隐藏主程序中可能存在的同名变量,使这些变量在子程序中暂时无效,回到上层程序时又恢复原值 • Private <内存变量表>|private all [like <通配符>|except<通配符>]

  32. 注释:1、该命令不建立内存变量 • 2、隐藏指定的在上层模块中可能已经存在的内存变量,使这些变量在当前模块中暂时无效,并且不改变该变量在上层的值 • 3、一旦当前模块运行结束返回上层模块时,被隐藏的内存变量就自动恢复原值 • 4、local 在建立局部变量的同时,也具有隐藏上层模块中建立的同名变量的作用,但local只在他所在的模块内隐藏这些同名变量,一旦出了本模块,这些变量恢复原值。 返回 结束

  33. 实训二 程序设计 一、实训目的 • 理解程序的三种基本结构 • 熟悉程序文件的创建、修改与运行 • 掌握程序中常用的输入输出语句的使用 二、实训内容 • 编一名为guss.prg的程序,实现如下功能:自己心想一个自然数(1-1024),让计算机猜。程序运行时计算机只问用户10个问题便知用户心想之数并输出 • 用循环结构编一名为统计.prg的程序,实现如下功能:1)统计表文件学生.dbf中的男女人数,2)统计表文件学生.dbf中各系人数并输出 三、实训步骤 • 参照实训书 返回 结束

  34. 实训三 多模块程序及参数传递 一、实训目的 • 理解多模块程序中内存变量的作用域 • 掌握程序调用中的参数传递 二、实训内容 • 通过实例验证关于内存变量作用域的结论:如过程中的公共变量,在程序执行器件和终止后始终有效;在过程中用private声明的内存变量为私有变量,它与主程序中的同名变量无关;在过程中内存变量被定义为局部变量,则它与上层主程序及其下属子程序中的同名变量无关等 • 利用公式c=m!/(n!(m-n))用带参数的内部过程编程计算组和Cm(m≥n) 三、实训步骤 • 参照实训书 n 返回 结束

More Related