第 3 章 数据及其运算

Preview:

DESCRIPTION

第 3 章 数据及其运算. 主要内容. 3.1 数据类型 3.2 常量与变量 3.3 运算符与表达式 3.4 函数 复习思考题. 第 3 章 VFP 数据及其运算. 3.1.1 基本数据类型. 1. 数值型数据 (Numeric) : 用来表示数值,它由符号 (+ 或 -) 、数字 0 ~ 9 和小数点 (.) 组成。数值型数据的取值范围: -0.9999999999×10 19 ~ 0.9999999999×10 20 。数值型数据在内存中占 8 个字节,在数据表中占 20 个字节。 2. 货币型数据 (Currency) : - PowerPoint PPT Presentation

Citation preview

第 3 章 数据及其运算

主要内容

3.1 数据类型3.2 常量与变量3.3 运算符与表达式3.4 函数复习思考题

第 3 章 VFP 数据及其运算

3.1.1 基本数据类型1. 数值型数据 (Numeric) :用来表示数值,它由符号 (+ 或 -) 、数字 0 ~ 9 和小数点

(.) 组成。数值型数据的取值范围: -0.9999999999×1019 ~ 0.9999999999×1020 。数值型数据在内存中占 8 个字节,在数据表中占 20 个字节。

2. 货币型数据 (Currency) :用来表示货币值。货币型数据最多保留 4 位小数,多余

小数采用四舍五入法截取。取值范围:- 922337203685477.5807 ~ 922337203685477.5807 。货币型数据也用 8 个字节存放,如工资、单价等采用货币型数据。

3.1 VFP 数据类型

3.1.1 基本数据类型3. 字符型数据 (Character) :由字母 ( 汉字 ) 、数字、空格等任意 ASCII 码字

符组成,每个字符占 1 个字节,总长不能超过 254个字节。注意:一个空格也是一个字符。

4. 日期型数据 (Date) :用来表示不带时间的日期, 8 个字节。5. 日期时间型数据 (DateTime) :用来表示日期和时间, 8 个字节。6. 逻辑型数据 (Logical) :用来表示事物的两种状态, 1 个字节。

3.1 VFP 数据类型

3.1.2 字段数据类型数据表中字段数据类型除了上述了 6 种外,还

包含以下 7 种数据类型:1. 双精度型 (Double) :采用固定存储长度的浮

点数形式。与数值型不同,双精度型数据的小数点的位置是由输入的数据值来决定的。双精度型数值的取值范围是: +/-4.94065645841247E-324 ~ +/ -8.9884656743115E307 ,每个数据占 8 个字节。

2. 浮点型 (Float) :功能上与数值型等价。3. 整型 (Integer) :用于存储无小数部分的数值。

在数据表中占用 4 个字节,取值范围是: -2147483647 ~ 2147483647 。整型以二进制形式存储,不像数值型那样需要转换成 ASCII 字符存储。

3.1 VFP 数据类型

3.1.2 字段数据类型4. 备注型 (Memo) :用于字符型数据块的存储,在数

据表中用 4 个字节表示。备注型字段的实际内容变化很大,不能直接将备注内容存在数据表 (.DBF) 文件中。系统将备注内容存放在一个相对独立的文件中,该文件的扩展名为 .DBT 。

5. 通用型 (General) :用于存储 OLE 对象,在数据表中用 4 个字节表示。该字段包含了对 OLE 对象的引用,而OLE 对象的具体内容可以是一个电子表格、一个字处理器的文本、图片等,是由其它应用软件建立的。

6. 字符型 ( 二进制 ) :用于存储任意不经过代码页修改而维护的字符数据,只能用于数据表中字段的定义,在数据表中用 4 个字节表示。

7. 备注型 ( 二进制 ) :用于存储任意不经过代码页修改而维护的备注型数据,在数据表中用 4 个字节表示。

3.1 VFP 数据类型

3.2.1 常量常量是指在整个操作过程中其值保持不变的数

据项。 VFP6 的常量有如下 6 种类型。1. 数值型常量整数、小数或用科学记数法表示的数都是数值

型常量。例如 100 、 -56 、 3.14159 、 0.28E6 、 2E-5 等。

