VF程序实例8Word文档下载推荐.docx
《VF程序实例8Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VF程序实例8Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
114李四
119王二
成绩表:
CJ.DBF
学号语文数学
1106765
1148967
1197895
按照成绩表的成绩修改总分表的成绩,并计算出总分表的总分字段
参考答案:
INDEXON学号TAGXHCJ
USEZF
INDEXON学号TAGXHZF
UPDAON学号FROMBREPL语文WITHB.语文,数学WITHB.数学
REPLALL总分WITH语文+数学
LIST
例题3:
涉及joinwith:
将STUDENT.DBF和学生成绩.DBF连接成新文件NEW.DBF
表1:
student(学号c(4),姓名c(8),性别L,出生日期D,高考成绩N(5,2))
表2:
学生成绩(学号c(4),课程号C(3),分数N
(2))
SELECT1
USESTUDENT
SELECT2
USE学生成绩
JOINWITHATONEWFOR学号=A.学号;
FIEL学号,A.姓名,A.性别,A.出生日期,课程号,分数
USENEW
如果再增加一张表,三表相连:
表3:
课程(课程号C(3),课程名称C(10))
JOINWITHATONEWFOR学号=A.学号
USE课程
JOINWITHATOSTUFOR课程号=A.课程号
USESTU
二、累加、累乘
例1:
累加:
求1~100的和
SUM=0
FORI=1TO100
SUM=SUM+I
ENDFOR
?
’1~100的总和为:
’,SUM
使用DOWHILE实现:
I=1
DOWHILEI<
101
I=I+1
ENDDO
例2:
累乘:
求n!
clear
INPUT"
,请输入n的值:
"
TON
MUL=1
FORI=1TOn
MUL=MUL*I
n,’的值为:
’,MUL
例3:
输入n的值,求1+1/2!
+1/3!
+1/4!
+….+1/n!
(阶乘n!
=1*2*3*4....*(n-1)*n)
SUM=_①_
MUL=_②_
请输入n的值:
"
FORi=1TON
FORj=1TOi
MUL=MUL*__③__
ENDFOR
SUM=SUM+____④_____
'
求得的总和为:
'
SUM
答案:
1:
02:
13:
j4:
1/mul
注意:
外循环是累加,内循环是累乘
三、双重循环:
看书阅读:
1、P159页:
例4.39
2、P160页:
例4.40
3、求1-100间所有的质数
CLEAR
?
’2、3是质数’
FORI=4TO100
FORJ=2TOINT(SQRT(I))
IFMOD(I,J)=0
EXIT
ENDIF
ENDFOR
IFJ>
INT(SQRT(I))
I,’是质数’
4、运行XY.PRG程序后,将在屏幕上显示如下乘法表:
1)1
2)24
3)369
4)481216
5)510152025
6)61218243036
7)7142128354249
8)816243240485664
9)91827364554637281
请对下面的程序填空:
***计算乘法XY.PRG***
FORJ=1TO9
STR(J,2)+'
)'
FOR______________
______________
RETURN
第一空K=1TOJ第二空STR(J*k,6)
5、排序问题
四、排序
输入10个数,将它们从小到大排列
分析:
用i代表趟数,j代表次数
(1)10个数要比较9趟
(2)每趟要比较的次数为:
10-趟数
(3)每次比较:
如果当前数a(j)大于本次比较的最后一个数a(10+1-i)
那么就交换,否则不交换
dimea(10)
输入10个数:
fori=1to10
input"
请输入:
toa(i)
endfor
fori=1to9
forj=1to10-i
ifa(j)>
a(10-i+1)
t=a(10-i+1)
a(10-i+1)=a(j)
a(j)=t
endif
endfor
listmemolikea
另外可以参看书:
P162-163页例4.45
五、查询:
有下列表:
book(书名C(20),作者C(8),出版日期D,内容简介M)
编写程序:
查询关于foxpro的图书.
USEBOOK
LOCATEFOR‘foxpro’$书名
IF!
FOUND()
’没有关于foxpro的图书’
ELSE
DOWHILE!
EOF()
书名,作者,出版日期
内容介绍
WAIT“是否继续查找?
(Y/N)”TOM
IFM$’nN’
CONTINUE
”全部显示完成”
ENDIF
关键地方在于
1、什么地方用locate,什么地方用continue
2、if..exit..endif
3、dowhilenot的条件
使用Locate查找出所有入校总分在580及以上的所有同学信息
use学生
locatefor入校总分>
=580
dowhile.not.eof()
disp
continu
enddo
结束'
cancel
六、循环插入新记录
编写程序,对于学生.dbf能够在程序末尾循环插入新记录
USE学生
DOWHILE.T.
APPEBLANK
@5,20SAY'
学号'
GET学号
@5,40SAY'
姓名'
GET姓名
@7,20SAY'
性别'
GET性别
@7,30SAY'
出生年月'
GET出生年月
@9,20SAY'
入校总分'
GET入校总分
READ
WAIT'
你想继续插入新记录吗?
(Y/N):
TOX
IFX='
N'
ORX='
n'
类似:
编写程序,该程序能够顺序修改表学生.DBF中的所有数据。
(要求:
必须使用@行,列say...get..进行数据修改)
你想继续修改记录吗?
SKIP
七、参数传递\变量的作用域
&
MAIN.PRG&
P1.PRG
X1=1PARAW1,W2
X2=2PRIVATEW1
DOP1WITHX1,X2W1=W1*3
’X1=’+STR(X1,1)W2=W2*4
’X2=’+STR(X2,1)RETURN
X1=1
X2=2
DOP1WITHX1,X1+X2
’X1=’+STR(X1,1)
’X2=’+STR(X2,1)
RETURN
(1)第一次显示X1,X2的值是()
A.1,8B.3,8C.1,1D.8,8
(2)第二次显示X1,X2的值是()
A.1,2B.3,1C.3,2D.1,3
BC
下面看第二个实例:
主程序MCX2.PRG
clea
publici,j
store1toi,j,k
doscx2.prg
主程序的输出结果:
i="
+str(i,2)+"
j="
+str(j,2)+"
k="
+str(k,2)
cancel
子程序scx2.prg
privatej,k
i=i*2
j=j+1
k=j+1
子程序中输出的结果:
return
执行结果是:
子程序中输出的结果:
i=2j=3k=4
主程序的输出结果:
i=2j=1k=1
看等级考试中的题.(2003年10月笔试)
八、@行,列say...get...default...
字幕问题:
1、有如下程序段,其功能是显示汉字“2008年北京申奥成功!
”
从屏幕的顶部移至底部,请填空补充该程序
CH='
2008年北京申奥成功!
R=1
DOWHILER<
=23
@R,26SAYSPACE(60)
@__________,26SAYCH
T=INKEY(0.2)
_______________
答案为:
R+1R=R+1
答案说明:
@R,26SAYSPACE(60)的作用是将上一行显示的'
清除掉,然后@R+1,26SAYCH显示新一行的数据
R=R+1是保证dowhile不是死循环
2、从左到右显示"
同志们,要到期末了,努力奋斗吧!
!
两次
s=space(80)+"
+space(40)
fornn1=1to2&
显示两次
fornn2=1to110step2&
110=80+30,30是那个字符串的宽度
@20,0saysubstr(s,nn2,80)
inkey(2,'
H'
)
九、scatter/gather(本节选用的表是学生.dbf)
掌握:
1、scatter是将一条记录的值copy到一个数组中。
(对应一维数组)
copyfromarray则是多条记录拷贝到数组中。
(对应二维数组)
2、scatter和copyfromarray使用数组都可以不先定义,大小系统自己搞定
3、如果事先定义了的话,scatter会自动扩展大小,而copyfromarray则不会
请大家阅读下面两个例题体会:
例1:
将"
江冰"
同学的名字修改成"
姜冰"
locatefor姓名="
iffound()
scattertox&
思考:
数组X应该有多少个单元?
listmemolikex&
显示数组X的单元和值
x
(2)="
gatherfromx
wait
clear
list
else
对不起,没有江冰这个人"
endif
closeall
思考答案:
6个,那个备注型和通用型不算.
当然,上个题改为下例也对:
dimex(4)&
先定义数组X有4个单元
也是6个,那个备注型和通用型不算,虽然定义了四个,但是会自动扩展
例2:
关于copytoarray和appendfromarray
copystrutonew
list
copytoarrayyfields学号,姓名,性别&
数组Y应该是什么样的?
Y(1,2)="
张波"
&
王小平改为了张波"
sele0
usenew
appendfromarrayy
数组Y是:
y(10,3)
另外请分析本程序段的功能。
如果程序改为:
dimey(3,2)
usenew
那么:
数组Y是:
y(3,2)和scatter它们的区别:
不会自动扩展
执行程序观察结果。
看书:
P168页第七题!
!
十、数组
1、排序问题。
2、书:
163-164例4.46-4.47
1、数组的定义
DIMENTION数组名(数值表达式1,[数组表达式2...])
定义后单元默认值为.F.
2、一维数组
(1)、定义一个一维数组:
dimea(10)---定义一个10数组,且所有单元默认值为.F.
(2)、赋值:
例如:
a='
a
(1)=20
a(3)={^2002/09/23}
a(7)=.T.
....
循环赋值:
i=1
dowhilei<
=10
input'
请输入数:
i=i+1
或者是:
toa(i)
(3)、显示值:
a(i)
使用dowhile大家思考
方法2:
3、二维数组
dimes(5,4)
(1)、赋值:
s=0
s(3,4)=.t.
s(12)='
xixi'
.....相当于s(3,4)='
(2)、循环赋值
fori=1to5
forj=1to4
输入值:
toa(i,j)
forj=1to4
a(i,j)+space
(2)
十一、综合题
数据表JY.DBF的内容如下:
Record#借书证号借书日期
1001002/01/99
2000705/04/99
3000602/03/99
4001005/17/99
数据表JYR.DBF的内容如下:
Record#借书证号姓名职称
10006孟小梅教授
20010郑财勇讲师
30007王志军助教
且:
JYR库以借书证号为关键字建立了索引,索引文件为JYR.IDX
程序如下:
USEJYRINDEXJYR
USEJY
SETDEVICETOPRINT
注意:
有了这句话下面显示的结果都会发送到打印机
H=1
DOWHILE.NOT.EOF()
TS=DATE()-借书日期
IFTS>
80
SELECT1
SEEKB.借书证号
100.OR.职称<
>
’教授’
@H,4SAY姓名+’同志,您借的书已过期,请归还’
H=H+1
SELECT2
SETDEVICETOSCREEN
(1)设当前系统日期为06/15/99,程序将打印()还书的信息
A.孟小梅、郑财勇各一行B.孟小梅一行、郑财勇两行
C.孟、郑、王各一行D.孟、郑、王三人共五行
参考答案:
A
(2)高级职称和其它职称借书的最多天数分别是()
A.81天,101天B.100天,80天C.80天,100天D.101天,81天
B
(3)本程序的功能是:
()
A.查询接书证号B.查询借书日期
C.书未还书者D.查询并打印超期未还书者
D
OPENDATABASEemplorer
USEcompen
SCANFORRECNO()<
IF姓名=’李强’
LOOP
姓名,实发工资
ENDSCAN
USE
CLOSEDATABASE
(1)compen是:
A.自由表B.数据库表 C.数据库
D.可能是自由表,也可能是数据库表
答案是D
(2)若数据库有50条记录,则程序的功能是:
A.前10条记录中搜索“李强”的记录B.列出前10条记录
C.每10条记录一屏显示记录,但不显示“李强”的记录
D.列出前10条记录,但是不显示“李强”的记录
(3)循环结束后,指针指向()
A.第1条B.最后一条C.第10条D.最后1条记录加1
答案是D请注意:
scan循环是从第一条做到最后一条,然后在根据for
条件选择处理哪些记录.循环完成后一定EOF()为.t.
另外:
注意区分exit和loop的作用是:
exit退出循环,loop只是结束本次循环
请不能区分的同学下来再问.
请大家注意:
Scan的使用方法,考试很可能要涉及到的
这儿也给大家举例比较一下三种循环操作表:
三种方法实现显示出全部的男生。
------------------------------
使用DOWHILE循环:
DOWHILENOTEOF(