第2章 VF程序设计基础.docx

上传人:b****7 文档编号:16707716 上传时间:2023-07-16 格式:DOCX 页数:22 大小:52.04KB
下载 相关 举报
第2章 VF程序设计基础.docx_第1页
第1页 / 共22页
第2章 VF程序设计基础.docx_第2页
第2页 / 共22页
第2章 VF程序设计基础.docx_第3页
第3页 / 共22页
第2章 VF程序设计基础.docx_第4页
第4页 / 共22页
第2章 VF程序设计基础.docx_第5页
第5页 / 共22页
第2章 VF程序设计基础.docx_第6页
第6页 / 共22页
第2章 VF程序设计基础.docx_第7页
第7页 / 共22页
第2章 VF程序设计基础.docx_第8页
第8页 / 共22页
第2章 VF程序设计基础.docx_第9页
第9页 / 共22页
第2章 VF程序设计基础.docx_第10页
第10页 / 共22页
第2章 VF程序设计基础.docx_第11页
第11页 / 共22页
第2章 VF程序设计基础.docx_第12页
第12页 / 共22页
第2章 VF程序设计基础.docx_第13页
第13页 / 共22页
第2章 VF程序设计基础.docx_第14页
第14页 / 共22页
第2章 VF程序设计基础.docx_第15页
第15页 / 共22页
第2章 VF程序设计基础.docx_第16页
第16页 / 共22页
第2章 VF程序设计基础.docx_第17页
第17页 / 共22页
第2章 VF程序设计基础.docx_第18页
第18页 / 共22页
第2章 VF程序设计基础.docx_第19页
第19页 / 共22页
第2章 VF程序设计基础.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第2章 VF程序设计基础.docx

《第2章 VF程序设计基础.docx》由会员分享,可在线阅读,更多相关《第2章 VF程序设计基础.docx(22页珍藏版)》请在冰点文库上搜索。

第2章 VF程序设计基础.docx

第2章VF程序设计基础

Vf程序设计基础

(数据类型:

数据有不同类型,不同地方用的数据类型是不一样,C,N,D(8),L

(1),I(4),T(8),Y(8),M(4)……注意有些字段的宽度是系统规定的)

2.1常量与变量P48

1、常量(P48)值不变

字符型(C):

1、三种定界符,单引号、双引号、中括号(英文的标点符号)

‘’,“”,[]必须成对出现,两边一致

2、空串与包含空格的字符串不同‘’与‘’

要点3、定界符本身也是字符串内容时,需用另外一种定界符为该字符串定界

合法:

‘K“ABC”S’,‘[DDD]’,'"五一"庆祝会'

非法:

[[ABC]],““AAN””,““五一”庆祝会”

数值型(N):

1、注意科学记数法5.878E12等于5.878*10^12

整型I宽度系统定义4个字节(不含小数)

货币型(Y):

1、小数自动四舍五入取4位2、用8个字节表示(宽度)

?

$12345.67896====>12345.6790

日期型(D):

{}称定界符,^称脱字符,分隔符有3种(/,-,.)

用8个字节表示(宽度)

1、严格的日期格式:

{^2006/09/01},任何情况下可以用

2、传统的日期格式受SETSTRITO0|1的设置影响

3、日期格式的设置命令

SETCENTURYON|OFF年份用4位|2位(2010年9月11小题)

SETMARKTO用什么分隔符’\’,’-‘,’.’

如:

SETMARKTO‘-‘(注意一定加定界符)

SETDATETOYMD按‘年月日’的格式Y:

年M:

月D:

(默认显示是“月/日/年”)

日期时间型(T)

逻辑型(L):

1、用一个字节表示2、真、假值(.T.和.F.或.Y.和.N.)3、.T.>.F.为真

2、变量(P52)

值可以随时更改,变量有内存变量(及数组变量)和字段变量

1命名规则:

名字组成可以是字符(包括汉字)、下划线、数字

要点:

但不能以数字开头,只能以字符(英文、中文)或下划线开头。

合法:

A12,AB,_AB

非法:

1A,2B

2变量赋值

“=“:

单个变量赋值(“=”也可以是关系(比较)运算符,注意区别)

STORETO:

多个变量赋相同值

A=56&&把数值型常量56赋给变量A

STORE80TOD,B,C

变量的值是最后一次赋的值(要点)

A=24&&把24这个数值型常量赋给变量A,A是数值型变量,其值为24

