vfp考前辅导.docx
《vfp考前辅导.docx》由会员分享,可在线阅读,更多相关《vfp考前辅导.docx(48页珍藏版)》请在冰点文库上搜索。
vfp考前辅导
复习
注:
“*”表示难点和易出错
1、数据库系统及VisualFoxpro概述
1)数据管理技术的发展
三阶段:
人工管理阶段、文件管理阶段、数据库方式阶段
例:
2)数据库系统
组成:
数据库(概念和特点)
*特点:
共享性、独立性、冗余度
数据库管理系统
操作系统
计算机硬件资源等组成。
三级模式结构:
外部层——单个用户的视图
概念层——全体用户的公共视图
内部层——存储视图
数据的物理独立性:
数据的逻辑独立性:
3)数据库管理系统(DBMS)
信息的三个领域及对应关系*:
三个阶段:
客观事物——实体——数据世界中的数据
概念模型:
E-R模型的基本概念
实体:
客观存在的、可以相互区别的事物。
用矩形表示
联系:
实体集之间关系的抽象表示。
菱形
属性:
实体或联系所具有的特征。
椭圆型
数据模型:
层次模型、网状模型、关系模型
关系模型和二维表*
关系:
以二维表结构来表示实体集及其实体间的联系。
一个关系就是一张二维表。
表的每一行称为一个元组(Tuple),
每一列称为一个属性(Attribute)。
关系模型的性质:
属性是原子的,不可分解的。
二维表的记录数随数据的增加而改变,但其字段数是相对固定的。
二维表中的每一列均有唯一的字段名
二维表中不允许出现完全相同的两行二维表中行的顺序、列的顺序均可以任意交换
关系模型通过一系列的关系模式来表述数据的结构和属性,一般有三个组成部分:
数据结构、数据操作和完整性规则。
关系的基本运算有两类:
⏹传统的集合运算(并、差、交等)
⏹专门的关系运算(选择、投影、联接)
5)VisualFoxpro概述
项目管理器
功能:
组织和管理各种类型的文件,包括文件、数据、文档、对象
文件扩展名
*操作:
主文件设置:
程序表单查询菜单
编辑说明(项目、数据库和表)
应用程序的连编
表的包含与排除、重命名、添加等方法
.
2、语言概述及程序设计基础
1)语言概述
数据类型和字段类型
基本数据类型:
字符型 C 货币型 Y 日期型 D 数值型 N
逻辑型 L 备注型 M 通用型 G
2)数据:
常量、变量、数组
常量:
在数据处理过程中其值不发生变化的量叫常量。
●字符型常量:
用定界符(单引号、双引号、方括号)括起来的字符串。
●(示例:
“ade”、‘568’)
●数值型常量(示例:
538,-10.5)
●浮点型常量(示例:
-1.05E+20)
●日期型常量:
表示一个确切的日期,用大括号作为定界符,默认格式为{mm/dd/yy}。
◆严格的日期格式:
{^YYYY-MM-DD}
⏹(示例:
{05/23/99},{^2001-08-16})
●逻辑型常量(示例:
.t..T..f..F.)
●日期时间型常量(示例:
{05/16/9912:
00:
00})
●货币型:
以$符号开头(示例:
cPrice=$100.35)
变量的命名规则:
(1)名称中只能包含字段、下划线(__)和数字符号
(2)名称的开头只能是字母或下划线,不能是数字;
(3)除了自由表的字段名、表的索引标识名至多只能有10个字符,其余的名称的长度可以在1~128个字符之间。
(4)避免使用系统的保留字。
如:
cVar、Cbe2、x_2
2x2_num-ofnsunm&dcodd
LOCAL指定局部变量
用PRIVATE指定私有变量
用PUBLIC指定全局(公共)变量
访问变量
在VFP中,若变量与字段同名,字段具有更高的优先权。
要访问变量,可在变量前加上:
m.
例:
1、执行下列程序段后,X(1,1)和X(2,2)的值分别为:
程序清单如下:
DIMENSIONX(6,10)
X=123
操作符、表达式、函数
常用函数:
数值函数:
ABS()INT()MAX()MIN()MOD()ROUND()
数据类型转换函数:
ASC()CHR()CTOD()DTOC()STR()VAL()
字符函数:
ALLTRIM()TRIM()AT()BETWEEN()EMPTY()LEFT()LEN()RIGHT()SPACE()SUBSTR()
日期与时间函数:
DATE()DAY()TIME()DAY()MONTH()YEAR()
表操作与数据库操作函数;
其他函数:
IIF()MESSAGEBOX()TYPE()
例:
函数MOD(-42,-3)的返回值为_______
例:
以下表达式中不能返回字符串值“FoxPro”的是______。
A“Fox”+“Pro”
BTRIM(“Fox ”–“Pro”)
CALLTRIM(“ Fox”+“Pro”)
D“Fox”-“Pro ”
例:
在系统VisualFoxPro中,以下函数返回值不是数值型的是_____。
A.LEN(“VisualFoxPro”)
B.AT(“This”,“ThisForm”)
C.YEAR(DATE())
D.LEFT(“ThisForm”,4)
3)名称表达式、宏替换
例:
.设n=234,m=432,k=”m+n”,表达式1+&k的值是______
4)程序设计语言
*程序控制:
顺序、条件分支、循环、子程序
退出语句:
LOOP、EXIT、QUIT、RETURN的区别
*函数、过程
例:
1、下列命令中,不能使程序跳出循环的是
A、LOOPB、EXITC、QUITD、RETURN
2、下列程序用来求0-----100偶数之和,请将它写完整
STORE0TON,S
DOWHILE.T.
IFN>100
ELSE
S=S+N
ENDIF
N=N+2
ENDDO
3、下列程序的功能是计算:
S=1/(1*2)+1/(3*4)+1/(5*6)+...+1/(N*(N+1))+...的近似值,当1/(N*(N+1))
的值小于0.00001时,停止计算:
S=0
I=1
DOWHILE.T.
P=
S=S+1/P
IF1/P<0.00001
ENDIF
I=I+2
ENDDO
运行以下程序后,VFP主窗口显示的结果是____6____。
【程序清单】
CLEAR
i=0
n=0
DOWHILEi<=10
IFMOD(i,2)=0
n=n+1
ENDIF
i+1
NDDO
n
运行下列程序后,显示的运行结果为.
S=0
FORI=1TO100STEP2
IFMOD(I,3)=0
LOOP
ENDIF
S=S+I
ENDFOR
?
S
运行下列程序后,显示的运行结果为.
X=0
DOWHILE.T.
X=RAND()*100
IFX>70ANDX<80
EXIT
ENDDO
?
*
运行下列程序后,显示的运行结果为.
?
TT("123E%nw$Oq*5n6")
FUNCTIONTT
PARAcstr
cResult=space(0)
FORn=1toLEN(ALLT(cStr))
c=SUBSTR(cStr,n,1)
IF!
BETWEEN(c,"A","Z")and!
BETWEEN(c,"a","z")
LOOP
ENDIF
cResult=cResult+CHR(ASC(c)+1)
ENDFOR
RETURNcResult
ENDFUN
运行此程序的显示结果为:
M=0
N=100
DOWHILEN>M
M=N-M
N=N-10
ENDDO
?
M,N
RETURN
过程定义的基本语法格式:
PROCEDUREPracedurename
Commands
[RETURN[eExpression]]
ENDPROC
函数定义的基本语法格式“
FUNCTIONFunctionName
Commands
[RETURE[eExpression]]
ENDFUNC
可以传递参数,必须在PROCEDURE或FUNCTION命令后面的第一个语句之前使用PARAMETERS语句进行参数定义。
语法格式如下:
PARAMETERSParameterlist
RETURN函数用于指定过程或自定义函数的返回值,缺省时,返回值为真。
过程与自定义函数的调用
s=0
FORI=1to5
S=s+fjc(i)
ENDFOR
?
s
FUNCTIONFJC
PARAMETERSx
P=1
Forn=1tox
P=p*n
Endfor
Returnp
Endfunc
4、完善下列程序。
使其实现计算数列1!
/2!
2!
/3!
3!
/4!
……的前20项之和的功能。
【程序清单】
nSum=0
FORn=1TO20
NSum=__________
ENDFOR
FUNCTIONjc
PARAMETERx
S=1
FOR_____to______
s=s*m
ENDFOR
RETURNs
endf
4、下列程序用来计算长方形的面积,请将它完整:
X=3
Y=5
S=0
DOWITHX,Y
?
S
PROCEDUREAREA
S=X*Y
RETURN
5、设学生表(XS)中含有学号(XH,C,8)、姓名(XM,C,8)、出生日期(CSRQ,D,8)
字段,该表所在的数据库的存储器过程中有一个求学生年龄的自定义函数AGE,代码如下:
FUNCTIONAGE
PARAMETERSdBirthday
LOCALnResult
NResult=-1
IFNOTEMPTY(”dBirthday”)
Nresult=YEAR(DATE())-
ENDIF
RETURNNresult
改错题:
1、下列程序用于计算数列1,1/2,1/3,1/4,1/5,……,1/n之和,当某一数列项的值小于
1.01时停止计算。
要求:
修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
(2002秋VFP03)
setdecimalto2
n=1
nsum=0
dowhile.t.
nsum=nsum+n
if1/n<0.01
loop
endif
n=n+1
enddo
(2005春01)下列程序的功能是:
随机出10道100以内整数加减法算术题。
如果是加法,则两数的和不得大于100;如果是减法,则被减数不小于减数。
要求:
① 项目中有一个程序文件Pcode,将下列程序输入到其中并进行修改(注:
注释部分不需要输入);
② 在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
Clear
Ts=1&&题数计数
Dowhilets<=10
Czf=iif(rand()>0.5,”+”,”-”)&&rand()函数的功能是返回一个0~1之间的随机数
Num1=rand()*100
Num2=rand()*100
Ifczf=”+”
Ifnum1+num2>100
Loop
Endif
Else
Ifnum1Exit
Endif
Endif
?
”(”+str(ts,2)+”)”+str(num1,3)+czf+str(num2,2)+”=”
ts=ts+1
endif
下列程序的功能是:
根据给定出生日期,打印出60岁前有哪几个生日是在星期六或星期日,并分别统计在星期六和星期日过生日的次数。
要求:
(1)项目中有一个程序文件pcode,将下列程序输入到其中并进行修改;
(2)在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。
Setdatetolong
Dbday={^1968/05/20}
Nyear=year(dbday)
Mm=str(month(dbday),2)
Dd=str(day(dbday),2)
Storeotonsunday,nsaturday
ForI=1to60
Cebirth=”^”+str(nyear+I,4)+”/”+mm+”/”+dd
Debirth=dtoc(cebirth)
Nweek=dow(debirth)
Ifnweek=1
?
debirth,”星期日”
nsunday=nsunday+1
endif
ifnweek=6
?
debirth,”星期六”
nsaturday=nsaturday+1
endif
endfor
?
”星期六过的次数:
”+str(nsaturday,2)+”星期日过的次数:
”+str(nsunday,2)
下列程序的功能是求函数f(x)的值,同时分别求出x=-2,x=2,x=6时函数的值。
函数表达式为:
f(x)=2x2+3x+4x<2
=0x=2
=-2x2+3x-4x>2
clear
?
f(-2)
?
f
(2)
?
f(6)
functionf
parametersx
ifx<2
y=2*x*x+3*x+4
else
ifx=2
y=0
endif
y=-2*x*x+3*x-4
endif
endif
returnx
下列程序的功能是找出两个正整数的最大公约数。
可以用辗转相除发来求最大公约数。
例如27和6,先用27除以6,余数为3,由于余数不为0,再将6作为被除数,3作为除数,得到余数为0,则3就是27和6的最大公约数。
要求:
(1)项目中有一个程序文件Pcode,将下列程序输入到其中并进行修改;
(2)在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目
CLEAR
m=27
n=6
IFm t=m
m=n
n=t
ENDIF
r=MOD(m,n)
DOWHILEr=0
m=n
n=r
r=MOD(m,n)
ENDDO
WAITWINDOWS'最大公约数为'+STR(r)
下列程序的功能是找出1992至2010年中的闰年年份。
判断闰年的条件是:
能被4整除但不能被100整除的年份,或能被400整除的年份。
如1989、1900年不是闰年,1992,2000是闰年。
要求:
(1)项目中有一个程序文件Pcode,将下列程序输入到其中并进行修改;
(2)在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目
n=1992
y=1
DOWHILEn<=2010
IFINT(n/4)=n/4
IFINT(n/100)<>n/100
y=1
ELSE
IFINT(n/400)=n/400
y=1
ELSE
y=0
ENDIF
ENDIF
ENDIF
y=0
ENDIF
WAITWINDOWVAL(n)+'是'+IIF(y=1,'闰年','非闰年')
n=n+1
ENDDO
2、表的创建和使用
上机、笔试结合数据库、查询、表单控件综合考查,体现综合能力
1)表
概念:
指存放在磁盘文件中的一张二维表
内容:
表结构和记录
字段类型:
C、N、L、M、G、Y等
宽度(占存储空间大小)
2)表结构的建立
方法:
表设计器
SQL命令方式:
(书写格式*)
例:
1、XS(学生)表的结构为:
字段名
中文含义
类型
长度
XH
学号
字符
6
XM
姓名
字符
8
XB
性别
字符
2
CSRQ
出生日期
日期
8
ZZMM
政治面貌
逻辑
1
BZ
备注
备注
4
下列命令用来创建XS表的结构,请将它完善:
CREATE;
(XHC(6),XMC(8),XBC
(2),CSRQD,,BZM)
3)修改表结构:
添加、重命名、删除、更改(实现的命令*)
ALTERTABLExsADDCOLUMNnlN
(2)
ALTERTABLExsALTERCOLUMNnlN(100)
ALTERTABLExsDROPCOLUMNxm
ALTERTABLExsRENAMECOLUMNjgTOjiguan
例1、有一个表文件XSDA,含有一个学号字段(XH,C,8),利用ALTERTABLExsda
COLUMNxhc(10)命令,可以将学号字段的宽度修改为10
4)记录的处理:
追加、浏览、定位*、修改*、删除*(逻辑和物理)、筛选(字段和记录)
例
INSERTINTOtablename[(fieldname1[,fieldname2,…])VALUES(expression1[expression2,…])
brows
GOTO
SKIP
LOCATEFOR
REPLACExmWITH“张三”FORxb=”女”
UPDATEjsSETxm=”张三”wherexb=”女”
例:
下面命令用于打开浏览XS表,且仅显示女学生的学号和姓名:
CLOSETABLEALL
USEXS
BROWSEFIELDSXH,XMFORXB=‘女’NOMODIFYTITLE‘女学生’
数据的复制
COPYTO
利用COPY命令可以将当前工作区中的表复制成MicrosoftExcel文件.若当前工作区中已打开XS表,则用命令COPYTOxyz ,可以将XS表复制成Excel文件xyz.xls.
数据的统计
COUNTFORCJ<60TOAL
1、学生表(XS)的表
结构为:
学号(XH,C,8),姓名(XM,C,8),性别(XB,C,2),
班级(BJ,C,6),用INSERT命令向XS表添加一条新记录,记录内容为:
XH
XM
XB
BJ
10
李小平
男
984461
下列命令中正确的是
A、INSERTINTOXSVALUES(”10”,”李小平”,”男”,”984461”)
B、INSERTTOXSVALUES(”10”,”李小平”,”男”,”984461”)
C、INSERTINTOXS(XH,XM,XB,BJ)VALUES(10,李小平,男,984461)
D、INSERTTOXS(XH,XM,XB,BJ)VALUES(”10”,”李小平”,”男”,”984461”)
2、已知教师表JS.DBF的结构如下:
字段名
类型
长度
小数位
含义
GH
C
6
工号
XM
C
8
姓名
GL
N
2
工龄
JBGZ
N
7
2
基本工资
若要求按如下条件更改基本工资(JBGZ):
工龄在10年以下(含10年)者基本工资加200
工龄在10年以上(不含10年)者基本工资加400
可用如下命令来完成:
UPDATEJSJBGZ=IIF(,JBGZ+200,JBGZ+400)
3、教师表JS的结构同上:
要删除教师表中年龄在60岁以上(不含60岁)的教师记录,可使用命令:
DELETEFROMJSWHERE
5)工作区的使用(临时关系建立)*
例:
1、建立两个表之间的关系时,必须设置
A、主表的主索引B、主表的主控索引C、子表的主索引D、子表的主控索引
2、使用USE命令可以打开或关闭表.如果XS表已在第1号工作区中打开,则要在第10号工作区中再次打开XS表,可使用命令USExsIN10.
3、有如下一段程序:
CLOSETABLESALL
USEXS
SELE3
USEJS
USEKCIN0
BROW
上述程序执行后,浏览窗口中显示的表及当前工作区号分别是_____________。
A.KC、2 B.KC、3 C.JS、3 D.JS、
5)表的索引:
建立、应用*(排序、查询)、类型及特点*
例:
1、(操作题)在教师表JS中创建一个名为gg的普通索引,要求先按工龄(gl)排序,工龄相同按工号(gh)排序(注:
gl为数值型,gh为字符型)
2、有关表的索引,下面说法中不正确的是
A、当一张表被打开时,其对应的结构复合索引被自动打开
B、结构复合索引能控制表中字段重复值的输入
C、一张表可建立多个候选索引
D、主索引适用于数据表和自由表
3、对自由表不能创建的索引类型是
A、主索引B、候选索引C、普通索引D、唯一索引
4、学生表(XS)的结构为:
学号(XH,C,8)、姓名(XM,C,8)、性别(XB,C,2)和班级(BJ,C,6),并且按XH字段设置了结构复合索引,索引标识为XH。
如果XS表不是当前工作表,则下列命令中可以用来查找学号为“96437101”的记录
A、SEEK96437101ORDERXHB、SEEK“96437101”ORDERXH
C、SEEK“96437101”ORDERXHINXSD、SEEK96437101ORDERXHINXS
5、在创建表索引时,索引表达式可以包含表的一个或多个字段。
在下列字段类型中。
不能直接选作索引表达式的是___。
A.货币型 B.日期时间型
C.逻辑型 D.备注型
3、数据库的创建和使用
1)数据库的概念
2)表之间的关系
一对多、多对多、一对一
3)创建