07年自考“数据库及其应用Foxpro”实验题(4)
第4组实验题
上机步骤和操作说明
(1)Windows NT用户注册,用户名为个人账号,口令栏直接按回车。
(2)进入Visual FoxPro(VFP)系统环境,中途不要退出。
(3)在VFP命令窗口中键入以下两条命令:
SET DEFAULT TO Z:\<目录名> (目录名即你的账号,目录已建好)
SET SAFETY OFF
第一条命令的目的是设置你的缺省工作目录,这样,操作命令中就不要再带路径名。
(4)按题目要求创建数据库,录入数据,编写程序。
(5)在程序编辑器窗口录入、修改程序,编辑完毕,保存后再执行。
(6)第3题和第4题的各小题,都要分别保存为一个程序文件。文件名要用“账号+题号”命名,例如:C100_3,表示是C100账户的第3题的程序。C108_4_2表示是C108账户的第4题的第(2)小题的程序。
(7)做题次序不限,实现方法不限。题目中所谓的“表”即指“数据库文件”。为减少录入的负担,表名、字段名、变量名等尽量不要用汉字,可用英文或汉语拼音。
现有关于科研项目管理数据库的模式如下:
项目(项目号,项目名,领域,经费,负责人)
人员(职工号,姓名,出生日期,职称)
承担(职工号,项目号,业绩评分)
项目与人员是多对多联系。一个项目只设一名负责人。一个研究领域可有多个研究项目。假设有数据仓库(DW)、空间信息(SI)、人工智能(AI)、网络(NW)等领域。
要求完成如下操作:
1.按题目要求建立表结构,各表各个字段的名字、数据类型、长度等根据语义和查询的需要自行决定。根据查询需要建立索引。 (15分)
2.利用你所熟悉的方法向各表录入适量的、满足题目需要的数据。各数据项的取值范围应该合理、有效,并与查询要求相呼应。 (10分)
3.编写一个按项目经费查找项目信息的查询程序。允许用户在键入的经费数值前加<、=、>三种不同的比较运算符,以表示不同的查询要求。如果查到,则显示满足条件的记录;如果查不到,则显示:“无满足条件的项目!”。要求不退出本程序能继续执行查询操作。(20分)
4.用FoxPro语言或SQL语言编写程序完成以下查询。在求解过程中有的题目可能需要建立若干临时表。(以下三题依次为15分、20分、20分)
(1)列出项目清单,要包含所有项目的项目号、项目名、领域和经费信息,且在更后一行显示:
数据仓库和人工智能领域且经费在25万元以上的项目有 xx 个。
(2)列出50岁以下的教授的职工号、姓名、出生日期和所承担项目的总业绩分,并按总业绩分的降序排列。
(3)计算各个领域项目参加者的平均年龄,存入一个新表,其结构如下:
领域 | 平均年龄 |
DW | |
SIS | |
…… |
第4组实验题
现有关于科研项目管理数据库的模式如下:
项目(项目号,项目名,领域,经费,负责人)
人员(职工号,姓名,出生日期,职称)
承担(职工号,项目号,业绩评分)
项目与人员是多对多联系。一个项目只设一名负责人。一个研究领域可有多个研究项目。假设有数据仓库(DW)、空间信息(SI)、人工智能(AI)、网络(NW)等领域。
要求完成如下操作:
1.按题目要求建立表结构,各表各个字段的名字、数据类型、长度等根据语义和查询的需要自行决定。根据查询需要建立索引。(15分)
答:见第4组实验题答案文件夹。
2.利用你所熟悉的方法向各表录入适量的、满足题目需要的数据。各数据项的取值范围应该合理、有效,并与查询要求相呼应。(10分)
答:见第4组实验题答案文件夹。
3.编写一个按项目经费查找项目信息的查询程序。允许用户在键入的经费数值前加<、=、>三种不同的比较运算符,以表示不同的查询要求。如果查到,则显示满足条件的记录;如果查不到,则显示:“无满足条件的项目!”。要求不退出本程序能继续执行查询操作。(20分)
答:程序清单如下
clear
set talk off
use 第4组实验题答案文件夹\xiangmu
act=.t.
do while act
clear
ch=“ ”
n=0
@ 1,5 say “请输入待查询项目的经费信息(格式:<n或=n或>n):”
@ 2,5 get ch picture “x” valid ch=“<” or ch=“=” or ch=“>”
@ 2,6 get n picture “9999999.99”
read
go top
clear
do case
case ch=“=”
scan for 经费=n
display
endscan
case ch=“<”
scan for 经费<n
display
endscan
case ch=“>”
scan for 经费>n
display
endscan
endcase
go top
n1=经费
n2=经费
do while not eof()
if n1>经费
n1=经费
endif
if n2<经费
n2=经费
endif
skip
enddo
if (n<n1) or (n>n2)
@ row()+1,5 say “无满足条件的项目”
endif
@ row()+1,5 say “还继续查找吗(Y/N)?” get act picture “L”
read
enddo
use
clear
set talk on
return
4.用FoxPro语言或SQL语言编写程序完成以下查询。在求解过程中有的题目可能需要建立若干临时表。(以下三题依次为15分、20分、20分)
(1)列出项目清单,要包含所有项目的项目号、项目名、领域和经费信息,且在更后一行显示:
数据仓库和人工智能领域且经费在25万元以上的项目有 xx 个。
答:程序清单如下
clear
set talk off
use 第4组实验题答案文件夹\xiangmu
count for (领域=“数据仓库” or 领域=“人工智能”) and (经费>250000) to n1
list off 项目号,项目名,领域,经费
? “ 数据仓库和人工智能领域且经费在25万元以上的项目有”+str(n1,2)+“个”
use
set talk on
return
(2)列出50岁以下的教授的职工号、姓名、出生日期和所承担项目的总业绩分,并按总业绩分的降序排列。
答:程序清单如下
clear
set talk off
select B.职工号 as 职工号,B.姓名 as 姓名,b.出生日期 as 出生日期,sum(C.业绩评分) as 总业绩分;
from 第4组实验题答案文件夹\xiangmu A, 第4组实验题答案文件夹\renyuan B,;
第4组实验题答案文件夹\chengdan C;
where (A.项目号=C.项目号) and (C.职工号=B.职工号) and (B.职称=“教授”) ;
and (year(date())-year(B.出生日期))<50;
group by B.姓名;
into table 第4组实验题答案文件夹\zongfen
use 第4组实验题答案文件夹\zongfen
index on -总业绩分 to 第4组实验题答案文件夹\zongfen0
list off 职工号,姓名,出生日期,总业绩分
close databases
set talk on
return
(3)计算各个领域项目参加者的平均年龄,存入一个新表,其结构如下:
领域 | 平均年龄 |
DW | |
SIS | |
…… |
答:程序清单如下
clear
set talk off
select b.职工号 as 职工号,a.领域 as 领域,(year(date())-year(b.出生日期)) as 年龄;
from 第4组实验题答案文件夹\xiangmu a, 第4组实验题答案文件夹\renyuan b,;
第4组实验题答案文件夹\chengdan c;
where a.项目号=c.项目号 and c.职工号=b.职工号;
into cursor tmp
select tmp.领域 as 领域,avg(tmp.年龄) as 平均年龄;
from tmp;
group by tmp.领域;
into table 第4组实验题答案文件夹\pingjun
close databases
use 第4组实验题答案文件夹\pingjun
list off
use
set talk on
return