A=‘BNM’&&把’BNM’这个字符型常量赋给变量A,A是字符型变量,其值为’BNM’

A&&结果是BNM字符

AccepttoA

IFA=[123]

S=0

ENDIF

S=1

?

S

A)0B)1C)123D)由A的值确定(2010年3月笔试29题)

内存变量的数据类型由其值决定(要点)

A=12则变量A是一个数值型的内存变量。

B=‘ABC’,则变量B是一个字符型的内存变量。

 

3、输出变量的值:

,?

A=12

?

A

要点:

当内存变量和字段变量同名时,优先输出字段变量的值,如要输出内存变量的值,应指明是内存变量?

M->内存变量或M.内存变量

举例:

假设职员表已在当前工作区打开,其当前记录的“姓名”字段值为“李彤”(C型字段)。

在命令窗口输入并执行如下命令:

姓名=姓名-“出勤”

?

姓名

屏幕上会显示

A)李彤B)李彤出勤C)李彤出勤D)李彤-出勤

(2010年3月笔试27题)

4、内存变量其他命令

显示(DISPMEMO或LISTMEMO)

LIKE模糊匹配,*、?

表示任意一串或一个(通配符)

清除CLEARMEMO

例:

LISTMEMOLIKEA*显示以字母A开头的内存变量

数组:

一般先定义,后使用P52

二维数组F(A,B)F:

数组名,A、B是下标,A、B的最小值是1,共有A*B个元素,每个元素初值都为.F.

1、创建或定义数组DIMEF(2,3)或DECLAREF(2,3)

定义一维数组DIMEF(9)定义二维数组DIMEF(2,3)

2、定义数组后,每个元素初值为.F.(要点)

3、F=3,则所有元素的值都赋值3

4、用一维数组的形式访问二维数组:

(按行的顺序访问)

二维

F(1,1)

F(1,2)

F(1,3)

F(2,1)

F(2,2)

F(2,3)

一维

F

(1)

F

(2)

F(3)

F(4)

F(5)

F(6)

(要点)

 

表与数组

表当前记录复制到数组元素中:

SCATTER……TO数组名

USECHENGJI&&打开数据表CHENGJI

GO6&&指针指向第6条记录

SCATTERTOF&&自动定义一个数组,数组名F,元素和数据表的字段个数相同

F

(1),F

(2)

数组复制到表当前记录:

GATHERFROM数组名

2.2表达式P55

常量、变量、函数通过特定的运算符连接起来P56

特别注意:

数据类型匹配

数字表达式:

同数学的算术表达式,运算符,()、*、+……结果:

数值注意:

如A是变量,则(A)是表达式

字符表达式:

+(完全连接),-(不完全连接)?

‘ABC’-‘ABC’

结果:

字符

日期表达式:

日期-日期,日期+N,日期-N结果:

日期或数值

要点:

日期+日期是非法

关系表达式:

运算符号P58结果:

逻辑型

数值、货币、日期数据比较(先比较“年”,再比较“月”,最后比较“天”)

字串包含测试:

A、B是字符型变量,A$B,A是B的子串,则为真,否则为假。

?

‘女’$’男女’——>.t.

?

‘学生’$’大学生’->.t.

假设有一个字段变量:

姓名姓名中含有“张“字,则‘张’$姓名——>.t.

姓“张”的记录,则姓名=‘张’——>.t.

或SUBST(姓名,1,2)=‘张’---->.T.

或LEFT(姓名,2)=‘张’----->.T.

字符排序:

工具——选项——数据——排序序列中设置

ASCII码:

?

MAX(‘2’,’12’,’05’),MAX(2,12,05)

拼音:

?

MIN(‘章’,’柳’,’陈’),

字符比较:

?

‘人’>’人民’,’人’<’人民’结果.F.和.T.

注意?

'abc'>'ab','abc'<'ab','abc'='ab'——>.F..F..T.

要点:

1、相等比较运算时,右边字符串同左边字符串的开始部分,为真

2、关系运算符的两边数据一定要匹配

3、和$运算的区别,例查找姓王的同学(=),查找名字中有“王”字的同学($)

假设数据表中有字段:

姓名,用VF命令LISTFOR条件,则

判定姓王的同学的条件:

姓名=’王’--->.T.

判定姓名中有“王”字的同学的条件:

’王’$姓名--->.T.

特别注意:

姓名是字段变量,因此不能加定界符

