1、国家二级 VF机试模拟试卷 96及答案与解析 一、基本操作题( 30分) 1 (1)建立项目文件,文件名为 “xm”。 (2)将数据库 “公司 ”添加到新建的项目中。 (3)为数据库中的表 “职员信息 ”建立 “候选索引 ”,索引名称和索引表达式均为 “职员编号 ”。 (4)为 “职员信息 ”表和 “部门 ”表之间的关联设置完整性约束。要求:更新规则为“级联 ”,删除规则为 “限制 ”,插入规则为 “忽略 ”。 二、简单应用题( 40分) 2 (1)用 SQL语句查询至少有三门的课程成绩在 70分以上 (包括 70分 )的学 生姓名,并将结果按升序存入表文件 results dbf,然后将该
2、SQL语句粘贴在SQL TXT文件的第二行 (只占一行 )。 (2)modi prg程序的功能是:先为 “学生 ”表增加一个 “平均成绩 ”字段,数据类型为 N(6, 2):然后根据 “选课 ”表统计每个学生的平均成绩,并写入新添加的字段。 该程序有三处错误,请改正,使程序能正确运行 (在指定处修改,不允许增加或删除程序行 )。 三、综合应用题( 30分) 3 (1)打开基本操作题中建立的 “学生 ”数据库,将自由表 “student”“score”和 “course”添加到数据库中。 (2)在 “student”数据库中建立反映学生选课和考试成绩的视图 “viewsc”,该视图包括 “学号
3、”“姓名 ”“课程名称 ”和 “成绩 ”4个字段。 (3)打开表单文件 “three”,完成下列操作: 为 “生成数据 ”命令按钮 (Command1)编写代码:用 SQL命令查询视图 “viewsc”的全部内容,要求先按 “学号 ”升序排列,若 “学号 ”相同再按 “成绩 ”降序排列,并将结果保存在 “result”表中; 为 “运行报表 ”命令按钮编写代码;预览报表; 为 “退出 ”命令按钮 (Command3)编写代码;关闭并释放表单。 最后运行表单 “three”,并通过 “生成数据 ”命令按钮产生表 “result”文件。 国家二级 VF机试模拟试卷 96答案与解析 一、基本操作题(
4、 30分) 1 【正确答案】 (1)选择【文件】 【新建】命令,选择 “项目 ”,单击 “新建文件 ”按钮,输入项目名称 “xm”后单击 “保存 ”按钮。 (2)在项目管理器中选择 “数据 ”选项卡,然后选择列表框中的 “数据库 ”,单击 “添加 ”按钮,在 “打开 ”对话框中选择数据库名 “公司 ”,单击 “确定 ”按钮将数据库 “公司 ”添加到新建的项目 “xm”中。 (3) 在项目管理器中,依次展开 “数据库 ”“公司 ”“表 ”分支,选择表 “职员信息 ”,单击 “修改 ”命令按钮,打开表设计器。 在表设计器的 “索引 ”选项卡的 “索引名 ”中输入 “职员编号 ”,选择索引类型为“候
5、选索引 ”,索引表达式为 “职员编号 ”。 单击 “确定 ”按钮关闭表设计器并保存表 “职员信息 ”结构。 (4) 在项目管理器中,选择 “公司 ”数据库,单击 “修改 ”按钮,在数据库设计器中,将 “部门 ”表中 “索引 ”下面的 “部门编号 ”主索引字段拖曳到 “职员信 息 ”表中 “索引 ”下面的 “部门编号 ”索引字段上,建立两个表之间的永久性联系。 在数据库设计器中,选择【数据库】 【清理数据库】命令清理数据库。 右键单击 “部门 ”表和 “职员信息 ”表之间的关系线,在弹出的快捷菜单中选择“编辑参照完整性 ”命令,打开参照完整性生成器。 单击 “更新规则 ”选项卡,选择 “级联 ”
6、;单击 “删除规则 ”选项卡,选择 “限制 ”;单击 “插入规则 ”选项卡,选择 “忽略 ”;单击 “确定 ”按钮,保存参照完整性设置。 二、简单应用题( 40分) 2 【正确答案】 (1) 在命令窗口 输入如下 SQL查询代码 (以下 SQL查询语句是通过查询设计器生成 ): SELECT 学生姓名; FROM 成绩管理 !学生 INNER JOIN成绩管理 !选课; ON 学生学号 =选课学号; WHERE 选课成绩 =70; ORDER BY 学生姓名; GROUP BY 学生学号; HAVING COUNT(选课课程号 ) =3; INTO TABLE results dbf 在命令窗
7、口执行命令: MODIFY FILE SQL,打开文本文件编辑器。将命令窗口的查询语句复 制到 SQL文本文件中。 (2)步骤 1:在命令窗口执行命令: MODIFY COMMAND modi,打开程序文件,文件中的命令代码如下: CLOSE ALL OPEN DATABASE 成绩管理 USE 选课 IN 0 USE 学生 EXCL IN 0 *Error* DO WHILE EOF() SELECT AVG(成绩 )FROM选课 WHERE学号 =学生学号 INTO ARRAY cj *Error* REPLACE 平均成绩 =cj1 cj1=0 SKIP ENDDO CLOSE DATA
8、BASE 修改程序中的错误行,修改后的程序如下: CLOSE ALL OPEN DATABASE 成绩管理 USE 选课 IN 0 USE 学生 EXCL IN 0 ALTER TABLE 学生 ADD 平均成绩 N(6, 2) SELECT 学生 DO WHILE NOT EOF() SELECT AVG(成绩 )FROM选课 WHERE学号 =学生学号 INTO ARRAY cj REPLACE 平均成绩 WITH cj1 cj1=0 SKIP ENDDO CLOSE DATABASE 步骤 2:保存文件修改,在命令窗口执行命令: DO MODI,执行程序文件。 【试题解析】 (1)本题主
9、要考查的是 SQL分组计算的查询。根据题目要求, SQL语句主要设计思路如下: 首先对 “学生 ”和 “选课 ”表进行联接,联接条件为两个表中 “学号 ”相同的记录;接着筛选表中成绩大于 70的所有记录 (通过 WHERE短语指出 ),对筛选后的记录接 “学号 ”字段分组 (通过 GROUP BY短语分组 ),然后通过 HAVING语句进一步限定分组条件,要求统计每组学号中 “课程号 ”记录总数大于等于 3,这样便可得出至少有三门课程成绩在 70分以上的学生记录;查询结果最终保存在 results表中,输出字段只包括学生的 “姓名 ”字段。 (2)【本题主要考查了 SQL定义功能; SQL简单
10、计算查询; DO WHILE循环;Visual FoxPro修改记录命令。题目所提供的源程序功能大致如下: 首先打开 “成绩管理 ”数据库,并打开库中的数据表 “选课 ”和 “学生 ”;接着利用SQL定义功能修改表 结构;然后利用 DO WHILE循环,依次计算 “选课 ”表中每个学生的平均成绩,计算条件为 “选课 ”表中的 “学号 ”字段值等于 “学生 ”表中当前记录的 “学号 ”字段值,荆将均成绩保存到数组中;最后利用 Visual FoxPro修改记录命令 REPLACE将数组中的值赋给 “学生 ”表的 “平均成绩 ”字段。 本题第一处错误是表结构修改语句的错误,为表增加字段的关键字是
11、ADD而不是 ALTER, ALTER只能用来修改已存在的字段;第二处错误是 DO WHILE循环格式错误,缺少 WHILE短语;第三处错误是修陡记录命令格式错误 ,指定修改值的短语为 WITH而不是 SET。 三、综合应用题( 30分) 3 【正确答案】 选择【文件】 【打开】命令,选择 “学生 ”数据库,在数据库设计器中单击右键,在弹出的菜单中选择 “添加表 ”,将 “student”“score”“course”表添加到数据库中。 在数据库设计器中单击右键,在弹出的菜单中选择 “新建本地视图 ”,选择 “新建视图 ”,打开视图设计器,将 “student”表和 “course”表添加到视
12、图中。选择 “字段 ”按钮,将 “student学号 ”“student姓名 ”“course课程名称 ”“score成绩 ”添加到视图中。单击 “保存 ”按钮,在弹出的 “另存为 ”对话框中输入表单文件名 “viewsc”。 选择【文件】 【新建】命令,选择 “报表 ”,选择 “报表向导 ”,将 VIEWSC添加到报表中,修改报表样式为简报式,点击保存按钮,在弹出的 “另存为 ”对话框中输入表单文件名 “three”。 选择【文件】 【打开】命令,打开表单 “three”,在表单设计器中,双击 “生成数据 ”命令按钮,在 Click事件中输入代码: SELECT*FROM viewsc ORDER BY学号,成绩 DESC INTO TABLE result 双击 “运行报表 ”命令按钮,在 Click事件中输入代码: report form three preview 双击 “退出 ”命令按钮,在 Click事件中输入代码: thisform release 选择【表单】 【执行表单】命令,运行表单。