省考軟件設(shè)計師考試模擬題及答案資格證從業(yè)考試題卷測試題_第1頁
省考軟件設(shè)計師考試模擬題及答案資格證從業(yè)考試題卷測試題_第2頁
省考軟件設(shè)計師考試模擬題及答案資格證從業(yè)考試題卷測試題_第3頁
省考軟件設(shè)計師考試模擬題及答案資格證從業(yè)考試題卷測試題_第4頁
省考軟件設(shè)計師考試模擬題及答案資格證從業(yè)考試題卷測試題_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 軟件設(shè)計師考試模擬題及答案-試題一 閱讀以下說明以及數(shù)據(jù)流圖,回答問題1至問題5。【說明】 某銀行已有一套基于客戶機/服務(wù)器模式的儲蓄系統(tǒng)A和一套建賬軟件。建賬軟件主要用于將儲蓄所手工處理的原始數(shù)據(jù)轉(zhuǎn)換為系統(tǒng)A所需的數(shù)據(jù)格式。該建賬軟件具有以下功能。 (1)分戶賬錄入:手工辦理業(yè)務(wù)時建立的每個分戶賬數(shù)據(jù)均由初錄員和復(fù)錄員分別錄入,以確保數(shù)據(jù)的正確性。 (2)初錄/復(fù)錄比對:將初錄員和復(fù)錄員錄入的數(shù)據(jù)進行一一比較,并標記兩套數(shù)據(jù)是否一致。 (3)數(shù)據(jù)確認:當上述兩套數(shù)據(jù)完全一致后,將其中任一套作為最終進入系統(tǒng)A的原始數(shù)據(jù)。 (4)匯總核對和打印:對經(jīng)過確認的數(shù)據(jù)進行匯總,并和會計賬目中的相關(guān)數(shù)

2、據(jù)進行核對,以確保數(shù)據(jù)的整體正確性,并打印輸出經(jīng)過確認的數(shù)據(jù),為以后核查可能的錯誤提供依據(jù)。 (5)數(shù)據(jù)轉(zhuǎn)換:將經(jīng)過確認的數(shù)據(jù)轉(zhuǎn)換為儲蓄系統(tǒng)A需要的中間格式數(shù)據(jù)。 (6)數(shù)據(jù)清除:為加快初錄和復(fù)錄的處理速度,在數(shù)據(jù)確認之后,可以有選擇地清除初錄員和復(fù)錄員錄入的數(shù)據(jù)。 該軟件的數(shù)據(jù)流圖如圖10-1至圖10-3所示。圖中部分數(shù)據(jù)流數(shù)據(jù)文件的格式如下: 初錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當前余額+性質(zhì) 復(fù)錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當前余額+性質(zhì) 初錄數(shù)據(jù)=手工分戶賬+一致性標志 復(fù)錄數(shù)據(jù)=手工分戶賬+一致性標志 會計賬目=儲蓄所號+總戶數(shù)+總余額 操作結(jié)果=

3、初錄操作結(jié)果+比對操作結(jié)果+復(fù)錄操作結(jié)果 軟件需要打印的分戶賬清單樣式如表10-1所示: 表10-1 分戶賬清單樣式表儲蓄所賬號開戶日戶名其他分戶賬數(shù)據(jù)儲蓄所1儲蓄所1合計共戶,總余額9999999.99元儲蓄所2儲蓄所2合計共戶,總余額9999999.99元1、【問題1】 請采用說明中的詞匯,給出數(shù)據(jù)確認處理所需的數(shù)據(jù)流在第1層圖中的全部可選起點(第0層圖和第1層圖中均未給出)。2、【問題2】 不考慮數(shù)據(jù)確認處理(加工2),請指出數(shù)據(jù)流圖中存在的錯誤。3、【問題3】 打印分戶賬清單時,必須以下列哪一組數(shù)據(jù)作為關(guān)鍵字進行排序,才能滿足需求?請從下面選項中選擇。 儲蓄所 賬號 開戶日 總戶數(shù)和總

