計(jì)算機(jī)等級(jí)考試二級(jí)VFP機(jī)試試題17

字號(hào):

第十七套
    一、基本操作題(共四小題,第1和2題是7分、第3和4題是8分)
     在考生文件夾下完成如下操作:
     1. 創(chuàng)建一個(gè)新的項(xiàng)目"客戶管理"。
     2. 在新建立的項(xiàng)目"客戶管理"中創(chuàng)建數(shù)據(jù)庫(kù)"訂貨管理"。
     3. 在"訂貨管理"數(shù)據(jù)庫(kù)中建立表order_list,表結(jié)構(gòu)如下:
     客戶號(hào) 字符型(6)
     訂單號(hào) 字符型(6)
     訂購(gòu)日期 日期型
     總金額 浮動(dòng)型(15.2)
     4. 為order_list表創(chuàng)建一個(gè)主索引,索引名和索引表達(dá)式均是"訂單號(hào)"。
    本題主要考核點(diǎn):
    創(chuàng)建項(xiàng)目、建立數(shù)據(jù)庫(kù)、在數(shù)據(jù)庫(kù)中建立表、索引的建立
    解題思路:
    第一步:在Visual FoxPro主窗口下按組合鍵Ctrl+N,則系統(tǒng)彈出"新建"對(duì)話框,在文件類(lèi)型中選擇"項(xiàng)目",再點(diǎn)擊"新建文件"按鈕;
    第二步:在彈出的"創(chuàng)建"對(duì)話框中,選定考生文件夾,在項(xiàng)目文件中填入"客戶管理.pjx",再點(diǎn)擊保存按鈕;這樣便新建了一個(gè)項(xiàng)目;
    第三步:在彈出的項(xiàng)目管理器中先選擇"數(shù)據(jù)"標(biāo)簽,再選擇"數(shù)據(jù)庫(kù)",最后點(diǎn)擊"新建"按鈕;
    第四步:在彈出的"新建數(shù)據(jù)庫(kù)"對(duì)話框中點(diǎn)擊"新建文件";
    第五步:在彈出的"創(chuàng)建"對(duì)話框中,選定考生文件夾,在"數(shù)據(jù)庫(kù)名"中填入"訂貨管理.dbc",再點(diǎn)擊保存按鈕;這樣便完成了數(shù)據(jù)庫(kù)的添加;
    第六步:在已新建的項(xiàng)目客戶管理的項(xiàng)目管理器中先選擇"數(shù)據(jù)"標(biāo)簽,再選擇"表",最后點(diǎn)擊"新建"按鈕;
    第七步:在彈出的"新建表"對(duì)話框中點(diǎn)擊"新建表",并在彈出的"創(chuàng)建"對(duì)話框中,選定考生文件夾,在"輸入表名"中填入"order_list.dbf",再點(diǎn)擊保存,
    第八步:在彈出的"表設(shè)計(jì)器中",按題所要求建立表的結(jié)構(gòu)后,選擇"索引"標(biāo)簽,在索引名列中填入"訂單號(hào)",在索引類(lèi)型列中選擇"主索引",在索引表達(dá)式列中填入"訂單號(hào)",點(diǎn)擊"確定"按鈕,保存表結(jié)構(gòu)。
    二、簡(jiǎn)單應(yīng)用(2小題,每題20分,計(jì)40分)
     在考生文件夾下完成如下簡(jiǎn)單應(yīng)用:
     1. 將order_list1表中的全部記錄追加到order_list表中,然后用SQL SELECT 語(yǔ)句完成查詢:按總金額降序列出所有客戶的客戶號(hào)、客戶名及其訂單號(hào)和 總金額,并將結(jié)果存儲(chǔ)到results表中(其中客戶號(hào)、客戶名取自customer 表,訂單號(hào)、總金額取自order_list表)
     2. 打開(kāi)form1表單,并按如下要求進(jìn)行修改(注意:最后保存所做的修改):
     (1) 表單中有5個(gè)隨機(jī)排列的命令按鈕,不要移動(dòng)或改變"基準(zhǔn)按鈕"位置(否則 影響成績(jī)),然后使其他命令按鈕與"基準(zhǔn)按鈕"左部對(duì)齊;
     (2) 在這組命令按鈕的右邊添加一個(gè)表格控件,并將它的RecordSourceType屬性設(shè)置為"表",然后設(shè)置另一個(gè)相關(guān)屬性使在表格控件中顯示customer表 的記錄。
    本題主要考核點(diǎn):
     SQL中的查詢SELECT查詢,聯(lián)接查詢,查詢的排序,查詢的結(jié)果的去向;以及INSERT語(yǔ)句,表單的建立、控件布局、向表單中添加數(shù)據(jù)環(huán)境、控件與數(shù)據(jù)源的綁定等知識(shí)
    解題思路:
    第一小題:將order_list1中的全部記錄追加到order_list中,要將一個(gè)表的所有記錄追加到另一個(gè)表中使用APPEND FROM 命令,首先打開(kāi)order_list:USE ORDER_LIST,在APPEND FROM的后面是要追加到order_list的表名,這里是order_list1。查詢表中的數(shù)據(jù)要用到SELECT命令,要查詢的數(shù)據(jù)來(lái)源于 customer和order_list表,將它們置于FROM的后面,并用逗號(hào)隔開(kāi),并分別為它們指定一個(gè)別名Cu和ORD;由于是聯(lián)接查詢要指明查詢的條件,將聯(lián)接條件CU.客戶號(hào)=ORD.客戶號(hào)放在WHERE短語(yǔ)的后面,同時(shí)要對(duì)結(jié)果集按照總金額的降序進(jìn)行排序,所以要將:總金額 DESC放在ORDER BY 短語(yǔ)的后面,結(jié)果集要存儲(chǔ)到results表中,所以要將:results放在INTO TABLE 后面。由于查詢的結(jié)果不是所有的屬性,所以需要指明結(jié)果的屬性,并且客戶號(hào)在兩個(gè)表中都存在,所以要特別指定此屬性來(lái)自那一個(gè)源表(這里用表的別名來(lái)代替)。這樣就形成了一個(gè)完整的查詢語(yǔ)句:
    SELECT CU.客戶號(hào),CU.客戶名,ORD.訂單號(hào),ORD.總金額 ;
    FROM CUSTOMER CU,ORDER_LIST ORD ;
    WHERE CU.客戶號(hào)=ORD.客戶號(hào) ;
    ORDER BY 總金額 DESC ;
    INTO TABLE RESULTS
    第二題:打開(kāi)考生文件夾下FROM1窗體,拖動(dòng)鼠標(biāo)選中5個(gè)隨機(jī)放置的按鈕和"基準(zhǔn)按鈕"控件,點(diǎn)擊"布局" 工具欄中的"左邊對(duì)齊",便完成了所有按鈕的左對(duì)齊。在表單上放置一表格控件,為表單"數(shù)據(jù)環(huán)境"設(shè)置為customer表,并設(shè)置表格控件的 RecordSourceType屬性設(shè)置為"表",RecordSource屬性設(shè)置為"customer",這樣表格控件便可以顯示表 customer的內(nèi)容。
    三、綜合應(yīng)用(1小題,計(jì)30分)
     當(dāng)order_detail表中的單價(jià)修改后,應(yīng)該根據(jù)該表的"單價(jià)"和"數(shù)量"字段修改 order_list表的總金額字段,現(xiàn)在編寫(xiě)程序?qū)崿F(xiàn)此功能,具體要求和注意事項(xiàng)
     如下:
     (1) 根據(jù)order_detail表中的記錄重新計(jì)算order_list表的總金額字段的值;
     (2) 一條order_list記錄可以對(duì)應(yīng)幾條order_detail記錄;
     (3) 在編程前應(yīng)保證在基礎(chǔ)操作中正確地建立了order_list表,在簡(jiǎn)單應(yīng)用中為 該表追加了記錄(注意只能追加一次);
     (4) 最后將order_list表中的記錄按總金額降序排序存儲(chǔ)到od_new表中(表結(jié)構(gòu) 與order_list表完全相同);
     (5) 將程序保存為prog1.prg文件。
    本題主要考核點(diǎn):
    程序的建立方法、程序中循環(huán)結(jié)構(gòu)的使用、SQL查詢語(yǔ)句的使用、記錄的修改方法等知識(shí)點(diǎn)
    本題解題思路:
    第一步:打開(kāi)項(xiàng)目客戶管理,在項(xiàng)目管理器中先選擇"代碼"標(biāo)簽,再選擇"程序",最后點(diǎn)擊"新建"按鈕。
    第二步:在彈出的窗中中輸入以下代碼:
    SET TALK OFF &&在程序運(yùn)行模式下關(guān)閉命令結(jié)果的顯示
    SET SAFETY ON &&關(guān)閉文件重名時(shí)的提示
    CLOSE ALL
    SELECT 訂單號(hào),SUM(數(shù)量*單價(jià)) AS 總金額;
    FROM ORDER_DETAIL;
    GROUP BY 訂單號(hào);
    INTO CURSOR CurTable
    &&這里首先得到每一個(gè)訂單的總金額,由于每一個(gè)訂單對(duì)應(yīng)有多項(xiàng)記錄,
    &&所以我們要得到每一個(gè)訂單的總金額需要用到SUM函數(shù),SUM(數(shù)量*單價(jià)) AS 總金額
    &&放在SELECT的后面,并和訂單號(hào)用逗號(hào)隔開(kāi);要以訂單號(hào)做為分組的依據(jù),將訂單號(hào)放在
    &&ORDER BY 的后面;將結(jié)果集放入一個(gè)臨時(shí)表CurTable中用INTO CURSOR CurTable
    OPEN DATABASE 訂貨管理
    &&打開(kāi)數(shù)據(jù)庫(kù)文件
    SELECT 2
    &&選擇工作區(qū)
    USE ORDER_LIST
    &&在新的工作區(qū)中打開(kāi)表ORDER_LIST
    DO WHILE NOT EOF() &&遍歷ORDER_LIST中的每一條記錄
    SELECT CurTable.總金額 FROM CurTable;
    WHERE CurTable.訂單號(hào)=order_list.訂單號(hào);
    INTO ARRAY AFieldsValue
    &&以O(shè)RDER_LIST的當(dāng)前記錄的訂單號(hào)做為查詢的條件在臨時(shí)表中得到此訂單的總金額
    &&由于在臨時(shí)表中和當(dāng)前工作區(qū)表中都存在訂單號(hào)字段,所以要在訂單號(hào)字段前加上表名
    &&所以查詢的條件CurTable.訂單號(hào)=order_list.訂單號(hào)放在WHERE子句的后面;查詢的結(jié)
    &&果放入數(shù)據(jù)變量AFieldsValue中,INTO ARRAY AFieldsValue
    REPLACE 總金額 WITH AFieldsValue
    &&利用得到的新的總金額來(lái)代替當(dāng)前記錄的總金額字段
    SKIP
    ENDDO
    CLOSE ALL
    SELECT * FROM ORDER_LIST;
    ORDER BY 總金額 DESC;
    INTO TABLE OD_NEW
    &&以總金額的降序,所以要將總金額 DESC放在ORDER BY 子句的后面;將結(jié)果集
    &&放入一個(gè)永久表OD_NEW,OD_NEW 放在子句INTO TABLE的后面。
    SET SAFETY ON
    SET TALK ON
    第三步:?jiǎn)螕?保存"工具欄按鈕,以文件名prog1.prg保存程序文件
    第四步:在項(xiàng)目管理器中"代碼"選項(xiàng)卡的程序中選擇"prog1",點(diǎn)擊"運(yùn)行"按鈕,執(zhí)行程序。