閱讀下列說明,回答問題1至問題4,將解答填入答題紙的對應欄內。
【說明】
某證券交易所爲了方便提供證券交易服務,欲開發一證券交易平臺,該平臺的主要功能以下:
(1)開戶。根據客戶服務助理提交的開戶信息,進行開戶,並將客戶信息存入客戶記錄中,帳戶信息(餘額等)存入帳戶記錄中;
(2)存款。客戶能夠向其帳戶中存款,根據存款金額修改帳戶餘額;
(3)取款。客戶能夠從其帳戶中取款,根據取款金額修改帳戶餘額;
(4)證券交易。客戶和經紀人都可以進行證券交易(客戶經過在線方式,經紀人經過電話),將交易信息存入交易記錄中;
(5)檢查交易。平臺從交易記錄中讀取交易信息,將交易明細返回給客戶。
現採用結構化方法對該證券交易平臺進行分析與設計,得到如圖1-1所示的上下文數據流圖和圖1-2所示的0層數據流圖。java
問題:1.1 (3分)算法
使用說明中的詞語,給出圖1-1中的實體E1-E3的名稱。
問題:1.2 (3分)
使用說明中的詞語,給出圖1-2中的數據存儲D1-D3的名稱。
問題:1.3 (4分)
根聽說明和圖中的術語,補充圖1-2中缺失的數據流及其起點和終點。數組
問題:1.4 (5分)
實際的證券交易一般是在證券交易中心完成的,所以,該平臺的「證券交易」功能需將交易信息傳遞給證券交易中心。針對這個功能需求,須要對圖1-1和圖1-2進行哪些修改,請用200字之內的文字加以說明。函數
E1:客戶服務助理,E2:客戶,E3:經紀人。優化
本題要求識別E1-E3具體爲哪一個外部實體,通讀試題說明,能夠了解到適合充當外部實體的包括:客戶、客戶服務助理、經記人。具體的對應關係,能夠經過將頂層圖與題目說明進行匹配得知。如:從圖中可看出E1會向交易平臺發出數據流開戶信息;;而從試題說明根據客戶服務助理提交的開戶信息,進行開戶,並將客戶信息存入客戶記錄中,帳戶信息存入帳戶記錄中能夠看出,E1對應是客戶服務助理。E二、E3同理可得。 spa
D1:客戶記錄,D2:帳戶記錄,D3:交易記錄。設計
本題要求識別存儲,解決這類問題,以圖的分析爲主,配合說明給存儲命名,由於存儲相關的數據流通常展示了這個存儲中到底存了些什麼信息,如從圖中能夠看到D1中有客戶信息,而D2中有帳戶信息,題目說明中又有根據客戶服務助理提交的開戶信息,進行開戶,並將客戶信息存入客戶記錄中,帳戶信息存入帳戶記錄中。天然D1應爲客戶記錄,D2應爲帳戶記錄。同理,D3爲交易記錄。 code
數據流名稱:修改帳戶餘額,起點:存款,終點:D2。
數據流名稱:修改帳戶餘額,起點:取款,終點:D2。
數據流名稱:交易信息存入交易記錄,起點:證券交易,終點:D3。blog
缺失數據流1
名稱:修改帳戶餘額,起點:存款,終點:D2。
理由:從試題說明客戶能夠向其帳戶中存款,根據存款金額修改帳戶餘額能夠看出,這個功能有操做根據存款金額修改帳戶餘額。據此能夠了解到從該功能應有數據流存款至D2,而0層圖沒有。
缺失數據流2:
名稱:修改帳戶餘額,起點:取款,終點:D2。
理由:從試題說明客戶能夠從其帳戶中取款,根據取款金額修改帳戶餘額能夠看出,這個功能有操做根據取款金額修改帳戶餘額。據此能夠了解到從該功能應有數據流取款至D2,而0層圖沒有。
缺失數據流3
名稱:交易信息存入交易記錄,起點:證券交易,終點:D3。
理由:從試題說明客戶和經紀人都可以進行證券交易,將交易信息存入交易記錄中能夠看出,這個功能有操做將交易信息存入交易記錄中。據此能夠了解到從該功能應有數據流證券交易至D3,而0層圖沒有。 開發
增長外部實體證券交易中心,原來證券交易中的交易信息的數據流終點改成證券交易中心,數據流檢測交易中的起點改成證券交易中心。
本題強調實際的證券交易一般是在證券交易中心完成,這個證券交易中心屬於典型的外部實體,因此須要增長外部實體證券交易中心。因爲該平臺的證券交易功能需將交易信息傳遞給證券交易中心,所以將原來證券交易中的交易信息的數據流終點改成證券交易中心,數據流檢測交易中的起點改成證券交易中心。
閱讀下列說明和C代碼,回答問題1至問題3,將解答寫在答題紙的對應欄內。
【說明】
模式匹配是指給定主串t和子串s,在主串t中尋找子串s的過程,其中s稱爲模式。若是匹配成功,返回s在t中的位置,不然返回-1 。
KMP算法用next數組對匹配過程進行了優化。KMP算法的僞代碼描述以下:
1.在串t和串s中,分別設比較的起始下標i=j=0。
2.若是串t和串s都還有字符,則循環執行下列操做:
(1)若是j=-l或者t[i]=s[j],則將i和j分別加1,繼續比較t和s的下一個字符;
(2)不然,將j向右滑動到next[j]的位置,即j =next[j]。
3.若是s中全部字符均已比較完畢,則返回匹配的起始位置(從1開始);不然返回-1.
其中,next數組根據子串s求解。求解next數組的代碼已由get_next函數給出。
【C代碼】
(1)常量和變量說明
t,s:長度爲lt,ls的字符串
next:next數組,長度爲ls
(2)C程序
#include <stdio.h>
#include <stdlib.h> #include <string.h>
/*求next[]的值*/
void get_next( int *next, char *s, int ls) { int i=0,j=-1; next[0]=-1;/*初始化next[0]*/
while(i < ls) /*還有字符*/ { if(j==-1 ll s[i]==s[j]) /*匹配*/ { j++; i++; if( s[i]==s[j]) next[i] = next[j]; else next[i] = j; } else j = next[j]; } } int kmp( int *next, char *t,char *s, int lt, int ls ) { Int i= 0,j =0 ; while (i < lt && (1) ) { if( j==-1 || (2) ) { i ++ ; j ++ ; } else (3) ; } if (j >= ls) return (4) ; else
return -1; }
問題:4.1 (8分)
根據題幹說明,填充C代碼中的空(1)~(4).
問題:4.2 (2分)
根據題幹說明和C代碼,分析出kmp算法的時間複雜度爲(5)(主串和子串的長度分別爲lt和ls,用O符號表示)。
問題:4.3 (5分)
根據C代碼,字符串「BBABBCAC」的next數組元素值爲(6)(直接寫素值,之間用逗號隔開)。若主串爲「AABBCBBABBCACCD」,
子串爲「BBABBCAC」,則函數Kmp的返回值是(7)。
(1):j<ls (2):t[i]==s[j]; (3):get_next(next, s, ls), j=next[j] (4):i+1-ls (5):O(ls+lt) (6):[-1,-1,1,-1,-1,2,0,0] (7):6
閱讀下列說明和java代碼,將應填入 (n) 處的字句寫在答題紙的對應欄內。
【說明】
某發票(lnvoice)由擡頭(Head)部分、正文部分和腳註(Foot)部分構成。現採用裝飾(Decorator)模式實現打印發票的功能,獲得如圖6-1所示的類圖。
問題:6.1 【java代碼】
class invoice { public void printInvoice() { System.out.println ( "This is the content of the invoice!"); } } class Decorator extends Invoice { protected Invoice ticket; public Decorator(lnvoice t) { ticket = t; } public void printInvoice() { if(ticket != null) (1) ; } } class HeadDecorator extends Decorator { public HeadDecorator(lnvoice t) { super(t); } public void printInvoice () { System.out.println( "This is the header of the invoice! "); (2) ; } } class FootDecorator extends Decorator { public FootDecorator(Invoice t) { super(t); } public void printlnvoice() { ( 3) ; System.out.println( "This is the footnote of the invoice! "); } } Class test { public static void main(String[] args) { Invoice t =new Invioce(); Invoice ticket; ticket= (4) ; ticket.printInvoice(); System.out.println(「------------------「); ticket= (5) ; ticket.printInvoice(); } }
程序的輸出結果爲:
This is the header of the invoice!
This is the content of the invoice!
This is the footnote of the invoice!
----------------------------
This is the header of the invoice!
This is the footnote of the invoice!
(1)ticket.printInvoice() (2)super.printInvoice() (3)super.printInvoice() (4)new HeadDecorator(new FootDecorator(t)) (5)new HeadDecorator(new FootDecorator(null))