2017年上半年(下午)《軟件設(shè)計師》真題
《2017年上半年(下午)《軟件設(shè)計師》真題》由會員分享,可在線閱讀,更多相關(guān)《2017年上半年(下午)《軟件設(shè)計師》真題(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2017年上半年(下午)《軟件設(shè)計師》真題 注意:圖片可根據(jù)實際需要調(diào)整大小 卷面總分:6分 答題時間:240分鐘 試卷題量:6題 練習(xí)次數(shù):0次 問答題 (共6題,共6分) 1.某玩具公司正在開發(fā)一套電動玩具在線銷售系統(tǒng),用于向注冊會員提供端對端的玩具定制和銷售服務(wù)。在系統(tǒng)設(shè)計階段,“創(chuàng)建新訂單(New Order)”的設(shè)計用例詳細(xì)描述如表3-1所示,候選設(shè)計類分類如表3-2所示,并根據(jù)該用例設(shè)計出部分類圖如圖3-1所示。 表3-1創(chuàng)建新訂單(New Order)設(shè)計用例 表3-2候選設(shè)計類分類
2、 圖3-1部分類圖 在訂單處理的過程中,會員可以點擊“取消訂單”取消該訂單。如果支付失敗,該訂單將被標(biāo)記為掛起狀態(tài),可后續(xù)重新支付,如果掛起超時30分鐘未支付,系統(tǒng)將自動取消該訂單。訂單支付成功后,系統(tǒng)判斷訂單類型: (1)對于常規(guī)訂單,標(biāo)記為備貨狀態(tài),訂單信息發(fā)送到貨運部,完成打包后交付快遞發(fā)貨; (2)對于定制訂單,會自動進(jìn)入定制狀態(tài),定制完成后交付快遞發(fā)貨。會員在系統(tǒng)中點擊“收貨”按鈕變?yōu)槭肇洜顟B(tài),結(jié)束整個訂單的處理流程。根據(jù)訂單處理過程所設(shè)計的狀態(tài)圖如圖3-2所示。 圖3-2訂單狀態(tài)圖 【問題1】(6分) 根據(jù)表3-1中所標(biāo)記的候選設(shè)計類,請按照其類別將編號C
3、1~C12分別填入表3-2中的(a)、(b)和(c)處。 【問題2】(4分) 根據(jù)創(chuàng)建新訂單的用例描述,請給出圖3-1中X1~X4處對應(yīng)類的名稱。 【問題3】(5分) 根據(jù)訂單處理過程的描述,在圖3-2中S1~S5處分別填入對應(yīng)的狀態(tài)名稱。 正確答案: 本題解析: 【問題1】 (a):C2、C4、C7、C10、C11 (b):C3、C5、C8 (c):C1、C6、C9、C12 【問題2】 X1:收貨地址 X2:支付方式 X3:郵箱地址 X4:電動玩具定制屬性 【問題3】 S1
4、:訂單掛起 S2:訂單備貨 S3:訂單定制 S4:訂單發(fā)貨 S5:訂單收貨 【問題1】 表格中給出的類有: C1會員 C2電動玩具清單及價格 C3計算總價 C4銷售清單和會員預(yù)先設(shè)置個人資料的收貨地址和支付方式 C5調(diào)用支付系統(tǒng) C6訂單表 C7完整訂單信息 C8發(fā)送完整訂單信息 C9郵箱地址 C10電動玩具清單和定制屬性(如尺寸、顏色等) C11會員當(dāng)前默認(rèn)支付方式 C12支付方式 一、實體類 實體類是用于對必須存儲的信息和相關(guān)行為建模的類。實體對象(實體類的實例)用于保存和更新一些現(xiàn)象的有關(guān)信息,例如:事件、人員或者一些現(xiàn)實生活中的對象。實體類通常都
5、是永久性的,它們所具有的屬性和關(guān)系是長期需要的,有時甚至在系統(tǒng)的整個生存期都需要。實體類的對象表示現(xiàn)實世界中真實的實體。以上實體類有:C1、C6、C9、C12。 二、邊界類 邊界類是系統(tǒng)內(nèi)部與系統(tǒng)外部的業(yè)務(wù)主角之間進(jìn)行交互建模的類。邊界類依賴于系統(tǒng)外部的環(huán)境,比如業(yè)務(wù)主角的操作習(xí)慣、外部的條件的限制等。它或者是系統(tǒng)為業(yè)務(wù)主角操作提供的一個GUI,或者系統(tǒng)與其他的系統(tǒng)之間進(jìn)行一個交互的接口,所以當(dāng)外部的GUI變化時,或者是通信協(xié)議有變化時,只需要修改邊界類就可以了,不用再去修改控制類和實體類。業(yè)務(wù)主角通過它來與控制對象交互,實現(xiàn)用例的任務(wù)。 邊界類調(diào)用用例內(nèi)的控制類對象,進(jìn)行相關(guān)的操作。
6、 一個系統(tǒng)可能會有多種邊界類: 用戶界面類——幫助與系統(tǒng)用戶進(jìn)行通信的類 系統(tǒng)接口類——幫助與其他系統(tǒng)進(jìn)行通信的類 設(shè)備接口類——為用來監(jiān)測外部事件的設(shè)備(如傳感器)提供接口的類 接口類分為人和系統(tǒng)兩大類,其中人的接口可以是顯示屏、窗口、Web窗體、對話框、菜單、列表框、其他顯示控制、條形碼、二維碼或者用戶與系統(tǒng)交互的其他方法。 系統(tǒng)接口涉及到把數(shù)據(jù)發(fā)送到其他系統(tǒng),或從其他系統(tǒng)接收數(shù)據(jù)。 C2、C4、C7、C10、C11都是以清單、列表等形式顯示的信息,為接口類。 三、控制類 控制類用于對一個或幾個用例所特有的控制行為進(jìn)行建模,它描述的用例的業(yè)務(wù)邏輯的實現(xiàn),控制類的設(shè)計與用例實
7、現(xiàn)有著很大的關(guān)系。在有些情況下,一個用例可能對應(yīng)多個控制類對象,或在一個控制類對象中對應(yīng)著多個用例。它們之間沒有固定的對應(yīng)關(guān)系,而是根據(jù)具體情況進(jìn)行分析判斷,控制類有效將業(yè)務(wù)邏輯獨立于實體數(shù)據(jù)和邊界控制,專注于處理業(yè)務(wù)邏輯,控制類會將特有的操作和實體類分離,者有利于實體類的統(tǒng)一化和提高復(fù)用性。 當(dāng)業(yè)務(wù)主角通過邊界類來執(zhí)行用例的時候,產(chǎn)生一個控制類對象,在用例被執(zhí)行完后,控制類對象會被銷毀。 控制類的特點:獨立于環(huán)境、和用例的實現(xiàn)關(guān)聯(lián)、使用關(guān)聯(lián)實體類或操作實體類對象、專注于業(yè)務(wù)邏輯的實現(xiàn)。 當(dāng)然如果用例的邏輯較為簡單,可以直接利用邊界類來操作實體類,而不必再使用控制類。或者用例的邏輯較為固
8、定,業(yè)務(wù)邏輯固定不會改變。也可以直接在邊界類實現(xiàn)該邏輯。 C3、C5、C8,涉及到控制系統(tǒng)的活動流,屬于協(xié)調(diào)類。 【問題2】 本題考查的是對類圖的填空,缺失的是4個類名,可以根據(jù)題干描述和對應(yīng)關(guān)系找到。首先X1和X2同時與會員訂單、配置信息相關(guān),因此應(yīng)該是支付方式和收貨地址,題干中提到了修改支付方式,所以支付方式可以有多種,因此X2為支付方式,X1為收貨地址。根據(jù)題干描述,會員預(yù)先配置的郵箱地址,因此與配置信息相關(guān)的另一個類X3應(yīng)該是郵箱地址。X4與電動玩具相關(guān),根據(jù)題干描述,X4應(yīng)該是定制屬性。 【問題3】 本題考查的是對狀態(tài)圖的補充。根據(jù)題干描述,遞交訂單后有兩種狀態(tài)變遷,如果支
9、付失敗,則被掛起,如果支付成功,會進(jìn)入備貨或定制狀態(tài),因此S1為掛起,S2為備貨,S3為定制;交付快遞后進(jìn)入發(fā)貨狀態(tài),S4為發(fā)貨;會員點擊收貨按鈕進(jìn)入收貨狀態(tài),S5為收貨。 2.某快餐廳主要制作并出售兒童套餐,一般包括主餐(各類比薩)、飲料和玩具,其餐品種類可能不同,但其制作過程相同。前臺服務(wù)員(Waiter)調(diào)度廚師制作套餐?,F(xiàn)采用生成器(Builder)模式實現(xiàn)制作過程,得到如圖5-1所示的類圖。 圖5-1類圖 【C++代碼】 #include<iostream> #include<string> using namespace std; c
10、lass Pizza{ private:string parts; public: void setParts(string parts){this->parts=parts;} string getParts( ){return parts;} }; class PizzaBuilder{ protected:Pizza*pizza; public: Pizza*getPizza( ?。﹞retum pizza;} void createNewPizza( ?。﹞pizza=new Pizza( ?。?} (1); } class HawaiianPizzaBui
11、lder:public PizzaBuilder{ public: void buildParts( ?。﹞pizza->setParts("cross+mild+ham&pineapple");} }; class SpicyPizzaBuider:public PizzaBuilder{ public: void buildParts( ){pizza->setParts("pan baked+hot+ham&pineapple");} } Class Waiter{ Private: PizzaBuilder*pizzaBuilder; public: void
12、 setPizzaBuilder(PizzaBuilder*pizzaBuilder){/*設(shè)置構(gòu)建器*/ (2) } Pizza*getPizza( ){return pizzaBuilder->getPizza( ?。?} void construct( ){/*構(gòu)建*/ pizzaBuilder->createNewPizza( ?。? (3) } }; int main( ){ Waiter*waiter=new Waiter( ); PizzaBuilder*hawaiian pizzabuilder=new HawaiianPizzaBuilder(
13、 ) (4); (5); cout<<"pizza:"<<waiter->getPizza( ?。?>getParts( )<<endl; } 程序的輸出結(jié)果為: pizza:cross+mild+ham&pineapple 正確答案: 本題解析: (1)virtual void buildParts()=0 (2)this->pizzaBuilder=pizzaBuilder (3)pizzaBuilder->buildParts() (4)waiter->setPizzaBuil
14、der(hawaiian_pizzabuilder) (5)waiter->construct() 1.從類圖中可以看到這個buildparts函數(shù)缺失,又子類中也有buildParts,所以它是虛函數(shù),在擴展類中定義使用。 2.這部分填寫設(shè)置構(gòu)建器內(nèi)容,在waiter類里面,定義pizzaBuilder。 3.從類圖知道,構(gòu)建方法應(yīng)該是buildParts,當(dāng)前對象是pizzaBuilder。 4.前面定義了對象waiter,新建hawaiian_pizzabuilder類,調(diào)用waiter的set方法。 5.調(diào)用waiter類中的construct方法,這樣可以得到。
15、 3.某醫(yī)療器械公司作為復(fù)雜醫(yī)療產(chǎn)品的集成商,必須保持高質(zhì)量部件的及時供應(yīng)。為了實現(xiàn)這一目標(biāo),該公司欲開發(fā)一采購系統(tǒng)。系統(tǒng)的主要功能如下: 1.檢查庫存水平。采購部門每天檢查部件庫存量,當(dāng)特定部件的庫存量降至其訂貨點時,返回低存量部件及庫存量。 2.下達(dá)采購訂單。采購部門針對低存量部件及庫存量提交采購請求,向其供應(yīng)商(通過供應(yīng)商文件訪問供應(yīng)商數(shù)據(jù))下達(dá)采購訂單,并存儲于采購訂單文件中。 3.交運部件。當(dāng)供應(yīng)商提交提單并交運部件時,運輸和接收(S/R)部門通過執(zhí)行以下三步過程接收貨物: (1)驗證裝運部件。通過訪問采購訂單并將其與提單進(jìn)行比較來驗證裝運的部件,并將提
16、單信息發(fā)給S/R職員。如果收貨部件項目出現(xiàn)在采購訂單和提單上,則已驗證的提單和收貨部件項目將被送去檢驗。否則,將S/R職員提交的裝運錯誤信息生成裝運錯誤通知發(fā)送給供應(yīng)商。 (2)檢驗部件質(zhì)量。通過訪問質(zhì)量標(biāo)準(zhǔn)來檢查裝運部件的質(zhì)量,并將已驗證的提單發(fā)給檢驗員。如果部件滿足所有質(zhì)量標(biāo)準(zhǔn),則將其添加到接受的部件列表用于更新部件庫存。如果部件未通過檢查,則將檢驗員創(chuàng)建的缺陷裝運信息生成缺陷裝運通知發(fā)送給供應(yīng)商。 (3)更新部件庫存。庫管員根據(jù)收到的接受的部件列表添加本次采購數(shù)量,與原有庫存量累加來更新庫存部件中的庫存量。標(biāo)記訂單采購?fù)瓿伞? 現(xiàn)采用結(jié)構(gòu)化方法對該采購系統(tǒng)進(jìn)行分析與設(shè)計,獲得如圖1-
17、1所示的上下文數(shù)據(jù)流圖和圖1-2所示的0層數(shù)據(jù)流圖。 圖1-1上下文數(shù)據(jù)流圖 圖1-2?0層數(shù)據(jù)流圖 【問題1】(5分) 使用說明中的詞語,給出圖1-1中的實體E1~E5 【問題2】(4分) 使用說明中的詞語,給出圖1-2中的數(shù)據(jù)存儲D1~D4的名稱。 【問題3】(4分) 根據(jù)說明和圖中術(shù)語,補充圖1-2中缺失的數(shù)據(jù)流及其起點和終點。 【問題4】(2分) 用200字以內(nèi)文字,說明建模圖1-1和圖1-2時如何保持?jǐn)?shù)據(jù)流圖平衡。 正確答案: 本題解析: 【問題1】 E1供應(yīng)商
18、 E2采購部門 E3檢驗員 E4庫管員 E5 S/R職員 【問題2】 D1庫存表 D2采購訂單表 D3質(zhì)量標(biāo)準(zhǔn)表 D4供應(yīng)商表 【問題3】 裝運錯誤通知:P3(驗證裝運部件)-----E1(供應(yīng)商) 缺陷裝運通知:P4(校驗部件質(zhì)量)-----E1(供應(yīng)商) 已驗證的提單和收貨部件項目:P3(驗證裝運部件)------P4(校驗部件質(zhì)量) 原有庫存量:D1(庫存表)-----P5(更新部件庫存) 【問題4】 父圖中某個加工的輸入輸出數(shù)據(jù)流必須與其子圖的輸入輸出數(shù)據(jù)流在數(shù)量上和名字上相同。父圖的一個輸入(或輸出)數(shù)據(jù)流對應(yīng)于子圖中幾個輸入(或輸出)數(shù)據(jù)流,而子圖中組
19、成的這些數(shù)據(jù)流的數(shù)據(jù)項全體正好是父圖中的這一個數(shù)據(jù)流。 【問題1】 E1提供供單信息給采購系統(tǒng),所以是供應(yīng)商,E2發(fā)送采購請求給采購系統(tǒng),所以是采購部門,E3發(fā)送缺陷裝運信息給采購系統(tǒng),應(yīng)該是檢驗員,E4提供當(dāng)次采購數(shù)量給采購系統(tǒng),應(yīng)該是庫管員,E5提供裝運錯誤信息,應(yīng)該是S/R職員,這個題注意跟采購部門的關(guān)系。 【問題2】 這比問題1要難一點,先看簡單的,D4發(fā)送供應(yīng)商信息出去,那么應(yīng)該在供應(yīng)商表中,D2發(fā)送訂單信息出去,接收新訂單信息,所以是采購訂單表,更新的部件數(shù)量存儲在D1中,那么D1有部件數(shù)量表,是庫存表,D3對質(zhì)量標(biāo)準(zhǔn)進(jìn)行了定義,應(yīng)該是質(zhì)量標(biāo)準(zhǔn)表。 【問題3】 根據(jù)父圖
20、和子圖之間的平衡,在圖1-1中流向E1的通知數(shù)據(jù)流,而圖1-2沒有。根據(jù)題干分析,由“將S/R職員提交的裝運錯誤信息生成裝運錯誤通知發(fā)送給供應(yīng)商”,“則將檢驗員創(chuàng)建的缺陷裝運信息生成缺陷裝運通知發(fā)送給供應(yīng)商”,這里的通知應(yīng)該分為2條數(shù)據(jù)流,分別為裝運錯誤通知(P3---E1)和缺陷裝運通知(P4---E1)。 裝運錯誤信息生成裝運錯誤通知發(fā)送給供應(yīng)商。所以缺少裝運錯誤通知:P3(驗證裝運部件)-----E1(供應(yīng)商)。 將檢驗員創(chuàng)建的缺陷裝運信息生成缺陷裝運通知發(fā)送給供應(yīng)商。缺陷裝運通知:P4(校驗部件質(zhì)量)-----E1(供應(yīng)商)。 由題干描述“如果收貨部件項目出現(xiàn)在采購訂單和提單上,
21、則已驗證的提單和收貨部件項目將被送去檢驗”, 因此對于P4檢驗部件質(zhì)量加工,缺少數(shù)據(jù)來自P3驗證裝運部件的數(shù)據(jù)流,檢驗的內(nèi)容是已驗證的提單和收貨部件項目:P3(驗證裝運部件)------P4(校驗部件質(zhì)量) 由描述“庫管員根據(jù)收到的接受的部件列表添加本次采購數(shù)量,與原有庫存量累加來更新庫存部件中的庫存量”,可知更新部件庫存量需要對原有庫存量進(jìn)行累加,這里缺少原有庫存量的讀取,起點為D1部件信息表,終點為P5更新部件庫存。 【問題4】 考查如何保持父圖子圖平衡的知識點,父圖中某個加工的輸入輸出數(shù)據(jù)流必須與其子圖的輸入輸出數(shù)據(jù)流在數(shù)量上和名字上相同。父圖的一個輸入(或輸出)數(shù)據(jù)流對應(yīng)于子圖
22、中幾個輸入(或輸出)數(shù)據(jù)流,而子圖中組成的這些數(shù)據(jù)流的數(shù)據(jù)項全體正好是父圖中的這一個數(shù)據(jù)流。 4.某房屋租賃公司擬開發(fā)一個管理系統(tǒng)用于管理其持有的房屋、租客及員工信息。請根據(jù)下述需求描述完成系統(tǒng)的數(shù)據(jù)庫設(shè)計。 【需求描述】 1.公司擁有多幢公寓樓,每幢公寓樓有唯一的樓編號和地址。每幢公寓樓中有多套公寓,每套公寓在樓內(nèi)有唯一的編號(不同公寓樓內(nèi)的公寓號可相同)。系統(tǒng)需記錄每套公寓的臥室數(shù)和衛(wèi)生間數(shù)。 2.員工和租客在系統(tǒng)中有唯一的編號(員工編號和租客編號)。 3.對于每個租客,系統(tǒng)需記錄姓名、多個聯(lián)系電話、一個銀行賬號(方便自動扣房租)、一個緊急聯(lián)系人的姓
23、名及聯(lián)系電話。 4.系統(tǒng)需記錄每個員工的姓名、一個聯(lián)系電話和月工資。員工類別可以是經(jīng)理或維修工,也可兼任。每個經(jīng)理可以管理多幢公寓樓。每幢公寓樓必須由一個經(jīng)理管理。系統(tǒng)需記錄每個維修工的業(yè)務(wù)技能,如:水暖維修、電工、木工等。 5.租客租賃公寓必須和公司簽訂租賃合同。一份租賃合同通常由一個或多個租客(合租)與該公寓樓的經(jīng)理簽訂,一個租客也可租賃多套公寓。合同內(nèi)容應(yīng)包含簽訂日期、開始時間、租期、押金和月租金。 【概念模型設(shè)計】 根據(jù)需求階段收集的信息,設(shè)計的實體聯(lián)系圖(不完整)如圖2-1所示。 圖2-1實體聯(lián)系圖 【邏輯結(jié)構(gòu)設(shè)計】 根據(jù)概念摸型設(shè)計階段完成的實體聯(lián)系圖,得出如下關(guān)
24、系模式(不完整): 聯(lián)系電話(電話號碼,租客編號) 租客(租客編號,姓名,銀行賬號,聯(lián)系人姓名,聯(lián)系人電話) 員工(員工編號,姓名,聯(lián)系電話,類別,月工資,(a)) 公寓樓((b),地址,經(jīng)理編號) 公寓(樓編號,公寓號,臥室數(shù),衛(wèi)生間數(shù)) 合同(合同編號,租客編號,樓編號,公寓號,經(jīng)理編號,簽訂日期,起始日期,租期,(c),押金) 【問題1】(4.5分) 補充圖2-1中的“簽約”聯(lián)系所關(guān)聯(lián)的實體及聯(lián)系類型。 【問題2】(4.5分) 補充邏輯結(jié)構(gòu)設(shè)計中的(a)、(b)、(c)三處空缺。 【問題3】(6分) 在租期內(nèi),公寓內(nèi)設(shè)施如出現(xiàn)問題,租客可在系統(tǒng)中進(jìn)行故障登記,填寫
25、故障描述,每項故障由系統(tǒng)自動生成唯一的故障編號,由公司派維修工進(jìn)行故障維修,系統(tǒng)需記錄每次維修的維修日期和維修內(nèi)容。請根據(jù)此需求,對圖2-1進(jìn)行補充,并將所補充的ER圖內(nèi)容轉(zhuǎn)換為一個關(guān)系模式,請給出該關(guān)系模式。 正確答案: 本題解析: 問題1 問題2 (a)業(yè)務(wù)技能 (b)樓編號 (c)月租金 問題3 新增維修關(guān)系,維修工維修公寓,關(guān)系模式為維修情況。 維修情況(故障編號,租客編號,樓編號,公寓號,員工編號,維修日期,維修內(nèi)容) 或者: 【問題1】 依據(jù)題干中“租客租賃公
26、寓必須和公司簽訂租賃合同。一份租賃合同通常由一個或多個租客(合租)與該公寓樓的經(jīng)理簽訂,一個租客也可租賃多套公寓。合同內(nèi)容應(yīng)包含簽訂日期、開始時間租期、押金和月租金?!保f明簽約應(yīng)該是經(jīng)理與租賃之間的,而一份租賃包括一位或多位租客,以及一個或多個公寓,所以可以考慮為:經(jīng)理實體集與租賃(由租客和公寓組合成一個大的實體集)之間的聯(lián)系。(這是數(shù)據(jù)庫中的聚集關(guān)系:即將某個聯(lián)系看作一個整體,用矩形框圈出,作為另一個聯(lián)系的一端。) 在結(jié)合題干中“每個經(jīng)理管多個公寓樓,每個公寓樓由一個經(jīng)理管理,和一個樓有多個公寓”的描述,可以判定聯(lián)系的類型為1:*。 【問題2】 從題干中“系統(tǒng)需記錄每個員工的姓名、類
27、別、一個聯(lián)系電話和月工資。員工類別可以經(jīng)理或維修工,也可兼任。每個經(jīng)理可以管理多幢公寓樓。每幢公寓樓必須由一個經(jīng)理管理。系統(tǒng)需記錄每個維修工的業(yè)務(wù)技能,如:水暖維修、電工、木工等”說明需要記錄的屬性有:姓名、類別、一個聯(lián)系電話、月工資和業(yè)務(wù)技能。因此(a)處應(yīng)為:業(yè)務(wù)技能。 題干中“每幢公寓樓有唯一的樓編號和地址以及每幢公寓樓必須由一個經(jīng)理管理”同時管理聯(lián)系沒有轉(zhuǎn)換成一個獨立的關(guān)系,也就意味著管理聯(lián)系被合并到了公寓樓的實體對應(yīng)的關(guān)系中,因此,公寓樓實體對應(yīng)的關(guān)系的屬性應(yīng)該有:樓編號、地址、經(jīng)理編號;因此(b)處應(yīng)該為:樓編號。 依據(jù)題干中“合同內(nèi)容應(yīng)包含簽訂日期、開始時間租期、押金和月租金
28、。”結(jié)合關(guān)系合同(合同編號,租客編號,樓編號,公寓號,經(jīng)理編號,簽訂日期,起始日期,租期,(c),押金),可以得出(c)處應(yīng)該為:月租金。 【問題3】 題干中“租期內(nèi),公寓內(nèi)設(shè)施如出現(xiàn)問題,租客可在系統(tǒng)中進(jìn)行故障登記,填寫故障描述,每項故障由系統(tǒng)自動生成唯一的故障編號,由公司派維修工進(jìn)行故障維修,系統(tǒng)需記錄每次維修的維修日期和維修內(nèi)容”說明,維修應(yīng)該與租賃(由租客和公寓組合成一個大的實體集)之間存在多對多的聯(lián)系,同時需要有自己的屬性:故障編號、維修日期、維修內(nèi)容。 維修(故障編號,維修工,維修日期,維修內(nèi)容,樓編號,公寓號,租客編號)。 5.某快餐廳主要制
29、作并出售兒童套餐,一般包括主餐(各類比薩)、飲料和玩具,其餐品種類可能不同,但其制作過程相同。前臺服務(wù)員(Waiter)調(diào)度廚師制作套餐。現(xiàn)采用生成器(Builder)模式實現(xiàn)制作過程,得到如圖6-1所示的類圖。 【Java代碼】 class Pizza{ private String parts; public void setParts(String parts){this.parts=parts;} public String toString( ){return this.parts;} } abstract class PizzaBuilder{ protect
30、ed Pizza pizza; public Pizza getPizza( ?。﹞return pizza;} public void createNewPizza( ?。﹞pizza=new Pizza( );} public(1); } class HawaiianPizzaBuilder extends PizzaBuilder{ public void buildParts( ?。﹞pizza.setParts("cross+mild+ham&pineapp1e”}; } class SpicyPizzaBuilder extends PizzaBuilder{
31、public void buildParts( ?。﹞pizza.setParts("pan baked+hot+pepperoni&salami");} } class Waiter{ private PizzaBuilder pizzaBuilder; public void setPizzaBuilder(PizzaBuilder pizzaBuilder){/*設(shè)置構(gòu)建器*/ (2); } public Pizza getPizza( ){return pizzaBuilder.getPizza( ?。?} public void construct( ){/*構(gòu)建
32、*/ pizzaBuilder.createNewPizza( ); (3); } } Class FastFoodOrdering{ public static viod mainSting[]args){ Waiter waiter=new Waiter( ?。? PizzaBuilder hawaiian_pizzabuilder=new HawaiianPizzaBuilder( ?。? (4); (5); System.out.println("pizza:"+waiter.getPizza( ?。?; } } 程序的輸出結(jié)果為: Pizza:cros
33、s+mild+ham&pineapple 正確答案: 本題解析: (1)abstract void buildParts(); (2)this.pizzaBuilder=pizzaBuilder (3)pizzaBuilder.buildParts() (4)waiter.setPizzaBuilder(hawaiian_pizzabuilder) (5)waiter.construct() 1.看類圖,還差一個buildparts方法,再看下面的類也有buildparts方法,知道應(yīng)該是ab
34、stract void buildParts()。 2.這部分填寫設(shè)置構(gòu)建器內(nèi)容,在waiter類里面,定義pizzaBuilder。 3.從類圖知道,構(gòu)建方法應(yīng)該是buildParts,當(dāng)前對象是pizzaBuilder。 4.前面定義了對象waiter,新建hawaiian_pizzabuilder類,調(diào)用waiter的set方法。 5.調(diào)用waiter類中的construct方法,這樣可以得到Pizza。 6.假幣問題:有n枚硬幣,其中有一枚是假幣,已知假幣的重量較輕。現(xiàn)只有一個天平,要求用盡量少的比較次數(shù)找出這枚假幣。 【分析問題】 將n枚硬
35、幣分成相等的兩部分: (1)當(dāng)n為偶數(shù)時,將前后兩部分,即1…n/2和n/2+1…n,放在天平的兩端,較輕的一端里有假幣,繼續(xù)在較輕的這部分硬幣中用同樣的方法找出假幣; (2)當(dāng)n為奇數(shù)時,將前后兩部分,即1..(n-1)/2和(n+1)/2+1…n,放在天平的兩端,較輕的一端里有假幣,繼續(xù)在較輕的這部分硬幣中用同樣的方法找出假幣;若兩端重量相等,則中間的硬幣,即第(n+1)/2枚硬幣是假幣。 【C代碼】 下面是算法的C語言實現(xiàn),其中: coins[]:硬幣數(shù)組 first,last:當(dāng)前考慮的硬幣數(shù)組中的第一個和最后一個下標(biāo) #include<stdio.h> int get
36、CounterfeitCoin(int coins[],int first,int last) { int firstSum=0,lastSum=0; intì; If(first==last-1){/*只剩兩枚硬幣*/ if(coins[first]<coins[last]) return first; return last; } if((last-first+1)%2==0){/*偶數(shù)枚硬幣*/ for(i=first;i<(1);i++){ firstSum+=coins[i]; } for(i=first+(last-first)/2+1;i<last+1;
37、i++){ lastSum+=coins[i]; } if(2){ return getCounterfeitCoin(coins,first,first+(last-first)/2;) }else{ return getCounterfeitCoin(coins,first+(last-first)/2+1,last;) } } else{/*奇數(shù)枚硬幣*/ for(i=first;i<first+(last-first)/2;i++){ firstSum+=coins[i]; } for(i=first+(last-first)/2+1;i<last+1;i++
38、){ lastSum+=coins[i]; } if(firstSum<lastSum){ return getCounterfeitCoin(coins,first,first+(last-first)/2-1); }else if(firstSum>lastSum){ return getCounterfeitCoin(coins,first+(last-first)/2+1,last); }else{ return(3) } } } 【問題一】(6分) 根據(jù)題干說明,填充C代碼中的空(1)-(3)。 【問題二】(6分) 根據(jù)題干說明和C代碼,算法采用了(
39、)設(shè)計策略。 函數(shù)getCounterfeitCoin的時間復(fù)雜度為( )(用O表示)。 【問題三】(3分) 若輸入的硬幣數(shù)為30,則最少的比較次數(shù)為( ?。?,最多的比較次數(shù)為( ?。? 正確答案: 本題解析: 【問題1】 (1)first+(last-first)/2+1或(first+last)/2+1 (2)firstSum<lastSum (3)first+(last-first)/2或(first+last)/2 【問題2】 (4)分治法 (5)O(lgn) 【問題3】
40、 (6)2(7)4 【問題1】 對于本題代碼填空,可以根據(jù)算法過程推導(dǎo)。 第一空,缺少循環(huán)的停止條件,根據(jù)題干描述,在左側(cè)比較應(yīng)該是到(last+first)/2為止,由于這里是小于符號,所以第一空填寫(last+first)/2+1,或first+(last-first)/2+1,或其他等價形式。 第二空,缺少判斷條件,進(jìn)入較小部分繼續(xù)比較,因此本空應(yīng)該填寫firstSum<lastSum。 第三空,缺少返回值,此時即不在左側(cè),也不在右側(cè),則當(dāng)前位置即為目標(biāo)位置,返回當(dāng)前位置first+(last-first)/2。 【問題2】 本題采用的是分治法策略。整個算法過程類似于樹形結(jié)構(gòu),所以時間復(fù)雜度為O(lgn)。 【問題3】 若輸入30個硬幣,找假硬幣的比較過程為: 第1次:15比15,此時能發(fā)現(xiàn)假幣在15個的范圍內(nèi)。 第2次:7比7,此時,如果天平兩端重量相同,則中間的硬幣為假幣,此時可找到假幣,這是最理想的狀態(tài)。 第3次:3比3,此時若平衡,則能找出假幣,不平衡,則能確定假幣為3個中的1個。 第4次:1比1,到這一步無論是否平衡都能找出假幣,此時為最多比較次數(shù)。 因此最少比較2次,最多比較4次。
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 24香港璀璨的明珠
- 第02講 第一章 綜合布線基礎(chǔ)知識
- 預(yù)防傳染病課件
- 【創(chuàng)新設(shè)計】2011屆高考生物一輪復(fù)習(xí) 第5章單元綜合提升 細(xì)胞增殖、分化、衰老和凋亡課件 蘇教版必修1
- 512防震減災(zāi)安全教育班會課件
- 2022年浙教初中數(shù)學(xué)八下《反證法》課件10
- 1山中訪友課后作業(yè)(A組-基礎(chǔ)篇)
- 產(chǎn)后出血完整版
- 質(zhì)量培訓(xùn)教材(2)
- 部編版一年級下冊語文課件第三單元語文園地三(完美版)
- 我最好老師課件
- 面向?qū)ο蟾呒墤?yīng)用及C-sharp-語法新特性課件
- 堿金屬元素課件
- 部編人教版六年級語文下冊14《文言文二則-》學(xué)-弈課件
- 部編版六年級上冊語文課件--宇宙生命之謎