字符串精确比较与EXAC设置(要点)P59

==:

精确比较(绝对等于)

SETEXACON|OFF:

是|否严格OFF是默认设置

1、“==”:

不管EXAC的设置,精确比较“==“要两边完全相同(含空格),则.t.,否则为.f.

2、“=”:

(1)SETEXACOFF(非严格比较):

右边的字符串同左边字符串的开始部分,.T.

(2)SETEXACON(严格比较):

等长(短的尾部补空格)

再进行精确比较(左右是否完全一样)

 

例:

A=’AB‘

B=’AB’

C=’ABC’

SETEXACOFF

?

A==B,A=B,B=A,B=C,C=B结果:

.F..T..F..F..T.

SETEXACON

?

A==B,A=B,B=A,B=C,C=B结果:

.F..T..T..F..F.

逻辑表达式:

.T.>.F.为真结果:

逻辑型

优先级(高——>低):

非(NOT),与(AND),或(OR)

与:

且,两边必须都为真结果才是.T.,其他都是.F.。

或:

或者,两边的表达式结果都为.F.时才是.F.,其他都是.T.

运算符优先级:

算术—字符—日期—关系—逻辑

例子:

?

((10%3=1)AND15-2=0)OR‘电脑’!

=’计算机’

?

((1=1)and13=0)OR‘电脑’!

=’计算机’

(.T.AND.F.)OR.T.

.F.OR.T.

.T.

2.3函数P61

(带*或**和加粗的是要点,其他函数要弄清楚大概功能)

数值函数P61-62

1、绝对值函数和符号函数ABS(<数值表达式>)SIGN(<数值表达式>)

2、平方根函数SQRT(<数值表达式>)

**4、取整函数INT(<数值表达式>)

5、四舍五入函数ROUND(<数值表达式1>,<数值表达式2>)

6、余数函数MOD(<数值表达式1>,<数值表达式2>)

字符函数P62-63

**1、字符串长度函数LEN(<字符表达式>)

?

len(space(10)-space(10))

2、大小写转换函数upper()、lower()

**3、空格字符生成函数SAPCE(<数值表达式>)

**4、删除前后空格函数ALLTRIM(<字符表达式>)

A=’abcdefg‘

?

len(a)

?

len(allt(a))

**5、取子串函数SUBSTR、LEFT、RIGHT

A=’计算机科学技术’

?

SUBSTR(A,7,4)---->科学

?

LEFT(A,6)------>计算机

?

RIGHT(A,4)------>技术

有如下赋值语句,结果为”大家好”的表达式是

a=”你好”

b=”大家”

A)b+at(a,1)B)b+right(a,1)C)b+left(a,3,4)D)b+right(a,2)

(笔试试卷出现多次)

6、计算字串出现次数函数OCCURS(< 字符表达式1>,<字符表达式2>)

?

OCCU(‘计’,’计算机是计算的机器’)

**7、求子串位置函数AT()结果:

数值型

?

AT(‘is’,’thisisbook’,1)---->3

?

AT(‘is’,’thisisbook’,2)----->6

?

AT(‘人民’,’中华人民共和国’)----->5

8、子串替换函数STUFF()

?

STUFF(‘GOODBYE’,6,3,’MORNING’)

9、字符替换函数CHRTRAN()

?

CHRTRAN(‘ABACAD’,’ACD’,’X12’)

*11、日期时间函数P65

**年份、月份、天函数

?

year({^2005/06/28})

A={^2008/06/28}

?

year(a),MONTH(A),DAY(A)-------->数值型数据

数据类型转换函数P66

*12、数值转换字符STR(〈数值表达式〉,……)数字——>字符

A=-123.456

?

STR(A,9,2),STR(A,6,2),STR(A)

字符转换数值VAL(〈字符表达式〉)字符——>数值

A=’-3212B12’

?

VAL(A)

*13、字符转换成日期CTOD()

*日期转换成字符DTOC()

A=DATE()

?

DTOC(A)&&转换后输出的格式MM/DD/YYYY

?

DTOC(A,1)&&带参数1,则转换后输出的格式是YYYYMMDD,没有分隔符

?

LEFT(DTOC(A,1),4)------>2010

**14、宏替换函数&,替换出字符型变量的内容P67

A=’10+90’

?

a

?

&a,&a+500

X=50

Y=100

Z=”x+y”

?

50+&z

例:

2010年9月笔试16题

 

