四、程序设计(本大题共5小题,每小题5分,共25分)
34.文件star.dbf用于存放演员信息,其字段有sname(姓名,字符型),sex(性别,字符型),knum(演电影数,数值型)。下述程序的功能是:查找演员中演电影最少的人数及其所演的电影部数。完成下述程序。
SET TALK OFF
USE star
IF .NOT. EOF( )
minval=knum
num=0
DO WHILE .NOT. EOF( )
IF knum<=minval
IF knum___(1)____
___(2)____
ENDIF
num=num+1
ENDIF
___(3)____
ENDDO
? STR(num)+STR(minval)
ENDIF
USE
RETURN
(1)
(2)
(3)35.已知数据库文件stud.dbf存放学生成绩,其字段有:xname(姓名,字符型),zcj(总成绩,数值型),xh(学号,字符型),现要求对学生成绩以降序排列。完成下列程序。
SET TALK OFF
USE stud
FOR k=1 TO ____(1)____
GOTO k
SCATTER TO ary
SCAN REST
IF ____(2)____
SCATTER TO xmp
GATHER FROM ary
FOR n=1 TO ____(3)____
ary(n)=xmp(n)
ENDFOR
ENDIF
ENDSCAN
____(4)____
GATHER FROM ary
ENDFOR
USE
SET TALK ON
RETURN
(1)
(2)
(3)
(4)
36.文件player.dbf用于存放球员信息,其字段有:pname(姓名,字符型),position(位置,字符型),goal(得分,数值型)。下述程序的功能是:查找得分最少的所有球员信息。完成下述程序。
SET TALK OFF
USE player
IF .NOT. EOF( )
minval=goal
____(1)____=LTRIM (TRIM(STR(RECNO( )))
SCAN
DO CASE
CASE ____(2)____
minval=goal
rstr=″#″+LTRIM(TRIM(STR(RECNO( ))))
CASE goal=minval
rstr=rstr+″#″+LTRIM(TRIM(STR(RECNO( ))))
ENDCASE
ENDSCAN
LIST FOR AT(″#″+LTRIM(TRIM(STR(RECNO( ))))+″#″,rstr)< >____(3)____
ELSE
?″press.dbf是空的″
ENDIF
USE
RETURN
(1)
(2)
(3)
37.文件lecture.dbf用于存放教师授课信息,其字段有:tname(姓名,字符型),cname(课程名,字符型),tyear(讲授时间,数值型)。下述程序的功能是:接收一个教师姓名,若其信息lecture.dbf中则显示相应信息;重复上述过程,直到接收的教师姓名为’#’时,程序结束。完成下述程序。
SET TALK OFF
USE lecture
SCATTER FIELD tname TO tname MEMVAR BLANK
INDEX ON tname TO leature
DO WHILE ____(1)____
CLEAR
@10,10 SAY ″请输入教师姓名″ GET m.tname
READ
IF LTRIM(TRIM(m.tname))< >′#′
SEEK ____(2)____
IF ____(3)____
LOOP
ENDIF
DISPLAY FOR m.tname=tname
WAIT
ENDIF
ENDDO
USE
RETURN
(1)
(2)
(3)
38.文件newsa.dbf和newsb.dbf具有相同的结构,其字段有:newsp(报刊名称,字符型),price(单价,数值型)。newsa在newsp上建有索引文件newsa.idx,newsb在newsp上建有索引文件newsb.idx,下述程序的功能是:查找在newsa.dbf出现但不在newsb.dbf中出现的报刊名称。
完成下述程序。
SET TALK OFF
SELECT B
USE newsb ALIAS new INDEX newsb
SELECT A
USE newsa ALIAS old INDEX newsa
DO WHILE ____(1)____ .OR..NOT.EOF(″new″)
DO CASE
CASE ____(2)____ .OR..NOT.EOF(″old″).AND.newspnewsp
? newsp
SKIP IN old
CASE EOF(″old″).OR..NOT..EOF(″new″).AND.newsp>new->newsp
____(3)____
OTHER
SKIP
SKIP IN new
ENDCASE
ENDDO
CLEAR ALL
RETURN
(1)
(2)
(3)
五、综合题(本大题共2小题,每小题5分,共10分)
39.说明函数rsum(i)、csum(i)及zsum( )的功能。
SET TALK OFF
SET PROCEDURE TO ulty
DIME ary(3,3)
ary=0
FOR i=1 TO 3
FOR j=1 TO 3
@ 8+2*i,20+15*j GET ary(i,j)
ENDFOR
ENDFOR
READ
FOR i=1 TO 3
? rsum(i),csum(i),zsum( )
ENDFOR
SET PROCEDURE TO
RETURN
文件ulty.prg的内容如下:
FUNCTION rsum
PARAMETER i
PRIVATE msum,j
msum=0
FOR j=1 TO 3
msum=msum+ary(i,j)
ENDFOR
RETURN msum
FUNCTION csum
PARAMETER i
PRIVATE msum,j
msum=0
FOR j=1 TO 3
msum=msum+ary(j,i)
ENDFOR
RETURN msum
FUNCTION zsum
PRIVATE msum,i
msum=0
FOR i=1 TO 3
msum=msum+ary(i,i)
ENDFOR
RETURN msum
rsum的功能是:
csum的功能是:
zsum的功能是:
40.如下描述教学管理的数据库R中记录了教师讲授的课程及教师所属系的情况。
R: 课程名 教师姓名 系
C1 王宇 计算机系
C2 吴敏 数学系
C3 卫民 数学系
C4 张川 物理系
C5 吴敏 数学系
请回答下列问题:
(1)R最高为第几范式?为什么?
(2)是否存在删除操作异常?若存在,试用样值中的例子加以说明。
(3)将它分解为高一级范式,分解后的关系是如何解决分解前所存在的删除操作异常的?