4、余額4、【問題4】 加工1(錄入比對處理)除能夠檢查出初錄數(shù)據(jù)和復(fù)錄數(shù)據(jù)不一致外,還應(yīng)當檢測出下列哪些錯誤。 輸入的無效字符 輸入的半個漢字 顯示器無法顯示 初錄員重復(fù)錄入同一賬戶 匯總數(shù)據(jù)與會計賬目不符 打印機卡紙5、【問題5】 請使用數(shù)據(jù)字典條目定義形式,給出第0層DFD中的“手工分戶賬”數(shù)據(jù)流和第1層DFD中的“初錄分戶賬”、“復(fù)錄分戶賬”的關(guān)系。試題二 閱讀以下說明,回答問題1至問題4。【說明】 某賓館需要建立一個住房管理系統(tǒng),部分的需求分析結(jié)果如下: (1)一個房間有多個床位,同一房間內(nèi)的床位具有相同的收費標準,不同房間的床位收費標準可能不同; (2)每個房間有房間號(如201、20

5、2等)、收費標準、床位數(shù)目等信息; (3)每位客人有身份證號碼、姓名、性別、出生日期和地址等信息: (4)對每位客人的每次住宿,應(yīng)該記錄其入住日期、退房日期和預(yù)付款額信息; (5)管理系統(tǒng)可查詢出客人所住房間號。 根據(jù)以上的需求分析結(jié)果,設(shè)計一種關(guān)系模型如下圖所示: 6、【問題1】 根據(jù)上述說明和實體-聯(lián)系圖,得到該住房管理系統(tǒng)的關(guān)系模式如下所示,請補充住宿關(guān)系。 房間(房間號,收費標準,床位數(shù)目) 客人(身份證號,姓名,性別,出生日期,地址) 住宿( (1) ,入住日期,退房日期,預(yù)付款額)7、【問題2】 請給出問題1中住宿關(guān)系的主鍵和外鍵。8、【問題3】 若將上述各關(guān)系直接實現(xiàn)為對應(yīng)的物理

6、表,現(xiàn)需查詢在2005年1月1日到2005年 12月31日期間,在該賓館住宿次數(shù)大于5次的客人身份證號,并且按照入住次數(shù)進行降序排列。下面是實現(xiàn)該功能的SQL語句,請?zhí)钛a語句中的空缺。 SELECT 住宿身份證號,count (入住日期) FROM 住宿,客人 WHERE 入住日期=20050101AND入住日期=20051231 AND 住宿身份證號=客人身份證號 GROUP BY (2) (3) count(入住日期)5 (4) 9、【問題4】 為提交SQL語句的執(zhí)行效率,可在相應(yīng)的表上創(chuàng)建索引。根據(jù)問題3中的SQL語句,除主鍵和外鍵外,還需要在哪個表的哪些屬性上創(chuàng)建索引,應(yīng)該創(chuàng)建什么類型

7、的索引,請說明原因。試題三 閱讀以下說明和圖,回答問題1至問題3?!菊f明】 S公司開辦了在線電子商務(wù)網(wǎng)站,主要為各注冊的商家提供在線商品銷售功能。為更好地吸引用戶,S公司計劃為注冊的商家提供商品(Commodity)促銷(Promotion)功能。商品的分類(Category)不同,促銷的方式和內(nèi)容也會有所不同。 注冊商家可發(fā)布促銷信息。商家首先要在自己所銷售的商品的分類中,選擇促銷涉及的某一具體分類,然后選出該分類的一個或多個商品(一種商品僅僅屬于一種分類),接著制定出一個比較優(yōu)惠的折扣政策和促銷活動的優(yōu)惠時間,最后由系統(tǒng)生成促銷信息并將該促銷信息公布在網(wǎng)站上。 商家發(fā)布促銷信息后,網(wǎng)站的注

8、冊用戶便可通過網(wǎng)站購買促銷商品。用戶可選擇參與某一個促銷活動,并選擇具體的促銷商品,輸入購買數(shù)量等購買信息。系統(tǒng)生成相應(yīng)的一份促銷訂單(POrder)。只要用戶在優(yōu)惠活動的時間范圍內(nèi),通過網(wǎng)站提供的在線支付系統(tǒng),確認在線支付該促銷訂單(即完成支付),就可以優(yōu)惠的價格完成商品的購買活動,否則該促銷訂單失效。 系統(tǒng)采用面向?qū)ο蠓椒ㄩ_發(fā),系統(tǒng)中的類以及類之間的關(guān)系用UML類圖表示,圖 10-4是該系統(tǒng)類圖中的一部分;系統(tǒng)的動態(tài)行為采用UML序列圖表示,圖10-5是發(fā)布促銷的序列圖。 10、【問題1】 識別關(guān)聯(lián)的多重度是面向?qū)ο蠼_^程中的一個重要步驟。根據(jù)說明中給出的描述,完成圖10-4中的(1)(

9、6)。11、【問題2】 請從表10-2中選擇方法,完成圖10-5中的(7)(10)。 表10-2 可選消息列表功能描述方法名向促銷訂單中添加所選的商品buyCommodities向促銷中添加要促銷的商品addCommodities查找某個促銷的所有促銷訂單信息列表getPromotionOrders生成商品信息createCommodity查找某個分類中某商家的所有商品信息列表getCommodities生成促銷信息createPromotion生成促銷訂單信息createPOrder查找某個分類的所有促銷信息列表getCategoryPromotion查找某商家所銷售的所有分類列表getCa

