計算機等級考試二級VFP上機試題及解題思路(21)

字號:

計算機等級考試二級VFP上機試題及解題思路(21)

    第二十一套
    一、基本操作題(共四小題,第1和2題是7分、第3和4題是8分)
    在考生文件夾下完成如下操作:
    1. 打開"訂貨管理"數(shù)據(jù)庫,并將表order_detail添加到該數(shù)據(jù)庫中。
    2. 為表order_detail的"單價"字段定義默認值為NULL。
    3. 為表order_detail的"單價"字段定義約束規(guī)則:單價 > 0 ,違背規(guī)則時的提示信息是:"單價必須大于零"。
    4. 關閉"訂貨管理"數(shù)據(jù)庫,然后建立自由表customer,表結構如下:
    客戶號 字符型(6)
    客戶名 字符型(16)
    地址 字符型(20)
    電話 字符型(14)
    本題主要考核點:
    將一個自由表添加到數(shù)據(jù)庫中、為字段建立約束規(guī)則、設置字段的默認值、建立表的結構等知識點
    本題解題思路:
    第一步:打開考生文件夾下的"訂貨管理"數(shù)據(jù)庫
    第二步:打開數(shù)據(jù)庫菜單選擇"添加表(A)",在彈出的"打開"對話框中,選定考生文件夾下的order_detail表,再點擊"確定"即可,這樣表order_detail就添加到了"訂貨管理"數(shù)據(jù)庫中
    第三步:在數(shù)據(jù)庫設計器中選中"order_detail"表,選擇數(shù)據(jù)庫菜單下的"修改(V)",彈出表設計器,在表設計器中點擊"單價"所在的行,單擊Null列上的按鈕,確認按鈕上出現(xiàn)對號,在字段有效性的規(guī)則字段中輸入:單價>0,在信息框中輸入: "單價必須大于0",在默認值框中輸入:.NULL.。確定即可
    第四步:關閉數(shù)據(jù)庫,在Visual FoxPro主窗口中按下組合鍵Ctrl+N。系統(tǒng)彈出"新建"對話框,在"文件類型"中選擇表,在彈出的對話框中選擇"新建表",并在彈出"創(chuàng)建"對話框中選定考生文件夾,在輸入表名中填入"customer",再點擊保存。
    第四步:在彈出的表設計器中按題面的要求依次輸入各個字段的定義,點擊"確定"按鈕,保存表結構。
    二、簡單應用(2小題,每題20分,計40分)
    在考生文件夾下完成如下簡單應用:
    1. 列出總金額大于所有訂購單總金額平均值的訂購單(order_list)清單(按客戶號升序排列),并將結果存儲到results表中(表結構與order_list表結構相同)。
    2. 利用Visual Foxpro的"快速報表"功能建立一個滿足如下要求的簡單報表:
    (1) 報表的內(nèi)容是order_detail表的記錄(全部記錄,橫向);
    (2) 增加"標題帶區(qū)",然后在該帶區(qū)中放置一個標簽控件,該標簽控件顯示報表的標題"器件清單";
    (3) 將頁注腳區(qū)默認顯示的當前日期改為顯示當前的時間;
    (4) 最后將建立的報表保存為report1.frx。
    本題主要考核點:
    SQL中的查詢SELECT查詢、聯(lián)接查詢、查詢的排序、查詢的結果的去向等;報表的建立方法等知識點.
    解題思路:
    第一小題:為了能得到所有總金額大于平均總金額的訂購單信息,應該首先得到總金額的平均值,利用:SELECT AVG(總金額) FROM ORDER_LIST INTO ARRAY AFieldsValue,并將總金額的平均值放到一個數(shù)組變量之中AFieldsValue;下一步就可以以總金額>AFieldsValue為條件得到總金額大于平均總金額的訂購單信息,將這一條件放在WHERE子句的后面,查詢結果的排序要用到ORDER BY子句,ORDER BY 客戶號;查詢結果要放入一個永久表中要用到INTO TABLE子句,結果保存到RESULTS表中所以要用INTO TABLE RESULTS.本題由兩條SQL語句組成:
    SELECT AVG(總金額) FROM ORDER_LIST INTO ARRAY AFieldsValue
    SELECT * FROM ORDER_LIST WHERE 總金額>AFieldsValue;
    ORDER BY 客戶號;
    INTO TABLE RESULTS
    第二小題:
    第一步:在Visual FoxPro主窗口按下組合鍵Ctrl+N,系統(tǒng)彈出"新建"對話框,在"文件類型"中選擇"報表",再點擊新建文件按鈕,系統(tǒng)彈出報表設計器
    第二步:單擊主窗口"報表"菜單下的"快速報表(O)",系統(tǒng)彈出"打開"對話框,選擇考生文件夾下的order_detail.dbf表,單擊"確定",系統(tǒng)彈出"快速報表"對話框,單擊"確定"按鈕后便生成了一個報表,將報表文件以文件名report1.frx保存在考生文件夾下。
    第三步:選擇主菜單"報表"下的"標題/總結(T)",彈出"標題/總結"對話框,在"報表標題"類型中選擇"標題帶區(qū)",單擊"確定"按鈕,這樣就在報表中加入了一個"標題帶區(qū)",打開"報表控件工具欄",在打開的"報表控件"中選擇"標簽"控件,在標題帶區(qū)點擊鼠標,輸入"器件清單"
    第四步:雙擊"頁注腳"中的顯示當前日期的域控件,打開"報表表達式",在"表達式"文本框中將原來的DATE()用TIME()來代替。點擊"確定"
    第五步:以文件名report1.frx將報表文件保存在考生文件夾下。
    三、綜合應用(1小題,計30分)
    首先將order_detail表全部內(nèi)容復制到od_bak表,然后對od_bak表編寫完成如下
    功能的程序:
    1. 把"訂單號"尾部字母相同并且訂貨相同 ("器件號"相同)的訂單合并為一張訂單,新的"訂單號"就取原來的尾部字母,"單價"取,"數(shù)量" 取合計;
    2. 結果先按新的"訂單號"升序排序,再按"器件號"升序排序;
    3. 最終記錄的處理結果保存在od_new表中;
    4. 最后將程序保存為prog1.prg,并執(zhí)行該程序。
    本題主要考核點:
    程序的建立方法、程序中循環(huán)結構的使用、SQL查詢語句的使用、記錄的修改方法;報表的建立方法等知識點
    本題解題思路:
    第一步:在VisualFoxPro主窗口下按組合鍵Ctrl+N,系統(tǒng)彈出"新建"對話框,在"文件類型"中選擇"程序",再點擊"新建文件"按鈕,則系統(tǒng)彈出程序編輯窗口;
    第二步:在彈出的窗中中輸入以下代碼:
    SET TALK OFF
    SET SAFETY OFF
    sele * from order_detail into table od_bak
    &&復制一個表用來存放結果
    USE OD_BAK
    COPY STRUCTURE TO OD_NEW
    &&首先得到所有的新定單號和器件號:
    SELECT RIGHT(訂單號,1) AS 新訂單號,器件名,器件號,;
    RIGHT(訂單號,1)+器件號 AS NEWNUM;
    FROM OD_BAK;
    GROUP BY NEWNUM;
    ORDER BY 新訂單號,器件號;
    INTO CURSOR CurTable
    DO WHILE NOT EOF()
    &&得到單價和數(shù)量
    SELECT MIN(單價) AS ,SUM(數(shù)量) AS 數(shù)量合計;
    FROM OD_BAK;
    WHERE RIGHT(訂單號,1)=CurTable.新訂單號 AND 器件號=CurTable.器件號;
    INTO ARRAY AFieldsValue
    INSERT INTO OD_NEW VALUES;
    (CurTable.新訂單號,CurTable.器件號,CurTable.器件名,AFieldsValue(1,1),AFieldsValue(1,2))
    SKIP
    ENDDO
    CLOSE ALL
    SET TALK ON
    SET SAFETY ON
    第三步:單擊"保存"工具欄按鈕,以文件名prog1.prg保存程序文件在考生文件夾下,并運行程序。