《Visual FoxPro程序设计(第二版)》课件第5章 程序设计基础_第1页
《Visual FoxPro程序设计(第二版)》课件第5章 程序设计基础_第2页
《Visual FoxPro程序设计(第二版)》课件第5章 程序设计基础_第3页
《Visual FoxPro程序设计(第二版)》课件第5章 程序设计基础_第4页
《Visual FoxPro程序设计(第二版)》课件第5章 程序设计基础_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

本章要点1.程序设计概述2.程序文件操作3.程序的基本结构4.函数、过程与子程序5.变量的作用域与参数传递1.程序设计概述

程序是为了达到某一目标,由一系列相应语句或命令有序排列而成的集合。VisualFoxPro的程序是以扩展名为.PRG的形式存储在磁盘文件中。OPENDATABASExsglIFFILE("xsda.dbf")USExsdaBROWSEENDIFCLOSEDATABASE

可以看出,程序方式有如下优点:对于相同的要求,一次书写,多次执行;若要求发生变化,可被修改并重新运行;可以完成在命令窗口中无法完成的任务;可以通过调用其他程序完成复杂的任务等。2.程序文件的操作

VisualFoxPro程序文件,是一个以(.PRG)为扩展名的文本文件。任何可以建立、编辑文本文件的工具,都可以创建和编辑VisualFoxPro程序文件。这些文本编辑工具,可以是VisualFoxPro系统提供的内部编辑器,也可以是其它常用文本编辑软件。在文本编辑环境下,不仅可以对程序文件进行输入和修改,还可以实现字符串查找、替换、删除和编辑功能。(1)程序文件建立

1)命令方式

MODIFYCOMMAND<程序文件名>

2)菜单方式打开“文件”菜单,选择“新建”;在“新建”窗口,选择“程序”,再选择“新建文件”;在“程序文件”编辑窗口,输入程序文件,并保存,此时建立程序文件的操作结束。例如:编制程序CX1.PRG,显示XSDA.DBF中“男”同学信息。(2)程序文件的调用

调用程序文件,即运行程序文件,是程序文件建立的最终目的。在VisualFoxPro系统中,调用程序文件有很多方法,在这里仅介绍其中两种方法。

1)命令方式在“命令”窗口中,输入如下命令,则程序文件被调用。

DO<程序文件名>说明:如果没有指定扩展名,系统按:.EXE→.APP→.FXP→.PRG顺序执行。

2)菜单方式以菜单方式调用程序文件,操作方法如下:

(1)在VisualFoxPro系统主菜单下,打开“程序”菜单,选择“运行”。(2)在“运行”窗口,输入被调用的程序文件名即可。3.程序的基本结构

VisualFoxPro系统提供的命令丰富,且功能强大,把这些命令和程序设计语句有效地组织在一起,就形成了实现某一特定功能的程序。

VisualFoxPro系统的程序有两个特点:一是程序控制流模式,由顺序、分支、循环三种基本结构构成。二是面向对象可视化的结构程序模块,在每个模块的内部也是由程序控制流组成。常见的控制结构如下:

(1)顺序结构顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。VisualFoxPro系统中的大多数命令都可以作为顺序结构中的语句。AB

一个程序一般都包含数据输入、数据处理和数据输出三个部分。数据的输入和输出代码设计是编写许多程序都要面临的工作。(1)注释语句

NOTE|*<注释内容>&&<注释内容>(2)清屏语句

CLEAR(3)终止语句

