计算机等级考试:二级VFP机试第18套
来源:优易学  2011-12-9 20:47:20   【优易学:中国教育考试门户网】   资料下载   IT书店

第十八套

一、基本操作题(共四小题,第1和2题是7分、第3和4题是8分)

    在考生文件夹下完成如下操作:

    1. 打开"订货管理"数据库,并将表order_list添加到该数据库中。

    2. 在"订货管理"数据库中建立表order_detail,表结构描述如下:

        订单号     字符型(6)

        器件号     字符型(6)

        器件名     字符型(16)

        单价       浮动型(10.2)

        数量       整型

    3. 为新建立的order_detail表建立一个普通索引,索引名和索引表达式均

       是"订单号"。

4. 建立表order_list和表order_detail间的永久联系(通过"订单号"字段)。

本题主要考核点:

将一个自由表添加到数据库中、表结构的建立、两个表之间建立永久联系等知识点

本题解题思路:

第一步:打开考生文件夹下的"订货管理"数据库

第二步:打开数据库菜单选择"添加表(A)",在弹出的"打开"对话框中,选定考生文件夹下的order_list表,再点击"确定"即可

第三步:再次打开数据库菜单选择"新建表(N)",在弹出的对话框中选择"新建表",并在弹出"创建"对话框中选定考生文件夹,在输入表名中填入"order_detail",再点击保存。

第四步:在弹出的表设计器中按题面的要求依次输入各个字段的定义,选择"索引"标签,在索引名列中填入"订单号",在索引类型列中选择"普通索引",在索引表达式列中填入"订单号",点击"确定"按钮,保存表结构.

第五步:单击选中order_list中的主索引"订单号",并拖拽到order_detail的"订单号"索引上,鼠标箭头会变成小矩形;释放鼠标后,即出现了关系符号,这样便可以建立起永久关系。

二、简单应用(2小题,每题20分,计40分)

    在考生文件夹下完成如下简单应用:

    1. 将 order_detail1表中的全部记录追加到order_detail表中,然后用SQL

       SELECT语句完成查询:列出所有订购单的订单号、订购日期、器件号、器件

       名和总金额(按订单号升序,订单号相同再按总金额降序)

       并将结果存储到results表中(其中订单号、订购日期、总金额取自    

       order_list表,器件号、器件名取自order_detail表)。

    2. 打开modi1.prg命令文件,该命令文件包含3条SQL语句,每条SQL语句中都有

       一个错误,请改正之(注意:在出现错误的地方直接改正,不可以改变SQL

语句的结构和SQL短语的顺序)。

本题主要考核点:

     SQL中的查询SELECT查询,联接查询,查询的排序,查询的结果的去向和SELECT中的短语的正确使用。

解题思路:

第一小题:将order_detail1中的全部记录追加到order_detail中,要将一个表的所有记录追加到另一个表中使用APPEND FROM 命令,首先打开order_detail:USE ORDER_DETAIL,在APPEND FROM的后面是要追加到order_DETAIL的表名,这里是order_DETAIL1。查询表中的数据要用到SELECT命令,要查询的数据来源于ORDER_DETAIL和order_list表,将它们置于FROM的后面,并用逗号隔开,并分别为它们指定一个别名DetAlias和 LisAlias;由于是联接查询要指明查询的条件,将联接条件DetAlias.订单号=LisAlias.订单号放在WHERE短语的后面,同时要对结果集按照订单号的升序和总金额的降序进行排序,所以要将:订单号,总金额 DESC放在ORDER BY 短语的后面,结果集要存储到results表中,所以要将:results放在INTO TABLE 后面。由于查询的结果不是所有的属性,所以需要指明结果的属性,并且订单号在两个表中都存在,所以要特别指定此属性来自那一个源表(这里用表的别名来代替)。这样就形成了一个完整的查询语句:

SELECT LisAlias.订单号,订购日期,器件号,器件名,总金额;

FROM ORDER_LIST LisAlias,ORDER_DETAIL DetAlias;

WHERE LisAlias.订单号=DetAlias.订单号;

ORDER BY LisAlias.订单号,总金额 DESC;

INTO TABLE RESULTS

第二题:&&所有器件的单价增加5元

 UPDATE order_detail1 SET 单价 WITH 单价 + 5

 &&这里混淆了SQL语句和FoxPro命令。用SQL语句中的UPDATE可以更新记录的内容,而不是

 &&用WITH,而是用等号。所以应该改为:UPDATE ORDER_DETAIL1 SET 单价=单价+5