2. 字符型常量字符型常量是用定界符括起来的字符串。定界

符可以是双撇号、单撇号或方括号。例如:“ VFP6.0” 、‘关系数据库’、 [ 网络操作系统 ] 。

3.2 常量与变量

3.2.1 常量3. 逻辑型常量逻辑型常量只有 2 个值:真和假。用 .T. 、 .

t. 、 .Y. 或 .y. 都可以表示真;用 .F. 、 .f. 、 .N. 或 .n. 都可以表示假。

4. 日期型常量日期型数据 ( 包括后面的日期时间型数据 ) 的表

示格式与 VFP 系统设置有关。系统默认输入格式为严格日期格式: {^yyyy-mm-dd} ,例如 {^2009-06-13} 表示 2009 年 6 月 13 日。

执行 SET STRICTDATE TO 0 命令后,即可使用通常日期格式 mm/dd/yyyy 。例如 {06/15/2009}或 {6/15/09} 表示 2009 年 6 月 15 日。执行 SET STRICT DATE TO 1 命令即可恢复严格日期格式。

3.2 常量与变量

3.2.1 常量日期格式设置的相关命令常用的有如下几个:SET MARK TO “ 分隔符”:设置指定符号为

日期年月日间的分隔符SET DATE TO MDY | YMD |…:指定日期

输出格式SET STRICTDATE TO 0 | 1 | 2 :指定日期

输入格式SET CENTURY ON/OFF :指定日期中的年份

前是否显示世纪SET HOURS TO :指定一天计时采用 12 小时

制还是 24 小时制

3.2 常量与变量

3.2.1 常量5. 日期时间型常量日期时间型常量表示日期和时间,默认输入格

式为: {^yyyy-mm-dd[ , ][hh[ : mm[ : ss]][a|p]]} 。方括号中的内容为可选项,符号“ |” 表示“或者” ( 下同 ) 。例如, {^2009-10-28,1:10:5 p}表示 2009 年 10 月 28 日下午 1 点 10 分 5秒。

日期时间型数据中可以只包含一个日期或者只包含一个时间值,缺省日期值时,系统自动加上 1999 年 12 月 31 日,省略时间值时,则自动加上午夜零点。

6. 货币型常量货币型常量以符号“$”开头,例如 $638 , $

22.36 , $8120.2635 等。

3.2 常量与变量

3.2.2 内存变量 在命令操作或程序执行过程其值可能发生变化

的量称为变量。变量有两大类:字段变量和内存变量。内存变

量又分为用户定义的内存变量 (简称内存变量 ) 和系统内存变量 (简称系统变量 ) 。

1. 内存变量的命名为每个内存变量 ( 即存储单元 ) 取一个名称,叫

做变量名。内存变量名的命名规则是:以汉字或字母开头,

由汉字、字母、数字及下划线组成,长度为 1 ~ 254 个字符;不能使用 VFP6 的保留字 ( 如 CREATE 、REPLACE 等 ) 。

3.2 常量与变量

3.2.2 内存变量2.创建内存变量与赋值在 VFP6 中,变量必须先定义后使用。但在向

内存变量赋值时,变量的定义和赋值同时完成。赋值命令的格式有两种。

命令格式 1 : 内存变量名 = 表达式命令格式 2 : STORE 表达式 TO 内存变

量列表 例 3.1 给内存变量 m , n , z赋值。 m={^ 2009-10-31} && m 的值为 2009 年的 10 月 31 日,类型为

D

STORE 1/2 TO n , z && n 、 z 的值都为 0.5

?m?n,z

3.2 常量与变量

3.2.2 内存变量3. 内存变量的类型内存变量的类型是指变量中存放的数据值 ( 即

常量 ) 的类型。在 VFP6 中有 6 种类型的内存变量:数值型 (N) 、

字符型 (C) 、逻辑型 (L) 、日期型 (D) 、日期时间型(T) 、货币型 (Y) 。

内存变量的类型由其所获得的值的类型来决定。

3.2 常量与变量

3.2.2 内存变量4. 内存变量的显示(1) 显示内存变量的命令:命令格式: LIST | DISPLAY MEMORY [LIK

E < 通配符 >] [TO PRINTER][PROMPT]|[TO FILE < 文件名 >]