CANCELDO<文件名>RETURNQUIT(4)简单的键盘输入语句顺序结构1)WAIT语句【格式】WAIT[<字符表达式>][TO<内存变量>][WINDOW[AT<行号,列号>]][TIMEOUT秒数]【功能】暂停程序的执行,显示字符表达式的值作为提示信息,按任意键或单击鼠标时继续程序的执行。【说明】①<字符表达式>值为空,不显示任何提示信息。省略则显示默认的信息"按任意键继续……"。②<内存变量>为字符型,用来保存用户键入的字符。若用户按的是Enter键或单击了鼠标,那么<内存变量>中保存的将是空串。若不选TO<内存变量>短语,输入的单字符不保留。③一般情况下,提示信息被显示在VisualFoxPro主窗口或当前用户自定义窗口里。如果指定了WINDOW子句,则会出现一个WAIT提示窗口,用以提示信息。提示窗口一般定位于主窗口的右上角,也可用AT短语指定其在主窗口中的位置。④TIMEOUT子句用来设定等待时间(秒数)。一旦超时就不再等待用户按键,自动往下执行。2)ACCEPT语句【格式】ACCEPT[<字符表达式>]TO<内存变量>【功能】该命令等待用户从键盘输入字符串,当用户以回车键结束输入时,系统将该字符串存入指定的内存变量,程序继续运行。【说明】①如果选用<字符表达式>,那么系统会首先显示该表达式的值,作为提示信息。②该只能接收字符串。用户在输入字符串时,不需要加定界符,否则,系统会把它当作字符串的一部分。③如果不输入任何内容而直接按回车键,系统会把空串赋给指定的内存变量。3)INPUT语句【格式】INPUT[<字符表达式>]TO<内存变量>【功能】等待用户从键盘输入数据,用户可以输入任意合法的表达式。当用户以回车键结束输入时,系统将表达式的值存入指定的内存变量中,程序继续运行。【说明】①<字符表达式>作为提示信息可省。②输入的数据可以是常量、变量,也可以是更为一般的表达式。但不能不输入任何内容直接按回车键。③输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如.T.、.F.),输入日期时间型常量时要用大括号(如{^2001-03-01})。分支结构

YIF前面的命令条件表达式命令序列ENDIF后面的命令

分支结构形式有如下三种:(1)单向分支单向分支语句,即根据用户设置的条件表达式的值,决定某一操作是否执行。

1)语句格式:

IF<条件表达式><命令行序列>

ENDIF2)语句功能:该语句首先计算<条件表达式>的值,当<条件表达式>的值为真时,执行<命令行序列>;否则,执行ENDIF后面的第一条命令。

(2)双向分支双向分支语句,即根据用户设置的条件表达式的值,选择两个操作中的一个来执行。

1)语句格式:

IF<条件表达式><命令行序列1>

ELSE

<命令行序列2>

ENDIF

2)语句功能:该语句首先计算<条件表达式>的值,当<条件表达式>的值为真时,执行<命令行序列1>中的命令;否则,执行<命令行序列2>中的命令;执行完<命令行序列1>或<命令行序列2>后都将执行ENDIF后面的第一条命令。NYIF前面的命令条件表达式命令序列1ENDIF后面的命令命令序列2

(3)多向分支

多向分支语句,即根据多个条件表达式的值,选择执行多个操作中的一个对应执行。

1)语句格式:

DOCASECASE<条件表达式1><命令行序列1>

[CASE<条件表达式2><命令行序列2>

CASE<条件表达式N><命令行序列N>][OTHERWISE<命令行序列N+1>]

ENDCASENNNDOCASE前面的命令条件表达式1条件表达式2条件表达式n··〈命令序列n+1〉ENDCASE后面的命令命令序列n命令序列2命令序列1YYY2)语句功能:该语句根据给出的N个<条件表达式>的值,选择N+1个<命令行序列>中的一个执行。当所有CASE中<条件表达式>的值都是假时,如果有OTHERWISE项,则执行<命令行序列N+1>,再执行ENDCASE后面的第一条命令;否则,直接执行ENDCASE后面的第一条命令。(4)使用分支语句应注意的几点

1)IF…ENDIF和DOCASE…ENDCASE必须配对,

2)<条件表达式>的值必须是逻辑值。

3)<命令行序列>可以由一个或多个命令组成,还可是条件控制语句组成的嵌套结构。

4)DOCASE与第一个CASE<条件表达式>之间不应有任何命令。且当有CASE项的<条件表达式>值为真时,只执行第一个<条件表达式>值为真后的<命令行序列>,然后执行ENDCASE的后面的第一条命令。例题1:邮费问题

0.8x≤80y=

0.8+0.05(x-80)x>80例题2:查询问题

任意输入一个学生的姓名,查询学生的基本情况例题3:菜单问题

1.显示表结构

2.显示表信息

3.退出查询循环结构

条件真B块[LOOP][EXIT]假

常用的循环语句有以下三种形式:(1)“当”型循环控制语句

“当”型循环控制语句,即根据条件表达式的值,决定循环体内语句的执行次数。

1)语句格式:

DOWHILE<条件表达式><命令行序列>[LOOP][EXIT]

ENDDO2)语句功能:该语句通过<条件表达式>的值来控制循环。执行语句时,反复判断<条件表达式>的值,当<条件表达式>的值为“真”时,执行<命令行序列>;否则,结束循环,并执行ENDDO后面的第一条命令。