*15、测试函数P68-70

1)值域测试函数BETWEEN?

BETWEEN(50,50,200)包含两头

2)空值测试函数ISNULL.null.相当于不确定(输入CTRL+0)

3)“空值”测试函数EMPTY()?

EMPTY(0)“空值”对于不同的数据类型不同

例:

?

EMPTY(.null.),EMPTY(45),EMPTY(''),EMPTY(0)

?

ISNULL(SPACE(0)),ISNULL(.null.),ISNULL(45)

4)数据类型测试函数VARTYPE()

?

VARTYPE(TIME())----->c&&时间函数的数据类型返回值是字符

?

VARTYPE(123)------->n&&返回数据类型是数值

?

vartype(.null.)-------->X&&“空值”的返回值是X

*16、表文件头BOF()、尾EOF()、记录号RECNO()、记录个数RECCOUNT()测试函数

例:

数据表ABC有20条记录

USEABC

?

BOF()----->.F.

SKIP-1

?

BOF()----->.T.

?

RECNO()----->当前记录号的值是1

GOBOTTOM

?

EOF()------>.F.

Skip

?

eof()------>.T.

?

recno()------->注意,当前记录号的值是21

注意:

空表的bof()和eof()函数都为真

理解:

DOWHILENOTEOF()这个循环语句的条件是什么意思

推导:

EOF()->尾,值真。

NOTEOF()->非尾,真。

要点理解:

当指针不是指向文件尾时,运行循环体,直到指针指向文件尾止

USEBMK

DOWHILENOTEOF()

DISP&&显示当前记录

SKIP&&指针下移

ENDDO

*17、条件测试函数

?

IIF(LEN(SPACE(5))<>5,1,-1)------>?

例:

2010年笔试考试填空第8小题

 

2.4程序与程序文件P71

1、注释&&

2010/9笔试笔试28题

3月11题

续行(分号);

2、程序文件的建立与修改命令P72

MODICOMM<文件名>建立以.prg为扩展名的命令文件

运行:

DO文件名,真正运行的是经过编译的文件:

.FXP

MODIFILE<文件名>建立以.txt为扩展名的文本文件

运行:

DO文件名.txt

两者区别,都要求熟练

3、简单的输入、输出命令

命令

输入是否保存

数据类型

否回车

其他

INPUT

保存

N,C,L,DC

字符型数据加定界符

ACCE

保存

C

字符型数据不加定界符

WAIT

否保存

C

字符型数据不加定界符

例:

input‘请输入一个数’tox

2.5程序的基本结构P75

结构化程序三种基本结构:

顺序结构、选择结构、循环(重复)结构(笔试要点)

一、顺序结构:

依次运行程序中的语句

二、选择结构:

IF-ENDIF语句和DOCASE-ENDCASE语句

SETTALKOFFSETTALKOFF

CLEARCLEAR

INPU'输入一个正整数'toxINPU'输入一个正整数'tox

IFX>=300docase

?

'A'casex>=300

ELSE?

‘A’

IFX>=200CASEX>=200

?

'B'?

‘B’

ELSECASEX>=100

IFX>=100?

‘C’

?

'C'OTHERWISE

ELSE?

‘D’

?

'D'ENDCASE

ENDIF

ENDIF

ENDIF

输入一个数80结果是:

输入一个数120结果是:

要使输出结果为B,X要满足什么条件?

改成DOCASE语句怎么实现?

三、循环结构

1、条件循环DOWHILE—ENDDO语句,注意循环体中的LOOP和EXIT

I=5

DOWHILEI>0

?

I

I=I-1

ENDDO

 

2、FOR---ENDFOR语句(记数循环),注意循环体中的LOOP和EXIT

输入10个数,找出最大的和最小的数

见P81面例子:

从键盘输入十个数,找出最大和最小的数

3、SCAN—ENDSCAN语句(扫描循环,针对数据表)P81

格式:

SCANFOR条件

<循环体>

ENDSCAN

执行该语句时,记录指针自动、依次在指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令(指针自动向下移动,直到文件尾)

类似DOWHILE.not.eof()

循环体

SKIP

ENDDO

例根据一个“成绩“表的分数填写字段“等级”,分别用上面两个语句设计程序

假设“成绩”表有“分数”、“等级”等字段,分数60或以上,等级填“及格”,否则填“不及格”,用DOWHILE循环设计程序:

USE成绩&&打开成绩表,指针指向第1条记录

