第 5 章 FoxPro 语言基础

Post on 15-Mar-2016

150 views 0 download

description

第 5 章 FoxPro 语言基础. 5.1 数据类型 5.2 常量与变量 5.3 运算符与表达式 5.4 数组 5.5 流程控制 5.6 过程与函数 5.7 实例. 第 5 章 FoxPro 语言基础. 本章将介绍 FoxPro 的程序设计部分,包括数据类型、函数、程序流程、过程和函数以及程序控制等。. 5.1 数据类型. ( 1 )字符型( Character ) ( 2 )日期型( Date ) ( 3 )日期时间型( DateTime ) ( 4 )数值型( Numeric ) - PowerPoint PPT Presentation

Transcript of 第 5 章 FoxPro 语言基础

第 5 章 FoxPro 语言基础 5.1 数据类型 5.2 常量与变量 5.3 运算符与表达式 5.4 数组 5.5 流程控制 5.6 过程与函数 5.7 实例

第 5 章 FoxPro 语言基础 本章将介绍 FoxPro 的程序设计部分,包括数据类型、函数、程序流程、过程和函数以及程序控制等。

5.1 数据类型( 1 )字符型( Character )( 2 )日期型( Date )( 3 )日期时间型( DateTime )( 4 )数值型( Numeric )( 5 )逻辑型( Logical )( 6 )货币型( Currency )

表 5-1 其他数据类型其他数据类型 说明

双精度型( Double ) 用于取代数值型,以便能提供更高的数值精度。双精度型只能用于数据表中字段的定义,它采用固定存储长度的浮点数形式。与数值型不同,双精度型数据的小数点的位置是由输入的数据值来决定的。每个双精度型数据占 8 个字节浮点型( Float ) 只能用于数据表中字段的定义,包含此类型是为了提供兼容性,浮点型在功能上与数值型等价通用型( General ) 用于存储 OLE 对象,只能用于数据表中字段的定义。该字段包含了对 OLE 对象的引用,而 OLE 对象的具体内容可以是一个电子表格、一个字处理器的文本、图片等,是由其他应用软件建立的整型( Integer ) 用于存储无小数部分的数值,只能用于数据表中字段的定义。在数据表中,整型字段占用 4 个字节,取值范围是: -214748364

7 ~ 2147483647 。整型以二进制形式存储,不像数值型那样需要转换成 ASCII 字符存储备注型( Memo ) 备注型用于字符型数据块的存储,只能用于数据表中字段的定义。在数据表中,备注型字段占用 10 个字节,并用这 10 个字节来引用备注的实际内容。实际备注内容的多少只受内存可用空间的限制。备注型字段的实际内容变化很大,不能直接将备注内容存在数据表( .DBF )文件中。系统将备注内容存放在一个相对独立的文件中,该文件的扩展名为 .DBT 。由于没有备注型的变量,所以对备注型字段的处理,需转换成字符型变量,然后使用字符型函数进行处理

5.2 常量与变量5.2.1 常量

5.2.2 变量1. 内存变量 【例 5-2 】在命令窗口中用两种赋值法分别将 var_Age 赋值为 13 和 28 。 在命令窗口中输入以下代码: var_Age=13 && 定义变量 var_Arg ,并用第一种方法赋值为 13 。 ?var_Age && 显示 var_Age 的值。 store 28 to var_Age && 用第二种方法赋值为 28 。 ?var_Age

2. 字段变量 字段变量是一种只在数据库里出现的变量 如一个表中有字段“姓名”、“学号”、“性别”等,而“黎明”、“ 15” 、“男”则是相应的字段值。 3. 系统变量 系统变量是指以字符“ _” 开头的,由 FoxPro系统自动定义生成的变量。它的名称是系统已定义好的,如: _HTML

5.3 运算符与表达式5.3.1 算术运算符与算术表达式5.3.2 字符串运算符与字符串表达式5.3.3 关系运算符与表达式5.3.4 逻辑运算符与逻辑表达式

5.3 运算符与表达式( 1 )算术运算符和算术表达式。( 2 )字符串运算符和字符串表达式。( 3 )日期运算符和日期表达式。( 4 )关系运算符和关系表达式。( 5 )逻辑运算符和逻辑表达式。

5.3.1 算术运算符与算术表达式表 5-2 算术运算符

算术运算符 说明 表达式例子 结果+ 同数学中的加法 50+2 52

- 同数学中的减法 50-5 45

* 同数学中的乘法 3*2 6

