1、国家二级 VF机试-试卷 72及答案解析(总分:12.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.基本操作题()(分数:2.00)_2.(1)建立数据库 orders_manage,将自由表 employee和 orders添加到新建的数据库中。 (2)为employee表的性别字段设置默认值“男”。 (3)为 employee表的“性别”字段定义有效性规则,规则表达式为: 性别$“男女“,出错提示信息为“性别必须是男或女”。 (4)使用 SQL命令从 employee表中查询所有已婚(婚否字段值为逻辑真)记录的职工号、姓名、性别和出生日期信息,结果按出生日期降
2、序排序存入表 infor_da中,同时把所用命令存入文本文件 cmd_datxt。(分数:2.00)_二、简单应用题(总题数:2,分数:4.00)3.简单应用题()(分数:2.00)_4.(1)歌手比赛分为四个组,“歌手表”中的“歌手编号”字段的左边两位表示了该歌手所在的组号。考生文件夹下的程序文件 fiveprg 的功能是:根据“歌手表”计算每个组的歌手人数,将结果填入表onedbf,表 onedbf 中有两个字段:“组号”和“歌手人数”。程序中有 3处错误,请修改并执行程序。注意:只能修改标有错误的语句行,不能修改其他语句,数组名 A不允许修改。 (2)建立一个数据库文件“歌手大奖赛dbc
3、”。并将“歌手表”、“评委表”和“评分表”3 个自由表添加到该数据库中。使用视图设计器建立视图 songer_view,该视图根据“歌手表”、“评委表”和“评分表”建立,视图中的字段项包括:“评委姓名”、“歌手姓名”、“分数”,视图中的记录按“歌手姓名”升序、“分数”降序排列。(分数:2.00)_三、综合应用题(总题数:2,分数:4.00)5.综合应用题()(分数:2.00)_6.在做本题前首先确认在基础操作中已经正确地建立了 order_detail表,在简单应用中已经成功地将记录追加到 order_detail表。 当 order_detail表中的“单价”修改后,应该根据该表的“单价”和
4、“数量”字段修改 order_list表的“总金额”字段,现在有部分 order_list记录的“总金额”字段值不正确,请编写程序挑出这些记录,并将这些记录存放到一个名为 od_mod的表中(与 order_list表结构相同,自己建立),然后根据 order_detail表的“单价”和“数量”字段修改 od_mod表的“总金额”字段(注意一个 od mod记录可能对应几条 order_detail记录),最后 od_mod表的结果要求按“总金额”升序排序,编写的程序最后保存为 prog1prg。(分数:2.00)_国家二级 VF机试-试卷 72答案解析(总分:12.00,做题时间:90 分钟
5、)一、基本操作题(总题数:2,分数:4.00)1.基本操作题()(分数:2.00)_解析:2.(1)建立数据库 orders_manage,将自由表 employee和 orders添加到新建的数据库中。 (2)为employee表的性别字段设置默认值“男”。 (3)为 employee表的“性别”字段定义有效性规则,规则表达式为: 性别$“男女“,出错提示信息为“性别必须是男或女”。 (4)使用 SQL命令从 employee表中查询所有已婚(婚否字段值为逻辑真)记录的职工号、姓名、性别和出生日期信息,结果按出生日期降序排序存入表 infor_da中,同时把所用命令存入文本文件 cmd_da
6、txt。(分数:2.00)_正确答案:(正确答案:(1)在命令窗口执行命令: MODIFY DATABASE orders_manage ,新建数据库并打开数据库设计器。 在数据库设计器中右击鼠标,选择【添加表】快捷菜单命令,在弹出的“打开”对话框中双击“employee”表,将表添加到数据库中,以同样的方法将“orders”表添加到数据库中。 (2)右击数据库设计器中的“employee”表,选择【修改】快捷菜单命令,打开“employee”表设计器,选中“字段”选项卡中的“性别”字段,然后在“字段有效性”的“默认值”文本框中输入:“男“。 (3)紧接上小题操作选中“性别”字段,在“字段有效
7、性”的“规则”文本框中输入:性别$“男女“,在“信息”框中输入:“性别必须是男或女“。 (4)在命令窗口执行命令: MODIFY FILE cmd_da,打开文本文件编辑器。 在编辑器中输入如下程序代码(以下程序是通过查询设计器生成)。 SELECT employee职工号,employee姓名,employee性别,employee出生日期; FROM orders_manage!employee;WHERE employee婚否=T;ORDER BY employee出生日期 DESC;INTO TABLE infor_daDBF 在命令窗口执行命令:DO cmd_datxt,执行文件(注
8、意:执行文件时,文件后缀名txt 不能缺省)。)解析:解析:本大题考查了数据库和表的基本操作;字段有效性规则的定义及 SQL查询语句的使用。 通过 MODI FY DATABASE数据库名命令可在新建数据库的同时打开数据库设计器,然后在数据库设计器中完成添加数据表的操作而建立字段有效性规则则需要在表设计器中完成,注意只有将自由表转为数据库表之后,才能设置字段有效性规则。 本大题中 SQL查询语句考查的是 SQL排序查询,语句比较简单,如果对 SQL语句不太熟悉,也可以直接在查询设计器中进行设计,然后将查询设计器中生成的代码复制到文本文件中,另外要注意的是在执行文本文件时,文本文件的扩展名TXT
9、 不能缺省。二、简单应用题(总题数:2,分数:4.00)3.简单应用题()(分数:2.00)_解析:4.(1)歌手比赛分为四个组,“歌手表”中的“歌手编号”字段的左边两位表示了该歌手所在的组号。考生文件夹下的程序文件 fiveprg 的功能是:根据“歌手表”计算每个组的歌手人数,将结果填入表onedbf,表 onedbf 中有两个字段:“组号”和“歌手人数”。程序中有 3处错误,请修改并执行程序。注意:只能修改标有错误的语句行,不能修改其他语句,数组名 A不允许修改。 (2)建立一个数据库文件“歌手大奖赛dbc”。并将“歌手表”、“评委表”和“评分表”3 个自由表添加到该数据库中。使用视图设计
10、器建立视图 songer_view,该视图根据“歌手表”、“评委表”和“评分表”建立,视图中的字段项包括:“评委姓名”、“歌手姓名”、“分数”,视图中的记录按“歌手姓名”升序、“分数”降序排列。(分数:2.00)_正确答案:(正确答案:(1)步骤 1:在命令窗口执行命令: MODIFY COMMAND five ,打开程序文件,文件中的命令代码如下: &根据“歌手表“计算每个组的歌手人数 CLOSE DATA USE one GO TOP WHILENOTEOF() &错误 zuhao=组号 SELECT COUNT(*) FROM 歌手表 WHERE 歌手表歌手编号=zuhao INTO A
11、RRAY 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)步骤 1:在命令窗口执行命令:MODIFY DATABASE歌手大奖赛 ,新建数据
12、库并打开数据库设计器。在数据库设计器中右击鼠标,选择【添加表】快捷菜单命令,在弹出的“打开”对话框中双击“歌手表”,将表添加到数据库中;以同样的方法,再将“评委表”和“评分表”添加到数据库中。 步骤 2。在数据库设计器中右击鼠标,选择【新建本地视图】快捷菜单命令打开视图设计器,接着在弹出的“新建本地视图”对话框中单击“新建视图”图标按钮,然后在“添加表或视图”对话框中依次双击“歌手表”、“评分表”和“评委表”(按顺序添加),将表添加到视图设计器中。 步骤 3:依次双击“评委表”中的“评委姓名”字段,“歌手表”中的“歌手姓名”字段和“评分表”中的“分数”字段,将 3个字段添加到“选定字段”中。
13、步骤 4:在“排序依据”选项卡中双击“选定字段”列表框中的“歌手表歌手姓名”字段,将字段添加到“排序条件”列表框中:再双击“选定字段”列表框中的“评分表分数”字段,将字段添加到“排序条件”列表框中。在“排序选项”中选择“降序”单选项;以 songer_view名保存视图。)解析:解析:(1)本题考查了 DO WHILE循环语句;SQL 简单计算查询;Visual、FoxPro 表记录修改命令。 本题程序所执行的功能大致如下: 首先打开 one表,然后利用 DO WHILE语句判断表指针是否到达表末尾,如果没有,则进入循环体,设置一个变量 zuhao等于当前记录指针所指记录的“组号”值,然后通过
14、SELECT语句计算“歌手表”中歌手的组号等于变量 zuhao的记录,即每组中的歌手人数,将得到的结果保存到数组中,然后再通过 visual FoxPro表记录修改命令 REPLACE通过数组修改“歌手表”表当前记录的“歌手人数”的值;修改完毕后,“歌手表”的记录指针指向下一条记录,又开始继续判断表指针是否到达表末尾,如果没有,则进入循环体继续同样的操作,直到“歌手表”的记录指针指向表末尾,程序结束。 本题的第一处错误是 DO WHILE循环语句的入口语句格式错误,DO 短语是必须的,不可缺少:第二处错误根据题意得知,“歌手编号”字段的左边两位表示该歌手所在的组号,因此,要通过字符串截取函数才
15、能从“歌手编号”字段中得到歌手的组号;第三处错误是 REPLACE语句的格式错误,使用数组修改当前记录时,应使用 WITH短语,而不是 INTO短语。 (2)本题考查了数据库和表的基本操作;利用视图设计器建立视图向数据库中添加表可以在数据库设计嚣中完成;利用视图设计器建立视图时,注意筛选条件设置正确,其他操作都比较简单。 本题的关键是向数据库设计器中添加数据表时,要按熙一定的顺序依次添加各表,即按照表间联系依次添加备表,这样可以保证视图设计器中的各表都存在联接关系。 其他操作都比较简单,根据题意,在各选项卡中完成相应的操作即可。 对于 SQL熟悉的考生,同样可以通过命令方式建立该视图。三、综合
16、应用题(总题数:2,分数:4.00)5.综合应用题()(分数:2.00)_解析:6.在做本题前首先确认在基础操作中已经正确地建立了 order_detail表,在简单应用中已经成功地将记录追加到 order_detail表。 当 order_detail表中的“单价”修改后,应该根据该表的“单价”和“数量”字段修改 order_list表的“总金额”字段,现在有部分 order_list记录的“总金额”字段值不正确,请编写程序挑出这些记录,并将这些记录存放到一个名为 od_mod的表中(与 order_list表结构相同,自己建立),然后根据 order_detail表的“单价”和“数量”字段
17、修改 od_mod表的“总金额”字段(注意一个 od mod记录可能对应几条 order_detail记录),最后 od_mod表的结果要求按“总金额”升序排序,编写的程序最后保存为 prog1prg。(分数:2.00)_正确答案:(正确答案:步骤 1:在命令窗口执行命令: MODIFY COMMAND prog1 ,打开程序文件编辑器。步骤 2:在编辑器中输入如下程序代码: SELECT 订单号,SUM(单价*数量) AS 总金额; FROM order_detail; GROUP BY 订单号, INTO CURSOR arrtable SELECT order_1ist*; FROM o
18、rder_list,arrtable; WHERE order list订单号=arrtable订单号 AND order_list总金额 arrtable总金额; INTO TABLE od_mod USE od_mod DO WHILE NOT EOF() SELECT arrtable总金额 FROM arrtable; WHERE arrtable订单号=od_mod订单号; INTO ARRAY arr REPLACE 总金额 WITH art SKIp ENDDO CLOSE ALL SELECT*FROM od_mod ORDER BY总金额; INTO CURSOR arrta
19、ble1 SELECT*FROM arrtable1 INTO TABLE od_mod 步骤 3:保存文件修改,在命令窗口执行命令:DO prog1prg,执行程序文件。)解析:解析:本大题主要考查的是 SQL分组计算查询;DO WHILE 循环结构。本题所设计的程序代码有些难度,需要考生好好掌握。基本解题思路可按以下步骤进行: 首先,根据 order detail表的“单价”和“数量”数据,利用分组计算查询求出每组订单的“总金额”,将结果保存到一个临时表中。 然后,通过对 order list表和临时表的联接查询,找出 order list表中“总金额”字段与临时表中“总金额”不相同的记录
20、,并将 order list表中这些“总金额”不相同的记录输出到 od_mod表中。 接着利用 DO WHILE循环语句对 od mod表中的每条记录进行处理。通过 SQL查询语句从临时表中先获得与 od mod表当前所指记录“订单号”相同的“总金额”字段值,将谊值保存到数组中,再通过 REPLACE命令修改 od mod表当前记录的值,每处理完一条记录,记录指针便指向下一条记录,一直到处理完 od mod表中的所有记录。 最后将 od mod表的记录按“总金额”排序,由于查询结果不能覆盖正在作为查询数据源的表,因此,可以通过一个临时表过渡,保存排序的表记录,再通过临时表将排好序的记录再保存回原数据表中。