




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
軟件水平考試(中級)軟件設計師下午(應用技術)試題模擬試卷3(共9套)(共121題)軟件水平考試(中級)軟件設計師下午(應用技術)試題模擬試卷第1套一、必答題(本題共10題,每題1.0分,共10分。)[說明]一個新的音像商店準備向比較廣泛的人群出租錄像帶和光碟。該商店的管理決定在計算機系統的支持下來運作。音像商店在貨架上存放著題材廣泛的當前流行的電影庫。由于同一個電影片名可能有于不同的導演而有不同的版本,因此電影用電影代碼區分,而不用電影片名;同一個版本有多份拷貝,因此音像制品用一個唯一的編號標識。某個特定的電影可以存放在錄像帶或光碟上,錄像帶和光碟的租金不同。錄像帶要么是Beta格式要么是VHS格式;光碟為DVD格式,容量比較大,一張光碟可以存儲同一電影片名的不同版本。每個電影都有特定的租用期(用天表示),并帶有在租用期內的租金。音像商店必須能夠立即回答關于某個電影的庫存和有多少供租用的帶子或光碟。音像商店的店員負責定購音像、聯系客戶、音像上架,并對客戶的詢問給出答復。該系統采用面向對象方法開發,系統中的類以及類之間的關系用UML類圖表示,圖1-1是該系統的用例圖,圖1-2是該系統的類圖的一部分。[圖1-1]1、根據題意,給出“電影”類的主要屬性。標準答案:電影代碼、電影片名、導演知識點解析:暫無解析2、根據題意,指出圖1-1中缺失的用例。標準答案:(A)“定購音像”(B)“聯系客戶”知識點解析:暫無解析[說明]為了有效記錄交通事故情況,欲設計一個交通事故記錄系統。一輛汽車有一個唯一的“車牌號”,車主購買汽車時需要提供相關信息,包括身份證、姓名、年齡、性別、地址等。一個車主可以擁有多輛汽車,而一輛汽車只有一個車主。駕駛員不一定是車主,因此記錄交通事故時要記錄駕駛員身份證號,同時記錄事故發生時刻。圖2-1描繪了人、汽車、交通事故三個實體類型及實體間聯系的一個E-R圖。[圖2-1]對應的關系模式為:·人(身份證號,姓名,性別,年齡,地址)·汽車(車牌號,型號)·事故(車牌號,身份證號,時刻,損失,描述)·擁有(身份證號,車牌號)3、指出每種關系模式的主鍵。標準答案:人:身份證汽車:車牌號事故:(車牌號,身份證)擁有:車牌號知識點解析:暫無解析4、創建人表時,“身份證號”使用INTEGER數據類型,并且要求此列值不能為空、值惟一,姓名列不能為空。請在下列用于創建表人的SQL語句空缺處填入正確的內容。CREATETABLE人(身份證號INTEGER,姓名CHAR(20)(1),性別CHAR(1),年齡INTEGER,地址CHAR(20),(2))標準答案:(1)NOTNULL(2)PRIMARYKEY(身份證號)知識點解析:暫無解析5、請在下列SQL查詢語句空缺處填入正確的內容(1)查詢身份證號為“123456”的人作為駕駛員時所有的事故記錄。SELECT*FROM事故WHERE(1)(2)查詢身份證號為“123456”的車主所擁有的汽車的事故記錄。SELECT*FROM事故WHERE車牌號(2)(SELECT車牌號FROM(3)WHERE身份證號="123456")(3)查詢車牌號為“123456”汽車在車主是駕駛員時的事故記錄。SELECT*FROM事故WHERE(4)(SELECT*FROM(5)WHERE車牌號="123456"AND(6))標準答案:(1)身份證號="123456"(2)IN(3)擁有(4)EXISTS(5)擁有(6)擁有.身份證號=事故.身份證號知識點解析:暫無解析6、閱讀下列函數說明、圖和C代碼,回答問題[說明]假定用一個整型數組表示一個長整數,數組的每個元素存儲長整數的一位數字,則實際的長整數m表示為:m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]其中a[1]保存該長整數的位數,a[0]保存該長整數的符號:0表示正數、1表示負數。運算時先決定符號,再進行絕對值運算。對于絕對值相減情況,總是絕對值較大的減去絕對值較小的,以避免出現不夠減情況。注意,不考慮溢出情況,即數組足夠大。[函數]intcmp(int*LA,int*LB);/*比較長整數LA與LB的絕對值大小*//*若LA絕對值較大返回正值,LA較小返回負值,相等則返回0*/intADD(int*LA,int*LB,int*LC)/*計算長整數LA與LB的和,結果存儲于LC中*//*注意:正數與負數的和相當于正數與負數絕對值的差*//*數據有誤返回0,正常返回1*/{if(LA==NULL||LB==NULL||LC==NULL)return0;int*pA,*pB,i,N,carry,flag;flag=LA[0]+LB[0];switch(flag){/*根據參與運算的兩個數的符號進行不同的操作*/case0:case2:Lc[0]=LA[0];/*LA與LB同號,結果符號與LA(LB)相同*/pA=LA;pB=LB;(1);break;case1:/*LA與LB異號*//*比較兩者的絕對值大小,結果符號與較大者相同*/flag=(2);if(flag>0){/*LA較大*/LC[0]=LA[0];pA=LA;pB=LB;}elseif(flag<0)(/*LB較大*/LC[0]=LB[0];pA=LB;pB=LA;}else{/*LA與LB相等*/LC[0]=0;LC[1]=0;return1;}flag=-1;break;default:return0;break;}/*switch*//*絕對值相加減*//*注意對于減法pA指向較大數,pB指向較小數,不可能出現不夠減情況*/(3);N=LA[1]>LB[1]?LA[1]:LB[1];for(i=0;i<N;i++){if(i>=pA[1]){/*LA計算完畢*/carry+=flag*pB[i+2];}elseif(i>=pB[1]){/*LB計算完畢*/carry+=pA[i+2];}else{carry+=pA[i+2]+flag*pB[i+2];}LC[i+2]=carry%10;carry/=10;if((4)){/*需要借位,針對減法*/LC[i+2]+=10;carry--;}}/*for*/if((5)){/*最高進位,針對加法*/LC[i+2]=carry;i++;}if(LC[i+1]==0)i--;/*若最高位為零,針對減法*/LC[1]=i;return1;};/*ADD*/標準答案:flag=1cmp(LA,LB)carry=0LC[i+2]<0carry知識點解析:暫無解析7、閱讀下列函數說明、圖和C代碼,回答問題[說明]在進行文法分析的時候,通常需要檢測一個單詞是否在我們的單詞列表里。為了提高查找和定位的速度,通常都要畫出與單詞列表所對應的單詞查找樹。程序構造一棵二叉排序樹,每個節點存儲一個單詞,按字典序列,較小的在左子樹,較大的在右子樹。函數中使用的預定義符號如下:typedefstructTreeNode{/*二叉排序樹節點*/char*word;structTreeNode*left,*right;}BNODE;[函數]intgetWord(FILE*fpt,char*word)/*從文件fpt中讀取單詞到word中,到達文件結束時返回0*/{charc;c=fgetc(fpt);if(c==EOF)return0;/*跳過單詞間的非字母字符*/while(!(tolower(c)>=’a’&&tolower(c)<=’z’)){c=fgetc(fpt);if(c==EOF)return0;}/*不區分大小寫*/while(tolower(c)>=’a’&&tolower(c)<=’z’){*word++=c;c=fqetc(fpt);}*word=’\0’;return1;}voidBTree(BNODE**t,char*word){BNODE*ptr,*p;intcompres;p=NITLL;(1);while(ptr){compres=strcmp(word,(2));if(!compres){return;}else{(3);ptr=compres>0?ptr->right:ptr->left;}}ptr=(BNODE*)malloc(sizeofptr);ptr->left=ptr->right=NULL;ptr->word=(char*)malloc(strlen(word)+1);strcpy(ptr->word,word);if(p==NULL){(4);}elseif(compres>0){p->right=ptr;}else{p->left=ptr;}}intmain(){FILE*fpt;charword[40];BNODE*root=NULL;if((fpt=fopen("text.in","r"))==NULL){printf("不能打開文件text.in!\n");return1;}while(getWord(fpt,word)==1){BTree(5);}fclose(fpt);return0;}標準答案:ptr=*tptr->wordp=ptr*t=ptr&root,word知識點解析:暫無解析8、閱讀下列函數說明和C++代碼,回答問題[說明]任何一種程序都是為了解決問題而撰寫的,解決問題時需要實現一些特定的運算法則。在策略(Strategy)模式下,可以更換實現算法的部分而不留痕跡,切換整個算法,簡化改為采用其他方法來解決同樣問題。以下是一個“剪刀石頭布”游戲。猜拳時的“策略”有2種方法:第一種是“猜贏后繼續出同樣的招式”(WinningStrategy),第二種是“從上一次出的招式中,以概率分配方式求出下一個招式的幾率”(ProbStrategy)。程序中定義了Hand類表示猜拳時的“手勢”,類內部以0(石頭)、1(剪刀)、2(布)來表示。Hand類的實例只會產生3個。以下是C++語言實現,能夠正確編譯通過。[C++代碼]classHand{private:inthandvalue;staticHand*hand0;staticHand*hand1;staticHand*hand2;(1);Hand(inthandvalue){this->handvalue=handvalue;}public:(2)Hand*getHand(inthandvalue){/*省略具體實現*/}};Hand*Hand::hand0=newHand(0);Hand*Hand::hand1=newHand(1);Hand*Hand::hand2=newHand(2);classStrategy{public:(3)Hand*nextHand()=0;};classWinningStrategy:publicStrategy{private:boolwon;Hand*prevHand;public:winningStrategy(){won=false;}Hand*nextHand(){if(!won){prevHand=Hand::getHand(rand()%3);}returnprevHand;}};classprobstrategy:publicStrategy{public:Hand*nextHand(){inthandvalue=0;/*省略具體實現*/returnHand::getHand(handvalue);}};classPlayer{private:stringname;Strategy*strategy;public:Player(stringname,(4)strategy){this->name=name;this->strategy=strategy;}Hand*nextHand()(//向戰略請示手勢return(5);}};標準答案:(1)privatestaticvirtualStrategy*strategy->nextHand()知識點解析:Hand類要保證只產生3個實例,就要求不能隨便生成Hand類,因此其構造方法需要是private型的,故空(1)應填private。先看空(3),由后面的“=0”易判知nexthand()函數是純虛函數,故空(3)應填virtual。再來看空(2),由對getHand()方法的調用方式Hand::getHand(rand()%3)及Hand::getHand(handvalue),可知該方法是類Hand的靜態方法,故空(2)應填static。由語句this->strategy=strategy;可知:this->strategy與strategy是同數據類型,this表示自身指針,而this->strategy是Strategy*類型,故空(4)應填Strategy*,注意是指針。方法nextHand()是“向戰略請示手勢”,取得手勢是通過其所采用的“策略”實現的,故空(5)應填strategy->nextHand()。注意指針寫法。9、閱讀以下說明和Java代碼,回答問題[說明]任何一種程序都是為了解決問題而撰寫的,解決問題時需要實現一些特定的運算法則。在策略(Strategy)模式下,可以更換實現算法的部分而不留痕跡,切換整個算法,簡化改為采用其他方法來解決同樣問題。以下是一個“剪刀石頭布”游戲。猜拳時的“策略”有2種方法:第一種是“猜贏后繼續出同樣的招式”(WinningStrategy),第二種是“從上一次出的招式種,以概率分配方式求出下一個招式的幾率”(ProbStrategy)。程序中定義了Hand類表示猜拳時的“手勢”,類內部以0(石頭)、1(剪刀)、2(布)來表示。Hand類的實例只會產生3個。以下是Java語言實現,省略了不相關屬性及方法,方法實現體亦有所省略,能夠正確編譯通過。[Java代碼]//Hand.java文件publicclassHand{publicstaticfinalintHANDVALUE_GUU=0;//石頭publicstaticfinalintHANDVALUE_CHO=1;//剪刀publicstaticfinalintHANDVALUE_PAA=2;//布publicstaticfinalHand[]hand={newHand(HANDVALUE_GUU),newHand(HANDVALUE_CHO),newHand(HANDVALUE_PAA),};privateinthandvalue;(1)Hand(inthandvalue){this.handvalue=handvalue;}public(2)HandgetHand(inthandvalue)(//從值取得對象實例returnhand[handvalue];}}//Strategy.java文件publicinterfaceStrategy{public(3)HandnextHand();}//ProbStrategy.java文件importjava.util.Random;publicclassProbStrategyimplementsStrategy{publicHandnextHand(){inthandvalue=0;/*省略具體實現*/returnHand.getHand(handvalue);}}//WinningStrategy.java文件importjava.util.Random;publicclassWinningStrategyimplementsStrategy{/*省略了不相關屬性*/publicHandnextHand(){if(!won){prevHand=Hand.getHand(random.nextInt(3));}returnprevHand;}}//Player.java文件publicclassPlayer{privateStringname;privateStrategystrategy;publicPlayer(Stringname,(4)strategy){=name;this.strategy=strategy;}publicHandnextHand(){//向戰略請示手勢return(5);}}標準答案:privatestaticabstractStrategystrategy.nextHand()知識點解析:暫無解析10、閱讀以下函數說明和C代碼,回答問題[說明]任何一種程序都是為了解決問題而撰寫的,解決問題時需要實現一些特定的運算法則。在策略(Strategy)模式下,可以更換實現算法的部分而不留痕跡,切換整個算法,簡化改為采用其他方法來解決同樣問題。以下是一個“剪刀石頭布”游戲。猜拳時的“策略”有2種方法:第一種是“猜贏后繼續出同樣的招式”(WinningStrategy),第二種是“從上一次出的招式種,以概率分配方式求出下一個招式的幾率”(ProbStrategy)。程序中定義了Hand類表示猜拳時的“手勢”,類內部以0(石頭)、1(剪刀)、2(布)來表示。Hand類的實例只會產生3個。以下是C語言實現,省略了不相關屬性及方法,方法實現體亦有所省略,能夠正確編譯通過。[C代碼]typedef(1)(*funl)();enumHandValue{HANDVALUE_GUU=0,HANDVALUE_CHO=1,HANDVALUE_PAA=2};//手勢可取值,依次為“石頭”、“剪刀”、“布”//其大小順序是循環相克的,即:石頭贏剪刀,剪刀贏布,布贏石頭boolwon;structHand*WSprevHand;structHand{//手勢enumHandValuehandvalue;}hand[3]={HANDVALUE_GUU,HANDVALUE_CHO,HANDVALUE_PAA};intfight(structHand*h1,structHand*h2)//比較h1和h2。h1代表的手勢較大時返回1,h1較小時返回-1,相等時返回0//{if(h1->handvalue==h2->handvalue){return0;}elseif((h1->handvalue+1)%(2)==h2>handvalue){return1;}else{return-1;}}structHand*getHand(inthandvalue){//依據手勢代表的值取得手勢,若handvalue不合法,返回NULLswitch(handvalue){case0:return&hand[0];break;case1:return&hand[1];bteak;case2;return&hand[2];break;}return(3);}structStrategy{//策略funlnextHand;//下一個手勢};structHand*WSnextHand(){if(!won){PSprevHand=getHand(rand()%3);}returnPSprevHand;}structPlayer{charname[20];(4)strategy;//策略intwincount;intlosecount;intgamecount;};voidmain(){StrategyWS;WS.nextHand=WSnextHand;WSpreVHand=NULL;structPlayerWSplayer;(5)(WS,"ww");WSplayer.wincount=0;WSplayer.losecount=0;WSplayer.gamecount=0;WSplayer.strategy=&WS;}標準答案:structHand*3NULLstructStrategy*strcpy知識點解析:條件(h1->handvalue+1)%(2)==h2->handvalue是指h1大于h2,根據手勢間大小順序:石頭(0)贏剪刀(1),剪刀(1)贏布(2),布(2)贏石頭(0)??傻脩?。例如h1為布(2),h2為石頭(0)時,h1->handvalue+1)%(2)的值應為0。所以空(2)填3。handvalue取值為:0、1、2,由注釋“若handbalue不合法,返回NULL”可得空(3)應填NULL。先看空(5)。結構體WSplayer的strategy是字符數組,對字符數組的賦值需要調用strcpy庫函數。故空(5)應填strcpy。來看空(4)。由語句“WSplayer.strategy=&WS;”及“StrategyWS;”可知,結構體WSplayer的strategy應該是Strategy結構體指針。故空(4)應填structStrategy*。最后來看空(1)。這明顯是一個函數指針,函數指針的定義:函數返回類型函數指針變量名(參數列表)。故空(1)是該函數的函數返回類型。用到該定義的是在結構體Strategy中,“funlnextHand;//下一個手勢”,此處只是一個聲明,不能判斷其返回類型,真正應用的是語句“WS.nextHand=WSnextHand;”,而其右端的函數原型為structHand*WSnextHand(),因此該函數指針的返回類型應為structHand*。故空(1)應填structHand*。軟件水平考試(中級)軟件設計師下午(應用技術)試題模擬試卷第2套一、必答題(本題共16題,每題1.0分,共16分。)閱讀以下某建賬軟件的技術說明和數據流圖,根據要求回答問題1~問題6。[說明]某商業銀行已有一套基于客戶機/服務器(C/S)模式的儲蓄系統X和一套建賬軟件Y。建賬軟件Y主要用于將儲蓄所手工處理的原始數據轉換為系統X所需的數據格式。該建賬軟件具有以下功能。(1)分戶賬錄入:手工辦理業務時建立的每個分戶賬數據均由初錄員和復錄員分別錄入,以確保數據的正確性。(2)初錄/復錄比對:將初錄員和復錄員錄入的數據進行一一比較,并標記兩套數據是否一致。(3)數據確認:當上述兩套數據完全一致后,將其中任一套作為最終進入系統X的原始數據。(4)匯總核對和打?。簩涍^確認的數據進行匯總,并和會計賬目中的相關數據進行核對,以確保數據的整體正確性,并打印輸出經過確認的數據,為以后核查可能的錯誤提供依據。該建賬軟件需要打印的分戶賬清單樣式如表3-8所示。(5)數據轉換:將經過確認的數據轉換為儲蓄系統X需要的中間格式數據。(6)數據清除:為加快初錄和復錄的處理速度,在數據確認之后,可以有選擇地清除初錄員和復錄員錄入的數據。該軟件的數據流圖如圖3-17~圖3-19所示,圖中部分數據流數據文件的格式如下。初錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當前余額+性質復錄分戶賬=儲蓄所號+賬號+戶名+開戶日+開戶金額+當前余額+性質會計賬目=儲蓄所號+總戶數+總余額操作結果=初錄操作結果+比對操作結果+復錄操作結果1、不考慮數據確認處理(加工2),請指出圖3-17~圖3-19數據流圖中可能存在的錯誤。標準答案:這是一道要求考生掌握分層數據流圖輸入/輸出平衡原則的分析題。本題的解答思路如下。每個加工必須既有輸入數據流,又有輸出數據流。但一個加工的輸入數據流不要與輸出數據流同名。在整套數據流圖中,每個數據存儲必須既有讀的數據流,也有寫的數據流。但在某張子圖中,可能只有讀沒有寫,或者是只有寫而沒有讀。在數據流圖(DFD)中,加工處理是對輸入數據進行相關處理并生成輸出數據的過程,因此,對于DFD中的每個加工處理至少要有一個輸入數據流和一個輸出數據流。根據這一原則仔細檢查圖3-17~圖3-19可知,在建賬軟件第0層數據流圖(見圖3-18)中,數據確認處理(加工2)和數據清除處理(加工6)只有輸出數據流而沒有輸入數據,這是圖3-18中存在的錯誤之處。由于題目中已說明“不考慮數據確認處理(加工2)”,因此,本試題的正確答案是“在建賬軟件第0層數據流圖(圖3-18)中,數據清除處理(加工6)沒有輸入數據流”。知識點解析:暫無解析2、請使用[說明]中的詞匯,給出數據確認處理所需的數據流,在圖3-19建賬軟件第1層數據流圖中的全部可選起點。標準答案:這也是一道要求考生掌握分層數據流圖輸入/輸出平衡原則的綜合分析題。本題的解答思路如下。在本試題說明中關于“數據確認”功能的描述——“數據確認:當上述兩套數據(即初錄員和復錄員錄入的數據)完全一致后,將其中任一套作為最終進入系統X的原始數據”中,“進入系統X”其對應于建賬軟件第0層數據流圖(見圖3-18)中“數據確認”處理。由此可知,在圖3-19建賬軟件第1層數據流圖中,無論是“初錄數據”數據存儲還是“復錄數據”數據存儲都可作為“數據確認”處理的數據源。知識點解析:暫無解析3、請使用[說明]中數據字典條目定義形式,將以下(1)和(2)空缺處的內容填寫完整。初錄數據=(1)復錄數據=(2)標準答案:由題干中給出的關鍵信息“分戶賬錄入:手工辦理業務時建立的每個分戶賬數據均由初錄員和復錄員分別錄入……”和“初錄/復錄比對:將初錄員和復錄員錄入的數據進行一一比較,并標記兩套數據是否一致”可知,初錄員錄入的“初錄數據”中應包含“初錄分戶賬”和“一致性標志”,而復錄員錄入的“復錄數據”中應包含“復錄分戶賬”和“一致性標志”。然后將它們表達成[說明]中數據字典條目定義形式如下。初錄數據=初錄分戶賬+一致性標志(或初錄數據=手工分戶賬+一致性標志)復錄數據=復錄分戶賬+一致性標志(或復錄數據=手工分戶賬+一致性標志)知識點解析:暫無解析4、請使用[說明]中數據字典條目定義形式,給出圖3-18中的“手工分戶賬”數據流和圖3-19中的“初錄分戶賬”和“復錄分戶賬”的關系。標準答案:這是一道要求考生掌握分層數據流圖中父圖與子圖平衡原則的綜合分析題。本題的解答思路如下。任何一個數據流子圖必須與它上一層父圖的某個加工相對應,即父圖中某加工的輸入/輸出數據流必須與它的子圖的輸入/輸出數據流在數量和名字上相同。但如果父圖中的數據流是由子圖中的幾個數據流合并而成,即子圖中組成這些數據流的數據項全體正好是父圖中的這一個數據流,這種情況下也認為是平衡的。在建賬軟件第0層數據流圖(見圖3-18)中,“手工分戶賬”數據流是“1錄入比對”處理的輸入數據流,而“1錄入比對”處理包含了建賬軟件第1層數據流圖(見圖3-19)中的“1.1初錄”處理、“1.2復錄”處理和“1.3比對”處理。在圖3-19中,“1.1初錄”處理的輸入數據流是“初錄分戶賬”,“1.2復錄”處理的輸入數據流是“復錄分戶賬”,因此,“手工分戶賬”數據流包含了“初錄分戶賬”和“復錄分戶賬”,將其表達成本試題[說明]所示例的數據字典條目定義形式如下。手工分戶賬=初錄分戶賬+復錄分戶賬知識點解析:暫無解析5、加工1(錄入比對處理)除能夠檢查出初錄數據和復錄數據不一致之外,還應檢測的錯誤有(3)。A.顯示器無法顯示B.輸入的無效字符C.輸入數據的格式D.輸入數據的界限E.打印機卡紙F.重復錄入同一賬戶G.輸入的半個漢字H.匯總數據與會計賬目不符標準答案:由[問題3]要點解析可知,建賬軟件第0層數據流圖(見圖3-18)中“1錄入比對”處理包含了第1層數據流圖(圖3-19)中的“1.1初錄”、“1.2復錄”和“1.3比對”這3個處理。結合題干給出的關鍵信息“初錄/復錄比對:將初錄員和復錄員錄入的數據進行一一比較,并標記兩套數據是否一致”和常識可知,加工1(錄入比對處理)除能夠檢查出初錄數據和復錄數據不一致之外,還應檢測的錯誤有①輸入的無效字符(如在“賬號”數據項中輸入了小數點、$和@等其他字符)、②輸入數據的格式(如“賬號”數據項規定每4位數字后加一位半角空格字符等)、③輸入數據的界限(例如“開戶日”的數值是否超過了當前日期等)、④輸入的半個漢字(在某些運行環境中(或輸入法)中可能存在這種情況)和⑤(初錄員/復錄員)重復錄入同一賬戶等。由題干給出的關鍵信息“匯總核對和打?。簩涍^確認的數據進行匯總,并和會計賬目中的相關數據進行核對……”可知,檢查匯總數據和會計賬目是否相符是在圖3-18中處理“3匯總核對”所完成的功能;數據打印是在圖3-18中處理“4打印清單”所完成的功能。同時根據常識可知,“1錄入比對”處理通常未涉及檢查“顯示器無法顯示”和“打印機卡紙”等硬件故障的功能。知識點解析:暫無解析6、打印分戶賬清單(表3-8)時,必須以“(4)”作為關鍵字進行排序才能滿足系統需求。A.儲蓄所B.賬號C.開戶日D.戶名E.其他分戶賬數據F.總戶數和總余額標準答案:仔細閱讀分戶賬清單樣式表(見表3-8)可知,表中數據是按照“儲蓄所”這一數據字段進行分組的,每一分組中均通過“共XXXX戶,總余額YYYYYYY.YY元”格式給出了儲蓄所的統計數據。這就要求在數據查詢/打印操作中,至少要按照“儲蓄所”這一數據字段進行排序才能實現。在實際應用中,在軟件實現時也可以按照“賬號”和“開戶日”等數據字段進行排序,但從表3-8數據格式中無法確定是否需要這些排序工作。知識點解析:暫無解析閱讀下列說明,根據要求回答問題1~問題3。[說明]某地區舉行籃球比賽,需要開發一個比賽信息管理系統來記錄比賽的相關信息。[需求分析結果]1.登記參賽球隊的信息。記錄球隊的名稱、代表地區、成立時間等信息。系統記錄球隊的每個隊員的姓名、年齡、身高、體重等信息。每個球隊有一個教練負責管理球隊,一個教練僅負責一個球隊。系統記錄教練的姓名、年齡等信息。2.安排球隊的訓練信息。比賽組織者為球隊提供了若干個場地,供球隊進行適應性訓練。系統記錄現有的場地信息,包括:場地名稱、場地規模、位置等信息。系統可為每個球隊安排不同的訓練場地,如表3-9所示。系統記錄訓練場地安排的信息。3.安排比賽。該賽事聘請有專職裁判,每場比賽只安排一個裁判。系統記錄裁判的姓名、年齡、級別等信息。系統按照一定的規則,首先分組,然后根據球隊、場地和裁判情況,安排比賽(每場比賽的對陣雙方分別稱為甲隊和乙隊)。記錄參賽球隊、比賽時間、比分、場地名稱等信息,如表3-10所示。4.所有球員、教練和裁判可能出現重名情況。[概念模型設計]根據需求階段收集的信息,設計的實體聯系圖和關系模式(不完整)如下。1.實體聯系圖(圖3-20)2.關系模式教練(教練編號,姓名,年齡)隊員(隊員編號,姓名,年齡,身高,體重,(a)球隊(球隊名稱,代表地區,成立時間,(b)場地(場地名稱,場地規模,位置)訓練記錄((c))裁判(裁判編號,姓名,年齡,級別)比賽記錄((d))7、根據問題描述,補充4個聯系,完善圖3-20的實體聯系圖。標準答案:本題考查讀者對數據庫概念結構設計及向邏輯結構轉換的掌握情況。此類題目要求認真閱讀題目對現實問題的描述,經過分類、聚集、概括等方法,從中確定實體及其聯系。題目已經給出了4個實體,需要根據需求描述,給出實體間的聯系。由“每個球隊有一個教練負責管理球隊,一個教練僅負責一個球隊?!敝蜿犈c教練間為1:1聯系;球隊與隊員之間應為1:N聯系;多個球隊使用多個訓練場地,球隊與場地之間為M:N聯系;比賽是球隊、場地與裁判之間的聯系,一個球隊會與同組的其他多個隊之間比賽,有多個場地和裁決,一位裁判會對多場比賽判罰,一個場地會有多場比賽,涉及多個球隊和裁判,因此球隊、場地與裁判之間的比賽關系為M:N:P聯系。補充完整的實體聯系圖如圖3-29所示。知識點解析:暫無解析8、根據你的實體聯系圖,完成關系模式,并給出訓練記錄和比賽記錄關系模式的主鍵和外鍵。標準答案:根據補充后的E-R圖,球隊與球員之間的1:N聯系應通過將1端實體(球員)的主碼(球隊名稱)加入到N端實體(球員)對應的關系中來表達。這類聯系也可通過獨立的一個關系來表達,如球隊-球員(球隊名稱,隊員編號),這樣會對查詢增加多余的連接操作,因此一般不采用這種方法。同樣,球隊與教練之間的1:1聯系也應通過將一方的主碼增加到另一方實體對應的關系中,來表達聯系。訓練和比賽為多對多聯系,只能獨立成一個關系模式,取該聯系相關聯的各實體的碼及聯系自有的屬性構成。如比分和分組應該是比賽的屬性,再加上球隊、裁判、場地的碼,即構成“比賽記錄”的關系模式。比賽記錄關系模式的主鍵可以是“場地名稱,比賽時間”,也可以是“裁判,比賽時間”,或者是“甲隊,比賽時間”,再或者是“乙隊,比賽時間”。其外鍵是“甲隊,乙隊,場地名稱,裁判”。同理,訓練是球隊和場地的多對多聯系,訓練開始時間和結束時間為訓練的屬性,加上球隊的碼和場地的碼,構成“訓練記錄”關系模式。訓練記錄關系模式的主鍵可以是“球隊,開始時間”,也可以是“場地名稱,開始時間”,或者是“球隊,結束時間”,再或者是“場地名稱,結束時間”。其外鍵是“球隊名稱,場地名稱”。知識點解析:暫無解析9、如果考慮記錄一些特別資深的熱心球迷的情況,每個熱心球迷可能支持多個球隊。熱心球迷的基本信息包括:姓名、住址和喜歡的俱樂部等。根據這一要求修改圖3-20的實體聯系圖,給出修改后的關系模式。標準答案:球迷與球隊之間為多對多聯系,需新增球迷實體和球迷與球隊之間的支持聯系,如圖3-30所示。新增的關系模式如下。熱心球迷(球迷編號,姓名,住址,俱樂部)支持球隊(球迷編號,球隊)知識點解析:暫無解析閱讀以下技術說明,根據要求回答問題1~問題4。[說明]某汽車停車場欲建立一個信息系統,已經調查到的需求如下。1.在停車場的入口和出口分別安裝一個自動欄桿、一臺停車卡打印機、一臺讀卡器和一個車輛通過傳感器等,其示意圖見如圖3-21所示。2.當汽車到達入口時,駕駛員按下停車卡打印機的按鈕獲取停車卡。當駕駛員拿走停車卡后,系統命令欄桿自動抬起;汽車通過入口后,入口處的傳感器通知系統發出命令,欄桿自動放下。3.在停車場內分布著若干個付款機器。駕駛員將在入口處獲取的停車卡插入付款機器,并繳納停車費。付清停車費之后,將獲得一張出場卡,用于離開停車場。4.當汽車到達出口時,駕駛員將出場卡插入出口處的讀卡器。如果這張卡是有效的,系統命令欄桿自動抬起;汽車通過出口后,出口傳感器通知系統發出命令,欄桿自動放下。若這張卡是無效的,系統不發出欄桿抬起命令而發出告警信號。5.系統自動記錄停車場內空閑的停車位的數量。若停車場當前沒有車位,系統將在入口處顯示“車位已滿”信息。這時,停車卡打印機將不再出卡,只允許場內汽車出場。根據上述描述,采用面向對象方法對其進行分析與設計,得到如表3-11所示的類/用例/狀態列表,如圖3-22所示的用例圖,如圖3-23所示的初始類圖以及如圖3-24所示的描述入口自動欄桿行為的UML狀態圖。10、根據說明中的描述,使用表3-11給出的用例名稱,給出圖3-22中U1、U2和U3所對應的用例。標準答案:表3-11中給出了Carentry、Carexit、ReportStatistics、Carentrywhenfull等4個用例。在這4個用例中,兩個用例表示汽車進入停車場,一個用例表示汽車退出停車場,另一個用例表示記錄停車場相關信息。經分析得出,前3個用例的參與者都是駕駛員,因此U1、U2和U3對應進入和退出停車場。U1和U3之間存在擴展關系,而用例之間的延伸關系用于對被用戶看作是可選系統行為的用例的一部分建模。通過這種方式,可以把可選行為從必需的行為中分離出來。Carentrywhenfull和Carentry之間就可以使用extend關系進行建模。知識點解析:暫無解析11、根據說明中的描述,使用表3-11給出的類的名稱,給出圖3-23中的A~D所對應的類。標準答案:在UML類圖中,類與類之間的5種關系從弱到強依次為:依賴(Dependency),關聯(Association),聚合(Aggregation),組合(Composition)和繼承(Inheritance)。因此依賴關系最弱,繼承表示類與類之間關系最強。依賴(Dependency)關系是類與類之間的連接,并且依賴總是單向的,其標準UML圖形表示為表示其相聯的兩個類之間存在關聯關系,用于描述兩個概念上位于相同級別的類的實例之間存在的某種語義上的聯系。聚合關系是關聯關系的一種特例,代表兩個類之間的整體/局部關系,其標準UML圖形表示為表示其相聯的兩個類之間存在繼承關系。子類繼承父類的行為與含義,子類還可以增加或者覆蓋父類的行為。子類可以出現在父類出現的任何位置。依題意可以判斷Barrier、EntryBarrier和ExitBarrier之間存在繼承關系,而在圖3-23類圖中所表示的繼承關系的部分只有一處,因此這3個類分別對應于圖3-23中的類B、類C和類D,而剩下的類A只有選擇類CarPark了。知識點解析:暫無解析12、根據說明中的描述,使用表3-11給出的狀態名稱,給出圖3-24中S1~S4所對應的狀態。標準答案:在圖3-24狀態圖中,Idle表示有空閑車位,Disable表示沒有空閑車位,因此在其之間存在雙向的狀態遷移,即狀態圖上的狀態S1為Idle狀態。當停車場存在空閑車位時,汽車請求進入停車場,根據說明描述“當汽車到達入口時,駕駛員按下停車卡打印機的按鈕獲取停車卡”,可知在該動作正對應于狀態圖上的S1和狀態S2之間的遷移,因此,狀態S2表示的含義應該是按下按鈕后狀態,此時,駕駛員等待打印停車卡,所以狀態S2為AwaitTicketTake。同理可分析出狀態S3和狀態S4。知識點解析:暫無解析13、簡要解釋圖3-22中用例U1和U3之間的extend關系的內涵。標準答案:在用例的執行過程中,可能會在不同的流程分支中選擇執行,也可能會出現異常行為。此時,可以將異常行為或可選分支抽象成一個單獨的擴展用例,它與主用例之間形成“擴展(extend)”關系。知識點解析:暫無解析閱讀下列算法說明和流程圖,根據要求回答問題1~問題3。[說明]某機器上需要處理n個作業job1,job2,…,jobn,其中:(1)每個作業jobi(1≤i≤n)的編號為i,jobi有一個收益值P[i]和最后期限值d[i];(2)機器在一個時刻只能處理一個作業,而且每個作業需要一個單位時間進行處理,一旦作業開始就不可中斷,每個作業的最后期限值為單位時間的正整數倍;(3)job1~jobn的收益值呈非遞增順序排列,即p[1]≥p[2]≥…≥p[n];(4)如果作業jobi在其期限之內完成,則獲得收益p[i];如果在其期限之后完成,則沒有收益。為獲得較高的收益,采用貪心策略求解在期限之內完成的作業序列。圖3-25是基于貪心策略求解該問題的流程圖。(1)整型數組J[]有n個存儲單元,變量k表示在期限之內完成的作業數,J[1..k]存儲所有能夠在期限內完成的作業編號,數組J[1..k)里的作業按其最后期限非遞減排序,即d[J[1]]≤…≤d[J[k]]。(2)為了便于在數組J中加入作業,增加一個虛擬作業job0,并令d[0]=0,J[0]=0。(3)算法大致思想是:先將作業job1的編號1放入J[1],然后,依次對每個作業jobi(2≤i≤n)進行判定,看其能否插入到數組J中。若能,則將其編號插入到數組J的適當位置,并保證J中作業按其最后期限非遞減排列;否則不插入。jobi能插入數組J的充要條件是:jobi和數組J中已有作業均能在其期限之內完成。(4)流程圖中的主要變量說明如下。i:循環控制變量,表示作業的編號;k:表示在期限內完成的作業數;r:若jobi能插入數組J,則其在數組J中的位置為r+1;q:循環控制變量,用于移動數組J中的元素。14、請將圖3-25中的(1)~(3)空缺處的內容填寫完整。標準答案:這是一道考查貪心算法的流程圖分析的試題。(1)空缺處表示第2個作業到第n個作業的主循環的條件判斷,由于i是循環控制變量,因此(1)空缺處所填寫的內容是i<=h。注意到題干中給出的關鍵信息“J[1..k)存儲所有能夠在期限內完成的作業編號,數組J[1..k]里的作業按其最后期限非遞減排序,即”。換言之,數組J中的作業J[i](1≤i≤k)是在其期限之前完成的作業,且。由圖3-25給出的算法流程圖可知,主循環內嵌套了兩個循環,第1個循環判斷當前考慮的作業i應該插入到J中的什么位置,用循環控制變量r表示當前考慮的J中的作業。使用虛擬作業J[0],允許作業較方便地插入到第1個位置。為了保證J中的作業期限按升序排序,作業J[r]若比作業i的期限大,則循環控制變量r要自減,因此(2)空缺處所填寫的內容是d[J[r]]>d[i]。d[J[r]]與r的關系只有兩種:d[J[r]]>r,表示還可能在J[1]與J[r]之間插入作業“d[J[r]]=r,表示不可以在J[1]~J[r]之間插入作業i。d[J[r]]<r的情況不會存在,因為J中若有r個作業,那么最后一個作業的期限不可能小于r。當作業i大于等于作業J[r]的期限時,此時找到了作業i插入的位置,即r+1。第2個循環的作用是將作業J[r+1]……J[k]依次往后移動,此處用插入排序算法的思想。最后把作業i插入到J[r+1]處,因此(3)空缺處所填寫的內容是J[r+1]=i(或J[q+1]=i)。知識點解析:暫無解析15、假設有6個作業job1,job2,…,job6;完成作業的收益數組p=(p[1],p[2],p[3],p[4],p[5],p[6])=(90,80,50,30,20,10);每個作業的處理期限數組d=(d[1],d[2],d[3],d[4],d[5],d[6])=(1,2,1,3,4,3)。請應用試題中描述的貪心策略算法,給出在期限之內處理的作業編號序列(4)(按作業處理的順序給出),得到的總收益為(5)。標準答案:這是一道考查貪心算法實例應用的分析題。6個作業job1,job2,…,job6的收益已經按降序排列,根據圖3-25的算法流程,將作業1,2,4和5放入數組J中,并得到總收益為220,具體分析過程見表3-13。知識點解析:暫無解析16、對于本試題的作業處理問題,用圖3-25的貪心算法能否求得最高收益?(6)。(能或不能)用貪心算法求解任意給定問題時,是否一定能得到最優解?(7)。(能或不能)標準答案:這是一道判斷貪心算法是否能求得最優解的應用分析題。對于本試題的作業處理問題,用圖3-25的貪心算法策略,能求得最優解(即能求得最高收益)。但不是所有的問題都能通過貪心策略來求得最優解,一個典型的例子是0—1背包問題。例如,有3件物品,背包可容納50磅重的東西,每件物品的詳細信息如表3-14所示,問如何裝包使得其價值最大?如果按貪心策略求解該問題,優先選擇單位價值最大的物品,則先選擇物品R,然后選擇物品S。由于此時背包容量還剩下50-10-20=20,不足以容納物品T,故總價值為60+100=160美元。但若選擇物品S和物品T,容量總和為20+30,小于等于總容量50,得到總價值為100+120=220美元,會得到更優解。此時用貪心策略不能得到最優解。知識點解析:暫無解析二、選答題(本題共3題,每題1.0分,共3分。)17、閱讀以下函數說明、圖和C程序代碼,將C程序段中(1)~(6)空缺處的語句填寫完整。[說明]散列文件的存儲單位稱為桶(BUCKET)。假如一個桶能存放m個記錄,當桶中已有m個同義詞(散列函數值相同)的記錄時,存放第m+1個同義詞會發生“溢出”。此時需要將第m+1個同義詞存放到另一個稱為“溢出桶”的桶中。相對地,稱存放前m個同義詞的桶為“基桶”。溢出桶和基桶大小相同,用指針鏈接。查找指定元素記錄時,首先在基桶中查找。若找到,則成功返回,否則沿指針到溢出桶中進行查找。例如,設散列函數為Hash(Key)=Keymod7,記錄的關鍵字序列為15,14,21,87,96,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件內容如圖2-27所示。為簡化起見,散列文件的存儲單位以內存單元表示。函數InsertToHashTable(intNewElemKey)的功能是:若新元素NewElemKey正確插入散列文件中,則返回值0;否則返回值-1。采用的散列函數為Hash(NewElemKey)=NewElemKey%P,其中P設定基桶的數目。函數中使用的預定義符號如下。標準答案:這是一道要求讀者掌握如何在散列文件中插入一個新的數據元素的編程題。本題的解答思路如下。在散列文件中插入一個新的數據元素的基本思路是,首先將要插入的元素代入到散列函數中,從而計算出該元素的散列地址。然后按照散列地址,在基桶中查找空閑單元,若找到,則將元素插入,若基桶已滿,則在溢出桶中查找空閑單元。若溢出桶中也查找不到,則申請新的溢出桶,然后將元素存入。在散列文件中查找一個元素的基本思路是,查找指定元素記錄時,首先在基桶中查找,若找到,則成功返回,否則沿指針到溢出桶中進行查找。在本試題中,將元素存儲在預先設定的基桶或根據需要申請的溢出桶中,只要基桶中有空閑單元,就將新元素NewElemkey插入在基桶中,若基桶中無空閑單元,則看是否存在溢出桶,若存在,則在溢出桶中查找空閑單元,若不存在溢出桶或溢出桶中無空閑單元,則申請一個溢出桶并存入新元素。在基桶查找空閑單元時,使用的桶號為Index,由此可知(1)空缺處所填寫的內容是“Index=NewElemKey%P”,或“Index=Hash(NewElemKey)”等其他等價形式。一旦在基桶中找到空閑單元,即“Bucket[1ndex].keyData[i]==NULLKEY”(0≤i<ITEMS),則可將元素NewElemkey放入Bucket[Index].keyData[i],至此元素已經插入散列桶中,函數可返回,因此(2)空缺處所填寫的內容是“i<ITEMS”。反之,若在基桶中沒有找到空閑單元,則需查找溢出桶?!皌=Bucket[Index].Link”,指針t首先指向桶號Index的第一個溢出桶。以下的代碼完成在溢出桶中查找空閑單元的功能。由于每個溢出桶都可以存儲ITEMS個元素,因此在溢出桶中查找空閑單元與在基桶中的查找過程相同,代碼如下。若在指針t指向的溢出桶中找到空閑單元則插入元素,否則,由“t=t->Link”得到下一個溢出桶的指針,因此“k<ITEMS”可作為是否在當前溢出桶中找到空閑單元的判定條件。顯然,在桶號Index的基桶和其所有溢出桶都已滿的情況下,t的值為空指針。此時才需要申請新的溢出桶并建立鏈接關系,因此在上面查找溢出桶中空閑單元時,進行指針t的后移“t=t->Link’’前應先用front記錄t的值,以便于后面建立鏈接關系。所以(3)空缺處應給front置初值,即所填寫的內容是“front=&Bucket[Index]”,或“front=Bucket+Index”等其他等價形式。(4)空缺處用于判斷該溢出桶是否已滿,即所填寫的內容是“k=ITEMS(或k>=ITEMS)”。如果該溢出桶已滿,則繼續查找下一個溢出桶,直到查找到空閑單元為止。若所有溢出桶都不存在空閑單元(即t==NULL),則申請新的溢出桶,并將新的溢出桶的首地址保存在原有的最后一個溢出桶的Link域中(即front->Link=s)。因此(5)空缺處所填寫的內容是“t==NULL”,(6)空缺處用于建立新申請溢出桶的鏈接關系——“front->Link=s”。知識點解析:暫無解析18、閱讀以下技術說明及C++代碼,將C++程序中(1)~(5)空缺處的語句填寫完整。[說明]在一公文處理系統中,開發者定義了一個公文類OfficeDoc,其中定義了公文具有的屬性和處理公文的相應方法。當公文件中內容或狀態發生變化時,關注此OfficeDoc類對象的相應的DocExplorer對象都要更新其自身的狀態。一個OfficeDoc對象能夠關聯一組DocExplorer對象。當OfficeDoc對象的內容或狀態發生變化時,所有與之相關聯的DocExplorer對象都將得到通知,這種應用被稱為Observer(觀察者)模式。以下代碼采用C++語言實現,能夠正確編譯通過。[C++代碼]標準答案:Observer(觀察者)模式的設計意圖是:定義對象間的一種一對多的依賴關系,以便當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。首先,DocExplorer需要知道OfficeDoc是一個類,但由于OfficeDoc定義在DocExplorer之后,因此需要在DocExplorer類的定義前加上classOfficeDoc的聲明,即(1)空缺處所填寫的內容是:classOfficeDoc。(2)空缺處可根據程序最后的構造函數的實現知道,應該填寫OfficeDoc。在觀察者模式中,不同的觀察者更新自身的方法不同,因此(3)空缺處應填寫virtual,而且程序最后的“=0”也表明是一個純虛擬函數。由(4)空缺處所在行的程序注釋說明可知,所有與OfficeDoc相關聯的對象更新自身狀態,因此需要使用update函數。但update函數的參數是一個OfficeDoc類的對象,所以參數應該為this。(5)空缺處所在行語句的功能是,將OfficeDoc類的對象和DocExplorer類的對象相關聯,關聯的函數是OfficeDoc中的attach方法,其參數是一個DocExplorer對象,使用this能夠表示當前的對象,因此該空缺處應填寫attach(this)。知識點解析:暫無解析19、閱讀以下技術說明及Java代碼,將Java程序中(1)~(5)空缺處的語句填寫完整。[說明]在一公文處理系統中,開發者定義了一個公文類OfficeDoc,其中定義了公文具有的屬性和處理公文的相應方法。當公文件的內容或狀態發生變化時,關注此OfficeDoc類對象的相應的DocExplorer對象都要更新其自身的狀態。一個OfficeDoc對象能夠關聯一組DocExplorer對象。當OfficeDoc對象的內容或狀態發生變化時,所有與之相關聯的DocExplorer對象都將得到通知,這種應用被稱為Observer(觀察者)模式。以下代碼采用Java語言實現,能夠正確編譯通過。[Java代碼]標準答案:Observer(觀察者)模式的設計意圖是:定義對象間的一種一對多的依賴關系,以便當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。(1)空缺處觀察者對象更新自身的狀態,更新的數據應該來自被觀察者對象,所以此處應該為一Subject,因此(1)空缺處所填寫的內容是:Subjectsubject。同理,(5)空缺處與(1)空缺處所填寫的內容是相同的。notifyObservers方法通知所有的觀察者對象更新自身的狀態,因此(2)空缺處應該返回所有的觀察者對象,調用方法Observers()即可獲得。(3)空缺處對每個觀察者對象更新狀態,所以應該調用update方法,update方法需要此被觀察者對象作為參數,所以使用this宋獲取對象自身。DocExplorer是一個觀察者,因此需要實現接口Observer,即(4)空缺處所填寫的內容是:Observer。知識點解析:暫無解析軟件水平考試(中級)軟件設計師下午(應用技術)試題模擬試卷第3套一、必答題(本題共13題,每題1.0分,共13分。)[說明]公司IT部門決定開發一個計算機管理系統以記錄期刊的傳閱情況。期刊在公司內部傳閱,員工可以要求加入傳閱隊列。圖書室登記公司收到的期刊,交給名單中的第一名員工。員工應在三個工作日內完成閱讀,員工閱讀完畢后通知系統,系統提醒下一位閱讀者取書,下一個員工必須確認已收到期刊。當傳閱名單中“下一位”員工出差在外時將無法進行傳閱,此時將期刊傳給再下一位,而將該員工作標記,再次傳遞此書時優先考慮該員工。最后一位員工閱讀完畢后,將期刊交還圖書室以便共用。系統能在員工忘記傳遞期刊時發出提醒信息。系統詳細記錄期刊傳閱情況,當員工閱讀完后通知系統,系統記錄該員工員工號及日期,并在備注欄注明是傳出;同樣,當員工收到期刊后給系統確認,系統記錄該員工員工號及日期,并在備注欄注明是收到。公司的員工都有一個唯一的員工號。公司訂閱了多種期刊,為每一本期刊(有唯一期刊流水號)產生一份傳閱名單,并詳細記錄傳閱情況。員工的出差情況存儲在系統主機中。該系統采用面向對象方法開發,系統中的類以及類之間的關系用UML類圖表示,圖1-1是該系統的類圖的一部分,圖1-2描述了成功傳遞期刊的序列圖。[圖1-1]1、根據題意,給出類“傳閱記錄”的主要屬性。標準答案:“傳閱記錄”屬性:期刊流水號、員工號、日期、備注。知識點解析:暫無解析2、根據題意,將圖1-2中的(1)~(5)處補充完整。標準答案:讀取下一位閱讀者(3)讀取員工狀態(4)提醒取書(5)添加傳閱記錄根據期刊傳閱過程的描述,員工閱讀完畢“通知系統”,系統“添加傳閱記錄”,并從“傳閱名單”中“讀取下一位閱讀者”,然后“讀取員工狀態”,若該員工可傳,“提醒取書”,員工收到期刊后向系統確認,系統“添加傳閱記錄”。知識點解析:暫無解析3、同一種期刊分不同的期,所以有多本同一種期刊。“傳閱名單”只需每一種期刊一份,還是應該每本期刊一份,為什么?標準答案:“傳閱名單”應該每一本期刊一份,以便當員工出差時正確做標記,保證正確傳遞。當傳閱名單中“下一位”員工出差在外時將無法進行傳閱,此時將期刊傳給再下一位,而將該員工作標記,再次傳遞此書時優先考慮該員工。仔細分析該句題設,不難發現,“傳閱名單”應該每一本期刊一份,如果一種期刊一份,則沒法做標記,當員工出差時將無法正確傳遞。知識點解析:暫無解析[說明]某學校的教學系統描述如下:學生信息包括:學號(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sage)、入學年份(Syear)、主修專業(Smajor),其中學號是入學時唯一編定的。教師信息包括:教工號(Tno)、姓名(Tname)、性別(Tsex)、年齡(Tage)、職稱(Title),其中教工號是唯一編定的。課程信息包括:課程號(Cno)、課程名稱(Cname)、學時(Cpeiiod)、學分(Ccredit),其中課程號是唯一編定的。每個專業每個年級只有一個班級,這樣班級就可用入學年份標識。每位教師只教授特定的一門的課程,每門課程可以有多個教師教授,各位老師的上課地點及上課時間有所不同。注意:一門課程至少有一位教師教授,否則這門課程就視為不存在。每位學生可以同時選修多門不同的課程,一門課程至少要有10位學生選修,否則就取消這門課程的開設。注意:選修課程時要指定任課教師,不能重復選修同一門課程。課程結束后,任課教師給選修該課程的學生一個成績(Grade)。注意:教師不能給沒有選修他所教授課程的學生成績,即使選修了其他教師教授的同一門課也不行。圖2-1是經分析得到的E-R圖。[圖2-1]4、根據題意,給出聯系的屬性。實體間的聯系有“一對一”、“一對多”和“多對多”,指出各聯系分別屬于哪一種。標準答案:教授:上課地點、上課時間,一對多選修:任課教師、成績,多對多“每位教師只教授特定的一門的課程,每門課程可以有多個教師教授,各位老師的上課地點及上課時間有所不同”,因此聯系“教授”的屬性應有:上課地點,上課時間,是一對多聯系。“每位學生可以同時選修多門不同的課程,一門課程至少要有10位學生選修,……,選修課程時要指定任課教師,……,任課教師給選修該課程的學生一個成績(Grade)”,因此聯系“選修”的屬性應有:任課教師、成績,是多對多聯系。知識點解析:暫無解析5、按照“有關模式名(屬性,屬性,…)”的格式,將此E-R圖轉換為5個關系模式,指出每個關系模式中的主碼和外碼,其中模式名根據需要取實體名或聯系名。標準答案:教師(教工號,姓名,性別。年齡,職稱),主碼:教工號課程(課程號,課程名稱,學時,學分),主碼:課程號學生(學號,姓名,性別,年齡,主修專業,入學年份),主碼:學號教授(教工號,課程號,上課地點,上課時間),主碼:(教工號)選修(學號,課程號,任課教師,成績),主碼:(學號,課程號)或(學號,任課教師)E-R模型向關系模型的轉換應遵循如下原則:①每個實體類型轉換成一個關系模式。②一個1:1的聯系(一對一聯系)可轉換為一個關系模式,或與任意一段的關系模式合并。③一個1:n的聯系(一對多聯系)可轉換為一個關系模式,或與n段的關系模式合并。若獨立轉換為一個關系模式,那么兩端關系的碼及其聯系的屬性為該關系的屬性,而n端的碼為關系的碼。④一個n:m的聯系(多對多聯系)可轉換為一個關系模式,兩端關系的碼及其聯系的屬性為該關系的屬性,而關系的碼為兩端實體的碼的組合。⑤三個或三個以上多對多的聯系可轉換為一個關系模式,諸關系的碼及聯系的屬性為關系的屬性,而關系的碼為各實體的碼的組合。⑥具有相同碼的關系可以合并。由于“每位教師只教授特定的一門的課程,學生不能重復選修同一門課程”,因此教授聯系的主碼是“教工號”,修選聯系的主碼可以是“(學號,課程號)”,也可以是“(學號,任課教師)”。知識點解析:暫無解析6、若用Student表存儲學生信息,Teacher表存儲教師信息,Course表存儲課程信息,Study表存儲學生選修課程情況。教務處想要“查詢2006年入學的計算機專業(CS)的學生中平均成績在85分以上的學生信息”。請將以下SQL語句補充完整。注:用對應英文表示。SELECT*FROMstudentWHERESmajor="CS"ANDSyear="2006"AND(1)(SELECTSnoFROMStudyGROUPBYSnoHAVING(2))標準答案:SnoIN(2)AVG(Grade)>85SELECT[ALL|DISTINCT]<目標列表達式>[,(目標列表達式>]…FROM<表名或視圖名>[,<表名或視圖名>][WHERE(條件表達式>][GROUIBY<列名1>[HAVING<條件表達式>]][ORDERBY<列名2>[ASC|DESC]…]子句順序為SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY,但SELECT和FROM是必須的,HAVING子句只能與GROUPBY搭配起來使用。子查詢的語意應為“按學號分組、平均分大于85的學生的學號”,可得空(1)應填SnoIN,空(2)應填AVG(Grade)>85。知識點解析:暫無解析[說明]圖3-1描述某超市銷售數據的部分處理流程。超市中有若干臺收款機和若干名收款員。這里,我們把一個收款員開始使用一臺收款機到離開這臺收款機稱為該收款員的一次作業。作業開始時,收款員先在收款機上輸入收款員號和作業前金額。作業前金額是為了銷售時的找零而在作業前預先放入錢柜的金額數。作業結束時,收款員要打開錢柜,取走全部現金,并把這些現金的金額數(稱為作業后金額)輸入收款機。當作業前金額+本次作業售貨總金額-本次作業退貨總金額≠作業后金額時,表示這次作業存在金額差錯。本流程圖已作簡化,并作以下假定;該超市只有現金交易(不用信用卡和禮券);一個收款員因某種原因(如吃飯)在一天中可以有多個作業;銷售方式只有售貨和退貨兩種。整個超市分成若干部門(如食品部、服裝部),系統按部門統計一個月中各類貨物的銷售數量和金額,最后根據月銷售計劃文件分析各部門完成銷售計劃的情況。系統還統計每個收款員的差錯情況和退貨情況。圖中處理4和處理8每月的最后一天執行一次(營業結束后),其他處理每天執行一次。圖中部分數據、文件的記錄格式如下:日銷售數據:收款機號+收款員號+作業前金額+{(售貨標記|退貨標記)+貨號+數量+單價+金額}+作業后金額日銷售文件記錄:(作業開始標記+收款機號+收款員號+作業前金額)|((售貨標記|退貨標記)+貨號+數量+金額)|(作業結束標記+收款機號+收款員號+作業后金額)部門目銷售文件記錄:部門號+(售貨標記|退貨標記)+貨號+數量+金額部門月銷售計劃文件記錄:部門號+月計劃金額收款員差錯月報:月份+收款員號+差錯作業數+差錯總金額收款員退貨月報:月份+收款員號+退貨次數+退貨總金額其中{w}表示w重復出現多次;a|b表示a或b;a+b表示a與b。7、分別寫出收款員日銷售文件、商品文件、部門日銷售匯總文件至少應包含哪些數據項。標準答案:收款員日銷售文件:收款員號+差錯作業數+差錯金額+退貨次數+退貨金額商品文件:貨號+部門號+單價部門日銷售匯總文件:部門號+貨號+銷售數量+銷售總金額知識點解析:暫無解析8、“處理1”能檢查出日銷售數據中的哪些錯誤。標準答案:存在非法字符或非法數據(如金額小于0)數量×單價≠金額貨號(或單價)與商品文件中的貨號(或單價)不一致知識點解析:暫無解析9、處理4對收款員月銷售文件作何種操作。標準答案:刪除其中的所有記錄或初始化知識點解析:暫無解析10、閱讀下列函數說明、圖和C代碼,回答問題[說明]假定用一個整型數組表示一個長整數,數組的每個元素存儲長整數的一位數字,則實際的長整數m表示為:m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]其中a[1]保存該長整數的位數,a[0]保存該長整數的符號:0表示正數、1表示負數。運算時先決定符號,再進行絕對值運算。對于絕對值相減情況,總是絕對值較大的減去絕對值較小的,以避免出現不夠減情況。注意,不考慮溢出情況,即數組足夠大。[函數]intcmp(int*LA,int*LB);/*比較長整數LA與LB的絕對值大小*//*若LA絕對值較大返回正值,LA較小返回負值,相等則返回0*/intADD(int*LA,int*LB,int*LC)/*計算長整數LA與LB的和,結果存儲于LC中*//*注意:正數與負數的和相當于正數與負數絕對值的差*//*數據有誤返回0,正常返回1*/{if(LA==NULL||LB==NULL||LC==NULL)return0;int*pA,*pB,i,N,carry,flag;flag=LA[0]+LB[0];switch(flag){/*根據參與運算的兩個數的符號進行不同的操作*/case0:case2:Lc[0]=L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論