/ 同数学中的除法 9/3 3

^ 或 ** 同数学中的乘方,如 4^3表示 642^8 或 2**8

256

% 同数学中的求余 8%3 2

5.3.2 字符串运算符与字符串表达式表 5-3 字符串运算符

运算符 说明 表达式例子 结果+ 连接字符串 1 和字符串 2

“abc”+“def” “abc def”

- 连接字符串,字符串 1 尾部的空格移到字符串 2 的尾部“abc”-“def” “abcdef”

$ 若字符串 1 是字符串 2 的子串,结果为 .T. ;否则为 .F.

“abc”$“abcdef” .T.

5.3.3 关系运算符与表达式表 5-4 关系运算符

运算符 说明 表达式例子 结果= 等于,在进行字符串比较时受 SET EXACT 命令影响

( 1 ) 3 = 3( 2 )“ abc”=“ab”( 1 ) .T.( 2 ) .T. ( SET EXACT OFF ); .F. (SET EXACT ON )

== 与“ =” 相似,但在字符串比较时不受 SET EXACT 命令影响。它不仅要求字符串的长度相等,而且每个字符也对应相等

“abc”==“ab” 无论是 SET EXACT OFF 还是 ON 都为 .F.

> 大于 1 > 2 .F.

>= 大于或等于 2 >= 1 .T.

< 小于 23 < 54 .T.

<= 小于或等于 {^1998/02/16} <={^1998/02/16}

.T.

<> 或 != 或 #

不等于 ( 1 ) 10 <> 4( 2 )“ Open”!= “Open”( 3 ) .T. # .F.

( 1 ) .T.( 2 ) .F.( 3 ) .T.

5.3.4 逻辑运算符与逻辑表达式表 5-5 逻辑运算符

运算符 说明 表达式例子 结果AND 与运算 ( 1 ) .T. AND .F.( 2 ) .T. AND .T. ( 3 ) .F. AND .F.

( 1 ) .F.( 2 ) .T.( 3 ) .F.

OR 或运算 ( 1 ) .T. OR .F. ( 2 ) .T. OR .T.( 3 ) .F. OR .F.

( 1 ) .T.( 2 ) .T.( 3 ) .F.

NOT 或 ! 非运算 ( 1 ) NOT .T. ( 2 ) ! .F.( 1 ) .F.( 2 ) .T.

5.4 数组数组变量是 FoxPro 中的特殊的内存变量,它是名字相同而下标不同的一组有序变量,其中的每个有序变量构成数组的成员,称为数组元素。【例 5-7 】创建一个 4 行 5 列的数组,并为数组的第 1 行第 2 列元素赋值。在命令窗口中输入代码如下: DIMENSION ArrayName[4,5] ArrayName[1,2]=3 ?ArrayName[1,2]

5.5 流程控制 5.5.1 条件语句 5.5.2 分支语句 5.5.3 循环语句

5.5.1 条件语句条件结构如图 5-14 所示

图 5-14

Visual FoxPro 条件选择语句由 if…else…endif 关键字构成,其语法结构及格式如下:IF 逻辑表达式程序体 1[ ELSE程序体 2 ]ENDIF

5.5.2 分支语句FoxPro 分支选择语句主要由 do…case…endcase 关键字构成。其语法结构及格式如下:DO CASE CASE 逻辑表达式 1程序体[ CASE 逻辑表达式 2程序体…CASE 逻辑表达式 N程序体 ][ OTHERWISE 程序体 ]ENDCASE

图 5-21

分支语句的执行过程

5.5.3 循环语句1. 循环语句的设计思想循环结构如图 5-23 所示。当条件 p 成立时,反复执行 A 操作直到条件 p 不成立为止。

图 5-23

2. for…endfor语句语法结构及格式如下:FOR 内存变量 = 初值 TO 终值[STEP步长]程序体[ LOOP ][ EXIT ] ENDFOR | NEXT

【例 5-11 】求 10的阶乘建立程序“程序 1” ,在“程序 1” 中输入如下代码: CLEAR I = 1Result = 1DO WHILE I<=10 && 保证 10是最大的界限。 Result = Result * I && 计算从 1 乘到 I 的乘积。 ? ″ 当 I 为″ , I , ″时,乘得的值是:″ , Result I = I+1 && 循环结束。ENDDO? && 空一行。? ″所以从 1 乘到 10所得的值是″ ,ResultRETURN

图 5-24 图 5-25

