試題二
閱讀以下說明,回答問題1至問題4。
【說明】
某賓館需要建立一個住房管理系統,部分的需求分析結果如下:
(1)一個房間有多個床位,同一房間內的床位具有相同的收費標準,不同房間的床位收費標準可能不同;
(2)每個房間有房間號(如201、202等)、收費標準、床位數目等信息;
(3)每位客人有身份證號碼、姓名、性別、出生日期和地址等信息:
(4)對每位客人的每次住宿,應該記錄其入住日期、退房日期和預付款額信息;
(5)管理系統可查詢出客人所住房間號。
根據以上的需求分析結果,設計一種關系模型如下圖所示:
【問題1】
根據上述說明和實體-聯系圖,得到該住房管理系統的關系模式如下所示,請補充住宿關系。
房間(房間號,收費標準,床位數目)
客人(身份證號,姓名,性別,出生日期,地址)
住宿( (1) ,入住日期,退房日期,預付款額)
【問題2】
請給出問題1中住宿關系的主鍵和外鍵。
【問題3】
若將上述各關系直接實現為對應的物理表,現需查詢在2005年1月1日到2005年 12月31日期間,在該賓館住宿次數大于5次的客人身份證號,并且按照入住次數進行降序排列。下面是實現該功能的SQL語句,請?zhí)钛a語句中的空缺。
SELECT 住宿.身份證號,count (入住日期)
FROM 住宿,客人
WHERE 入住日期>='20050101'AND入住日期<='20051231'
AND 住宿.身份證號=客人.身份證號
GROUP BY (2)
(3) count(入住日期)>5
(4)
【問題4】
為提交SQL語句的執(zhí)行效率,可在相應的表上創(chuàng)建索引。根據問題3中的SQL語句,除主鍵和外鍵外,還需要在哪個表的哪些屬性上創(chuàng)建索引,應該創(chuàng)建什么類型的索引,請說明原因。
試題一
閱讀以下說明以及數據流圖,回答問題1至問題5。
【說明】
某銀行已有一套基于客戶機/服務器模式的儲蓄系統A和一套建賬軟件。建賬軟件主要用于將儲蓄所手工處理的原始數據轉換為系統A所需的數據格式。該建賬軟件具有以下功能。
(1)分戶賬錄入:手工辦理業(yè)務時建立的每個分戶賬數據均由初錄員和復錄員分別錄入,以確保數據的正確性。
(2)初錄/復錄比對:將初錄員和復錄員錄入的數據進行一一比較,并標記兩套數據是否一致。
(3)數據確認:當上述兩套數據完全一致后,將其中任一套作為最終進入系統A的原始數據。
(4)匯總核對和打印:對經過確認的數據進行匯總,并和會計賬目中的相關數據進行核對,以確保數據的整體正確性,并打印輸出經過確認的數據,為以后核查可能的錯誤提供依據。
(5)數據轉換:將經過確認的數據轉換為儲蓄系統A需要的中間格式數據。
(6)數據清除:為加快初錄和復錄的處理速度,在數據確認之后,可以有選擇地清除初錄員和復錄員錄入的數據。
該軟件的數據流圖如圖10-1至圖10-3所示。圖中部分數據流數據文件的格式如下:
初錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當前余額+性質
復錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當前余額+性質
初錄數據=手工分戶賬+一致性標志
復錄數據=手工分戶賬+一致性標志
會計賬目=儲蓄所號+總戶數+總余額
操作結果=初錄操作結果+比對操作結果+復錄操作結果
【問題1】
請采用說明中的詞匯,給出數據確認處理所需的數據流在第1層圖中的全部可選起點(第0層圖和第1層圖中均未給出)。
【問題2】
不考慮數據確認處理(加工2),請指出數據流圖中存在的錯誤。
【問題3】
打印分戶賬清單時,必須以下列哪一組數據作為關鍵字進行排序,才能滿足需求?請從下面選項中選擇。
①儲蓄所 ②賬號 ⑧開戶日 ④總戶數和總余額
【問題4】
加工1(錄入比對處理)除能夠檢查出初錄數據和復錄數據不一致外,還應當檢測出下列哪些錯誤。
①輸入的無效字符 ②輸入的半個漢字 ③顯示器無法顯示
④初錄員重復錄入同一賬戶 ⑤匯總數據與會計賬目不符 ⑥打印機卡紙
【問題5】
請使用數據字典條目定義形式,給出第0層DFD中的“手工分戶賬”數據流和第1層DFD中的“初錄分戶賬”、“復錄分戶賬”的關系。
試題三
閱讀以下說明和圖,回答問題1至問題3。
【說明】
S公司開辦了在線電子商務網站,主要為各注冊的商家提供在線商品銷售功能。為更好地吸引用戶,S公司計劃為注冊的商家提供商品(Commodity)促銷(Promotion)功能。商品的分類(Category)不同,促銷的方式和內容也會有所不同。
注冊商家可發(fā)布促銷信息。商家首先要在自己所銷售的商品的分類中,選擇促銷涉及的某一具體分類,然后選出該分類的一個或多個商品(一種商品僅僅屬于一種分類),接著制定出一個比較優(yōu)惠的折扣政策和促銷活動的優(yōu)惠時間,最后由系統生成促銷信息并將該促銷信息公布在網站上。
商家發(fā)布促銷信息后,網站的注冊用戶便可通過網站購買促銷商品。用戶可選擇參與某一個促銷活動,并選擇具體的促銷商品,輸入購買數量等購買信息。系統生成相應的一份促銷訂單(POrder)。只要用戶在優(yōu)惠活動的時間范圍內,通過網站提供的在線支付系統,確認在線支付該促銷訂單(即完成支付),就可以優(yōu)惠的價格完成商品的購買活動,否則該促銷訂單失效。
系統采用面向對象方法開發(fā),系統中的類以及類之間的關系用UML類圖表示,圖 10-4是該系統類圖中的一部分;系統的動態(tài)行為采用UML序列圖表示,圖10-5是發(fā)布促銷的序列圖。
【問題1】
識別關聯的多重度是面向對象建模過程中的一個重要步驟。根據說明中給出的描述,完成圖10-4中的(1)~(6)。
【問題2】
請從表10-2中選擇方法,完成圖10-5中的(7)~(10)。
【問題3】
關聯(Association)和聚集(Aggregation)是UML中兩種非常重要的關系。請說明關聯和聚集的關系,并說明其不同點。
試題四
閱讀以下說明和圖,填補流程圖中的空缺。
【說明】
某汽車制造工廠有兩條裝配線。汽車裝配過程如圖10-6所示,即汽車底盤進入裝配線,零件在多個工位裝配,結束時汽車自動完成下線工作。
(1)e0和e1表示底盤分別進入裝配線0和裝配線1所需要的時間。
(2)每條裝配線有n個工位,第一條裝配線的工位為S0,0,S0,1,…,S0,n-0,第二條裝配線的工位為S1,0,S1,1,…,S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任務,但所需時間可能不同。
(3)aij表示在工位Sij處的裝配時間,其中i表示裝配線(i=0或i=1),j表示工位號(0≤j≤n-1)。
(4)tij表示從Sij處裝配完成后轉移到另一條裝配線下一個工位的時間。
(5)X0和X1表示裝配結束后,汽車分別從裝配線0和裝配線1下線所需要的時間。
(6)在同一條裝配線上,底盤從一個工位轉移到其下一個工位的時間可以忽略不計。
圖10-7所示的流程圖描述了求最短裝配時間的算法,該算法的輸入為;
n: 表示裝配線上的工位數;
e[i]: 表示e1和e2,i取值為0或1:
a[i][j]: 表示ai,j,i的取值為0或1,j的取值范圍為0~n-1;
t[i][j]: 表示ti,j,i的取值為0或1,j的取值范圍為0~n-1;
x[i]: 表示X0和X1,i取值為0或1。
算法的輸出為:
fi:最短的裝配時間;
li:獲得最短裝配時間的下線裝配線號(0或者1)。
算法中使用的f[i][j]表示從開始點到Si,j處的最短裝配時間。
試題五
閱讀以下說明、圖和C代碼。
【說明】
一般的樹結構常采用孩子-兄弟表示法表示,即用二叉鏈表作樹的存儲結構,鏈表中結點的兩個鏈域分別指向該結點的第一個孩子結點和下一個兄弟結點。例如,圖10-8(a)所示的樹的孩子-兄弟表示如圖10-8(b)所示。
函數LevelTraverse()的功能是對給定樹進行層序遍歷。例如,對圖10-1所示的樹進行層序遍歷時,結點的訪問次序為D B A E F P C。
對樹進行層序遍歷時使用了隊列結構,實現隊列基本操作的函數原型如下表所示:
Bool、Status類型定義如下:
typedef enum { FALSE=0,TRUE=1 } Bool;
typedef enum { OVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1}Status;
樹的二叉鏈表結點定義如下:
typedef struct Node {
char data;
struct Node *firstchild,*nextbrother;
} Node,*TreeNode;
【函數】
Status LevelTraverse ( TreeNode root )
{ /*層序遍歷樹,樹采用孩子-兄弟表示法,root是樹根結點的指針*/
Queue tempQ;
TreeNode ptr,brotherptr;
if (! root)
return ERROR;
InitQueue(&tempQ);
(1) ;
brotherptr = root -> nextbrother;
while (brotherptr) {
EnQueue(&tempQ,brotherptr);
(2) ;
}/*end-while*/
while( (3) ){
(4) ;
printf("%c\t",ptr->data);
if( (5) )continue;
(6) ;
brotherptr = ptr->firstchild->nextbrother;
while (brotherptr) {
EnQueue(&tempQ,brotherptr);
(7) ;
}/*end-while*/
}/*end-while*/
return OK;
}/*LevelTraverse*/