&&计算每种器件的平均单价

SELECT 器件号,AVG(单价) AS 平均价 FROM order_detail1 ORDER BY 器件号 INTO CURSOR lsb

&&这里将分组的子句GROUP BY与排序的子句ORDER BY相混淆了,这里应该用分组的子句&&GROUP BY来代替排序的子句ORDER BY子句。

&&查询平均价小于500的记录

SELECT * FROM lsb FOR 平均价 < 500

     &&在SQL的查询语句中表示条件的是用WHERE子句,与在FoxPro中的List命令用FOR不同。

三、综合应用(1小题,计30分)

    在做本题前首先确认在基础操作中已经正确地建立了order_detail表,在简单

    应用中已经成功地将记录追加到order_detail表。

    当order_detail表中的单价修改后,应该根据该表的"单价"和"数量"字段修改

    order_list表的总金额字段,现在有部分order_list记录的总金额字段值不正

    确,请编写程序挑出这些记录,并将这些记录存放到一个名为od_mod的表中

   (与order_list表结构相同,自己建立),然后根据order_detail表的"单

    价"和"数量"字段修改od_mod表的总金额字段(注意一个od_mod记录可能对应几

    条order_detail记录),最后od_mod表的结果要求按总金额升序排序,编写的

    程序最后保存为prog1.prg。

本题主要考核点:

程序的建立方法、程序中循环结构的使用、SQL查询语句的使用、记录的修改方法等知识点

本题解题思路:

第一步:在VisualFoxPro主窗口下按组合键Ctrl+N,系统弹出"新建"对话框,在"文件类型"中选择"程序",再点击"新建文件"按钮,则系统弹出程序编辑窗口;

第二步:在弹出的窗中中输入以下代码:

SET TALK ON

SET SAFETY ON

&&计算出每个订单的总金额

SELECT 订单号,SUM(单价*数量) AS 总金额;

FROM ORDER_DETAIL;

GROUP BY 订单号;

INTO CURSOR CurTable

&&首先应该得到每一订单的总金额。由于同一个订单由多种商品组成,所以要求出

&&同一订单的总金额应该将同一订单所包含的商品合计在一起,这就作到了SUM函数

&&其分组的依据是订单号放在ORDER BY子句的后面,将结果集放入一个临时表CurTable,

&&将临时表名CurTable放在INTO CURSOR子句的后面

SELECT ORDER_LIST.*;

FROM ORDER_LIST,CurTable;

WHERE ORDER_LIST.订单号=CurTable.订单号 AND ORDER_LIST.总金额<>CurTable.总金额;

INTO TABLE OD_MOD

&&根据上面所得到的临时表中每一订单的总金额来得到order_list中不正确的记录

&&由于要在一个查询中用到另一个表所以要用到查询,将它们分别放在FROM子句

&&的后面,两个表名之间用逗号隔开;在WHERE子句中放入联接的条件和查询的条件

&& ORDER_LIST.订单号=CurTable.订单号 AND ORDER_LIST.总金额<>CurTable.总金额

&&查询的结果集要放入永久表OD_MOD中,将OD_MOD放在INTO TABLE子句的后面

USE OD_MOD

DO WHILE NOT EOF()     &&遍历OD_MOD中的每一条记录

    SELECT CurTable.总金额 FROM CurTable;

    WHERE CurTable.订单号=OD_MOD.订单号;

    INTO ARRAY AFieldsValue

    &&从临时表CurTable中得到与当前记录的订单号相同的订单的正确的总金额

    &&将条件CurTable.订单号=OD_MOD.订单号,放在WHERE子句的后面;

    &&将结果放入一个数组变量AFieldsValue中

    REPLACE 总金额 WITH AFieldsValue

    &&用正确的总金额来代替原来的总金额

    SKIP

ENDDO

CLOSE ALL

&&先生成一个临时表

SELECT * FROM OD_MOD ORDER BY 总金额;

INTO CURSOR CurTable

&&再从临时表生成表,并覆盖原表

SELECT * FROM CurTable INTO TABLE OD_MOD

SET TALK OFF

SET SAFETY OFF

第三步:单击"保存"工具栏按钮,以文件名prog1.prg保存程序文件在考生文件夹下,并运行程序。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训