功能:输出指定内存变量的值、类型。例 3.2 日期 ={^2009/10/23} 出生日期 ={^1982/09/23} DISPLAY MEMO

3.2 常量与变量

3.2.2 内存变量(2)? 和 ?? 命令内存变量的输出也可用“ ?” 和“ ??” 命令来实

现。命令格式 1 : ? [< 表达式列表 >]命令格式 2 : ?? [< 表达式列表 >]功能:计算并输出指定表达式的值。使用说明:“表达式列表”表示后面可以列出多个变

量或表达式,各项之间用逗号分隔;格式 1 表示在当前光标行的下一行输出,格式 2 表示在当前光标行输出。

例 3.3 ?"5*6=" , 5*6 && 在当前光标下行输出: 5*6= 30

?? "44+55=",44+55 && 在当前光标行输出: 44+55= 99

3.2 常量与变量

3.2.2 内存变量5. 内存变量的存储 SAVE TO 文件名 [ALL LIKE/ EXCEPT 通配

符 ]6. 内存变量的恢复 RESTORE FROM 文件名 [ADDITIVE]例 3.4 在命令窗口中依次执行以下命令RELEASE ALLSTORE “OK” TO A1 , Bl , A2 , B2SAVE TO AA ALL LIKE ?1RELEASE ALLAA=23RESTORE FROM AA ADDITIVELIST MEMORY

3.2 常量与变量

3.2.2 内存变量7. 变量的释放命令格式 1 :RELEASE 内存变量列表 &&清除列表中指定的内存变

量命令格式 2 :CLEAR MEMORY &&清除所有内存变量

8. 内存变量的作用域在程序中定义的内存变量所起作用的范围,称

为内存变量的作用域。根据内存变量的作用范围可把内存变量分为私有型变量 (Private) 、全局型变量(Public) 和局部型变量 (Local)3 种。

3.2 常量与变量

3.2.3 数组变量 数组变量是一组连续顺序排列的内存变量,其

中各个内存变量称为数组元素。数组元素用数组名及其在数组中排列位置的下标来表示,下标的个数称为数组的维数。例如,含有 5 个元素的一维数组a ,其 5 个元素是: a(1) , a(2) , a(3) , a(4) , a(5) 。又如,含有 2 行 3列的二维数组 y ,共有 2×3个元素:

y(1,1) y(1,2) y(1,3) y(2,1) y(2,2) y(2,3)在 VFP6 只使用一维数组和二维数组。

3.2 常量与变量

3.2.3 数组变量1. 数组的定义数组必须先定义后使用。 VFP6 用 DECLARE

或 DIMENSION 命令定义数组。命令格式: DIMENSION | DECLARE 数组名

1 (< 数值表达式 1>[ ,数值表达式 2]>)[ ,数组名 2(< 数值表达式 1>…)]

功能:定义一维或二维数组及其下标的上界。下标的下界系统规定为 1 。

例如: DIMENSION a(5) , y(2,3)

3.2 常量与变量

3.2.3 数组变量2. 数组的访问既可访问整个数组,也可分别访问数组各元素。一维数

组各元素在内存中按其下标的顺序存储。二维数组各元素在内存中按行的顺序存储,使用时也可以按一维数组表示其元素。

3. 数组的赋值每个数组元素初值为 .F. 。用赋值命令 (STORE 或 =)

可以给数组各元素赋同一值,也可以给每个元素赋不同类型的值。

例如: y=1 &&给数组 y 的 6 个元素赋相同的数值 1 ,也称整体赋值。

又如: a(l)=“冯家山” &&给数组元素 a(1)赋字符串“冯家山”。

a(2)=28 &&给数组元素 a(2)赋数值 28 ,表示年龄

4. 数组的显示、存盘、恢复与删除数组也属于内存变量。所以有关内存变量的操作命令均

可以在数组操作中使用。3.2 常量与变量

3.2.4 系统变量 系统变量是 VFP6提供和维护的系统内存

变量,系统变量名以下划线“ _”开头,用于控制鼠标器、打印机等外部设备和屏幕输出格式,或者处理有关计算器、日历、剪贴板等方面的信息。例如:

