1、国家二级 VF机试(操作题)模拟试卷 178及答案与解析 一、基本操作题 1 在考生文件夹下,有一个学生数据库 sdb,打开该数据库,完成如下操作: (1)为学生表 student的 “性别 ”字段增加约束:性别 $”男女 ”,出错提示信息为 “性别必须是男或女 ”,默认值为 “女 ”。 (2)为学生表 student创建一个主索引,主索引的索引名为 sid,索引表达式为学号。为课程表 course创建一个主索引,主索引的索引名为 cid,索引表达式为课程号。为选课表 sc创建一个主索引和两个普通索引 (升序 ),主索引的索引名为 scid,索引表达式为 “学号 +课程号 ”;一个普通索引的索
2、引名为 sid,索引表达式为学号;另一个普通索引的索引名为 cid,索引表达式为课程号。 (3)通过 “学号 ”字段建立选课表 sc和学生表 student表间的永久联系。通过 “课程号 ”字段建立选课表 sc与课程表 course间的永久联系。并为以上建立的联系设置参照完整性约束:更新规则为 “级联 ”;删除规则为 “限制 ”;插入规则为 “限制 ”。 (4)使用报表向导建立一个简单报表。要求选择学生表 student表中所有字段;记录不分组;报表样式为 “随意式 ”:列 数为 “1”,字段布局为 “列 ”,方向为 “纵向 ”;排序字段为 “学号 ”,升序;报表标题为 “学生基本情况一览表
3、”;报表文件名为one frx。 二、简单应用题 2 (1)歌手比赛分为四个组, “歌手表 ”中的 “歌手编号 ”字段的左边两位表示了该歌手所在的组号。考生文件夹下的程序文件 five prg的功能是:根据 “歌手表 ”计算每个组的歌手人数,将结果填入表 one dbf,表 one dbf中有两个字段: “组号 ”和“歌手人数 ”。程序中有 3处错误,请修改并执行程序。注意:只能修改标有错误的语句行,不能修改其他语句,数组名 A不允许修改。 (2)建立一个数据库文什 “歌手人奖赛 dbc”,并将 “歌手表 ”、 “评委表 ”和 “评分表 ”3个自由表添加到该数据库中。使用视图没计器建立视图 s
4、onger_view,该视图根据 “歌手表 ”、 “评委表 ”和 “评分表 ”建立,视图中的字段项包括: “评委姓名 ”、 “歌手姓名 ”、 “分数 ”,视图中的记录按 “歌手姓名 ”升序、 “分数 ”降序排列。 三、综合应用题 3 在考生文件夹下,打开招生数据库 sdb,完成如下综合应用: 创建文件名为 form的表单,将表单标题改为:录取研究生。 在表 单中设计 “录取 ”和 “退出 ”两个按钮。两个按钮功能分别如下: . 在 “录取 ”按钮 (Command1)中,编写程序,查询总成绩大于或等于 330分的考生的 “考生号 ”、 “姓名 ”、 “性别 ”、 “单位 ”和该生的 “政治成绩
5、 ”、 “外语成绩 ”、 “高数成绩 ”(即高等数学成绩 )、 “专业课成绩 ”、 “总成绩 ”,并将结果按 “总成绩 ”降序排序存储到表 four中。表 four(需要自己创建或生成 )的字段名为: “考生号 ”、 “姓名 ”、 “性别 ”、 “单位 ”、 “政治成绩 ”、 “外语成绩 ”、 “高数成绩 ”、 “专业课成绩 ”、 “总成绩 ”(各成绩字段的类 型为 N(5, 1),其他字段的类型与原表中一致 )。 . 单击 “退出 ”按钮 (Command2)时,关闭表单。 表单设计完成后,运行表单,单击 “录取 ”按钮进行统计,然后单击 “退出 ”按钮关闭表单。 注:在考试科目代码表 dm
6、中存储了各考试科目与考试科目名对应关系。 国家二级 VF机试(操作题)模拟试卷 178答案与解析 一、基本操作题 1 【正确答案】 (1) 命令窗口执行: MODIFY DATABASE sdb,打开数据库设计器。 数据库设计器中,右击 student表,选择【修改】,打开表设计器, “字段 ”选项卡中选中 “性别 ”, “字段有效性 ”的 “规则 ”中输入:性别 $“男女 “, “信息 ”框中输入: ”性别必须是男或女 ”, “默认值 ”文本框中输入: “女 “。 (2) 接上题,在 student表设计器中, “字段 ”选项卡中选中 “学号 ”, “索引 ”列中选 “升序 ”,在 “索引
7、”选项卡中修改 “索引名 ”为 “sid”,修改 “类型 ”为 “主索引 ”,单击“确定 ”按钮保存表结构修改。 与上题同样的方法为 course表建立名为 “cid”,的 “主索引 ”,单击 “确定 ”按钮保存表结构修改。 数据库设计器中,右击 sc表选择【修改】,打开表设计器, “索引 ”选项卡中, “索引名 ”下方的文本框中输入 “scid”, “索引 ”选项卡中将 “类型 ”选择为 “主索引 ”, “表达式 ”下方的文本框中输入 “学号 +课程号 ”,建立主索引。 接第 步,在 SC表设计器的 “索引 “选项卡中,第二行的 “索引名 ”文本框中输入 “sid”,将 “类型 ”选择为 “
8、普通索引 ”, “表达式 ”下方的文本框中输入 “学号 ”,建立一个普通索引;在第三行的 “索引名 ”文本框中输入 “cid”, “类型 ”选择为 “普通索引 ”, “表达式 ”中输入 “课程号 ”,建 立普通索引,单击 “确定 ”保存修改。 (3) 在数据库设计器中,拖动 student表 “索引 ”下方的主索引 “sid”到 sc表中 “索引 ”下方的普通索引 “sid”上,为两个表建立联系。 拖动 course表 “索引 ”下方的主索引 “scid”到 Sc表中 “索引 ”下方的普通索引 “cid”上,为两个表建立联系。 选中 student和 sc两个表之间的关联线 (被选中的线会变粗
9、 ),首先执行【数据库】 【清理数据库】菜单命令,清空数据库表中带有删除标记的记录,然后执行【数据库】 【编辑参照完整性】菜单 命令。在打开的 “参照完整性 ”对话框的表格中,将其中的两对关系均做如下操作:选择 “更新 ”下的单元格内容为 “级联 ”; “删除 ”下的单元格内容为 “限制 ”; “插入 ”下的单元格内容为 “限制 ”。单击 “确定 ”按钮保存参照完整性的修改。 (4) 命令窗口执行: OPEN DATABASE sdb,打 开 sdb数据库。 执行【文件】 【新建】菜单命令,或单击 “常用 ”工具栏的 “新建 ”按钮,在弹出的 “新建 ”对话框中选中 “报表 ”选项,单击 “向
10、导 ”按钮,弹出 “向导选取 ”对话框,选中 “报表向导 ”项,单击 “确定 ”按钮,启动 报表向导。 “步骤 1字段选取 ”的 “数据库和表 ”下选 student表,将 “可用字段 ”中的字段全部添加到 “选定字段 ”中,单击 “下一步 ”按钮。 “步骤 2分组记录 ”中,单击 “下一步 ”按钮。 “步骤 3选择报表样式 ”的 “样式 ”下选择 “随意式 ”,单击 “下一步 ”按钮。 “步骤 4定义报表布局 ”的 “列数 ”下输入 “1”,在 “字段布局 ”下选 “列 ”,在 “方向 ”下选 “纵向 ”,单击 “下一步 ”按钮。 “步骤 5排序记录 ”中双击 “可用的字段或索引标识 ”中的
11、 “学号 ”字段到 “选定字段 ”中 ,再选择 “升序 ”,单击 “下一步 ”按钮。 “步骤 6完成 ”中 “报表标题 ”下方文本框中输入 “学生基本情况一览表 ”,单击“完成 ”按钮。 在 “另存为 ”对话框的 “保存报表为: “框中输入报表文件名 one,单击 “保存 ”按钮。 【试题解析】 本题考查字段有效性规则的建立;表索引的建立;数据库表间永久联系的建立和参照完整性约束的设置;报表向导的使用。 建立有效性规则和设置默认值是在表设计器中操作的,要注意先选中需要建立有效性规则的字段。在表设计器的 “字段 ”选项卡中,可以选择 “排序 ”下拉 框中的“升序 ”或 “降序 ”为指定的字段建立
12、一个索引名与索引表达式相同的普通索引, “索引 ”选项卡中可改变索引名或索引类型。 参照完整性是针对两个表进行设置的,要先建立两个表的关联,且有一个表中必须建立关联字段的主索引 (或候选索引 ),另一个表要建立普通索引,建立两个表联系后要先清理数据库,然后再设置参照完整性。 二、简单应用题 2 【正确答案】 (1) 步骤 1:在命令窗口执行命令: MODIFY COMMAND five,打开程序文件,文件中的命令代码如下: &根据 “歌手表 “计算每个组的歌手人数 CLOSE DATA USE one GO TOP WHILE NOT EOF() &错误 zuhao=组号 SELECT COU
13、NT(*)FROM歌手表 WHERE歌手表歌手编号 =zuhao INTO ARRAY A &错误 REPLACE歌手人数 INTO A &孳揿 SKIP ENDDO 修改程序中的错误行,修改后的程序如下: CLOSE DATA USE one GO TOP DO WHILE NOT EOF() zuhao=组号 SELECT COUNT(*)FROM歌手表 WHERE LEFT(歌手表歌手编号, 2)=zuhao INTO ARRAY A REPLACE歌手人数 WITH A1 SKIP ENDDO 步骤 2:保存文件修改,在命令窗口执行命令: DO five,执行程序文件。 (2) 步骤
14、1:在命令窗口执行命令: MODIFY DATABASE歌手大奖赛 ,新建并打开数据库设计器。右击鼠标 ,选择【添加表】,在 “打开 ”对话框中双击 “歌手表 ”添加到数据库中;同样的方法,将 “评委表 ”和 “评分表,添加到数据库中。 步骤 2:在数据库设计器中右击,选择【新建本地视图】打开视图设计器,在“新建本地视图 ”中单击 “新建视图 ”按钮,在 “添加表或视图 ”中依次双击 “歌手表 ”、“评分表 ”和 “评委表 ”(按顺序添加 ),添加到视图设计器中。 步骤 3:双击 “评委表 ”中的 “评委姓名 ”字段, “歌手表 ”中的 “歌手姓名 ”字段和 “评分表 ”中的 “分数 ”字段,
15、将 3个字段添加到 “选定字段 ”中。 步骤 4: “排序依据 ”选项卡中双击 “选定字段 ”列表框中的 “歌手表歌手姓名 ”字段,添加到 “排序条件 ”列表框中;再双击 “选定字段 ”中的 “评分表分数 ”字段添加到 “排序条件 ”列表框中, “排序选项 ”中选择 “降序 ”;以 songer_view名保存视图。 【试题解析】 (1)本题考查了 DO WHILE循环语句; SQL简单计算查询; visual FoxPro表记录修改命令。 本题的第一处错误是 DO WHILE循环语句的入口语句格式错误, DO短语是必须的,不可缺少;第二处错误根据题意得知, “歌手编号 ”字段的左边两位表示该
16、歌手所在的组 号,因此,要通过字符串截取函数才能从 “歌手编号 ”字段中得到歌手的组号;第三处错误是 REPLACE语句的格式错误,使用数组修改当前记录时,应使用 WITH短语,而不是 INTO短语。 (2)本题考查了数据库和表的基本操作;利用视图设计器建立视图。 本题的关键是向数据库设计器中按照一定的顺序依次添加各表,即按照表间联系依次添加表,这样可以保证视图设计器中的各表都存在联接关系。 对 SQL熟悉的考生,可以通过命令方式建立该视图。 三、综合应用题 3 【正确答案】 步骤 1:在命令窗口执行命令: CREATE FORM form,打开表单设计器新建表单。向表单添加两个命令按钮。 步
17、骤 2:选择表单对象,修改属性值,见表 325。 步骤 3:双击命令按钮,编写各个命令按钮的 Click事件代码如下: *“录取 ”按钮的 Click事件代码*OPEN UATABBASE SDB SELECT KSB考生号,姓名,性别,单位,SUM(成绩 ) 总成绩 FROMKSB, KSCJB; WHERE KSB考生号 =KSCJB考生号GROUP BY KSB考生号; HAVING SUM(成绩 )=330 INTOCURSOR TEMP 1SELECT 考生号,姓名,性别,单位 FROM TEMP1; ORDER BY总成绩 DESC INTO TABLE FOURALTER TAB
18、LE FOUR ADD政治成绩 N(5, 1)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总成绩 N(5, 1)SELECT考生号,考试科目名,成绩 FROMKSCJB, DM WHERE KSCJB考试科目 =DM考试科目; INTO CURSOR TEMP2SELECt FOUR DO WHILE NOT EOF()SELECT成绩 FROM TEMP2 WHER考生号 =FOUR考生号AND考试科目名
19、=“政治 “; INTO ARRAY Al REPLACE政治成绩 WITH A1 SELECT成绩 FROM TEMP2 WHER考生号 =FOUR考生号 AND考试科目名 =“外语 “; INTO ARRAY A2 REPLACE外语成绩 WITH A2 SELECT成绩 FROM TEMP2 WHER考生号 =FOUR考生号 AND考试科目名 =“高等数学 “; INTO ARRAY A3 REPLACE高数成绩 WITH A3 SELE成绩 FROM TEMP2 WHER考生号=FOUR考生号 AND考试科目名 =“专业课 “; INTO ARRAY A4 REPLACE专业课成绩 W
20、ITH A4 REPLACE总成绩 WITH政治成绩 +外语成绩 +高数成绩 +专业课成绩 SKIPENDDOCLOSE DATABASE *“退出 ”按钮的 Click事件代码 * THISFORM RELEASE 步骤 4:单击 “常用 ”工具栏中的 “运行 ”按钮运行表单,单击 “录取 ”进行计算,单击 “退出 ”关闭表单。 【试题解析】 本题主要考查的是表单的建立、常用属性的设置、 DO WHILE循环结构和 SQL分组计算查询、 SQL定义功能、 visual FoxPro修改记录命令。 本题基本解题思路可按以下步骤进行: 第一步,根据 ksb和 kscjb两张表,利用分组计算查询求
21、出总成绩大于等于 330分的考生的考生号、姓名、性别、单位和总成绩,将结果保存到一个临时表temp1中。这里,总成绩用 SUM函数实 现。 第二步,通过临时表 temp1查找出 “考生号 ”、 “姓名 ”、 “性别 ”、 “单位 ”4个字段,并按总成绩降序排序,将结果保存到表 FOUR中。在这里,这四个字段正是题目中要求的 FOUR表的前四个字段。 第三步,分别用五个 “ALTER TABLE”语句为 FOUR表增加五个字段:政治成绩、外语成绩、高数成绩、专业课成绩和总成绩。为表增加字段的关键字是ADD。此时,题目所要求的 FOUR表的结构已经完成,并且前四个字段的值也已经按要求完成了,下面的
22、任务就是将后五个字段的值填充完整。 第四步,根据 dm和 kscjb两张表求出所有考生的考生号、考试科目名和成绩,将结果保存到临时表 temp2中。 第五步,将 FOUR表作为当前表,将记录指针指向文件首,然后开始执行 DO WHILE循环对 FOUR表中的每条记录进行处理。 DO WHILE语句的循环条件是当记录指针没有到达 FOUR表末尾时,执行循环体中的语句。循环体功能:用SQL简单查询从临时表 temp2中求出与 FOUR表当前所指记录 “考生号 ”相同并且“考试科目名 ”是 “政治 ”的 “成绩 ”字段值,将该值保存到数组 a1中,再通过REPLACE命令修改 four表当前 记录的 “政治成绩 ”字段值。参照以上操作,可以将 four表当前记录的 “外语成绩 ”、 “高数成绩 ”和 “专业课成绩 ”三个字段值进行修改。而当前记录的 “总成绩 ”字段值可以由当前记录的 “政治成绩 ”、 “英语成绩 ”、“高数成绩 ”和 “专业课成绩 ”的和得到。修改完毕后, four表的记录指针指向下一条记录,叉开始继续判断表指针是否到达表末尾,如果没有,则进入循环体继续同样的操作,直到 four表的记录指针指向表末尾,处理完 four表中的所有记录,程序结束。