第
1題: 閱讀下列說明和圖,回答問題1至問題4,將解答填入答題紙的對應欄內(nèi)。
【說明】
某醫(yī)療器械公司作為復雜醫(yī)療產(chǎn)品的集成商,必須保持高質(zhì)量部件的及時供應。為了實現(xiàn)這一目標,該公司欲開發(fā)一采購系統(tǒng)。系統(tǒng)的主要功能如下:
1.檢查庫存水平。采購部門每天檢查部件庫存量,當特定部件的庫存量降至其訂貨點時,返回低存量部件及庫存量。
2.下達采購訂單。采購部門針對低存量部件及庫存量提交采購請求,向其供應商(通過供應商文件訪問供應商數(shù)據(jù))下達采購訂單,并存儲于采購訂單文件中。
3. 交運部件。當供應商提交提單并交運部件時,運輸和接收(S/R)部門通過執(zhí)行以下三步過程接收貨物:
(1)驗證裝運部件。通過訪問采購訂單并將其與提單進行比較來驗證裝運的部件,并將提單信息發(fā)給 S/R 職員。 如果收貨部件項目出現(xiàn)在采購訂單和提單上,則已驗證的提單和收貨部件項目將被送去檢驗。否則,將S/R職員提交的裝運錯誤信息生成裝運錯誤通知發(fā)送給供應商。
(2) 檢驗部件質(zhì)量。通過訪問質(zhì)量標準來檢查裝運部件的質(zhì)量,并將己驗證的提單發(fā)給檢驗員。如果部件滿足所有質(zhì)量標準,則將其添加到接受的部件列表用于更新部件庫存。如果部件未通過檢查,則將檢驗員創(chuàng)建的缺陷裝運信息生成缺陷裝運通知發(fā)送給供應商。
(3)更新部件庫存。庫管員根據(jù)收到的接受的部件列表添加本次采購數(shù)量,與原有庫存量累加來更新庫存部件中的庫存量。標記訂單采購完成。
現(xiàn)采用結構化方法對該采購系統(tǒng)進行分析與設計,獲得如圖1-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ù)說明和圖中術語,補充圖1-2中缺失的數(shù)據(jù)流及其起點和終點。
【問題 4】(2分)
用 200 字以內(nèi)文字,說明建模圖 1-1 和圖 1-2 時如何保持數(shù)據(jù)流圖平衡。
答案解析與討論:
m.xiexiliangjiufa.com/st/384197499.html第
3題: 閱讀下列系統(tǒng)設計說明,回答問題1至問題3,將解答填入答題紙的對應欄內(nèi)。
【說明】
某玩具公司正在開發(fā)一套電動玩具在線銷售系統(tǒng),用于向注冊會員提供端對端的玩具 定制和銷售服務。在系統(tǒng)設計階段,"創(chuàng)建新訂單 (New Order)" 的設計用例詳細描述如表 3-1 所示,候選設計類分類如表 3-2 所示,并根據(jù)該用例設計出部分類圖如圖3-1所示。
表 3-1 創(chuàng)建新訂單 (NewOrder) 設計用例


表3-2 候選設計類分類

