第二章VF程序设计的基础.docx
- 文档编号:25205068
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:40
- 大小:35.34KB
第二章VF程序设计的基础.docx
《第二章VF程序设计的基础.docx》由会员分享,可在线阅读,更多相关《第二章VF程序设计的基础.docx(40页珍藏版)》请在冰豆网上搜索。
第二章VF程序设计的基础
程序设计的基础
数据类型:
每一个数据都有一定的类型,数据类型决定了数据的存储方式和运算方式,大多数程序设计允许使用常量、变量和数组来存储数据;
一、常量:
有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):
习惯称为字符串,由中、英、数字等字符组成。
表示方法用单引号(’’)、双引号(””)、方括号([])三种定界符将字符串括起来。
定界符必须成对出现,如“AB是不合法的、”计算机”是合法的。
当定界符作为字符串内容时外层定界符要加以区分如:
[”我们”]是合法的,””我们””是非法的。
(4)日期型(D):
分传统和严格日期格式两种;
传统日期格式默认为美国日期格式:
”mm/dd/yy”(月/日/年),年份可以是2位数字,也可以是4位数字,如:
{^10/08/01}、{10-08-01}、{10/08/2001}
严格式日期格式:
{^年/月/日}
书写规则是用花括号”{}”作为定界符,第一个字符为脱字符”^”年份为四位、按年月日顺序书写不能颠倒如:
{^2008/08/08}
影响日期格式命令:
<1>、设置日期显示分隔符:
SETMARKTO[分隔符]
当SETMARKTO后没指定任何分隔符时,恢复系统默认的分隔符斜杠(/)。
<2>、设置日期显示格式:
SETDATETOYMD|DMY|MDY
YMD设置为年月日格式;
DMY:
设置为日月年格式;
MDY:
设置为月日年格式;
<3>、设置显示年份位数(2位或4位):
SETCENTYURYOFF|ONOFF为2位ON为4位)
(5)日期时间型(T):
分传统和严格日期时间格式两种:
严格日期时间格式:
{(^年/月/日),[小时:
分:
秒]}
书写规则与日期型相似
(6)逻辑型(L):
逻辑型数据用句点作为定界符,只有两个值逻辑真和逻辑假。
逻辑真用:
.T.,.Y.表示(大小写不区分)
逻辑假用:
.F.,.N.表示(大小写不区分)
二、变量:
值能够随时更改的量
变量通过变量名来进行访问;
变量名的命名规则:
以字母、汉字、下划线开头(数字不能开头),后面接字母,汉字,数字和下划线构成。
VF中变量分为:
字段变量和内存变量两大类,内存变量又分:
简单内存变量和数组(一维和二维数组)
(1)、字段变量:
就是我们所说的表中的字段,因为字段的取值是可变的,所以表中的字段名又叫字段变量,其值是当前记录指针所指的值(类型包含:
字符型、数值型、货币型、日期型、日期时间型、逻辑型、整型、通用型和备注型)
(2)、内存变量:
是内存中的一个存储单元,变量的值就是存放在这个单元里的数据。
(6种类型:
字符型C、数值型N、货币型Y、日期型D、日期时间型T、逻辑型L)
如果内存变量与数据表中的字段变量同名,用户在引用内存变量时,要在变量名字前加一个“M.”或“M->”,用来强调这个变量是内存变量。
1、内存变量的赋值:
格式1:
<内存变量名>=<表达式>注:
一次只能给一个内存变量赋值
格式2:
STORE<表达式>TO<内存变量名1>,<内存变量名2>,····注:
同时给多个变量赋予相同的值
功能说明:
A:
等号一次只能给一个内存变量赋值。
STORE命令可以同时给多个变量赋予相同的值,各个内存变量名之间应用逗号分隔开。
B:
一个变量在使用之前并不需要特别声明。
当用STORE命令给变量赋值时,如果该变量不存在,那么系统会自动建立它。
C:
如果要改变内存变量的内容和类型可以通过对内存变量重新赋值来完成。
例:
给内存变量赋值:
NJ=[大学]给变量NJ赋字符值;
STORE‘1234567890’TOXH给变量XH赋字符值;
STORESQRT(3^2+4^2)TOna1,na2,na3赋予相同的数值;
输出变量的值:
?
[<表达式表>];
?
?
<表达式表>;
2、内存变量的显示:
格式1:
LISTMEMORYLIKE<通配符>
格式2:
DISPLAYMEMORY[LIKE<通配符>]
功能:
显示内存变量的当前信息,包括变量名、作用域、取值和类型。
注:
A;通配符包括*和?
。
*表示多个字符;?
表示一个字符。
B:
内存变量名不能加定界符;
区别:
LISTMEMORY:
一次显示与通配符的所有内存变量,如果内存变量多,一屏显示不下,则自动向上滚动。
DISPLAYMEMORY分屏显示与通配符的所有内存变量,如果内存变量多,显示一屏后暂停,只要按任意键后就可以继续显示下一屏。
选用LIKE短语只显示与通配符相匹配的内存变量,通配符包括*和?
例:
STORE“BOODBEY”TOX1
STORE“HELLO”TOX2
DISPLAYMEMORYLIKEA*显示所有以“A”开头的内存变量。
3、清除内存变量:
格式1:
CLEARMEMORY
格式2:
RELEASE<内存变量名>
格式3:
RELEASEALL[EXTENDED]
格式4:
RELEASEALL[LIKE<通配符>|EXCEPT<通配符>]
功能说明:
格式1:
清除所有内存变量;
格式2:
清除指定的内存变量;
格式3:
清除所有内存变量,在人机会话状态其作用与格式1相同,如果出现在程序中,则应加上短语EXTENDED,否则不能删除公共内存变量。
格式4:
选用LIKE短语清除与通配符相匹配的内存变量,选用EXCEPT短语清除与通配符不相匹配的内存变量。
例:
RELEASEX1,X2释放内存变量X1,X2
RELEASEALLLIKEA*释放所有以变量A开头不的内存变量。
三、数组:
是在内存中连续的一片存储区域,它由一系列元素组成,每元素相当于一个简单内存变量。
1、创建数组格式:
A:
DIMENSION<数组名>(<下标上限1>[,<下标上限2>])[,……]
B:
DECLARE<数组名>(<下标上限1>[,<下标上限2>])[,……]
注:
1、两种格式的功能等价,数组创建后,系统自动给每个数组元素赋予初值逻辑假.F.
2、各数组元素数据类型可以不相同
3、数组的下限规定为1,访问时不能超限
4、可以用一维数组形式去访问二维数组
5、在赋值和输入语句中使用数组名时,表示将同一值同时赋值给该数组的全部元素
6、定义(访问)数组时也可以用方括号,如DIMEBY[3]等价于DIMEBY(3)
7、在一切可以使用简单内存变量的地方都可以使用数组元素。
内存变量就像一个盒子,而变量的值就相当于放在盒子里边的物体。
盒子是固定不变的,而放在盒子里的物体却能更换。
即内存变量类型取决于变量值的类型,内存变量的(值和类型)随重新赋的值改变而改变,以后一次赋值为准。
例如:
DIMENSIONA(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)
例:
数组的定义赋值:
DIMENSIONA
(2),B(2,2)定义两个数组;
A=100将A数组所有元素赋值为100
B(1,1)=A
(1)引用A数组的元素给B数组元素赋值;
STORE.T.TOB(1,1)给B数组的一个元素重复赋逻辑值;
B(1,2)=‘南京大学’给B数组的一个元素赋字符值“南京大学”
B(2,1)={^2006/11/16}给B数组的一个元素赋日期值
B(2,2)={^2006/11/1610:
00:
00AM}给B数组的一个元素赋严格的日期时间值
?
A
(1)+A
(2),B(2,1)系统主窗口显示:
2002006/11/16
在使用数组和数组元素时,应注意以下问题:
⏹在一切可以使用简单内存变量的地方,均可以使用数组元素。
⏹在赋值和输入语句中使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。
⏹在同一个运行环境下,数组名不能与简单变量名重复
⏹在赋值语句中的表达式位置不能出现数组名,可以出具体的数组元素名。
⏹可以用一维数组的形式访问二维数组;
二、表与数组之间的数据传递
1、将表的当前记录复制到数组:
将表的当前记录复制到数组
命令:
SCATTERTO<数组名>
格式1:
SCATTER[FIELDS<字段名表>][MEMO]TO<数组名>[BLANK]
格式2:
SCATTER[FIELDSLIKE<通配符>][FIEKDSEXCEPT<通配符>][MEMO]TO<数组名>[BLANK]
2、将数组数据复制到表的当前记录
将数组数据复制到表的当前记录
命令:
GATHERFROM<数组名>
例:
上机操作
(1)将表的当前记录复制到数组:
scatterto
Dimensionaa(3)
use仓库
scattertoaa
?
aa
(1),aa
(2),aa(3)
(2)将数组数据复制到表的当前记录:
gatherfrom
Dimensionab(1,3)
Ab(1,1)=”WH1”
Ab(1,2)=”芜湖”
Ab(1,3)=600
Use仓库
Appendblank
Gatherfromab
?
仓库号,城市,面积
三、表达式:
是由常量、变量和函数通过特定运算符连接起来的式子。
表达式最终总会有一个结果出来.
表达式可分为数值表达式、字符表达式、日期时间表达式和逻辑表达式。
大多数逻辑表达式是带比较运算符的关系表达式
1.数值、字符与日期时间表达式
(1)数值表达式:
是由算术运算符将数值型数据连接起来形成的,运算结果仍然为数值型数据,数值型数据可以是数值型常量和变量。
运算符:
(),*,^(平方),/,%
①算术运算符乘方:
^(shift+6)等价于**
②求余运算%和mod()函数相同
(2)字符表达式:
由字符串运算符与字符型数据连接起来形成,运算结果仍然是字符型数据,字符运算符有两个:
“+”和“-”,它们的运算优先级相同。
①+:
前后两个字符串首尾连接形成一个新的字符串
②-:
连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。
(3)日期时间表达式:
日期时间表达式中可以使用的运算符也有“+”和“-”两个,日期时间表达式的格式有一定限制,不能任意组合。
对:
日期-日期例子:
{^2005-05-02}-{^2005-05-01}=-1结果为数值型
日期+天数例子:
{^2005-05-02}+5={^2005-05-07}结果为日期型
日期-天数例子:
{^2005-05-02}-5={^2005-04-27}结果为日期型
日期时间-日期时间例子:
{^2005-05-0217:
05:
28}-{^2005-05-0217:
05:
25}=-3结果为数值型
日期时间+秒数例子:
{^2005-05-0217:
05:
28}+10={^2005-05-0217:
05:
38}结果为日期时间型
日期时间-秒数例子:
{^2005-05-0217:
05:
28}-10={^2005-05-0217:
05:
18}结果为日期时间型
错:
日期+/-日期时间型,日期时间+/-日期,日期+日期,日期时间+日期时间
注:
日期和日期时间不可以相加减。
2.关系表达式:
关系表达式通常也称为简单逻辑表达式,它是由关系运算符将两个运算对象连接起来形成的,作用是比较两个表达式的大小或者前后,运算结果为逻辑型数据,它们的优先级相同。
运算符
<小于15<4*6.T.
>大于‘A’>‘1’.T.
=等于2+4=6.F.
<>、#、!
=不等于5<>-10.T.
关系运算符的优先级别相同。
关系表达式运算时,就是比较同类型两数据对象的“大小”,对于不同类型的数据,其“大小”或者是值的大小,或者是先后顺序。
日期或日期时间数据以日期或时间的先后顺序为序。
在VisualFoxPro系统中,字符型数据的比较相对复杂,默认规则为:
1)单个字符
单个字符的比较是以字符ASCII码的大小,作为字符的“大小”,也就是先后顺序;
2)汉字
系统默认按汉字的拼音排列汉字的顺序,也就是以汉字的拼音顺序比较“大小”
2)字符串
两个字符串进行比较的基本原则是从左到右逐个字符进行比较。
当两串做“==”和“=”比较时,运算结果与SETEXACTON/OFF的设置有关。
默认是OFF状态。
●精确比较:
用运算符==进行两串的精确比较时,只有当两串长度相同,字符相同,排列一致时才成立;(EXACTON或OFF)
●相等比较:
用运算符=进行两串比较,当处于OFF状态时,只要右边的字符串与左边字符串的前部分内容相匹配,结果就为真.T.。
例如:
“abc”=“abd”为假,“abc”=“abcde”为假,“abcde”=“abcfd”为真;当处于ON状态时,先在较短字符串的尾部加上若干个空格,使两个字符串长度相等,然后再进行比较。
例如:
“abc”=“abcde”为假,“ab”=“ab”为真;
●大小比较:
用运算符<或>进行两串比较时,比较到第1个不相同字符为止,否则,长度较长的串较“大”;
●其他比较:
除上述运算符之外的其他运算符<>、<=和>=的比较,均可看作是两个运算符以逻辑“或”的关系构成的复合运算;
(5).逻辑表达式
由逻辑运算将逻辑型数据对象连接而成的式子称为逻辑表达式。
逻辑表达式的运算对象与运算结果均为逻辑型数据。
表为逻辑运算符的功能。
逻辑运算符前后一般要加圆点“.”标记,以示区别。
表逻辑运算符
运算符功能优先级别
()圆括号最高
.NOT.或!
逻辑非
.AND.逻辑与a.and.b.or.c.and.f
.OR.逻辑或最低a.and.b
对于各种逻辑运算,其运算规则可由逻辑运算真值表确定,表所示就是逻辑运算真值表。
表逻辑运算真值表
ABA.AND.BA.OR.B.NOTA
TTTTF
TFFTF
FTFTT
FFFFT
例如:
?
17>33.AND.”A”<”a”&&值为.F.?
17>13.or."A"<"a".and..not..t.&&值为.T.
.t..or.f.and.f.
t..or..t.
4、运算级优先级
高数值字符日期时间关系逻辑低
例:
{^2005.5.15}>{^2005.5.16}or12>2and.T.<.F.or”2”>”12”and(-10%-3=-1)
.F.or.F.or.T.
.T.
四、常用函数
(一).字符及字符串处理函数:
字符及字符串处理函数的处理对象均为字符型数据,但其返回值类型各异。
字符函数:
1.取子串函数:
格式:
substr(c,n1,n2)
功能:
取字符串C第n1个字符起的n2个字符。
返回值类型是字符型。
例:
取姓名字符串中的姓。
store"王小二"toxm
?
substr(xm,5,6)
结果为:
二
?
substr(“efghfgfsf”,2,7)
fghfgf
2.删除空格函数:
以下3个函数可以删除字符串中的多余空格,3个函数的返回值均为字符型。
trim(字符串):
删除字符串的尾部空格
alltrim(字符串):
删除字符串的前后空格
ltrim(字符串):
删除字符串的前面的空格
例:
去掉第一个字符串的尾空格后与第二个字符串连接
store"abcd"tox
store"efg"toy
?
trim(x)+y?
”abcd”+y
abcdefg
3.空格函数:
格式:
space(n)
说明:
该函数的功能是产生指定个数的空格字符串(n用于指定空格个数).
例:
定义一个变量dh,其初值为8个空格
storespace(n)todh
4.取左子串函数:
格式:
left(c,n)
功能:
取字符串C左边n个字符。
X=”abcdefgm”
?
left(X,5)
5.取右子串函数:
格式:
right(c,n)
功能:
取字符串c右边的n个字符
例:
a="我是中国人"
?
right(a,4)
国人
?
left(a,2)
我
6.计算子串出现次数函数:
格式:
occur(字符表达式1,字符表达式2)
功能:
返回第一个字符串在第二字符串中出现的次数,函数值为数值型。
若第一个字符串不是第二个字符串的子串,则函数值为0.
例:
?
occur("ga","cdefagaabb")
1
7.求子串位置函数:
格式:
At(字符串1,字符串2)
功能:
返回字符串1在字符串2的位置
例:
?
At("授","副教授")
5
X=”ce”
Y=”abcefg”
?
at(x,y)at(”ce”,”abcefg”)
3
8.大小写转换函数:
格式:
lower(字符串)
upper(字符串)
功能:
lower()将字符串中的字母一律变小写;upper()将字符串中的字母一律变大写
例:
bl="FoxBASE"
?
lower(bl)+space
(2)+upper(bl)
foxbaseFOXBASE
9.求字符串长度函数:
格式:
len(字符串)
功能:
求指定字符串的长度
例:
a="中国人"
?
len(a)
6
10.字符串匹配函数:
like(字符表达式1,字符表达式2)
功能:
比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真,否则返回逻辑假。
<字符表达式1>中可以包含通配符“*”和“?
”。
“*”可与任何数目的字符相匹配,“?
”可与任何单个字符相匹配。
例:
like(“ab”,”abcde”)
(二).数学运算函数:
1.取整函数:
格式:
int(数值)
功能:
取指定数值的整数部分。
例:
取整并显示结果
?
int(25.69)
25
格式:
ceiling(表达式)
功能:
返回大于或等于指定表达式的最小整数。
、
?
ceiling(2009.3)
2010
格式:
floor(表达式)
功能:
返回小于或等于指定表达式的最大整数。
?
floor(2009.9)
2009
2.四舍五入函数:
格式:
round(数值表达式,小数位数)
功能:
根据给出的四舍五入小数位数,对数值表达式的计算结果做四舍五入处理
例:
对下面给出的数四舍五入并显示其结果
?
round(3.14159,4),round(2048.9962,0),round(2048.9962,-3)
3.141620492000
3.求平方根函数:
格式:
sqrt(数值)
功能:
求指定数值的算术平方根
例:
?
sqrt(100)
10
4.最大值、最小值函数:
格式:
Max(数值表达式1,数值表达式2)
Min(数值表达式1,数值表达式2)
功能:
返回两个数值表达式中的最大值和最小值
例:
x1=123.456
x2=234.567
?
max(x1,x2)
234.567
?
min(x1,x2)
123.456
?
min(3.1,6,2,6,9)
2
5.求余数函数:
%15%4
格式:
mod(表达式1,表达式2)
功能:
求表达式1对表达式2的余数
例:
?
mod(-10,-3)
3
6.求圆周率函数
格式:
pi()
功能:
返回圆周率(数值型)。
该函数没有自变量。
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&&隐含四舍五入取整转换为字符型数据
?
str(321.56,6,2)
321.56
2.字符转数值函数:
格式:
val(s)
功能:
将数字字符串s转换为数值
例:
x="24"
y="76"
?
val(x)+val(y)
100
3.字符转日期函数:
格式:
ctod(c)
功能:
将日期字符串c转换为日期
例:
setdateansi&&日期格式设为美国标准化协会格式
?
ctod("^2005.11.14")
2005.11.14
4.日期转字符函数:
格式:
dtoc(d)
功能:
将日期d转化为日期字符串
例:
将日期型数据转化为字符型日期数据并显示汉字日期。
setcenturyon&&开启世纪前缀,即日期中年份用4位表示
setdateansi
rq={^2005.11.14}
rq=dtoc(rq)=”2005.11.14”
?
substr(rq,1,4)+"年"+substr(rq,6,2)+"月"+substr(rq,9,2)+"日"
2005年11月14日
5.时间转字符函数:
格式:
ttoc(时间)
功能:
将时间转为时间字符串
6.字符转时间函数:
格式:
ctot(c)
功能:
将时间字符串转化为时间
7.字符串替换函数:
格式:
stuff(<字符表达式1>,<起始位置>,<字符个数>,<字符表达式2>)
功能:
从指定位置开始,用<表达式2>的值去替换<表达式1>中指定个数字符。
若<字符个数>为零,直接插入;若<表达式2>为空字符串,则删除<表达式1>中指定个数的字符。
例:
X="祝大家新年好!
"
?
stuff(X,7,4,"春节")
祝大家春节好!
?
stuff(X,11,0,"春节")
祝大家新年春节好!
?
stuff(x,7,4,"")
祝大家
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 VF程序设计的基础 第二 VF 程序设计 基础