《2011年计算机专业对口高考大纲》地址：http://192.168.8.40

毕业设计程序：微机46班信息管理系统

程序源代码：http://192.168.8.40/ch01/vfp8/dm.txt

程序源文件：http://192.168.8.40/ch01/vfp8/bysj.rar

函数部分介绍：

数值函数：ABS()、INT()、ROUND（）、SQRT（）。

字符函数：宏替换、SUBSTR()、LEN()、AT()、SPACE()、REPLICATE()。

日期和时间函数：DATE()、TIME()。

数据类型转换函数：STR()、VAL()、CTOD()、DTOC()。

测试函数：TYPE()、FILE()、IIF()。

其他需要了解的函数：MAX()、MIN()、FOUND()、MOD()、SELECT()、RECNO()。

1.       ABS(expN)       &&返回一个非负数，即绝对值，结果用在不能是负数的地方。返回值为N型。

? ABS(-45) && 显示 45
? ABS(10-30) && 显示 20
? ABS(30-10) && 显示 20
STORE 40 TO gnNumber1
STORE 2 TO gnNumber2
? ABS(gnNumber2-gnNumber1) && 显示 38

2.       INT(expN)   &&只取括号内结果的整数部分，并不四舍五入。返回值为N型。

? INT(12.5) && 显示 12
? INT(6.25 * 2) && 显示 12
? INT(-12.5) && 显示 -12
STORE -12.5 TO gnNumber
? INT(gnNumber) && 显示 -12

3.       ROUND(expN)  &&四舍五入，小数位数，可取（正值，零，负值）返回值为N型。

SET DECIMALS TO 4  &&设置数据默认的小数位数

SET FIXED ON     && 固定小数显示

CLEAR

? ROUND(1234.1962, 3) && 显示1234.1960

? ROUND(1234.1962, 2) && 显示1234.2000

? ROUND(1234.1962, 0) && 显示1234.0000

? ROUND(1234.1962, -1)  && 显示1230.0000

? ROUND(1234.1962, -2)  && 显示1200.0000

? ROUND(1234.1962, -3)  && 显示1000.0000

4.       SQRT（expN） &&求小括号里的数据的算术平方根。要求里边的数据不能为负数。返回值为N型。

CLEAR

? SQRT(4)  && 显示2.00

? SQRT(2*SQRT(2))  && 显示1.68

5.       &expC[.]        &&宏替换查找并替换，格式为符号&+c型变量。使用之前C型变量得存在。

Xy=”abc”  &&建立C型变量xy

Use xy   &&打开的表格为xy.dbf

Use &xy  &&打开的表格为abc.dbf

A=”3+5”  &&建立C型变量A

? A      &&显示变量A的值，结果为3+5

? &a     &&显示的是查找&a，并用变量A的值替换，即相当于？3+5，结果为8

C=”this is a dog.”

B=”xyz”

? “NO1 &C. NO2 &B. NO3”  &&显示的结果为： NO1 this is a dog. NO2 xyz NO3

For i=1 to 10

X=ltrim(str(i))   &&将N型变量I的值，转换成字符型的I，去掉左边的空格后，赋值给X

A&x=i

Endfor    &&这个循环，相当于建立了10个变量，即a1=1,a2=2,a3=3…..a10=10。

6.       SUBSTR(expC,expN1,expN2)  &&截取一个字符串的一部分，返回一个字符串，是原串的子串。

STORE 'abcdefghijklm' TO mystring

CLEAR

? SUBSTR(mystring, 1, 5)  && 显示 abcde

? SUBSTR(mystring, 6)  && 显示 fghijklm,省略第expN2，则从第6个到末尾。

相关函数：left（expC，expN），right（expC，expN），即左截取、右截取。

7.       LEN(expC)   &&返回expC结果的字符的个数，返回值为N型。

A=”abcdefg”

?len(a)    &&显示结果为7

?len(a)+2  &&显示结果为9，即函数值可参与运算

?len(a+a)  &&显示两个字符串的长度，结果为14

Accept “请输入一个字符串” to x   &&从键盘上获得一个字符串

Y=len(x)  &&将x中字符的个数，保存到变量y中。

For i=y to 1 step -1  &&从Y个循环至1，步长为-1

?? subs(x,i,1)   &&从X中截取第i个，顺序为：最后一个，倒数第二个…第一个。

Endfor           &&这个循环的结果就是

8.       AT(expC1，expC2[,expN])  &&判断第一个字符串，在第二个字符串左侧首次出再的位置，结果为N型值，expN为第几次出现的位置，省略默认为1。

STORE ‘河北省徐水县职教中心，是一所国家级职教中心。' TO gc

STORE '中心' TO zx

CLEAR

? AT(zx,gc)  && 显示 17

? AT(zx,gc,2) && 显示 39

? at(‘职业’,gc)   &&显示为0，因为没有存在‘职业’二字

Xm=”张宝康”