在訂單處理的過程中,會員可以點擊“取消訂單"取消該訂單。如果支付失敗,該訂單將被標記為掛起狀態(tài),可后續(xù)重新支付,如果掛起超時30分鐘未支付,系統(tǒng)將自動取消該訂單。訂單支付成功后,系統(tǒng)判斷訂單類型: (1)對于常規(guī)訂單,標記為備貨狀態(tài),訂單信息發(fā)送到貨運部,完成打包后交付快遞發(fā)貨; (2)對于定制訂單,會自動進入定制狀態(tài),定制完成后交付快遞發(fā)貨。會員在系統(tǒng)中點擊”收貨"按鈕變?yōu)槭肇洜顟B(tài),結束整個訂單的處理流程。根據(jù)訂單處理過程所設計的狀態(tài)圖如圖3-2所示。
圖3-2 訂單狀態(tài)圖
【問題1】(6分)
根據(jù)表3-1中所標記的候選設計類,請按照其類別將編號 C1~C12 分別填入表 3-2 中的(a)、(b)和(c)處。
【問題2】 (4 分)
根據(jù)創(chuàng)建新訂單的用例描述,請給出圖3-1中X1~X4處對應類的名稱。
【問題3】 (5分)
根據(jù)訂單處理過程的描述,在圖 3-2 中S1~S5處分別填入對應的狀態(tài)名稱。
答案解析與討論:
m.xiexiliangjiufa.com/st/3842121292.html第
4題: 閱讀下列說明和C代碼,回答問題 1 至問題 3,將解答寫在答題紙的對應欄內(nèi)。
【說明】
假幣問題:有n枚硬幣,其中有一枚是假幣,己知假幣的重量較輕。現(xiàn)只有一個天平,要求用盡量少的比較次數(shù)找出這枚假幣。
【分析問題】
將n枚硬幣分成相等的兩部分:
(1)當n為偶數(shù)時,將前后兩部分,即 1...n/2和n/2+1...0,放在天平的兩端,較輕的一端里有假幣,繼續(xù)在較輕的這部分硬幣中用同樣的方法找出假幣:
(2)當n為奇數(shù)時,將前后兩部分,即1..(n -1)/2和(n+1)/2+1...0,放在天平的兩端,較輕的一端里有假幣,繼續(xù)在較輕的這部分硬幣中用同樣的方法找出假幣;若兩端重量相等,則中間的硬幣,即第 (n+1)/2枚硬幣是假幣。
【C代碼】
下面是算法的C語言實現(xiàn),其中:
coins[]: 硬幣數(shù)組
first,last:當前考慮的硬幣數(shù)組中的第一個和最后一個下標
#include
int getCounterfeitCoin(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;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<="" p="">
firstSum+=coins[i];
}
For(i=first+(last-first)/2+1;i
lastSum+=coins[i];
}
If(firstSum
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 )
}
}
}
【問題一】
根據(jù)題干說明,填充C代碼中的空(1)-(3)
【問題二】
根據(jù)題干說明和C代碼,算法采用了( )設計策略。
函數(shù)getCounterfeitCoin的時間復雜度為( )(用O表示)。
【問題三】
若輸入的硬幣數(shù)為30,則最少的比較次數(shù)為( ),最多的比較次數(shù)為( )。
答案解析與討論:
m.xiexiliangjiufa.com/st/3842215171.html第
5題: 閱讀下列說明和 C++代碼,將應填入(n)處的字句寫在答題紙的對應欄內(nèi)。
【說明】
某快餐廳主要制作井出售兒童套餐,一般包括主餐(各類比薩)、飲料和玩具,其餐品種類可能不同,但其制作過程相同。前臺服務員(Waiter)調(diào)度廚師制作套餐?,F(xiàn)采用生成器(Builder) 模式實現(xiàn)制作過程,得到如圖 5-1 所示的類圖。
圖5-1 類圖
【C++代碼】
#include
#include
using namespace std;
class 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 HawaiianPizzaBuilder :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 setPizzaBuilder(PizzaBuilder* pizzaBuilder) { /*設置構建器*/
( 2 )
}
Pizza* getPizza() { return pizzaBuilder->getPizza(); }
void construct() { /*構建*/
pizzaBuilder->createNewPizza();
( 3 )
}
};
int main(){
Waiter*waiter=new Waiter();
PizzaBuilder*hawaiian pizzabuilder=new HawaiianPizzaBuilder()
( 4 );
( 5 );
cout<< "pizza: "<< waiter->getPizza()->getParts()<< endl;
}
程序的輸出結果為:
pizza: cross + mild + ham&pineapple
答案解析與討論:
m.xiexiliangjiufa.com/st/384239657.html