_CLIPTEXT=“百年大计教育为本”执行该命令后,便将字符串“百年大计教

育为本”存入剪贴板中。

3.2 常量与变量

3.2.5 字段变量 二维表的每一列称为一个字段,每一个字段都是

一个字段变量。例如学号、姓名、性别、出生日期、简历、照片等都是字段变量。字段变量与数据表相联系,在建立表结构时定义,修改表结构时可被重新定义,每个字段变量有一个特定的数据类型。字段变量随着表的打开和关闭而在内存中存储和被释放。字段变量属于多值变量,其值因记录而异。

注意:当内存变量与字段变量同名时,系统优先引用字段变量。如果要引用内存变量,则可在内存变量名前加前缀“ M.” ,以示区别。

例如: ? M.姓名 && 显示内存变量姓名的值 3.2 常量与变量

3.3 运算符与表达式 VFP6 中的表达式是指用运算符将常量、

变量、字段、函数按 VFP6 的语法规则连接起来的式子。单个的常量、变量、字段和函数也是表达式,是最简单的表达式。按照表达式的值的数据类型,把表达式分

为算术表达式、字符表达式、日期表达式、逻辑表达式、关系表达式和名表达式。

3.3 VFP 运算符与表达式

3.3.1 算术运算符和算术表达式算术表达式是由算术运算符、数值型常量、变量、函数

和圆括号组成,其运算结果为一数值。 表 3.1 算术运算符

运算符 名称 说明+ 加 同数学中的加法- 减 同数学中的减法* 乘 同数学中的乘法/ 除 同数学中的除法

^或 ** 乘方 同数学中的乘方,如用 4^3表示数学上的43

% 求余 12%5表示 12除以 5所得的余数

3.3 VFP 运算符与表达式

3.3.2 字符运算符与字符表达式一个字符串表达式由字符串常量、字符串变量、字符串

函数和字符串运算符组成。 表 3.2 字符运算符

运算符 名称 说明

+ 连接 将字符型数据进行连接

- 移位连接 两字符型数据连接时,将前一数据尾部的空格移到后面数据的尾部

3.3 VFP 运算符与表达式

例 3.5 下面是一些字符串表达式的示例。

?“XYZ123”+“876xyz” &&连接后结果为“ XYZ123876xyz”

?“ 数据库” +“ 基础” &&连接后结果为“数据库基础”

?“abc 45”+“abcd”+“123” &&连接后结果为“ abc 45abcd123”

?“XYZ ”-“DEFG” &&连接后结果为“ XYZDEFG”

3.3 VFP 运算符与表达式

3.3.2 字符运算符与字符表达式

3.3.3 日期时间运算符与日期时间表达式

日期型表达式由算术运算符 (“+” ,“ -”) 、算术表达式、日期型常量、日期型变量和函数组成,日期只能进行加“ +” 、减“ -” 运算,分下列三种情况:

1. 两个日期型数据相减两个日期型数据相减,其结果是一个数值型数据

( 两个日期相差的天数 ) 。例如: {^2008/12/19}-{^ 2008/11/16} &&结果为数值型数据 33

2. 日期型数据加数值型数据日期型数据加数值型数据,其结果仍然为一个日

期型数据 (向后推算日期 ) 。例如:{^ 2008/11/16}+33 &&结果为日期型数据 {^ 2008/12/

19}

3.3 VFP 运算符与表达式

3. 日期型数据减数值型数据日期型数据减数值型数据,其结果仍然为一日

期型数据 (向前推算日期 ) 。例如:{^ 2008/12/19}-33 &&结果为日期型数据

{^ 2008/11/16}

4.VFP6 对无效的日期的处理日期或日期时间型数据中的月份、天数、时、

分、秒都有其各自的值域范围,如果发生输入或计算错误则为无效日期,系统会给出错误提示。

5. 空日期或日期时间型数据的表示:{}

3.3 VFP 运算符与表达式

3.3.3 日期时间运算符与日期时间表达式

3.3.4 关系运算符与关系表达式

关系表达式是指用关系运算符将两个表达式连接起来的式子 ( 例如 a+b>0) 。关系运算符又称比较运算符,用来对两个表达式的值进行比较,比较的结果是一个逻辑值,这个结果就是关系表达式的值。