If at(‘张’,xm)=1  &&根据结果是不是出现的位置为1，判断是不是姓张。

? “姓张”

Else

? “不姓张”

Endif

9.       SPACE(expN)   &&产生由N个空格组成的字符串，结果为C型值。

A＝”中国”

B=”您好”

? a+b     &&结果为  中国您好

?　a+space(5)+b  &&结果为  中国     您好，两个词之间有5个空格。

10.   REPLICATE(expC，expN)  &&返回一个字符串，这个字符串是将指定字符表达式重复指定次数后得到的。

? repl(“abc”,3)    &&结果为  abcabcabc   即让abc重复三次，结果为9个字符。

A=”xyz”

? repl(a,4)       &&结果为  xyzxyzxyzxyz

?a+repl(“_”,10)+a     &&结果为  xyz__________xyz

11.   DATE()   &&返回由操作系统控件的当前系统日期，结果的格式受set date、set cent on/off的影响。一般没有自变量，即括号内是空的。

设今天的日期是2011-1-21

? date()      &&显示的结果为 01/21/11   结果年份为2位，美国格式 mm/dd/yy

Set cent on   &&打开世纪开关，即年份显示为4位

? date()      &&显示的结果为 01/21/2011 结果年份为4位，美国格式 mm/dd/yyyy

Set date ansi  &&设置中国格式，yyyy.mm.dd  分隔符为 .

? date()      &&显示结果为 2011.01.21

SET MARK to "*"   &&设置日期分隔符为 *

? date()      &&显示的结果为 2011*01*21

? date()-100  &&结果为2011.01.21以前100天的日期，结果为D型 2010*10*13

?date()+100   &&结果为2011.01.21以后100天的日期，结果为D型 2011*05*01

X=ctod(“2011.4.28”)   &&将C型 2011.4.28，转换成D型数据，保存到变量X中

? x-date()     &&结果为距离2011.4.28日相差的天数，  97

12.   TIME()   &&一般没有自变量，即括号是空的。以 24 小时制、8 位字符串(时：分：秒)格式返回当前系统时间。结果为C型。

设现在的时间的：21:01:35

? time()   &&显示现在的系统时间，即任务栏中的时间。 21:01:35

?”现在的时间是：”+time()  &&结果  现在的时间是：21:01:35

13.   STR(expN1,expN2,expN3)  &&将N型的expN1转化成expN2个长度且保留expN3个小数的C型字符串，内容由expN1中的数字组成，转化过程中可能补空格，或者四舍五入。

A=123.45678   &&建立一个N型的变量，值为123.45678

? str(a)  &&省略后边自变量，默认转换成10个长度，前7个空格，0个小数，结果四舍五入 123

? str(a,6,2)   &&结果为  123.46

?str(a,5,2)   &&结果为  123.5

?str(a,2)    &&结果为   **   宽度不足盛放变量a的整数位数时，输入*

?str(a,4,2)   &&结果为  123   其中，123前有一个空格，共4个长度，2没有效果

14.   VAL(expC)  &&将expC转换成N型，结果为N型，转换到第一个非数字结束，字母e除外。

CLEAR

STORE '12' TO A

STORE '13' TO B

? VAL(A) + VAL(B)  && 显示25.00

STORE '1.25E3' TO C

? 2 * VAL(C)  && 显示2500.00

? val(“  1234 5abc”) &&结果为 1234.00

? val(“ 1234 e2”)    &&结果为 1234.00

?val(“  1234e 2”)  &&结果为 123400.00

?val(“  1234d 2”)  &&结果为 1234.00  科学计数只承认字母 e

?val(“ 1234.567.88”) &&结果为 1234.57  默认保留2个小数，第三位四舍五入

15.   CTOD(expC)、DTOC(expD)  &&C型数据与D型数据之间的转换。

Clea

SET CENTURY ON   && 显示世纪 4位年份

Set date amer      &&设置当前的日期格式为美国格式

cDate="01/01/2003"

?CTOD(cDate)   &&显示D型的  01/01/2003

?GOMONTH(CTOD(cDate),12)  && 返回12个月后的日期 01/01/2004

?CTOD(cDate)+12  && 显示12天后的日期  01/13/2003

B=date()   &&即获得今天的日期,前边说 01/21/2011

? dtoc(b)  &&显示的结果为 01/21/2011  这里是C型的 01/21/2011

?”今天的日期:”+dtoc(b)  &&结果为  今天的日期：01/21/2011

?dtoc(b,1)  &&忽略set date所设置的日期格式，统一返回 20110121格式的日期，没有分隔符，且采用 yyyymmdd格式。

1.       TYPE(“exp”)  &&可以测试的表达式类型有：　C　D　L　N　S　M　U

其中U是不存在，即未定义的意思，unfine。

Clea

A=date()  && 建立系统日期 D型

B=time()  &&建立系统时间 C型

C=date()-15  &&当前日期前15天的日期 D 型

