VFP程序改错.docx
《VFP程序改错.docx》由会员分享,可在线阅读,更多相关《VFP程序改错.docx(97页珍藏版)》请在冰豆网上搜索。
VFP程序改错
*题目:
表XSDA.DBF结构为:
学号(C,6),姓名(C,6),性别(C,2),入学成绩(N,6,2)。
本程序复制表XSDA的记录到表XS1中,在表XS1中查找入学成绩550分以上的同学,将其删除并浏览XS1的内容。
SETTALKOFF
USEXSDA
**********FOUND**********
COPYSTRUCTURETOXSDA
USEXS1
**********FOUND**********
LOCATEALL入学成绩>=550
DOWHILEFOUND()
DELETE
**********FOUND**********
LOOP
ENDDO
PACK
BROW
USE
SETTALKON
答案:
1).COPY★TO★XS1
2).★LOCATE★ALL★FOR入学成绩>=550或★LOCATE★ALL★FOR550★<=入学成绩
3).CONTINUE
*题目:
输入10,计算s=1+1+2+1+2+3+...+1+2+3+4+...+10
*请在屏幕上输出结果。
settalkoff
clear
***********FOUND**********
s=p=0
fori=1to10
***********FOUND**********
p=p-i
s=s+p
endf
***********FOUND**********
?
"p=",p
答案:
1).store★0★to★s,p或store★0★to★p,s
2).p=★p★+★i或p=i★+★p
3).?
★"★s=★",s或?
★s或?
★"p=",★s
*题目:
已有数据库dat.dbf,其中有data1--data7、最大数、最小数和平均数等字段。
请考生编写程序MODI1.PRG,其功能是按记录求出data1--data7七个数中的最大数、最小数和平均数,并记入数据库的相应字段中,最后把结果输出到data1.dbf文件中
SETTALKON
SETTALKOFF
CLEAR
USEDAT
***********FOUND**********
DOWHILEFOUND()
AV_NUM=(DATA1+DATA2+DATA3+DATA4+DATA5+DATA6+DATA7)/7
MAX_NUM=MAX(DATA1,MAX(DATA2,MAX(DATA3,MAX(DATA4,MAX(DATA5,MAX(DATA6,DATA7))))))
MIN_NUM=MIN(DATA1,MIN(DATA2,MIN(DATA3,MIN(DATA4,MIN(DATA5,MIN(DATA6,DATA7))))))
***********FOUND**********
REPLALL最大数WITHMAX_NUM,最小数WITHMIN_NUM,平均数WITHAV_NUM
***********FOUND**********
cont
ENDDO
COPYTODATA1
usedata1
list
USE
SETTALKON
答案:
1).DO★WHILE★.NOT.★EOF()
2).RE★PL最大数★WITH★MAX_NUM,最小数★WITH★MIN_NUM,平均数★WITH★AV_NUM
3).SKIP
*题目:
给定程序MODI1.PRG的功能是:
选择最小号空闲区,若最小号空闲区号大于1,说明系统当前已有工作区被占用,在这种情况下,测试最小号空闲工作区的前一个工作区打开的数据库文件名,该数据库的字段数和记录数。
注:
假设字段数和记录数均小于10。
SETTALKOFF
SELECT1
USEDB2
SELECT2
USEDB1
***********FOUND**********
selectX
A=SELECT()
?
A
WAIT
IFA>1
SELECT(A-1)
FILENAME=ALIAS()
***********FOUND**********
SUMFIELDTOfnum
***********FOUND**********
SUMTORECNUM
CLEAR
@6,6SAY"在"+STR((A-1),1)+"区中已经打开了:
"+FILENAME
@7,6SAY"该数据库中的字段数是:
"+STR(FNUM,1)
@8,6SAY"该数据库中的记录数是:
"+STR(RECNUM,1)
ENDIF
CLOSEDATA
SETTALKON
RETURN
答案:
1).SELECT★0
2).store★fcount()★to★fnum或FNUM★=★FCOUNT()
3).counttorecnum
*题目:
STUDENT.DBF是一个学生信息文件,包含学号(C8)、姓名(C8)、性别(C2)、政治面目(C4)、班级(C5)等字段;其中性别用字符串"男"或"女"表示,政治面目用字符串"党员"、"团员"或"群众"表示。
程序MODI1.PRG的功能是:
显示输出所有政治面目为"群众"的男生姓名和班级。
settalkoff
clear
USESTUDENT
LOCATEFOR政治面目="群众"
***********FOUND**********
DOWHILE.not.FOUND()
IF性别="女"
CONTINUE
***********FOUND**********
break
ENDIF
?
姓名,班级
***********FOUND**********
skip
ENDDO
USE
SETTALKON
答案:
1).DO★WHIL★EFOU★ND()
2).LOOP
3).CONTINUE
*题目:
有结构相同的三个班学生数据库STD1.DBF、STD2.DBF、STD3.DBF。
其中学号的前两位是学生所在班级号。
一个统计数据库TJ.DBF,其结构包括七个字段:
班级C
(2)、男、女、党员、团员、群众、少数民族,后六个均为数值型字段N(3,0)。
请编写统计程序MODI1.PRG,按班对学生数据进行的性别、政治面目和民族统计,并将统计结果存放到TJ.DBF中。
(不得修改学生数据库)
settalkoff
sele1
usestd1
sele2
usestd2
sele3
usestd3
sele4
usetj
zap
sele1
***********FOUND**********
banji=学号
countallfor性别="男"toman
countallfor性别="女"towoman
countallfor民族<>"汉"tominzu
countallfor政治面目="党员"todangyuan
countallfor政治面目="团员"totuanyuan
countallfor政治面目="群众"toquanzhong
sele4
appeblan
repl班级withbanji,男withman,女withwoman,党员withdangyuan,团员withtuanyuan,群众withquanzhong,少数民族withminzu
sele2
banji=left(学号,2)
countallfor性别="男"toman
countallfor性别="女"towoman
countallfor民族<>"汉"tominzu
countallfor政治面目="党员"todangyuan
countallfor政治面目="团员"totuanyuan
countallfor政治面目="群众"toquanzhong
sele4
appeblan
repl班级withbanji,男withman,女withwoman,党员withdangyuan,团员withtuanyuan,群众withquanzhong,少数民族withminzu
***********FOUND**********
sele1
banji=left(学号,2)
countallfor性别="男"toman
countallfor性别="女"towoman
countallfor民族<>"汉"tominzu
countallfor政治面目="党员"todangyuan
countallfor政治面目="团员"totuanyuan
countallfor政治面目="群众"toquanzhong
sele4
***********FOUND**********
appe
repl班级withbanji,男withman,女withwoman,党员withdangyuan,团员withtuanyuan,群众withquanzhong,少数民族withminzu
closedatabase
settalkon
return
答案:
1).banji=★left★(学号,2)或banji=★subs★(学号,1,2)或banji=★'01'
2).sele★3或sele★c
3).appe★blank
*题目:
分别统计化学系的男、女生总人数并显示出来。
USEXSDB
STOR0TORS1,RS2
***********FOUND**********
FINDFOR系别="化学"
DOWHILE.NOT.EOF()
***********FOUND**********
IF性别<>"男"
RS1=RS1+1
ELSE
RS2=RS2+1
ENDIF
CONT
ENDDO
?
"男生人数=",RS1
?
"女生人数=",RS2
USE
答案:
1).LOCATE★FOR★系别★=★"化学"或LOCATE★ALL★FOR★系别★=★"化学"或LOCATE★FOR★系别★=★[化学]或LOCATE★ALL★FOR★系别★=★[化学]
2).IF性别★=★"男"或IF性别<>★"女"或IF性别★#★"女"或IF性别★=★[男]或IF性别<>★[女]或IF性别★#★[女]
*题目:
有如下数据库文件:
ZY.DBF:
职员号N(3,0),姓名C(6),性别C
(2),职务C(10);DD.DBF:
订单号N(3,0),客户号N(3,0),职员号N(3,0),签订日期D(8),金额N(6,2)。
给定程序MODI1.PRG的功能是:
根据客户号查询该客户的有关订单信息,结果按订单金额降序排序,并显示这些定单的总金额。
修改并调试该程序,使之正确运行。
SETTALKOFF
SETSAFETYOFF
SELECT1
USEzy
INDEXON职员号TOzyi
SELECT2
USEdd
INDEXON-金额TOddi
***********FOUND**********
SETRELATIONON-金额TOA
DOWHILE.T.
CLEAR
KH=202
?
"请输入客户号:
",kh
?
LOCATEFOR客户号=kh
***********FOUND**********
IF.NOT.EOF()
?
"没有该客户!
"
ELSE
?
"订单号"+"职员"+SPACE(5)+"签订日期"+"金额"
?
s=0
DOWHILE!
EOF()
?
STR(订单号,3)+SPACE(5)+A->姓名+SPACE(5)+DTOC(签订日期)+""+STR(金额,6,2)
***********FOUND**********
s=金额
CONTINUE
ENDDO
?
?
"总金额为:
"+STR(s,8,2)
ENDIF
?
WAIT"继续查询吗(Y/N)?
"TOp
IF!
UPPER(p)="Y"
EXIT
ENDIF
ENDDO
CLOSEDATA
SETSAFETYON
SETTALKON
答案:
1).SET★RELA★TO★职员号★INTO★A或SET★RELA★TO★职员号★INTO★zy
2).IFEOF()或IF★.NOT★.FOUND()
3).s=★s+金额或s=金额★+s或STOR★s+金额★TO★s或STOR★金额+s★TO★s
*题目:
在XSDB.DBF中查找学生徐秋实的记录,如果找到则将该记录的系别、姓名,两科科目名称和对应的成绩显示在屏幕上,否则显示:
"查无此人!
"。
USEXSDB
***********FOUND**********
FINDFOR姓名="徐秋实"
IF.NOT.FOUND()
?
"查无此人!
"
ELSE
***********FOUND**********
?
系别,姓名,"计算机="+计算机,"英语="+英语
ENDIF
USE
RETURN
答案:
1).LOCATE★FOR★姓名="徐秋实"或LOCATE★ALL★FOR★姓名="徐秋实"或LOCATE★FOR★姓名=[徐秋实]或LOCATE★ALL★FOR★姓名=[徐秋实]
2).?
系别,姓名,"计算机="+★STR★(计算机),"英语="+★STR★(英语)或?
系别,姓名,"计算机=★",计算机,"英语=★",英语或?
系别,姓名,"计算机="+★STR★(计算机,3),"英语="+★STR★(英语,3)或?
系别,姓名,[计算机=]+★STR★(计算机),[英语=]+★STR★(英语)或?
系别,姓名,[计算机=★],计算机,[英语=★],英语或?
系别,姓名,[计算机=]+★STR★(计算机,3),[英语=]+★STR★(英语,3)
*题目:
STUDENT.DBF是一个学生信息文件,其中包含学号(C8)、姓名(C8)等字段,而且已按学号建立了索引,索引文件名是STUDENT.IDX;文件SCORE.DBF是成绩文件,其中包含学号(C8)、课程名(C20)、成绩(N5.1)等字段,而且已按课程名建立了索引,索引文件名是SCORE1.IDX。
程序MODI1.PRG的功能是:
显示输出选修"数据结构"课程的学生姓名和成绩,每个成绩输出一行,包括学生的姓名和成绩;
settalkoff
clear
SELECT3
USESTUDENTINDEXSTUDENT
SELECT4
USESCOREINDEXSCORE1
SEEK"数据结构"
***********FOUND**********
DOWHILE!
EOF()
SELECTSTUDENT
***********FOUND**********
SEEK学号
?
姓名+":
"
SELECTSCORE
?
?
成绩
***********FOUND**********
next1&&
ENDDO
CLOSEDATA
SETTALKON
答案:
1).DO★WHILE★课程名="数据结构"
2).SEEK★SCORE->学号或SCORE.学号或D->学号或D.学号
3).skip
*题目:
将200到300之间的所有能被3整除或被5整除的数求和并统计个数。
STORE0TOS,C
I=200
DOWHILEI<=300
***********FOUND**********
IFINT(I/3)=INT(I/5)
S=S+I
***********FOUND**********
C=C+I
ENDIF
I=I+1
ENDDO
?
"200到300之间的所有能被3整除或被5整除的数之和="+STR(S,6)
?
"200到300之间的所有能被3整除或被5整除的数的个数="+STR(C,6)
答案:
1).IFINT(I/3)★=I/3★.OR.★INT(I/5)=★I/5或IFMOD(I,3)=0★.OR.★MOD(I,5)=0或IFINT(I/5)=I/5★.OR.★INT(I/3)=I/3或IFMOD(I,5)=0★.OR.★MOD(I,3)=0或IFINT(I/3)=★I/3★OR★INT(I/5)=I/5或IFMOD(I,3)=0★OR★MOD(I,5)=0或IFINT(I/5)=I/5★OR★INT(I/3)=I/3或IFMOD(I,5)=0★OR★MOD(I,3)=0
2).C=★1+C或C=★C+1或STOR★C★+★1★TO★C
*题目:
打开XSDB.DBF数据表,分别统计男、女生的人数。
USEXSDB
STOR0TOB,G
DOWHILE.NOT.EOF()
***********FOUND**********
IF性别<>男
B=B+1
***********FOUND**********
ENDIF
G=G+1
ENDIF
SKIP
ENDDO
?
"男生人数是:
"+STR(B)
?
"女生人数是:
"+STR(G)
答案:
1).IF性别★=★"男"或IF性别<>★"女"或IF性别★#★"女"或IF性别★=★[男]或IF性别<>★[女]或IF性别★#★[女]
2).ELSE
*题目:
该程序完成口令检验功能。
输入三次不正确退出。
SETTALKOFF
CLEAR
ass1="AbCdEf"
TT=1
DOWHILETT<4
@10,20SAY"请输入口令:
"
SETCONSOLEOFF
ACCEPTTOass
SETCONSOLEON
**********FOUND**********
IFass1=ass
CLEAR
?
"欢迎使用本系统!
"
**********FOUND**********
LOOP
ELSE
**********FOUND**********
TT=TT-1
CLEAR
?
"口令错,按任意键再输入一次!
"
WAIT""
ENDIF
ENDDO
RETURN
答案:
1).IFUPPER(ass1)==UPPER(ass)或IF★UPPER★(ass1)★==★UPPER★(ass)
2).EXIT
3).TT=★TT★+★1或TT=★1+TT
*题目:
打印由数字组成的图形,要求第一行空10个空格打印5个1,第二行空11个空格打印5个2…,图形如下:
*11111
*22222
*33333
*44444
*55555
CLEA
FORI=1TO5
***********FOUND**********
?
SPAC(9-I)
FORJ=1TO5
***********FOUND**********
?
?
STR(J,1)
ENDFOR
ENDFOR
答案:
1).?
SPAC★(9+I)或?
SPACE★(9+I)
2).?
?
STR★(I,1)
*题目:
从键盘上输入5个数,将其中奇数求和,偶数求积。
S1=0
***********FOUND**********
S2=0
FORI=1TO5
INPUT"请输入第"+STR(I,1)+"数"TOM
***********FOUND**********
IFINT(M/2)=0
S1=S1+M
ELSE
S2=S2*M
ENDIF
ENDFOR
?
"奇数和是",S1或?
"奇数和是",S1
?
"偶数积是",S2或?
"偶数积是",S2
答案:
1).S2=1或STOR1TOS2
2).IFMOD(M,2)<>0或IFMOD(M,2)#0或IFINT(M/2)★<>★M/2或IFINT(M/2)★#★M/2
*题目:
现已有两个数据库文件ZG.DBF和DW.DBF。
给定程序MODI.PRG的功能是:
显示两个数据库文件中职工号一样的相应记录的相关信息。
SETTALKOFF
SETSAFETYOFF
CLEAR
SELECT1
USEDW
SELECT2
USEZG
***********FOUND**********
INDEXON职工号INTOZGH
SELE1
***********FOUND**********
SETRELATIONON职工号INTOB
LOCATEFOR职工号=B->职工号
DOWHILEFOUND()
DISPLAY职工号,姓名,B->基本工资,单位,性质
***********FOUND**********
SKIP
ENDDO
CLOSEDATABASE
RETURN
案:
1).INDE★ON★职工★号TO★ZGH或INDE★TO★Z★GHON★职工号
2).SET★REL★ATO★职工号★INTO★B或SET★RELA★TO★职工号★INTO★ZG
3).CONT
*题目:
将s所指字符串中出现的、t1所指子串全部替换成t2所指子字符串,所形成的新串放在s所指的字符串中。
在此处,要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为:
"abcdabfab",t1所指子串中的内容为:
"ab",t2所指子串中的内容为:
"99"时,结果,在w所指的数组中的内容应为:
"99cd99f99"。
settalkoff
clear
s="abcdabfab"
t1="ab"
t2="99"
p=""
i=1
***********FOUND**********
dowhilei=len(s)-3
ift1=subs(s,i,2)
***********FOUND**********
s=stuff(s,i,2,t1)
endif
***********FOUND**********
skip
endd
?
"s=",s
答案:
1).do★while★i<★=len(s)-★1或do★while★i<★=len(s)或do★while★i<★len(s)
2).s=stuff(s,i,2,★t2)
3).i=i+1或i=1+i
*题目:
已有数据库stuck.dbf,包括商品号、商品名、单价和数量等字段。
请考生编写程序modi1.PRG,其功能是给该数据库增加一个总额(N,10.2)字段,并填入数据,