10、tegories查找某個促銷所涉及的所有商品信息列表getPromtionCommodities12、【問題3】 關(guān)聯(lián)(Association)和聚集(Aggregation)是UML中兩種非常重要的關(guān)系。請說明關(guān)聯(lián)和聚集的關(guān)系,并說明其不同點。試題四 閱讀以下說明和圖,填補流程圖中的空缺。13、【說明】 某汽車制造工廠有兩條裝配線。汽車裝配過程如圖10-6所示,即汽車底盤進入裝配線,零件在多個工位裝配,結(jié)束時汽車自動完成下線工作。 (1)e0和e1表示底盤分別進入裝配線0和裝配線1所需要的時間。 (2)每條裝配線有n個工位,第一條裝配線的工位為S0,0,S0,1,S0,n-0,第二條裝配線的

11、工位為S1,0,S1,1,S1,n-1。其中S0,k和S1,k(0kn-1)完成相同的任務(wù),但所需時間可能不同。 (3)aij表示在工位Sij處的裝配時間,其中i表示裝配線(i=0或i=1),j表示工位號(0jn-1)。 (4)tij表示從Sij處裝配完成后轉(zhuǎn)移到另一條裝配線下一個工位的時間。 (5)X0和X1表示裝配結(jié)束后,汽車分別從裝配線0和裝配線1下線所需要的時間。 (6)在同一條裝配線上,底盤從一個工位轉(zhuǎn)移到其下一個工位的時間可以忽略不計。 圖10-7所示的流程圖描述了求最短裝配時間的算法,該算法的輸入為; n: 表示裝配線上的工位數(shù); ei: 表示e1和e2,i取值為0或1: aij

12、: 表示ai,j,i的取值為0或1,j的取值范圍為0n-1; tij: 表示ti,j,i的取值為0或1,j的取值范圍為0n-1; xi: 表示X0和X1,i取值為0或1。 算法的輸出為: fi:最短的裝配時間; li:獲得最短裝配時間的下線裝配線號(0或者1)。 算法中使用的fij表示從開始點到Si,j處的最短裝配時間。 試題五 閱讀以下說明、圖和C代碼。14、【說明】 一般的樹結(jié)構(gòu)常采用孩子-兄弟表示法表示,即用二叉鏈表作樹的存儲結(jié)構(gòu),鏈表中結(jié)點的兩個鏈域分別指向該結(jié)點的第一個孩子結(jié)點和下一個兄弟結(jié)點。例如,圖10-8(a)所示的樹的孩子-兄弟表示如圖10-8(b)所示。 函數(shù)LevelTr

13、averse()的功能是對給定樹進行層序遍歷。例如,對圖10-1所示的樹進行層序遍歷時,結(jié)點的訪問次序為D B A E F P C。 對樹進行層序遍歷時使用了隊列結(jié)構(gòu),實現(xiàn)隊列基本操作的函數(shù)原型如下表所示:函數(shù)原型說明 Void InitQueue(Queue*Q)初始化隊列Bool IsEmpty(Queue Q)判斷隊列是否為空,若是則返回TRUE,否則返回FALSEVoid EnQueue(Queue*Q,TreeNode p)元素入隊列Void DeQueue(Queue*Q,TreeNode*p)元素出隊列 Bool、Status類型定義如下: typedef enum FALSE=

14、0,TRUE=1 Bool; typedef enum OVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1Status; 樹的二叉鏈表結(jié)點定義如下: typedef struct Node char data; struct Node *firstchild,*nextbrother; Node,*TreeNode;【函數(shù)】 Status LevelTraverse ( TreeNode root ) /*層序遍歷樹,樹采用孩子-兄弟表示法,root是樹根結(jié)點的指針*/ Queue tempQ; TreeNode ptr,brotherptr; if (! root)

