510 likes | 704 Vues
第 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) :
E N D
主要内容 • 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 [LIKE <通配符>] [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 ALL • STORE “OK” TO A1,Bl,A2,B2 • SAVE TO AA ALL LIKE ?1 • RELEASE ALL • AA=23 • RESTORE FROM AA ADDITIVE • LIST 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 算术运算符 3.3 VFP运算符与表达式
3.3.2 字符运算符与字符表达式 • 一个字符串表达式由字符串常量、字符串变量、字符串函数和字符串运算符组成。 表3.2 字符运算符 3.3 VFP运算符与表达式
3.3.2 字符运算符与字符表达式 • 例3.5 下面是一些字符串表达式的示例。 • ?“XYZ123”+“876xyz” &&连接后结果为“XYZ123876xyz” • ?“数据库”+“基础” &&连接后结果为“数据库基础” • ?“abc 45”+“abcd”+“123” • &&连接后结果为“abc 45abcd123” • ?“XYZ ”-“DEFG” &&连接后结果为“XYZDEFG” 3.3 VFP运算符与表达式
3.3.3 日期时间运算符与日期时间表达式 • 日期型表达式由算术运算符(“+”,“-”)、算术表达式、日期型常量、日期型变量和函数组成,日期只能进行加“+”、减“-”运算,分下列三种情况: • 1.两个日期型数据相减 • 两个日期型数据相减,其结果是一个数值型数据(两个日期相差的天数)。例如: • {^2008/12/19}-{^2008/11/16} &&结果为数值型数据33 • 2.日期型数据加数值型数据 • 日期型数据加数值型数据,其结果仍然为一个日期型数据(向后推算日期)。例如: • {^2008/11/16}+33 &&结果为日期型数据{^2008/12/19} 3.3 VFP运算符与表达式
3.3.3 日期时间运算符与日期时间表达式 • 3.日期型数据减数值型数据 • 日期型数据减数值型数据,其结果仍然为一日期型数据(向前推算日期)。例如: • {^2008/12/19}-33 &&结果为日期型数据{^2008/11/16} • 4.VFP6对无效的日期的处理 • 日期或日期时间型数据中的月份、天数、时、分、秒都有其各自的值域范围,如果发生输入或计算错误则为无效日期,系统会给出错误提示。 • 5.空日期或日期时间型数据的表示:{} 3.3 VFP运算符与表达式
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 逻辑运算规则表 3.3 VFP运算符与表达式
3.3 运算符与表达式 表3.6 运算符的优先顺序 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 x • REPLACE 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 AREA • PARAMETERS R • B=3.1416*R*R • RETURN B • 将该函数以areA.prg为文件名保存。 • 在命令窗口中调用该函数:?area(10) • &&输出结果为314.1600 3.4 VFP的常用函数
3.4 函数 • 例3.8 自定义一个用户密码的加密和解密的函数。从用户密码到存库的随机伪码之间的变换由两个函数完成,一个是加密函数,一个是解密函数。 • (1)加密函数 • FUNC MAZH1 • PARA ZMZ • ZMZ=VAL(ZMZ) • N1=RAND()*10^9 • IF N1<=999999999 • N1=N1+10^9 • ENDI • N1=INT(N1) C1=STR(N1+ZMZ)+STR(N1) C2=SUBS(C1,5,20)+SUBS(C1,1,4) P1='' P2='' FOR I=1 TO 10 P1=P1+SUBS(C2,2*I-1,1) P2=P2+SUBS(C2,2*I,1) ENDFOR WMZ=P1+P2 RETU WMZ 3.4 VFP的常用函数
3.4 函数 • (2) 解密函数 • 解密函数是将数据库中存放的伪码转换成原用户密码,其代码如下: • FUNC MAZH2 • PARA WMZ • PP='' • FOR I=1 TO 10 • PP=PP+SUBS(WMZ,I,1)+SUBS(WMZ,I+10,1) • ENDFOR • DD=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的常用函数