(2)“计数”型循环控制语句“计数”型循环控制语句,即根据用户设置的循环变量的初值、终值和步长,决定循环体内语句的执行次数据。

1)语句格式:

FOR<循环变量>=<初值>TO<终值>[STEP<步长>]

<命令行序列>[LOOP][EXIT]

ENDFOR|NEXT2)语句功能:该语句用<循环变量>来控制<命令行序列>的执行次数。执行语句时,首先将<初值>赋给<循环变量>,然后判断<循环变量>是否大于或小于<终值>,若结果为“真”,则结束循环,执行ENDFOR后面的第一条命令;否则,执行<命令行序列>,<循环变量>自动按<步长>增加或减少,再重新判断<循环变量>当前的值是否大于或小于<终值>,直到其结果为真。

(3)“指针”型循环控制语句

“指针”型循环控制语句,即根据用户设置的表中的当前记录指针,决定循环体内语句的执行次数据。

1)语句格式:

SCAN[<范围>][FOR<条件1>][WHILE<条件2>]

<命令行序列>[LOOP][EXIT]

ENDSCAN

2)语句功能:该语句在指定的范围内,用数据记录指针来控制循环次数。执行语句时,首先判断函数EOF()的值,若其值为“真”,则结束循环,否则,结合<条件1>或<条件2>,执行<命令行序列>,记录指针移到指定的范围和条件内的下一条记录,重新判断函数EOF()的值,直到函数EOF()的值为真时结束循环。

(4)使用循环语句时应注意的几点:1)DOWHILE和ENDDO、FOR和ENDFOR、SCAN和ENDSCAN必须配对使用。

2)<命令行序列>可以是任何FoxPro命令或语句,也可以是循环语句,即可以为多重循环。

3)<循环变量>应是数值型的内存变量或数组元素。

4)EXIT和LOOP命令嵌入在循环体内,可以改变循环次数,但是不能单独使用。EXIT的功能是跳出循环,转去执行ENDDO、ENDFOR、ENDSCAN后面的第一条命令;LOOP的功能是转回到循环的开始处,重新对“条件”进行判断,相当于执行了一次ENDDO、ENDFOR、ENDSCAN命令,它可以改变<命令行序列>中部分命令的执行次数。EXIT、LOOP可以出现在<命令行序列>的任意位置。例题4:假设我国人口增长率为7‰,按现有人口13亿计算,多少年后达26亿。例题5:修改前面的查询问题、菜单问题程序,使之可多次选择。例题6:求1-100之间的数据和例题7:排序问题例题8:矩阵问题例题9:素数问题(乘法口诀表)例题10:统计男女生人数4.子程序、过程与自定义函数

结构化的程序设计方法通常将一个复杂的规模较大的程序系统划分为若干个功能相关又相对独立的一个个较小的模块,再把这些模块划分为更小的用几十行语句实现的简单模块。将一个应用程序划分成一个个功能简单、单一的模块程序,不仅便于程序的开发,也利于程序的阅读和维护。模块是一个相对独立的程序段,它可以被其他模块所调用,也可以去调用其他的模块。通常,把被其他模块调用的模块称为子程序,把调用其他模块而没有被其他模块调用的模块称为主程序。在VisualFoxPro中,模块可以是命令文件,也可以是过程。

VisualFoxPro通过PROCEDURE命令、FUNCTION命令以及其它相关的命令为这样的模块化设计提供支持。(1)过程与过程调用

1)过程定义【格式】

PROCEDURE<过程名>[PARRAMETERS∣LPARRAMETERS<参数列表>]<过程体>[RETURN]

ENDPROC【说明】①PROCEDURE表示一个过程定义开始,同时给过程命名。②第二行说明过程可以接收的参数,各个参数之间用逗号分隔。参数说明必须紧跟在PROCEDURE的下一行。PARAMETERS说明的是私有变量,LPARAMETERS说明的是局部变量。没有参数传递时,本行可以省略。③ENDPROC表示一个过程的结束,如果缺省ENPROC那么过程结束于下一条PROCEDURE命令或文件结尾处。④当过程执行到RETURN命令时,控制将返回到调用程序(或命令窗口),并返回表达式的值。如果缺省RETURN命令,则在过程结束处自动执行一条隐含的RETURN命令。2)过程调用过程可以放置在程序文件代码的后面,也可以保存在称为过程文件的单独文件里。过程文件的建立仍使用MODIFYCOMMAND命令,文件的默认扩展名还是.PRG。过程文件里只包含过程,这些过程能被任何其他程序所调用。在调用过程文件中的过程之前首先要打开过程文件。打开过程文件的命令格式为:【格式】SETPROCEDURETO[<文件1>[,<文件2>,…]][ADDITIVE]【说明】打开一个或多个过程文件。一旦一个过程文件被打开,那么该过程文件中的所有过程都可以被调用。如果选用ADDITIVE,那么在打开过程文件时,并不关闭原先已打开的过程文件。关闭过程文件的命令格式为:SETPROCEDURETO

