一、现有关于学生成绩管理数据库的模式如下:
学生(学号,姓名,性别,出生日期,系号);
课程(课号,课程名,学分);
选修(学号,课号,成绩)
学生与课程的联系是M:N联系。
1.按题目要求建立表结构,各表各个字段的名字、数据类型、长度等根据语义和查询的需要自行决定。可根据以下题目的需要建立索引。
有些题目则可能需要建立中间表或临时表。 (15分)
2.利用你所熟悉的方法向各表录入适量的、满足题目需要的数据。各数据项的取值范围应该合理、有效,并与查询要求相呼应。 (10分)
3.编写一个对选修表的数据修改程序。用学号和课号定位记录,找到后,显示该记录,并提示用户确认“真的要修改吗?”,
根据用户回答决定程序流程。
要求只允许修改成绩信息,不退出本程序能继续进行修改操作。 (20分)
4.用FoxPro语言或SQL语言编写程序完成以下查询。(以下四题依次为10分、10分、15分、20分)
(1)列出学生名单,要包含所有学生的所有属性,且在最后一行显示:
女生的平均年龄为 xx 岁。
(2)按照学分对课程进行分类,列出每类学分的课程数,且在最后一行显示
课程总数为 xx 门。
(3)检索选修课号为C2的学生的姓名、课程名和成绩,检索结果按成绩的降序排列。
(4)检索与ZANG同学同龄的学生的学号、姓名、课程名和成绩,并列表显示。
答案:3
set talk off
clear
use sc
index on sno +cno to 11
dimension d(3)
action=.t.
answer=.t.
do while action
a=space(6)
b=space(4)
@ 1,1 say “sno:” get a picture “xxxxxx”
@ 2,1 say “cno” get b picture “xxxx”
read
c=a+b
seek c
if found()
scatter to d
@ 5,2 say “sno” get d(1) picture“xxxxxx”
@ 7,2 say “cno” get d(2) picture“xxxx”
clear gets
@ 9,2 say “grade” get d(3) picture“999.9”
read
@ 11,2 say “真的修改吗?” get answer picture “l”
read
if answer
clear
gather from d
@ 1,1 say “修改后的数据已存入!”
endif
if .not.answer
clear
endif
endif
if .not.found()
clear
@ 1,1 say “查无此人”
endif
@ 4,1 say “继续查吗?” get action picture “l”
read
clear
enddo