版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2014年上半年(下午)《軟件設(shè)計師》真題卷面總分:6分答題時間:240分鐘試卷題量:6題練習(xí)次數(shù):4次
問答題(共6題,共6分)
1.某實驗室欲建立一個實驗室環(huán)境監(jiān)測系統(tǒng),能夠顯示實驗室的溫度、濕度以及潔凈度等環(huán)境數(shù)據(jù)。當(dāng)獲取到最新的環(huán)境測量數(shù)據(jù)時,顯示的環(huán)境數(shù)據(jù)能夠更新。
現(xiàn)在采用觀察者(Observer)模式來開發(fā)該系統(tǒng)。觀察者模式的類圖如圖5-1所示。
【C++代碼】
#include<iostream>
#include<vector>
usingnamespacestd;
classObserver{
public:
virtualvoidupdate(floattemp,floathumidity,floatcleanness)=0;
};
classSubject{
public:
virtualvoidregisterObserver(Observer*o)=0;//注冊對主題感興趣的觀察者
virtualvoidremoveObserver(Observer*o)=0;//刪除觀察者
virtualvoidnotifyObservers()=0;//當(dāng)主題發(fā)生變化時通知觀察者
};
classEnvironmentData:public(1){
private:
vector<Observer*>observers;
floattemperature,humidity,cleanness;
public:
voidregisterObserver(Observer*o){observers.push_back(o);}
voidremoveObserver(Observer*o){/*代碼省略*/}
voidnotifyObservers(){
for(vector<Observer*>::const_iteratorit=observers.begin();it!=observers.end();it++)
{(2);}
}
VoidmeasurementsChanged(){(3);}
voidsetMeasurements(floattemperature,floathumidity,floatcleanness){
this->temperature=temperature;
this->humidity=humidity;
this->cleanness=cleanness;
(4);
}
};
classCurrentConditionsDisplay:public(5){
private:
floattemperature,humidity,cleanness;
Subject*envData;
public:
CurrentConditionsDisplay(Subject*envData){
this->envData=envData;
(6);
}
voidupdate(floattemperature,floathumidity,floatcleanness){this->temperature=temperature;
this->humidity=humidity;
this->cleanness=cleanness;
display();
}
voiddisplay(){/*代碼省略*/}
};
intmain(){
EnvironmentData*envData=newEnvironmentData();
CurrentConditionsDisplay*currentDisplay=newCurrentConditionsDisplay(envData);
envData->setMeasurements(80,65,30.4f);
return0;
}
正確答案:
您的答案:
本題解析:(1)Subject
(2)(*it)->update(temperature,humidity,cleanness)
(3)notifyObservers()
(4)measurementsChanged()
(5)Observer()
(6)envData->registerObserver(this)
EnvironmentData是環(huán)境數(shù)據(jù),也就是我們要監(jiān)測的對象,即主題(Subject),因此(1)處為Subject。
(2)處為通知觀察者,因此遍歷觀察者容器,遍歷到一個觀察者對象,則更新該觀察者的數(shù)據(jù),即調(diào)用觀察者的update()方法。
當(dāng)環(huán)境數(shù)據(jù)變化時,需要通知觀察者,因此(4)處是調(diào)用環(huán)境變化方法measurementsChanged(),通過此方法通知觀察者更新數(shù)據(jù),因此(3)處為notifyObservers()。
根據(jù)CurrentConditionsDisplay類中的update()方法可知:CurrentConditionsDisplay是個觀察者,因此(5)處為Observer
(6)是將觀察者添加到主題中去。
2.某巴士維修連鎖公司欲開發(fā)巴士維修系統(tǒng),以維護與維修相關(guān)的信息。該系統(tǒng)的主要功能如下:
1)記錄巴士ID和維修問題。巴士到車庫進行維修,系統(tǒng)將巴士基本信息和ID記錄在巴士列表文件中,將待維修機械問題記錄在維修記錄文件中,并生成維修訂單。
2)確定所需部件。根據(jù)維修訂單確定維修所需部件,并在部件清單中進行標(biāo)記。
3)完成維修。機械師根據(jù)維修記錄文件中的待維修機械問題,完成對巴士的維修,登記維修情況;將機械問題維修情況記錄在維修記錄文件中,將所用部件記錄在部件清單中,并將所用部件清單發(fā)送給庫存管理系統(tǒng)以對部件使用情況進行監(jiān)控。巴士司機可查看已維修機械問題。
4)記錄維修工時。將機械師提供的維修工時記錄在人事檔案中,將維修總結(jié)發(fā)送給主管進行績效考核。
5)計算維修總成本。計算部件清單中實際所用部件、人事檔案中所用維修工時的總成本;將維修工時和所用部件成本詳細信息給會計進行計費。
現(xiàn)采用結(jié)構(gòu)化方法對巴士維修系統(tǒng)進行分析與設(shè)計,獲得如圖1-1所示的上下文數(shù)據(jù)流圖和圖1-2所示的0層數(shù)據(jù)流圖。
【問題1】(5分)
使用說明中的詞語,給出圖1-1中的實體E1~E5的名稱。
【問題2】(4分)
使用說明中的詞語,給出圖1-2中的數(shù)據(jù)存儲D1~D4的名稱。
【問題3】(3分)
說明圖1-2中所存在的問題。
【問題4】(3分)
根據(jù)說明和圖中術(shù)語,釆用補充數(shù)據(jù)流的方式,改正圖1-2中的問題。要求給出所補充數(shù)據(jù)流的名稱、起點和終點。
正確答案:
您的答案:
本題解析:【問題1】(5分)
E1:巴士司機
E2:機械師
E3:會計
E4:主管
E5:庫存管理系統(tǒng)
【問題2】(4分)
D1:巴士列表文件
D2:維修記錄文件
D3:部件清單
D4:人事檔案
【問題3】(3分)
處理3只有輸出數(shù)據(jù)流,沒有輸入數(shù)據(jù)流
D2、D3是黑洞,只有輸入的數(shù)據(jù)流,沒有輸入數(shù)據(jù)流
父子圖不平衡
圖1-2中沒有圖1-1中的數(shù)據(jù)流“維修情況”
【問題4】(3分)
補充以下數(shù)據(jù)流:
(1)名稱:待維修機械問題;起點:D2;終點:3或完成維修。
(2)名稱:實際所用部件;起點:D3;終點:5或計算總成本。
(3)名稱:維修情況;起點:E2;終點:3或完成維修
【問題1】
根據(jù)第3)點:巴士司機可查看已維修機械問題,可知E1為巴士司機;根據(jù)第3)點:機械師根據(jù)維修記錄文件中的待維修機械問題,完成對巴士的維修,登記維修情況,可知E2為機械師;根據(jù)第5)點:將維修工時和所用部件成本詳細信息給會計進行計費,可知E3為會計;根據(jù)第4)點:將機械師提供的維修工時記錄在人事檔案中,將維修總結(jié)發(fā)送給主管進行績效考核,可知E4為主管;根據(jù)第3)點:將所用部件清單發(fā)送給庫存管理系統(tǒng)以對部件使用情況進行監(jiān)控,可知E5為庫存管理系統(tǒng)。
【問題2】
根據(jù)第1)點:系統(tǒng)將巴士基本信息和ID記錄在巴士列表文件中,可知D1為巴士列表文件;根據(jù)第1)點:將待維修機械問題記錄在維修記錄文件中,并生成維修訂單,可知D2為維修記錄文件;根據(jù)第2)點:根據(jù)維修訂單確定維修所需部件,并在部件清單中進行標(biāo)記,可知D3為部件清單;根據(jù)第4)點:將機械師提供的維修工時記錄在人事檔案中,可知D4為人事檔案。
【問題3】
分析圖1-2可以發(fā)現(xiàn):
處理3只有輸出數(shù)據(jù)流,沒有輸入數(shù)據(jù)流D2、D3是黑洞只有輸入的數(shù)據(jù)流,沒有輸出流,造成黑洞父子圖不平衡,在1-1和1-2中,1-1中從E2輸入的數(shù)據(jù)流維修工時/維修情況,在圖1-2中只有維修工時,造成父子圖不平衡
【問題4】
3.某家電銷售電子商務(wù)公司擬開發(fā)一套信息管理系統(tǒng),以方便對公司的員工、家電銷售、家電廠商和客戶等進行管理。
【需求分析】
(1)系統(tǒng)需要維護電子商務(wù)公司的員工信息、客戶信息、家電信息和家電廠商信息等。員工信息主要包括:工號、姓名、性別、崗位、身份證號、電話、住址,其中崗位包括部門經(jīng)理和客服等。客戶信息主要包括:客戶ID、姓名、身份證號、電話、住址、賬戶余額。家電信息主要包括:家電條碼、家電名稱、價格、出廠日期、所屬廠商。家電廠商信息包括:廠商ID、廠商名稱、電話、法人代表信息、廠址。
(2)電子商務(wù)公司根據(jù)銷售情況,由部門經(jīng)理向家電廠商訂購各類家電。每個家電廠商只能由一名部門經(jīng)理負責(zé)。
(3)客戶通過瀏覽電子商務(wù)公司網(wǎng)站查詢家電信息,與客服溝通獲得優(yōu)惠后,在線購買。
【概念模型設(shè)計】
根據(jù)需求階段收集的信息,設(shè)計的實體聯(lián)系圖(不完整)如圖2-1所示。
圖2-1實體聯(lián)系圖
【邏輯結(jié)構(gòu)設(shè)計】
根據(jù)概念模型設(shè)計階段完成的實體聯(lián)系圖,得出如下關(guān)系模式〔不完整):
客戶(客戶ID、姓名、身份證號、電話、住址、賬戶余額)
員工(工號、姓名、性別、崗位、身份證號、電話、住址)
家電(家電條碼、家電名稱、價格、出廠日期、(1))
家電廠商(廠商ID、廠商名稱、電話、法人代表信息、廠址、(2))
購買(訂購單號、(3)、金額)
【問題1】(6分)
補充圖2-1中的聯(lián)系和聯(lián)系的類型。
【問題2】(6分)
根據(jù)圖2-1,將邏輯結(jié)構(gòu)設(shè)計階段生成的關(guān)系模式中的空(1)~(3)補充完整。用下劃線指出“家電”、“家電廠商”和“購買”關(guān)系模式的主鍵。
【問題3】(3分)
電子商務(wù)公司的主營業(yè)務(wù)是銷售各類家電,對賬戶有余額的客戶,還可以聯(lián)合第二方基金公司提供理財服務(wù),為此設(shè)立客戶經(jīng)理崗位??蛻敉ㄟ^電子商務(wù)公司的客戶經(jīng)理和基金公司的基金經(jīng)理進行理財。每名客戶只有一名客戶經(jīng)理和一名基金經(jīng)理負責(zé),客戶經(jīng)理和基金經(jīng)理均可負責(zé)多名客戶。請根據(jù)該要求,對圖2-1進行修改,畫出修改后的實體間聯(lián)系和聯(lián)系的類型。
正確答案:
您的答案:
本題解析:【問題1】(6分)
【問題2】(6分)
(1)廠商ID
(2)經(jīng)理工號
(3)家電條碼,客戶ID,客服工號
家電關(guān)系的主鍵:家電條碼
家電廠商關(guān)系的主鍵:廠商ID
購買關(guān)系的主鍵:訂購單號
【問題3】(3分)
根據(jù)實際生活經(jīng)驗,不難得知家電廠商與家電之間的關(guān)系為一對多;家電與客戶之間的關(guān)系,此處的家電是指家電的類型,因此一種類型的家電可以被多個客戶購買,一個客戶也可以購買多種不同類型的家電,所以家電與客戶之間的關(guān)系為多對多;
根據(jù)題意:每名客戶只有一名客戶經(jīng)理和一名基金經(jīng)理負責(zé)客戶經(jīng)理和基金經(jīng)理均可負責(zé)多名客戶,可知客戶經(jīng)理與客戶的關(guān)系是一對多,基金經(jīng)理與客戶的關(guān)系也是一對多。
根據(jù)題目中的需求分析,不難得出關(guān)系模式的答案。
4.某高校圖書館欲建設(shè)一個圖書館管理系統(tǒng),目前已經(jīng)完成了需求分析階段的工作。功能需求均使用用例進行描述,其中用例“借書(CheckOutBooks)”的詳細描述如下。
參與者:讀者(Patron)。
典型事件流:
1.輸入讀者ID;
2.確認該讀者能夠借閱圖書,并記錄讀者ID;
3.輸入所要借閱的圖書ID;
4.根據(jù)圖書目錄中的圖書ID確認該書可以借閱,計算歸還時間,生成借閱記錄;
5.通知讀者圖書歸還時間。
重復(fù)步驟3~5,直到讀者結(jié)束借閱圖書。
備選事件流:
2a.若讀者不能借閱圖書,說明讀者違反了圖書館的借書制度(例如,沒有支付借書費用等)
①告知讀者不能借閱,并說明拒絕借閱的原因;
②本用例結(jié)束。
4a.讀者要借閱的書無法外借
①告知讀者本書無法借閱;
②回到步驟3。
說明:圖書的歸還時間與讀者的身份有關(guān)。如果讀者是教師,圖書可以借閱一年;如果是學(xué)生,則只能借閱3個月。讀者ID中包含讀者身份信息。
現(xiàn)采用面向?qū)ο蠓椒ㄩ_發(fā)該系統(tǒng),得到如圖3-1所示的系統(tǒng)類模型(部分);以及如圖3-2所示的系統(tǒng)操作“checkOut(bookID)(借書)”通信圖(或協(xié)作圖)。
【問題1】(8分)
根據(jù)說明中的描述,以及圖3-1和圖3-2,給出圖3-1中C1-C4處所對應(yīng)的類名(類名使用圖3-1和圖3-2中給出的英文詞匯)。
【問題2】(4分)
根據(jù)說明中的描述,以及圖3-1和圖3-2,給出圖3-2中M1-M4處所對應(yīng)的方法名(方法名使用圖3-1和圖3-2中給出的英文詞匯)。
【問題3】(3分)
用例“借書”的備選事件流4a中,根據(jù)借書制度來判定讀者能否借閱圖書。若圖書館的借書制度會不斷地擴充,并需要根據(jù)圖書館的實際運行情況來調(diào)整具體使用哪些制度。為滿足這一要求,在原有類設(shè)計的基礎(chǔ)上,可以采用何種設(shè)計模式?簡要說明原因。
正確答案:
您的答案:
本題解析:【問題1】(8分)
C1:Patron
C2:Book
C3:Catalog
C4:CheckoutSessionController
【問題2】(4分)
M1:getForCheckOut
M2:isFaculty
M3:circulates
M4:recordBookLoan
【問題3】(3分)
應(yīng)采用策略模式,策略模式定義了一系列算法,并將每個算法封裝起來,而且使它們可以相互替換。策略模式讓算法獨立于使用它們的客戶而變化。適用于需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其他方式來實現(xiàn)。
根據(jù)系統(tǒng)類模型,我們可以各個類之間的關(guān)聯(lián)關(guān)系。
首先從類Accounts中的canCheckOut(patronID:string)方法,可以看出Accounts關(guān)聯(lián)Patron,因此圖中C1為Patron。
C1為Patron,則C1必會與書關(guān)聯(lián),從C1中的recordBookLoad(b:C2),可以看出C1關(guān)聯(lián)C2。因此C2為Book。
C2為Book,根據(jù)系統(tǒng)操作checkOut的通信圖,可以看出與Book關(guān)聯(lián)的是Catalog,因此C3為Catalog。
結(jié)合兩圖,則可以得出C4為CheckoutSessioncontroller。
結(jié)合典型事件流:
1.輸入讀者ID;
2.確認該讀者能夠借閱圖書,并記錄讀者ID;
以上兩步實際上就是判斷讀者是不是老師,也就是isFaculty(),因此M2為isFaculty()。
3.輸入所要借閱的圖書ID;對應(yīng)的操作就是M1:getforcheck(bookID)。
4.根據(jù)圖書目錄中的圖書ID確認該書可以借閱,計算歸還時間,生成借閱記錄;對應(yīng)的操作就是M3:circulates()。
5.通知讀者圖書歸還時間。對應(yīng)的操作就是M4:recordBookLoan()。
5.某實驗室欲建立一個實驗室環(huán)境監(jiān)測系統(tǒng),能夠顯示實驗室的溫度、濕度以及潔凈度等環(huán)境數(shù)據(jù)。當(dāng)獲取到最新的環(huán)境測量數(shù)據(jù)時,顯示的環(huán)境數(shù)據(jù)能夠更新。
現(xiàn)在采用觀察者(Observer)模式來開發(fā)該系統(tǒng)。觀察者模式的類圖如圖6-1所示。
【Java代碼】
importjava.util.*;
interfaceObserver{
publicvoidupdate(floattemp,floathumidity,floatcleanness);
}
interfaceSubject{
publicvoidregisterObserver(Observero);//注冊對主題感興趣的觀察者
publicvoidremoveObserver(Observero);//刪除觀察者
publicvoidnotifyObservers();//當(dāng)主題發(fā)生變化時通知觀察者
}
classEnvironmentDataimplements(1){
privateArrayListobservers;
privatefloattemperature,humidity,cleanness;
publicEnvironmentData(){observers=newArrayList();}
publicvoidregisterObserver(Observero){observers.add(o);}
publicvoidremoveObserver(Observero){/*代碼省略*/}
publicvoidnotifyObservers(){
for(inti=0;i<observers.size();i++){
Observerobserver=(Observer)observers.get(i);
(2);
}
}
publicvoidmeasurementsChanged(){(3);}
publicvoidsetMeasurements(floattemperature,floathumidity,floatcleanness){
this.temperature=temperature;
this.humidity=humidity;
this.cleanness=cleanness;
(4);
}
}
classCurrentConditionsDisplayimplements(5){
privatefloattemperature;
privatefloathumidity;
privatefloatcleanness;
privateSubjectenvData;
publicCurrentConditionsDisplay(SubjectenvData){
this.envData=envData;
(6);
}
publicvoidupdate(floattemperature,floathumidity,floatcleanness){
this.temperature=temperature;
this.humidity=humidity;
this.cleanness=cleanness;
display();
}
publicvoiddisplay(){/*代碼省略*/}
}
classEnvironmentMonitor{
publicstaticvoidmain(String[]args){
EnvironmentDataenvData=newEnvironmentData();
CurrentConditionsDisplaycurrentDisplay=newCnrrentConditionsDisplay(envData);
envData.setMeasurements(80,65,30.4f);
}
}
正確答案:
您的答案:
本題解析:(1)Subject
(2)observer.update(temperature,humidity,cleanness)
(3)notifyObservers()
(4)measurementsChanged()
(5)Observer
(6)envData.registerObserver(this)
EnvironmentData是環(huán)境數(shù)據(jù),也就是我們要監(jiān)測的對象,即主題(Subject),因此(1)處為Subject。
(2)處為通知觀察者,因此遍歷觀察者容器,遍歷到一個觀察者對象,則更新該觀察者的數(shù)據(jù),即調(diào)用觀察者的update()方法。
當(dāng)環(huán)境數(shù)據(jù)變化時,需要通知觀察者,因此(4)處是調(diào)用環(huán)境變化方法measurementsChanged(),通過此方法通知觀察者更新數(shù)據(jù),因此(3)處為notifyObservers()。
根據(jù)CurrentConditionsDisplay類中的update()方法可知:CurrentConditionsDisplay是個觀察者,因此(5)處為Observer
(6)是將觀察者添加到主題中去。
6.采用歸并排序?qū)個元素進行遞增排序時,首先將n個元素的數(shù)組分成各含n/2個元素的兩個子數(shù)組,然后用歸并排序?qū)蓚€子數(shù)組進行遞歸排序,最后合并兩個已經(jīng)排好序的子數(shù)組得到排序結(jié)果。
下面的C代碼是對上述歸并算法的實現(xiàn),其中的常量和變量說明如下:
arr:待排序數(shù)組
p,q,r:一個子數(shù)組的位置從p到q,另一個子數(shù)組的位置從q+1到r
begin,end:待排序數(shù)組的起止位置
left,right:臨時存放待合并的兩個子數(shù)組
n1,n2:兩個子數(shù)組的長度
i,j,k:循環(huán)變量
mid:臨時變量
【C代碼】
#inciude<stdio.h>
#inciude<stdlib.h>
#defineMAX65536
voidmerge(intarr[],intp,intq,intr){
int*left,*right;
intn1,n2,i,j,k;
n1=q-p+1;
n2=r-q;
if((left=(int*)malloc((n1+1)*sizeof(int)))=NULL){
perror("mallocerror");
exit(1);
}
if((right=(int*)malloc((n2+1)*sizeof(int)))=NULL){
perror("mallocerror");
exit(1);
}
for(i=0;i<n1;i++){
left[i]=arr[p+i];
}
left[i]=MAX;
for(i=0;i<n2;i++){
right[i]=arr[q+i+1]
}
right[i]=MAX;
i=0;j=0;
for(k=p;(1);k++){
if(left[i]>right[j]){
(2);
j++;
}else{
arr[k]=left[i];
i++;
}
}
}
voidmergeSort(intarr[],intbegin,intend){
intmid;
if((3)){
mid=(begin+end)/2;
me
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物制造產(chǎn)業(yè)園項目可行性研究與實施方案
- 2024房地產(chǎn)項目開發(fā)合作協(xié)議書完整
- 2025年牛津上海版一年級英語下冊階段測試試卷
- 2025版?zhèn)鶛?quán)債務(wù)轉(zhuǎn)移及擔(dān)保責(zé)任承擔(dān)協(xié)議3篇
- 二零二五年度個人住房裝修貸款合同3篇
- 2024年華師大新版九年級科學(xué)下冊月考試卷
- 2024年滬科新版高二數(shù)學(xué)上冊月考試卷
- 2024年北師大版選修4地理上冊階段測試試卷含答案
- 2024年滬教版高二數(shù)學(xué)上冊月考試卷含答案
- 2024年滬教版八年級化學(xué)下冊階段測試試卷
- 基于多元回歸的計量經(jīng)濟學(xué)論文
- 工程全過程造價咨詢服務(wù)方案(技術(shù)方案)
- 數(shù)字媒體專業(yè)發(fā)展規(guī)劃
- 項目風(fēng)險預(yù)測與防范事故應(yīng)急預(yù)案
- 15D502等電位連接安裝圖集
- DB44-T 1641-2015 LED 洗墻燈地方標(biāo)準
- 慶鈴國五新車型概況課件
- 網(wǎng)絡(luò)攻防試題集合
- 建設(shè)工程總承包計價規(guī)范
- 設(shè)計開發(fā)(更改)評審記錄
- Cpk 計算標(biāo)準模板
評論
0/150
提交評論