vfp等级考试复习题.docx
《vfp等级考试复习题.docx》由会员分享,可在线阅读,更多相关《vfp等级考试复习题.docx(45页珍藏版)》请在冰豆网上搜索。
![vfp等级考试复习题.docx](https://file1.bdocx.com/fileroot1/2023-3/19/72bccfe7-3ce6-4557-a63f-badf5bec29fb/72bccfe7-3ce6-4557-a63f-badf5bec29fb1.gif)
vfp等级考试复习题
第一部分内容有关数据库、表的基本概念及操作
1.成绩表中的成绩必须在0~100之间的规则是满足关系模型的________完整性。
A.实体完整性B.域完整性C.参照完整性D.用户自定义完整性
【解析】答案为B。
在关系数据库中,完整性主要有域完整性、实体完整性和参照完整性三种类型。
域完整性规定了属性的取值范围,由应用环境对数据的需求决定。
实体完整性要求任一元组的主关键字的值不为空,且在所属的关系中唯一。
参照完整性要求当一个元组的外部关键字的值不为空时,以该外部关键字的值作为主关键字的值的元组必须在相应的关系中存在。
成绩必须在0~100之间是成绩表的成绩属性的取值范围的规定,属于域完整性。
2.EMPTY(SPACE(3))和ISNULL(SPACE(3))函数的返回值分别为__________。
【解析】答案为.T.、.F.。
EMPTY()函数用来测试参数是否为空,当参数为空字符串、空格或0时返回真,为null返回假值,而ISNULL()函数用来测试参数是否为null值,只有参数为null的时候返回真,其余均返回假值。
3.当数据库表移出数据库成为自由表之后,仍然有效的是________。
A.字段的默认值B.表的记录的有效性规则
C.结构复合索引D.表的触发器
【解析】答案为C。
当数据库表移出数据库成为自由表后,字段的扩展属性和数据库表的表属性都消失,因为这些信息是数据库表所特有的,如字段的标题、格式、字段有效性规则、默认值等以及表的长表名、记录的有效性规则、触发器等都消失。
只有结构复合索引还保留着,结构复合索引文件中的主索引变成候选索引。
4.下列________操作不会损坏相关表之间数据的一致性。
A.删除了子表中的记录而没有删除主表中的相关记录
B.删除了主表中的记录而没有删除子表中的相关记录
C.在子表中插入记录的外部关键字的值是主表关键字中没有的
D.在主表中修改了主关键字的值而没有同时修改子表中相关记录的外部关键字的值
【解析】答案为A。
相关表之间数据的一致性指的是相关表之间的主关键字和外部关键字之间数据的一致性。
B、C、D选项的操作都会引起两张表的主关键字的值和外部关键字的值不一致。
5.依次执行下列命令后,浏览窗口中显示的表的别名及当前工作区区号分别是_______。
CLOSETABLESALL
USETS
USETSAGAININ5
SELECT0
USETSAGAIN
BROWSE
A.B、2B.TS、2C.B、5D.E、2
【解析】答案为A。
该段命令的功能是:
首先关闭所有的表,此时没有工作区被使用。
USETS是在1号工作区打开TS表,此时1号工作区为当前工作区,别名就为表文件名TS。
USETSAGAININ5是在5号工作区再次打开TS表,但是5号工作区未作为当前工作区,表的别名为E。
SELECT0选择未被使用的工作区区号最小的工作区即2号工作区作为当前工作区。
如果一张表在多个工作区被打开而未指定别名,则第一次打开的工作区中表的别名与表名同,其他工作区用A~J及W11~W32767表示,因此USETSAGAIN是再次打开TS表,此时TS表的别名为B。
6.首先执行了CLOSETABLESALL命令,然后执行________命令,可以实现逻辑删除DZ表(读者表)中年龄超过25岁的所有记录(注:
DZ表中含有CSRQ字段,日期型,为出生日期)。
A.DELETEFORYEAR(DATE())-YEAR(CSRQ)>25
B.DELETEFROMDZWHEREYEAR(DATE())-YEAR(CSRQ)>25
C.DELETEFROMDZFORYEAR(DATE())-YEAR(CSRQ)>25
D.DELETEFROMDZWHILEYEAR(DATE())-YEAR(CSRQ)>25
【解析】答案为B。
主要掌握DELETE命令和DELETE-SQL命令的功能。
A选项能够实现逻辑删除,但是XS表必须事先打开且为当前工作区的表。
C、D选项都是语法错误。
7.已知DZ表的结构为:
读者编号(DZBHC(8))、姓名(XMC(8))等,并且按照DZBH设置了结构复合索引,索引标识为DZBH,如果DZ表不是当前工作区的表,则下列________命令不能实现查找读者编号为“96010101”的记录。
A.SELECTDZ
LOCATEFORDZBH="96010101"
B.SEEK"960101"ORDERDZBHINDZ
C.SELECTDZ
SETFILTERTODZBH="96010101"
D.SELECTDZ
SEEK"96010101"
【解析】答案为D。
LOCATEFOR命令是条件定位,根据给定的条件将记录指针定位到指定的记录。
SETFILTERTO命令是记录的筛选,在当前工作区的表中筛选出满足条件的记录。
SEEK命令可以实现查找的功能,但是必须要设置主控索引。
8.已知表中已经建立了多个索引,则无论是否设置主控索引,都定位到同一条记录的命令是________。
A.GOTOPB.GOBOTTOMC.GO5D.SKIP-1
【解析】答案为C。
GOTOP、GOBOTTOM、SKIP命令都是相对定位命令,它们受记录的逻辑顺序的影响。
而GO5指的是跳转到5号记录,无论是否设置主控索引,记录的记录号是不会改变的。
9.下列关于记录的删除的叙述,不正确的是________。
A.DELETE命令和DELETE-SQL命令都要求表以独占方式打开
B.PACK命令和ZAP命令要求表必须以独占方式打开
C.PACK命令和ZAP命令可以实现彻底删除表中带有删除标记的记录的功能
D.RECCOUNT()函数的返回值不受SETDELETEDON|OFF命令的影响
【解析】答案为A。
主要掌握表中记录删除的相关内容。
DELETE命令要求表必须事先打开,而DELETE-SQL命令不必,且无论表是独占方式还是共享方式打开,都不影响删除标记的设置。
PACK和ZAP命令要求表必须以独占方式打开,PACK彻底删除带有删除标记的记录,ZAP删除表中所有记录,仅保留表结构。
RECCOUNT()函数返回表中的记录数,不受删除标记的影响。
10.已知TS表中有DJ字段(单价,数值型),如果DJ不低于100,则设置BZ(备注,备注型)内容为“高档图书”,则下面哪条命令不能完成该功能________。
A.USETS
REPLACEBZWITH"高档图书"FORDJ>=100
B.UPDATETSSETBZ="高档图书"WHEREDJ>=100
C.UPDATETSSETBZ="高档图书"FORDJ>=100
D.UPDATETSSETBZ=IIF(DJ>=100,"高档图书","")
【解析】答案为C。
主要掌握UPDATE命令和REPLACE命令。
前者的语法格式为:
UPDATE表文件名SET字段名=值WHERE逻辑条件表达式。
REPLACE命令的语法格式为:
REPLACE字段名1WITH值1,字段名2WITH值2,…FOR逻辑条件表达式,REPLACE命令要求表必须事先打开,而且是当前工作区的表。
11.已知TS表属于数据库TSK,如果不小心删除了TSK的相关文件,则要将TS表添加到其他数据库中,必须释放____________,释放的命令是___________________。
【解析】答案为后链、FREETABLETS。
数据库表和数据库之间通过双向链接相关联。
一张数据库表只能属于一个数据库,如果意外损害了数据库文件,则必须释放后链才能添加到其他数据库中。
12.已知成绩表(cj.dbf)的结构如下图,请完善下列各项命令。
字段名
类型
宽度
字段含义
是否主键
XH
C
6
学号
是
KCDH
C
2
课程代号
是
CJ
N
3,0
成绩
(1)创建表结构的命令
CREATETABLECJ(XHC(6),KCDHC
(2),CJN(3,0))
(2)给CJ表添加一个备注型字段BZ
ALTERTABLECJADDCOLUMNBZM
(3)将BZ字段的字段名改为CJBZ
ALTERTABLECJRENAMECOLUMNBZTOCJBZ
(4)为CJ表添加一条记录:
08010101,02,60
INSERTINTOCJ(XH,KCDH,CJ)VALUES("08010101","02",60)
(5)将所有CJ不及格的记录的CJBZ字段内容设置为“需要补考”
UPDATECJSETCJBZ="需要补考"WHERECJ<60
(6)根据KCDH字段升序排序,当KCDH相同时按照CJ升序排序,索引标识名为KCCJ
INDEXONKCDH+STR(CJ,3)TAGKCCJ
(7)将成绩表所有08级的考生的考试记录做删除标记(XH的前两位表示年级)。
DELETEFROMCJWHERELEFT(XH,2)="08"
【解析】该类题目主要要求掌握表的一些相关命令。
因此要熟悉每一种命令的功能以及命令格式。
13.已知TS表和JY表的结构如下,
TS表结构
JY表结构
字段名
类型
宽度
字段含义
字段名
类型
宽度
字段含义
sh
C
20
书号
dzbh
C
8
读者编号
sm
C
50
书名
sh
C
20
书号
zz
C
40
作者
jsrq
D
8
借书日期
dj
N
5,1
单价
hsrq
D
8
还书日期
图书表TS的记录如下:
记录号
书号
书名
作者
单价
1
I247.5/8888P
女奴:
天命之择
林政
48
2
I247.5/8880P
支离破碎
石康
43.6
3
C912.1-49/129P
卡耐基经典小故事全集
(美)戴尔·卡耐基
39.8
4
K891.26-49/2P
礼仪是一种资本:
日常礼仪的300个细节
李洁
39.8
5
H1/104P
中国语文
杜纯梓
98
6
F239.22/14P
中国审计体系研究
《中国审计体系研究》课题组编著
48
借阅表JY的记录如下:
记录号
读者编号
书号
借书日期
还书日期
1
05030815
I247.5/8888P
2008-05-01
2008-05-23
2
05030815
I247.5/8880P
2008-06-12
2008-06-17
3
06030828
I247.5/8888P
2008-12-11
2009-01-24
4
06030828
C912.1-49/129P
2008-11-01
2008-11-21
5
06030828
I247.5/8880P
2008-08-01
2008-09-01
6
A030013
I247.5/8888P
2008-11-08
2008-12-01
7
A030013
C912.1-49/129P
2008-05-12
2008-05-19
8
A030013
K891.26-49/2P
2009-05-01
2009-05-11
9
A030013
I247.5/8880P
2008-09-11
2008-09-21
TS表的候选关键字是SH,JY表的候选关键字是DZBH+SH,若JY表中所有的SH值都来自TS表,则两张表之间是一对多关系。
其中主表是TS表,子表是JY表。
如果在两张表之间建立永久关系,则必须设置主表TS表中以SH字段为索引关键字建立主索引或候选索引,在子表中以SH字段建立普通索引。
两张表的记录如上表所示,如果两张表之间创建了参照完整性:
更新级联、删除限制和插入限制。
就两张表的已知数据而言,如果把TS表的第3号记录的书号改为“C912.1-49/110P”,则JY表中有2条记录被更改,如果把JY表中的第8号记录的书号改为“F252/265P”,则TS表中有0条记录被更改。
如果要删除TS表中的第5号记录,则允许吗?
允许
如果要求只有登记入库的书才能被借阅,则设置TS表和JY表之间的参照完整性规则为插入限制。
【解析】掌握数据库表之间的关系,以及永久关系的建立和参照完整性的设置。
第二部分内容程序阅读与改错
1.阅读下列程序,回答指定问题。
SETTALKOFF
CLEAR
USESALARY
DOWHILE.NOT.EOF()
IF实发工资>=250
SKIP
LOOP
ENDIF
DISPLAY&&短路
SKIP&&短路
ENDDO
CLOSEDATABASE
RETURN
该程序完成的功能是;LOOP语句的功能是。
【解析】答案是:
程序完成的功能是显示实发工资低于250元(不含250)的记录信息。
LOOP语句的功能是当检验当前的记录满足“实发工资>=250”条件时,不执行语句DISPLAY和SKIP(又称为将其短路)。
2.给程序填充,使其具有以下功能:
根据学生成绩表(CJ)中学生的考试成绩,按下表的划分标准,给出相应的等级,设CJ表中有一个名为DJ的字段。
分数与等级对照表
分数
等级
90~100
优秀
80~89
良好
70~79
中等
60~69
及格
<60
不及格
USECJ
GOTOP
DOWHILE.T.
N=CJ
DOCASE
CASE
(1)
ReplaceDjwith”不及格”
CASE
(2)
ReplaceDjwith”及格”
CASE(3)
ReplaceDjwith”中等”
CASE(4)
ReplaceDjwith”良好”
OTHERWISE
ReplaceDjwith”优秀”
ENDCASE
SKIP
IFEOF()
EXIT
ENDIF
ENDDO
USE
【解析】答案为
(1)N<60;
(2)N<70;(3)N<80;(4)N<90。
程序中用到了DO循环嵌套CASE语句和IF语句的形式,先进入循环,执行CASE语句,再利用条件语句来判断何时结束循环。
CASE语句中的各种CASE条件,排列顺序很重要,如果排列不对,将产生错误的结果。
例如,程序片段:
DOCASE
CASEN<90
ReplaceDjwith”良好”
CASEN<60
ReplaceDjwith”不及格”
CASEN<70
ReplaceDjwith”及格”
CASEN<80
ReplaceDjwith”中等”
OTHERWISE
ReplaceDjwith”优秀”
ENDCASE
结果对60分~90分的成绩等级均给”良好”。
3.已知学生表xs.dbf。
给程序填充,使其具有以下功能:
求男、女同学平均年龄(输出时保留4位小数)。
要求采用FOR循环语句,
Usexs
Gotop&&将记录指针指向学生表的第一个记录
Store0tosum1,sum2,cot1,cot2
ForI=1to
(1)&&recount()函数返回打开的表的记录数
Ifxb=”男”
Sum1=sum1+
(2)&&SUM1中存放男同学年龄之和
Cot1=cot1+1&&COT1中存放男同学人数
Else
Sum2=sum2+(3)&&SUM2中存放女同学年龄之和
Cot2=cot2+1&&COT2中存放男同学人数
Endif
Skip
endfor
?
(4)
?
(5)
USE
【解析】答案是:
(1)reccount();
(2)year(date())-year(csrq)(3)year(date())-year(csrq)(4)"男同学的平均年龄为"+STR(SUM1/COT1,7,4)(5)"女同学的平均年龄为"+STR(SUM1/COT1,7,4)。
此程序中用到了循环语句FOR…ENDFOR,使用语句SKIP将记录指针向下移动一个记录,直到学生表中的记录全部处理完。
•表达式year(date())-year(csrq)用于计算每个学生的年龄。
•STR为VFP系统提供的函数,其功能是将数值表达式转换成数值字符串,第一个参数为要转换的数值表达式,第二个参数为串长,第三个参数为小数位。
“男同学的平均年龄为“+STR(SUM1/COT1,7,4)是一字符表达式,若没有STR转换函数,如:
?
"男同学的平均年龄为"+SUM1/COT1,则系统会提示“操作符与操作数类型不匹配”。
4.利用SCAN循环语句,完成题2。
Usexs&&打开学生表
Store0tosum1,sum2,cot1,cot2&&将0值赋给内存变量SUM1,SUM2,COT1,COT2
(1)
Ifxb="男"
Sum1=sum1+
(2)
Cot1=cot1+1
Else
Sum2=sum2+(3)
Cot2=cot2+1
endif
endscan
?
(4)
?
(5)
USE&&关闭学生表
【解析】答案是:
(1)scan;
(2)year(date())-year(csrq)(3)year(date())-year(csrq)(4)"男同学的平均年龄为"+STR(SUM1/COT1,7,4)(5)"女同学的平均年龄为"+STR(SUM1/COT1,7,4)。
STORE语句与下列四个语句等价:
注意:
VFP系统规定一行只能写一条语句
SUM1=0
SUM2=0
COT1=0
COT2=0
•此程序中用到了循环语句SCAN…ENDSCAN,其中使用IF语句,根据性别不同,各自往不同的变量中累加,一条记录处理完,自动进入下一条记录,直到学生表中的记录全部处理完。
•因为SCAN语句自动移动记录指针进入下一条记录,所以不要加上skip语句。
5.利用DOWHILE循环语句,完成题2。
程序清单如下:
Usexs
Gotop&&将记录指针指向学生表的第一个记录
Store0tosum1,sum2,cot1,cot2
DOWHILE
(1)&&判断表的记录指针是否指向了表的尾部
Ifxb=”男”
Sum1=sum1+
(2)
Cot1=cot1+1
Else
Sum2=sum2+(3)
Cot2=cot2+1
Endif
Skip
enddo
?
(4)
?
(5)
USE
【解析】答案是:
(1)NOTEOF();
(2)year(date())-year(csrq)(3)year(date())-year(csrq)(4)"男同学的平均年龄为"+STR(SUM1/COT1,7,4)(5)"女同学的平均年龄为"+STR(SUM1/COT1,7,4)。
此程序中用到了循环语句DOWHILE<循环条件>…ENDDO,此处<循环条件>用到了函数EOF():
EOF()=.T.即记录指针已经指向了表的尾部(表记录的结束标志)
EOF()=.F.即记录指针没到表的尾部
noteof()即记录指针没到表的尾部,就进行循环;否则,结束循环
VFP系统还提供另一个函数BOF():
BOF()=.T.即记录指针已经指向了表的头部(表记录的开始标志)
BOF()=.F.即记录指针没到表的头部
6.完善自定义过程ntoc(),当传递一个0—9间的数字时,分别返回零—九。
并给出使用的方法。
dimensionarray1[10]
dimensionarray2[10]
clear
FORi=1to10
array1[i]=i-1
ENDFOR
FORi=1to10
?
?
array1[i]
ENDFOR
?
(1)&&调用过程ntoc()
FORi=1to10
?
?
array1[i]
ENDFOR
?
FORi=1to10
?
?
array2[i]
ENDFOR
procedurentoc
PARAmeterspdigit,aa&&虚拟参数
LOCALcstring&&局部变量
Cstring="零一二三四五六七八九"
fori=1to10
aa[i]=
(2)
endf
ENDPROC
【解析】答案是
(1)dontocwitharray1,array2,
(2)SUBSTR(cstring,pdigit*2+1,2);在foxpro中,数组必须按址传递。
在默认情况下,当你用do...with调用过程或表单时,参数是按址传递。
在函数或方法中,参数是按值传递。
如:
dimensionarray1[10]doformform1witharray1
7.在INPUT、ACCEPT和WAIT命令中,必须要以回车键表示输入结束的命令是。
A.INPUT、ACCEPTB.INPUT、WAIT
C.ACCEPT、WAITD.INPUT、ACCEPT和WAIT
【解析】答案为A。
WAIT命令只能接收单个字符,可以在用户输入一个字符后自动结束该命令。
而INPUT、ACCEPT命令,等待用户从键盘输入数据,并以回车键表示结束输入。
8.下列关于DOCASE……ENDCASE语句说法不正确的是。
A.只要CASE条件成立,就执行这个CASE条件对应的命令序列
B.DOCASE和ENDCASE必须成对出现
C.所有的CASE条件都不成立且没有OTHERWISE语句,则直接跳出本结构,执行ENDCASE后面的语句
D.在DOCASE和第一个CASE之间的任何语句都不被执行
【解析】答案为A。
不管有几个CASE条件同时成立,只有最先成立的那个CASE条件对应的命令序列被执行。
如果所有的CASE条件都不成立且没有OTHERWISE语句,则直接跳出本结构。
DOCASE和ENDCASE必须成对出现,在DOCASE和第一个CASE之间的任何语句都不被执行。
9.在DOWHILE.T.的循环中,退出循环应使用的命令是。
A.LOOPB.EXITC.CLOSED.CLEAR
【解析】答案为B。
LOOP与EXIT都用于循环体中,结束当前的循环,但两者有着根本区别。
语句EXIT结束循环,将跳到直接包含它的循环体语句外,控制程序执行ENDDO或ENDFOR的后续语句。
语句LOOP结束当前的循环,即忽略此后的循环体语句,重新回到循环头,根据循环测试条件决定是否退出循环。
语句CLOSE是关闭语句,如CLOSEALL即关闭当前打开的所有的文件,包括表、数据库、项目等等。
CLEAR是清屏命令。