《数据库应用基础与实训教程——Visual_FoxPro》第7章:Visual_FoxPro6.0程序设计基础_第1页
《数据库应用基础与实训教程——Visual_FoxPro》第7章:Visual_FoxPro6.0程序设计基础_第2页
《数据库应用基础与实训教程——Visual_FoxPro》第7章:Visual_FoxPro6.0程序设计基础_第3页
《数据库应用基础与实训教程——Visual_FoxPro》第7章:Visual_FoxPro6.0程序设计基础_第4页
《数据库应用基础与实训教程——Visual_FoxPro》第7章:Visual_FoxPro6.0程序设计基础_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

第7章 Visual FoxPro6.0 程序设计基础,(时间:7次课,14学时),第7章 Visual FoxPro6.0 程序设计基础,学习目的与要求: Visual FoxPro6.0有两种操作方式:交互方式(包括菜单、工具和命令方式)和程序运行方式。在前面的学习中我们已经看到了,在交互方式下进行操作,简单易行,随时都可以看到结果,明白错误所在,适合初学者或者是完成简单、不需要重复执行的某些操作。但学习任何一种语言,总是要利用它完成一些复杂的任务,或者重复执行某些操作。可以将这些需重复操作或经常用到的操作命令预先编好,存放在一个文件中,以供随时调用,这就是程序或函数。同其它计算机语言一样,构成Visual FoxPro6.0程序的基本要素也是命令、变量、数据类型、表达式控制结构等。 本章主要介绍运算符和表达式、数组、变量的作用范围、过程和程序文件、程序设计语言基础和面向对象程序设计基础。要求掌握运算符和表达式的定义和使用;掌握数组的定义和使用;掌握变量的作用范围;掌握程序文件的建立和程序控制语句使用;掌握面向对象程序设计类的定义和操作方法。,第7章 Visual FoxPro6.0 程序设计基础,7.1 运算符和表达式 7.2 数组 7.3 程序文件和过程 7.4 变量的作用范围 7.5 程序设计语言基础 7.6 面向对象程序设计基础,7.1 运算符和表达式,表达式可用来执行运算、操作字符或测试数据,每个表达式都产生唯一的值。表达式的类型由运算符的类型决定。在Visual FoxPro6.0中有5类运算符和表达式: 算术运算符和算术表达式 字符串运算符和字符串表达式 日期运算符和日期表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式,7.1.1 运算符,1算术运算符 Visual FoxPro6.0提供的算术运算符如表所示。在这6个算术运算符中,除取负“-”是单目运算符外,其他均为双目运算符。它们运算的含义与数学中基本相同。,2字符串运算符 Visual FoxPro6.0提供的字符运算符有两个(其运算级别相同),如表所示。,3日期运算符 日期型数据是一种特殊的数值型数据,它们之间只能进行加“”、减“”运算。,4关系运算符 (不等于) (大于) $ (字符串包含) = (大于等于) = = (字符串精确比较) 运算符优先级:级别相同,运算顺序从左到右,5逻辑运算符 逻辑运算符:.NOT.(逻辑非),.AND.(逻辑与),.OR.(逻辑或) 运算符优先级:.NOT.AND.OR. 逻辑运算规则(表中的A和B是两个逻辑型数据),7.1.2 表达式,Visual FoxPro6.0的表达式是由运算符将常量、变量、函数连接起来的式子,其中常量、变量、函数是表达式的特例。在命令格式中的,往往泛指常量、变量、函数和表达式。 表达式中每一个运算符都占用一个字符,其中的运算符、标点符号和圆括号都必须使用西文半角符号。每个表达式经过运算都会产生一个结果,即表达式的值。,1算术表达式 算术表达式的格式为: 算术表达式与数学中的表达式写法有所区别,在书写表达式时应当特别注意: (1)每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角或右下角写方次或下标。例如:23要写成23,XL十X2要写成X1+X2。 (2)原来在数学表达式中省略的内容必须重新写上。例如:2X要写成2*X。 (3)所有括号都用小括号(),且括号必须配对。例如:3X+2(Y+Z)必须写成3*(X+2*(Y+Z)。 (4)要把数学表达式中的有些符号,改成Visual FoxPro6.0中可以表示的符号。例如:要把2R改为2*PI*R。,2字符表达式 字符表达式由字符串常量、字符串变量、字符串函数和字符串运算符组成。它可以是一个简单的字符串常量,也可以是若干个字符串常量或字符串变量的组合。结果为字符串。 字符串表达式的格式为: 例如: “ABCL23“+“666XYZ“连接后结果为:“ABCL23666XYZ“ “计算机“+“世界“ 连接后结果为:“计算机世界“ “ABC “-“DEFG“ 连接后结果为:“ABCDEFG “ “ABC “DEFG“ 连接后结果为:“ABC DEFG “,3日期表达式 日期表达式由算术运算符“、”、算术表达式、日期型常量、日期型变量和函数组成。日期型数据运算的三种情况: 两个日期型数据可以相减,结果是一个数值型数据(两个日期相差的天数)。例如: 1999-12-19-1999-11-16结果为数值型数据:33 一个表示天数的数值型数据可加到日期型数据中,其结果仍然为一日期型数据(向后推算的日期)。例如: 1999-11-16+33结果为日期型数据:1999-12-19 一个表示天数的数值型数据可从日期型数据中减掉它,其结果仍然为一日期型数据(向前推算的日期)。例如:1999-12-19-33 ,结果为日期型数据:1999-11-16,4关系表达式 关系表达式由关系运算符、数值表达式、字符表达式、常量和函数组成,结果为逻辑值。 关系表达式的格式: 。 关系表达式运算规则:,(1)关系运算符对同类型数据进行比较,结果为逻辑值;数值型数据按其值大小比较。 例如:32+5的结果为.F.。 (2)字符型数据按其ASCII 码值大小比较。例如:“ABC” “ABD”的结果为.F.。 (3)汉字按它的内码进行比较。例如:“王” “李”的结果为 .T.。 (4)“$”为字符串包含比较运算符,即“$”左边的字符串和右边的字符串相同或包含在右边字符串中,结果为真。例如:”ABC” $”ABCD”的结果为.T.。 (5)“ = ”为字符串相等比较运算符,当逐一比较每一个字符时,若“=”右边字符串所有字符与左边一一相同(不一定等长),则结果为真。例如:“ABC” = “ABCD”的结果为.T.。 (6)“= =”是字符串精确比较运算符,即“ = = ”两边字符串必须每个字符都相同,结果才为真。例如:“ABC” = = “ABC”的结果为.T.。 (7)“= =”相当于 SET EXACT ON 下的 “=”号。,5逻辑表达式 逻辑表达式由逻辑运算符,关系表达式,逻辑常量,变量和函数组成,结果为逻辑值。 逻辑表达式的格式: 表达式1和表达式2的内容可以是常量、变量、函数或逻辑结果的表达式 例如: 工龄=15 性别=女 婚否=.T. 职称=教授 ? 工龄20.AND.职称=教授 & 结果: .F. ? 性别=女 .AND.职称=教授 & 结果: .T. ? 性别=男 . OR.工龄=15 & 结果: .T. ? .NOT. 工龄=15 & 结果: .F. ? .NOT. 婚否 & 结果: .F.,当五种数据类型的运算符同时出现在同一表达式中时,运算符的优先级为: 先算术运算符/字符串运算符/日期运算符关系运算符逻辑运算符 注意:所有同级运算都是从左到右,括号内的运算符优先执行,最里层括号的运算先执行,由内向外执行。,7.2 数组,数组是一种特殊的内存变量,能用来存储一系列数值。在VISUAL FOXPRO系统中,只允许使用一维数组(相当于数列)和二维数组(相当于行列式或矩阵)。,7.2.1 下标变量,数组中各有序变量(数据元素)组成数组的成员,称为下标变量。下标变量实质上是一个内存变量,是一组具有相同变量名、以下标相互区分的有序的内存变量。 下标变量的特征: (1)下标变量的名称(下标变量名)用数组名加下标构成。如AA(1)、BB(2,3)。 (2)下标必须是非负数值,可以是常量、变量、函数表达式,下标值会自动取整。如AA(1.5)、AA(X)、AA(2+10/3)。 (3)下标变量的数据类型决定于最后赋值的数据类型,不同下标变量的数据类型可以不同。 (4)下标变量与普通内存变量一样,可以赋值和引用。,7.2.2 数组,数组必须先用DECLARE、DIMENSION、PUBLIC定义后才能使用,定义数组是向系统申请数组元素在内存中的存储空间。 命令格式: (1)DECLARE | DIMENSION ( ,) , ( ,); (2)PUBLIC ARRAY ( ,) , ( ,)。,命令功能: (1)定义指定的各个数组; (2)定义一个或多个数组,并使其成为全局变量。 说明: (1)在命令中,既可使用圆括号,又可使用方括号将下标括起来。 (2)在建立数组后,数组的各个元素的初始值均为逻辑假。 (3)在给数组变量赋值时,若未指明下标,则对该数组中的所有元素同时赋同一个值。 (4)在引用数组时,若未指明下标,则为该数组的第一个元素。 (5)可通过再次使用DIMENSION重新定义数组,数组的大小可增可减。,例如:数组的定义、赋值与引用。 DIMENSION AA(2),AB(2,2) &定义两个数组 AA=100 &给AA数组所有元素赋值100 AB(1,1)=AA(1) &引用数组AA的元素给AB数组元素赋值 STORE .T. TO AB(1,1) &给AB数组一个元素重复赋逻辑值 AB(1,2)=“中华人民共和国“ &给AB数组一个元素赋字符值 AB(2,1)= 2005-01-02 &给AB数组一个元素赋日期值 AB(2,2)= 2005-10-01 10:00:00 A &给AB数组一个元素赋严格的日期时间值 ? AA(1)+AA(2),AB(1,2) &系统主窗口显示:200 中华人民共和国,7.2.3 数组和表,1将数据表中的记录数据保存在数组中 格式一: SCATTER FIELDSMEMO TO 格式二: COPY TO ARRAY FIELDSFOR 说明: 格式一是将当前表当前记录的数据存入一维数组;格式二是将指定的多条记录存入二维数组。数组可以事先定义,也可以由系统自动建立一个与数据表匹配的一维或二维数组。 FIELDS短语将指定字段存入数组,缺省为所有字段。 格式一选MEMO可将备注型字段存入数组,忽略通用型字段;格式二则忽略备注型和通用型字段。,2将数组中的数据传递到当前数据表中 格式一: GATHER FROMFIELDSMEMO 格式二: APPEND FROM ARRAY FIELDSFOR 说明: 格式一将一维数组的各元素数据依次传递给当前记录。字段类型要与对应的数组元素的数据类型相匹配。 格式二中,若数组是一维数组,则只有一条记录被追加到数据表中,数据依次来自各数组元素;若数组是二维数组,则数组每一行将作为一条记录被追加到数据表中。 见【例7.1】,【例7.1】将学生表第一条记录与最后一条记录调换位置。程序如下: CLEAR OPEN DATABASE 成绩管理.DBC USE 学生.DBF LIST DIMENSION A(10),B(10) GO TOP SCATTER TO A GO BOTTOM SCATTER TO B GATHER FROM A GO TOP GATHER FROM B LIST RELEASE ALL USE CLOSE DATABASE,7.3 程序文件和过程,从功能上看,程序可以分为三个部分: 第一部分是程序的说明部分,在本例程序中是前面的二行,一般用于说明程序的功能、文件名等需要说明的有关信息。 第二部分是进行数据处理的部分,在本例程序中是从第2行开始的6行。通常这部分程序常包括下列三个部分,依次为:环境设置、数据处理、环境恢复。 第三部分是程序的控制返回部分,在本例中就是最后一条命令。它控制程序返回到调用该程序的调用处。,7.3.1 程序文件,Visual FoxPro6.0程序和其它高级语言编写的程序一样,是一个文本文件。程序由若干行命令语句构成,编写程序即建立一个称为源程序的文本文件,只有建立了程序文件才能执行该程序。,1程序文件的建立 建立源程序文件有多种方法,最常用的方法是: (1)选择【文件】|【新建】菜单项,在【新建】对话框中选定【程序】文件类型后,单击【新建文件】按钮。 (2)在【项目管理器】中选择【代码】|【程序】后单击【新建】按钮。 (3)在命令窗口中执行命令: MODIFY COMMAND 。 2程序文件的修改 修改程序文件时,需要先打开程序编辑窗口(打开方法同“程序文件的建立”),然后用常规的编辑技巧编辑即可。,3程序文件的执行 执行程序常用的方法有: (1)选择【程序】|【运行】菜单项,在打开的【运行】对话框中选定【程序】文件类型和待执行的程序文件名后,单击【运行】按钮。 (2)在“项目管理器”中选择【代码】|【程序】后单击【运行】按钮。 (3)在命令窗口中执行命令DO 。 (4)编译应用程序为.EXE文件:在“项目管理器”中选择【程序】|【连编】。,7.3.2 过程,程序设计时,常常有些运算和处理程序是相同的,只是每次以不同的参数参与程序的执行。在一个程序中重复写入相同的程序段,将是时间和空间上的浪费。 对于常见问题的实用程序,可以使用别人已经编好的程序(如函数)。 对于较复杂的问题,可划分为多个模块,由多人完成。 将上述重复出现的或能单独使用的程序写成可供其它程序调用的独立程序段,称为过程(子程序)。,1子程序的建立、返回和调用 子程序:能够完成一定功能、可供其它程序调用的独立程序段。 主程序:对于两个具有调用关系的程序文件(命令文件),常称调用程序为主程序,被调用的程序称为子程序。 相同点:主程序、子程序都是程序文件,以同样的方法建立、修改和运行;使用相同的扩展名;以同样的文件格式存储在磁盘上。 区别:子程序末尾一定有返回语句RETURN。 格式1:RETURN 功能:结束子程序的运行,返回调用它的程序中调用语句的下一语句;如果直接运行一个子程序,执行到RETURN时,则返回到命令窗口。 格式2:RETURN TO MASTER 功能:如果有TO MASTER选项,子程序无论在哪层都返回到最外层的主程序。 格式3:RETURN TO 功能:强制返回到指定的文件。 见【例7.2】,【例7.1】子程序调用 *MAIN.PRG CLEAR ? “中华人民共和国“ DO SUB ? “欢迎你!“ RETURN *SUB.PRG ? “北京“ RETURN,2带参数子程序的调用与返回 (1)命令格式: DO WITH (2)参数接收命令 调用子程序时参数表中的参数要传递给子程序,子程序中也必须设置相应的参数接收语句。PARAMETERS命令具有接收参数和回送参数值的作用。 命令格式: PARAMETERS 功能: 指定内存变量以接收DO命令发送的参数值,返回主程序时把内存变量的值回送给调用程序中相应的内存变量。 说明: PARAMETERS必须是过程的第一个语句。 命令中的参数依次与调用WITH子句中的参数相对应,故两者参数个数必须相同。 见【例7.3】,【例7.3】设计一个计算圆面积的过程,并要求在主程序中带参数调用它。 *主程序:MAIN.PRG CLEAR YMJ=0 INPUT “输入圆半径:“ TO BJ DO SUB WITH BJ,YMJ ? “圆面积为:“,YMJ RETURN *子程序:SUB.PRG PARAMETERS R,S S=3.1416*R*R RETURN,3过程文件 每执行一个子程序就要打开一次文件,当调用的过程较多时,频繁启动驱动器,影响程序的运行速度。 把每个子程序定义为一个过程,把众多过程合并成一个过程文件存放在磁盘上,当打开过程文件时,即把过程文件中的诸过程一次全部调入内存,当调用过程时,就可以直接在内存中得到,不必多次启动驱动器。 过程文件由多个独立的过程组成,过程文件也是程序文件,扩展名为.PRG。各过程的过程名为1-10个字符,必须以字母或下划线开始,由字母、数字和下划线组成,没有扩展名;每个过程以PROCEDURE开头,以RETURN结尾。,4过程文件的建立、打开和关闭 (1)建立:同程序文件的建立。除注释语句外的首语句为PROCEDURE。 (2)打开:SET PROCEDURE TO (3)关闭:SET PROCEDURE TO 或CLOSE PROCEDURE 一次只能打开一个过程文件,每次打开过程文件时自动关闭上一次打开的过程文件。 (4)过程的调用 过程文件打开后,可以调用其中任何一个过程。 格式:DO 见【例7.4】,【例7.4】过程文件调用 *主程序 MAIN.PRG SET PROCEDURE TO GC CLEAR ?“计算圆面积“ DO YMJ ? “计算圆周长“ DO YZC ? “计算球体积“ DO QTJ SET PROCEDURE TO,*过程文件GC.PRG PROCEDURE YMJ R10 S=3.1416*R2 ? “S=“,S RETURN PROCEDURE YZC R20 P=2*3.1416*R ? “P=“,P RETURN PROCEDURE QTJ R30 V=4/3*3.1416*R3 ? “V=“,V RETURN,7.4 变量的作用范围,前面我们介绍的主程序和子程序中,都分别用到了许多内存变量,内存变量按作用域(使用范围)分为两类:全局变量和局部变量,7.4.1 全局变量,命令格式: PUBLIC 功能: 将指定的变量设置为全局变量,并将这些变量的初值均赋以.F.。 说明: (1)全局变量在程序的任何地方(任何模块)都可使用。 (2)若下层模块中建立的内存变量要供上层模块使用,或某模块中建立的内存变量要供并列模块使用,必须将这种变量设置成全局变量。 (3)在命令窗口中定义的变量都是全局变量,但这样定义的变量不能在程序方式下利用。 (4)程序运行结束后全局变量不会自动清除,可用RELEASE、CLEAR ALL命令清除。,7.4.2 局部变量,Visual FoxPro6.0默认程序中定义的变量是局部变量;局部变量仅在定义它的模块及其下层模块中有效,而在定义它的模块运行结束时自动清除。 局部变量允许与上层模块的变量同名,但此时为分清两者是不同的变量,需要采用暂时屏蔽上层模块变量的办法。 命令格式: PRIVATE 功能: 声明局部变量并隐藏上级模块的同名变量,直到声明模块执行结束后,才恢复使用先前隐藏的变量。,说明: (1)“声明”与“建立”不一样,前者仅指变量的类型,后者包括类型与值。PUBLIC命令除声明变量的类型外还赋了初值,故称为建立;而PRIVATE命令并不自动对变量赋值,仅是声明变量的类型。 (2)若应用程序由多个人员同时开发,很可能因变量名相同而失误,如果各人将自己所用的变量用PRIVATE命令来声明,就能避免发生混淆。 (3)在程序模块调用时,参数接收命令PARAMETERS声明的参变量也是局部变量,与PRIVATE命令作用相同。 缺省说明的内存变量和PRIVATE定义的内存变量的区别: (1)缺省说明时:当主程序与过程中的内存变量同名时,返回时过程中变量的值带到主程序。 (2)在过程中用PRIVATE说明时:当主程序与过程中的内存变量同名时,返回时过程中变量的值不能带到主程序。 见【例7.5】,【例7.5】变量的作用范围 *主程序:MAIN.PRG CLEAR CLEAR ALL P=1 S=2 DO SUB ? “P=“,P ? “S=“,S *过程:SUB.PRG PRIVATE P,S M=3 N=5 P=M+N S=P*N RETURN,若过程中无PRIVATE语句,执行结果为: P=8 S=40 若过程中有PRIVATE语句,执行结果为: P=1 S=2 这说明: 当主程序与过程中的内存变量同名时,对PRIVATE说明的私有变量,返回时过程中变量的值不能带到主程序;对缺省说明的私有变量,返回时过程中变量的值能带到主程序。,7.5 程序设计语言基础,程序与交互操作相比,具有4个特点:一是程序可被修改并重新运行;二是程序可从菜单、表单和工具栏下启动;三是一个程序可调用其它程序;四是程序文件一旦编成,则可以多次运行。 Visual FoxPro6.0将结构化程序设计与面向对象程序设计结合在一起,以利于程序员创建出功能强大、灵活多变的应用程序。,7.5.1 交互式输入输出命令,设计程序,就是用一系列命令存储数据并操作这些数据。程序设计的原材料是数据和数据的存储容器,而处理这些原材料的工具是命令、函数的操作符。,1环境设置命令 在程序设计过程中,经常需要设置Visual FoxPro6.0的系统环境,这些命令大部分是由SET开头的命令组成。下面我们介绍重要的设置命令。 (1)清屏命令CLEAR 功能:清除输出屏幕(窗口工作区、主窗口)上的所有字符。 (2)SET TALK ON/OFF 是否在屏幕或打印机上输出每条命令执行的结果 (3)SET ECHO ON/OFF 控制程序文件执行过程中是否显示或打印每条命令 (4)SET PRINT ON/OFF 控制程序执行结果是否打印输出 (5)SET DEVICE TO SCREENPRINTFILE 设置定向输出状态 (6)SET EXACT TO ON/OFF 设置是否需要精确比较 (7)SET DATE ANSIAMERICANMDYDMYYMD 设置日期显示格式,(8)SET SAFETY ON/OFF 系统在用户对文件重写或删除操作时是否给出警告提示 (9)SET DELETED ON/OFF 设置是否忽略记录的逻辑删除标志 (10)SET CONSOLE ON/OFF 发送或暂停输出内容到屏幕上 (11)SET DEFAULT TO 驱动器名 设置系统默认的驱动器 (12)SET INDEX TO 索引文件名表 打开指定的索引文件 (13)SET ORDER TO 数值表达式 在已打开的索引文件名表中指定主索引文件 (14)SET PATH TO 路径表 设置查找文件的路径 (15)SET CENTURY ON|OFF 设置是否在日期的年中显示世纪值,2程序结尾的专用命令 (1)RETURN 终止程序运行,返回到调用它的上级程序继续执行;若无上级程序则返回到命令窗口。 (2)CANCEL 终止程序运行,清除程序的私有内存变量,返回到命令窗口。 (3)QUIT 终止程序运行,关闭Visual FoxPro6.0,返回到操作系统。,3程序注释命令 程序注释命令是非执行命令,仅在程序中显示,用来提高程序的可读性。 (1)行首注释命令 NOTE|* 格式:NOTE|*注释内容 功能:在程序中加注释行信息 (2)行尾注释命令 格式:&注释内容 功能:在命令语句的尾部加注释信息,4ACCEPT和INPUT 格式:ACCEPT TO INPUT TO 功能:暂停程序的运行,在屏幕上显示提示信息,等待用户从键盘上给内存变量赋值。 说明: 输入完后应回车,以示输入结束。 ACCEPT与INPUT命令的区别: ACCEPT: (1)只接受字符型数据,输入时不加界限符。 (2)如仅输入回车,则内存变量的值将是空的。 INPUT: (1)可输入字符型、数值型、逻辑型、日期型数据。 (2)输入字符型数据必须加界限符。 (3)数值型数据可直接输入。 (4)输入逻辑型数据.T.与.F.时,圆点不能漏打。 (5)输入日期型数据时,需用 将日期型数据括起来。 (6)不接受直接回车。 见【例7.6】,【例7.6】综合查询 *按学分查询 CLEAR USE 课程 INPUT “输入学分:“ TO GZ LOCATE FOR 学分=10 DISP USE *按姓名查询 CLEAR USE 学生 ACCEPT “输入姓名:“ TO XM &输入姓名时,不要加界限符 LOCATE FOR 姓名=XM DISP *按出生日期查询 CLEAR INPUT “出生日期:“ TO RQ &例:输入1972-04-30或CTOD(“04/30/72“) LOCATE FOR 出生日期=RQ DISP USE,5WAIT命令 格式:WAIT TO WINDOW AT , 功能:暂停程序的运行,等待用户从键盘上输入单个字符。也可只用于输出一条提示信息。 说明: (1)只接受一个字符,不用回车。 (2)只接受字符型,不管按什么键都作字符型处理,回答时也不能加引号。 (3)若选择选项,则执行此命令时,屏幕上先显示提示信息的内容;若未选择该项,系统提示“按任意键继续”。 (4)如果有TO 选项,则把输入的单键字符存储到指定的内存变量中;如果输入的是回车键,则内存变量的内容是一个空字符。,6文本输出命令TEXTENDTEXT 格式: TEXT 文本信息 ENDTEXT 功能:在屏幕上显示TEXT与ENDTEXT之间的文本信息。,7.5.2 程序控制语句,与其它高级语言程序相似,Visual FoxPro6.0也有三种基本控制结构:顺序结构、分支结构(选择结构)、循环结构。顺序结构按命令的书写顺序依次执行;分支结构根据指定条件的当前值在两条或多条程序路径中选择一条执行;循环结构则由指定条件的当前值来控制循环体中的语句(或命令)是否要重复执行。,1顺序结构程序设计 顺序结构的程序运行时按照语句排列的先后顺序,一条接一条的执行;它是程序中最基本的结构。 2分支结构 (1)简单的条件语句 格式: IF ENDIF 说明: 条件表达式可以是各种表达式的组合,其值必须是逻辑“真”或“假”。 当条件表达式的值为“真”时,先执行IF与ENDIF间的语句,然后执行ENDIF后面的语句;当条件表达式的值为“假”时,直接执行ENDIF后面的语句。 见【例7.7】,【例7.11】从键盘输入一个数,若小于0,则显示“输入的是负数”。 CLEAR INPUT “输入一个数:“ TO X IF X0 ?“输入的是负数“ ENDIF,(2)带ELSE的条件语句 格式: IF ELSE ENDIF 说明: 当条件表达式的值为“真”时,先执行命令序列1,然后转去执行ENDIF后面的语句;当条件表达式的值为“假”时,先执行命令序列2,然后转去执行ENDIF后面的语句。 见【例7.8】,【例7.8】从键盘输入一个数,若小于0,显示“输入的是负数”;否则显示“输入的是非负数”。 CLEAR INPUT “输入一个数:“ TO X IF X0 ? “输入的是负数“ ELSE ? “输入是非负数“ ENDIF,(3)条件语句的嵌套 格式1: IF IF ELSE ENDIF ELSE ENDIF 功能: 当条件1为“真”,同时条件2为“真”时,执行命令序列1; 当条件1为“真”,同时条件2为“假”时,执行命令序列2; 当条件1为“假”,执行命令序列3。,格式2: IF ELSE IF ELSE ENDIF ENDIF 功能: 当条件1为“真”,执行命令序列1; 当条件1为“假”,同时条件2为“真”时,执行命令序列2; 当条件1为“假”,同时条件2为“假”时,执行命令序列3。 见【例7.9】,【例7.9】从键盘输入一个数,若小于0,显示“输入的是负数”;若等于0,显示“输入的是零”;若大于0,则显示“输入的是正数”。 CLEAR INPUT “输入一个数:“ TO X IF X0 ? “输入的是负数“ ELSE IF X=0 ? “输入的是零“ ELSE ? “输入是正数“ ENDIF ENDIF,(4)多分支语句 格式: DO CASE CASE CASE . CASE OTHERWISE ENDCASE 在执行DO CASE命令时,依次判断各条件,若为.T.,就执行对应的,然后转去执行ENDCASE后边的语句。若为.F.,不执行,继续判断下一个条件。若没有一个条件为T,则执行OTHERWISE后面的。若没OTHERWISE语句,则不作任何操作就转去执行ENDCASE之后的语句。 见【例7.10】,【例7.10】随机产生一个10以内的整数并显示。 CLEAR AA=INT(RAND()*10) &随机产生一个10以内的整数 DO CASE CASE AA=0 ? “这次产生的随机数是:0” CASE AA=1 ? “这次产生的随机数是:1” CASE AA=2 ? “这次产生的随机数是:2” CASE AA=3 ? “这次产生的随机数是:3” OTHERWISE ? “这次产生的随机数是:大于3!” ENDCASE,3循环结构 (1)条件循环(“当”型循环控制语句) 格式: DO WHILE EXIT LOOP ENDDO 功能: 当执行到DO WHILE 语句时,首先判断条件表达式的值是否为真,若为真则执行下面的命令序列,遇到ENDDO即返回到循环头,再检查条件是否为真,如果条件仍为真,则再执行命令序列;如此反复检查和执行,直到条件表达式的值为假,即退出循环,转去执行ENDDO后面的语句。 说明: 被重复执行的命令序列称为循环体。 DO WHILE 与ENDDO必须配对使用。 循环条件的改变可以防止出现死循环,控制循环的退出。 EXIT语句中止本层循环,无条件转移到本层ENDDO后面的语句去执行。 LOOP语句中止本次循环,返回到循环头,进行本层次的下一次循环。 见【例7.11】,【例7.11】在学生表中编写完成以下功能的程序: 从键盘输入要查询的学号或姓名时,屏幕上显示该记录的全部内容,显示完后再查其它; 若查找不到,则显示“查无此人,请重输“返回查找其它记录; 若输入“Q或q“则退出查询。 CLEAR USE 学生 DO WHILE .T. ACCEPT “输入学号或姓名或Q:“ TO X IF X=“Q“.OR.X=“q“ EXIT ELSE LOCATE FOR 学号=X.OR.姓名=X IF EOF( ) ?“查无此人,请重输.“ LOOP ENDIF DISP WAIT ENDIF ENDDO USE,(2)步长循环 (“计数”型循环控制语句) 格式: FOR = TO STEP ENDFOR 功能:根据给定的次数重复执行命令序列,实现程序循环。 说明: STPE:步长值是循环控制变量递增或递减的步长。如果步长值为正,循环控制变量递增;如果步长值为负,则循环控制变量递减。如果缺省STEP子句,循环控制变量每次的增量为1。 见【例7.12】,【例7.12】求1+3+5+97+99的值 S=0 FOR X=1 TO 100 STEP 2 S=S+X ENDFOR ?“S=“,S,(3)扫描循环(“指针”型循环控制结构) 格式: SCAN FOR ENDSCAN 功能: 在当前选择的表文件中移动记录指针,如果遇到符合条件的记录就执行命令序列。 说明: SCAN命令自动将记录指针移动到下一条满足条件的记录,并执行相应的命令序列。 见【例7.13】,【例7.13】逐条显示学生表中男生的情况。 USE 学生 SCAN FOR 性别=”男” DISP WAIT ENDSCAN USE,7.6 面向对象程序设计基础,Visual FoxPro6.0不但仍然支持标准的过程化程序设计,而且在语言上还进行了扩展,提供了面向对象程序设计的强大功能和更大的灵活性。 面向对象的程序设计方法与编程技术不同于标准的过程化程序设计。程序设计人员在进行面向对象的程序设计时,不再是单纯地从代码的第一行一直编到最后一行,而是考虑如何创建对象,利用对象来简化程序设计,提供代码的可重用性。面向对象编程技术的使用,使得用户能更加容易地编制自己的应用程序。,7.6.1 面向对象程序设计的基本概念,在面向对象的程序设计中,程序代码不是按照预定的路径执行的,而是在响应不同的事件时执行不同的代码片段,即受“事件驱动”。事件可以由用户操作触发,也可以由来自操作系统或其它应用程序的消息触发,甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的路径都是不同的。 面向对象程序设计的两个基本特点是: (1)它是可视化的编程方式。 (2)程序运行没有一定的顺序,由事件驱动。 在面向对象的程序设计中,最重要的概念是对象和类,它们是关系密切但又完全不同的两个概念。,1对象 对象是数据和数据的操作代码的组合体。对象既具有静态的属性又可具有动态的行为。 在面向对象的程序设计中,对象是构成程序的基本单位,是程序的运行实体。对象可以是任何的具体事物。在Visual FoxPro6.0中,标签、表格、表单以及所有控件都可看成是应用程序中的对象。对象是应用程序中的一个处理单位。 2类 类是建立对象时使用的模板,按照某个模板所建立的一个个具体的对象,就是类的实例。实例就是根据某个抽象的类所派生出来的一个具体的对象。例如,在Visual FoxPro6.0中系统定义了一个表单类,它有许多的属性(如长度、宽度、背景色、表单标题等),还定义了事件和操作方法,但它是一个抽象的框架,属性和方法都没有具体的值。而图101中的“旅馆服务表单”就是根据这个类创建的一个具体的表单,即类表单的一个具体的实例,它的属性,如长度、宽度、背景色、表单标题等都有确定的值。,类具有继承性、封装性和多态性: (1) 继承性:类可以从现有的类派生出新的类。派生类具有父类的所有特性,包括父类的所有方法和数据(属性)。 (2)封装性:指将方法和数据存放在同一个对象中,而且对数据的存取只能通过该对象的方法进行,其它对象不能直接访问该对象中的数据,对象间的相互作用只能通过信息进行。 (3)多态性:指子类对象可以像父类对象那样使用,同样的消息可以发给父类对象也可以发给子类对象。 面向对象程序设计基本上是一种包装代码,代码可以重用而且维护起来很容易。其中最主要的包装概念就是类。,7.6.2 类及其操作方法,Visual FoxPro6.0的对象所具有的属性是由派生该对象的类决定的,而且这些属性既可以在设计时指定,也可以在运行时指定。 当用户打开表单或控件的属性窗口,并选择“其它”选项卡时,可能会看到涉及类定义的以下几个属性: (1)BASECLASS(基类):Visual FoxPro6.0中内部定义的类,用户可使用它们创建自定义类,如表单和所有控件都是基类,用户可在此基础上创建新类,增添需要的功能。 (2)CLASS(类):派生该对象的类名。 (3)PARENTCLASS(父类):派生该对象的父类名。仅对自定义类有效,如果类是直接从Visual FoxPro6.0基类上派生的,则本项为空。,1容器类 容器类可以包含其它对象,并允许访问这些对象。这些对象无论是在运行时还是在设计时都可以单独地操作。常用的容器类有:表单(FORM)、表单集(FORMSET)、列(COUMN)、命令按钮组(COMMANDBUTTON GROUP)、容器(CONTAINER)、表格(GRID)、选项按钮组(OPTIONBUTTONGROUP)、页(PAGE)、页框(PAGEFRAME)、工具栏(TOOBAR),其中,表单集和页框是不可见类。,2控件类 控件类中不能包含其它对象,只能加入到其它对象中。控件类的封装比容器类更为严密。当引用容器中的控件对象时必须经过容器,其格式是:容器对象.控件对象.属性。 例如:在FORM1表单中设置标签ABLE1的CAPTION属性:FORM1.ABLE1.CAPTION=“姓名“ Visual FoxPro6.0中常用的控件类有: 复选框(CHECKBOX)、组合框(COMBOBOX)、命令按钮(COMMANDBUTTON)、编辑框(

温馨提示

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

评论

0/150

提交评论