1、国家二级 VF机试-试卷 15及答案解析(总分:12.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.基本操作题()(分数:2.00)_2.(1)建立数据库 orders_manage。 (2)将自由表 employee和 orders添加到新建的 orders_manage数据库中。 (3)表 employee与表 orders具有一对多联系,为建立两表之间的联系建立必要的索引。 (4)建立两表之间的联系并设置参照完整性规则如下:更新规则为“级联”,删除规则为“级联”,插入规则为“限制”。(分数:2.00)_二、简单应用题(总题数:2,分数:4.00)3.简单应用
2、题()(分数:2.00)_4.在考生文件夹下的 selldb数据库中包含“部门表”、“销售表”、“部门成本表”和“商品代码表”等。 (1)在考生文件夹下已有程序文件 threeprg,其功能如下:查询 2006年各部门商品的年销售利润情况。查询内容为:“部门号”、“部门名”、“商品号”、“商品名”和“年销售利润”,其中“年销售利润”等于销售表中一季度利润、二季度利润、三季度利润和四季度利润的合计。查询结果按部门号升序,然后按年销售利润降序排序,并将查询结果输出到表 taba中。表 taba的字段名分别为:“部门号”、“部门名”、“商品号”、“商品名”和“年销售利润”。 请打开程序文件 thre
3、eprg,修改其中的错误,然后运行该程序。 (2)请用 SQL语句查询 2005年度的各部门的“部门号”、“部门名”、“一季度利润合计”、“二季度利润合计”、“三季度利润合计”、“四季度利润合计”。查询结果按“部门号”升序排序存入表 account中,并将 SQL语句存入 fourprg 中。 注意:表 accountdbf 中的字段名依次为“部门号”、“部门名”、“一季度利润”、“二季度利润”、“三季度利润”和“四季度利润”。(分数:2.00)_三、综合应用题(总题数:2,分数:4.00)5.综合应用题()(分数:2.00)_6.在考生文件夹下创建一个下拉式菜单 mymenumnx,并生成菜
4、单程序 mymenumpr。运行该菜单程序时会在当前 Visual FoxPro系统菜单的“帮助”子菜单之前插入一个“考试”子菜单,如图 1-16所示。(分数:2.00)_国家二级 VF机试-试卷 15答案解析(总分:12.00,做题时间:90 分钟)一、基本操作题(总题数:2,分数:4.00)1.基本操作题()(分数:2.00)_解析:2.(1)建立数据库 orders_manage。 (2)将自由表 employee和 orders添加到新建的 orders_manage数据库中。 (3)表 employee与表 orders具有一对多联系,为建立两表之间的联系建立必要的索引。 (4)建立
5、两表之间的联系并设置参照完整性规则如下:更新规则为“级联”,删除规则为“级联”,插入规则为“限制”。(分数:2.00)_正确答案:(正确答案:(1)在命令窗口执行命令; MODIFY DATABASEorders_manaqe ,新建数据库并打开数据库设计器。 (2)在数据库设计器中右击鼠标,选择【添加表】快捷菜单命令,在弹出的“打开”对话框中双击 employee表,将表添加到数据库中,以同样的方法将 orders表添加到数据库中。如图 2-27和图 2-28所示。 (3)右击数据库设计器中的 employee表,选择【修改】快捷菜单命令,打开 employee表设计器,在“字段”选项卡中选
6、中“职工号”,在“索引”列中选择“升序”,然后在“索引”选项卡中修改“索引类型”为“主索引”,建立“职工号”字段的主索引,单击“确定”按钮保存表结构修改。 )解析:解析:本大题考查了数据库的建立及使用、索引的建立,建立表间联系及参照完整性的设置。 为数据库添加表可以在数据库设计器中进行;参照完整性是针对同一数据库中的两个表进行设置的,因此建立参照完整性前要先建立两个表的关联,且有一个表中必须建立关联字段的主索引(或候选索引),另一个表要建立普通索引。本题的重点是如何确立索引。由于 employee表和 orders表的关联字段是“职工号”,而“职工号”在 employee表中是没有重复值的,所
7、以应该在 employee表中的“职工号”字段上建立主索引,相应地,在 orders表的“职工号”字段上建立普通索引。二、简单应用题(总题数:2,分数:4.00)3.简单应用题()(分数:2.00)_解析:4.在考生文件夹下的 selldb数据库中包含“部门表”、“销售表”、“部门成本表”和“商品代码表”等。 (1)在考生文件夹下已有程序文件 threeprg,其功能如下:查询 2006年各部门商品的年销售利润情况。查询内容为:“部门号”、“部门名”、“商品号”、“商品名”和“年销售利润”,其中“年销售利润”等于销售表中一季度利润、二季度利润、三季度利润和四季度利润的合计。查询结果按部门号升序
8、,然后按年销售利润降序排序,并将查询结果输出到表 taba中。表 taba的字段名分别为:“部门号”、“部门名”、“商品号”、“商品名”和“年销售利润”。 请打开程序文件 threeprg,修改其中的错误,然后运行该程序。 (2)请用 SQL语句查询 2005年度的各部门的“部门号”、“部门名”、“一季度利润合计”、“二季度利润合计”、“三季度利润合计”、“四季度利润合计”。查询结果按“部门号”升序排序存入表 account中,并将 SQL语句存入 fourprg 中。 注意:表 accountdbf 中的字段名依次为“部门号”、“部门名”、“一季度利润”、“二季度利润”、“三季度利润”和“四
9、季度利润”。(分数:2.00)_正确答案:(正确答案:(1)步骤 1:在命令窗口执行命令: MODIFY COMMAND three ,打开程序文件,文件中的命令代码如下: *请改正以下语句代码中的错误,然后运行程序。SELECT 部门表部门号,部门表部门名,销售表商品号,商品代码表商品名,销售表一季度利润+销售表二季度利润+销售表三季度利润+销售表四季度利润 AS年销售利润; FRON 部门表,销售表,商品代码表; ON 销售表商品号=商品代码表商品号; ON 部门表部门号=销售表部门号; WHERE 销售表年度=“2006“; ORDER 1,5; TO TABLE TABA 修改程序中的
10、错误行,修改后的程序如下: SELECT 部门表部门号,部门表部门名,销售表商品号,商品代码表商品名,销售表一季度利润+销售表二季度利润+销售表三季度利润+销售表四季度利润 AS年销售利润; FRON selldb!商品代码表INNER JOIN selldb!销售表 TNNER JOIN selldb!部门表; ON 销售表商品号=商品代码表商品号; ON 部门表部门号=销售表部门号; WHERE 销售表年度=“2006“; ORDER BY 1,5 DESC; INTO TABLE TABA 步骤 2:保存文件修改,在命令窗口执行命令: DO three ,执行程序文件。 (2)步骤 1:
11、在命令窗口执行命令: NODIFY COMMAND four ,打开程序文件,文件中的命令代码如下: SELECT 部门表部门号,部门名,SUN(一季度利润) 一季度利润,SUN(二季度利润)二季度利润,SUN(三季度利润)三季度利润,SUN(四季度利润)四季度利润; FRON 部门表,销售表; NHERE 部门表部门号=销售表部门号 AND年度=“2005“; GROUP BY 部门表部门号; ORDER BY 销售表部门号; INTO TABLE account 步骤 2:保存文件修改,在命令窗口执行命令: DO four ,执行程序文件。)解析:解析:(1)本题考查了 SQL简单联接查询
12、,语句比较简单。题目提供的程序中共有 3处错误,第一处是多表联接的表示错误。当进行多表联接时,如果没有使用 JOTN指定联接的表,而是将所有联接的表都放在 FROM短语后,则表间的联接条件不能使用 ON短语指定,只能将联接条件放在 WHERE短语之后,各联接条件通过 AND运算符联接。 第二处错误是排序短语的错误,排序短语关键字是 ORDER BY。 第三处错误是查询输出短语错误,将结果保存到数据表中应使用 INTO TABLE短语。 (2)本题主要考查的是 SQL分组计算查询。本题根据“部门号”字段分组,计算每个部门每个季度销售利润合计,利用 SUN()函数求合计值。三、综合应用题(总题数:
13、2,分数:4.00)5.综合应用题()(分数:2.00)_解析:6.在考生文件夹下创建一个下拉式菜单 mymenumnx,并生成菜单程序 mymenumpr。运行该菜单程序时会在当前 Visual FoxPro系统菜单的“帮助”子菜单之前插入一个“考试”子菜单,如图 1-16所示。(分数:2.00)_正确答案:(正确答案:步骤 1:在命令窗口执行命令: CREATE MENU mymenu ,在弹出的“新建菜单”对话框中单击“菜单”图标按钮,打开菜单设计器。 步骤 2:在菜单设计器“菜单名称”列的文本框中输入“考试”,在“结果”下拉框中选择“子菜单”,单击“创建” 按钮进入下级菜单设计,在“菜
14、单名称”列的第 1、2 行文本框中依次输入子菜单名“统计”、“返回”,将“统计”和“返回”子菜单的“结果”都设置为“过程”,单击“统计”子菜单行的“创建”命令按钮,打开过程编辑框编写过程代码。步骤 3:两个子菜单的命令代码如下: *“统计”子菜单的过程代码* SELECT Employee组别,SUM(Orders金额) AS 合计; FROM 订单管理!employee INNER JOIN 订单管理!orders; ON Employee职员号=Orders职员号; GROUP BY Employee组别; INTO CURSOR RES SELECT Res组别,Employee姓名 A
15、S负责人,Res合计,FROM Res,Employee; WHERE Res组别 =Employee组别; AND Employee职务=”组长”; ORDER BY Res合计 DESC; INTO TABLE tabletwodbf *“返回”子菜单的命令代码* SET SYSMENU NOSAVE SET SYSMENU TO DEFAULT 步骤 4:执行【显示】【常规选项】菜单命令,在“位置”区域选中“在之前”单选项,然后在该选项后面出现的下拉框中选择“帮助(H)”。则新建立的子菜单会在当前 Visual FoxPro系统菜单的“帮助”菜单命令前显示。 步骤 5:执行【菜单】【生成
16、】菜单命令,在弹出的 Visual FoxPro对话框中单击“是”按钮,接着系统会弹出“生成菜单”对话框,单击“生成”按钮生成一个可执行的菜单文件。 步骤 6:在命令窗口执行命令: DO mymenumpr ,运行菜单,并执行“统计”菜单命令。)解析:解析:本大题考查菜单的建立及使用;SQL 简单联接查询和分组计算查询。 表的建立和菜单的建立都属于比较基本的操作,注意向系统菜单追加菜单项时,应在菜单设计器中打开“常规选项”对话框进行设置。本题的关键是菜单命令中 SQL查询、插入和更新语句的设计。编写程序代码基本思路如下: 首先利用 SQL计算查询,统计每组的订单金额总和,将结果保存到临时表中,其中,利用 SUM()函数可以计算订单金额总和,利用 GROUP BY短语按“组别”字段分细计算。 接着,对新生成的临时表与 Emp1表进行联接查询,两个表的联接字段为“组别”(注意:该字段要作为临时表的输出字段,此处才可以进行联接),同时,通过 WHERE短语筛选 Empl表中职务为“组长”的职员记录(这可以保证一个订单金额总和字段仅与一条职员信息联接,否则将导致查询结果表中会生成多条职员记录与订单金额总和联接,因为同一个“组别”中有多个职员记录);最后将查询结果保存到永久性表中,完成查询。 菜单设计完成后,注意要生成可执行的菜单文件,并执行“统计”菜单命令。