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