省考軟件設(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),請進(jìn)行舉報或認(rè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ù)進(jìn)行一一比較,并標(biāo)記兩套數(shù)據(jù)是否一致。 (3)數(shù)據(jù)確認(rèn):當(dāng)上述兩套數(shù)據(jù)完全一致后,將其中任一套作為最終進(jìn)入系統(tǒng)A的原始數(shù)據(jù)。 (4)匯總核對和打?。簩?jīng)過確認(rèn)的數(shù)據(jù)進(jìn)行匯總,并和會計賬目中的相關(guān)數(shù)

2、據(jù)進(jìn)行核對,以確保數(shù)據(jù)的整體正確性,并打印輸出經(jīng)過確認(rèn)的數(shù)據(jù),為以后核查可能的錯誤提供依據(jù)。 (5)數(shù)據(jù)轉(zhuǎn)換:將經(jīng)過確認(rèn)的數(shù)據(jù)轉(zhuǎn)換為儲蓄系統(tǒng)A需要的中間格式數(shù)據(jù)。 (6)數(shù)據(jù)清除:為加快初錄和復(fù)錄的處理速度,在數(shù)據(jù)確認(rèn)之后,可以有選擇地清除初錄員和復(fù)錄員錄入的數(shù)據(jù)。 該軟件的數(shù)據(jù)流圖如圖10-1至圖10-3所示。圖中部分?jǐn)?shù)據(jù)流數(shù)據(jù)文件的格式如下: 初錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當(dāng)前余額+性質(zhì) 復(fù)錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當(dāng)前余額+性質(zhì) 初錄數(shù)據(jù)=手工分戶賬+一致性標(biāo)志 復(fù)錄數(shù)據(jù)=手工分戶賬+一致性標(biāo)志 會計賬目=儲蓄所號+總戶數(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ù)確認(rèn)處理所需的數(shù)據(jù)流在第1層圖中的全部可選起點(第0層圖和第1層圖中均未給出)。2、【問題2】 不考慮數(shù)據(jù)確認(rèn)處理(加工2),請指出數(shù)據(jù)流圖中存在的錯誤。3、【問題3】 打印分戶賬清單時,必須以下列哪一組數(shù)據(jù)作為關(guān)鍵字進(jìn)行排序,才能滿足需求?請從下面選項中選擇。 儲蓄所 賬號 開戶日 總戶數(shù)和總

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