3.3 VFP 运算符与表达式

3.3.4 关系运算符与关系表达式

注意:1. 关系运算符两边的数据类型必须一致;2. 字符型数据从左向右依次比较其字符对

应 ASCII 码大小,有了差异则不再继续比较;日期型及日期时间型数据按对应项 ( 年、月、日、时、分、秒 )比较其数值大小,有了差异则不再继续比较。

3.“==” 和“ $” 运算符两边只能是字符型数据。

3.3 VFP 运算符与表达式

3.3.5 逻辑运算符与逻辑表达式

逻辑表达式是指用逻辑运算符连接若干关系表达式或逻辑值而成的式子,在较为复杂的条件中使用。如不等式 a1≤x≤a2 可以表示为 a1<=x AND x<=a2 。逻辑表达式的值也是一个逻辑值。

3.3 VFP 运算符与表达式

3.3 运算符与表达式

表 3.5 逻辑运算规则表a B a AND b a OR b NOT a

.T. .T. .T. .T. .F.

.T. .F. .F. .T. .F.

.F. .T. .F. .T. .T.

.F. .F. .F. .F. .T.

3.3 VFP 运算符与表达式

3.3 运算符与表达式 表 3.6 运算符的优先顺序优先顺序 运算符类型 运 算 符1 算术运算符 ^ (指数运算 )2 -(负数 )3 *、 /(乘法和除法 )4 % (求模运算 )5 +、 -(加法和减法 )6 字符串运算符 +、 -(字符串连接 )7 关系运算符 = 、 <>、 <、 >、 <=、 >=、 $、 = =8 逻辑运算符 .NOT.

9 .AND.

10 .OR.

3.3 VFP 运算符与表达式

3.3 运算符与表达式 例 3.6 设变量 x=4 , y=-3 , a=4.5 , b

=-1.2 ,求下列表达式的值: ? x+y>a+b AND NOT y<b

解:①先作算术运算: 1>3.4 AND NOT y<b

②再作关系运算: .F. AND NOT .T.

③作逻辑非运算: .F.AND .F.

④最后得: .F.

3.3 VFP 运算符与表达式

3.3 运算符与表达式 3.3.6 类与对象运算符类与对象运算符专门用于实现面向对象的程序设计。有以下两种:.( 点运算符 ) :确定对象与类的关系,以及属性、事件和方法与其

对象的从属关系。∷( 作用域运算符 ) :用于在子类中调用父类的方法。3.3.7 名表达式VFP6 为许多命令和函数需要提供一个名。可在 VFP6 中使用的名有:表的文件名、表的别名、表的字段名、

索引文件名、文件名、内存变量名和数组名、窗口名、菜单名、表单名、对象名、属性名等。

在 VFP6 中定义一个名表达式时,需要遵循以下原则:首字符只能使用字母 ( 汉字 ) 或下划线;其余字符只能使用字母 ( 汉字 ) 、数字和下划线字符;不能使用 VFP6 保留字;名的长度可以为 l ~ 254 个字符,但自由表中的字段名、索引标记名最多为 10 个字符。文件名按操作系统的规定。

3.3 VFP 运算符与表达式

3.3 运算符与表达式 名不定义变量或字段,但可以定义一个名表达

式,以代替同名的变量或字段的值。名表达式为 VFP6 和函数提供了灵活性。将名存放到变量或数组元素中,就可以在命令或函数中用变量来代替该名,只要将存放一个名的变量或数组元素用一对定界符括起来。例如:

STORE “ADDRESS” TO xREPLACE x WITH “ChengDu”字段名 ADDRESS被存放在变量 x 中,在使用

REPLACE 命令时,名表达式 (x) 将用字段名代替变量,这种方法称为间接引用。

3.3 VFP 运算符与表达式

3.4 函数 3.4.1 函数的分类VFP6 系统函数大约有 380 多个,主要分

为数值函数、字符处理函数、表和数据库函数、日期时间函数、类型转换函数、测试函数、菜单函数、窗口函数、数组函数、 SQL查询函数、位运算函数、对象特征函数、文件管理函数以及系统调用函数等 14 类。

3.4 VFP 的常用函数