D=date()-c   &&计算两个日期之间的天数，结果为N型

E=”a”      &&建立一个字符变量 C型

? type(“a”),type(“b”),type(“c”),type(“d”),type(“e”),type(e),type(“&e”),type(b)

&&最后一句的结果为   D C D N C D D U    注意后边四个结果

2.       FILE(expC)　&&判断一个文件是不是存在，如果存在返回逻辑真（.t.），否则返回逻辑假(.f.)

SET PATH TO HOME()    &&设置默认目录为系统启动目录，即VFP6.0系统软件所在目录

CLEAR

IF FILE('foxuser.dbf')

? 'Visual FoxPro 资源文件,',”存在”

ELSE

? 'Visual FoxPro 资源文件,'+”不存在”

ENDIF

3.       IIF(expL,exp1,exp2) &&根据expL的真假，返回exp1、exp2其中的一个值，真返回exp1。

Input to x                          &&从键盘获得一个数，保存到X中

?iif(x>=0,”是正数”,”是负数”)           &&如果x>=0,则值为 是正数,否则相反

假如执行本程序,输入 33，结果为 是正数，如果输入-20，结果为 是负数

Use xs

Do whil .not. eof()

Repl  工资 with 工资+iif(性别=”男”,10,20)

Skip

Enddo

Use

&&本题的意思是，在从表格头至尾的循环中，将男同志的工资增加10元，女生增加20元。

4.       MAX()、MIN()、FOUND()、MOD()、SELECT()、RECNO()。

1）Max()、min()是求两个或者内个值中的最大值、最小值。可以同时比较多个值

? max(33,22,18,127,45.6)  &&返回5个数中的最大值   127

?max(10.3,14.7,10.5,2.2)   &&返回4个数中的最大值   14.7

?max(“abc”,”cde”,”fgh”)   &&返回3个字符串的最大值  fgh

?min(33,22,18,127,45.6)  &&返回5个数中的最小值   18

?min(“abe”,”cde”,”fgh”)   &&返回3个字符串中的最小值  abc

2)found()、found(expN)、found(expC)

SET TALK OFF

USE xt  && 打开xt 表

STORE 0 TO x

LOCATE FOR left(姓名,2)=’张'

DO WHILE FOUND()  &&这句可以使用 do whil .not.eof()或者 do whil recn()>recc()

X=x+1

CONTINUE

ENDDO

?”全班姓张的人数为”+str(x,3)

&&found()测试当前工作中的查找是不是找到了，受locate/cont、seek、find的影响

&&found(5)测试5号工作中的查找是不是找到了

&&found(“abc”)测试别名为abc的工作区中的查找是不是找到了

3）MOD(expN1，expN2)  &&计算expN1除以expN2的余数

clea

A=5

B=3

? mod(a,b)    &&结果为  2

? mod(-a,-b)   &&结果为 -2

? mod(-a,b)   &&结果为  1

? mod(a,-b)   &&结果为 -1

&&分析：先求|expN1|除以|expN2|的余数，即先各自取绝对值，再求余数，得到2

&&如expN1、expN2符号相同，则同时为正时得+2,同时为负时得-2，上例得知

&&如expN1、expN2符号不同，则2先取expN1的符号，再加上expN2。即第三个:-2+3=1，第四个:+2+(-3)=-1

? mod(13,5),mod(-13,-5),mod(-13,5),mod(13,-5)

&&结果为：   3  -3  2  -2

?mod(12.5,4)  &&结果为 0.5  即直接求，不四舍五入 12.5/4=3……0.5

?mod(-12.5,4)  &&结果为 3.5  -12.5/4=  -0.5+4=3.5

?mod(12.5,-4)  &&结果为 -3.5  12.5/-4= +0.5+(-4)=-3.5

4) SELECT()  && SELECT([ 0 | 1 | expC])

Sele 2

Use xs

?Sele()  &&显示当前工作区的区号，返回N型值    2

?sele(0) &&显示当前工作区的区号，返回N型值     2

?sele(1) &&显示未被使用的最大的工作区号,返回N型值 32767

?sele(“xs”) &&显示别名为xs的工作区的区号，返回N型值   2

5）RECNO()   && RECNO([expN｜expC])

Clea

Sele 1

Use xx   &&默认本表格有10条记录

Go 3

?recn()   &&返回当前指针所指向的记录的记录号   3

Skip -1

?recn()   &&返回当前指针所指向的记录的记录号   2

Sele 2

Use bf   &&默认本表格有10条记录

Go 5

?recn()   &&返回当前指针所指向的记录的记录号   5

Skip -2

?recn()   &&返回当前指针所指向的记录的记录号   3

?recn(1)  &&返回1号工作区上的记录指针         2

?recn("xx") &&返回别名为xs的工作上的记录指针  2

Sele 1

?recn()  &&返回当前指针所指向的记录的记录号   2

?recn(2) &&返回2号工作区上的记录指针         3