5.6 过程与函数 5.6.1 常用函数 5.6.2 过程和自定义函数

5.6.1 常用函数1. 子串函数 SUBSTR()2. 删除空格函数 ALLTRIM()3. 取整函数 INT()4. 四舍五入函数 ROUND()5. 数值转数字字符串函数 STR()6. 字符转数值函数 VAL()7. 字符转日期函数 CTOD()8. 测试文件尾函数 EOF()9. 测试文件头函数 BOF()10. 测试当前记录号函数 RECNO()

1. 子串函数 SUBSTR()函数 SUBSTR() 的功能是从字符串表达式或者备注型字段中截取指定的字符个数。在命令窗口中输入如下代码: stor ″2001-11-15″ to crq ?SUBSTR(crq,1,4)

2. 删除空格函数 ALLTRIM()函数 ALLTRIM() 的功能是删除字符表达式的值前后的空格。在命令窗口中输入如下代码: stor″ 2001-11-15 ″ to crq?ALLTRIM(crq)

3. 取整函数 INT()函数 INT() 的功能是取指定数值表达式计算结果的整数部分。在命令窗口中输入如下代码:?INT(-198.21)

4. 四舍五入函数 ROUND()函数 ROUND() 的功能是按给定的四舍五入小数位数,对数值表达式的计算结果作四舍五入的处理。在命令窗口中输入如下代码:?ROUND(192.5637,3)

5. 数值转数字字符串函数 STR()函数 STR() 的功能是将数值转换为字符串。在命令窗口中输入如下代码:?STR(198.5633)

6. 字符转数值函数 VAL()函数 VAL() 的功能是将字符数据转换为数值型数据。在命令窗口中输入如下代码:?VAL(″2001″)

7. 字符转日期函数 CTOD()函数 CTOD() 的功能是将字符表达式中字符型日期转换为日期型数据。在命令窗口中输入如下代码:set date ansi?ctod(″1999.10.30″)

8. 测试文件尾函数 EOF()函数 EOF() 的功能是测试由区号或者表别名指定文件中的记录指针是否指向文件尾。如果是则返回真值,否则返回假值。在命令窗口中输入如下代码:Use d:\vfp\ 职工表GO bottSkip?EOF()

9. 测试文件头函数 BOF()函数 BOF() 的功能是测试由区号或者表别名指定文件记录指针是否指向文件头。如果是则返回真值,否则返回假值。在命令窗口中输入代码:Use d:\vfp\ 职工表GO 1Skip -1?BOF()

10. 测试当前记录号函数 RECNO()函数 RECNO() 的功能是测试由区号或表别名指定文件中的记录指针的记录号。在命令窗口中输入代码:Use d:\vfp\ 职工表GO 5?RECNO()

5.6.2 过程和自定义函数1. 创建过程和函数可以使用 procedure…endproc 命令定义过程。基本语法结构及格式如下:PROCEFURE 过程名过程体[RETURN [ 表达式 ]]ENDPROC

2. 调用过程和函数以下是函数调用的几种方式。( 1 )作为表达式的一部分: vartype(myfunc()) 。( 2 )以过程方式调用: DO myfunc 。( 3 )作为命令使用: myfunc() 或 =myfunc() 。例如过程 MyProc 存放在文件 Func_Proc.PRG中,调用它们的命令语句是:SET PROCEDURE TO Func_Proc.prgDO MyProc

3. 使用参数很多时候程序需要向过程或函数传递值来解决问题,这时就要使用参数。 Visual FoxPro 的过程使用小括号“()”或者命令 LPARAMETERS引进参数。格式:PROCEDURE 过程名 [ (参数列表) ][LPARAMETER 参数列表 ]代码段ENDPROC

5.7 实例( 1 )加解密字符串。( 2 )如果有人非法修改密码,将提示非法修改。

小结 要建立数据库应用程序,就要进行程序设计,本章主要介绍如何在 FoxPro 中进行程序设计。内容包括 FoxPro 中使用的数据类型和文件类型以及程序设计的常量、变量和表达式。这些知识是设计数据库应用程序的基础,只有了解并掌握这些基础知识,才能进一步学习程序设计中的选择结构和循环结构及过程与函数。 通过本章的学习,可以看出程序设计在数据库中的使用,它与其他程序设计语言有一定的差距, FoxPro 中的程序设计简单、易用且功能强大,结合 SQL语言结构化查询语言一起使用,可以很方便地创建功能强大的数据库应用程序。