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