z=x*x+2*x*y+y*y
casex=y
z=x+y
otherwise
z=x-y
endcase
?
'z=',z
return
3)settalkoff
input'x='tox
docase
casex<=500
t=x*0.05
casex<=2000
t=500*0.05+(x-500)*0.1
otherwise
t=500*0.05+1500*0.1+(x-2000)*0.15
endcase
?
'税金为:
',str(t,6,2)
return
《实习教程》第13单元循环结构的程序设计(参考答案)
1.编写一程序,计算S=1/2+1/2^2+1/2^3+…+1/2^N,其中N由用户输入。
(保留小数点后5位)
利用程序分别计算N=5,10和20时,S的值。
settalkoff
s=0.00000
i=1
input'n='ton
dowhilei<=n
s=s+1/2^i
i=i+1
enddo
?
's=',s
return
2.在数据表ZGGZ.DBF中,循环查找和显示所有1970年以前出生的职工记录。
settalkoff
usezggz
locateforyear(出生日期)<1970
dowhilefound()
display
continue
enddo
return
3.利用循环编程计算ZGGZ.DBF中男职工的平均工资。
settalkoff
usezggz
s=0
n=0
dowhilenoteof()
if性别='男'
s=s+基本工资
n=n+1
endif
skip
enddo
?
'男职工平均工资为:
',str(s/n,6,2)
return
4.利用SCAN语句编写第2题的程序。
settalkoff
usezggz
scanforyear(出生日期)<1970
display
endscan
return
5.利用SCAN语句编写第3题的程序。
settalkoff
usezggz
s=0
n=0
scanfor性别='男'
s=s+基本工资
n=n+1
endscan
?
'男职工平均工资为:
',str(s/n,6,2)
return
6.设一个班有10名学生,循环输入每个学生的分数(百计分),统计并显示各分数段的人数。
其中分数段的划分如下:
90分以上,80~89分,70~79分,60~69分,60分以下。
settalkoff
store0ton1,n2,n3,n4,n5
i=1
dowhilei<=10
input'输入分数:
'tox
docase
casex>=90
n1=n1+1
casex>=80
n2=n2+1
casex>=70
n3=n3+1
casex>=60
n4=n4+1
otherwise
n5=n5+1
endcase
i=i+1
enddo
?
'90分以上人数:
',n1
?
'80--89分人数:
',n2
?
'70--79分人数:
',n3
?
'60--69分人数:
',n4
?
'60分以下人数:
',n5
return
7.编写一个二重循环程序,显示如下的乘法口诀表。
settalkoff
i=1
dowhilei<=9
j=1
dowhilej<=i
?
?
str(i,2)+'*'+str(j,1)+'='+str(i*j,2)
j=j+1
enddo
?
i=i+1
enddo
return
《VisualFoxPro程序设计实习教程与习题集》
《实习教程》第8单元数据表的索引(参考答案)
1.在数据表ZGGZ.DBF的结构复合索引文件中,建立如下的索引项:
usezggz
1)按“姓名”索引,索引标记为XM,并显示结果。
indexon姓名tagxm
list
2)按“职务”索引,索引标记为ZW,并显示结果。
indexon职务tagzw
list
3)按“出生日期”的降序索引,索引标记为CSRQ,并显示结果。
indexon出生日期tagcsrq
list
4)按“性别”和“职务”索引,索引标记为XBZW,并显示结果。
indexon性别+职务tagxbzw
list
5)按“职务”和“出生日期”索引,索引标记为ZWCS,并显示结果。
indexon职务+dtoc(出生日期,1)tagzwcs
list
6)按“基本工资”和“奖金”索引,索引标记为GZJJ,并显示结果。
indexonstr(基本工资)+str(奖金)taggzjj
list
2.分别设置上述索引项为主控索引。
setordertoxm
setordertozw
setordertocsrq
setordertoxbzw
setordertozwcs
setordertogzjj
《实习教程》第9单元数据表的查找(参考答案)
1.在数据表ZGGZ.DBF中,利用LOCATE命令进行如下顺序查找。
usezggz
1)查找编号为“004”的记录,并显示其编号、姓名和基本工资。
locatefor编号='004'
display编号,姓名,基本工资
2)在第4~8号记录中,查找并显示姓‘郭’的职工记录。
locateforsubstr(姓名,1,2)='郭'andrecno()>=4andrecno()<=8
display
3)顺序查找并显示所有职务为‘科员’的男职工记录。
locatefor职务='科员'and性别='男'
display
continue
display
continue
4)顺序查找并显示所有生日为8号的职工记录。
locateforday(出生日期)=8
display
continue
display
continue
5)查找并显示职务为科员且基本工资大于400元的职工记录。
locatefor职务='科员'and基本工资>400
display
continue
display
continue
2.利用SEEK进行如下的快速查询。
1)查找并显示姓名为“苏平”的职工记录。
setordertoxm
seek'苏平'
display
2)查找并显示出所有职务为“科长”的职工记录。
setordertozw
seek'科长'
display
skip
display
skip
display
skip
display
3)查找并显示男科长的记录。
setordertoxbzw
seek'男科长'
display
3.在数据表ZGGZ.DBF中,进行如下的数据表筛选操作:
1)筛选出65年以前出生的所有职务为“科员”的职工记录,并显示当前记录。
执行GOTOP命令后,再显示当前记录,查看两者的区别。
setfiltertoyear(出生日期)<1965and职务='科员'
display
gotop
display
2)筛选出工资在400~500元之间的职工记录,并显示筛选结果。
setfilterto基本工资>=400and基本工资<=500
list
《实习教程》第10单元数据表的统计(参考答案)
准备:
打开数据表ZGGZ.DBF,以下操作为对该数据表进行。
usezggz
1.分别统计数据表中已婚的男职工和未婚的女职工人数。
countfor婚否and性别='男'
countfornot婚否and性别='女'
2.求出所有男职工的人数和基本工资总额,并分别赋值给CN和SN,利用上述两个内存变量计算出男职工的平均工资。
countfor性别='男'tocn
sum基本工资for性别='男'tosn
?
sn/cn
3.计算所有职务为科长的平均年龄。
averageyear(date())-year(出生日期)for职务='科长'
4.计算所有职工的基本工资和奖金的总金额。
sum基本工资+奖金
《VisualFoxPro程序设计实习教程与习题集》
《实习教程》第1单元VisualFoxPro基本操作(参考答案)
1.利用对其赋值的方法,判定下列字符串是否为合法的内存变量名:
1)执行赋值命令:
X1=3,或STORE3TOX1
系统没有任何错误显示,知X1为合法的内存变量名。
类似地,X_1也为合法的内存变量名,其余为不合法。
2)利用上面的方法可以判定:
变量,变量X,变量1,变量_1为合法内存变量名,其余不合法。
2.计算并显示下面各题的结果:
1)利用函数:
命令:
?
mod(,)
显示:
9
利用运算:
命令:
?
%
显示:
9
2)命令:
X=5.1249
?
min(2^X,X^2)
显示:
26.2646
3)命令:
C1='AB'
C2=SPACE
(2)
C3=str(3.14,5,2)
A1=C1+C2+C3
A2=trim(C1+C2-C3)
?
LEN(A1),LEN(A2)
显示:
9 7
4)命令:
C1=SPACE
(2)
C2="ABC"
C3=SPACE(3)
A1=C1+C2+C3
A2=trim(C1+C2+C3)
A3=ltrim(C1+C2+C3)
A4=alltrim(C1+C2+C3)
?
len(A1,A2,A2,A3,A4
?
len(A1,A2,A2,A3,A4)
?
len(A1),len(A2),len(A3),len(A4)
显示:
8563
5)命令:
A='微型计算机'
?
SUBSTR(A,1,2)+SUBSTR(A,9,2)
显示:
微机
6)命令:
?
date()+10000
显示:
07/11/32(与当天日期有关)
7)命令:
?
date()-{^1997-7-1}
显示:
2794(与当天日期有关)
8)
①.T.
②.T.
3.通过实例体会以下函数的使用:
1)MOD(10,-3)=-2
MOD(-10,3)=2
MOD(-10,-3)=1
2)ROUND(12345.6789,1)=12345.7
ROUND(12345.6789,0)=12346
ROUND(12345.6789,-1)=12350
ROUND(12345.6789,-2)=12300
3)函数STR的第二、三个参数确省的情形:
(2005年5月29日修订)
STR(3.,4,1)='3.1'
STR(3.,4)=' 3'
STR(3.)=' 3’
《实习教程》第2单元数据表的创建及浏览(参考答案)
1.建立如下名称、结构和记录的数据表文件。
(略)
2.利用命令浏览该表的内容,然后关闭该表。
Browse
Use
3.显示当前盘中所有数据表文件的信息。
Dir
4.打开数据工作期窗口,先后:
打开、浏览和关闭该表。
参阅实习范例第5题。
5.利用资源管理器,将数据表ZGGZ.DBF及备注文件复制到A盘保存。
(略)
《实习教程》第3单元数据表的结构操作(参考答案)
1.将数据表ZGGZ.DBF的结构复制到新表ZGGZ1.DBF,且含有编号、姓名和婚否三个字段。
usezggz
copystructuretozggz1fields编号,姓名,婚否
2.利用菜单打开“表设计器”,并对数据表ZGGZ1.DBF的结构作如下修改:
usezggz1
modifystructure
(表设计器操作略)
3.显示修改后的数据表结构。
liststructure (或:
displaystructure)
4.将数据表ZGGZ.DBF的前6个记录中基本工资大于400元的记录复制到新表ZGGZ2.DBF,且仅保留:
编号、姓名、基本工资等3个字段。
usezggz
copytozggz2fields编号,姓名,基本工资forrecno()<7and基本工资>400
5.分别显示ZGGZ2.DBF的结构和浏览其记录。
usezggz2
liststructure
browse
《实习教程》第4单元数据表记录的指针移位(参考答案)
1.顺序执行下面有关记录指针移位的命令,并解释得到的结果。
?
BOF() .F.
?
RECNO() 5
?
RECNO() 3
?
BOF() .F.
?
RECCOUNT()8
《实习教程》第5单元数据表记录的追加(参考答案)
1.将数据表ZGGZ.DBF的结构复制到新的数据表TEMP.DBF,并显示新表的结构。
usezggz
copystructuretotemp
usetemp
liststructure
2.向TEMP.DBF随意追加2条记录,要求输入备注信息。
append
3.将ZGGZ.DBF中所有职务为“科长”的记录追加到TEMP.DBF中,并浏览结果。
appendfromzggzfor职务="科长"
browse
《实习教程》第6单元数据表记录的显示和修改(参考答案)
1.分别用LIST和DISPLAY显示ZGGZ.DBF中所有未婚职工的姓名、婚否和基本工资字段。
usezggz
list姓名,婚否,基本工资fornot婚否
displayall姓名,婚否,基本工资fornot婚否
2.显示ZGGZ.DBF中,1960年1月1日之后出生且基本工资超过400元的职工信息。
listfor出生日期>{^1960/1/1}and基本工资>400
3.显示ZGGZ.DBF中4~8号记录中“王”姓的职工信息。
(提示:
先将记录指针移到第4号记录上。
)
go4
listnext5forsubstr(姓名,1,2)='王'
4.在ZGGZ.DBF的编辑窗口中,对所有女职工的“实发工资”字段进行修改,使得:
实发工资等于基本工资+奖金-扣款。
change
5.利用REPLACE命令对所有男职工的记录完成上述操作。
replace实发工资with基本工资+奖金-扣款for性别='男'
6.利用REPLACE命令为所有职务为科长的奖金增加20元。
replace奖金with奖金+20for职务='科长'
7.利用REPLACE命令为所有职工的基本工资增加10%。
replaceall基本工资with基本工资*1.1
8.利用BROWSE命令,查看上述的替换的结果。
browse
《实习教程》第7单元数据表记录的删除(参考答案)
准备:
将数据表ZGGZ.DBF复制成TEMP.DBF,并打开TEMP.DBF。
usezggz
copytotemp
usetemp
1.对所有的未婚科员记录加删除标记。
deletefor婚否=.f.and职务='科员'
list
2.对基本工资少于400元的记录加删除标记。
deletefor基本工资<400
3.分别在取消遮盖和遮盖带删除标记记录的环境下,显示数据表的记录。
setdeleteoff
list
setdeleteon
list
4.打开BROWSE窗口,利用鼠标单击的方法,练习为记录添加和取消删除标记的操作。
(需在取消遮盖带删除标记记录的环境下操作)
setdeleteoff
browse
5.利用命令取消所有记录的删除标记。
recallall
6.物理删除最后一条记录。
gobottom
delete
pack
7.物理删除1969年及以前出生的职工记录。
deleteforyear(出生日期)<=1969
pack
8.物理删除数据表的所有记录。
zap