上述格式将关闭所有打开的过程文件,如果不想一并关闭所有过程文件,而要关闭个别过程文件,可用如下格式的命令:【格式】RELEASEPROCEDURE<文件1>[,<文件2>,…]

调用过程的格式有两种:【格式1】DO<过程名>[WITH<参数列表>]【格式2】<过程名>[(参数列表)]【说明】过程允许递归调用,但<过程名>不能包含扩展名。(2)自定义函数1)函数定义【格式】

FUNCTION<函数名>[PARRAMETERS∣LPARRAMETERS<参数列表>]<函数体>[RETURN[<表达式>]]

ENDFUNC【说明】①FUNCTION表示一个函数定义开始,同时给函数命名。ENDFUNC表示函数定义结束。②第二行参数说明部分与过程的参数说明部分类同,另外,VisualFoxPro规定参数说明也可以放在函数名后的括号内。③函数体是用户编写的命令序列。④RETURN给出函数的返回值,可以放在函数定义中的任何地方。省略时,函数返回.T.。2)函数调用用户自定义函数的调用有三种形式,一是可以象系统函数一样把函数放在表达式中,函数所需的参数放在函数名后的括号内,函数的返回值参与表达式的计算。函数允许递归调用。如果函数没有返回值,可以采用如下两种形式调用函数:

=<函数名>([<参数列表>])

或DO<函数名>[WITH<参数列表>]例:编制求n!的自定义函数编制已知三角形三边,求三角形面积自定义函数编制将系统日期转变成中文日期格式的自定义函数,例如:将05/14/03变成2003年5月14日。5.变量的作用域与参数传递(1)变量的作用域程序设计离不开变量。一个变量除了类型和取值之外,还有一个重要的属性就是它的作用域。变量的作用域指的是变量在什么范围内是有效或能够被访问的。在VisualFoxPro中,若以变量的作用域来分,内存变量可分为公共变量、私有变量和局部变量三类。1)公共变量在任何模块中都可以使用的变量称为公共变量。公共变量要先建立后使用,可用PUBLIC命令建立。【格式】PUBLIC<内存变量表>【说明】建立公共的内存变量,并为它们赋默认初值逻辑假.F.。公共变量一旦建立就一直有效,即使程序运行结束返回到命令窗口也不消失。只有当执行CLEARMEMORY、RELEASE、QUIT等命令后,公共变量才被释放。

在命令窗口中直接使用而系统自动隐含建立的变量也是公共变量。2)私有变量【格式1】PRIVATE<内存变量表>【格式2】PRIVATEALL[LIKE|EXCEPT<通配符>]

在程序中直接使用(没有通过PUBLIC和LOCAL命令事先声明)而由系统自动隐含建立的变量也是私有变量。私有变量的作用域是建立它的模块及其下属的各层模块。一旦建立它的模块程序运行结束,这些私有变量将自动清除。可以在子程序中使用PRIVATE命令隐藏主程序中可能存在的变量,使得这些变量在子程序中暂时无效。3)局部变量局部变量只能在建立它的模块中使用,不能在上层或下层模块中使用。当建立它的模块程序运行结束时,局部变量自动释放。局部变量用LOCAL命令建立:【格式】LOCAL<内存变量表>【说明】该命令建立指定的局部内存变量,并为它们赋初值逻辑假.F.。由于LOCAL和LOCATE前四个字母相同,故这条命令的命令动词不能缩写。局部变量要先建立后使用。(2)参数传递模块程序可以接收调用程序传递过来的参数,并能够根据接收到的参数控制程序流程或对接收到的参数进行处理,从而大大提高模块程序功能设计的灵活性。接收参数的命令有PARAMETERS和LPARAMETERS。PARAMETERS命令声明的形参变量被看作是模块程序中建立的私有变量,LPARAMETER

温馨提示

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

评论

0/150

提交评论