VFP命令、函数及程序语句大全解读

时间:2019-05-12 13:57:01下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《VFP命令、函数及程序语句大全解读》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《VFP命令、函数及程序语句大全解读》。

第一篇:VFP命令、函数及程序语句大全解读

VFP命令、函数及程序语句大全(1 学过VFP(Microsoft Visual FoxPro的朋友都知道它是微软公司开发的数据库管理系统。它

经历了从dBASE、FoxBASE、FoxPro直到VFP的发展过程。本文便以VFP 6.0为例介绍它的命令、函数

及程序语句,为学习VFP的朋友提供必要的学习参考,也为已经精通VFP的朋友提供复习的好机会。

一、主要命令:

1、CREATE 作用:建立一个新的表。

格式:CREATE [<文件>|?](注意,命令字符可取前面四个字符,后面可省略不写,即CREA,下

同;中括号表示其中的参数是可选的;|管道符号表示两个参数只能选择一个,不能同时选择,下

同。

说明:文件指建立以.dbf为扩展名的VFP数据库文件,在命令后面加上一个问号表示系统会弹出

对话框,要求用户输入想要建立的表名。在命令中不加文件名或问号系统也会弹出对话框,要求用

户输入想要建立的表名。

2、MODIFY STRUCTURE

作用:显示表文件结构,并允许修改此表的结构。格式:MODIFY STRUCTURE 说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。

3、APPEND 作用:在当前表的尾部(无论表中有无记录追加记录(在当前表指当前正使用的表。

格式:APPEND [BLANK] 说明:在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。无BLANK 参数

时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。

4、INSERT 作用:在表文件中间插入一个新记录。格式:INSERT [BEFORE] [BLANK] 说明:INSERT 在当前记录后插入一记录;INSERT BEFORE 在当前记录前插入一记录;INSERT BEFORE BLANK 在当前记录前插入一空记录。INSERT-SQL命令追加记录

INSERT INTO 表名[(字段1[,字段2…]];VALUES(表达式1[,表达式2…]

例:INSERT INTO XS(XH,XM,XB,XIMING VALUES(“950106”,“高山”,“男”,“”

5、UPDATE 作用:修改数据

update <表名> set <字段1=表达式1>,<字段2=表达式2...> where <条件> 例: update <表名> set <字段1,字段2...>=<表达式1,表达式2...> where <条件>

6、BROWSE 作用:主要用于打开浏览窗口,查阅表文件并同时进行修改。格式:BROWSE 作用:打开一个“浏览”窗口,供用户浏览或修改记录。格式:BROWSE [FIELDS <字段名表>]

7、USE 作用:打开和关闭表文件。格式:USE [<文件名>] USE 说明:前一个命令用来打开<文件名>指定的表文件,该表如有备注型字段,则同时打开相应的

备注文件(.fpt文件;后一个命令关闭当前打开的表文件。

8、LIST和DISPLAY

作用:显示表(.dbf的内容、结构或状态。

格式:LIST|DISPLAY [OFF] [<范围>] [FIELDS] <表达式表> [WHILE <条件>] [FOR <条件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件> LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 说明:命令带OFF参数表示不显示记录号,范围指定对哪些记录进行操作,范围包括:RECORD n 第几号记录、NEXT n 当前记录开始的几个记录、REST 自当前记录开始至文件末尾的所有记录、ALL 所有的记录。不选范围则隐含范围为ALL;FIELDS后跟字段名,字段名与字段名之间用逗号分

隔。WHILE后跟条件,FOR后面也跟条件,区别是,WHILE后的条件如果不满足,便停止查找;FOR后的条件查找所有满足条件的记录。TO PRINT和TO FILE <文件>分别表示将显示结果在打印机上打印出

来和将显示结果输出到文件。

格式中,下面两个命令分别为显示表结构(STRUCTURE和工作状态(STATUS。注:LIST命令一次连续显示完所有记录内容。DISPLAY命令在显示记录满屏后,要求用户按

任意键继续显示。如果LIST与DISPLAY都无任何选择项时,LIST显示文件的全部记录, DISPLAY仅显示当前记录。

9、记录的定位

作用:用记录指针(POINTER定位记录。格式: 1GO[TO] RECORD n|TOP|BOTTOM 命令定位 GO [RECORD] N GO BOTTOM GO TOP 2n 3SKIP [+|-] n 说明:第一个命令又叫绝对定位,其中,RECORD n定位到n号记录,TOP定位到第1个记录, BOTTOM定位到最后一个记录。第二个命令定位到第n个记录,n是一个数值。第三个命令又叫相对定

位,它以当前记录为基准前移(-或后移(+n个记录,不选任选项,则默认记录指针后移一个记

录。

LOCATE [<范围>] FOR <表达式> 范围: ALL NEXT N RECORD N

REST

10、CHANGE和EDIT 作用:显示要编辑或修改的字段。

格式:CHANGE|EDIT [<范围>] [FIELDS <字段名表>] [WHILE <条件>] [FOR <条件>]

11、REPLACE 作用:用表达式的值代替命令中与之相对应的字段的内容。

格式:REPLACE [<范围>] <字段1> WITH <表达式1>[,<字段2> WITH <表达式2>] [FOR <条件> ] [WHILE<条件>] 例:USE B2-1 REPLACE ALL 工资 WITH 工资+200 FOR 工资<1000 BROW

12、DELETE、PACK、ZAP和RECALL 作用:分别是给要删除的记录作删除标记、彻底删除、删除所有记录和取消被选中的表记录的

删除标志。

格式:DELETE [<范围>] [WHILE<条件>] [FOR <条件>](特例:DELETE FILE FILENAME.DBF,该命令删除指定的表文件

PACK

ZAP RECALL [<范围>] [FOR <条件>] [WHILE<条件>]

13、SORT和INDEX 1SORT 作用:是建立一个其记录以新的物理顺序排列的新表文件,原文件不变.格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D>...[ASCENDING|DESCENDING] [<范围>] [FOR <条件>] [WHILE<条件>] [FIELDS<字段表>] 2INDEX 作用: 对当前表根据关键字表达式的值从小到大排列,并存入TO后指定的索引文件名的文件或复合索引文件的一个标识中。

格式: INDEX ON <关键字表达式> TO <文件名> INDEX ON <关键字表达式> TAG <标识名> [OF <文件名>] [FOR <条件>] 说明:第1个命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小写,针对字符型

关键字而言,ASCENDING和DESCENDING分别表示升序和降序。第1个命令建立.dbf表文件,第2个命令建立.idx单一索引文件,第3个命令建立.cdx复合索引文件(Compound Index。

删除索引

DELETE TAG ALL [OF 复合索引文件名]

DELETE TAG 索引标识1 [OF 复合索引文件名1][,索引标识2 [OF 复合索引文件名2>…

14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分别是打开表文件的同时打开索引文件、打开索引文件和改变主索引。并确定第一个索引文件为主控索引文件.(当前起作用的索引文件称为主控索引文件, 当前起作用的索引标识称为主控索引

格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] 作用:打开当前表的一个或多个索引文件并确定第一个索引文件为主控索引文件,该命令用于单索引文件.格式:SET INDEX TO [<索引文件表>] [ADDITIVE] 说明:(1[<索引文件表>]中第一个索引文件为主控索引文件.(2若缺省ADDITIVE选项,则在用本命令打开索引文件时,除结构复合索引文件以外的索引文件均被关闭

SET ORDER TO [<数值表达式>]|[<单索引文件名>]|[TAG] <索引标识> [ASCENDING|DESCENDING>(特例:重新索引命令:REINDEX 作用:对于打开表时自动打开的复合索引文件确定主索引,也能确定主索引文件.(1 数值表达式表示已打开的索引的序号.系统先为单索引文件编号,故结构复合索引文件的序号比单索引文件大.(2 SET ORDER TO 或 SET ORDER TO 0命令取消主索引和主索引文件,表中记录将按物理记录输出.15、CLOSE INDEX 或 SET INDEX TO 单独关闭索引文件,并不关闭与之相关的表文件

16、FIND、SEEK和LOCATE及CONTINUE 作用:前两个命令FIND和SEEK是在一个已经建立了索引文件的表中,定位到关键字中的内容与命

令行中字符串相同的第一个记录。后一个命令在用USE打开表文件以后,直接查询表中字段内容。

格式:FIND <“字符串”>|<字符串> SEEK <表达式>(表达式的数据类型可为字符型、数字型、日期型和逻辑型。LOCATE [<范围>] [FOR <条件>] [WHILE<条件>] CONTINUE 说明:FIND命令与SEEK命令的区别是前者后跟字符串,而后者后跟表达式。在用LOCATE命令找到

一个匹配记录后,可用CONTINUE命令搜索表的剩余部分来寻找其他匹配的记录。

例:SET ORDER TO NL „确定索引关键字为NL(年龄 FIND 28 „找年龄字段为“28“的记录 DISPLAY „显示当前记录

SET ORDER TO NL „确定索引关键字为NL(年龄 SEEK “28”„找年龄字段为“28“的记录

DISPLAY 17.从磁盘上删除任意文件:(1ERASE filename|?(2DELETE FILE [filename|?]

18、COUNT 作用:统计当前表文件中符合条件的记录数。

格式:COUNT [<范围>] [FOR <条件>] [WHILE<条件>] [TO <内存变量名>] 说明:内存变量名可用除参数外的任意字符。

19、SUM 作用:对当前表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。

格式:SUM [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>] 20、AVERAGE 作用:对当前表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示。

格式:AVERAGE [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>]

21、TOTAL 作用:分类汇总命令,按<表达式>做过索引或排序的表文件的数字型字段进行分类汇总。它把与<表达式>值相同的所有记录中的数字字段的值分别进行求和,并各

自作为一条记录存放在由文件指定的文件中去。在新生成的记录中,还将包括与<表达式>值相同的所有记录中的首项记录的其他字段内容。

格式:TOTAL TO <文件名> ON <表达式>[FIELDS <数值型字段名表>][<范围>][FOR <逻辑表达式1>][WHILE <逻辑表达式2>] 例:USE B2-1 INDEX ON 职称 TO ZC TATOL ON 职称 TO B2-1T FILEDS 工资 22.APPEND FROM 作用:从其他文件向表文件添加数据。数据来源文件既可以是表文件,也可是文本文件或其他符合规定的文件。

格式:APPEND FROM <文件名>|?[FIELDS <字段名表>][FOR <逻辑表达式>] FIELDS <字段名表>和FOR <逻辑表达式>,用于源文件为表文件时,指定追加记录的字段和条件。在字段名表和逻辑表达式中的字段名,必须是在来源和目的两个文件中公有的,共注意宽度和类型匹配。实际应用中,数据来源文件常为表文件(.DBF和ASCII码文本文件(.TXT 对于文本文件又有标准格式(SDF和通用格式(DELIMITED之分.例: USE B2-1 APPE FROM S3-1.TXT SDF BROWSE 23.COPY(选择表的部分内容生成一个新表

作用:把打开的表文件结构及数据复制成由<文件名>所指定的并符合规定要求的文件。如果默认全部选择项和文件名的扩展名,则结构及全部数据都被复制,且其文件扩展名由系统规定为“.DBF”。

格式:COPY TO<文件名> [FIELDS <字段名表>][<范围>][FOR <逻辑表达式1>][WHILE <逻辑表达式2>] 格式中的或用来为新表建立一个与原表相同的结构索引.例1: COPY TO B3-2 COPY TO S3-2.TXT SDF 例2: USE RS COPY TO RS3 FIELDS 姓名,基本工资,奖金 USE RS3 LIST 24.COPY FILE复制数据整表:(可用于复制任何类型文件 COPY FILE 原文件名 TO 目标文件名

注:复制表时,还应当复制和它相配的备注文件(.FPT,如有备注字段和结构复合索引文件。

当前表应关闭。(如果已打开表:COPY TO 新文件名 例:将RS.DBF复制为RS1.DBF COPY FILE RS.DBF TO RS1.DBF 或USE RS

COPY TO RS1 USE RS1 LIST 25.COPY STRUCTURE(只复制结构不复制数据

作用:表文件结构复制,生成一个指定文件名和包括指定字段的表文件结构;如有CDX或PRODUCTION选择项还将为新表建立一个与源表相同的结构索引.格式: COPY STRUCTURE TO<文件名> [FIELDS <字段名表>] 例: COPY STRUCTURE TO B3-3 FIELDS 编号,姓名,何时工作,职称 26.copy to建立结构扩展文件

作用:把已打开的表文件的结构作为数据记录复制到由<文件名>指定的库文件中去.格式: COPY TO<文件名> STRUCTURE EXTENDED 例: USE B3-3 COPY TO B3-4 STRUCTURE EXTENDED USE B3-4 BROW 该命令可以用于测试表文件结构,也可以用于顺序方式建立库文件结构.新库文件的结构是一个由系统规定的标准结构,它由4个字段构成: FIELD_NAME 字段名

FIELD_TYPE 字段类型 FIELD_LEN 字段宽度 FIELD_DEC 小数位数 27.常用命令: 库表

建立数据库: CREATE DATABASE 库文件名.DBC 建立表: CREATE 表文件名.DBF CREATE TABLE/DBF 表名(各个字段属性 打开数据: OPEN DATABASE 库文件名 打开表: USE 表文件名

使用非前库的表:USE 库名!表名 打开索引表:USE 表名 INDEX 索引名 显示库信息:DISP DATABASE [TO PRINTER] 显示记录:LIST(快速查看 BROWSE(分屏浏览可修改 DISP(显示当前记录

关闭数据库:CLOSE ALL(关闭所有库、表、索引 关闭表: USE

CLOSE DATABASES(关闭当前库、表 CLOSE TABLES(关闭当前表,不关库 CLOSE INDEXES(关闭当前索引

修改库:MODI DATA 库名 [NOWAIT] [NOEDIT] 修改表结构:MODI STRU ALTER TABLE 表名 ADD 字段名 ALTER TABLE 表名 ALTER 字段名 ALTER TABLE 表名 DROP 字段名 添加表:ADD TABLE 表名追加记录: INSERT INTO 表名(字段名列表 VALUES(对应数值 APPEND APPEND FROM 源文件 移去表:REMOVE TABLE 表名

删除记录:DELETE ALL FOR [条件](逻辑删除 PACK(物理删除 ZAP(全部彻底删除

删除库:DELETE DATABASE 库名(先关闭库 删除表:DELETE FILE 表名(先关闭表 VFP命令、函数及程序语句大全(2

二、常用函数

1、数学函数 函数用途

ABS(<数值表达式>绝对值,|x| CEILING(<数值表达式> >=自变量的最小整数 EXP(<数值表达式>对基E的幂,e=2.71828 FLOOR(<数值表达式> <=自变量的最大整数 INT(<数值表达式>取整(舍尾自变量

LOG(<数值表达式>自变量的自然对数,ln x LOG10(<数值表达式>自变量的普通对数,lg x MAX(<表达式1>,<表达式2>两个值的最大值 MIN(<表达式1>,<表达式2>两个值的最小值 MOD(<数值表达式1>,<数值表达式2>求余数 RAND([<数值表达式1>]返回伪随机数

ROUND(<数值表达式1>,<数值表达式2>四舍五入第一个自变量 SIGN(<数值表达式>自变量的符号 SQRT(<数值表达式>平方根(正根

2、字符串操作函数 函数用途

&<内存变量> 用于代替内存变量内容

LEN(<字符串表达式>返回字符串表达式的字符个数 SPACE(<数值表达式>生成空格

SUBSTR(<字符串表达式>,<数值表达式n>[,<数值表达式L>]求子字符串,从指定的字符串表达式第n个开始,总长为L的字符串

LOWER(<字符串表达式>将字符串字母转换成小写字母 UPPER(<字符串表达式>将字符串字母转换成大写字母 TRIM(<字符串表达式>删除字符串尾空格

ASC(<字符串表达式>返回字符串表达式最左边的第一个字符的ASCII码 CHR(<数值表达式>将数值表达式转换成字符

AT(<字符串表达式1>,<字符串表达式2>[,<数值表达式n>] 确定字符串表达式1在字符串表达式2中的位置,n为字符串表达式第几次出现 STR(<数值表达式>[,<数值表达式L>][,<数值表达式n>将数值转换为字符串,L为数值表达式总长,n为小数位数

VAL(<字符串表达式>将数字字符串转换为数字 TYPE(<表达式>检测表达式值的数据类型 LTRIM(<字符串表达式>删除字符串左部空格 RTRIM(<字符串表达式>删除字符串右部空格

LEFT(<字符串表达式>,<数值表达式n>取字符串左边部分字符,n为返回的字符个数

RIGHT(<字符串表达式>,<数值表达式n>取字符串右边部分字符,n从右边截取字符个数

3、表(.dbf操作函数

函数用途

BOF([<工作区号或别名>]查表文件开始函数 EOF([<工作区号或别名>]表文件结尾测试函数

RECNO([<工作区号或别名>]测试当前或指定工作区表的当前记录号 DELETED([<工作区号或别名>]记录删除测试函数 FILE(<“字符串”>测试文件是否存在函数 DBF([<工作区号或别名>]检测表的文件名函数

4、日期、时间函数 函数用途

DATE(查系统当前日期函数

TIME([<数值表达式>]查系统当前时间函数

YEAR(<日期型表达式>|<日期时间型表达式>由日期查年函数 MONTH(<日期型表达式>|<日期时间型表达式>从日期查月份函数 CMONTH(<日期型表达式>|<日期时间型表达式>由日期查月份名函数 DAY(<日期型表达式>|<日期时间型表达式>从日期查当月的日函数

DOW(<日期型表达式>|<日期时间型表达式>[,<数值表达式>]由日期查星期函数

CDOW(<日期型表达式>|<日期时间型表达式>从日期查星期名函数 DTOC(<日期型表达式>|<日期时间型表达式>日期转换为字符函数

CTOD(<字符串表达式>字符串转换为日期函数 CTOT(<字符串表达式>返回日期时间值函数 TTOC(<日期时间型表达式>返回字符值

5、显示、打印位置函数 函数用途

ROW(判断光标行位置函数 COL(判断光标列位置函数

INKEY([<数值表达式>]检测用户所击键对应的ASCII码函数,数值表达式以秒为单位等待击键的时间

6、其他函数 函数用途

DISKSPACE(返回默认磁盘驱动器中可用字节数函数 OS(检测操作系统名称的函数 VERSION(返回VFP版本号的函数 VFP命令、函数及程序语句大全(3

三、主要程序语句

1、条件判断语句 格式:(1IF <条件> <命令语句组>

ENDIF 说明:如果条件为真,则执行命令语句组中的各语句,否则跳过这些命令语句不执行, 而执行ENDIF后的语句。(2IF <条件> <命令语句组1> ELSE <命令语句组2> ENDIF 说明:如果条件为真,执行命令语句组1,否则执行命令语句组2。(3IF <条件1> IF <条件2> <命令语句组1> ELSE <命令语句组2> ENDIF...ELSE <命令语句组N>

ENDIF 说明:进行多重条件的嵌套选择。(4DO CASE CASE <条件1> <命令语句组1> CASE <条件2> <命令语句组2> CASE <条件3> <命令语句组3>......CASE <条件N> <命令语句组N> [OTHERWISE] [<命令语句组N+1>] ENDCASE 说明:依次判断条件,转入条件为真的命令语句组中执行。当所有条件都不成立时,若有

OTHERWISE项,则执行命令语句组N+1,否则执行ENDCASE后面的语句。

2、循环语句

格式:(1DO WHILE <条件> <命令语句组> [LOOP] <命令语句组> [EXIT] <命令语句组> ENDDO 说明:判断条件是否为真,如为真就重复执行循环体中的命令语句组,直到条 件为假,结束循环。(2)SCAN <命令语句组> ENDSCAN 说明:在一个表中建立一个执行命令语句组的循环,并执行对每一条记录的操 作,直到表文件 记录完为止。

第二篇:VFP常用函数整理范文

VFP常用函数大全整理

一.字符及字符串处理函数:字符及字符串处理函数的处理对象均为字符型数据,但其返回值类型各异.1.取子串函数:

格式:substr(c,n1,n2)

功能:取字符串C第n1个字符起的n2个字符.返回值类型是字符型.例:取姓名字符串中的姓.store “王小风” to xm

?substr(xm,1,2)

结果为:王

2.删除空格函数:以下3个函数可以删除字符串中的多余空格,3个函数的返回值均为字符型.trim(字符串):删除字符串的尾部空格

alltrim(字符串):删除字符串的前后空格

ltrim(字符串):删除字符串的前面的空格

例:去掉第一个字符串的尾空格后与第二个字符串连接

store “abcd ” to x

store “efg” to y

?trim(x)+y

abcdefg

3.空格函数:

格式:space(n)

说明:该函数的功能是产生指定个数的空格字符串(n用于指定空格个数).例:定义一个变量dh,其初值为8个空格

store space(8)to dh

4.取左子串函数:

格式:left(c,n)功能:取字符串C左边n个字符.5.取右子串函数:

格式:right(c,n)

功能:取字符串c右边的n个字符

例:a=“我是中国人”

?right(a,4)

国人

322 &&隐含四舍五入取整转换为字符型数据

?left(a,2)

6.empty(c):用于测试字符串C是否为空格.7.求子串位置函数:

格式:At(字符串1,字符串2)

功能:返回字符串1在字符串2的位置

例:?At(“教授”,“副教授”)

8.大小写转换函数:

格式:

lower(字符串)

upper(字符串)

功能:lower()将字符串中的字母一律变小写;upper()将字符串中的字母一律变大写

例:

bl=“FoxBASE”

?lower(bl)+space(2)+upper(bl)

foxbase FOXBASE

9.求字符串长度函数:

格式:len(字符串)

功能:求指定字符串的长度

例:a=“中国人”

?len(a)

二.数学运算函数:

1.取整函数:

格式:int(数值)

功能:取指定数值的整数部分.例:取整并显示结果

?int(25.69)

2.四舍五入函数:

格式:round(数值表达式,小数位

数)

功能:根据给出的四舍五入小数位数,对数值表达式的计算结果做四舍五入处理

例:对下面给出的数四舍五入并显示其结果

?round(3.14159,4),round(2048.9962,0),round(2048.9962,-3)

3.1416 2049 2000

3.求平方根函数:

格式:sqrt(数值)

?str(321.56,6,2)

321.56

功能:求指定数值的算术平方根

例:?sqrt(100)

4.最大值、最小值函数:

格式:

Max(数值表达式1,数值表达式2)

Min(数值表达式1,数值表达式2)

功能:返回两个数值表达式中的最大值和最小值

例:

x1=123.456

x2=234.567

?max(x1,x2)

234.567

?min(x1,x2)

123.456

5.求余数函数:

格式:mod(表达式1,表达式2)

功能:求表达式1对表达式

2的余数

例:

?mod(10,3)

6.求指数、对数函数:

格式:

exp(数值表达式)

log(数值表达式)

功能:

(1).exp()计算自然数e?表达式的值为指数的幂

(2).log()计算表达式值的自然对数,返回lnx的值.例:

x=1

y=exp(x)

?exp(x),log(x)

2.72 1 三.转换函数:

1.数值转数字字符串函数:

格式:str(n,n1,n2)

功能:将数值n转换为字符串,n1为总长度,n2为小数位

例:?str(321.56)

2.字符转数值函数:

格式:val(s)

功能:将数字字符串s转换为数值

例:x=“23”

y=“76”

?val(x)+val(y)

3.字符转日期函数:

格式:ctod(c)

功能:将日期字符串c转换为日期

例:set date ansi &&日期格式设为美国标准化协会格式

?ctod(“^2005.11.14”)

2005.11.14

4.日期转字符函数:

格式:dtoc(d)

功能:将日期d转化为日期字符串

例:将日期型数据转化为字符型日期数据并显示汉字日期.set century on &&开启世纪前缀,即日期中年份用4位表示

set date ansi

rq={^2005.11.14}

rq=dtoc(rq)

?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,“ ”)

祝大家好

8.字符转ASCⅡ码函数:

格式:Asc(<字符表达式>)

功能:把<字符表达式>左边第一个字符转成相应的ASCⅡ码值

例:x=“Foxpro”

?Asc(x),Asc(lower(x))

102

9.ASCⅡ码值转字符函数:

格式:chr(数值表达式)

功能:把数值转成相应的ASCⅡ码字符,返回值为字符型

例:?chr(70)+chr(111)+chr(111+9)

Fox

四.日期函数:

1.系统日期函数:

格式:date()

功能:给出系统的当前日期,返回值是日期型数据.例:显示系统日期

?date()

11/14/05

set date ansi

set century on

?date()

2005.11.14

2.年、月、日函数:

格式:(1).year(日期表达式):从

日期表达式中返回一个由四位数字表示的年份.(2).month(日期表达式):从日期表达式中返回一个用数字表示的月份.(3).day(日期表达式):从日期表达式中返回一个用数字表示的日数.例:测试系统日期

rq=date()

?year(rq),month(rq),day(rq)

2005 11 14

3.系统时间函数:

格式:time()

功能:得到当前时间字符串

例:?time()

20:32:26

4.系统日期时间函数:

格式:datetime()

功能:得到当前日期时间

例:?datetime()

2005.11.14 08:35:12 PM

5.星期函数:

格式:dow(日期表达式)

cdow(日期表达式)

功能:dow用数字表示星期,1表示星期日,7为星期六;cdow用英文表示星期

例:?date()

2005.11.15

?dow(date()),cdow(date())Tuesday

五.测试函数:

1.测试文件尾函数:

格式:eof([n])

说明:

(1).n指定被测工作区号,其范围为1~32767

(2).该函数用于测试指定工作区中的表的记录指针是否指向文件尾,是则返回真值;否则返回假值;省略可选项指当前工作区.例:测试文件记录指针是否指向文件尾

use 职工档案

go bottom

?eof()

.F.skip

?eof()

.T.2.测试文件头函数:

格式:bof([n])

说明:

(1).n指定被测工作区号,其范

围为1~32767

(2).用于测试指定工作区中的表的记录指针是否指向文件头,是则返回真值;否则返回假值;省略可选项指当前工作区.例:测试记录指针是否指向文件头

use 职工档案

go top

?bof()

.f.skip-1

?bof()

.t.3.测试当前记录号函数:

格式:recno()

功能:得到当前的记录号

例:

use 职工档案

?recno()

skip

?recno()

4.测试表文件记录数函数:

格式:reccount()

功能:得到表的记录数

例:测试“职工档案”表的记录数

use 职工档案

?reccount()

5.测试表字段数函数:

格式:fcount()功能:得到当前的字段数

例:测试“职工档案”表共有多少个字段

use 职工档案

?fcount()

6.测试查找记录是否成功函数:

格式:found()

功能:测试find、seek和locate命令查找记录是否成功.如成功则返回真值,否则为假值.例:在“职工档案”表中查找“小刚”的文化程度

use 职工档案

locate for 姓名=“小刚”

?found()

.t.display

7.文件测试函数:

格式:file(字符表达式)

功能:测试字符表达式指定的文件是否存在

例:?file(“e:myvfp职工档案.dbf”)

.t.8.数据类型测试函数:

格式:type(字符表达式)功能:测试表达式的数据类型,返回大写字母:N(数值)、C(字符)、L(逻辑)、D(日期)、M(备注)

例:

x=1236

y=“hello”

?type(“x”)

N

?type(“y”)

C

9.测试工作区函数:

格式:select()

功能:返回当前工作区的区号

10.测试别名函数:

格式:alias()

功能:测试当前工作区的别名

例:

select 1

use 职工档案 alias zgda

select 2

use 工资情况

?alias()

工资情况 &&打开表时,不指定别名,表名即为别名

select zgda &&通过别名选择工作区

?select()

11.表文件名函数:

格式:dbf()

功能:返回当前工作区打开的表名

例:

use 工资情况

?dbf()

e:myvfp工资情况 六.其它函数:

1.宏替换函数:

格式:&变量名

说明:vfp中只有宏替换函数没有括号.功能是返回指定字符型变量中所存放的字符串.例:为“工资情况”表中每个人加100元工资

gz=“工资”

use 工资情况

replace all &gz with &gz+100

2.条件函数:

格式:iif(表达式,表达式1,表达式2)

功能:若表达式值为真,则返回表达式1的值;否则返回表达式2的值;函数返回值类型与表达式1或表达式2类型一致

a=3

b=5

?iif(a>b,“高兴”,“开心”)

开心

3.消息框函数:

格式:messagebox(提示文本[,对话框类型[,对话框标题文本]])

功能:显示提示对话框

说明:

(1)对话框类型见表1:

对话框类型功能

0仅“确定”按钮

1“确定”和“取消”按钮

2“终止”,“重试”和“忽略”按钮

3“是”,“否”和“取消”按钮

4“是”和“否”按钮

5“重试”和“取消”按钮

16stop图标

32?图标

48!图标

64i图标

0默认第1个按钮

256默认第2个按钮

512默认第3个按钮

(2).返回值见表2:

返回值按钮

1确定

2取消

3终止

4重试

5忽略

6是

7否

例:分析messagebox(“您确实要退出系统吗?”,4+64,“提示信息”)会弹出什么样的窗口.分析:回头观察此函数的格式,弹出的对话框中的提示文本是“您确实要退出系统吗”,对话框标题是“提示信息”,函数中间有“4+64”,其中4指定对话框中出现“是”和“否”两个按钮(见表1),64指定对话框中出现i图标(见表2)

ok,我们在命令窗口依次执行下列命令:

tui=messagebox(“您确实要退出系统吗?”,4+64,“提示信息”)

&&变量tui用于接收messagebox函数的返回值,弹出的窗口如图1

?tui

&&变量tui值取决于运行时用户点了哪个按钮,如果点了“是”,返回6,如果点了“否”,返回7,见表2

说明:实际应用中,我们常在系统菜单或在表单的“退出”按钮中添加如下代码:

tui=messagebox(“您确实要退出系统吗?”,4+64,“提示信息”)

if tui=6 &&如果此条件成立,说明用户点了“是”按钮,执行quit命令,安全退出

quit

endif

第三篇:vfp命令、语句等说明总结

VFP命令、函数及程序语句大全

VFP提供一些简单的程序设计语言命令,包括赋值语句、控制语句、设置命令等,我们可根据某种功能的需要,利用这些命令及数据库操作的有关命令构成语句,分行存在文件中(称为命令文件,以. PRG为扩展名,在项目管理器中标为“程序”)或一些对象的过程或事件处理程序中。如被调用,系统将一条条顺序执行各行命令,如遇到控制语句(IF,DO,CALL,FOR„等),依据控制语句的指定,转移到指定语句再一条条顺序执行。

这些命令书写时,每条语句应在一行中写完,如不能写完,可用分号“;”结束,表示下一行继续。两条语句不能写在一行上。每条语句中命令字及选项中保留字大多数可只书写前四个字符。

一般一个简单的VFP应用系统由若干模块组成,各自完成一定的功能,总的系统用一个总控模块去控制,通过它调用子模块,层层调用以实现全系统的功能。这种结构如图5.4所示。这种方式便于设计、调试,保证程序的正确性,也容易实现模块共亭,实现软件重用,提高程序设计效率。

主模块可由主封面表单、主命令文件和主菜单文件构成;各个模块可由过程、自定义函数、表单、表单集、应用程序或子菜单等构成。

一个表单或一个表单集中可有一到多个用户界面,可设置一到多个命令按钮及其他程序控件,用户可利用按钮及程序控件,产生特定的消息触发执行一个程序,完成一个功能。应用程序是对一个模块编译后的. APP执行文件,“过程”是由命令组成的程序,以RETURN语句结束,它可为另一个程序所调用,调用执行时遇到RETURN语句将返回其调用程序。

图 5.4 VFP程序总体结构

一.变量赋值与显示语句

在项目管理器中选“代码→程序→新建”或在命令框利用命令MODIFY COMMAND建立命令文件。

1.MODIFY COMMAND

意义:创建命令文件。

命令格式:MODIFY COMMAND 文件名

例如:MODIFY COMMAND PROC1

执行此命令后,将进入全屏幕编辑状态。如原已建立了该文件proc1,将调出该文件在屏幕上显示,用户可对之修改。如是新文件,则用户可利用全屏幕编辑键,输入自己的程序。新文件将自动加上扩展名.PRG。

2.DO

意义:执行命令文件程序,有三种方法:①在项目管理器中选“代码→程序→选择程序名→运行”。②在主菜单中选“程序→运行→输入(选择)程序名→运行”。③在程序中或命令窗日中使用DO命令。命令格式:DO 程序名[WITH 表达式表]

程序名可以是上述方式建立的命令文件(.PRG文件)、可执行文件(.EXE文件)、应用程序(.APP文件),及对.PRG文件编译后的文件(.FXP文件)。如调用DO命令时不带扩展名,则按.EXE文件、.APP文件、.FXP文件、.PRG文件的顺序查找同名程序并执行之。

例如:DO PROC1

此外,程序名还可能是菜单程序,调用时必须带扩展名(.MPR)。例如,有菜单程序MAIN.MPR,则可如下调出执行:

DO MAIN.MPR

程序名还可以是事件名或过程名。

其中表达式表由多个表达式组成,用逗号分开,在执行时首先计算各表达式的值,并带入被调程序,被调程序第一句应是LPARAMETERS形参表语句,形参表是以逗号分隔的多个内存变量名,其个数应等于调用时的表达式的个数,执行时,首先用调用语句中各表达式的值对应给它们赋值。

例如:主程序中:DO PROC1 WITH “AB”,21

被调程序:LPARAMETERS M1,X0

执行时,首先完成赋值:M1=“AB”;X0=21,再往下执行。

当使用DO运行一个程序时,包含在其中的命令一直执行,直到下列某一事件发生。遇到RETURN语句,返回到调用程序DO命令的下一句,遇到了CANCEL命令,返回VFP命令状态。遇到QUIT命令退出程序并退出VFP;到达文件尾回到调用前状态;再遇到另一个DO命令,将转人新程序执行。

3.PUBLIC

意义:设置全局性内存变量命令。

格式:PUBLIC 变量名1[,变量名2]„

在不同程序或过程或事件中,同名内存变量的值不一定相同,如要将一个程序(过程、事件)中变量的值传到另一程序(过程、事件)中,可应用上述命令将它定义成全局变量。

4.PRIVATE

意义:设置局部变量的命令。

格式:PRIVATE[ALL[LIKE∣EXCEPT 通配符]∣内存变量表]

其中选项意义:ALL将所有内存变量说明为局部性变量,ALL[LIKE∣EXCEPT 通配符]将变量名能与通配符相匹配的内存变量说明为局部性变量。“ALL EXCEPT通配符”将除了能与通配符相匹配的变量名之外的内存变量说明为局部性变量。在程序中,为了一个程序的运行结果不影响另一个程序的执行,不希望同名变量将值从一个程序带到另一个程序而造成干扰。为此,可将该变量定义成局部性变量。

5.DIMENSION

意义:定义内存变量数组命令,VFP中可定义一维或二维数组。

格式:DIMENSION 数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]„

每个数组的每个元素都可单独使用,如同一个内存变量,称为下标变量,下标起始值为1。

例如,DIMENSION ARRAY1(8,20),X1(30)定义了两个数组,数组名分别为ARRAY1和X1,前一个数组共有20×8=160个元素:ARRAY1(l,l)、ARRAY1(l,2)„„ ARRAY1(l,20),ARRAY1(2,1)„ARRAY1(8,20)。对各元素也可用单下标取用其值,如用ARRAY1(l),ARRAY1(2)„ARRAY1(160)也可访问该数组各元素,与前面双下标表示形式一一对应。

6.PUBLIC ARRAY

意义:定义全局性内存变量数组。

格式:PUBLIC ARRAY 数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]„

7.=

意义:赋值语句。

将表达式的值赋值给一个内存变量。对变量赋值后,该变量类型也即确定为表达式返回值的类型。对一个变量可重复赋值,也可改变变量的类型。但为了保证程序的清晰和结构完整,建议在一个系统中每个变量名应有确定的意义和数据类型。

8.STORE

意义:同时对多个变量赋值命令。

格式:STORE 表达式 TO变量1[,变量2]„

在程序运行时常要求用户输入控制参数或数据,实现此功能语句我们称为人机对话语句。在程序中如插入人机对话语句,用户可借助键盘输入参数或控制量赋值给变量。控制程序走向,或用于不同数据处理。在程序执行到这类语句时,将停止运行,在屏幕上显示命令中附注的提示信息,同时等待用户从键盘输入数据,赋给所指定的变量。完成赋值之后再接着运行下一条语句。在VFP中这类语句可在主控程序中或在调试程序时使用,在表单程序中使用文本框等各种控件及消息框代替它们。

9.INPUT

意义:输入各种类型数据赋给内存变量

格式:INPUT “提示信息” TO 内存变量名

本命令允许输入字符类型、数值类型、日期类型、逻辑类型等不同类型的数据,要求输入数据是字符类型时,数据两端要加定界符,例“张平”;输入数据是日期类型时,要按{MM/DD/YY}或设定的格式,例{12/21/00};逻辑类型按.T.、.F.格式。

用户输入还可以是包括变量名及函数在内的表达式,但变量必须是己赋值的,表达式是可以计算出确定值的。用户输入完后回车表示输入结束。

例:INPUT“请输入初始日期:” TO D1

屏幕上显示:“请输入初始日期:”,光标在此句之后。用户可输入{05/10/96}。

此时用户如果执行命令:?D1

屏幕上将显示:05/10/96

10.ACCEPT

意义:输入字符串赋给变量。

格式:ACCEPT[“提示内容”]TO内存变量名

该命令和INPUT命令区别有两点:

.输入数据均被视为字符类型。

.输入数据两端不需加定界符,如加了定界符,定界符被视作字符串的一部分。

11.WAIT

意义:接收单个字符赋给变量,或中断程序,按任意键后继续。

格式:WAIT [“提示信息”] TO 内存变量名

该命令与ACCEPT命令不同点在于只接收从键盘输入的一个字符,用户输入一个字符后无须回车。该命令也可用在VFP表单程序的某个事件中,用于中断该事件的执行,让屏幕显示程序运行的中间结果,按某个键或单击鼠标后再继续执行。

12.GET

意义:格式化输入数据,给内存变量赋值或修改表中当前记录字段内容。

格式:@ 行号,列号 GET 内存变量名或字段名

[FUNCTION功能代码][PICTURE格式代码][DEFAULT表达式][MESSAGE提示信息]

[RANGE输入值范围下限,输入值范围上限][SIZE文本框高度,文本框宽度][VALID 条件表达式]

该命令可用于对内存变量赋值,也可用于修改当前打开表中当前记录中指定字段的内容。如对内存变量赋值且省略DEFAULT选项,在使用此语句时,必须已对该内存变量赋值。否则按此选项中表达式对内存变量初始化。

本命令执行后只显示内存变量或字段当前值,要到执行命令“READ”时,此语句方被激活,程序停止执行,等待用户从键盘输入数据,直待回车后才继续执行。行号、列号为当前窗口中字符行和列的位置号。行号与列号允许是小数。FUNCTION选项用于对输入内容限制或变化。功能代码:

A:只允许输入内容由字母字符组成,包括不允许空格和标点符号。

B:数值数据左对齐,默认格式为右对齐。

I:文本居中对齐。

J:文本右对齐,默认为左对齐。

Sn:限定文本框中字符个数为n。如S20。

T:去掉前导和后缀空格。

Z:当数值数据值为0时显示空格。

!:把字母字符转换为大写。

PICTURE选项用于限定输入数据的字符类型及大小。功能代码例:

A:该位为字母或数字

L:只允许逻辑数据。

N:该位为字符或数字。

X:任何字符。

I:该位为数字,或数值数据中的符号。

-:标明小数点位置。,:用逗号分隔左右数字。

!:将小写字母转换为大写字符。

例:@3,10 GET x1 DEFAULT 0 PICTURE“9999.99”

此时在屏幕第3行的第10列位置显示方框,其中内容为DEFAULT规定的初始值0.00,如再发出命令:READ,将光标落在尚未激活的第一个方框上等待输入,只能输入数字和符号,且整数部分不多于4位,小数部分不多于2位,否则将提示“请您重新输入”。

RANGE、VALID两个选项用于保证数据完整性,输入数据必须在预定范围内,满足条件表达式要求时,才可完成赋值操作。本语句还有设置字体、字形和颜色的选项。

在VFP中,综合上述人机交互命令尤其是@„ GET命令的功能和特性,设计了文本框、编辑框等类和控件,便之应用更加方便、简单,我们将在下一章中介绍。

程序运行结果一般由输出语句使其显示在屏幕上或输出到其他地方,输出语句可将数据输出到屏幕上显示也可传送给打印机或传送存入到其他文件中。屏幕显示语句在VFP中一般用在主控程序或调试程序时使用。在表单程序中使用各种控件、消息框代替它们。

13.?|??

意义:计算<表达式表>所指定的各表达式的值,并显示在屏幕上。

格式:?表达式1[,表达式2]„

用?时,从下一行第一列起显示结果。用??时,从当前行当前列起显示结果。

14.SAY

意义:格式化输出语句。

格式:@行号,列号 SAY表达式[FUNCTION功能代码] [PICTURE格式代码][SIZE高度,宽度]

有关选项的意义与@„GET命令相似,此外还有关于字体,颜色设置的选项。若发出有SET DEVICE TO PRINTER命令,输出到打印机,否则输出至屏幕上显示。

本语句常与@„ GET语句合用,合用时,行号、列号指SAY内容显示所在行、列号,GET变量内容框将放置在SAY内容之后。二.程序控制命令

1.IF„ENDIF命令

意义:分支条件语句,根据逻辑表达式的值,有选择的执行一组命令。根据条件表达式的值是.T.还是.F.控制程序流向。

格式:

IF 条件表达式

语句序列1

[ELSE

语句序列2]

ENDIF

IF条件表达式语句是条件语句的开始,ENDIF语句是条件语句的终止。语句序列是若干条顺序执行的语句。执行时首先计算条件表达式的值,如结果为“真”(.T.)则执行语句序列l,执行完后退出该语句。如条件表达式不满足,且有ELSE语句和语句序列2,则执行语句序列2。其程序流程图如图5.5所示。

图5.5 分支结构程序流程图

图5.6 主控模块程序流程图

在一个分支控制语句块中可以嵌套另一个IF„ENDIF语句块。【例5.7】主控模块的程序

程序流程图如图5.6所示。编写程序清单如下: CLEAR &&清屏幕

@ 5,27 SAY “设备管理系统” @ 7,36 SAY “主菜单”

@10,21 PROMPT “1.各种查询、屏幕修改”+SPAC(16)@11,21 PROMPT “2.数据编辑”+SPAC(26)@12,21 PROMPT “3.资产统计”+SPAC(26)@13,21 PROMPT “4.报表打印”+SPAC(26)@14,21 PROMPT “5.系统维护”+SPAC(26)MENU TO m_choic &&等待用户输入

IF LASTKEY()=27 &&按Esc键返回VFP

RETURN ENDIF

IF m_choic=1

DO sbcx_sc.spr

ELSE

IF m_choic=2

DO sjbj_sc.spr

ELSE

IF m_choic=3

DO zctj_sc.spr

ELSE

IF m_choic=4

DO bbdy_sc.spr

ELSE

IF m_choic=5

DO xtwh_pg

ENDIF

ENDIF

ENDIF

ENDIF ENDIF RETURN

2.CASE

意义:分情况语句,当求解一个问题存在多种情况,如要求对不同选择执行不同的语句序列,可采用分情况语句。该语句一句中列出许多语句成分,每个语句成分给出一个条件表达式,每次只根据具体条件找出第一个条件表达式值为.T.的语句成分,执行该成分语句中的语句序列后退出该语句。

命令格式:

DO CASE

CASE条件表达式1

语句序列1

CASE条件表达式2

语句序列2

CASE条件表达式n

语句序列n

[OTHERWISE

语句序列n+1]

END CASE

执行该语句时,系统逐一计算条件表达式1的值,条件表达式2的值„只要有一个条件表达式的值为.T.则执行其后语句序列,执行它后退出本分情况语句。

如到条件表达式n的值仍均为.F.又有OTHERWISE成分,则执行语句序列n+l,其程序流程图如图5.7所示。

仍如上面主控程序的例子,程序可设计为:

CLEAR &&清屏幕

@ 5,27 SAY “设备管理系统”

@ 7,36 SAY “主菜单”

@10,21 PROMPT “1.各种查询、屏幕修改”+SPAC(16)

@11,21 PROMPT “2.数据编辑”+SPAC(26)

@12,21 PROMPT “3.资产统计”+SPAC(26)

@13,21 PROMPT “4.明细报表打印”+SPAC(22)@14,21 PROMPT “5.系统维护”+SPAC(26)MENU TO m_choic &&等待用户输入

IF LASTKEY()=27 &&按Esc键返回VFP

RETURN ENDIF

DO CASE

CASE m_choic=1

DO sbcx_sc.spr

CASE m_choic=2

DO sjbj_sc.spr

CASE m_choic=3

DO zctj_sc.spr

CASE m_choic=4

DO bbdy_sc.spr

CASE m_choic=5

DO xtwh_pg

ENDCASE

RETURN

图5.7 CASE结构程序流程图

从上面两段程序可见,对于同一个问题,用DO CASE „ENDCASE 语句比IF„ENDIF语句要简洁了并且逻辑关系清晰,因此不容易出错。在分情况语句中也可嵌入分支条件语句及分情况。它本身也可嵌入到分支条件语句中去使用。

在对数据表中数据时,常常每条记录被处理的过程是一样的,处理语句也就大体相同,如果表中有多少记录就写多少条语句是十分困难的,为避免重复书写,可使用循环。

3.DO WHILE„.ENDDO

意义:循环语句,可使多次重复执行同一组语句。格式:

DO WHILE条件表达式

语句序列

[LOOP]

[EXIT]

ENDDO

其中“DO WHILE条件表达式”语句称为循环起始语句,“ENDDO”语句称为循环结束语句,进入此命令时首先检查条件表达式的值是否为真(.T.)。如果是真,则执行语句序列,然后再判断条件表达式的结果,如仍为真,则继续下去。如果为假(.F.)则退出循环,执行ENDDO后面的语句。如果进入本命令一开始,条件表达式的值为假,则语句序列一次也不执行,就直接转入执行ENDDO后面的语句。其中LOOP意义为结束本次循环,返回循环体开始。EXIT意义为结束循环,转入执行ENDDO后面的语句。

LOOP语句和EXIT语句一般用在分支条件语句中,因而语句格式为:

DO WHILE 条件表达式1

语句序列1

[IF条件表达式2

LOOP

ELSE

语句序列2

ENDIF]

[IF条件表达式3

EXIT

ELSE

语句序列3

ENDIF]

ENDDO

其程序流程图如图5.8所示。

在使用时必须保证经有限次循环后条件表达式1应变为假或条件表达式3的值应变为真,使退出循环。否则就可能成为死循环。在条件表达式中的变量称循环变量,在数据库中循环变量可能是内存变量,也可能是表中的指针。必须注意在每次循环过后,循环变量的值都要改变并且是向最终使条件表达式1的值为假或条件表达式3的值变真的方向变化,否则就无法满足前述退出条件。在VFP中有两类特殊用法。

(1)循环变量是指针。该用法中有两种结构①指针首先指向第一条的DO WHILE结构如图5.9所示。②指向满足条件记录的第一条的DO WHILE结构如图5.10所示。

图5.8 DO WHILE„ENDDO结构程序流程图

图5.9 指针做循环变量开始指向第一条时的DO WHILE结构流程图

图5.10 指针做循环变量开始指向满足条件记录的第一条时 的DO WHILE结构流程图

格式1:图5.9实现的语句。

USE(表名)

SELECT工作区别名

GO TOP

DO WHILE NOT EOF()

语句序列

SKIP

ENDDO

在本格式中,循环变量是表中指针,首先让指针指向表的第一条记录,如果不是文件尾,则执行语句序列之后让指针下移一条,再返回判断指针是否指向文件尾。这样一直继续下去直到指针指到最后一条记录的后面,循环结束。

【例5.8】在学生表中有少数学生更换了班级,现要求在屏幕上一屏一屏地显示每个学生的数据,并提问是否修改班级名称,如回答“Y”,则提供修改框。

SET TALK OFF

USE学生

KEY=“Y”

GO TOP

DO WHILE NOT EOF()

@3,10 SAY“姓名:”+姓名

@5,10 SAY“班级:”+班级

@7,10 SAY“出生日期:”+DTOC(出生日期)

@9,10 SAY“是否修改,Y/N?’GET KEY

READ

IF UPPER(KEY)=“Y”

@11,10 SAY“请输入改后班级名称” GET 班级

READ

ENDIF

SKIP

ENDDO

USE

SET TALK ON

格式2:如果只按某个条件查看记录,则可用查找语句开始。图5.10实现语句:

LOCATE FOR条件表达式

DO WHILE NOT EOF()

语句序列

CONTINUE

ENDDO

例5.8中如只查99级学生,显示其姓名则:

LOCATE FOR “99”$班级

DO WHILE NOT EOF()

?姓名

CONTINUE

ENDDO

(2)当于DO UNTIL的循环结构。

有些循环要在执行部分语句之后再根据一个条件表达式判断是否结束,此时循环条件可用常量.T.,见图5.11所示。

图5.11 DO UNTIL结构程序流程图

语句格式: DO WHILE.T.语句序列

IF 条件表达式

EXIT ENDIF

ENDDO

【例5.9】求编写学生表录入新数据的程序,每次录入一条记录,之后提问是否继续,如回答不是“Y”,就停止录入。

SET TALK OFF

USE 学生

KEY=“ ”

DO WHILE.T.APPEND BLANK

@3,10 SAY“姓名:” GET 姓名

@5,10 SAY“班级:” GET 班级

@7,10 SAY“出生日期:”GET 出生日期

READ

@9,10 SAY“否继续?Y/N?” GET KEY

READ

IF UPPER(KEY)<>“Y”

EXIT

ENDIF

ENDDO

USE

SET TALK ON

此语句由用户输入Y或N控制程序结束。

上述第一、二两种格式可以用等价的SCAN循环取代。

4.SCAN„ENDSCAN循环语句

意义:在数据表中循环检查或处理一条条记录。

命令格式一:

SCAN

语句序列

ENDSCAN

此句等价于前述格式1的语句。

命令格式二:

SCAN FOR条件表达式

语句序列

ENDSCAN

本语序等价于前述格式2的语句。有一些循环次数是一定的,或者循环变量的值在每次循环中增加的量是相同的,则可应用FOR循环。

5.FOR„ENDFOR循环语句

命令格式:

FOR内存变量=初始值 TO 终了值[STEP 增量]

语句序列

ENDFOR

此循环以某个内存变量为循环变量,进入循环时首先给它赋初始数值,只要不超过终了值,则执行语句序列。STEP语句为可选项,指示在每次循环后循环变量的增加量。前面执行语句序列之后,将循环变量值增加增量的值,再判断是否超过终了值,这样继续下去直到超过终了值。增量可为正值也可为负值,省略时默认值是1。如增量为正,则当循环变量大于终了值时,循环结柬。如增量为负,则每循环一次,循环变量均减小,减少到小于终了值时循环结束。

例5.8中修改班级名的程序也可写为:

SET TALK OFF

USE 学生

KEY=“ ”

N=RECCOUNT()&&记录总条数

FOR I=1 TO N

@3,10 SAY“姓名:”十姓名

@5,10 SAY“班级:”十班级

@7,10 SAY“出生日期:”+DTOC(出生日期)

9、10 SAY“是否修改班级名,Y/N?” GET KEY

READ

IF UPPER(KEY)=“Y”

@11,10 SAY“请输入改后班级名称” GET 班级

READ

ENDIF

ENDFOR

USE

SET TALK ON

使用相对指针,如果打开索引,或某些录入、修改、查询操作使当前指针位置改变都可能引起错误。不如本例中采用物理地址,比较可靠。

【例5.10】要求输入N个学生的总分X,按总分分成优、良、及格、不及格四个等级,统计每个等级的人数。等级划分标准为:90-100分为优,75-89分为良,60-74分为及格,59分及以下为不及格。

SET TALK OFF

DIMENSION M(4)&&定义数组

STORE 0 TO M&&M所有元素初值设为0

x=0

INPUT“学生人数 N=?” TO N&&计数循环

FOR I=1 TO N

?“请输入第”,I,“人的成绩”

@ROW(),20 SAY “X=?” GET X

READ

DO CASE

CASE x>=90

M(l)=M(1)+1&&统计优秀生人数

CASE x>=75

M(2)=M(2)+1

CASE x>=60

M(3)=M(3)+l

CASE x<60 AND x>=0

M(4)=M(4)+1

OTHERWISE

?“输入数据有错,请重输”

I=I-1

ENDCASE

ENDFOR

?“优、良、及格、不及格人数各为”,M(1),M(2),M(3),M(4)SET TALK ON

【例5.11】设有商品表,结构为商品(商品代码,品名,单价,数量,金额),欲对其中部分商品调动单价,为此建立一个调价表,其结构为调价(商品代码,原单价,新单价),编写程序用调价表中新单价数据修改商品表中单价与金额。

SET TALK OFF

SELE 1

USE商品

SELE 2

USE 调价

SCAN

代码1=商品代码

SELE 1

LOCATE FOR商品代码=代码1

IF NOT EOF()

REPL 单价 WITH 调价.新单价、金额 WITH 单价*数量

ENDIF

SELE 2

ENDSCAN

CLOSE ALL

SET TALK ON

本例中设置二个工作区,分别打开二个表,首先在工作区2上利用SCAN循环遍历调价所有记录,对每一记录在商品表中查找有无商品代码标识相同的记录,如有,则用新单价更新原单价,并修改金额。由于在非当前工作区中不能移动指针,不能查询,不能修改数据,因而在转到商品表中查询之前要将商品表所在工作区1设为当前工作区,更新以后又转到工作区2将调价表中指针指向下一条,再准备按第二个品种调价。

在当前工作区中可读取非当前工作区中数据,如本例中用 “调价.单价”这样的格式从工作区2的调价表中读取其中指针所指记录的单价,这种方式称为联访。如此对多个数据表操作十分麻烦,可采用预先建立关联的办法,在一个表中移动指针时,第二个表中指针按关键字保持一致的方式跟着移动。

三.其他常用命令

1.SET RELATION

意义:将当前数据库和“别名”工作区中的表文件关联在一起,当前表文件称为主动表文件,“别名”工作区中的表文件称为被关联表文件,每当主动表文件中指针移动时,被关联表文件中指针也相应移动。

命令格式:SET RELATION TO 字段名 INTO 别名[ADDITIVE]

命令中选用的“字段名”必须同时包含在两个表文件中,且被关联表必须以该字段建立索引文件并打开为主索引文件。每当主动表文件中记录指针移动时,被关联表中记录指针根据主索引文件指引指向与之相匹配(索引字段值等于主动表当前记录该字段的值)的第一条记录。若找不到匹配记录,则指针将指向文件尾,EOF()为真(.T.)

如命令无ADDITIVE选项,在建立关联时将取消当前数据库与其他数据库的任何关联,仅保留一个新关联。而选了此选项,则原有关联均保留,增加一个新关联。

要注意的是,如果对应主动表中某记录在被关联表中找不到匹配记录时,主动表中数据被改为0。例5.11中如果调价表中商品包括商品表中全部商品,利用此命令程序可修改为:

USE 调价&&第一个打开表默认置于1号工作区

INDEX ON 商品代码 TO INDEX1

SELECT 2

USE 商品

SET RELATION TO 商品代码 INTO 调价

SCAN

REPLACE 单价 WITH 调价.新单价,金额 WITH 单价*数量

ENDSCAN

本例中关于被关联表中字段名也可用“区号.字段名”形式对之访问。

不过使用本程序要求两表中内容必须匹配,例如例5.11中如商品只有部分调价,在调价表中只有商品表中部分商品,那么该程序将使商品表中不调价商品单价均变为0。

一般在涉及利用一个表数据修改另一个表数据时,我们以采用SQL语言中修改命令UPDATE比较好。也可采用全联结视图再对之操作。”

2.RUN

意义:在VFP环境中调用DOS命令。·

命令格式:RUN DOS命令或!DOS命令

3.LOAD命令

意义:把汇编或C语言编写并编译的二进制文件调入内存命令。

命令格式:LOAD 二进制文件名

4.CALL命令

意义:执行由LOAD装入内存的二进制代码文件命令。命令格式:CALL 文件名[WITH 字符表达式/内存变量] 其中WITH选项用于向调用程序传递参数。

5.ON ERROR

意义:当出现错误时执行的命令。

命令格式:ON ERROR 命令

其中命令可为任何VFP语句。在程序调试过程中,可在程序中加入此命令,并设计命令处理程序,在其中可加入显示ERROR(),MESSAGE(),LINENO()和PROGRAM()的语句,将错误代码、错误消息、错误行号及程序名称显示出来,以帮助发现错误所在,方便纠正错误。在应用程序中,有时可能出现一些不影响最终结果的错误,我们也可在程序中加入这类错误陷阱,所指定的命令可以是一条无效语句,不让错误影响程序运行。

【例5.12】程序出错时的处理程序及调用方法 主程序:

*---Set system enviroment------

clos data

clea

on erro do showerro with prog(),lineno(),erro(),mess()&&调用出错程序showerro

语句序列

程序出错时的处理程序:

para m_prog,m_line,m_num,m_mess&&传递参数

priv m_odcons&&定义局部变量

m_odcons=set('cons')

set cons off

defi wind erro_win from 0,0 to 14,49;

titl ' 系统错误 ';

colo gr+/b;

shad doub;

in desktop

move wind erro_win cent

acti wind erro_win

@1,4 say ' 错误警告' colo gr+/b

@3,8 say '当前程序无法继续,按<确定>将返回主调!' colo w+/b

@4,4 say '程序建议:稍后再试或与软件供应商联系.' colo w+/b

@6,4 say '出错程序:'+m_prog colo w+/b

@7,4 say '出 错 行:'+allt(str(m_line))colo w+/b

@8,4 say '错误代码:'+allt(str(m_num))colo w+/b

@9,4 say '错误内容:'+iif(len(m_mess)<=28,m_mess,subs(m_mess,1,28)+'...')colo w+/b

@2,3 to 2,wcol()-4 colo w/b

@5,3 to 10,wcol()-4 colo w/b

=opendbf('errosave','errosave','shar')&&存放错误情况

inse into;

dbferrosave(errodate,errotime,erroprog,erroline,errocode,erromess);

valu(date(),time(),m_prog,m_line,m_num,m_mess)

use in errosave

m_readkey=20

m_cnt=1

do while m_readkey=20

if mod(m_cnt,2)=0

@1,6 say ' 错误警告' colo b/b

else

@1,6 say ' 错误警告' colo gr+/b

endi

@wrow()-2,wcol()/2-2 get mb_isee func '*th 确定' defa 1 &&colo sche 13

read cycl modal time 0.4

m_readkey=readkey()

m_cnt=m_cnt+1

endd

set cons &m_odcons

clea wind

close data

clea

retu to master&&返回主程序

6.显示文件目录命令

格式:DIR [<驱动器>][<路径>][<文件名>] 功能:显示指定的磁盘驱动器上的文件名

说明:<文件名>中可带通配符;命令中不指定文件名,则仅仅显示指定目录下的数据表文件名。7.清屏命令CLEAR 格式:CLEAR 功能:清除屏幕 8.总清命令CLEAR ALL 格式:CLEAR ALL 功能:关闭所有打开的数据表文件、索引文件和其他各种文件,清除已有的内存变量 9.SET TALK ON/OFF

四.程序设计基础

程序的概念

命令执行方式:通过命令菜单或直接在命令窗口输命令来执行,执行的结果显示在屏幕上。程序执行方式:以程序的方式来执行。

程序是能够完成一定任务的命令的有序集合,这组命令存放在程序文件(*.prg)中,执行程序时,系统按一定的次序自动执行包含在程序文件中的命令。

程序的特点

可以利用编辑器,方便地输入、修改和保存程序。可以利用多种方式、多次运行程序。可以在一个程序中调用另一个程序。

程序的基本要求

正确性,能实现算法的各个步骤,逻辑上正确,对输入产生的错误有检测措施。通用性,不能只解决一个问题,还考虑解决一类问题。高效率性,编写执行时间短,占用存储空间少的程序。可维护性,程序应易读、易懂、易修改。安全性,必须确保安全、可靠。

程序文件的建立

在项目管理器中和菜单中建立

用命令方式:modify command <文件名>

程序的执行

从“ 程序” 菜单中选择“ 运行” 命令方式:do < 文件名> <文件名>中如果没有指定扩展名,系统将按下列顺序寻找程序文件并执行:.exe-->.app(应用程序)-->.fxp(编译程序)-->.prg

当程序文件被执行时,文件中包含的命令将被依次执行,直到所有的命令被执行完毕中,或者执行到以下命令:

cancel(终止程序执行,返回命令窗口)do(转去执行另一个程序)return(结束当前程序,返回到上级程序,若无上级程序则返回到命令窗口)quit(退出VFP 系统,返回到操作系统)

程序结构

(1)每个程序都必须有1个文件名,文件名由字符、数字或下划线组成,第一个字符必须是字母或汉字,程序扩展名为.PRG(2)程序由若干行数据库命令组成,每行最多写2048个字符,1行只能写1条命令,若把一个命令写成若干行,需在该命令的第1行及中间各行的行尾写“;”号,但最后一行不写。(3)注释行由“*”开头,用以说明程序的名称、功能及其他需要说明的问题,“*”是注释命令,是非执行语句,可以写在程序任一位置。

(4)以“set”开头的命令为环境设置命令,一般出现在可执行语句的前面。(5)每行程序的后部可以写由“&&”号引导的注释。(6)“return”命令是返回命令,表示程序结束。

编写程序的步骤

举例:编写一个简单的程序:给出一个整数,判断是奇数还是偶数。(1)分析任务,确定方法;(2)分解任务,描述算法;(3)编写程序,认真检查;(4)上机调试,纠正错误

流程图

流程图符号的使用规则: 流程线的方向是从左到右,自上而下,非标准流向的流程线要用箭头表示。流程线就尽量避免交叉。

流程图符号内的文字一律从左到右,自上而下书写。流程图符号的注释应写在符号右侧。

出入口处的连接符应使用相同名称,表示把它们连接起来。

子程序、过程和自定义函数

模块化:按适当的原则把一个情况复杂、规模较大的程序系统划分为一个个较小的、功能相关而又相对独立的模块的过程。

模块:一个在结构上相对独立的程序段。可以是子程序、过程或自定义函数。

子程序的基本概念

子程序:总被其它程序调用的,一般不单独运行的一个程序段。

子程序与主程序的关系:是一种调用和被调用的关系。主程序是能调用其他子程序,而不被其他程序调用的程序,凡能被调用的程序都称为子程序。程序中至少应有一个主程序,可以有一个或若干个子程序。子程序的使用

①使用模块化程序设计方法编写程序时,把各个功能划分成若干个功能子模块,把子模块写成一个子程序。

②需要反复调用的情况下,可以写成一个子程序,以节省存储空间。

编写子程序

调用子程序命令格式:

do <子程序名>[ WITH<参数表>] 子程序返回命令

return [ to master ] 表示返回到上一级子程序或主程序。带参数to master表示无论在哪级子程序上,均立即返回主程序。

1、对任意给的正整数A、B、C,编写程序计算S=A!+(3/5)B!+(C!/2)调试子程序 联合调试:当主程序和子程序分别编辑完成之后,直接运行主程序。若主程序或子程序有错,再进行编辑、调试、重新运行,直到输出正确结果为止。单独调试:编辑一个模块,调试一个模块,各个模块都调试成功后,加入主程序联调。例

2、根据数据库student.dbf编写一个菜单程序main.prg,完成对数据库查询程序cx.prg和删除程序sc.prg的调用

过程与过程文件

过程是一段程序,它与子程序不同之处在于,子程序是一个独立文件,而过程是过程文件的一个组成部分,可以把多个过程写在一个过程文件中。过程的结构:

procedure <过程名> <过程体> return [to master/to <程序名>] 过程名由用户定义,供调用过程时使用,过程体是一个语句序列,是过程的核心部分,选择to <程序名>表示返回到“程序名”指定的程序。过程文件的结构

procedure <过程名1> <过程体1> return [to master/to <程序名>] procedure <过程名2> <过程体2> return [to master/to <程序名>] „„

procedure <过程名n> <过程体n> return [to master/to <程序名>] 过程文件的调用

在主程序中,调用过程前,首先要打开过程文件。

命令格式:set proc to <过程文件名>

调用后,要关闭过程文件。

命令格式:set procedure to 或 close procedure 过程的调用

格式:do <过程名> 例

3、根据数据库student.dbf编写一个菜单程序gczxc.prg,用过程形式完成对数据库查询程序cx.prg和删除程序sc.prg的调用。

自定义函数命令

命令格式:(1)function <函数名>(2)return <表达式> 基本格式:

function<函数名> parameters <参数表> <语句序列>

return <表达式>

主程序与自定义函数的组织形式:

举例计算组合数的值

编写K!的函数。作业

1、从键盘输入五个数组,每组有六个数据,分别用子程序、过程、自定义函数的方法,输出每组数的最大值和最小值。

2、用子程序、过程、自定义函数三种不同形式对student.dbf数据库编写一个菜单程序:

系统主菜单

1„„追加记录

2„„修改记录

3„„插入记录

4„„删除记录

5„„输出记录

6„„退

第四篇:VFP程序题

VFP程序题 第一套题

一、运行结果题

1、以下程序运行结果是

SET TALK OFF

CLEAR

A = 5

B = 12

C = 18 IF MAX(A , B)< C

? MAX(A, B)

ELSE IF MIN(A , B)< C

? C

ELSE

? MIN(A , B)

ENDIF

ENDIF SET TALK ON

RETURN

2、以下程序运行结果是

SET TALK OFF CLEAR USE STCJ

DO WHILE ,NOT, EOF()

REPLACE 总分 WITH 高数 + 计算机 + 英语 SKIP

ENDDO GO BOTTOM

? 学号,总分

USE

RETURN

3、以下程序运行结果是

SET TALK OFF

SET HEADINGS OFF SELECT 2 USE STCJ

INDEX ON 编号

TO GZ21

REPLACE ALL 总分

WITH 高数 + 计算机 + 英语 SELECT 1 USE STDA

SET RELATION TO 编号

INTO B DISPLAY FIELDS 姓名,B.总分

FOR 四级通过

OFF CLOSE ALL RETURN

4、以下程序运行结果是

SET TALK OFF SET SAFETY OFF USE STDA INDEX ON 民族

TO XBSY TOTAL ON 民族

TO GZHZ USE GZHZ COUNT TO N ? N

SET SAFETY ON SET

TALK

ON RETURN

5、以下程序运行结果是

SET TALK OFF SET DELETED ON USE STDA DELETE FOR 性别 = “ 男 ” COUNT TO A SET DELETED OFF COUNT TO B DELETE ALL PACK COUNT TO C ? A , B , C SET TALK ON RETURN

6、以下程序运行结果是

SET TALK OFF USE STDA

INDEX ON 奖学金

TO GZSY SKIP 2

? 姓名,奖学金 USE

SET TALK ON RETURN

7、以下程序运行结果是

SET TALK OFF

SET PROCEDURN TO SP S = 0

DO SP1 WITH 5 , S ? S

SET TPROCEDURE

TO RETURN * SP PRG PROCEDURE

PARAMETERS X , Y N = 1 Y = 1

DO WHILE N < X

Y = Y + N

N = N + 1

ENDDO

RETURN

8、以下程序运行结果是

SET TALK OFF DIMENSION X(2 ,2)X = 5 FOR I = 1 TO 2 FOR J = 1 TO 2 IF I = J

X(I , J)ENDIF ?? X(I , J)ENDFOR ENDFOR SET TALK ON RETURN

二、完善程序

1、下列程序计算机 S =1!+ 2!+3!+4!+5!中,填空完成程序。

S = 0 FOR N = 1

TO 5

FOR I = 1 TO N

P = P * I

ENDFOR

ENDFOR

? “SUN =” , S

2、用下列程序找出所有的水仙花数,所谓水仙花数,是指这样一

个三位数,其各位数字的立方和等于该数本身,如 153 = 1^3 +5^3 +3^3,对以下程序填空完成该功能。FOR N = 100 TO 999

A = INT(N / 100)

B =

C = N – INT(N / 10)* 10 IF N = A^3 +B^3 +C^3

? N

ENDIF

ENDFOR

RETURN

3、将新表 DB2.DBF 文件中学号重复的记录删掉(只保留一个)SET TALK OFF SET SAFETY

OFF

USE STDA

COPY TO DB2 USE DB2

INDEX ON 学号

TO XH DO WHILE.NOT.EOF()XH = 学号 SKIP

DELETE ENDIF ENDDO

CLEAR ALL

4、显示STDA.DBF 文件中男同学的记录

SET

TALK

OFF

SET

HEADING

OFF

USE

STDA

DO

WHILE

.NOT.EOF()

IF

ENDIF

DISPLAY

WAIT

ENDDO

USE

SET

TALK ON

RETURN

5、将STDA.DBF 表中未通过英语四级考试学生的将赏金取消,通过者奖学金加50元,并显示姓名和奖学金额。SET TALK OFF

CLEAR USE STDA DO WHILE.NOT.EOF()IF.NOT.四级通过

REPLACE 奖学

WITH 0

ELSE

? 姓名,奖学金

ENDIF

SKIP

ENDDO

USE

SET TALK ON

RETURN

6、按学号查询成绩

SET TALK OFF CLEAR SELECT 1 USE STDA

INDEX ON 学号 TO IXH SELECT 2 USE STCJ

INDEX ON 学号 TO ICJ

ACCEPT “请输入查询学号:” TO XH SEEK

XH IF

FOUND()

DISPLAY

学号,A->姓名,总分

ELSE

? “ 查无此人!”

ENDIF

USE RETURN

7、请阅读下列判断一个自然数是否为质数的程序,并将程序填写完整。

SET

TALK

OFF

INPUT

“ 请输入一个大于1 的自然数:”

TO N

K = 0

J = 2

DO

WHILE

J < N IF MOD(N , J)

J = J +1

LOOP

ELSE

K = 1

EXIT

ENDIF

ENDDO

IF

K = 0

?

+ “ 素数”

ENDIF

? “ 再见!” SET TALK ON

RETURN

8、修改数据表文件 STDA.DBF 中指定同学的四级通过情况。SET TALK OFF USE STDA

INDEX TO ISY

DO

WHILE.T.CLEAR

ACCEPT “ 输入待学生的姓名” TO XM SEEK XM

IF

FOUND()

@ 10 , 10 SAY “ 修改” + XM + “ 的四级通过情况:” GET 四级通过

WAIT

“ 继续修改?(Y / N)”

TO N IF

ENDIF ENDDO USE RETURN

9、将数据表文件STDA.DBF 中的第三条记录与第四条记录的内容互换,并显示第三条记录。

SET

TALK

OFF

CLEAR

USE

STDA

GO

SCATTER

TO

A

GO

SCATTER

TO

B

GO

GATHER

FROM

B

DISPLAY

GO

USE

SET

TALK

ON

RETURN

10、如下程序根据键入的学号使用SQL SELECT 语句显示学生的学号、姓名和平均成绩。请在下划线处填写适当的内容,使程序能正确的运行。

DO

WHILE.T.CLEAR

ACCEPT

“请输入学号:” TO KEYNO

SELECT

STDA.学号,姓名,(高数 +计算机 +英语)/3 AS平均成绩;FROM STDA.STCJ WHERE

WAIT

“如果退出,请按【Y】键!”

TO KEY

IF

UPPER(KEY)= “ Y”

ENDIF ENDDO USE RETURN

三、程序改错题

1、在STDA.DBF 中,查询某人英语四级通过情况,若通过了,则授予学位,否则不授予学位。(1)SET

TALK OFF(2)USE

STDA

(3)ACCEPT “请输入姓名:”

TO XM(4)SEEK

FOR 姓名 = XM(5)IF

EOF()

(6)? “查无此人!”(7)RETURN(8)ENDIF

(9)IF

英语四级通过

(10)?姓名 + “英语四级通过,授予学位”(11)ELSE

(12)?姓名 + “英语四级没通过,不授予学位”(13)ENDIF(14)USE

(15)SET

TALK

ON(16)RETURN 错误的行是 改为:

2、显示 STCJ.DBF 中总分不低于190分的所有学生的姓名和总分字段的值。

(1)

SET

TALK OFF

(2)

SET

HEAD

OFF

(3)

USE

STCJ

(4)

DO

WHILE

RECNO()< = RECCOUNT()

(5)

REPL

总分

WITH

高数 +计算机 +英语

(6)

IF

总分> = 190

(7)

DISP

学号,总分 OFF

(8)

ENDIF

(9)

LOOP

(10)

ENDDO

(11)

RETURN 错误的行是: 改为:

3、在STDA.DBF 中,快速查询性别为“男”,“09/12/92”出生的人

(1)

SET

TALK OFF

(2)

USE

STDA

(3)

INDEX

ON 性别 +入学时间

TO LKL

(4)

SEEK “男” + “09/12/92”

(5)

IF

.NOT.EOF()

(6)

DISPLAY

(7)

ELSE

(8)

? “查无此人!”

(9)

ENDIF

(10)

USE

(11)

SET

TALK ON

(12)

RETURN 错误的行是: 改为:

4、求出 STCJ 表中总成绩的最大值和最小值。(1)

SET

TALK

OFF

(2)

USE

STCJ

(3)

DO

WHILE

.NOT.EOF()

(4)

REPLACE

总分

WITH 高数 +计算机+英语

(5)

SKIP

(6)

ENDDO

(7)

GO

TOP

(8)

STORE

总分

TO MAX , MIN

(9)

DO

WHILE

.NOT.EOF()

(10)

IF MAX >总分

(11)

MAX = 总分

(12)

ENDIF

(13)

IF MIN <总分

(14)

MIN = 总分

(15)

ENDIF

(16)

SKIP

(17)

ENDDO

(18)

? “最高分:” ,MAX ,”最低分:” , MIN

(19)SET

TALK

ON

(20)RETURN 错误的行是: 改为:

第九套题

一、完善程序题

1、将“职工”表中的数据按工资降序排列后生成新表,程序如下:

CLOSE

ALL

SET

TALK

OFF CLEAR USE 职工

TO 职工1 ON

工资/D USE 职工1 DISPLAY ALL USE

RETURN

2、在“职工”表中查找且显示“孙大鹏”的信息,程序如下:

SET TALK OFF CLEAR USE 职工 LOCATE

IF

FOUND()DISPLAY ENDIF USE

3、显示“职工”表中女职工的工资和,程序如下:

SET

TALK

OFF CLEAR SELECT

FROM 职工 RETURN

1、设计一个查询表单BD.SCX,其界面如图所示,其中文本框控件

名为TEXT1,表格控件名为GRID1。当在其中输入职工姓名并单击“查询”按钮时,将下边的表格内显示该职工的信息。“查询”按钮的Click 事件代码应如下:

THISFORM.GRID1.RECORDSOURCETYPE=4

THISFORM.GRID1.FRCORDSOURCE=”SELECT

* FORM 职工

WHERE

姓名

= = ”

5、将“职工”表中第6条记录的“出生日期”改为“12/12/1972”,程序如下:

SET TALK OFF CLEAR USE 职工 SKIP 5

出生日期

WITH {^1972/12/12} DISPLAY USE

RETURN

第五篇:vfp程序题总结

五.程序题 在Text1中输入一个3位自然数,分解求和的结果存入Text2中

x= thisform.text1.value a=int【1 】

b=int 【 2】

c=【 3】

s=【 4】

thisform.text2.value=【5 】

x/100(x-a*100)/10 x-a*100-b*10 a+b+c s 2 文本框Text1中输入的值与文本框Text2中输入的值交换

a= thisform.text1.value b= thisform.text2.value d=【1 】

【2 】

【3 】=d thisform.text1.value=【4 】

thisform.text2.value=【 5】

a a=b b a b 3 已知任意一个三角形的三条边为a、b、c,求其面积。

a=thisform.text1.value b=【 1】

c=【 2】

p=(a+b+c)/【3 】

s=【 4】(p*(p-a)*(p-b)*(p-c))thisform.text4.value=【5 】

thisform.text2.value thisform.text3.value 2 sqrt s 4 判断一个学生的计算机考试成绩x属于哪个分数段之间(0-59,60-69,70-79,80-89,90-100)Command1_click事件代码如下:

x= thisform.text1.value store 0 to h5,h6,h7,h8,h9 do case case x>=0 and x<=59 h5=h5+1 case 【1 】 and x<=69 h6=h6+1 case x>=70 and x<=79 【 2】

case 【3 】 and x<=89 h8=h8+1 case x>=90 and 【 4】

h9=h9+1 【 5】

thisform.label1.caption=str(h5)+ str(h6)+str(h7)+str(h8)+str(h9)x>=60 h7=h7+1 x>=80 x<=100 endcase 5 假设表单与第二题中的表文件zgqk.dbf 建立了数据环境,在其中按姓名查找职工情况,找到后将其情况在表单上显示,否则在信息框中显示“查无此人”。试完成下面程序。

【 1】 zgqk xm=thisform.text1.value locate for【2 】

if 【 3】eof()thisform.【4 】

else 【5 】(“查无此人”)Endif use xm=姓名 not refresh messagebox 6 求s=1/1^2+1/2^2+„+1/n^2 【 1】

n=thisform.text1.【2 】

FOR i=1 TO 【3 】

s=s+【4 】

next THISFORM.Label3.Caption=【5 】

s=0 value n 1/i^2 str(s)7 计算1+3+5+„„99,并将结果存入文本框Text1中,请填空

【 1】

FOR N=1 TO 【 2】 step 【 3】

s=s+n end【4 】

【5 】

s=0 99 2 for thisform.text1.value=str(s)8 计算1+3+5+„„99,并将结果存入文本框Text1中,请填空

【 1】

FOR N=1 TO 【 2】

if 【 3】(n/2)<> n/2 s=s+n endif end【 4】

【5 】 s=0 99 int for thisform.text1.value=str(s)9 计算2+4+6+„„100,并将结果存入文本框Text1中,请填空

【1 】

FOR N=2 TO 【2 】step 1 if int(n/2)=【 3】

s=s+n 【4 】

endfor 【 5】

s=0 100 n/2 endif thisform.text1.value=str(s)10 求所有的3位正整数除以99的商和余数,并输出。

for i= 【1 】to 【2 】

a= 【 3】

b=【4 】

?【5 】

Endfor 100 999 int(i/99)i%99 a, b 11 求1!+2!+3!+4!+5!。

S=0 For i=1 to【1 】

t=【2 】

for k=1 to 【 3】

t=t*【4 】

endfor s=s+【 5】

endfor 5 1 I k t 12 计算1+2+3+„„100,并将结果存入文本框Text1中,请填空

【 1】

FOR N=1 TO【 2】step 【 3】

s=s+n 【 4】for 【5 】

s=0 100 1 end thisform.text1.value=str(s)13 统计1至100之间能被7整除的数的个数并求其和,结果用信息框(对话框)输出。Command1_click事件代码如下:

k=0 s=0 for i=1 to 100 if 【1 】(I,7)=0 k=k+【 2】

s=s+【3 】

endif endfor a=messagebox(【 4】+【 5】)mod 1 I str(k)str(s)14 在文本框Text1中输入一个字符串,统计其中数字字符的个数,结果存入文本框Text2中。Command1_click事件代码如下: k=0 x=allt(thisform.text1.value)n=【1 】

for i=1 to 【 2】

if subs(x,i,1)>”0” and【3 】

【 4】

endif endfor thisform.text2.value=【 5】

len(x)n subs(x,i,1)>”9” k=k+1 str(k)15.s=求1!+2!+3!+...+20!【1 】

for n=1 to 20 t=1 for m=1 to 【 2】

t=t*【3 】

endfor 【 4】

endfor THISFORM.Text1.Value=【 5】

s=0 n m s=s+t s 16.找出2010至2100之间所有闰年的年份

FOR i=【 1】 TO 【2 】

if i%4=0 AND i%100!=0 OR i%【3 】

? 【4 】

endif 【5 】

2010 2100 400=0 I ENDFOR 17.设计一个求t=n!的自定义函数

【 1】f(x)t=【 2】

FOR j = 1 to 【3】 t=t*【4 】 endfor return 【 5】

function[###]func 1 x j t 18.求 Fibonacci 数列(1,1,2,3,5„)的前n(n>3)项,并输出

input “n=” to n 【 1】 a(n)a(1)=1 a(2)=1 ? a(1),a(2)for i=3 to 【 2】

a(i)=【 3】+【 4】

?? a(i-1),a(i-2)end【 5】

dime n a(i-1)a(i-2)for 19.输出zgqk.dbf的基本工资大于600的记录

【 1】zgqk do while not 【 2】

if 【 3】

【 4】

endif 【5 】

enddo use eof()基本工资>600 disp[###]display skip 1.在Text1中输入一个3位自然数,分解求和的结果存入Text2中 2.文本框Text1中输入的值与文本框Text2中输入的值交换 3.已知任意一个三角形的三条边为a、b、c,求其面积。

4.判断一个学生的计算机考试成绩x属于哪个分数段之间(0-59,60-69,70-79,80-89,90-100)287 5.求s=1/1^2+1/2^2+„+1/n^2 6.计算1+3+5+„„99,并将结果存入文本框Text1中,7.计算1+3+5+„„99,并将结果存入文本框Text1中 8.计算2+4+6+„„100,并将结果存入文本框Text1中,9.求所有的3位正整数除以99的商和余数,并输出。

10.编写程序计算:s=1+1/2!+1/3!+„+1/n!,说明:在表单中有一个文本框控件:Text1,用来接收n的值,有一个标签控件:Label1,用来显示S的值,试编写表单的单击事件,实现计算与显示功能,只要求写出事件的主要代码,事件过程的起始语句和结束语句可略去。11.编写程序计算:S=1X2+2X3+„+NX(N+1)。0

12.编写程序计算多项式:1^1+2^2+3^3+„+10^10 0

13.编写程序在表单上显示出:1~15之间的偶数 0

14.编写程序在表单上显示出:5/6+4/5+3/4+2/3+1/2 15.假设表单与第二题中的表文件zgqk.dbf 建立了数据环境,在其中按姓名查找职工情况,找到后将其情况在表单上显示,否则在信息框中显示“查无此人”

下载VFP命令、函数及程序语句大全解读word格式文档
下载VFP命令、函数及程序语句大全解读.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    VFP对口高考命令-3至5

    DO 功能:运行指定的查询 例:do d:chax1.qpr 运行名为chax1的查询文件 MODIFY QUERY 功能:打开指定的查询文件 例:modify query d:chax1.qpr 打开名为chax1的查询文件 注:不论......

    SQL语句常用函数

    SQL语句常用函数、字符转换函数 1、ASCII() 返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使......

    VFP读程序选择题[五篇]

    读下列程序: CLEAR STORE 1 TO I, J DO WHILE J=1 DISPLAY SKIP -1 WAIT N=N-1 ENDDO USE RETURN (1)程序的功能是(D) (A)显示所有记录 (B)分别显示前3个记录(C)显示第3个记录 (2)退......

    一级程序(教学用)VFP(大全5篇)

    第一部分:程序入门 一级 一、选择结构( IF- ELSE - ENDIF) 语句格式:IF〈条件〉 〈语句序列1〉 [ ELSE 〈语句序列2〉] ENDIF 说明:IF和ENDIF必须配对使用,而ELSE可选。三个语句......

    经典MSSQL语句大全和常用SQL语句命令的作用

    下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL类型包括数据库、表的创建,修改,删除,声明—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML类型包括数据表中记录的查......

    matlab函数、命令最全的自己总结

    《数字图像处理》冈萨雷斯,Matlab函数汇总 . 图像显示 colorbar 显示彩条 getimage 由坐标轴得到图像数据 ice(DIPUM) 交互彩色编辑 image 创建和显示图像对象 imagesc 缩放数......

    功函数总结解读

    功函数:是体现电子传输能力的一个重要物理量,电子在深度为χ的势阱内,要使费米面上的电子逃离金属,至少使之获得W=X-E F的能量,W称为脱出功又称为功函数;脱出功越小,电子脱......

    使用popen函数和ps命令读取进程表

    使用popen函数和ps命令读取进程表 #include /* FILE, sprintf, fgets, puts */ #include /* atoi, exit, EXIT_SUCCESS */ #include /* strtok, strcmp */ #include /*......