試題二
閱讀以下說明和表,回答問題1~問題4。
【說明】
某公司信息管理系統(tǒng)的需求分析和部分關(guān)系模式設(shè)計的結(jié)果描述如下。
1.公司有多個部門,每個部門有一名負(fù)責(zé)人、一間辦公室、一部電話、多名職員,每個職員最多屬于一個部門,負(fù)責(zé)人也是一名公司職員。
2.公司職員的月工資大于等于1000元且小于等于8000元。
3.?dāng)?shù)據(jù)庫的部分關(guān)系模式設(shè)計如下:
職員(職員號,職員姓名,月工資,部門號,辦公室,電話)
部門(部門號,部門名,負(fù)責(zé)人代碼,任職時間)
4.“職員”和“部門”的關(guān)系示例分別如表2-1和表2-2所示。
【問題1】
根據(jù)上述說明,請給出
(1)“職員”關(guān)系模式的主鍵和外鍵。
(2)“部門”關(guān)系模式的主鍵和外鍵。
【問題2】
(1)用SQL定義“職員”關(guān)系模式,請在空缺處填入正確的內(nèi)容。
Create Table 職員 ( 職員號CHAR(5) (a) ,
職員姓名CHAR(8),
月工資 NUMBER(4),
部門號 CHAR(1),
辦公室 CHAR(20),
電話 CHAR(8),
(b) (部門號),
CHECK (月工資>=1000 AND月工資<=8000));
(2)針對人數(shù)大于等于2的部門創(chuàng)建視圖D_View(Dept,D_num,D_Totals, D_AvgPay),其中,Dept為部門號,D_num為部門人數(shù),D_Totals為工資總數(shù),D_AvgPay為平均工資,請在空缺處填入正確的內(nèi)容。
Create View D_View (Dept,D_num,D_Totfls,D_AvgPay)As
(Select部門號, (c)
from 職員
(d) count(*)>=2 WHERE 部門號 IS NOT NULL);
【問題3】
對于表2-1、表2-2所示的“職員”和“部門”關(guān)系,請指出下列各行是否可以插入“職員”關(guān)系,為什么?
【問題4】
原來的“職員”關(guān)系模式存在什么問題?在不增加新關(guān)系模式的前提下,請給出修改后的“職員”和“部門”關(guān)系模式。
試題一
閱讀以下說明和數(shù)據(jù)流圖,回答問題1~問題3。
【說明】
學(xué)生住宿服務(wù)系統(tǒng)幫助學(xué)生在就學(xué)的緘市內(nèi)找到所需的住房,系統(tǒng)對出租的房屋信息、房主信息、需要租房的學(xué)生信息以及學(xué)生和房主的會面信息進(jìn)行管理和維護(hù)。
房主信息包括姓名、地址、電話號碼以及系統(tǒng)分配的唯一身份標(biāo)識D.和密碼;房屋信息包括房屋地址、類型(單間/套間)、適合住宿的人數(shù)、房租、房主的ID以及現(xiàn)在是否可以出租(例如由于裝修原因,需等到裝修后才可出租或者房屋已被租出)。每當(dāng)房屋信息發(fā)生變化時,房主必須通知系統(tǒng),系統(tǒng)將更新房屋文件以便學(xué)生能夠獲得準(zhǔn)確的可租用房屋信息。房主向系統(tǒng)中加入可租用的房屋信息時,須交納一定的費(fèi)用,由系統(tǒng)自動給出費(fèi)用信息。房主可隨時更新房屋的各種屬性。
學(xué)生可通過系統(tǒng)查詢現(xiàn)有的可租用的房屋,但必須先在系統(tǒng)中注冊。學(xué)生信息包括姓名、現(xiàn)住址、電話號碼、出生日期、性別以及系統(tǒng)分配的唯一身份標(biāo)識(1D.和密碼。若學(xué)生希望租用某房屋,則需要發(fā)出租房請求,請求中包含房屋的詳細(xì)信息,系統(tǒng)將安排學(xué)生與房主會面的時間和地點,并將會面信息通知學(xué)生和房主,會面信息包括會面時間、地點以及會面雙方的基本信息,系統(tǒng)將記錄會面信息。
學(xué)生住宿服務(wù)系統(tǒng)的頂層圖如圖1-1所示;學(xué)生住宿服務(wù)系統(tǒng)的第0層DFD圖如圖 1-2所示,其中,加工3的細(xì)化圖如圖1-3所示。
【數(shù)據(jù)流圖1-1】
【問題1】
(1)數(shù)據(jù)流圖1-1缺少了一條數(shù)據(jù)流(在圖1-2中也未給出該數(shù)據(jù)流),請給出此數(shù)據(jù)流的起點和終點,并采用說明中的詞匯給出此數(shù)據(jù)流名。
(2)數(shù)據(jù)流圖1-2中缺少了與“查詢房屋”加工相關(guān)的數(shù)據(jù)流,請指出此數(shù)據(jù)流的起點和終點。
【問題2】
“安排會面”加工除需要寫入會面文件外,還需要訪問哪些文件?
【問題3】
請補(bǔ)齊下列數(shù)據(jù)字典條目:
登錄信息=學(xué)生ID+密碼
注冊信息=___________
試題三
閱讀以下說明和流程圖,從供選擇的答案中選出應(yīng)填入流程圖 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
一個印刷電路板的布線區(qū)域可分成n×m個方格,如圖3-1(a)所示,現(xiàn)在需要確定電路板中給定的兩個方格的中心點之間的最短布線方案。電路只能沿水平或垂直方向布線,如圖3-1(b)中虛線所示。為了避免線路相交,應(yīng)將已布過線的方格做封鎖標(biāo)記,其他線路不允許穿過被封鎖的方格。
設(shè)給定印刷電路板的起始方格x與目的方格y尚未布線,求這兩個方格間最短布線方案的基本思路是:從起始方格x開始,先考查距離起始方格距離為1的可達(dá)方格并用一個路徑長度值標(biāo)記,然后依次考查距離為2,3,…的可達(dá)方格,直到距離為k的某一個可達(dá)方格就是目標(biāo)方格y時為止,或者由于不存在從x到y(tǒng)的布線方案而終止。布線區(qū)域中的每一個方格與其相鄰的上、下、左、右四個方格之間的距離為1,依次沿下、右、上、左這四個方向考查,并用一個隊列記錄可達(dá)方格的位置。表3-1給出了沿這四個方向前進(jìn)1步時相對于當(dāng)前方格的相對偏移量。
例如,設(shè)印刷電路板的布線區(qū)域可劃分為一個6×8的方格陣列,如圖3-2(a)所示,其中陰影表示已封鎖方格。從起始方格x(位置[3,2],標(biāo)記為0)出發(fā),按照下、右、上、左的方向依次考查,所標(biāo)記的可達(dá)方格如圖3-2(a)所示,目標(biāo)方格為y(位置[4,7],標(biāo)記為10),相應(yīng)的最短布線路徑如圖3-2(b)虛線所示。 【圖3-2】
圖3-3和圖3-4所示的流程圖即利用上述思路,在電路板方格陣列中進(jìn)行標(biāo)記,圖【圖3-3】
中使用的主要符號如表3-2所示。在圖3-4中,設(shè)置電路板初始格局即將可布線方格置為數(shù)值-1、已布線方格(即封鎖方格)置為-9。設(shè)置方格陣列“圍墻”的目的是省略方格位置的邊界條件判定,方法是在四周附加方格,并將其標(biāo)記為-9(與封鎖標(biāo)記相同)。
供選擇的答案
A.Found≠true B.Found=true
C.T=EndPos D.Q.insert(T)
E.T←Q.delete() F.CurPos=EndPos
G.i≥4 H.CurPos←Q.delete()
I.Grid[T.row,T.col]=-1 J.Grid[T.row,T.col]≠-1
試題四
閱讀以下說明和C程序,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
假設(shè)需要將N個任務(wù)分配給N個工人同時去完成,每個人都能承擔(dān)這N個任務(wù),
但費(fèi)用不同。下面的程序用回溯法計算總費(fèi)用最小的一種工作分配方案,在該方案中,為每個人分配1個不同的任務(wù)。
程序中,N個任務(wù)從0開始依次編號,N個工人也從0開始依次編號,主要的變量說明如下:
c[i][j]:將任務(wù)i分配給工人j的費(fèi)用;
task[i]:值為0表示任務(wù)i未分配,值為j表示任務(wù)i分配給工人j;
worker[k]:值為0表示工人k未分配任務(wù),值為1表示工人k已分配任務(wù);
mincost:最小總費(fèi)用。
【C程序】
#include<stdio.h>
#define N 8 /*N表示任務(wù)數(shù)和工人數(shù)*/
int c[N][N];
unsigned int mincost=65535; /*設(shè)置min的初始值,大于可能的總費(fèi)用*/
int task[N],temp[N],workerIN];
void Plan(int k,unsigned Int cost)
{ int i;
if ( (1) &&cost<mincost){
mincost=cost;
for (i=0;i<N;i++) temp[i]:task[i];
}
else{
for(i=0;i<N;i++) /*分配任務(wù)k*/
if (worker[i]=0&& (2) ){
worker[i]=1; task[k]= (3) ;
Plan( (4) ,cost+c[k][i]);
(5) ; task[k]=0;
}/*if*/
}
}/*Plan*/
void main()
{int i,j;
for (i=0;i<N;i++) { /*設(shè)置每個任務(wù)由不同工人承擔(dān)時的費(fèi)用及全局?jǐn)?shù)組的初值*/
worker[i]=0;task[i]=0; temp[i]=0;
for(j=0;j<N;j++)
scanf ("%d",&c[i][j]);
}
Plan (0,0); /*從任務(wù)0開始分配*/
printf("\n最小費(fèi)用=%d\n",mincost);
for(i二0;i<N;i++)
pnntf("Task%d iB assigned toWorker%d\n",i,temp[i]);
}/*main*/
試題五
閱讀以下說明和C++代碼,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
某繪圖系統(tǒng)存在Point、Line、Square三種圖元,它們具有Shape接口,圖元的類圖關(guān)系如圖5-1所示。現(xiàn)要將Circle圖元加入此繪圖系統(tǒng)以實現(xiàn)功能擴(kuò)充。已知某第三方庫已經(jīng)提供了XCircle類,且完全滿足系統(tǒng)新增的Circle圖元所需的功能,但XCircle不是由Shape派生而來,它提供的接口不能被系統(tǒng)直接使用。代碼5-1既使用了XCircle又遵循了Shape規(guī)定的接口,既避免了從頭,開發(fā)一個新的Circle類,又可以不修改繪圖系統(tǒng)中已經(jīng)定義的接口。代碼5-2根據(jù)用戶指定的參數(shù)生成特定的圖元實例,并對之進(jìn)行顯示操作。
繪圖系統(tǒng)定義的接口與XCircle提供的顯示接口及其功能如下表所示:
【代碼5-1】
class Circle:public (1) {
pfivme:
(2) m_circle;
public:
void display(){
m_circle. (3) ;
}
};
【代碼5-2】
class Factory{
public:
(4) getShapeInstance (int type){ //生成特定類實例
switch (type){
case 0:rcturn new Point;
Case l:return new Rectangle;
case 2: return new Line;
case 3: return new Circle;
default: return NULL;
} void main (int argo, char *argv[]) {
if (argc!=2) {
cout << "error parameters !" << endl; return; inttype=atoi (argv[1]) ;
Factory factory;
Shape *s;
s = factory. (5) :
if (s==NULL) {
cout << "Error get the instance !" << endl;
return;
}
s->display () ;
(6) ;
return;