《VFP习题答案(第二版).doc》由会员分享,可在线阅读,更多相关《VFP习题答案(第二版).doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Visual Foxpro 程序设计与应用教程(第二版)部分习题参考答案 (蒋望东整理,如您发现有遗漏及错误,或您有补充,请告知 hncsjwd,谢谢!)第2章第53页5题答案(1) x-int(x)(2) y%4= 0 and y%100!=0 or y%400= 0或 mod(y,4)=0 and mod(y,100)!=0 or mod(y,400)=0(3) x%3=2 and x%5=3(4) sin(pi()/6)+sqrt(x+y)/(x-y)(5) date() 1997-06-30第53页6题答案(1) mod(员工编号,2)=1 and 婚否=.F.(2) left(联系电
2、话,4)=0731 and 性别=男(3) year(date() year(工作日期)15 or 工资级别10(4) left(姓名,2)=”张” and 部门名称=人事处(5) between(工作日期 ,2005-10-01,2008-01-01 ) and工资级别2005-10-01 and工作日期2008-01-01 and工资级别3第3章第85页第2题1、go 2list next 32、list for 性别=男3、list for性别=女 and 部门=”技术”4、list for 出生日期 1975-01-01或 list for year(出生日期) 19755、list
3、all fields 编号,部门,姓名,职称6、go 3 list rest for 性别=”女”7、list for right(编号,1)=”8” and 婚否=.T.8、list for substr(编号,2,1)=”3”9、browse fields 姓名,部门,出生日期,职称 for 性别=”男”10、(见P72 例3.22) browse fields编号,姓名,性别,职称partition 30 redit第85页第3题1、copy to zgqk12、use zgqkcopy structure to zgqk2use zgqk2list structure3、Use zgq
4、k copy to zgqk3 for year(出生日期)19754. use zgqkcopy to zgqk4 fields 姓名,部门,出生日期,简历5. use zgqkcopy to zgqk.txt sdfuse zgqk2append from zgqk.txt sdf第85页第4题1、 go 2 append blank replace 编号 with “05060” .2、 delete record 2delete record 5或 go 2 delete go 5 delete或 delete for recno()=2 or recno()=53、 go 2reca
5、llpack或 recall record 2pack或 recall for recno()=2 pack4、use zgqk1 dimention aa(10)scatter to aa memoaa(5)=1985-07-01aa(9)=”该职工评为先进个人”gather from aa memo5、use zgqk1zap append from zgqk第85页第5题使用SQL语句修改:(参考教材P126) alter table BF2 alter column 部门 char(8) alter table BF2 rename column编号 to 职工编号alter tabl
6、e BF2 alter column 职工编号 char(6) alter table BF2 add column 职务 char(8) select 职工编号,部门,姓名,性别,出生日期,婚否,职务,工作日期,职称,简历,照片 from BF2 into table BF_tempdelete file BF2.dbfrename BF_temp.dbf TO BF2.dbf alter table BF2 drop column 职称或者使用Visual Foxpro表扩展结构修改语句修改:先将表文件 BF2.dbf 的扩展结构拷贝为BF2_struc.dbfuse BF2.dbfCOP
7、Y STRUCTURE EXTENDED TO BF2_struc.dbfBF2_struc.dbf 的结构如下:BF2_struc.dbf 的内容如下所示:(此处以 员工表.dbf 的为例) use BF2_struc.dbf replace field_len with 8 for field_name =”部门”CREATE BF_temp FROM BF2_strucuse BF_temp.dbfAppend from BF2.dbfDELETE FILE BF2.dbfrename BF_temp.dbf TO BF2.dbfclose all use BF2_struc.dbf r
8、eplace field_name with ”职工编号” for field_name =” 编号”replace field_len with 6 for field_name =” 职工编号”CREATE BF_temp FROM BF2_strucuse BF_temp.dbfAppend from BF2.dbfDELETE FILE BF2.dbfrename BF_temp.dbf TO BF2.dbfclose all use BF2_struc.dbf locate for field_name =”婚否”insert blankreplce field_name with
9、”职务”replce field_type with ”C”replce field_len with 8CREATE BF_temp FROM BF2_strucuse BF_temp.dbfAppend from BF2.dbfDELETE FILE BF2.dbfrename BF_temp.dbf TO BF2.dbfclose all use BF2_struc.dbf locate for field_name =”职称”deletepackCREATE BF_temp FROM BF2_strucuse BF_temp.dbfAppend from BF2.dbfDELETE F
10、ILE BF2.dbfrename BF_temp.dbf TO BF2.dbfclose all第4章(第103页2-7题答案)2、use ZGQK.dbfsort to 员工出生日期排序表 on 出生日期use ZGQK.dbfsort to 已婚男员工表 on 工作日期 for 性别=”男” and 婚否=.T.3、use ZGQK.dbfindex on 部门 to ssuse ZGQK.dbfindex on 部门+str(date()-工作日期) descending tag br of bnrquse ZGQK.dbfindex on 职称+str(date()-工作日期) de
11、scending tag zzcrquse ZGQK.dbfindex on 部门 aescending unique tag bms use ZGQK.dbfset index to ss,bnrqset order to 1listset order to br of bnrqlistset order to zcrqlistset order todelete file ss.idxdelete tag br of bnrqdelete tag zcrq 4、use ZGQK.dbflocate for 部门=”人事”display如果还有记录 ,可重复使用这三条命令continue?f
12、ound()displayuse ZGQK.dbfindex on 编号 to ygbhfind 02018?found()displayuse ZGQK.dbfINDEX ON 职称=工程师 AND 婚否=.T. TAG ZCFF SEEK .T. ?FOUND() DISPLAY5、use ZGQK.dbfCOUNT ALL FOR 部门=供销 to pub1 COUNT ALL FOR 部门=技术 to pub2COUNT ALL FOR 部门=财务 to pub3COUNT ALL FOR 部门=人事 to pub4 COUNT TO pub56、use ZGQK.dbf AVERAG
13、E YEAR(DATE( )-YEAR(出生日期) TO yg AVERAGE YEAR(DATE( )-YEAR(出生日期) TO ygrs for 部门=”人事”7、alter table ZGQK.dbf add column 工作年限 integeruse ZGQK.dbfreplace all工作年限 with YEAR(DATE( )-YEAR(工作日期) TOTAL TO 分类汇总员工总工作年限表 ON 部门 Fields 工作年限 第6章第147页1-2题答案1、CREATE TABLE 学生表(学号 CHAR(8),姓名 CHAR(8),性别 CHAR(2),出生日期 DAT
14、E)ALTER TABLE 学生表 ADD 联系电话 CHAR(16)ALTER TABLE 学生表 DROP COLUMN 联系电话INSERT INTO 学生表 VALUES(,李进,男,1990-01-30)UPDATE 学生表 SET 姓名=李竞 WHERE 学号=DELETE FROM 学生表 WHERE 性别=男2、select * from 员工表 where year(工作日期) “Z”) OR (a “A”) ? “输入字母错误! ” SET TALK ON RETURNENDIFa= LOWER(a)? 转换结果为: , aSET TALK ONRETURN 6、根据员工的
15、编号来来员工的电话号码和部门编号SET TALK OFFUSE 员工表ACCEPT “请输入员工编号” TO aLOCATE FOR 员工编号=aIF FOUND() & 条件FOUND()为真表示存在此员工4,10 say “请修改该员工的电话号码:” get 电话号码6,10 say “请修改该员工的部门编号:” get 部门编号readELSE & 条件FOUND()为假表示不存在此员工 ?“查无此人!”ENDIFUSE SET TALK ONRETURN7、假定有表XYZ.DBF ,有3个字段,10条记录,试编写程序将表中第一线条记录与第三条记录内容互换。参考教材P8182例题写操作命
16、令,编程如下:use xyz.dbfdimension rec(3)go 4scatter to recgo 6insert blankgather from recgo 6scatter to recgo 4insert blankgather from recdelete for recno()=4 or recno()=7pack8、输入一个年份,判断其是否是闰年SET TALK OFFCLEARINPUT 请输入一个年份 TO aIF (a%4=0 and a%100 !=0 ) OR (a % 400 =0) ? “这是一个闰年! ”ELSE ? “这不是一个闰年! ”ENDIFSE
17、T TALK ONRETURN9、输入一个学生成绩,判断学生成绩的等级。假设成绩等级划分为3等:0,59 为不及格,60,79为合格,80,100为优。 SET TALK OFFCLEARINPUT “请输入学生成绩” TO pIF p60 ? “不及格” ELSE IF p100) OR ( P0) ? 输入的成绩有误,请重新输入ELSE DO CASE CASE P60 ? 不及格 CASE P79 ? 合格 OTHERWISE ? 优秀 ENDCASEENDIFRETURN10、从键盘输入10个数,求最小数和最大数。SET TALK OFFCLEARDIME A(10)I=1DO WHI
18、LE IMAXMAX=A(I)ENDDIFIF A(I)姓名,部门名称 FOR A-职称=教授13、编程计算11000内的所有奇数的平方和。SET TALK OFFCLEARI=1S=0DO WHILE I1000 to sum1sum 水电费 for 基本工资1000 to sum2?” 基本工资在1000元以上的水电费总数是:”+sum1?” 基本工资在1000元以下的水电费总数是:”+sum2use17、有一只猴子一天从山上摘来一堆桃子,从这天开始,它每天都要吃掉其中的一半,然后再从剩下的桃中拿出一个解谗,等到第10天,它发现只有一只桃可吃啦,问猴子总共摘了多少个桃子。clearset
19、talk offdays=10 &10天tz=1 &最后一天桃数为1for i=days-1 to 1 step -1 &从倒数第2天开始倒推 tz=(tz+1)*2 &第i天的桃数为第i-1天的一半减1endfor?” 猴子总共摘了”,tz,”个桃子”RETURN18、编写一个求素数的子程序,然后通过调用该子程序求100以内所有素数。*子程序 PRIME.prg , 判断n是否是素数PARAMETERS N, FLAGK=INT(SQRT(N)J=2DO WHILE J=K AND FLAG IF MOD(N,J)=0 FLAG=.F. ENIF J=J+1ENDDORETURN*主程序 m
20、ain.prg调用该函数求100内的全部素数。CLEARFOR M=2 TO 100 FLAG=.T. Do PRIME with M IF FLAG ?M ENDIFENDFOR19、编写一个求素数的自定义函数,然后通过调用该自定义函数求100200以内所有素数。*此子程序判断n是否是素数FUNCTION PRIMEPARAMETERS NFLAG=.T.K=INT(SQRT(N)J=2DO WHILE J=K AND FLAG IF MOD(N,J)=0 FLAG=.F. ENIF J=J+1ENDDORETURN FLAG*main.prg调用该函数求100200内的全部素数。CLEAR
21、FOR M=100 TO 200 IF PRIME(M) ?M ENDIFENDFOR20、(1)clearset talk offfor i=1 to 5 ?space(5-i) for j=1 to i ?* endforendforset talk onreturn(2)clearset talk offfor i=1 to 5 ?space(i) for j=5to i step -1 ?*+space(1) endforendforset talk onreturn(3)clearset talk offfor i=1 to 5 ? for j=1 to i ?* endforendforset talk onreturn或者是:clearset talk offfor i=1 to 5 ?space(5-i) for j=1 to i ?*+space(1) endforendforset talk onreturn(4)clearset talk offfor i=1 to 5 ?space(5-i) for j=1 to 5 ?* endforendforset talk onreturn
限制150内