DOWHILENOTEOF()

IF分数>=60

REPL等级WITH“及格”

ELSE

REPL等级WITH“不及格”

ENDIF

SKIP&&指针下移一条记录

ENDDO

用SCANFOR循环设计程序:

USE成绩&&打开成绩表,指针指向第1条记录

SCANFOR分数>=60

REPL等级WITH“及格”

ENDS

……

例1、把成绩表中所有成绩>=60(及格)的记录显示出来

2、把不及格的记录做删除标记(逻辑删除)

 

2.6多模块程序设计P82

为什么要用到模块设计:

将大的应用程序划分为一个个功能单一的模块程序,便于开发、阅读和维护

模块:

可以是命令文件、子程序、过程文件、过程、(函数)

过程有什么作用?

&&主程序

settalkoff

inpu"请输入一个自然数:

"toa

?

JSJC(a)

SETTALKON

&&下面是过程

procJSJC

paran

s=1

forx=1ton

s=s*x

endfor

returns

&&过程返回S的值

过程作用:

重复调用,精简主程序便于开发、阅读和维护(签名与盖章的关系)

过程的定义:

PROC过程名

命令序列

ENDPROC

过程可以放在主程序的后面

 

参数传递P84

下面程序ABC.PRG:

&&主程序开始

CLEAR

STORE100TOX1,X2

P4(X1,X2)

?

“调用过程后X1,X2的值是:

”,X1,X2

&&主程序结束

&&过程开始

PROCP4

PARAA,B

STOREA+1TOA

STOREB+1TOB

ENDPROC

&&过程结束

1、过程调用有两种格式:

1)DOP4WITHX1,X2

2)P4(X1,X2)

2、认识形参(形式参数),实参(实际参数),形参数目不能少于实参(要点)

3、参数传递有:

按值传递:

形参变量值的改变不影响实参(单向)

X1——>AX2——>B

按引用传递:

形参变量值改变时,实参值也随之改变(双向)

X1——>A——>X1X2——>B——>X2

4、怎么传递?

(要点)

1)如果实参是表达式(变量加括号就是表达式)

无论哪一种过程调用格式,形参不影响实参,单向传递

2)如果实参是变量

1、DO过程名WITH实参1,实参2……双向传递

2、过程名(实参1,实参2……),单向传递,除非设置SETUDFPTOREFE

过程中的参数传递用以上要点去验证操作

(笔试原题)假设有程序ABC.PRG,代码如下:

输出结果是什么?

&&主程序

clear

store3tox

store5toy

PLUS(X,Y)

?

x,y

&&过程

PROCPLUS

PARAA1,A2

A1=A1+A2

A2=A1+A2

ENDPROC

结果是:

A)35B)813C)313D)813

(笔试原题)下例程序执行的结果是

X1=20

X2=30

SETUDFPARMSTOvalue

DOTESTWITHX1,X2

?

X1,X2

PROCEDURETEST

PARAMETERSa,b

x=a

a=b

b=x

endpro

A)3030B)3020C)2020D)2030

 

变量的作用域P86

1)全局变量,用PUBLIC声明的变量,在任何模块都可以使用的,一直有效。

(除非用CLEARMEMO命令清除)

命令窗口中直接使用的变量是全局变量,DISPMEMO验证

2)私有变量,在程序中直接使用的(没有任何声明),作用域是建立它的模块及其下属模块

私有变量所在的程序关闭,程序运行结束,自动清除。

实例操作程序中验证

3)局部变量,只能在建立它的本层模块中使用(上、下层都不能使用),用LOCAL声明的

 

全局:

整个矩形区域私有:

整个大圆区域局部:

圆环区域

变量的隐藏的作用:

子程序或过程的变量值不影响主程序的同名变量

格式:

PRIVATE<内存变量表>(PRIVATE:

私有,隐藏)

例(笔试原题)

X=2

Y=3

?

X,Y

DOSUB1

?

?

X,Y

PROCSUB1

PRIVY

X=4

Y=5

RETURN

选择:

A、2345B、2343C、4545D、2323

 

SETTALKOFF

CLEAR

STORE3TOX

STORE5TOY

DOPLUS

?

X,Y

PROCPLUS&&过程

PRIVATEX&&变量X隐藏,其值改变不影响主程序的同名变量,

X=100

Y=200&&变量Y没有隐藏,影响主程序中的变量Y的值

ENDPROC

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2