3.4 函数 3.4.2 数值函数

3.4 VFP 的常用函数

3.4 函数

3.4 VFP 的常用函数

3.4 函数 3.4.3 字符串函数

3.4 VFP 的常用函数

3.4 函数

3.4 VFP 的常用函数

3.4 函数 3.4.4 类型转换函数

3.4 VFP 的常用函数

3.4 函数 3.4.5 测试函数

3.4 VFP 的常用函数

3.4 函数 3.4.6 日期和时间函数

3.4 VFP 的常用函数

3.4 函数 3.4.7 条件函数 IIF

格式: IIF(<条件表达式 > , < 表达式 1> , <表达式 2>)

功能: IIF 函数根据 <条件表达式 > 值来返回< 表达式 1> 的值或 < 表达式 2> 的值,若 <条件表达式 > 值为真,则返回 < 表达式 1> 的值,否则返回< 表达式 2> 的值。

例: STORE 10 TO MN

? "The number is : "+IIF(MN>9,STR(MN,2),STR(MN,1)) &&返回值为 The number is : 10

3.4 VFP 的常用函数

3.4 函数 3.4.8 自定义函数 1.自定义函数的构造 [PARAMETERS <参数表 >]< 命令语句 >┆RETURN< 表达式 >2.自定义函数的调用格式一: ? 函数名 (参数表 )格式二: DO < 文件名 >[WITH<参数表

>] 3.4 VFP 的常用函数

3.4 函数 例 3.7 自定义一个计算圆的面积的函数。**计算圆面积的函数:FUNCTION AREAPARAMETERS RB=3.1416*R*RRETURN B将该函数以 areA.prg 为文件名保存。在命令窗口中调用该函数 :? area(10) && 输出结果为 314.1600

3.4 VFP 的常用函数

3.4 函数 例 3.8 自定义一个用

户密码的加密和解密的函数。从用户密码到存库的随机伪码之间的变换由两个函数完成,一个是加密函数,一个是解密函数。

(1)加密函数FUNC MAZH1PARA ZMZZMZ=VAL(ZMZ)N1=RAND()*10^9IF N1<=999999999 N1=N1+10^9ENDIN1=INT(N1)

C1=STR(N1+ZMZ)+STR(N1)C1=STR(N1+ZMZ)+STR(N1)C2=SUBS(C1,5,20)+SUBS(C1,C2=SUBS(C1,5,20)+SUBS(C1,1,4)1,4)P1=''P1=''P2=''P2=''FOR I=1 TO 10FOR I=1 TO 10 P1=P1+SUBS(C2,2*I-1,1)P1=P1+SUBS(C2,2*I-1,1) P2=P2+SUBS(C2,2*I,1)P2=P2+SUBS(C2,2*I,1)ENDFORENDFORWMZ=P1+P2WMZ=P1+P2RETU WMZRETU WMZ

3.4 VFP 的常用函数

3.4 函数 (2) 解密函数解密函数是将数据库中存放的伪码转换成原用户密码,其

代码如下:FUNC MAZH2PARA WMZPP=''FOR I=1 TO 10 PP=PP+SUBS(WMZ,I,1)+SUBS(WMZ,I+10,1)ENDFORDD=SUBS(PP,17,4)+SUBS(PP,1,16)M1=SUBS(DD,1,10)M2=SUBS(DD,11,10)ZMZ=INT(VAL(M1)-VAL(M2))RETU ZMZ

3.4 VFP 的常用函数

3.4 函数 (3)调用自定义函数: MAZH1 ? MAZH1("12345678") &&参数为用户密码输出结果为: 50013243144098393185 && 输出为加密后的用户密码

3.4 VFP 的常用函数

复习思考题1.提供了哪几种数据类型?各自的特点是什么?2. 如何理解字符型数据和备注型数据?3.什么是常量?有哪几种常量?在 VFP6 中如

何表达?4.什么是变量?有哪几种常量?5. 变量命名规则是什么?6. 字段变量和内存变量各有什么特点?7.VFP6 的表达式有哪些?各自的用途是什么?8.VFP6 有哪些类型的函数?各函数的功能是什

么?怎么应用?9. 如何建立自定义函数?

复习思考题

Recommended