1.42k likes | 1.61k Views
第 2 章 VF 程序设计基础. 本章要点: Visual FoxPro 的各种类型常量的书写格式变量的种类和类型,内存变量常用命令 数值、字符与日期时间表达式,关系表达式,逻辑表达式 常用函数:字符处理函数、数值计算函数、日期时间函数、数据类型转换函数和测试函数 命令文件的建立与运行:程序文件的建立、简单的交互式输入输出命令、应用程序的调试与执行 结构化程序的调试与执行:顺序结构程序设计、选择结构程序设计、循环结构程序设计 过程与过程调用:子程序设计与调用、过程与过程文件、局部变量和全局变量、过程调用中的参数传递. 第 2 章 VF 程序设计基础. 教学目标
E N D
第2章 VF程序设计基础 • 本章要点: • Visual FoxPro的各种类型常量的书写格式变量的种类和类型,内存变量常用命令 • 数值、字符与日期时间表达式,关系表达式,逻辑表达式 • 常用函数:字符处理函数、数值计算函数、日期时间函数、数据类型转换函数和测试函数 • 命令文件的建立与运行:程序文件的建立、简单的交互式输入输出命令、应用程序的调试与执行 • 结构化程序的调试与执行:顺序结构程序设计、选择结构程序设计、循环结构程序设计 • 过程与过程调用:子程序设计与调用、过程与过程文件、局部变量和全局变量、过程调用中的参数传递
第2章 VF程序设计基础 教学目标 • 了解:程序的概念,应用程序的调试与执行 • 理解:变量的种类和类型,表达式的组成和分类及各种表达式的表示方法简单的交互式输入输出命令,结构化程序的三种基本结构,过程及变量的作用域的概念,参数的定义 • 掌握:VF的各种类型常量的书写格式,内存变量常用命令,表达式和常用函数的使用程序文件的建立与执行,三种基本结构语句的编程,过程、过程文件的建立、过程的调用及调用中参数的使用
第2章 VF程序设计基础 • 教学重点内存变量常用命令,字符处理函数、数据类型转换函数程序文件的建立、选择结构程序设计、循环结构程序设计,子程序设计与调用、过程与过程文件、过程调用中的参数传递 • 教学难点逻辑表达式、关系表达式,数据类型转换函数、测试函数循环结构程序设计,过程与过程文件、局部变量和全局变量、过程调用中的参数传递
第2章 VF程序设计基础 将各种形式的数据经过数字化存入计算机,都须确定其: 型:类型 数据 值:取值 在VFP中,常量、变量、函数和表达式的类型包括6种:字符型、 数值型、货币型、逻辑型、日期型、日期时间型。
2.1 常量和变量 2.1.1 常量 定义:在程序运行过程中保持不变的量 。不同类型的常量有不同 的书写格式。
1、字符型(Character) • 表示方法是用半角单引号、双引号或方括号[]扩起来的内容。 • (’ ’,“ ”和[]称为定界符) 注:定界符只规定常量的类型以及常量的起始和终止界限,它不作为常量本身的内容。且必须要成对匹配,不能一边用单引号而另一边用双引号。若某种定界符本身也是字符串的内容,则需要用另一种定界符为该字符串定界。
例2.1:显示几个字符型常量 在命令窗口键入以下两条命令: ?“计算机”,’123’,[数据],[‘ABX’”abc”] ?? “学习”, ‘字符串’, “”,[表示方法] ?(单问号)的功能:是在下一行显示若干个表达式的值。 ??(双问号)的功能:是在同一行显示表达式的值。
2、数值型常量(Numeric) • 组成:由0~9、小数点和正负号。如:12、2.45、-6.78。 • 为了表示很大或很小的数值型常量,可以使用科学记数法形式。 • 数值型数据的长度为1~20,内存中用8个字节表示,其取值范围是-0.9999999999E+19~0.999999 9999E+20
3、货币型(Currency) • 用来表示货币值,其格式与数值型常量类似,但要加上一个前置的($)符。 • 货币数据采用4位小数。若一个货币型常量多于4位小数,那么系统会自动将多余的小数位四舍五入。例:$122.456 789->$122.4568 • 在内存中占用8个字节,取值范围:-922 337 203 685 477.580 7~922 337 203 685 477.580 7
4、日期型(Date) • 日期型常量的定界符是一对花括号。花括号内包括年、月、日三部分内容,各部分内容之间用分隔符分隔。系统默认斜杠(/)分隔符。常用的其他日期分隔符有连字号(-)、句点(.)和空格。 • 日期型常量有两种格式:
①传统的日期格式: (系统默认的日期数据为美国日期格式“月/日/年”(mm/dd/yy),其中月、日、年各为两位数字。) 如:{10/08/01} 对这个日期在不同的设置状态下,计算机会作出不同的解释。2001年10月8(月/日/年)日、2001年8月10日(日/月/年)、2010年8月1日(年/月/日) 注:上面的格式要受到命令语句SET DATE TO 和SET CENTURY设置的影响。
②严格的日期格式 {^yyyy-mm-dd},用此格式写的日期常量能表达一个确切的日期,它不受SET DATE等语句设置的影响。 注:1)花括号内第一个字符必须是(^) 2)年份必须用4位 3)年月日的次序不能颠倒、不能缺省。{^2003-12-03} 日期型数据用8个字节表示,取值范围是:{^0001-01-01}~{^9999-12-31}
①、②的区别: 严格的日期格式可以在任何情况下使用,而传统的日期格式只能在SET STRICTDATE TO 0状态下使用。所以使用严格的日期格式十分方便。
③影响日期格式的设置命令 A)SET MARK TO[日期分隔符] &&用于指定日期分隔符 “-””.”,系统默认 “/” B)SET DATE TO[AMERICAN|ANSI|BRITISH|FRENCH| &&设置日期显示的格式 GERMAN|ITALIAN|JAPAN|USA|MDY|DMY|YMD]
短语 • 格式 • 短语 • 格式 • AMERICAN • mm/dd/yy • ANSI • yy.mm.dd • BRITISH/FRENCH • Dd/mm/yy • GERMAN • dd.mm.yy • ITALIAN • dd-mm-yy • JAPAN • yy/mm/dd • USA • mm-dd-yy • MDY • mm/dd/yy • DMY • dd/mm/yy • YMD • yy/mm/dd 表2.1 常用日期格式
C)SET CENTURY ON/OFF //设置年份的位数ON:4位,OFF:2位(系统默认) D)SET STRICTDATE TO[0|1|2]//设置是否对日期格式进行检查(传统日期格式) 0表示不进行严格的日期格式检查,目的是与早期Visual Foxpro兼容。 1表示进行严格的日期格式检查,它是系统默认的设置。 2 表示进行严格的日期格式检查,并且对CTOD()和CTOT()函数的格式也有效。
例2.2设置不同的日期格式 SET CENTURY ON &&设置4位数字年份 SET MARK TO &&恢复系统默认的斜杠日期分隔符 SET DATE TO YMD &&设置年月日格式 ?{^2001-08-26} 2001/08/26 显示: 2001/08/26
再在命令窗口键入4条命令,并分别回车执行: SET CENTURY OFF &&设置2位数字年份 SET MARK TO “.” &&设置日期分隔符为西文句号 SET DATE TO MDY &&设置月日年格式 ?{^2001-08-26} 显示:08.26.01
接着在命令窗口键入如下两条命令,并分别回车执行:接着在命令窗口键入如下两条命令,并分别回车执行: SET STRICTDATE TO 0 &&不进行严格的日期格式检查 ?{^2001-08-26},{09.22.01} 显示: 08.26.01 09.22.01
在命令窗口键入如下两条命令,并分别回车执行:在命令窗口键入如下两条命令,并分别回车执行: SET MARK TO “;” &&设置日期分隔符为分号 ?{^2001-08-26},{09.22.01} 显示: 08;26;01; 09;22;01
5.日期时间型(Date Time) • 包括日期和时间两部分内容:{<日期>,<时间>} • 其中<日期>与日期型常量相似,也有传统和严格两种格式. • <时间>部分的格式为 [hh[:mm[:ss]][a|p]],其中hh、mm、ss分别代表时、分和秒,默认值分别为12、0和0。a和p分别代表上午和下午,默认值为a。如果指定的时间大于等于12,则自然为下午的时间。
例2.3显示日期时间型常量 SET MARK TO ?{^2001-03-22,11:30p},{^1999-01-01, },{^2000-10-1,3} 显示:03/22/01 11:30:00 PM 01/01/99 12:00:00 AM 10/01/00 03:00:00 AM 注:日期时间型数据用8个字节存储,日期部分的取值范围与日期型数据相同,时间部分的取值范围是:00:00:00AM~11:59:59PM
6.逻辑型(Logical) • 只有两个值:真和假。 真的表示形式:.T. .t. .Y. .y. ,假的表示形式:.F. .f. .N. .n. • 注:前后的定界符必不可少。否则会被误认为变量名,逻辑型数据只占用一个字节。
1.浮点型(Float) • 包括此类型是为了提供兼容性,浮点型在功能上与数值型等价.只能用在表中的字段. 2.双精度型(Double) • 此类型用于取代数值型,以便提供更高的数值精度.与数值型不同,双精度只能用于数据表中字段的定义.每个双精度型数据占8个字节.
3.整型(Integer) • 整型用于存储无小数部分的数值,只能用于数据表中字段的定义.在表中,整型字段占用4个字节.
4.备注型(Memo) • 备注型用于字符型数据块的存储,只能用于数据表中字段的定义.在表中,备注型字段占用4个字节,并用这4个字节来引用备注的实际内容.实际备注内容的多少只受内存可用空间的限制. • 由于备注型字段的实际内容变化很大,不能直接将备注内容存在表.dbf文件中.系统将备注内容存放在一个相对独立的文件中,该文件的扩展名为.dbt.由于没有备注型的变量,所以对备注型字段的处理,需转换成字符型变量,然后使用字符型函数进行处理.
5.通用型(General) • 字符型(二进制): • 备注型(二进制):
2.1.2 变量 变量是在程序运行过程中其值可以发生改变的量。VF分为字段变量和内存变量。 注:VF变量命名规则是: 1)以字母、数字、下划线组成,中文版VF可以使用汉字做变量名 2)以字母或下划线开始,中文VF可以汉字开始 3)长度为1~128个字符 4)不能使用VF的保留字
由于表中的各条记录对同一个字段名可能取值不同,因此,表中的字段名就是变量,称为字段变量。由于表中的各条记录对同一个字段名可能取值不同,因此,表中的字段名就是变量,称为字段变量。 • 内存变量是内存中一个存储区域,变量值就是存放在这个存储区域里的数据,变量的类型取决于变量值的类型。例:当把一个常量赋给一个变量时,这个常量就被存放到该变量对应的存储位置中而成为该变量新的取值。在Visual FoxPro中,变量的类型可以改变,也就是说,可以把不同类型的数据赋给同一个变量。
内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)、日期型(D)和日期时间型(T)。内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)、日期型(D)和日期时间型(T)。
1.简单内存变量 • 每一个变量都有一个名字,可以通过变量名访问变量。如果当前表中存在一个同名的字段变量,则在访问内存变量时,必须在内存变量名前加上前缀M.(或M) 变量的赋值命令有两种格式: <内存变量名>=<表达式> 赋值号 STORE <表达式> TO <内存变量名表>
功能注释: ①等号一次只能给一个内存变量赋值。STORE命令可以同时给若干个变量赋予相同的值,各内存变量名之间必须用逗号分开。 ②在VF中,一个变量在使用之前不需要特别的声明或定义。当用命令给变量赋值时,如果该变量并不存在,那么系统会自动建立它。 ③可以通过对内存变量重新赋值来改变其内容和类型。
例: 内存变量和字段变量的访问,这里用到一个表文件“学生.DBF”,其结构如下:学生(学号C(8),姓名C(6),性别C(2),出生日期D(8)) 在命令窗口键入命令: USE 学生 &&USE是打开表的命令 LIST &&LIST是显示表 中各条记录的命令 ?姓名,性别,学号 &&显示内存变量
显示: • STORE “赵小辉”TO 姓名 &&用字符串向内存变量姓名赋值 • Y=500 &&用数值型常量500赋值内存变量Y • XM=姓名 &&用字段变量赋值内存变量XM • STORE 8.88 TO X1,X2 &&对两个内存变量X1、X2赋予相同值 • STORE .T. TO Q &&用逻辑常量赋值内存变量Q • ?姓名,m.姓名,x1,x2,y,xm • 显示:刘明 赵小辉 8.88 8.88 500刘明
2.数组 • 数组是内存中连续的一片存储区域,它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问。每个数组元素相当于一个简单变量,可以给各元素分别赋值。在VF中,一个数组中各元素的数据类型可以不同。 Dimension a(2,3) a(1,1) a(1,2) a(1,3) a(2,1) a(2,2) a(2,3) • 与简单内存变量不同的是,数组在使用之前一般要用DIMENSION或DECLARE命令来创建,规定数组的维数,数组名和数组大小。数组大小由下标值的上下限来决定,下限规定为1。
创建数组的命令格式为: DIMENSION<数组名>(<下标上限1>[,<下标上限2>])[,……] DECLARE<数组名>(<下标上限1>[,<下标上限2>])[,……] • 以上两种格式的功能完全相同。数组创建后,系统自动给每个数组元素赋以逻辑假.F. • 整个数组的数据类型为A(Array),而各个数组元素可以分别存放同类型的数据。 • 使用时应注意:dimension a(5),y(2,3) y(1,1) y(1,2) y(1,3)y(2,1)y(2,2) y(2,3)
①在一切使用简单内存变量的地方,均可以使用数组元素。①在一切使用简单内存变量的地方,均可以使用数组元素。 ②在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。 ③在同一个运行环境下,数组名不能与简单变量名重复。 ④在赋值语句中的表达式位置不能出现数组名。x=a ⑤可以用一维数组的形式访问二维数组。如:数组y中的各元素用一维数组形式可依次表示为:y(1),y(2),y(3),y(4),y(5),y(6),其中y(4)与y(2,1)是同一变量。
2.1.3 内存变量常用命令 1. 内存变量的赋值 格式1 STORE<表达式> TO <变量名表> 格式2 <内存变量名>=<表达式>
2. 表达式值的显示 格式1: ?[<表达式>] 区别 格式2: ??<表达式>
3. 内存变量的显示 格式1:LIST MEMORY[LIKE<通配符>][TO PRINTER|TO FILE<文 件名>] 格式2:DISPLAY MEMORY[LIKE<通配符>][TO PRINTER|TO FILE< 文件名>]
功能: • 显示内存变量的当前信息,包括变量名,作用域,类型,取值。 • LIKE只显示与通配符相匹配的内存变量。通配符包括*和?。 • TO PRINTER或TO FILE<文件名>用于显示的同时送往打印机,或者存入给定文件名的文本文件中。文件的扩展名为.txt
区别: • LIST MEMORY一次显示与通配符匹配的所有内存变量,如果内存变量多,一屏显示不下,则自动向上滚动。DISP MEMORY分屏显示与通配符匹配的所有内存变量,如果内存变量多,显示一屏后暂停,按任意键之后再继续显示下一屏。
4. 内存变量的清除 格式1:CLEAR MEMORY 格式2:RELEASE<内存变量名表> 格式3:RELEASE ALL[EXTENDED] 格式4:RELEASE ALL[LIKE<通配符>|EXCEPT<通配符>]
功能: • 格式1清除所有内存变量。 • 格式2清除指定的内存变量。 • 格式3清除所有内存变量。一般情况下作用与格式1相同。如果出现在程序中则应该加上短语EXTENDED,否则不能删除公共内存变量。 • 格式4选用LIKE短语清除与通配符相匹配的内存变量,选用EXCEPT短语清除与通配符不相匹配的内存变量。
例:RELEASE ALL LIKE A* RELEASE ALL EXCEPT A?
例2.4 • CLEAR MEMORY • DIMENSION y(2,2) • STORE ‘xxx’ TO x1,y(1,1) • y(3)={^2001-03-23} • x2=$122.23 • LIST MEMO LIKE y*
显示如下: • Y Pub A (注意显示结果) • (1,1) C “xxx” • (1,2) L .F. • (2,1) D 03/23/01 • (2,2) L .F.
RELEASE ALL LIKE y* • X={^2001-08-22,11:30P} • LIST MEMO LIKE X* • 显示如下: • X Pub T 08/22/01 11:30:00PM • X1 Pub C “xxx” • X2 Pub Y 122.2300
5.表中数据与数组数据之间的交换 表文件的数据内容是以记录的方式存储和使用的,而数组是把一批数据组织在一起的数据处理方法,为了使它们之间方便地进行数据交换,以利于程序的使用,Visual FoxPro提供了相互之间数据传递的功能,可以方便地完成表记录与内存变量之间的数据交换。
①将表的当前记录复制到数组 格式1:SCATTER[FIELDS<字段名表>][MEMO] TO <数组名 >[BLANK] 格式2: SCATTER[FIELDS LIKE<通配符>|FIELDS EXCEPT< 通配符>][MEMO] TO <数组名>[BLANK]