1、程序设计的基础数据类型:每一个数据都有一定的类型,数据类型决定了数据的存储方式和运算方式,大多数程序设计允许使用常量、变量和数组来存储数据;一、常量:有 6 种类型:(数值型、货币型、字符型、日期型、日期时间型、逻辑型)(1) 数值型(N) :由数字 0-9、小数点、正负号构成。如:12、0.1、-1.23;还可以用科学记数法表示如:1.3E-12 表示 1.3*10-12(2) 货币型(Y):在数值前导货币符号($),保留四位小数,能够自动四舍五入如:$123.45678 存储为$123.4568(3) 字符型(C):习惯称为字符串,由中、英、数字等字符组成。表示方法用单引号( )、双引号(
2、” ”)、方括号( )三种定界符将字符串括起来。定界符必须成对出现,如 “AB 是不合法的、”计算机 ”是合法的。当定界符作为字符串内容时外层定界符要加以区分如:”我们”是合法的,”我们”是非法的。(4) 日期型(D):分传统和严格日期格式两种;传统日期格式默认为美国日期格式:”mm/dd/yy”(月/日/ 年),年份可以是 2 位数字,也可以是 4 位数字,如:10/08/01 、10-08-01 、10/08/2001严格式日期格式:年/月/日书写规则是用花括号”作为定界符,第一个字符为脱字符”年份为四位、按年月日顺序书写不能颠倒如:2008/08/08影响日期格式命令:、设置日期显示分隔
3、符:SET MARK TO 分隔符当 SET MARK TO 后没指定任何分隔符时,恢复系统默认的分隔符斜杠(/)。、设置日期显示格式:SET DATE TO YMD|DMY|MDYYMD 设置为年月日格式;DMY:设置为日月年格式;MDY:设置为月日年格式;、设置显示年份位数(2 位或 4 位):SET CENTYURY OFF|ON OFF 为 2 位 ON 为 4 位 )(5)日期时间型(T):分传统和严格日期时间格式两种:严格日期时间格式:(年 /月/日), 小时:分:秒 书写规则与日期型相似(6)逻辑型(L):逻辑型数据用句点作为定界符,只有两个值逻辑真和逻辑假。逻辑真用:.T.,.
4、Y.表示(大小写不区分)逻辑假用:.F. ,.N. 表示(大小写不区分)二、变量:值能够随时更改的量变量通过变量名来进行访问;变量名的命名规则:以字母、汉字、下划线开头(数字不能开头),后面接字母,汉字,数字和下划线构成。VF 中变量分为:字段变量和内存变量两大类,内存变量又分:简单内存变量和数组(一维和二维数组)(1)、字段变量:就是我们所说的表中的字段,因为字段的取值是可变的,所以表中的字段名又叫字段变量,其值是当前记录指针所指的值(类型包含:字符型、数值型、货币型、日期型、日期时间型、逻辑型、整型、通用型和备注型)(2)、内存变量:是内存中的一个存储单元,变量的值就是存放在这个单元里的数
5、据。(6 种类型:字符型 C、数值型 N、货币型 Y、日期型 D、日期时间型 T、逻辑型 L)如果内存变量与数据表中的字段变量同名,用户在引用内存变量时,要在变量名字前加一个“M.” 或“ M-”,用来强调这个变量是内存变量。1、内存变量的赋值:格式 1: = 注:一次只能给一个内存变量赋值格式 2:STORE TO , 注:同时给多个变量赋予相同的值功能说明:A:等号一次只能给一个内存变量赋值。STORE 命令可以同时给多个变量赋予相同的值,各个内存变量名之间应用逗号分隔开。B:一个变量在使用之前并不需要特别声明。当用 STORE 命令给变量赋值时,如果该变量不存在,那么系统会自动建立它。C
6、:如果要改变内存变量的内容和类型可以通过对内存变量重新赋值来完成。例:给内存变量赋值:NJ=大学 给变量 NJ 赋字符值;STORE 1234567890 TO XH 给变量 XH 赋字符值;STORE SQRT(32+42)TO na1,na2,na3 赋予相同的数值;输出变量的值:?;?;2、内存变量的显示:格式 1:LIST MEMORY LIKE 格式 2:DISPLAY MEMORY LIKE功能:显示内存变量的当前信息,包括变量名、作用域、取值和类型。注:A;通配符包括*和?。 *表示多个字符; ?表示一个字符。B:内存变量名不能加定界符;区别:LIST MEMORY:一次显示与通
7、配符的所有内存变量,如果内存变量多,一屏显示不下,则自动向上滚动。DISPLAY MEMORY 分屏显示与通配符的所有内存变量 ,如果内存变量多,显示一屏后暂停,只要按任意键后就可以继续显示下一屏。选用 LIKE 短语只显示与通配符相匹配的内存变量,通配符包括*和?例:STORE “BOODBEY” TO X1STORE “HELLO” TO X2DISPLAY MEMORY LIKE A*显示所有以 “A”开头的内存变量。3、清除内存变量:格式 1:CLEAR MEMORY格式 2:RELEASE 格式 3:RELEASE ALL EXTENDED格式 4:RELEASE ALL LIKE
8、| EXCEPT功能说明:格式 1:清除所有内存变量;格式 2:清除指定的内存变量;格式 3:清除所有内存变量,在人机会话状态其作用与格式 1 相同,如果出现在程序中,则应加上短语 EXTENDED,否则不能删除公共内存变量。格式 4:选用 LIKE 短语清除与通配符相匹配的内存变量,选用 EXCEPT 短语清除与通配符不相匹配的内存变量。例:RELEASE X1,X2 释放内存变量 X1,X2RELEASE ALL LIKE A* 释放所有以变量 A 开头不的内存变量。三、数组:是在内存中连续的一片存储区域,它由一系列元素组成,每元素相当于一个简单内存变量。1、创建数组格式:A:DIMENS
9、ION (,),B: DECLARE (,),注:1、两种格式的功能等价,数组创建后,系统自动给每个数组元素赋予初值逻辑假.F.2、各数组元素数据类型可以不相同3、数组的下限规定为 1,访问时不能超限4、可以用一维数组形式去访问二维数组5、在赋值和输入语句中使用数组名时,表示将同一值同时赋值给该数组的全部元素6、定义(访问)数组时也可以用方括号,如 DIME BY3 等价于 DIME BY(3)7、在一切可以使用简单内存变量的地方都可以使用数组元素。内存变量就像一个盒子,而变量的值就相当于放在盒子里边的物体。盒子是固定不变的,而放在盒子里的物体却能更换。即内存变量类型取决于变量值的类型,内存变
10、量的(值和类型)随重新赋的值改变而改变,以后一次赋值为准。例如:DIMENSION A( 4),B(2,3)命令定义两个数组。一维数组 A 含 4 个元素:A(1),A(2),A(3),A (4)。二维数组 B 含 6 个元素:B(1,1),B(1,2),B(1,3),B(2,1),B(2,2),B(2, 3)例:数组的定义赋值:DIMENSION A(2),B(2,2) 定义两个数组;A=100 将 A 数组所有元素赋值为 100B(1 ,1)=A(1) 引用 A 数组的元素给 B 数组元素赋值;STORE .T. TO B(1,1)给 B 数组的一个元素重复赋逻辑值;B(1 ,2)= 南京
11、大学 给 B 数组的一个元素赋字符值“南京大学”B(2 ,1)=2006/11/16 给 B 数组的一个元素赋日期值B(2 ,2)=2006/11/16 10:00:00 AM给 B 数组的一个元素赋严格的日期时间值?A(1)+A(2),B(2,1) 系统主窗口显示:200 2006/11/16在使用数组和数组元素时,应注意以下问题: 在一切可以使用简单内存变量的地方,均可以使用数组元素。 在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。 在同一个运行环境下,数组名不能与简单变量名重复 在赋值语句中的表达式位置不能出现数组名,可以出具体的数组元素名。 可以用一维数组
12、的形式访问二维数组;二、表与数组之间的数据传递1、将表的当前记录复制到数组:将表的当前记录复制到数组命令:SCATTER TO 格式 1:SCATTER FIELDS MEMO TO BLANK格式 2:SCATTER FIELDS LIKE FIEKDS EXCEPT MEMO TO BLANK2、将数组数据复制到表的当前记录将数组数据复制到表的当前记录命令:GATHER FROM 例:上机操作(1)将表的当前记录复制到数组:scatter to Dimension aa(3)use 仓库scatter to aa?aa(1),aa(2),aa(3)(2)将数组数据复制到表的当前记录:gat
13、her fromDimension ab(1,3)Ab(1,1)=”WH1”Ab(1,2)=”芜湖”Ab(1,3)= 600Use 仓库Append blank Gather from ab ?仓库号 ,城市,面积三、表达式:是由常量、变量和函数通过特定运算符连接起来的式子。表达式最终总会有一个结果出来.表达式可分为数值表达式、字符表达式、日期时间表达式和逻辑表达式。大多数逻辑表达式是带比较运算符的关系表达式1.数值、字符与日期时间表达式(1)数值表达式:是由算术运算符将数值型数据连接起来形成的,运算结果仍然为数值型数据,数值型数据可以是数值型常量和变量。运算符:( ),* ,(平方),/,%
14、算术运算符 乘方: (shift + 6)等价于*求余运算 % 和 mod( ) 函数相同(2)字符表达式:由字符串运算符与字符型数据连接起来形成,运算结果仍然是字符型数据,字符运算符有两个:“+”和“-”,它们的运算优先级相同。+: 前后两个字符串首尾连接形成一个新的字符串-:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。(3)日期时间表达式:日期时间表达式中可以使用的运算符也有“+”和“-”两个,日期时间表达式的格式有一定限制,不能任意组合。对:日期 - 日期 例子: 2005-05-02- 2005-05-01=-1 结果为数值型 日期 + 天数 例子: 2005-
15、05-02+5= 2005-05-07结果为日期型日期 - 天数 例子: 2005-05-02-5= 2005-04-27 结果为日期型日期时间 - 日期时间 例子:2005-05-02 17:05:28 - 2005-05-02 17:05:25 =-3 结果为数值型日期时间 + 秒数 例子:2005-05-02 17:05:28 +10=2005-05-02 17:05:38 结果为日期时间型日期时间 - 秒数 例子:2005-05-02 17:05:28 -10=2005-05-02 17:05:18 结果为日期时间型错:日期 +/- 日期时间型 ,日期时间 +/- 日期,日期 +日期,
16、日期时间+日期时间注:日期和日期时间不可以相加减。2. 关系表达式:关系表达式通常也称为简单逻辑表达式,它是由关系运算符将两个运算对象连接起来形成的,作用是比较两个表达式的大小或者前后,运算结果为逻辑型数据,它们的优先级相同。运算符 大于 A 1 .T.= 等于 2+4 = 6 .F. -10 .T.关系运算符的优先级别相同。关系表达式运算时,就是比较同类型两数据对象的“大小” ,对于不同类型的数据,其“ 大小 ”或者是值的大小,或者是先后顺序。日期或日期时间数据以日期或时间的先后顺序为序。在 Visual FoxPro 系统中,字符型数据的比较相对复杂,默认规则为:1) 单个字符单个字符的比
17、较是以字符 ASCII 码的大小,作为字符的“大小” ,也就是先后顺序; 2)汉字 系统默认按汉字的拼音排列汉字的顺序,也就是以汉字的拼音顺序比较“大小” 2) 字符串 两个字符串进行比较的基本原则是从左到右逐个字符进行比较。 当两串做“= =”和“=”比较时,运算结果与 SET EXACT ON/OFF 的设置有关。默认是 OFF 状态。 精确比较:用运算符=进行两串的精确比较时,只有当两串长度相同,字符相同,排列一致时才成立;(EXACT ON 或 OFF) 相等比较:用运算符进行两串比较,当处于 OFF 状态时,只要右边的字符串与左边字符串的前部分内容相匹配,结果就为真.T.。例如:“a
18、bc”=“abd”为假, “abc”=“abcde”为假, “abcde”=“abcfd”为真;当处于 ON 状态时,先在较短字符串的尾部加上若干个空格,使两个字符串长度相等,然后再进行比较。例如: “abc”=“abcde”为假, “ab ”=“ab ”为真; 大小比较:用运算符进行两串比较时,比较到第个不相同字符为止,否则,长度较长的串较“ 大” ; 其他比较:除上述运算符之外的其他运算符33 .AND ”A”13 .or.“A“2005.5.16 or 122 and .T.”12” and (-10%-3=-1).F. or .F. or .T.T.四、常用函数(一) 字符及字符串处理
19、函数:字符及字符串处理函数的处理对象均为字符型数据,但其返回值类型各异。字符函数:1.取子串函数:格式:substr(c,n1,n2)功能:取字符串 C 第 n1 个字符起的 n2 个字符。返回值类型是字符型。例:取姓名字符串中的姓。store “王小二“ to xm?substr(xm,5,6)结果为:二?substr(“efghfgfsf”,2,7)fghfgf2.删除空格函数:以下 3 个函数可以删除字符串中的多余空格,3 个函数的返回值均为字符型。trim(字符串): 删除字符串的尾部空格alltrim(字符串):删除字符串的前后空格ltrim(字符串): 删除字符串的前面的空格例:去
20、掉第一个字符串的尾空格后与第二个字符串连接store “abcd “ to xstore “efg“ to y?trim(x)+y ?”abcd”+yabcdefg3.空格函数:格式:space(n)说明:该函数的功能是产生指定个数的空格字符串(n 用于指定空格个数).例:定义一个变量 dh,其初值为 8 个空格store space(n) to dh4.取左子串函数:格式:left(c,n)功能:取字符串 C 左边 n 个字符。X=”abcdefgm”?left(X,5)5.取右子串函数:格式:right(c,n)功能:取字符串 c 右边的 n 个字符例:a=“ 我是中国人“?right(a
21、,4)国人?left(a,2)我6.计算子串出现次数函数:格式:occur( 字符表达式 1,字符表达式 2)功能:返回第一个字符串在第二字符串中出现的次数,函数值为数值型。若第一个字符串不是第二个字符串的子串,则函数值为 0.例:?occur(“ga“,“cdefagaabb“)17.求子串位置函数:格式:At(字符串 1,字符串 2)功能:返回字符串 1 在字符串 2 的位置例:?At(“授“,“副教授“)5X=”ce”Y=”abcefg”?at(x,y) at(”ce”, ”abcefg”)38.大小写转换函数:格式:lower(字符串)upper(字符串)功能:lower( )将字符串
22、中的字母一律变小写;upper()将字符串中的字母一律变大写例:bl=“FoxBASE“?lower(bl)+space(2)+upper(bl)foxbase FOXBASE9.求字符串长度函数:格式:len(字符串)功能:求指定字符串的长度例:a=“ 中国人“?len(a)610字符串匹配函数:like(字符表达式 1,字符表达式 2)功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真,否则返回逻辑假。中可以包含通配符“ *”和“?” 。 “*”可与任何数目的字符相匹配,“?”可与任何单个字符相匹配。例:like(“ab”,”abcde”)(二) 数学运算函数:1
23、.取整函数:格式:int(数值)功能:取指定数值的整数部分。例:取整并显示结果?int(25.69)25格式:ceiling(表达式)功能:返回大于或等于指定表达式的最小整数。 、?ceiling(2009.3)2010格式:floor(表达式)功能:返回小于或等于指定表达式的最大整数。?floor(2009.9 )20092.四舍五入函数:格式:round( 数值表达式,小数位数)功能:根据给出的四舍五入小数位数,对数值表达式的计算结果做四舍五入处理例:对下面给出的数四舍五入并显示其结果?round(3.14159,4),round(2048.9962,0),round(2048.9962,
24、-3)3.1416 2049 20003.求平方根函数:格式:sqrt(数值)功能:求指定数值的算术平方根例:?sqrt(100)104.最大值、最小值函数:格式:Max(数值表达式 1,数值表达式 2)Min(数值表达式 1,数值表达式 2)功能:返回两个数值表达式中的最大值和最小值例:x1=123.456x2=234.567?max(x1,x2)234.567?min(x1,x2)123.456?min(3.1,6,2,6,9)25.求余数函数:% 15%4格式:mod(表达式 1,表达式 2)功能:求表达式 1 对表达式 2 的余数例:?mod(-10, -3)36.求圆周率函数格式:p
25、i()功能:返回圆周率(数值型) 。该函数没有自变量。7.绝对值函数功能:abs (数值表达式)功能:返回指定数值表达式的绝对值。例:?abs(-21)21格式:sign (数值表达式)功能:返回指定数值表达式的符号。?sign(211)+1?sign(-213658763)-1(三) 转换函数:1.数值转数字字符串函数:格式:str(n,n1,n2) substr(c,n1,n2)功能:将数值 n 转换为字符串,n1 为总长度,n2 为小数位例:?str(321.56)322 若为空字符串,则删除中指定个数的字符。例:X=“祝大家新年好!“?stuff(X,7,4,“春节“)祝大家春节好!?
26、stuff(X,11,0,“春节“)祝大家新年春节好!?stuff(x,7,4,“ “)祝大家好!8.字符转 ASC码函数:格式:Asc()功能:把 左边第一个字符转成相应的 ASC码值例:x=“Foxpro“?Asc(x),Asc(lower(x) asc(“foxpro”)70 1029.ASC码值转字符函数:格式:chr(数值表达式)功能:把数值转成相应的 ASC码字符,返回值为字符型例:?chr(70)+chr(111)+chr(111+9)Fox10宏替换函数cdow 用英文表示星期例:?date()2005.11.15?dow(date(),cdow(date()3 Tuesday
27、(五) 测试函数:1值域测试函数:between(表达式 1,表达式 2,表达式 3)功能:判断一个表达式的值是否介于另外两个表达式的值之间。2空值测试函数:isnull(表达式)功能:判断一个表达式的运算结果是否为 null 值,若是 null 值返回逻辑真,否则返回逻辑假。3 “空”测试函数:empty(表达式)判定表达式的运算结果是否为“空”值,返回逻辑真或者逻辑假。表达式的自变量可以为数值型,字符型,逻辑型,日期型等。注:这里所指的“空”值与 null 值是两个不同的概念。函数empty(null)的返回值为逻辑假。4数据类型测试函数:vartype(表达式)功能:返回一个大写字母,函
28、数值为字符型。5表文件尾测试函数:eof()功能:测试指定表文件中的记录指针是否指向文件尾,若是返回逻辑真,否则返回逻辑假。表文件尾是指最后一条文件记录的后面位置。6表文件首测试函数:Bof()功能:测试当前表文件或指定表文件中的指针是否指向文件首,若是则返回逻辑真,否则返回逻辑假。表文件首是指第一条记录的前面位置。7记录号测试函数:Recno()功能:如果指定的工作区上没有打开表文件,刚函数值为 0;如果记录指针指向文件尾,则函数值为表文件中的记录数加 1;如果记录指针指向文件首,则函数值为表文件中第一条记录的记录号。8记录个数测试函数:Recount()功能:如果指定工作区上没有打开表文件
29、,则函数值为 0。reccount()返回的是表文件中物理上存在的记录个数,不管记录是否被逻辑删除以及 set deleted 的状态如何,也不管记录是否被告过滤,该函数都会把它们考虑在内。9条件测试函数:iif(逻辑表达式,表达式 1,表达式 2)功能:测试的值,若为逻辑真,则函数返回的值,若为逻辑假,则返回的值。和的类型可以不同。10记录删除函数:Deleted()功能:测试指定的表,或测试在指定工作区中所打开的表,记录指针所指的当前记录是否有删除标记,若有为真,否则为假。若默认自变量,则测试当前工作区中所打开的表。函数 返回值类型 简要说明MOD() 数值型 求余(取模)SQRT() 数
30、值型 开平方根INT() 数值型 只取整(不四舍五入)ROUND() 数值型 四舍五入MAX() 求最大值MIN()根据参数定根据类型定 求最小值LEN() 数值型 求字符串的长度(空串长度为 0)LOWER() 字符型 大定转换成小写UPPER() 字符型 小字转换成大写SPACE() 字符型 生成指定目的空格串TRIM() 字符型 去掉字符尾部(后面)空格LTRIM() 字符型 去掉字符前导(前面)空格ALLTRIM()字符型 去掉字符前后空格(中间不去掉)LEFT() 字符型 从左边开始取指定长度的子串RIGHT() 字符型 从指定起始位置取指定长度子串SUBSTR() 字符型 从指定起
31、始位置取指定长度子串OCCURS() 数值型 第一个字符串在第二个字符串中出现的次数AT() 数值型 求子串的起始位置ATC() 数值型 类似 AT()函数,不区分大小写LIKE() 逻辑型表达式 1 与表达式 2 是否匹配,表达式 1 中可以包含通配符*和?注:表达式 2 中*和?不表示通配符DATE() 日期型 返回当前系统日期TIME() 字符型 返回当前系统时间DATETIME()日期时间型 返回当前系统日期时间YEAR() 数值型 返回日期或日期时间的年份MONTH() 数值型 返回日期或日期时间的月份DAY() 数值型 返回日期或日期时间的天数SER() 字符型 将数值转化为字符串
32、AVL() 数值型 将字符串转化为数值CTOD() 日期型 将字符型转化为日期型CTOT() 日期时间 将字符型转化为日期时间型DTOC() 字符型 将日期型转化为字符型TTOC() 字符型 将日期时间型转化为字符型BETWEEN()逻辑型 表达式值是否在其他两个表达式之间ISNULL() 逻辑型 空值(NULL 值)测试函数EMPTY() 逻辑型 判断表达式运算结果是否“空” 值VARTYPE()字符型 测试数据类型EOP() 逻辑型 测试记录指针是否指到结束标识BOF() 逻辑型 测试记录指针是否指到起始标识RECNO() 数值型 返回表当前记录的记录号RECCOUNT()数值型 返回表中
33、物理存在的记录条数IIF() 不定若表达式值为.T.返加表达式 1 的值,否则返回表达式 2 的值注:宏替换函数(&)功能:去掉最外层定界符而类型是去掉最外层定界符之后表达式值的数据类型。程序设计的基础一、程序与程序文件:其文件的扩展名为:PRG1、程序:是能完成一定任务命令的有序集合与交互式相比,采用程序方式有如下优点。1 程序可以被修改并重新运行。2 可以用多种方式、多次运行程序。3 在一个程序中可以调用别一个程序。4 具有在命令窗口中无法使用的结构化程序设计命令。例:编写程序,计算圆的周长和面积。CLEAR 清除 VF 主窗口上的全部内容;R=3 设置半径:依次计算圆的周长和面积L=2*
34、PI( )*RS=PI( )*R2输入出计算结果? “周长=“,L?“面积=“,SRETURN(结束当前程序的执行,“返回到调用它的上级程序,如果没有上级程序则返回到命令窗口“)例:CLEARFOR N=1 TO 10? NENDFOR注:程程序中每条命令都以回车键结尾,一行只能写一条命令,若命令需要分行书写,应在一行终了时键入续和符“;”,再按回车键。在 VF 中,程序代码除了可以保存在程序文件中以外,还要以出现在报表设计器和菜单设计器的过程代码窗口中,以及表单设计器和类设计器的事代或方法代码窗口中。二、程序文件的建立方法:三种1 使用项目管理器新建;2 使用对话框新建;3 使用命令新建/修
35、改:MODIFY COMMAND 注:该文件不存在表示新建,该文件存在表示修改三、程序文件的运行:1 菜单操作:选择“程序”菜单运行文件选择程序文件进行运行;2 命令方式:DO 扩展名可以省略不写注:如果 DO 命令执行的是 MODIFY COMMAND 命令产生的.prg 文件,命令中的 只需要指定文件主名,而不需要指定扩展名;若要执行其他文件,如查询程序文件、菜单文件,则必须包含扩展名(.qpr 、mpr)四、简单的输入命令;1、INPUT TO 功能:接收从键盘上输入的表达式,并将结果存入指定变量中。例:查找指定日期以前签订的订单CLOSE DATABASE ALLOPEN DATABA
36、SE 订单管理CLEARINPUT“请输入日期 :”TO MRQSELECT * FROM DGD WHERE 订单日期 TO功能:将从键盘上接入的字符串存入字符变量中。例:由用户输入待查询职工的职工号,然后显示该职工的信息。CLOSE DATABASE ALLOPEN DATABASE 订单管理USE ZG IN 0CLEARACCEPT“请输入职工号:”TO MZGLOCATE FOR 职工号=MZG?“职工号: ”+职工号?“仓库号: ”+仓库号?“工资:”+STR(工资)CLOSE DATABASERETURN在命令窗口中输入 DO EX3,运行程序后,结果为: 3、WAIT TOcM
37、essagetext TO VarName WINDOW AT,NOWAIT CLEAR|NOCLEAR TIMEOUT功能:只接收一个字符,主要用于暂停程序执行。cMessageText 指定要显示的自定义信息。若参数为空字符串,则不显示信息,直到按某个键时,继续执行程序。VarName 将按下的键保存到内存变量或数组元素中。WINDOW 在 VF 主窗口右上角的系统窗口中,显示信息。AT nRow、nColumn 指定信息窗口在屏幕上的位置。NOWAIT 在显示信息后,立即继续执行程序。CLEAR 从程序的 VF 主窗口中删除一个 VF 系统窗口或者 WAIT 信息窗口NOCLEAR 指示
38、 WAIT 信息窗口保留在 VFP 主窗口中,直到提示 WAIT CLEAR 或者别一个WAIT WINDOW 命令。TIMEOUT nSecond 用来设置等待时间(秒数),一旦超时就不再等待用户按键,自动往下执行。WAIT 命令使用示例:WAIT“输入无效,请重新输入”WINDOWS TIMEOUT 4一、程序的基本结构:分顺序结构、选择结构、循环结构1 顺序结构:按照程序中的语句顺序执行;例 7.1 例;2 选择结构:包含条件语句 IF-ENDIF 和分支语句 DO CASE-ENDCASEA:条件语句格式:IFELSEENDIF6 执行顺序是:当有 ELSE 子句时,两组可供选择的代码
39、分别是和,如果条件成立(运算结果为.T.),则执行,否则(运算结果为.F. )执行,选择其中一个语句序列挂靠完后转向 ENDIF 后的第一条语句继续往后执行。7 无 ELSE 子句时,如果条件成立(运算结果为.T.),则执行,否则直接转向ENDIF 后的第一条语句继续往后执行。注:A:IF 和 NDIF 必须成对出现,IF 是结构的入口,ENDIF 是本结构的出口,条件语句可以嵌套,但不能出现交叉。B:通常有两种或两种以上情况供选择时,使用此结构。例:编写程序,根据成绩来判断成绩优良。成绩大于或等于 90 分为优秀;成绩大于或等于 80 分而小于 90 分为良好;成绩大于或等于 60 分而小于
40、 80 分为及格;成绩小于 60 分为不及格。SET TALK OFFINPUT“请输入成绩 : ”TO incjIF Incj=90Inzk=“优秀“ELSEIF Incj=80Incj=”良好”ELSEIF Incj=60Incj=“及格”ELSEInzk=“不及格”ENDIFENDIFENDIF?“成绩为: ”+InzkSET TALK ONRETURN注:在嵌套的 IF 语句中,ELSE 总是与前面的、距离自己最近的 IF 配对。B:分支语句:格式为:DO CASECASECASECASEOTHERWISEENDCASE执行顺序是:依次判断 CASE 后面的条件是否成立。当发现某个 C
41、ASE 后面的条件成立时,就执行该 CASE 和下一个 CASE 之间的命令序列,然后执行 ENDCASE 后面的语句。如果所有的条件都不成立,就执行 OTHERWISE 与 ENDCASE 之间的命令序列,然后转向 ENDCASE 后面的语句。注:A:只执行从上至下第一个 CASE 满足条件的语句序列,即使后面 CASE 满足条件都不被执行。B:如果所有 CASE 条件都不成立,且没有 OTHERWISE 子句,则直接跳出本结构,转向ENDCASE 后面的语句。C:DO CASE 和 ENDCASE 必须成对出现。D:当前三种或三种以上情况只能选择其中一种情况时,使用此结构。例:编写程序,用
42、 DO CASEENDCASE 分支结构实现输入成绩后,显示相应的成绩等级。SET TALK OFFINPUT “请输入成绩 :”TO ssDO CASECASE ssLOOPEXITENDDO例:编写程序,将任意字符(包括汉字)组成的字符串进行反序显示。STORE江苏省计算机等级考试TO C,CCP=SPACE(0)DO WHILE LEN( C ) 0X=ASC(LEFT(C,1)IF X127I=2ELSEP=LEFT( C,i)+pC=SUBSTR(C,i*2-1)ENDDO?CC+“的反序为”+P注:对于 DO WHILE 循环结构,每执行一次循环体,就其事实上要修改一次“条件”,否
43、则,当“条件”永远为“真”时会造成“死循环”。(2)FOR ENDFOR 循环格式:FOR=STEPLOOPEXITENDFOR执行步骤:1、将初值赋给循环变量2、判断循环变量是否满足终值:A:满足则执行循环体; B:不满足执行步3、遇到 ENDFOR 时循环变量自动增加步长值之后,再执行步骤( 2)4、执行 ENDFOR 后面的语句判断循环体是否满足终值的方法:注:只与步长值的(+、-)符号有关与值无关当步长值为正数时循环变量自动递增:循环变量=终值 就满足条件如果没有写步长值时默认值为 1例:编写程序,在屏幕上显示 110。CLEARFOR N=1 TO 10?NENDFOR例:编写程序:
44、显示 SCORE 表中的前 20 个学生学号,若到达表尾则跳出循环体。SET TALK OFFUSE SCOREGO TOPFOR N=1 TO 20IF EOF()EXITENDIFGO NDISPLAY 学号ENDFORUSESET TALK ON例:编写程序,显示 SCORE 表中的前 20 个记录的学生学号 ,若有空记录,则不显示信息,回到循环体的第 1 条指令执行。SET TALK OFFUSE SCOREGO TOPFOR N=1 TO 20IF 学号=SPACE (20)LOOPENDIFGO NDISPLAY 学号ENDFORUSESET TALK ON(3)SCAN ENDS
45、CAN 循环格式:SCAN FOR | WHILELOOPEXITENDSCAN功能:执行该语句时,记录指针自动、依次地在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。说明:1、 的默认值是 ALL.2、EXIT 和 LOOP 命令同样可以出现在该循环语句的循环体内。EXIT 和 LOOP 语句在以上三种循环体中的作用:用 EXIT 语句在循环结构中终止本层循环体,从而提前结束本层循环,即强制退出。用 LOOP 语句在 DO WHILE 循环结构作用是跳过本次循环中余下尚未执行的语句,立即进行下一次循环条件判定;在 FOR 循环结构中遇到 LOOP 时,循环变量自动增
46、加步长值之后,再判断循环变量是否满足终值;在 SCAN 循环结构中遇到 LOOP 时,立即返回判断 FOR 条件或 WHILE条件。例:编写程序:统计 XS 表中的男生人数,假设性别字段为逻辑字段。OPEN DATABASE SchoolUse xs in 0Select xsM=0SCAN FOR 性别=.T.M=M+1ENDSCANCLEAR?“男生人数 :” ,MCLOSE DATABASERETURN一、多模块程序设计模块的定义和调用1、模块及其定义:过程定义的语法格式:PROCEDURE|FUNCTIONRETURN ENDPROC | ENDFUNC过程说明:A:过程开始:PROC
47、EDURE | FUNCTION 表示一个过程开始,并声明过程名。过程名必须以字母或下画线开头,还可以包含字母、数字、下画线。B: 过程结束。ENDPROC | ENDFUNC 表示一个过程的结束。如果省略 ENDPROC |ENDFUNC 命令,则过程执行下一条 PROCEDURE |FUNCTION 命令或在文件尾处结束。C:过程返回。RETURN 命令用于指定过程的返回值。当过程执行到 RETURN 命令时,控制将转回到调用程序(或命令窗口),并返回表达式的值。如果省略 RETURN 命令,则在过程结束时自动执行一条隐藏含的 RETURN 命令;如果 RETURN 命令中没有表达式,则返
48、回值为逻辑真(.T.)注:一般情况下,过程保存在单独立文件里。过程文件的建立仍使用 MODIFY COMMAND 命令。文件的默认扩展名还是.prg。另外,过程也可以保存在命令文件里,但必须放置在命令文件正常代码的后面。2、模块的调用(格式有两种)格式 1:DO|格式 2:|()注:直处圆括号不能省略注:如果模块是程序文件的代码,模块调用就用 ;如果模块不是程序文件的代码,模块调用就用格式 2 的模块调用既可以当做命令使用,也可以当做函数出现在表达式中,格式 2 中的不能含有扩展名。例:用过程编写一个求和与乘积的程序。SET TALK OFFS=1P=1DO X? “S=”,SSET TALK ONRETURNPROCEDURE XM=11N=12S=M+NP=S*N? “P=”,PENDPROCEDURE3、参数的传递:接收传递的命令:PARAMETERS ,LPARAMETERS ,