5、2等)、收費標(biāo)準(zhǔn)、床位數(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)系。 房間(房間號,收費標(biāo)準(zhǔ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ù)進(jìn)行降序排列。下面是實現(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),確認(rèn)在線支付該促銷訂單(即完成支付),就可以優(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所示,即汽車底盤進(jìn)入裝配線,零件在多個工位裝配,結(jié)束時汽車自動完成下線工作。 (1)e0和e1表示底盤分別進(jìn)入裝配線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()的功能是對給定樹進(jìn)行層序遍歷。例如,對圖10-1所示的樹進(jìn)行層序遍歷時,結(jié)點的訪問次序為D B A E F P C。 對樹進(jìn)行層序遍歷時使用了隊列結(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è)計思路對傳輸門進(jìn)行狀態(tài)模擬,請?zhí)钛a代碼中的空缺?!綜+代碼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; /傳輸門當(dāng)前狀態(tài) void setState(int state) this-state=state; /設(shè)置當(dāng)前狀態(tài) public: Door():state(CLOSED.; void getState() /根據(jù)當(dāng)前狀態(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事件時進(jìn)行狀態(tài)轉(zhuǎn)換 if ( (1) ) setState(OPENING.; else if ( (2) ) setState(CLOSING.; else if ( (3) ) setState(STAYOPEN); void timeout() /

19、發(fā)生timeout事件時進(jìn)行狀態(tài)轉(zhuǎn)換 if (state = OPEN) setState(CLOSING.; void complete() /發(fā)生complete事件時進(jìn)行狀態(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)字符串, /例如,當(dāng)前狀態(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è)計思路對傳輸門進(jìn)行狀態(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è)置傳輸門當(dāng)前狀態(tài) public void getState() /此處代碼省略,本方法輸出狀態(tài)字符串, /例如,當(dāng)前狀態(tài)為CLOSED時,輸出字符串為CLOSED public void click() /發(fā)生click事件時進(jìn)行狀態(tài)轉(zhuǎn)換

26、 if ( (1) ;) setState(OPENING.; else if ( (2) ;) setStateCLOSING.; else if ( (3) ;) setState(STAYOPEN); /發(fā)生timeout事件時進(jìn)行狀態(tài)轉(zhuǎn)換 public void timeout() if (state = OPEN) setState(CLOSING.; public void complete() /發(fā)生complete事件時進(jìn)行狀態(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è)置傳輸門當(dāng)前狀態(tài) public void setState(DoorState state

29、) this.state=state; public void getState() /根據(jù)當(dāng)前狀態(tài)輸出對應(yīng)的狀態(tài)字符串 System.out.println(state.getClass().getName(); public void click() (4) ;/發(fā)生click事件時進(jìn)行狀態(tài)轉(zhuǎn)換 public void timeout() (5) ;/發(fā)生timeout事件時進(jìn)行狀態(tài)轉(zhuǎn)換 public void complete() (6) ;)/發(fā)生complete事件時進(jìn)行狀態(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ù)確認(rèn)”功能的描述中,指出當(dāng)初錄員和復(fù)錄員分別錄入的數(shù)據(jù)比對正確后,可從其中任一套數(shù)據(jù)作為最終進(jìn)入系統(tǒng)A的原始數(shù)據(jù)(即圖10-2中的確認(rèn)數(shù)據(jù))。因此無論是初錄數(shù)據(jù)還是復(fù)錄數(shù)據(jù)都可作為“數(shù)據(jù)確認(rèn)處理”的數(shù)據(jù)源。2、0層圖(圖10-2)中,數(shù)據(jù)清除處理(加

32、工6)沒有輸入數(shù)據(jù)流解析 在DFD中,一個加工就是對輸入數(shù)據(jù)進(jìn)行處理并生成輸出數(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ù)查詢操作中,至少要按照儲蓄所進(jìn)行排序才能實現(xiàn)。當(dāng)然在軟件實現(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ù)庫程序無需對整個表進(jìn)行掃描,就可以從其中找到所需的數(shù)據(jù)。索引分為兩類:聚集索引和非聚集索引。聚集索引對表的物理數(shù)據(jù)頁中的數(shù)據(jù)按

36、列進(jìn)行排序,然后重新存儲到磁盤上,即聚集索引與數(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)的行為進(jìn)行分析和建模。序列圖描述對象間的消息交互,刻畫系統(tǒng)的行為。根據(jù)題目的描述: 商家在發(fā)布促銷信息時,要先瀏覽自己所銷售的商品的分類及分類中的具體商品信息:商家

39、通過getCategories消息將瀏覽請求提交給類CatagoryManager實例,再由類 CatagoryManager的實例通過getCommodities消息請求類Category實例獲得其分類中該商家的所有商品:類Category的實例通過getCommodityinfo消息請求類Commodity的實例返回商品的詳細(xì)描述信息。 當(dāng)把商家所銷售的商品分類及分類中的具體商品信息返回給商家之后,商家在其中選擇要促銷的一個或多個商品,并輸入一些促銷信息,通過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)系,聚集的整體對象往往對部分對象的生命周期負(fù)責(zé)。解析 問題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)系,聚集的整體對象往往對部分對象的生命周期負(fù)責(zé)。試題四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è)計方法。 當(dāng)問題具有兩個特性,即最優(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)對樹進(jìn)行層序遍歷時,每個結(jié)點都進(jìn)出隊列一次,結(jié)點出隊列時進(jìn)行訪問。其過程是:首先令樹根結(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é)點入隊列,然后通過右分支鏈?zhǔn)蛊渌⒆咏Y(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,表示當(dāng)發(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論