2011年上半年(下午)《軟件設(shè)計(jì)師》真題
《2011年上半年(下午)《軟件設(shè)計(jì)師》真題》由會(huì)員分享,可在線閱讀,更多相關(guān)《2011年上半年(下午)《軟件設(shè)計(jì)師》真題(7頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、2011年上半年(下午)《軟件設(shè)計(jì)師》真題 注意:圖片可根據(jù)實(shí)際需要調(diào)整大小 卷面總分:6分 答題時(shí)間:240分鐘 試卷題量:6題 練習(xí)次數(shù):0次 問答題 (共6題,共6分) 1.一個(gè)簡(jiǎn)單的圖形編輯器提供給用戶的基本操作包括:創(chuàng)建圖形、創(chuàng)建元素、選擇元素以及刪除圖形。圖形編輯器的組成及其基本功能描述如下: (1)圖形由文本元素和圖元元素構(gòu)成,圖元元素包括線條、矩形和橢圓。 (2)顯示在工作空間中,一次只能顯示一張圖形(即當(dāng)前圖形,current)。 (3)提供了兩種操作圖形的工具:選擇工具和創(chuàng)建工具
2、。對(duì)圖形進(jìn)行操作時(shí),一次只能使用一種工具(即當(dāng)前活動(dòng)工具,active) ①創(chuàng)建工具用于創(chuàng)建文本元素和圖元元素。 ②對(duì)于顯示在工作空間中的圖形,使用選擇工具能夠選定其中所包含的元素,可以選擇一個(gè)元素,也可以同時(shí)選擇多個(gè)元素。被選擇的元素稱為當(dāng)前選中元素(selected)。 ③每種元素都具有對(duì)應(yīng)的控制點(diǎn)。拖拽選定元素的控制點(diǎn),可以移動(dòng)元素或者調(diào)整元素的大小。 現(xiàn)采用面向?qū)ο蠓椒ㄩ_發(fā)該圖形編輯器,使用UML進(jìn)行建模。構(gòu)建出的用例圖和類圖分別如圖3-1和3-2所示。 圖3-1用例圖 圖3-2類圖 【問題1】(4分) 根據(jù)說明中的描述,給出圖3-1中U1和U2所對(duì)應(yīng)的用例,以
3、及(1)和(2)處所對(duì)應(yīng)的關(guān)系。 【問題2】(8分) 根據(jù)說明中的描述,給出圖3.2中缺少的C1~C8所對(duì)應(yīng)的類名以及(3)~(6)處所對(duì)應(yīng)的多重度。 【問題3】(3分) 圖3-2中的類圖設(shè)計(jì)采用了橋接(Bridge)設(shè)計(jì)模式,請(qǐng)說明該模式的內(nèi)涵。 正確答案: 本題解析: 【問題1】 UI:移動(dòng)元素U2:調(diào)整元素大小(Ul和U2的答案可以互換) (1)<<extend>>(2)<<extend>> 【問題2】 C1:創(chuàng)建工具C2:選擇工具C3:線條工具C4:矩形工具 C5:橢圓工具C6
4、:線條C7:矩形C8:橢圓 注:C3~C5的答案可以互換;C6-C8的答案可以互換。 (3)0..1(4)1(5)1(6)1..* 【問題3】 橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化,對(duì)一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)該對(duì)使用它的程序不產(chǎn)生影響。 本題考查面向?qū)ο箝_發(fā)相關(guān)知識(shí),涉及UML用例圖、類圖以及類圖設(shè)計(jì)時(shí)的設(shè)計(jì)模式。UML目前在面向?qū)ο筌浖_發(fā)中廣泛使用,是面向?qū)ο筌浖_發(fā)考查的重要內(nèi)容。 【問題1】 本題主要考查用例圖。 用例之間的關(guān)系主要有以下三種: (1)包含關(guān)系。當(dāng)可以從兩個(gè)或兩個(gè)以上的用例中提取公共行為時(shí),應(yīng)該使用包含關(guān)系來表示它們。用《in
5、clude》表示。 (2)擴(kuò)展關(guān)系。如果一個(gè)用例明顯地混合了兩種或兩種以上的不同場(chǎng)景,即根據(jù)情況可能發(fā)生多種分支,則可以將這個(gè)用例分為一個(gè)基本用例和一個(gè)或多個(gè)擴(kuò)展用例,這樣使描述可能更加清晰。用《extend》表示。 (3)泛化關(guān)系。當(dāng)多個(gè)用例共同擁有一種類似的結(jié)構(gòu)和行為的時(shí)候,可以將它們的共性抽象成為父用例,其他的用例作為泛化關(guān)系中的子用例。 在本題中,從用例圖中,我們不難看出U1和U2都與選擇元素用例有關(guān)系。然后根據(jù)題目的描述,可知U1和U2應(yīng)該分別是移動(dòng)元素和調(diào)整元素的大小,這里我們假定U1是移動(dòng)元素用例,而U2是調(diào)整元素的大小用例。那么接著我們?cè)賮泶_定空(1)與空(2)的內(nèi)容。這
6、里很顯然U1和U2與選擇元素用例的關(guān)系是擴(kuò)展關(guān)系,因此空(1)與空(2)都應(yīng)該填<<extend>>。 【問題2】 本問題考查類圖。對(duì)于這個(gè)題目,我們應(yīng)該結(jié)合題目的描述及給出的類圖來求解。從題目給出的類圖中我們可以看出,C1和C2是繼承(泛化)于工具類的,而題目描述告訴我們系統(tǒng)提供了兩種操作圖形的工具,即選擇工具和創(chuàng)建工具,因此C2與C2應(yīng)該分別是選擇工具和創(chuàng)建工具之一,然后我們可以看到文本工具類是繼承于C1的,結(jié)合題目描述“創(chuàng)建工具用于創(chuàng)建文本元素和圖元元素”,我們可以知道C1應(yīng)該為創(chuàng)建工具類,而C2應(yīng)該為選擇工具類,另外,根據(jù)題目描述“圖元元素包括線條、矩形和橢圓”,可以知道C6至C8
7、應(yīng)該分別是線條類、矩形類及橢圓類,當(dāng)然這三者的答案可以互換。而要能得到這些圖形元素,就應(yīng)該有相應(yīng)的畫圖工具,因此C3至C5應(yīng)該分別是線條工具類、矩形工具類及橢圓工具類,這三者的答案也可以互換。 在UML中,多重度又稱重復(fù)度,多重度表示為一個(gè)整數(shù)范圍n..m,整數(shù)n定義所連接的最少對(duì)象的數(shù)目,而m則為最多對(duì)象數(shù)(當(dāng)不知道確切的最大數(shù)時(shí),最大數(shù)用*號(hào)表示)。最常見的多重性有0..1、0..*、1..1和1..*,而*與0..*是等價(jià)的。 由于一個(gè)圖形編輯器實(shí)例可以有一個(gè)工具實(shí)例,當(dāng)然也可以沒有工具實(shí)例,而一個(gè)工具實(shí)例只能屬于一個(gè)圖形編輯器實(shí)例,因此空(3)與空(4)分別為0..1和1。而一個(gè)圖
8、形至少需要包含一個(gè)圖形元素,也可以包含多個(gè)圖形元素,而一個(gè)圖形元素實(shí)例只能屬于一個(gè)圖形實(shí)例,所以空(5)與空(6)應(yīng)該分別是1和1..*。 【問題3】 本問題主要考查橋接模式的基本內(nèi)容。 橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化,對(duì)一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)該對(duì)使用它的程序不產(chǎn)生影響。 2.某飯店在不同的時(shí)段提供多種不同的餐飲,其菜單的結(jié)構(gòu)圖如下圖所示。 圖5-1菜單結(jié)構(gòu)圖 現(xiàn)在采用組合(Composition)模式來構(gòu)造該飯店的菜單,使得飯店可以方便地在其中增加新的餐飲形式,得到如下圖所示的類圖。其中MenuComponent
9、為抽象類,定義了添加(add)新菜單和打印飯店所有菜單信息(print)的方法接口。類Menu表示飯店提供的每種餐飲形式的菜單,如煎餅屋菜單、咖啡屋菜單等。每種菜單中都可以添加子菜單,例如圖中的甜點(diǎn)菜單。類MenuItem表示菜單中的菜式。 圖5-2類圖 【C++代碼】 #include<iostream> #include<list> #include<string> using namespace std; class MenuComponent{ protected:string name; public: MenuComponent(string name){t
10、his->name=name;) string getName( ?。﹞return name;) (1);//添加新菜單 virtual void print( ?。?0;//打印菜單信息 }; class Menultem:public MenuComponent{ private:double price; public: Menultem(string name,double price):MenuComponent(name){this->price=price; double getPrice( ?。﹞return price;) void add(MenuCo
11、mponent*menuComponent){retum;}//添加新菜單 void print( ?。﹞cout<<""<<getName( ?。迹?,"<<getPrice( )<<endl;) }; class Menu:public MenuComponent{ private:list<(2)>menuComponents; public: Menu(string name):MenuComponent(name){} void add(MenuComponent*menuComponent)//添加新菜單 {(3);} void print( ){ cou
12、t<<"\n"<<getName( ?。迹?\n-------------------"<<endl; std::list<MenuComponent*>::iterator iter, for(iter=menuComponents.begin( ?。?iter!=menuComponents.end( ?。?iter++) (4)->print( ?。? } }; void main( ?。﹞ MenuComponent*alIMenus=new Menu("ALL MENUS"); MenuComponent*dinerMenu=new Menu("DINER MENU
13、"); ……//創(chuàng)建更多的Menu對(duì)象,此處代碼省略 alIMenus->add(dinerMenu);//將dinerMenu添加到餐廳菜單中 ……//為餐廳增加更多的菜單,此處代碼省略 (5)->print( ?。?//打印飯店所有菜單的信息 正確答案: 本題解析: (1)virtual void add(MenuComponent*menuComponent)=0 (2)MenuComponent* (3)menuComponents.push_back(menuComponent)
14、 (4)(*iter) (5)allMenus 本題考查基本面向?qū)ο笤O(shè)計(jì)模式的運(yùn)用能力。 組合設(shè)計(jì)模式主要是表達(dá)整體和部分的關(guān)系,并且對(duì)整體和部分對(duì)象的使用無差別。由UML結(jié)構(gòu)圖知MenuComponent是MenuItem類和Menu類的父類,它抽象了兩個(gè)類的共有屬性和行為。在使用中,無論是MenuItem對(duì)象還是Menu對(duì)象,都可被當(dāng)作MenuComponent對(duì)象來使用。另外由UML結(jié)構(gòu)圖可知,類MenuComponent和Menu之間存在共享關(guān)系,即Menu對(duì)象可以共享其它的Menu對(duì)象和MenuItem對(duì)象。 第(1)空是要在類MenuComponent中定義添加新菜單的方法
15、,即add方法,而類MenuComponent是抽象類,因此該方法也應(yīng)該是抽象方法,及需要加關(guān)鍵字virtual,因此空(1)應(yīng)填virtual void add(MenuComponent*menuComponent)=0,而第(2)空很明顯應(yīng)該填MenuComponent*;空(3)是要實(shí)現(xiàn)Menu類下的add函數(shù),而根據(jù)題目描述“每種菜單中都可以添加子菜單”,因此這里要實(shí)現(xiàn)添加子菜單,因此本空應(yīng)填menuComponents.push_back(menuComponent)。在類Menu類下的print函數(shù)中,定義了對(duì)象iter,因此第4空可以通過這個(gè)對(duì)象來引用print()方法,因此第
16、(4)空答案應(yīng)該填(*iter)。而第5空為了能打印飯店所有菜單的信息,應(yīng)該填alIMenus。 3.某醫(yī)院欲開發(fā)病人監(jiān)控系統(tǒng)。該系統(tǒng)通過各種設(shè)備監(jiān)控病人的生命體征,并在生命體征異常時(shí)向醫(yī)生和護(hù)理人員報(bào)警。該系統(tǒng)的主要功能如下: (1)本地監(jiān)控:定期獲取病人的生命體征,如體溫、血壓、心率等數(shù)據(jù)。 (2)格式化生命體征:對(duì)病人的各項(xiàng)重要生命體征數(shù)據(jù)進(jìn)行格式化,然后存入日志文件并檢查生命體征。 (3)檢查生命體征:將格式化后的生命體征與生命體征范圍文件中預(yù)設(shè)的正常范圍進(jìn)行比較。如果超出了預(yù)設(shè)范圍,系統(tǒng)就發(fā)送一條警告信息給醫(yī)生和護(hù)理人員。 (4)維護(hù)生命體征范
17、圍:醫(yī)生在必要時(shí)(如,新的研究結(jié)果出現(xiàn)時(shí))添加或更新生命體征值的正常范圍。 (5)提取報(bào)告:在醫(yī)生或護(hù)理人員請(qǐng)求病人生命體征報(bào)告時(shí),從日志文件中獲取病人生命體征生成體征報(bào)告,并返回給請(qǐng)求者。 (6)生成病歷:根據(jù)日志文件中的生命體征,醫(yī)生對(duì)病人的病情進(jìn)行描述,形成病歷存入病歷文件。 (7)查詢病歷:根據(jù)醫(yī)生的病歷查詢請(qǐng)求,查詢病歷文件,給醫(yī)生返回病歷報(bào)告。 (8)生成治療意見:根據(jù)日志文件中的生命體征和病歷,醫(yī)生給出治療意見,如處方等,并存入治療意見文件。 (9)查詢治療意見:醫(yī)生和護(hù)理人員查詢治療意見,據(jù)此對(duì)病人進(jìn)行治療。 現(xiàn)采用結(jié)構(gòu)化方法對(duì)病人監(jiān)控系統(tǒng)進(jìn)行分析與設(shè)計(jì),獲得如圖1
18、-1所示的頂層數(shù)據(jù)流圖和圖1-2所示的0層數(shù)據(jù)流圖。 圖1-1頂層數(shù)據(jù)流圖 圖1-2 0層數(shù)據(jù)流圖 【問題1】(3分) 使用說明中的詞語,給出圖1-1中的實(shí)體E1~E3的名稱。 【問題2】(4分) 使用說明中的詞語,給出圖1.2中的數(shù)據(jù)存儲(chǔ)D1~D4的名稱。 【問題3】(6分) 圖1-2中缺失了4條數(shù)據(jù)流,使用說明、圖1-1和圖1-2中的術(shù)語,給出數(shù)據(jù)流的名稱及其起點(diǎn)和終點(diǎn)。 【問題4】(2分) 說明實(shí)體E1和E3之間可否有數(shù)據(jù)流,并解釋其原因。 正確答案: 本題解析: 【問題
19、1】(3分,各1分) E1:病人E2:護(hù)理人員E3:醫(yī)生 【問題2】(4分,各1分). D1:生命體征范圍文件D2:日志文件 D3:病歷文件D4:治療意見文件 【問題3】(6分) 注:上表中各行次序無關(guān),但每行的數(shù)據(jù)流名稱(….表示不計(jì)分)、起點(diǎn)、終點(diǎn)必須相對(duì)應(yīng) 【問題4】(2分) E1和E3之間不可以有數(shù)據(jù)流,因?yàn)閿?shù)據(jù)流的起點(diǎn)和終點(diǎn)中必須有一個(gè)是加工(處理)。 本題考查數(shù)據(jù)流圖(DFD)的應(yīng)用,是一種比較傳統(tǒng)的題目,要求考生細(xì)心分析題目中所描述的內(nèi)容。DFD是一種便于用戶理解、分析系統(tǒng)數(shù)據(jù)流程的圖形工具。是系統(tǒng)邏輯模型的重要組成部分。 解答這類問題,有以下兩個(gè)原則:
20、 (1)緊扣試題的系統(tǒng)說明部分,數(shù)據(jù)流圖與系統(tǒng)說明有著嚴(yán)格的對(duì)應(yīng)關(guān)系,系統(tǒng)說明部分的每一句話都能對(duì)應(yīng)到圖中,解題時(shí)可以一句一句地對(duì)照著圖來分析。 (2)數(shù)據(jù)的平衡原則,這一點(diǎn)在解題過程中也是至關(guān)重要的。數(shù)據(jù)平衡原則有兩方面的意思:一方面是分層數(shù)據(jù)流圖中父子圖之間的數(shù)據(jù)流平衡原則;另一方面是每張數(shù)據(jù)流圖中輸入與輸出數(shù)據(jù)流的平衡原則。 【問題1】 本問題要求我們給出圖1-1中的實(shí)體E1~E3的名稱。這個(gè)需要我們從題目中的描述和該圖來獲得。題目中有信息描述:定期獲取病人的生命體征,如體溫、血壓、心率等數(shù)據(jù),我們結(jié)合頂層數(shù)據(jù)流圖可知,E1為實(shí)體病人;另外,根據(jù)題目描述“將格式化后的生命體征與生
21、命體征范圍文件中預(yù)設(shè)的正常范圍進(jìn)行比較。如果超出了預(yù)設(shè)范圍,系統(tǒng)就發(fā)送一條警告信息給醫(yī)生和護(hù)理人員”,我們可以知道E2和E3他們分別可能是護(hù)理人員或醫(yī)生,再結(jié)合描述“醫(yī)生在必要時(shí)添加或更新生命體征值的正常范圍”和頂層數(shù)據(jù)流圖可知,E3是醫(yī)生,那么E2就是護(hù)理人員。 【問題2】 本問題考查數(shù)據(jù)存儲(chǔ)的確定。根據(jù)題目的描述“對(duì)病人的各項(xiàng)重要生命體征數(shù)據(jù)進(jìn)行格式化,然后存入日志文件并檢查生命體征”,結(jié)合0層數(shù)據(jù)流圖我們可知D2為日志文件;根據(jù)題目描述“根據(jù)日志文件中的生命體征,醫(yī)生對(duì)病人的病情進(jìn)行描述,形成病歷存入病歷文件”,再結(jié)合0層數(shù)據(jù)流圖我們可知D3為病歷文件,并且確失生成病歷至病歷文件的數(shù)
22、據(jù)流和日志文件至生成病歷的數(shù)據(jù)流;根據(jù)題目描述“根據(jù)日志文件中的生命體征和病歷,醫(yī)生給出治療意見,如處方等,并存入治療意見文件”,再結(jié)合0層數(shù)據(jù)流圖我們可知D4為治療意見文件。在確定了上面三個(gè)文件后,題目中還剩下生命體征范圍文件,很顯然,D1就是生命體征范圍文件。 【問題3】 本題主要考查數(shù)據(jù)流的查找,即要求我們找出0層數(shù)據(jù)流圖中缺失的4條數(shù)據(jù)流。在問題2中,我們已經(jīng)找到了生成病歷至病歷文件的數(shù)據(jù)流和日志文件至生成病歷的數(shù)據(jù)流。 另外,根據(jù)數(shù)據(jù)流圖的原則,即每個(gè)加工必須有輸入流和輸出流,我們可以找到加工本地監(jiān)控只有輸入數(shù)據(jù)流,而沒有輸出數(shù)據(jù)流,那么它肯定缺少一個(gè)輸出數(shù)據(jù)流,而根據(jù)題目描述
23、“對(duì)病人的各項(xiàng)重要生命體征數(shù)據(jù)進(jìn)行格式化”我們可知,0層數(shù)據(jù)流圖中應(yīng)該缺少?gòu)谋镜乇O(jiān)控至格式化生命體征的數(shù)據(jù)流重要生命體征,這樣就是加工格式化生命體征也有了輸入數(shù)據(jù)流。 最后一條缺失的數(shù)據(jù)流是從格式化生命體征至檢查生命體征的數(shù)據(jù)流,這個(gè)可以根據(jù)題目描述“對(duì)病人的各項(xiàng)重要生命體征數(shù)據(jù)進(jìn)行格式化,然后存入日志文件并檢查生命體征”找出,在這個(gè)描述中明顯的說到要將生命體征數(shù)據(jù)格式化后進(jìn)行檢查。這個(gè)數(shù)據(jù)流名稱就為格式化后的生命體征。 【問題4】 根據(jù)上面的分析,我們已經(jīng)知道E1和E3分別為病人和醫(yī)生。顯然他們都是實(shí)體,因此他們之間不能有數(shù)據(jù)流,因?yàn)閿?shù)據(jù)流的起點(diǎn)和終點(diǎn)中必須有一個(gè)是加工。
24、 4.某服裝銷售公司擬開發(fā)一套服裝采購(gòu)管理系統(tǒng),以便對(duì)服裝采購(gòu)和庫(kù)存進(jìn)行管理。 【需求分析】 (1)采購(gòu)系統(tǒng)需要維護(hù)服裝信息及服裝在倉(cāng)庫(kù)中的存放情況。服裝信息主要包括:服裝編碼、服裝描述、服裝類型、銷售價(jià)格、尺碼和面料,其中,服裝類型為銷售分類,服裝按銷售分類編碼。倉(cāng)庫(kù)信息包括:倉(cāng)庫(kù)編碼、倉(cāng)庫(kù)位置、倉(cāng)庫(kù)容量和庫(kù)管員。系統(tǒng)記錄庫(kù)管員的庫(kù)管員編碼、姓名和級(jí)別。一個(gè)庫(kù)管員可以管理多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)有一名庫(kù)管員。一個(gè)倉(cāng)庫(kù)中可以存放多類服裝,一類服裝可能存放在多個(gè)倉(cāng)庫(kù)中。 (2)當(dāng)庫(kù)管員發(fā)現(xiàn)有一類或者多類服裝缺貨時(shí),需要生成采購(gòu)訂單。一個(gè)采購(gòu)訂單可以包含多類服裝。每類服裝可由多個(gè)
25、不同的供應(yīng)商供應(yīng),但具有相同的服裝編碼。采購(gòu)訂單主要記錄訂單編碼、訂貨日期和應(yīng)到貨日期,并詳細(xì)記錄所采購(gòu)的每類服裝的數(shù)量、采購(gòu)價(jià)格和對(duì)應(yīng)的多個(gè)供應(yīng)商。 (3)系統(tǒng)需記錄每類服裝的各個(gè)供應(yīng)商信息和供應(yīng)情況。供應(yīng)商信息包括:供應(yīng)商編碼、供應(yīng)商名稱、地址、企業(yè)法人和聯(lián)系電話。供應(yīng)情況記錄供應(yīng)商所供應(yīng)服裝的服裝類型和服裝質(zhì)量等級(jí)。一個(gè)供應(yīng)商可以供應(yīng)多類服裝,一類服裝可由多個(gè)供應(yīng)商供應(yīng)。庫(kù)管員根據(jù)入庫(kù)時(shí)的服裝質(zhì)量情況,設(shè)定或修改每個(gè)供應(yīng)商所供應(yīng)的每類服裝的服裝質(zhì)量等級(jí),作為后續(xù)采購(gòu)服裝時(shí),選擇供應(yīng)商的參考標(biāo)準(zhǔn)。 【概念模型設(shè)計(jì)】 根據(jù)需求階段收集的信息,設(shè)計(jì)的實(shí)體聯(lián)系圖(不完整)如圖2-1所示。
26、 圖2-1實(shí)體聯(lián)系圖 【邏輯結(jié)構(gòu)設(shè)計(jì)】 根據(jù)概念模型設(shè)計(jì)階段完成的實(shí)體聯(lián)系圖,得出如下關(guān)系模式(不完整): 庫(kù)管員(庫(kù)管員編碼,姓名,級(jí)別) 倉(cāng)庫(kù)信息((1),倉(cāng)庫(kù)位置,倉(cāng)庫(kù)容量) 服裝(服裝編碼,服裝描述,服裝類型,尺碼,面料,銷售價(jià)格) 供應(yīng)商(供應(yīng)商編碼,供應(yīng)商名稱,地址,聯(lián)系電話,企業(yè)法人) 供應(yīng)情況((2),服裝質(zhì)量等級(jí)) 采購(gòu)訂單((3)) 采購(gòu)訂單明細(xì)(____(4)) 【問題1】(6分) 根據(jù)需求分析的描述,補(bǔ)充圖2.1中的聯(lián)系和聯(lián)系的類型。 【問題2】(6分) 根據(jù)補(bǔ)充完整的圖2-1,將邏輯結(jié)構(gòu)設(shè)計(jì)階段生成的關(guān)系模式中的空(1)~(4)補(bǔ)充完整,
27、并給出其主鍵(用下劃線指出)。 【問題3】(3分) 如果庫(kù)管員定期需要輪流對(duì)所有倉(cāng)庫(kù)中的服裝質(zhì)量進(jìn)行抽查,對(duì)每個(gè)倉(cāng)庫(kù)中的每一類被抽查服裝需要記錄一條抽查結(jié)果,并且需要記錄抽查的時(shí)間和負(fù)責(zé)抽查的庫(kù)管員。請(qǐng)根據(jù)該要求,對(duì)圖2-1進(jìn)行修改,畫出修改后的實(shí)體間聯(lián)系和聯(lián)系的類型。 正確答案: 本題解析: 【問題1】(6分)‘ (聯(lián)系各1分,聯(lián)系的類型各1分) 【問題2】(6分) (每個(gè)空1分,主鍵各0.5分) (1)倉(cāng)庫(kù)編碼,庫(kù)管員編碼主鍵:倉(cāng)庫(kù)編碼 (2)供應(yīng)商編碼,服裝編碼主鍵:供應(yīng)商編碼,
28、服裝編碼 (3)訂單編碼,訂貨日期,應(yīng)到貨日期主鍵:訂單編碼 (4)訂單編碼,服裝編碼,供應(yīng)商編碼,數(shù)量,采購(gòu)價(jià)格主鍵:訂單編碼,服裝編碼,供應(yīng)商編碼 【問題3】(3分) (聯(lián)系“抽查”2分,聯(lián)系的類型1分) 本題考查數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)、概念至邏輯結(jié)構(gòu)轉(zhuǎn)換等內(nèi)容。 此類題目要求考生認(rèn)真閱讀題目,根據(jù)題目的需求描述,給出實(shí)體間的聯(lián)系。 【問題1】 本題主要考查根據(jù)題目描述補(bǔ)充完整ER圖。 在本題中,根據(jù)題目描述“一個(gè)倉(cāng)庫(kù)中可以存放多類服裝,一類服裝可能存放在多個(gè)倉(cāng)庫(kù)中”,我們可以知道服裝與倉(cāng)庫(kù)間存在多對(duì)多的聯(lián)系“存放”;根據(jù)題目描述“一個(gè)供應(yīng)商可以供應(yīng)多類服裝,一類服裝可由
29、多個(gè)供應(yīng)商供應(yīng)。”我們可以知道,供應(yīng)商與服裝之間存在多對(duì)多的供應(yīng)關(guān)系;然后我們根據(jù)題目描述“一個(gè)采購(gòu)訂單可以包含多類服裝。每類服裝可由多個(gè)不同的供應(yīng)商供應(yīng)”可知,在服裝、供應(yīng)商和采購(gòu)訂單之間存在一個(gè)采購(gòu)聯(lián)系,其中三端都是多端。 【問題2】 該問題要我們補(bǔ)充完整各關(guān)系模式中缺失的屬性并給出各關(guān)系模式的主鍵。要補(bǔ)充各關(guān)系模式缺失的屬性應(yīng)該根據(jù)題目的描述來完成。第1空是要我們補(bǔ)充倉(cāng)庫(kù)信息關(guān)系模式所缺失的屬性,根據(jù)題目的描述,倉(cāng)庫(kù)信息包括:倉(cāng)庫(kù)編碼、倉(cāng)庫(kù)位置、倉(cāng)庫(kù)容量和庫(kù)管員,因此第1空應(yīng)該填(倉(cāng)庫(kù)編碼,庫(kù)管員編碼),這里用庫(kù)管員編碼而不用庫(kù)管員的原因是庫(kù)管員編碼是庫(kù)管員關(guān)系模式的主鍵,而本關(guān)系模
30、式的主鍵是倉(cāng)庫(kù)編碼。 第2空是要我們補(bǔ)充供應(yīng)情況所缺失的屬性,供應(yīng)是供應(yīng)商與服裝之間的聯(lián)系,而這里是一個(gè)多對(duì)多的聯(lián)系,多對(duì)多的聯(lián)系在轉(zhuǎn)換為單獨(dú)的關(guān)系模式時(shí),屬性包括兩端實(shí)體的主鍵其自身的一些屬性,因此第2空應(yīng)該填(供應(yīng)商編碼,服裝編碼),而該關(guān)系模式的主鍵為(供應(yīng)商編碼,服裝編碼)。 第3空要與第4空一起來考慮。第3空要我們補(bǔ)充采購(gòu)訂單關(guān)系模式所缺失的屬性,根據(jù)題目的描述,采購(gòu)訂單主要記錄訂單編碼、訂貨日期和應(yīng)到貨日期,并詳細(xì)記錄所采購(gòu)的每類服裝的數(shù)量、采購(gòu)價(jià)格和對(duì)應(yīng)的多個(gè)供應(yīng)商。這里由于有關(guān)系模式采購(gòu)訂單明細(xì),所以第3空應(yīng)該填(訂單編碼,訂貨日期,應(yīng)到貨日期),而第4空應(yīng)該填(訂單編碼,
31、服裝編碼,供應(yīng)商編碼,數(shù)量,采購(gòu)價(jià)格)。而采購(gòu)訂單的主鍵為訂單編碼,另外,由于題目描述“一個(gè)采購(gòu)訂單可以包含多類服裝。每類服裝可由多個(gè)不同的供應(yīng)商供應(yīng)”,可知采購(gòu)訂單明細(xì)的主鍵為(訂單編碼,服裝編碼,供應(yīng)商編碼)。 【問題3】 本題描述“如果庫(kù)管員定期需要輪流對(duì)所有倉(cāng)庫(kù)中的服裝質(zhì)量進(jìn)行抽查”,我們可以知道抽查與庫(kù)管員、倉(cāng)庫(kù)及服裝這三個(gè)實(shí)體有關(guān)系,而且三端都是多端。這樣就很容易畫圖ER圖(見試題答案)。 5.某應(yīng)用中需要對(duì)100000個(gè)整數(shù)元素進(jìn)行排序,每個(gè)元素的取值在0~5之間。排序算法的基本思想是:對(duì)每一個(gè)元素x,確定小于等于x的元素個(gè)數(shù)(記為m),將x放
32、在輸出元素序列的第m個(gè)位置。對(duì)于元素值重復(fù)的情況,依次放入第m-1、m-2、…個(gè)位置。例如,如果元素值小于等于4的元素個(gè)數(shù)有10個(gè),其中元素值等于4的元素個(gè)數(shù)有3個(gè),則4應(yīng)該在輸出元素序列的第10個(gè)位置、第9個(gè)位置和第8個(gè)位置上。算法具體的步驟為: 步驟1:統(tǒng)計(jì)每個(gè)元素值的個(gè)數(shù)。 步驟2:統(tǒng)計(jì)小于等于每個(gè)元素值的個(gè)數(shù)。 步驟3:將輸入元素序列中的每個(gè)元素放入有序的輸出元素序列。 【C代碼】 下面是該排序算法的C語言實(shí)現(xiàn)。 (1)常量和變量說明 R:常量,定義元素取值范圍中的取值個(gè)數(shù),如上述應(yīng)用中R值應(yīng)取6 i:循環(huán)變量 n:待排序元素個(gè)數(shù) a:輸入數(shù)組,長(zhǎng)度為n b:輸出
33、數(shù)組,長(zhǎng)度為n c:輔助數(shù)組,長(zhǎng)度為R,其中每個(gè)元素表示小于等于下標(biāo)所對(duì)應(yīng)的元素值的個(gè)數(shù)。 (2)函數(shù)sort 1 void sort(int n,int a[],int b[]){ 2?int c[R],i; 3?for(i=0;i<(1):i++){ 4?c[i]=0; 5} 6?for(i=0;i<n;i++){ 7 c[a[i]]=(2); 8} 9?for(i=1;i<R;i++){ 10 c[i]=(3) 11} 12 for(i=0;i<n;i++){ 13?b[c[a[i]]-1]=(4); 14?c[a[i]]=c[a[i]]-1; 15}
34、 16} 【問題1】(8分) 根據(jù)說明和C代碼,填充C代碼中的空缺(1)~(4)。 【問題2】(4分) 根據(jù)C代碼,函數(shù)的時(shí)間復(fù)雜度和空間復(fù)雜度分別為(5)和(6)(用O符號(hào)表示)。 【問題3】(3分) 根據(jù)以上C代碼,分析該排序算法是否穩(wěn)定。若穩(wěn)定,請(qǐng)簡(jiǎn)要說明(不超過100字);若不穩(wěn)定,請(qǐng)修改其中代碼使其穩(wěn)定(給出要修改的行號(hào)和修改后的代碼)。 正確答案: 本題解析: 【問題1】 (1)R (2)c[a[i]]+1 (3)c[i]+c[i-1] (4)a[i] 【問題2】 (
35、5)O(n+R)或者O(n)或n或線性 (6)O(n+R)或者O(n)或n或線性 【問題3】 不穩(wěn)定。修改第12行的for循環(huán)為:for(i=n-1;i>=0;i--)即可。 【問題1】 本題考查排序的相關(guān)內(nèi)容。 題目告訴我們排序算法的基本思想是:對(duì)每一個(gè)元素x,確定小于等于x的元素個(gè)數(shù)(記為m),將x放在輸出元素序列的第m個(gè)位置。對(duì)于元素值重復(fù)的情況,依次放入第m-1、m-2、…的位置。而且題目告訴我們算法的步驟。 下面我們來具體分析本試題。第(1)空所處的位置為函數(shù)sort()中第一個(gè)for循環(huán)中,從題目的描述和程序不難看出該循環(huán)的作用是給數(shù)組c賦初值,而根據(jù)題目描述可知數(shù)組
36、c是一個(gè)輔助數(shù)組,長(zhǎng)度為R,因此第一空應(yīng)填R。 第(2)空在函數(shù)sort()中的第二個(gè)for循環(huán)中,很顯然第(2)空是給數(shù)組c賦值,而且其下標(biāo)為數(shù)組a的相應(yīng)的元素值。再根據(jù)題目的描述“c數(shù)組中每個(gè)元素表示小于等于下標(biāo)所對(duì)應(yīng)的元素值的個(gè)數(shù)”,很顯然,這個(gè)for循環(huán)的作用是統(tǒng)計(jì)每個(gè)元素值的個(gè)數(shù),因此第(2)空的答案應(yīng)該是c[a[i]]+1。 第(3)空在第三個(gè)for循環(huán)中,而且第(3)空是調(diào)整數(shù)組c的值,根據(jù)題目提供的算法的步驟,我們可知,這個(gè)時(shí)候應(yīng)該要統(tǒng)計(jì)小于等于每個(gè)元素值的個(gè)數(shù),而等于的元素個(gè)數(shù)記錄在c[i]中,小于的元素個(gè)數(shù)記錄在c[i-1]中,因此第(3)空的答案是c[i]+c[i-1
37、]。 第(4)空在最后一個(gè)for循環(huán)中,按題目要求,我們可以知道該for循環(huán)應(yīng)該完成剩余的步驟3,即將輸入元素序列中的每個(gè)元素放入有序的輸出元素序列。而第(4)空是給數(shù)組b賦值,題目告訴我們b是輸出數(shù)組,而a是輸入數(shù)組,那么應(yīng)該是將a中的值賦值值b中,因此第(4)空的答案應(yīng)該為a[i]。 【問題2】 本題主要考查時(shí)間復(fù)雜度與空間復(fù)雜度的分析。 首先我們來看空間復(fù)雜度,空間復(fù)雜度是對(duì)一個(gè)算法在運(yùn)行過程中臨時(shí)占用存儲(chǔ)空間大小的量度。在sort()函數(shù)中,聲明了兩個(gè)整型變量n和i(可忽略),兩個(gè)整型數(shù)組b和c,而a不屬于函數(shù)sort的臨時(shí)空間,因此函數(shù)sort()的空間復(fù)雜度為O(n+R),
38、這里由于在本題中R的值為6,因此也可以忽略,所以答案也可以是O(n)。 接著我們來分析時(shí)間復(fù)雜度,時(shí)間復(fù)雜度是度量算法執(zhí)行的時(shí)間長(zhǎng)短,函數(shù)sort()中有并列的四個(gè)循環(huán),其中有兩個(gè)循環(huán)n次,而另外兩個(gè)分別循環(huán)R-1和R次,因此時(shí)間復(fù)雜度應(yīng)該為O(n+R),由于R的值為6,這里可以忽略,因此答案也可以是O(n)。 【問題3】 所謂穩(wěn)定性是指兩個(gè)關(guān)鍵字相等的元素在排序前后的相對(duì)位置不發(fā)生變化,一般來講,只要排序過程中比較和移動(dòng)操作發(fā)生在相鄰的元素間,排序方法是穩(wěn)定的。本題中的排序是不穩(wěn)定的,可以修改第12行的for循環(huán)為:for(i=n-1;i>=0;i--)即可。
39、 6.某飯店在不同的時(shí)段提供多種不同的餐飲,其菜單的結(jié)構(gòu)圖如下圖所示。 圖6-1菜單結(jié)構(gòu)圖 現(xiàn)在采用組合(Composition)模式來構(gòu)造該飯店的菜單,使得飯店可以方便地在其中增加新的餐飲形式,得到如下圖所示的類圖。其中MenuComponent為抽象類,定義了添加(add)新菜單和打印飯店所有菜單信息(print)的方法接口。類Menu表示飯店提供的每種餐飲形式的菜單,如煎餅屋菜單、咖啡屋菜單等。每種菜單中都可以添加子菜單,例如圖中的甜點(diǎn)菜單。類Menultem表示菜單中的菜式。 圖6-2類圖 【Java代碼】 import java.util.*; (1)Men
40、uComponent{ protected String name; (2);//添加新菜單 public abstract void print( );//打印菜單信息 public String getName( ?。﹞return name;} } class Menultem extends MenuComponent{ private double price; public MenuItem(String name,double price){ this.name=name;this.price=price; } public double getPrice
41、( ?。﹞return price;)} public void add(MenuComponent menuComponent){return;}//添加新菜單 public void print( ){ System.out.print(""+getName( ?。?; System.out.println(","+getPrice( )); } } class Menu extends MenuComponent{ private List<MenuComponent>menuComponents=new ArrayList<MenuComponent>( ?。?
42、public Menu(String name){this.name=name;) public void add(MenuComponent menuComponent){//添加新菜單 menuComponents.(3); } public void print( ?。﹞ System.out.print("\n"+getName( ?。?; System.out.println(","+"---------------"); Iterator iterator=menuComponents.iterator( ?。? while(iterator.hasNext( ?。?/p>
43、){ MenuComponent menuComponent=(MenuComponent)iterator.next( ); (4); } } } class MenuTestDrive{ public static void main(String args[]){ MenuComponent aIIMenus=new Menu("ALL MENUS"); MenuComponent dinerMenu=new Menu("DINER MENU”); ……//創(chuàng)建更多的Menu對(duì)象,此處代碼省略 allMenus.add(dinerMenu);//將dinerMen
44、u添加到餐廳菜單中 ……//為餐廳增加更多的菜單,此處代碼省略 (5);//打印飯店所有菜單的信息 } } 正確答案: 本題解析: (1)abstract class或public abstract class (2)public abstract void add(MenuComponent menuComponent) 或abstract void add(MenuComponent menuComponent) 或protected abstract void add(MenuCom
45、ponent menuComponent) (3)add(menuComponent) (4)menuComponent.print() (5)aIIMenus.print() 本題考查基本面向?qū)ο笤O(shè)計(jì)模式的運(yùn)用能力。 組合設(shè)計(jì)模式主要是表達(dá)整體和部分的關(guān)系,并且對(duì)整體和部分對(duì)象的使用無差別。由UML結(jié)構(gòu)圖知MenuComponent是MenuItem類和Menu類的父類,它抽象了兩個(gè)類的共有屬性和行為。在使用中,無論是MenuItem對(duì)象還是Menu對(duì)象,都可被當(dāng)作MenuComponent對(duì)象來使用。另外由UML結(jié)構(gòu)圖可知,類MenuComponent和Menu之間存在共享關(guān)系,
46、即Menu對(duì)象可以共享其它的Menu對(duì)象和MenuItem對(duì)象。 第(1)空是要在類MenuComponent定義前加一個(gè)關(guān)鍵字,而類MenuComponent是抽象類,因此空(1)應(yīng)填abstract class或public abstract class,而第(2)空是要定義添加新菜單的方法,該方法應(yīng)該是抽象方法,因此第(2)空的答案應(yīng)該是public abstract void add(MenuComponent menuComponent);空(3)是要實(shí)現(xiàn)Menu類下的add函數(shù),而根據(jù)題目描述“每種菜單中都可以添加子菜單”,因此這里要實(shí)現(xiàn)添加子菜單,因此本空應(yīng)填add(menuComponent)。在空(4)需要調(diào)用print()方法,因此空(4)處應(yīng)填menuComponent.print()。而第5空為了能打印飯店所有菜單的信息,應(yīng)該填aIIMenus.print()。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級(jí)《觀潮》課件1 (3)
- 中考數(shù)學(xué)課件浙教版中考數(shù)學(xué)數(shù)與式(1)
- 食品安全及其評(píng)價(jià)體系課件
- 不規(guī)則物體的體積初成-PPT
- 抑郁癥的防治
- 優(yōu)選光輻射測(cè)量系統(tǒng)的性能及其測(cè)量課件
- 14通往廣場(chǎng)的路不止一條課件
- 石油能源行業(yè)2020工作總結(jié)與2020工作計(jì)劃ppt模板
- 微生物鏈霉菌和其在生產(chǎn)中的應(yīng)用
- 優(yōu)質(zhì)護(hù)理服務(wù)措施ppt
- 小小的書櫥課件(北師大版語文三年級(jí)下冊(cè))
- 第6章國(guó)際貨物運(yùn)輸2
- 氣胸的健康指導(dǎo)ppt課件
- 認(rèn)識(shí)計(jì)算機(jī)鍵盤微課
- 先天性髖關(guān)節(jié)脫位X線診斷