第
1題: 閱讀下列說明和圖,回答問題1至問題4,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
某巴士維修連鎖公司欲開發(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ù)流的名稱、起點和終點。
答案解析與討論:
m.xiexiliangjiufa.com/st/3813924619.html第
3題: 閱讀下列說明和圖,回答問題1至問題3,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
某高校圖書館欲建設(shè)一個圖書館管理系統(tǒng),目前已經(jīng)完成了需求分析階段的工作。功能需求均使用用例進行描述,其中用例“借書(Check Out Books)”的詳細描述如下。
參與者:讀者(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è)計模式?簡要說明原因。
答案解析與討論:
m.xiexiliangjiufa.com/st/381417404.html第
4題: 閱讀下列說明和C代碼,回答問題1至問題3,將解答寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
采用歸并排序?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
#inciude
#define MAX 65536
void merge(int arr[],int p,int q,int r) {
int *left, *right;
int n1,n2,i,j,k;
n1=q-p+1;
n2=r-q;
if((left=(int*)malloc((n1+1)*sizeof(int)))=NULL) {
perror("malloc error");
exit(1);
}
if((right=(int*)malloc((n2+1)*sizeof(int)))=NULL) {
perror("malloc error");
exit(1);
}
for(i=0;ileft[i]=arr[p+i];
}
left[i]=MAX;
for(i=0; 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++;
}
}
}
void mergeSort(int arr[],int begin,int end){
int mid;
if( (3) ){
mid=(begin+end)/2;
mergeSort(arr,begin,mid);
(4) ;
merge(arr,begin,mid,end);
}
}
【問題1】
根據(jù)以上說明和C代碼,填充1-4。
【問題2】
根據(jù)題干說明和以上C代碼,算法采用了(5)算法設(shè)計策略。
分析時間復(fù)雜度時,列出其遞歸式位(6),解出漸進時間復(fù)雜度為(7)(用O符號表示)??臻g復(fù)雜度為(8)(用O符號表示)。
【問題3】
兩個長度分別為n1和n2的已經(jīng)排好序的子數(shù)組進行歸并,根據(jù)上述C代碼,則元素之間比較次數(shù)為(9)。
答案解析與討論:
m.xiexiliangjiufa.com/st/3814226162.html第
5題: 閱讀下列說明和C++代碼,將應(yīng)填入 (n)處的字句寫在答題紙的對應(yīng)欄內(nèi).
【說明】
某實驗室欲建立一個實驗室環(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
#include
using namespace std;
class Observer {
public:
virtual void update(float temp, float humidity, float cleanness)=0;
};
class Subject {
public:
virtual void registerObserver(Observer* o) = 0; //注冊對主題感興趣的觀察者
virtual void removeObserver(Observer* o) = 0; //刪除觀察者
virtual void notifyObservers() = 0;//當(dāng)主題發(fā)生變化時通知觀察者
};
class EnvironmentData : public (1) {
private:
vector
observers;
float temperature, humidity, cleanness;
public:
void registerObserver(Observer* o) { observers.push_back(o); }
void removeObserver(Observer* o) { /* 代碼省略 */ }
void notifyObservers() {
for(vector::const_iterator it = observers.begin(); it != observers.end(); it++)
{ (2) ; }
}
Void measurementsChanged() { (3) ; }
void setMeasurements(float temperature, float humidity, float cleanness) {
this->temperature = temperature;
this->humidity = humidity;
this->cleanness = cleanness;
(4) ;
}
};
class CurrentConditionsDisplay : public (5) {
private:
float temperature, humidity, cleanness;
Subject* envData;
public:
CurrentConditionsDisplay(Subject* envData) {
this->envData = envData;
(6) ;
}
void update(float temperature, float humidity, float cleanness) {this->temperature = temperature;
this->humidity = humidity;
this->cleanness = cleanness;
display();
}
void display() { /* 代碼省略 */ }
};
int main() {
EnvironmentData* envData = new EnvironmentData();
CurrentConditionsDisplay* currentDisplay = new CurrentConditionsDisplay(envData);
envData->setMeasurements(80, 65, 30.4f);
return 0;
}
答案解析與討論:
m.xiexiliangjiufa.com/st/3814319684.html