1、国家二级 VF机试(操作题)模拟试卷 464及答案与解析 一、基本操作题 1 在考生文件夹下,打开招生数据库 sdb,完成如下操作: (1)在 ksb表中增加一个名为 “备注 ”的字段、字段数据类型为 “字符 ”、宽度为 30。 (2)在考生成绩表 kscjb中给成绩字段设置有效性规则和默认值,成绩 =0 AND成绩 =150;默认值为 0。 (3)通过 “考生号 ”字段建立 ksb表和 kscjb表间的永久联系,并为该联系设置参照完整性约束:更新规则为 “级联 ”;删除规则为 “限制 ”;插入规则为 “忽略 ”。 (4)使用报表向导建立一个 简单报表。要求选择考生表 ksb中所有字段;记录不
2、分组;报表样式为 _随意式 ”;列数为 1,字段布局为 “列 ”,方向为 “纵向 ”;排序字段为 “考生号 ”(升序);报表标题为 “考生成绩一览表 ”;报表文件名为 one frx。 二、简单应用题 2 在考生文件夹下,打开招生数据库 sdb,完成如下简单应用: (1)使用一对多表单向导选择 ksb表和 kscjb表生成一个名为 two的表单。要求从父表 ksb中选择所有字段,从子表 kscjb中选择所有字段,使用 “考生号 ”建立两表之间的关系,样式为阴影式;按钮类型为图片按钮;排序字段为 考生号(来自ksb),升序;表单标题为 “考生数据输入维护 ”。 (2)在考生文件夹下打开命令文件
3、three prg,该命令文件用来查询所有成绩都高于或等于平均分的学生的考生号和姓名。并将查询结果存储到表 three中。注意,该命令文件在第 3行、第 6行、第 9行有错误,打开该命令文件,直接在错误处修改,不可改变 SQL语句的结构和短语的顺序,不允许增加、删除或合并行。 三、综合应用题 3 在考生文件夹下,打开招生数据库 sdb,完成如下综合应用: 创建文件名为 form的表单,将表单标题改为:录取研究生。 在表 单中设计 “录取 ”和 “退出 ”两个按钮。两个按钮功能分别如下: 在 “录取 ”按钮( Commandl)中,编写程序,查询总成绩大于或等于 330分的考生的 “考生号 ”、
4、 “姓名 ”、 “性别 ”、 “单位 ”和该生的 “政治成绩 ”、 “外语成绩 ”、 “高数成绩 ”(即高等数学成绩)、 “专业课成绩 ”、 “总成绩 ”,并将结果按 “总成绩 ”降序排序存储到表 four中。表 four(需要自己创建或生成)的字段名为: “考生号 ”、 “姓名 ”、 “性别 ”、 “单位 ”、 “政治成绩 ”、 “外语成绩 ”、 “高数成绩 ”、 “专业课成绩 ”、“总成绩 ”(各成绩字段的类型为 N(5, 1),其他字段的类型与原表中一致)。 单击 “退出 ”按钮 ( Command2)时,关闭表单。 表单设计完成后,运行表单,单击 “录取 ”按钮进行统计,然后单击 “退
5、出 ”按钮关闭表单。 注:在考试科目代码表 dm中存储了各考试科目与考试科目名对应关系。 国家二级 VF机试(操作题)模拟试卷 464答案与解析 一、基本操作题 1 【正确答案】 (1) 命令窗口执行: MODIFY DATABASE sdb,打开数据库设计器。 数据库设计器中,右击 ksb表选择【修改】,打开 ksb表设计器, “字段 ”选项卡的 “字段名 ”列的 最后一个空白文本框中输入字段名 “备注 ”, “类型 ”中选 “字符型 ”,“宽度 ”中输入 “30”,单击 “确定 ”保存修改。 (2)在数据库设计器中,右击 kscjb表,选择【修改】快捷菜单命令,打开 kscjb表设计器,在
6、 “字段 ”选项卡中选中 “成绩 ”,在 “字段有效性 ”的 “规则 ”文本框中输入:成绩 =0 and成绩 2150,在 “默认值 ”文本框中输入: 0。 (3) 在数据库设计器中,拖动 kbs表 “索引 ”下方的主索引 “考生号 ”到 kscjb表中 “索引 ”下方的普通索引 “考生号 ”上,为两个表建立联系。 选中 ksb和 kscjb两个表 之间的关联线(被选中的线会变粗),先执行【数据库】 【清理数据库】菜单命令,清空数据库表中带有删除标记的记录,然后执行【数据库】 【编辑参照完整性】菜单命令。在打开的 “参照完整性 ”对话框的表格中:选择 “更新 ”为 “级联 ”; “删除 ”为
7、“限制 ”; “插入 ”为 “忽略 ”。单击 “确定 ”保存修改。 (4) 命令窗口执行: OPEN DATABASE sdb, 打开 sdb数据库。 执行【文件】 【新建】菜单命令,或单击 “常用 ”工具栏的 “新建 ”按钮,在 “新建 ”中选 “报表 ”,单击 “向导 ”图标按钮, “向导选取 ”中选 “报表向导 ”项,单击 “确定 ”按钮,启动报表向导。 “步骤 1字段选取 ”的 “数据库和表 ”下选 “ksb”表,将 “可用字段 ”全部添加到 “选定字段 ”中,单击 “下一步 ”按钮。 “步骤 2分组记录 ”中,单击 “下一步 ”。 “步骤 3选择报表样式 ”的 “样式 ”下选择 “随
8、意式 ”,单击 “下一步 ” “步骤 4定义报表布局 ”的 “列数 ”下输入 “1”,在 “字段布局 ”下选择 “列 ”,在 “方向 ”下选择 “纵向 ”,单击 “下一步 ”。 “步骤 5排序记录 ”中双击 “可用的字段或索引标识 ”中的 “考生号 ”字段到 “选定字段 ”列表中,再选择 “升序 ”,单 击 “下一步 ”。 “步骤 6完成 ”中 “报表标题 ”下输入 “考生成绩一览表 ”,单击 “完成 ”按钮。 在 “另存为 ”对话框的 “保存报表为: ”框中输入报表文件名 one,单击 “保存 ”按钮。 参照完整性、创建简单报表。 【试题解析】 本题考查了表结构的修改:有效性规则的建立及参照
9、完整性的设置:报表向导的使用。 在表设计器中对表中字段建立有效性规则和设置默认值是操作,要注意先选中需要建立有效性规则的字段。 建参照完整性前要先建立两个表的关联,且一个表中必须建立关联字段的主索引(或候选索引),另一个表要建立普通索引,建 立联系后要先清理数据库,再设置参照完整性。 二、简单应用题 2 【正确答案】 (1)步骤 1:命令窗口执行: OPEN DATABASE sdb, 打开 SDB数据库。 步骤 2:执行【文件】 【新建】菜单命令,或单击 “常用 ”工具栏的 “新建 ”按钮,在 “新建 ”对话框中选 “表单 ”选项,单击 “向导 ”按钮, “向导选取 ”对话框中选 “一对多表
10、单向导 ”项,单击 “确定 ”,启动向导。 步骤 3: “步骤 1从父表选择字段 ”的 “数据库和表 ”下选 “kbs”表,将 “可用字段 ”全部添加到 “选定字段 ”中,单击 “下一步 ”。 步骤 4: “步骤 2从子表选择字段 ”的 “数据库和表 ”下选 “kscjb“表,将 “可用字段 ”全部添加到 “选定字段 ”中,单击 “下一步 ”。 步骤 5: “步骤 3建立表之间的关系 ”中系统自动建立两个表的联系,单击 “下一步 ”。 步骤 6: “步骤 4选择表单样式 ”的 “样式 ”下选 “阴影式 ”,在 “按钮类型 ”下 “图片按钮 ”,单击 “下一步 ”。 步骤 7: “步骤 5排序次
11、序 ”中双击 “可用的字段或索引标识 ”中的 “考生号 ”字段到“选定字段 ”列表中,再选择 “升序 ”,单击 “下一步 ”。 步骤 8: “步骤 6完成 ”中的 “请键入表单标题 ”下方输入 “考生数据输 入维护 ”,单击 “完成 ”按钮。 步骤 9:在 “另存为 ”对话框的 “保存表单为: ”框中输入表单文件名 two,单击 “保存 ”按钮。 创建和运行表单。 (2)步骤 1:命令窗口执行: MODIFY COMMAND three, 打开 three prg程序,命令中的命令代码如下: *该命令文件用来查询所有成绩都高于或等于平均分的学生的考生号和姓名。并将查询结果存储到表 THREE中
12、。 *该命令文件在第 3行、第 6行、第 9行有错误,打开该命令文件。 *直接在错误处修改,不可改变 SQL语句的结构和短语的顺序,不允许增加、 删除或合并行。 SELECT AVG(成绩); FROM kscjb; INTO CURSOR tem SELECT考生号,姓名; FROM ksb; WHERE考生号 EXISTS; (SELECT*; FROM kscjb; WHERE成绩 tem (1),考生号 =ksb考生号); INTO TABLE three 修改程序中的错误行,修改后的程序如下: SELECT AVG(成绩); FROM kscjb; INTO ARRAY tem 将平
13、均成绩存放到数组 array中 SELECT考生号,姓名;外查询:在 ksb表中将每一个考生编号与内查询的结果做比较 FROM ksb; WHERE NOT EXISTS; ( SELECT*;在内查询中的 kscjb表中判断是否该考生编号有一门成绩小于平均成绩 FROM kscjb; WHERE成 绩 tem (1)and考生号 =ksb考生号); INTO TABLE three 步骤 2:保存文件修改,在命令窗口执行命令: DOthree prg,执行程序文件。 SQL简单查询、嵌套查询。 【试题解析】 (1)本题主要考查的是表单向导的使用。 (2)本题主要考查的是 SQL简单查询和嵌套
14、查询。本题先用一个 SQL简单查询获得平均分,由于平均分是一个数字,并且以后还要将考生成绩与该平均分进行比较,所以应将其存放在一个数组中,而不是存放在临时表中,所以应将第一处错误 INTO CURSOR temp改为 INTO ARRAY temp。 题中第二个 SQL语句为嵌套查询,使用了 exists谓词,用来检查子查询中是否有结果返回。根据本题要求,要查找所有成绩都高于或等于平均分的学生的考生号和姓名,换句话说,也就是只要考生有一门成绩小于平均分,该考生就不符合条件。查询的基本过程是:对于外查询中的 ksb表中的每个考生号,在内查询中的kscjb表中判断是否该考生编号有一门成绩小于平均成
15、绩,只要有一门成绩小于平均成绩,该考生号都不该被查找出来,故第二处错误是在外查询中的条件中应使用 not exists,而不是 exists。在内查询中,条件 “成绩 temp (1)”和 “考生号=ksb考生号 ”应该用 AND联接。 三、综合应用题 3 【正确答案】 步骤 1:在命令窗口执行命令: CREATE FORM form,打开表单设计器新建表单。向表单添加两个命令按钮。步骤 2:选择表单对象,修改属性值,见表 444。步骤 3:双击命令按钮,编写各个命令按钮的 Click事件代码如下: *“录取 ”按钮的 Click事件代码 *OPEN DATABASE SDB SELECT K
16、SB考生号,姓名,性别,单位, SUM(成绩)总成绩 FROMKSB, KSCJB; WHERE KSB考生号=KSCJB考生号 GROUP BY KSB考生号; HAVING SUM(成绩) =330 INTO CURSOR TEMP1SELECT考生号,姓名,性别,单位 FROM TEMPl;ORDER BY总成绩 DESC INTO TABLE FOUR ALTER TABLE FOUR ADD政治成绩 N(5, 1) ALTER TABLE FOUR ADD外语成绩 N(5, 1) ALTER TABLE FOUR ADD高数成绩 N(5, 1)ALTER TABLE FOUR ADD
17、专业课成绩 N(5, 1)ALTER TABLE FOUR ADD总成绩 N(5, 1) SELECT考生号,考试科目名,成绩 FROM KSCJB, DM WHERE KSCJB考试科目 =DM考试科目; INTO CURSOR TEMP2SELECT FOUR DO WHILE NOT EOF()SELECT成绩 FROM TEMP2 WHER考生号 =FOUR考生号 AND考试科目名 =“政治 “; INTO ARRAY A1REPLACE政治成绩 WITH A1SELECT成绩 FROM TEMP2 WHER考生号 =FOUR考生号 AND考试科目名 =“外语 “; INTO ARRA
18、Y A2 REPLACE外语成绩 WITH A2SELECT成绩 FROM TEMP2 WHER考生号 =FOUR考生号 AND考试科目名 =“高等数学 “;INTO ARRAY A3REPLACE高数成绩 WITH A3SELE成绩 FROM TEMP2 WHER考生号 =FOUR考生号 AND考试科目名 =“专业课 “; INTO ARRAY A4 REPLACE专业课成绩 WITH A4 REPLACE总成绩 WITH政治成绩 +外语成 绩 +高数成绩 +专业课成绩 SKIP ENDDOCLOSE DATABASE*“退出 ”按钮的 Click事件代码*THISFORM RELEASE步
19、骤 4:单击 “常用 ”工具栏中的 “运行 ”按钮运行表单,单击 “录取 ”进行计算,单击 “退出 ”关闭表单。基本型控件;表单的事件、方法和属性;程序基本结构; SQL分组与计算查询。 【试题解析】 本题主要考查的是表单的建立、常用属性的设置、 DO WHILE循环结构和 SQL分组计算查询、 SQL定义功能、 Visual FoxPro修改记录命令。 本题基本解题思路可 按以下步骤进行: 第一步,根据 ksb和 kscjb两张表,利用分组计算查询求出总成绩大于等于 330分的考生的考生号、姓名、性别、单位和总成绩,将结果保存到一个临时表 temp1中。这里,总成绩用 SUM函数实现。 第二
20、步,通过临时表 templ查找出 “考生号 ”、 “姓名 ”、 “性别 ”、 “单位 ”4个字段,并按总成绩降序排序,将结果保存到表 FOUR中。在这里,这四个字段正是题目中要求的 FOUR表的前四个字段。 第三步,分别用五个 “ALTER TABLE”语句为 FOUR表增加五个字段:政治成绩、外语成绩、高数成绩、专业课成绩 和总成绩。为表增加字段的关键字是ADD。此时,题目所要求的 FOUR表的结构已经完成,并且前四个字段的值也已经按要求完成了,下面的任务就是将后五个字段的值填充完整。 第四步,根据 dm和 kscjb两张表求出所有考生的考生号、考试科目名和成绩,将结果保存到临时表 temp
21、2中。 第五步,将 FOUR表作为当前表,将记录指针指向文件首,然后开始执行 DO WHILE循环对 FOUR表中的每条记录进行处理。 DO WHILE语句的循环条件是当记录指针没有到达 FOUR表末尾时,执行循环体中的语句。循环体功能:用SQL简单查询从临 时表 temp2中求出与 FOUR表当前所指记录 “考生号 ”相同并且“考试科目名 ”是 “政治 ”的 “成绩 ”字段值,将该值保存到数组 a1中,再通过REPLACE命令修改 four表当前记录的 “政治成绩 ”字段值。参照以上操作,可以将 four表当前记录的 “外语成绩 ”、 “高数成绩 ”和 “专业课成绩 ”三个字段值进行修改。而当前记录的 “总成绩 ”字段值可以由当前记录的 “政治成绩 ”、 “英语成绩 ”、“高数成绩 ”和 “专业课成绩 ”的和得到。修改完毕后, four表的记录指针指向下一条记录,又开始继续判断表指针是否到达表末尾,如果没有,则进入循环 体继续同样的操作,直到 four表的记录指针指向表末尾,处理完 four表中的所有记录,程序结束。