15、return ERROR; InitQueue(&tempQ); (1) ; brotherptr = root - nextbrother; while (brotherptr) EnQueue(&tempQ,brotherptr); (2) ; /*end-while*/ while( (3) ) (4) ; printf(%ct,ptr-data); if( (5) )continue; (6) ; brotherptr = ptr-firstchild-nextbrother; while (brotherptr) EnQueue(&tempQ,brotherptr); (7) ; /

16、*end-while*/ /*end-while*/ return OK; /*LevelTraverse*/試題六 閱讀以下說明和C+代碼。15、【說明】 傳輸門是傳輸系統(tǒng)中的重要裝置。傳輸門具有Open(打開)、Closed(關(guān)閉)、Opening (正在打開)、StayOpen(保持打開)和Closing(正在關(guān)閉)五種狀態(tài)。觸發(fā)傳輸門狀態(tài)轉(zhuǎn)換的事件有click、complete和timeout三種。事件與其相應(yīng)的狀態(tài)轉(zhuǎn)換如下圖所示。 下面的C+代碼1與C+代碼2分別用兩種不同的設(shè)計思路對傳輸門進行狀態(tài)模擬,請?zhí)钛a代碼中的空缺。【C+代碼1】 const int CLOSED=1; co

17、nst int OPENING=2; const int OPEN=3; const int CLOSING=4; const int STAYOPEN=5; /定義狀態(tài)變量,用不同整數(shù)表示不同狀態(tài) class Door Private: int state; /傳輸門當前狀態(tài) void setState(int state) this-state=state; /設(shè)置當前狀態(tài) public: Door():state(CLOSED.; void getState() /根據(jù)當前狀態(tài)輸出相應(yīng)的字符串 switch(state) case OPENING: coutOPENINGendl; br

18、eak; case CLOSED: coutCLOSEDendl; break; case OPEN: coutOPENendl; break; case CLOSING: coutCLOSINGendl; break; case STAYOPEN:coutSTAYOPENendl; break; ; void click() /發(fā)生click事件時進行狀態(tài)轉(zhuǎn)換 if ( (1) ) setState(OPENING.; else if ( (2) ) setState(CLOSING.; else if ( (3) ) setState(STAYOPEN); void timeout() /

19、發(fā)生timeout事件時進行狀態(tài)轉(zhuǎn)換 if (state = OPEN) setState(CLOSING.; void complete() /發(fā)生complete事件時進行狀態(tài)轉(zhuǎn)換 if (state = OPENING. setState(OPEN); else if (state = CLOSING. setState(CLOSED.; ; int main() Door aDoor; aDoor.getState();aDoor.click(); aDoor.getState(); aDplete();aDoor.getState(); aDoor.click(); aDoor.ge

20、tState();aDoor.click(); aDoor.getState(); return 0; 【C+代碼2】 class Door public: DoorState *CLOSED,*OPENING,*OPEN,*CLOSING,*STAYOPEN,*state; Door(); virtualDoor()/釋放申請的內(nèi)存,此處代碼省略); void setState(DoorState *state) this-state = state; void getState() /此處代碼省略,本方法輸出狀態(tài)字符串, /例如,當前狀態(tài)為CLOSED時,輸出字符串為“CLOSED” ;

21、void click(); void timeout(); void complete(); ; Door:Door() CLOSED = new DoorClosed(this); OPENING = new DoorOpening(this); OPEN = new DoorOpen(this); CLOSING = new DoorClosing(this); STAYOPEN = new DoorStayOpen(this);state = CLOSED; void Door : click() (4) ;) void Door : timeout() (5) ;) void Door

22、 : complete() (6) ; class DoorState/定義一個抽象的狀態(tài),它是所有狀態(tài)類的基類 protected:Door *door; public: DoorState(Door *door) this-door = door; virtualDoorState(void); virtual void click() virtual void complete() virtual void timeout() ; class DoorClosed :public DoorState/定義一個基本的Closed狀態(tài) public: DoorClosed(Door *doo

23、r) :DoorState(door) virtual DoorClosed() void click(); ; void DoorClosed : click() (7) ; /其他狀態(tài)類的定義與實現(xiàn)代碼省略 int main() Door aDoor; aDoor.getState();aDoor.click();aDoor.getState();aDplete(); aDoor.getState();aDoor.timeout();aDoor.getState();return 0; 試題七 閱讀以下說明以及Java程序。16、【說明】 傳輸門是傳輸系統(tǒng)中的重要裝置。傳輸門具有Open(

24、打開)、Closed(關(guān)閉)、Opening (正在打開)、StayOpen(保持打開)和Closing(正在關(guān)閉)五種狀態(tài)。觸發(fā)狀態(tài)的轉(zhuǎn)換事件有click、complete和timeout三種。事件與其相應(yīng)的狀態(tài)轉(zhuǎn)換如下圖所示。 下面的Java代碼1與Java代碼2分別用兩種不同的設(shè)計思路對傳輸門進行狀態(tài)模擬,請?zhí)钛a代碼中的空缺?!綣ava代碼1】 public class Door public static final int CLOSED = 1; public static final int OPENING = 2; public static final int OPEN = 3

25、; public static final int CLOSING = 4; public static final int STAYOPEN = 5; private int state = CLOSED; /定義狀態(tài)變量,用不同的整數(shù)表示不同狀態(tài) private void setState(int state) this.state = state; /設(shè)置傳輸門當前狀態(tài) public void getState() /此處代碼省略,本方法輸出狀態(tài)字符串, /例如,當前狀態(tài)為CLOSED時,輸出字符串為CLOSED public void click() /發(fā)生click事件時進行狀態(tài)轉(zhuǎn)換

26、 if ( (1) ;) setState(OPENING.; else if ( (2) ;) setStateCLOSING.; else if ( (3) ;) setState(STAYOPEN); /發(fā)生timeout事件時進行狀態(tài)轉(zhuǎn)換 public void timeout() if (state = OPEN) setState(CLOSING.; public void complete() /發(fā)生complete事件時進行狀態(tài)轉(zhuǎn)換 if (state = OPENING. setState(OPEN); else if (state = CLOSING. setState(C

27、LOSED.; public static void main(String args) Door aDoor = new Door(); aDoor.getState();aDoor.click();aDoor.getState();aDplete(); aDoor.getState();aDoor.click();aDoor.getState();aDoor.click(); aDoor.getState();return; 【Java代碼2】 public class Door public final DoorState CLOSED = new DoorClosed(this); p

28、ublic final DoorState OPENING = new DoorOpening(this); public final DoorState OPEN = new DoorOpen(this); public final DoorState CLOSING = new DoorClosing(this); public final DoorState STAYOPEN = new DoorStayOpen(this); private DoorState state = CLOSED; /設(shè)置傳輸門當前狀態(tài) public void setState(DoorState state

29、) this.state=state; public void getState() /根據(jù)當前狀態(tài)輸出對應(yīng)的狀態(tài)字符串 System.out.println(state.getClass().getName(); public void click() (4) ;/發(fā)生click事件時進行狀態(tài)轉(zhuǎn)換 public void timeout() (5) ;/發(fā)生timeout事件時進行狀態(tài)轉(zhuǎn)換 public void complete() (6) ;)/發(fā)生complete事件時進行狀態(tài)轉(zhuǎn)換 public static void main(Stringargs) Door aDoor = new

30、 Door(); aDoor.getState();aDoor.click();aDoor.getState();aDplete(); aDoor.getState();aDoor.timeout();aDoor.getState();return; public abstract class DoorState /定義所有狀態(tài)類的基類 protected Door door ; public DoorState(Door doer) this.door = door; public void click() public void complete() public void timeout

31、() class DoorClosed extends DoorState /定義一個基本的Closed狀態(tài) public DoorClosed(Door door) super(door); public void click() (7) ;) /該類定義的其余代碼省略 /其余代碼省略答案:試題一1、初錄數(shù)據(jù)、復(fù)錄數(shù)據(jù)解析 在本題說明中關(guān)于“數(shù)據(jù)確認”功能的描述中,指出當初錄員和復(fù)錄員分別錄入的數(shù)據(jù)比對正確后,可從其中任一套數(shù)據(jù)作為最終進入系統(tǒng)A的原始數(shù)據(jù)(即圖10-2中的確認數(shù)據(jù))。因此無論是初錄數(shù)據(jù)還是復(fù)錄數(shù)據(jù)都可作為“數(shù)據(jù)確認處理”的數(shù)據(jù)源。2、0層圖(圖10-2)中,數(shù)據(jù)清除處理(加

32、工6)沒有輸入數(shù)據(jù)流解析 在DFD中,一個加工就是對輸入數(shù)據(jù)進行處理并生成輸出數(shù)據(jù)的過程,所以數(shù)據(jù)流圖中的每個加工都要求(至少)有一個輸入數(shù)據(jù)流和一個輸出數(shù)據(jù)流。而在0層DFD (圖10-2)中,加工6(數(shù)據(jù)清除)只有輸出數(shù)據(jù)流而沒有輸入數(shù)據(jù)。3、解析 在表10-1中,多行中的數(shù)據(jù)按照儲蓄所分組輸出并打印該儲蓄所所有分戶賬的戶數(shù)和余額合計,這就要求在數(shù)據(jù)查詢操作中,至少要按照儲蓄所進行排序才能實現(xiàn)。當然在軟件實現(xiàn)時,也可以按照賬號、開戶日等數(shù)據(jù)排序,但從表10-1中無法確定是否需要這些額外的排序。4、解析 圖10-2中的加工1(錄入比對)包含了圖10-3中的三個加工:初錄員錄入數(shù)據(jù)、復(fù)錄員錄入

33、數(shù)據(jù)、兩組數(shù)據(jù)比對。按照本題說明,比對的任務(wù)就是在兩組已經(jīng)存儲在數(shù)據(jù)文件中的數(shù)據(jù)之間一一比較,并指出那些不一致者、重復(fù)錄入的同一賬戶數(shù)據(jù),這個加工是完全由軟件完成的,不再需要用戶輸入數(shù)據(jù)。但在手工錄入過程中,有可能輸入無效字符,比如輸入的金額中有除小數(shù)點、數(shù)字之外的其他字符、半個漢字(這在某些運行環(huán)境中是可能存在的情況)。另外,從圖10-3和其他敘述中可以看出,錄入比對處理不涉及打印,也不應(yīng)該檢查匯總數(shù)據(jù)和會計賬目是否相符(因為這是匯總核對的功能)。5、手工分戶賬=初錄分戶賬+復(fù)錄分戶賬解析 在圖10-2給出的軟件第0層DFD中,“手工分戶賬”是“錄入比對”加工的輸入數(shù)據(jù)流,而該加工包含了圖1

34、0-3中的“初錄”加工和“復(fù)錄”加工。所以手工分戶賬由初錄分戶賬和復(fù)錄分戶賬組成。試題二6、房間號,身份證號解析 房間號和身份證號分別是房間關(guān)系和客人關(guān)系的主鍵,作為外鍵出現(xiàn)在住宿關(guān)系中。住宿關(guān)系記錄客人的身份證號和住宿的房間號。7、住宿主鍵:房間號,身份證號,入住日期 住宿外鍵:房間號,身份證號解析 該題主要考核關(guān)系的主鍵。住宿關(guān)系主鍵包括房間號,身份證號和入住日期。房間號和身份證號是較明顯的答案,但僅是這兩者并不能唯一識別一個記錄,一位客人有可能多次在同一房間里住宿,故入住日期也要包含在主鍵中。8、住宿身份證號 (3)HAVING (4)ORDER BY 2 DSC,或ORDER BY 2

35、 DESC解析 該題主要考查SQL語言。GROUP BY后必須出現(xiàn)SELECT后查詢項中不包含聚集函數(shù)的部分;GROUP BY后跟的條件應(yīng)該用HAVING子句表示:題目要求按照入住次數(shù)降序排序,故最后應(yīng)填入ORDER BY子句。9、表:住宿 屬性:入住日期 類型:聚簇索引,或聚集索引,或cluster 原因:表中記錄的物理順序與索引項的順序一致,根據(jù)索引訪問數(shù)據(jù)時,一次讀取操作可以獲取多條記錄數(shù)據(jù),因而可減少查詢時間。解析 該題主要考核索引的概念。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無需對整個表進行掃描,就可以從其中找到所需的數(shù)據(jù)。索引分為兩類:聚集索引和非聚集索引。聚集索引對表的物理數(shù)據(jù)頁中的數(shù)據(jù)按

36、列進行排序,然后重新存儲到磁盤上,即聚集索引與數(shù)據(jù)是混為一體的,其葉結(jié)點中存儲的是實際的數(shù)據(jù)。非聚集索引具有完全獨立于數(shù)據(jù)行的結(jié)構(gòu),使用非聚集索引不用將物理數(shù)據(jù)頁中的數(shù)據(jù)按列排序。非聚集索引的葉結(jié)點存儲的是組成非聚集索引的關(guān)鍵字值和行定位器。 按題目要求,查詢涉及的屬性有身份證號和入住日期,但它們均為主鍵屬性,故不需要再為其他屬性創(chuàng)建索引。針對本題要求為提交SQL語句的執(zhí)行效率,對“入住日期”屬性建立聚集索引,使得索引項順序和物理數(shù)據(jù)順序一致以提高查詢性能。 問題3中查詢涉及到的屬性有身份證號和入住日期,由于這兩個屬性均為住宿關(guān)系的主鍵,故不需要再在其他屬性上創(chuàng)建索引。在主鍵上創(chuàng)建的索引類型應(yīng)

37、為聚簇索引(或聚集索引或cluster)。創(chuàng)建聚簇索引的原因是令表中記錄的物理順序與索引項的順序一致,根據(jù)索引訪問數(shù)據(jù)時,一次讀取操作可以獲取多條記錄數(shù)據(jù),因而可減少查詢時間。試題三10、(1)0n或1n (2)1 (3)0n (4)1n (5)1 (6)0n解析 問題1主要考查類的多樣性分析,在充分理解題目需求的基礎(chǔ)上補充類圖中的類間關(guān)系的多樣性描述。根據(jù)題目中所描述: (1)(2)一個商品(Commodity)屬于一種分類,一個分類(Category)中包含零個或多個商品對象,所以多樣性關(guān)系為0n或1n個商品對象對應(yīng)1個分類對象; (3)(4)一個促銷(Promotion)中由一個或多個商

38、品組成(至少一個),而一個商品可以屬于零個或多個促銷,所以多樣性關(guān)系為0n個促銷對象對應(yīng)1n個商品對象。 (5)(6)一個促銷可以產(chǎn)生多個促銷訂單(POrder),一個促銷訂單只能對應(yīng)一個促銷。所以多樣性關(guān)系為1個促銷對象涉及0n個促銷訂單對象。11、(7)getCategories (8)getCommodities (9)createPromotion (10)addCommodities解析 問題2主要考查用UML序列圖對系統(tǒng)的行為進行分析和建模。序列圖描述對象間的消息交互,刻畫系統(tǒng)的行為。根據(jù)題目的描述: 商家在發(fā)布促銷信息時,要先瀏覽自己所銷售的商品的分類及分類中的具體商品信息:商家

39、通過getCategories消息將瀏覽請求提交給類CatagoryManager實例,再由類 CatagoryManager的實例通過getCommodities消息請求類Category實例獲得其分類中該商家的所有商品:類Category的實例通過getCommodityinfo消息請求類Commodity的實例返回商品的詳細描述信息。 當把商家所銷售的商品分類及分類中的具體商品信息返回給商家之后,商家在其中選擇要促銷的一個或多個商品,并輸入一些促銷信息,通過CreatePromotion消息請求類 PromotionManager實例生成促銷信息。類PromotionManager實例通

40、過Create消息創(chuàng)建一個促銷對象,并通過addCommodities消息向新建的促銷對象中添加要促銷的商品對象。12、關(guān)系:聚集(聚合)是關(guān)聯(lián)的特例(聚集是關(guān)聯(lián)的一種)。 不同點:聚集表示部分與整體關(guān)系的關(guān)聯(lián)。若從生命周期的角度考慮,則關(guān)聯(lián)對象的生命周期一般無必然關(guān)系,聚集的整體對象往往對部分對象的生命周期負責。解析 問題3主要考查面向?qū)ο蠓治鲈O(shè)計中對類之間不同關(guān)系的理解。 關(guān)系:聚集(聚合)是關(guān)聯(lián)的特例(聚集是關(guān)聯(lián)的一種)。 不同點:聚集表示部分與整體關(guān)系的關(guān)聯(lián)。若從生命周期的角度考慮,則關(guān)聯(lián)對象的生命周期一般無必然關(guān)系,聚集的整體對象往往對部分對象的生命周期負責。試題四13、(1)f00

41、=e0+a00 f10=e1+a10 (2)f0j-1+a0j (3)fjj-1)+a1jf0j-1)+t0j-1+a1j, 或f1j-1)+a1j=f0j-1+t0j-1)+a1j, 或其等價形式 (4)fi=f0n-1+x0 li=0 (5)fi=f1n-1+x1 1i=1解析 本題考查動態(tài)規(guī)劃算法設(shè)計方法。 當問題具有兩個特性,即最優(yōu)子結(jié)構(gòu)和重疊子問題時,可以考慮用動態(tài)規(guī)劃求解問題。用動態(tài)規(guī)劃求解問題具有四個步驟。 (1)刻畫問題的最優(yōu)子結(jié)構(gòu),描述問題的最優(yōu)解包含子問題的最優(yōu)解。對于本題來說,最短裝配時間等于經(jīng)過裝配線。的第n個工位的最短裝配時間加上x0,或者等于經(jīng)過裝配線1的第n個工位

42、的最短裝配時間加上x1,取哪條裝配線取決于哪個值更小。而經(jīng)過某個裝配線0/1的第i個工位的最短裝配時間又等于經(jīng)過裝配線0/1的第1-1個工位的最短裝配時間,或者等于經(jīng)過裝配線I/0的第i-1個工位的最短裝配時間加上從這個工位到裝配線0/1的遷移時間,取決于哪個值更小。 (2)建立最優(yōu)子結(jié)構(gòu)的遞歸關(guān)系,這是非常關(guān)鍵的一步。對于本題來說,遞歸關(guān)系為 (3)根據(jù)遞歸關(guān)系求最優(yōu)解的值。對于本題來說,最優(yōu)解記錄在fi中,fi= min(f(0,n-1)+x0,f(1,n-1)+x1): (4)構(gòu)造最優(yōu)解。對于本題來說,只是求出最優(yōu)解是從哪條裝配線裝配出來,并沒有記錄最優(yōu)解。試題五14、(1)EnQueu

43、e(&tempQ,root) (2)brotherptr=brotherptr-nextbrother (3)!IsEmpty(tempQ),或其等價形式 (4)DeQueue(&tempQ,&ptr) (5)!ptr-firstchild,或其等價形式 (6)EnQueue(&tempQ,ptr-firstchild) (7)brotherptr=brotherptr-nextbrother解析 本題考查樹結(jié)構(gòu)的存儲及遍歷運算。 借助隊列結(jié)構(gòu)對樹進行層序遍歷時,每個結(jié)點都進出隊列一次,結(jié)點出隊列時進行訪問。其過程是:首先令樹根結(jié)點入隊,若是森林(樹根之間互為兄弟),接著則令其余樹的根結(jié)點入隊

44、,然后在隊列非空的情況下,隊頭結(jié)點出隊,訪問該結(jié)點同時令其孩子結(jié)點入隊。以此類推,直到隊列為空。 隊列可以保證訪問結(jié)點時按照層次和自左至右的順序。 函數(shù)中,代碼“InitQueue(&tempQ); (1) ”初始化隊列并令根結(jié)點入隊列,因此空(1)處應(yīng)填入“EnQueue(&tempQ,root)”。 采用二叉樹存儲樹結(jié)構(gòu)時,其右分支表示兄弟關(guān)系,因此隊頭結(jié)點出隊時,應(yīng)沿右分支將隊頭結(jié)點的所有孩子依次加入隊列。以下代碼處理第一棵樹的兄弟結(jié)點,如下: while (brotherptr) EnQueue(&tempQ,brotherptr); (2) ; /*end-while*/ 因此,空(

45、2)處應(yīng)填入“brotherptr=brotherptr - nextbrother”。這樣,就完成了第一層結(jié)點的處理。 顯然,空(3)處應(yīng)判斷隊列是否為空,即填入“!IsEmpty(tempQ)”。隊列非空的情況下,令隊頭元素出隊列,即空(4)處應(yīng)填入“DeQueue(&tempQ,&ptr)”。這是使用隊列或棧結(jié)構(gòu)存儲元素以實現(xiàn)某種運算的基本特點。 若一個結(jié)點不存在孩子,則其firstchild指針域為空,也無需令其孩子結(jié)點入隊列。 因此,空(5)處應(yīng)填入“!ptr-firstchild”。反之,若一個結(jié)點有孩子,則應(yīng)首先令其第一個孩子結(jié)點入隊列,然后通過右分支鏈使其他孩子結(jié)點入隊列。因此

46、,空(6)處應(yīng)填入“EnQueue(&tempQ,ptr-firstchild)”,空(7)處應(yīng)填入“brotherptr =brotherptr-nextbrother”。試題六15、(1)state = CLOSED | state = CLOSING (2)state = OPENING | state = STAYOPEN (3)state = OPEN (4)state-click() (5)state-timeout() (6)state-complete() (7)door-setState(door-OPENING)解析 本題考查的是狀態(tài)轉(zhuǎn)換圖的程序設(shè)計與實現(xiàn)。 空(1)、(2)和(3)需要根據(jù)狀態(tài)轉(zhuǎn)換圖來填寫,空(1)、(2)和(3)所在的方法為click,表示當發(fā)生click事件時應(yīng)該發(fā)生什么狀態(tài)轉(zhuǎn)換。根據(jù)代碼可知

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論