第一题:有计算机等级考试数据库djks.dbf,包括:考号、姓名、性别、年龄和单位等字段;成绩数据库cj.dbf,包括:考号、考场编号、笔试成绩和上机成绩等字段。 请考生编写程序 PROG1.PRG,其功能是其考号、单位、笔试成绩和上机成绩共四个字段。然后在生成的连接数据库中按单位对笔试和上机成绩进行分类汇总,存入数据库qaz.dbf文件中。
参考答案:
SET TALK OFF
CLEAR
SELE B
USE CJ
SELE A
USE DJKS
JOIN WITH B TO CJ1 FOR 考号=B->考号 FIELD ?考号,单位,B->笔试成绩,B->上机成绩
SELE C
USE CJ1
SORT ON 单位 TO CJ2
USE CJ2
TOTAL ON 单位 TO QAZ
USE QAZ
LIST
CLOSE DATABASE
@ 10,30 SAY "再见!"
SET TALK ON
第二题:已有三个数据库:⑴借阅数据库jy.dbf,包括图书编号、借书证号、借书日期和借出天数等字段; ⑵读者数据库dzh.dbf,包括借书证号、姓名、停借否等字段;⑶停借数据库tj.dbf,包括借书证号、姓名等字段。 请考生编写程序 PROG1.PRG,其功能是整理图书借出情况:首先在借阅数据库中用当前日期减去借书日期得出借出天数,然后进行判定处理,凡借书超过60天(不含60天)者,就把读者数据库中的停借否字段置为逻辑真,并在停借数据库中产生一条记录。(注意:假定当前日期为2000年9月1日)
参考答案:
SET TALK OFF
SET CENTURY ON
CLEAR
SELE C
USE TJ
SELE B
USE DZH
REPL ALL 停借否 WITH .F.
SELE A
USE JY
DO WHILE .NOT. EOF()
JSZ=借书证号
REPL 借出天数 WITH DATE()-借书日期
IF 借出天数>60
SELE B
LOCA FOR 借书证号=JSZ
REPL 停借否 WITH .T.
SCATTER TO TJF
SELE C
APPE BLANK
GATHER FROM TJF
SELE A
ENDIF
SKIP
ENDDO
SELE C
LIST
CLOSE ALL
CLEAR ALL
SET TALK ON
第三题:已有数据库data.dbf,其中有data1--data7、最大数、最小数和平均数等字段。 请考生编写程序PROG1.PRG,其功能是按记录求出data1--data7七个数中的最大数、最小数和平均数,并记入数据库的相应字段中,最后把结果输出到data1.dbf文件中。
参考答案:
SET TALK OFF
CLEAR
USE DATA
DO WHILE .NOT. EOF()
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))))))
REPL 最大数 WITH MAX_NUM,最小数 WITH MIN_NUM,平均数 WITH AV_NUM
SKIP
ENDDO
BROW
COPY TO DATA1
USE
SET TALK ON
第四题:已有数据库djks.dbf。请编写程序PROG1.PRG,在程序中首先通过复制djks.dbf生成一个具有考号、 姓名、笔试及上机四个字段的数据库文件aaa.dbf(只有结构),然后再修改其结构,把考号字段改为数值型8个字符宽、姓名字段改为8个字符宽。要求必须使用: copy to <结构文件名> structure extended 和 create <生成库文件名> from <结构文件名>命令实现,使用其它方法不得分
参考答案:
set talk off
clos data
use djks
copy stru to aaa fiel 考号,姓名,笔试,上机
USE AAA
COPY STRU TO BBB EXTENDED
USE BBB
LOCA FOR FIELD_NAME='考号'
REPL FIELD_TYPEWITH 'N',FIELD_LEN WITH 8
LOCA FOR FIELD_NAME='姓名'
REPL FIELD_LEN WITH 8
CREATE AAA FROM BBB
clos data
set talk on
第五题:已有数据库stock.dbf,包括商品号、商品名、单价和数量等字段。请考生编写程序PROG1.PRG,其功能是给该数据库增加一个总额(N, 10.2)字段,并填入数据,其值为数量与单价之乘积,最后把结果复制到stock1.dbf文件中。
参考答案:
SET TALK OFF
CLOSE DATABASE
CLEAR
USE STOCK
COPY STRUCTURE TO STO EXTENDED
USE STO
APPEN BLANK
REPL FIELD_NAMEWITH "总金额",FIELD_TYPE WITH "N",FIELD_LEN ?WITH 10,FIELD_DEC WITH 2
CREATE STOCK1 FROM STO
USE STOCK1
APPE FROM STOCK
REPL ALL 总金额 WITH 数量*单价
LIST
USE
SET TALK ON
第六题:已有计算机等级考试数据库djks.dbf,包括:考号、姓名、笔试成绩、上机成绩和平均成绩等字段,但各成绩字段为空;另有成绩数据库cj.dbf,包括:考号、考场编号、笔试成绩和上机成绩等字段,
考生的考试成绩已录入其中。 请编写程序 PROG1.PRG,要求把考生的考试成绩填写到数据库djks.dbf中,然后再计算笔试和上机成绩的平均成绩,填入各记录的平均成绩字段中。最后生成一个与djks.dbf结构完全相同的不及格数据库bjg.dbf,把平均成绩不及格的考生记录移入不及格库。
参考答案:
SET TALK OFF
SET DELETED OFF
CLEAR
SELE B
USE CJ
SELE A
USE DJKS
INDEX ON 考号 TO DJKS
UPDATE ON 考号 FROM B REPLACE 笔试成绩 WITH B->笔试成绩,上机成绩 ?WITH B->上机成绩 RANDOM
GO TOP
REPLACE ALL 平均成绩 WITH (笔试成绩+上机成绩)/2
COPY TO BJG FOR 平均成绩<60
LIST
USE BJG
LIST
CLOSE DATABASE
SET TALK ON
第七题:请考生编写程序 PROG1.PRG,其功能是计算下列多值函数的值:
┌ABS(x) x<0
├ex 0<=x<1
y=├x2 1<=x<3
└INT(x) x>=3
计算的数据都存放在数据库shj.dbf中,该数据库只有两个字段:X(N,4.1)和Y(N,6.4)。在程序中读取字段X的数据,然后把计算结果存放在字段Y中, 最后把shj.dbf所有记录复制到shj1.dbf文件中
参考答案:
SET TALK OFF
USE SHJ
do while .not. eof()
X1=X
DO CASE
CASE X1<0
Y1=ABS(X1)
CASE X1>=0 .AND. X<1
Y1=EXP(X1)
CASE X>=1 .AND. X<3
Y1=X1*X1
OTHERWISE
Y1=INT(X1)
ENDCASE
REPLACE Y WITH Y1
SKIP
enddo
LIST
COPY TO SHJ1
CLOSE DATABASE
SET TALK ON
第八题:请考生编写程序 PROG1.PRG,其功能是计算数学公式:
S=1-1/3!+1/5!-1/7!+1/9!-1/11!+...-1/(2n-1)!n
值存放在数据库shj.dbf中,该数据库只有两个字段:N(n,2.0)和S(n,17.15)。执行程序时到数据库中逐个读取N值,再把计算结果存放在S字段中, 最后把shj.dbf所有记录复制到shj1.dbf文件中。
参考答案:
SET TALK OFF
USE SHJ
DO WHILE .NOT. EOF()
STORE N TO NJ2
NJ2=2*NJ2-1
JC=1
S1=0
NJ1=1
NJ3=1
DO WHILE NJ1<=NJ2
jc=jc*nj1
if mod(nj1,2)=1
IF MOD(NJ3,2)=1
S1=S1+(1/jc)
ELSE
S1=S1-(1/JC)
ENDIF
NJ3=NJ3+1
endif
NJ1=NJ1+1
ENDDO
REPLACE S WITH S1
SKIP
ENDDO
COPY TO SHJ1
CLOSE DATABASE
SET TALK ON
第九题:有计算机等级考试成绩数据库cj.dbf,包括考号、笔试成绩和上机成绩等字段,其中考号的前两位是单位编码;还有统计数据库tj.dbf,包括单位编码、笔试平均分、上机平均分、笔试最高分、上机最高分等字段。 请编写程序 PROG1.PRG,其功能是:按单位进行各项统计,结果存于统计数据库tj.dbf的相应字段中。
参考答案:
SET TALK OFF
SET SAFETY OFF
CLOSE DATABASE
CLEAR
SELE 2
USE TJ
ZAP
SELE 1
USE CJ
SORT ON 考号 TO CJ1
USE CJ1
DO WHILE .NOT. EOF()
STORE 0 TO BS1,SJ1,BSMAX,SJMAX
DWCODE=SUBSTR(考号,1,2)
N1=0
BSMAX=笔试成绩
SJMAX=上机成绩
DO WHILE 考号=DWCODE
IF 上机成绩>SJMAX
SJMAX=上机成绩
ENDIF
IF 笔试成绩>BSMAX
BSMAX=笔试成绩
ENDIF
BS1=BS1+笔试成绩
SJ1=SJ1+上机成绩
N1=N1+1
SKIP
ENDDO
SELE 2
APPEND BLANK
REPLACE 单位编码WITH DWCODE,笔试平均分 WITHBS1/N1,上机平均分 WITH ;
SJ1/N1,笔试最高分 WITH BSMAX, 上机最高分 WITH SJMAX
SELE 1
ENDDO
SELE 2
LIST
CLOSE DATABASE
SET TALK ON
SET SAFETY ON
第十题:已有计算机等级考试数据库djks.dbf,包括:考号、姓名、笔试成绩、上机成绩和平均成绩等字段,其中考号的前两位是单位代码;另有单位数据库dw.dbf,包括:单位代码、单位名称、人数和总平均分等字段。 请编写程序 PROG1.PRG,要求先在djks.dbf数据库中计算各位考生的平均成绩,并填入平均成绩字段中。然后按单位统计人数及总平均分,记入dw.dbf数据库的相应字段中,最后把dw.dbf所有记录复制到dw1.dbf文件中。
参考答案:
SET TALK OFF
SELE 2
USE DW
SELE 1
USE DJKS
DO WHILE .NOT. EOF()
REPLACE 平均成绩 WITH (笔试成绩+上机成绩)/2
SKIP
ENDDO
SORT ON 考号 TO DJKS1
USE DJKS1
DO WHILE .NOT. EOF()
DW1=SUBSTR(考号,1,2)
STORE 0 TO PEOPLE,AV_SCOR
DO WHILE SUBSTR(考号,1,2)=DW1
AV_SCOR=AV_SCOR+平均成绩
PEOPLE=PEOPLE+1
SKIP
ENDDO
SELE 2
LOCA FOR 单位代码=DW1
REPL 人数 WITH PEOPLE,总平均分 WITH AV_SCOR/PEOPLE
SELE 1
ENDDO
SELE 2
COPY TO DW1
LIST
CLOSE DATABASE
SET TALK ON