2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  成都信息工程學(xué)院</b></p><p><b>  學(xué)位論文</b></p><p>  B/S結(jié)構(gòu)下的OA流程可視化的研究與實(shí)現(xiàn)</p><p>  B/S結(jié)構(gòu)下的OA流程可視化的研究與實(shí)現(xiàn)</p><p><b>  摘 要</b><

2、/p><p>  工作流是指整個(gè)或部分業(yè)務(wù)流程在計(jì)算機(jī)支持下的全自動(dòng)或半自動(dòng)化。在計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境下,工作任務(wù)在多個(gè)人或單位之間的流轉(zhuǎn)實(shí)際上將表現(xiàn)為信息或數(shù)據(jù)在多個(gè)人之間的傳送。使用可視化的OA工作流設(shè)計(jì)工具,用戶不需要編程就可以定義設(shè)計(jì)出滿足要求的收發(fā)文流程,實(shí)際使用效果良好。論文以可視化的OA工作流設(shè)計(jì)工具的開發(fā)為基礎(chǔ),主要闡述五個(gè)方面的內(nèi)容。第一部分介紹了工作流和工作流設(shè)計(jì)工具的相關(guān)概念與開發(fā)背景;第二部分對(duì)工作

3、相關(guān)基礎(chǔ)理論技術(shù)、系統(tǒng)環(huán)境與平臺(tái)基礎(chǔ)、以及開發(fā)技術(shù)進(jìn)行了描述;第三部分對(duì)系統(tǒng)功能進(jìn)行了分析;第四部分詳細(xì)介紹了系統(tǒng)流程、流程可視化設(shè)計(jì)的實(shí)際開發(fā)過程中使用到的關(guān)鍵技術(shù);最后一部分在總結(jié)了系統(tǒng)開發(fā)心得的同時(shí),提出了目前系統(tǒng)存在的不足和有待改進(jìn)的地方。</p><p>  關(guān)鍵詞:工作流;流程定義;可視化;Java Applet</p><p>  The Research and Imple

4、mentation of Visual OA workflow Based on B/S Structure</p><p><b>  Abstract</b></p><p>  Workflow is a full automation or semi-automation on business process, which is supported by t

5、he computer technology. In the distributed environment, tasks transferred among different persons and departments are information or data passed among participants according to the defined set of rules. Using visual OA w

6、orkflow designing tools, users can define and design receiving and ending document workflow without programming. The actual result is very satisfactory. This paper is based on the develop</p><p>  Key words:

7、 workflow;flow define;visual;Java Applet</p><p><b>  目 錄</b></p><p><b>  論文總頁(yè)數(shù):30頁(yè)</b></p><p><b>  1 引言1</b></p><p>  1.1 課題背景1&l

8、t;/p><p>  1.2 技術(shù)可行性研究1</p><p>  1.2.1 Java Applet技術(shù)的可行性研究1</p><p>  1.2.2 XML技術(shù)的可行性研究1</p><p>  1.2.3 Microsoft Office Access 2003數(shù)據(jù)庫(kù)的可行性研究1</p><p>  2 相

9、關(guān)基礎(chǔ)理論技術(shù)以及開發(fā)技術(shù)1</p><p>  2.1工作流的定義與存在問題描述2</p><p>  2.1.1 OA中工作流的定義2</p><p>  2.1.2工作流中的流程定義問題3</p><p>  2.2 java applet和applet繪圖技術(shù)的介紹3</p><p>  2.2.1

10、applet的介紹3</p><p>  2.2.2 Applet的AWT繪制4</p><p>  2.3系統(tǒng)環(huán)境與平臺(tái)基礎(chǔ)5</p><p>  3 系統(tǒng)需求分析與總體設(shè)計(jì)5</p><p>  3.1系統(tǒng)需求分析5</p><p>  3.2 系統(tǒng)功能介紹5</p><p> 

11、 3.3 系統(tǒng)模塊功能和設(shè)計(jì)思想6</p><p>  3.4數(shù)據(jù)庫(kù)設(shè)計(jì)7</p><p>  3.4.1 E-R圖設(shè)計(jì)7</p><p>  3.4.2 表的構(gòu)建8</p><p>  3.4.3 數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)9</p><p>  4 系統(tǒng)功能模塊實(shí)現(xiàn)9</p><p>  4

12、.2流程可視化設(shè)計(jì)實(shí)現(xiàn)10</p><p>  4.2.1界面可視化10</p><p>  4.2.2 繪圖功能設(shè)計(jì)11</p><p>  4.2.3 流程圖保存和讀取方法設(shè)計(jì)17</p><p>  4.2.4 節(jié)點(diǎn)間關(guān)系保存的實(shí)現(xiàn)23</p><p>  5 系統(tǒng)測(cè)試結(jié)果及存在的問題和改進(jìn)的方案27

13、</p><p><b>  結(jié) 論28</b></p><p><b>  參考文獻(xiàn)28</b></p><p><b>  致 謝29</b></p><p><b>  聲 明30</b></p><p&

14、gt;<b>  1 引言</b></p><p><b>  1.1 課題背景</b></p><p>  辦公自動(dòng)化(OA-Office Automation)是將現(xiàn)代化辦公和計(jì)算機(jī)網(wǎng)絡(luò)功能結(jié)合起來的一種新型的辦公方式,通過網(wǎng)絡(luò),組織機(jī)構(gòu)內(nèi)部的人員可跨越時(shí)間、地點(diǎn)協(xié)同工作。OA中涉及到諸多業(yè)務(wù)流程,流程的定義對(duì)與OA系統(tǒng)中業(yè)務(wù)的自動(dòng)流轉(zhuǎn)具有十

15、分重要的意義,但是在一般B/S模式下的OA系統(tǒng),對(duì)于流程的定義都是文字型或者表單形式的,而不是圖形化的,因?yàn)榛贖TML解析的B/S在繪圖方面存在缺陷,因此大多B/S的OA系統(tǒng)在流程定義時(shí),為了達(dá)到可視化的效果,都采用了流程定義用C/S來輔助。但是java中的applet技術(shù)可以實(shí)現(xiàn)在B/S下的繪圖,因此,結(jié)合applet技術(shù),可以在B/S系統(tǒng)中直接嘗試流程的可視化定義研究。</p><p>  1.2 技術(shù)可行

16、性研究</p><p>  在對(duì)可視化流程設(shè)計(jì)工具的研究和實(shí)現(xiàn)過程中一共用到了三種技術(shù):Java Applet、XML、Microsoft Office Access2003。在技術(shù)難度方面,由于有指導(dǎo)老師的指導(dǎo)和相關(guān)的參考文獻(xiàn),使得在開發(fā)過程中所遇到的困難都能夠一一得到解決。</p><p>  1.2.1 Java Applet技術(shù)的可行性研究</p><p>

17、  本系統(tǒng)利用Java Applet作為開發(fā)工具,是因?yàn)槌墒斓腏ava技術(shù)采用面向?qū)ο蟮木幊谭椒ā殉绦蚝蛿?shù)據(jù)封裝起來作為一個(gè)對(duì)象,并為每個(gè)對(duì)象賦予相應(yīng)的屬性。而Java Applet具有能嵌入到瀏覽器中運(yùn)行,能通過可視化技術(shù)手段實(shí)現(xiàn)繪圖功能,能連接數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用服務(wù)器等這些特點(diǎn),完全滿足了此次B/S結(jié)構(gòu)下OA流程可視化研究和實(shí)現(xiàn)的各種要求。</p><p>  1.2.2 XML技術(shù)的可行性研究</

18、p><p>  “可擴(kuò)展標(biāo)記語(yǔ)言”(XML) 提供一種描述結(jié)構(gòu)化數(shù)據(jù)的方法。與主要用于控制數(shù)據(jù)的顯示和外觀的 HTML 標(biāo)記不同,XML 標(biāo)記用于定義數(shù)據(jù)本身的結(jié)構(gòu)和數(shù)據(jù)類型。利用XML技術(shù)可實(shí)現(xiàn)將繪制圖形中的節(jié)點(diǎn)關(guān)系和圖形信息保存在XML文件中并通過XML文件提供上層接口服務(wù)的功能。</p><p>  1.2.3 Microsoft Office Access 2003數(shù)據(jù)庫(kù)的可行性研究&

19、lt;/p><p>  系統(tǒng)采用Microsoft Office Access 2003作為開發(fā)數(shù)據(jù)庫(kù),使用于中度規(guī)模的數(shù)據(jù)錄入要求。它通過工具界面所提供的組件輸入數(shù)據(jù)到數(shù)據(jù)庫(kù),可以使用查詢?cè)O(shè)計(jì)和SQL實(shí)現(xiàn)查詢并生成報(bào)表。</p><p>  2 相關(guān)基礎(chǔ)理論技術(shù)以及開發(fā)技術(shù)</p><p>  2.1工作流的定義與存在問題描述</p><p>

20、  2.1.1 OA中工作流的定義</p><p>  當(dāng)今社會(huì)分工越來越細(xì),在一個(gè)單位內(nèi)部也越來越強(qiáng)調(diào)專業(yè)化,大部分工作都需要多個(gè)部門和員工合作完成。一個(gè)制度良好的單位往往對(duì)各種工作的工作流程以文件的形式固定下來,即使是管理不太正規(guī)的單位也有約定俗成的工作步驟。這種工作流程保證了一件任務(wù)能按預(yù)定的順序從起點(diǎn)流向終點(diǎn),并且在需要的時(shí)候可以跟蹤、查詢和統(tǒng)計(jì)。</p><p>  工作流(wo

21、rkflow)的概念是為提高工作效率的研究而產(chǎn)生的,目前尚無(wú)統(tǒng)一、明確的定義。工作流管理聯(lián)盟(WorkFlow Management Coalition ,WFMC)將工作流定義為:業(yè)務(wù)流程的全部或部分自動(dòng)化,在此過程中,文檔、信息或者任務(wù)按照一定的過程規(guī)則流轉(zhuǎn),實(shí)現(xiàn)組織成員間的協(xié)調(diào)工作以期達(dá)到業(yè)務(wù)的整體目標(biāo)。</p><p>  工作流包括以下幾個(gè)要素:</p><p>  實(shí)體(Ent

22、ity):是工作流的主體,是需要隨著工作流一起流動(dòng)的物件(Object)。例如,在一個(gè)采購(gòu)申請(qǐng)批準(zhǔn)流程中,實(shí)體就是采購(gòu)申請(qǐng)單;在公文審批流程中,實(shí)體就是公文。</p><p>  參與者(Participant):是各個(gè)處理步驟中的責(zé)任人,可能是人,也可能是某個(gè)職能部門,還可能是某個(gè)自動(dòng)化的設(shè)備;</p><p>  流程定義(Flow Definition):是實(shí)現(xiàn)某工作目標(biāo)而要完成的一

23、系列步驟的描述。它包含了所有使業(yè)務(wù)過程能被工作流執(zhí)行服務(wù)的必要信息。這些信息包含起始和終止條件、各個(gè)組成活動(dòng)、活動(dòng)調(diào)度規(guī)則、各業(yè)務(wù)的參與和需要做的工作、相關(guān)應(yīng)用次序和數(shù)據(jù)的調(diào)用信息等。過程由活動(dòng)和相關(guān)數(shù)據(jù)組成。</p><p>  流程定義工具被用來創(chuàng)建計(jì)算機(jī)可處理的業(yè)務(wù)過程描述。它可是形式過程定義語(yǔ)言或?qū)ο箨P(guān)系模型,也可以是簡(jiǎn)單地規(guī)定用戶間信息傳輸?shù)囊唤M路由命令。</p><p>  在

24、本論文中所研究的可視化流程設(shè)計(jì)工具就是一種通過Java 語(yǔ)言實(shí)現(xiàn)的利用圖形來定義業(yè)務(wù)流程模型的一種工具。</p><p>  WFMC對(duì)工作流有一個(gè)簡(jiǎn)化的定義由一個(gè)四元組{Pt,Pa,Dt,Ti}對(duì)其進(jìn)行描述:</p><p>  1)工作流參與者(Workflow Participant):定義活動(dòng)的執(zhí)行者,執(zhí)行者可以是人和其他實(shí)體。</p><p>  2)工作

25、流過程活動(dòng)(Workflow Process Activity):定義工作流活動(dòng)的執(zhí)行步驟,它可分為原子活動(dòng)和子工作流過程。前者不可再分,后者可由原子活動(dòng)和其他子工作流組成。</p><p>  3)工作流相關(guān)數(shù)據(jù)(Workflow Relevant Data):定義工作流活動(dòng)和應(yīng)用所涉及的數(shù)據(jù)信息,它們可能包含系統(tǒng)和環(huán)境數(shù)據(jù)。</p><p>  4)躍遷信息(Transition In

26、formation):定義工作流活動(dòng)執(zhí)行的依賴信息,決定活動(dòng)之間的躍遷、一個(gè)活動(dòng)的完成可能對(duì)其他活動(dòng)的執(zhí)行產(chǎn)生影響。</p><p>  下面給出一個(gè)例子,并用上面的定義的規(guī)范進(jìn)行分解:</p><p>  Pt = {擬稿人(處員)A,處室領(lǐng)導(dǎo)B,處室會(huì)簽負(fù)責(zé)人C,領(lǐng)導(dǎo)D,核稿人E,打字員F,檔案室G}</p><p>  Pa = {擬稿a,送審b,送核稿c,審

27、核d,寫審核意見e,送會(huì)簽f,會(huì)簽意見g,返回?cái)M稿人h,寫核稿意見i,送領(lǐng)導(dǎo)批示j,編號(hào)k,送打字室l,寫批示意見m,返回核稿人n,排版印刷o,封發(fā)p,送檔案室q,歸檔r}</p><p><b>  Dt = {文件}</b></p><p>  Ti = {Pt(i):->t Pt(j)}表示從一個(gè)狀態(tài)到達(dá)另一個(gè)狀態(tài),t 是觸發(fā)條件,</p>

28、<p>  這些定義和例子將是我們通過流程設(shè)計(jì)工具設(shè)計(jì)流程時(shí)的參考。</p><p>  2.1.2工作流中的流程定義問題</p><p>  在一般B/S模式下的OA系統(tǒng),對(duì)于流程的定義都是文字型或者表單形式的,而不是圖形化的,因?yàn)榛贖TML解析的B/S在繪圖方面存在缺陷,因此大多B/S的OA系統(tǒng)在流程定義時(shí),為了達(dá)到可視化的效果,都采用了流程定義用C/S來輔助。而java中

29、的applet技術(shù)恰恰可以實(shí)現(xiàn)在B/S下的繪圖,因此結(jié)合applet技術(shù)可以在B/S系統(tǒng)中直接嘗試流程的可視化定義研究。</p><p>  如何將上一小節(jié)的工作流定義轉(zhuǎn)變成B/S結(jié)構(gòu)下的OA系統(tǒng)可以具體運(yùn)行的程序?首先在數(shù)據(jù)庫(kù)中設(shè)計(jì)一組表單作為狀態(tài)的模板,用一XML文檔來保存流程圖形的狀態(tài),所有XML 文檔保存在一個(gè)數(shù)據(jù)庫(kù)XML表中。上層接口通過讀取并解釋數(shù)據(jù)庫(kù)中的XML文件來實(shí)現(xiàn)工作流程。來如何設(shè)計(jì)出有效的可

30、視化流程設(shè)計(jì)工具是本文的重點(diǎn)。</p><p>  2.2 java applet和applet繪圖技術(shù)的介紹</p><p>  2.2.1 applet的介紹</p><p>  Applet是使用Java語(yǔ)言編寫,可以在瀏覽器環(huán)境中運(yùn)行的小應(yīng)用程序。它與Application的區(qū)別主要在于其執(zhí)行方式的不同。application 是從其中的main() 方法開

31、始運(yùn)行的,而Applet 是在瀏覽器中運(yùn)行的。首先必須創(chuàng)建一個(gè)HTML 文件,通過編寫HTML語(yǔ)言代碼告訴瀏覽器載入何種Applet 以及如何運(yùn)行。就因?yàn)閍pplet能在瀏覽器里運(yùn)行的這一特點(diǎn),滿足了B/S結(jié)構(gòu)下的瀏覽器界面的需求,所以我們?yōu)檫x擇了applet作為可視化OA工作流程設(shè)計(jì)工具的開發(fā)工具。 </p><p>  小應(yīng)用程序的生命周期相對(duì)于Application而言較為復(fù)雜。在其生命周期中涉及到Appl

32、et類的四個(gè)方法(也被JApplet類繼承):init()、start()、stop()和destroy()。</p><p>  Applet的生命周期中有四個(gè)狀態(tài):初始態(tài)、運(yùn)行態(tài)、停止態(tài)和消亡態(tài)。當(dāng)程序執(zhí)行完init()方法以后,Applet程序就進(jìn)入了初始態(tài);然后馬上執(zhí)行start()方法,Applet程序進(jìn)入運(yùn)行態(tài);當(dāng)Applet程序所在的瀏覽器圖標(biāo)化或者是轉(zhuǎn)入其它頁(yè)面時(shí),該Applet程序馬上執(zhí)行sto

33、p()方法,Applet程序進(jìn)入停止態(tài);在停止態(tài)中,如果瀏覽器又重新裝載該Applet程序所在的頁(yè)面,或者是瀏覽器從圖標(biāo)中復(fù)原,則Applet程序馬上調(diào)用start()方法,進(jìn)入運(yùn)行態(tài);當(dāng)然,在停止態(tài)時(shí),如果瀏覽器關(guān)閉,則Applet程序調(diào)用destroy()方法,進(jìn)入消亡態(tài)。</p><p>  2.2.2 Applet的AWT繪制 </p><p>  Applet程序中所采用的AWT

34、的繪圖機(jī)制主要涉及三個(gè)方法:paint()方法、update()方法和repaint()方法,update()方法和paint()方法都有一個(gè)Graphics類參數(shù)。Graphics是畫圖的關(guān)鍵,它可以支持兩種繪圖:一種是基本的繪圖,如:畫線、矩形、圓等;另一種是畫圖象,主要用于動(dòng)畫制作。 </p><p>  要進(jìn)行繪圖,首先要找到一個(gè)Graphics類的對(duì)象。update()方法和paint()方法所傳遞的參

35、數(shù)都是Graphics類的對(duì)象,因此主要是通過重載它們來進(jìn)行繪圖,這是在動(dòng)畫程序中經(jīng)常使用的方法。我們還可以通過getGraphics()方法得到一個(gè)Graphics類的對(duì)象,這個(gè)對(duì)象和update()方法和paint()方法中所傳遞的對(duì)象一樣,都是該成員所對(duì)應(yīng)的Graphics類的對(duì)象。得到了Graphics類的對(duì)象,就可使用各種繪圖方法。 </p><p>  Graphics中提供的圖形繪制方法有: <

36、;/p><p>  paint( ) //進(jìn)行繪圖的具體操作,必須有程序員重寫 </p><p>  update( ) //用于更新圖形,先清除背景、前景,再調(diào)用paint() </p><p>  repaint( ) /*用于重繪圖形,在組件外形發(fā)生變化,即大小改變或位置移動(dòng)時(shí),repaint( )方法立即被系統(tǒng)自動(dòng)調(diào)用,而實(shí)際上repaint()方法是自動(dòng)調(diào)用u

37、pdate()方法*/ </p><p>  下面的方法支持基本的繪圖和畫圖像: </p><p>  void drawLine( ) //畫直線,void drawArc( ) //畫弧線,</p><p>  void drawPolygon( ) //畫多邊形,void drawRect( ) //畫矩形,</p><p>  vo

38、id drawRoundRect( ) //畫帶有圓角的矩形,</p><p>  void fill3DRect( ) //畫三維矩形,</p><p>  void fillOval( ) //畫橢圓,</p><p>  這些方法都是來自于java.awt.Graphics類 </p><p>  2.3系統(tǒng)環(huán)境與平臺(tái)基礎(chǔ)</

39、p><p>  OA可視化工作流設(shè)計(jì)工具在Java環(huán)境基礎(chǔ)上,后臺(tái)以Microsoft Office Access 2003為數(shù)據(jù)庫(kù)平臺(tái),前臺(tái)采用具有較強(qiáng)跨平臺(tái)性的Java Applet開發(fā)。具體環(huán)境描述如下:Microsoft Windows Server 2003;Microsoft Office Access 2003;jdk1.5.0_09;Eclipse 3.1。</p><p> 

40、 3 系統(tǒng)需求分析與總體設(shè)計(jì)</p><p><b>  3.1系統(tǒng)需求分析</b></p><p>  在最近幾年的各級(jí)單位的信息化改造建設(shè)中,隨著信息化基礎(chǔ)設(shè)施建設(shè)的逐漸完備,各類應(yīng)用系統(tǒng)開始受到各級(jí)單位的重視,開發(fā)重點(diǎn)主要側(cè)重于人事信息數(shù)字化、文書信息化、公文流轉(zhuǎn)、交互式審批等信息化可行性高的工作領(lǐng)域。 因此,改革傳統(tǒng)辦公模式,開展電子辦公,使業(yè)務(wù)辦公、公文流轉(zhuǎn)

41、和管理過程電子化、信息化,并通過統(tǒng)一辦公規(guī)范,提高工作效率降低辦公成本,實(shí)現(xiàn)辦公自動(dòng)化已勢(shì)在必行。 </p><p>  而上述所介紹的公文流轉(zhuǎn)的一個(gè)重要特征就是流程復(fù)雜,難以用標(biāo)準(zhǔn)的程序化語(yǔ)言解釋,因而公文流轉(zhuǎn)系統(tǒng)必須有與之相適應(yīng)的工作流程定義系統(tǒng),使操作人員能夠自主地設(shè)定公文流轉(zhuǎn)流程。為此我們?cè)O(shè)計(jì)了一個(gè)可視化流程設(shè)計(jì)工具,該工具可以作為工作流管理系統(tǒng)里的一個(gè)模塊。它具有圖形用戶界面,用戶定義與任務(wù)執(zhí)行完全分離

42、,其體系結(jié)構(gòu)基本上符合WFMC 標(biāo)準(zhǔn)結(jié)構(gòu)。用戶不需要程序員的支持就可以定義和設(shè)計(jì)出工作流程模型,根據(jù)該模型生成的文件可以非常方便地被解釋為上層接口所需的工作流。</p><p>  3.2 系統(tǒng)功能介紹</p><p>  可視化OA工作流程設(shè)計(jì)工具針對(duì)用戶的要求對(duì)工作流程進(jìn)行定制和維護(hù),主要包括:對(duì)接點(diǎn)、接點(diǎn)連接線可自由拖放。具備刪除節(jié)點(diǎn)、節(jié)點(diǎn)之間連接線功能。接點(diǎn)之間采用箭頭連接。接點(diǎn)采

43、用矩形表示。圖形內(nèi)容利用XML形式保存于的Access數(shù)據(jù)庫(kù)中,可查詢,編輯,保存,更多自定義屬性。</p><p>  通過對(duì)用戶需求的分析,要求本流程設(shè)計(jì)工具具有以下功能: </p><p>  (1)可視化的操作界面;</p><p>  (2)可以對(duì)流程節(jié)點(diǎn)和弧線進(jìn)行填加、修改、刪除操作; </p><p>  (3)工作流程支持串

44、簽、會(huì)簽和分支流程;</p><p>  (4)可以將圖形內(nèi)容保存于access數(shù)據(jù)庫(kù)或(xml)中,可查詢,編輯,保存;</p><p>  (5)可以通過流程模型解釋接口和引擎主程序提供給上層程序使用</p><p>  3.3 系統(tǒng)模塊功能和設(shè)計(jì)思想</p><p>  1994年11月,工作流管理聯(lián)盟發(fā)布了工作流管理系統(tǒng)的參考模型,該

45、模型定義了一個(gè)基本的工作流管理系統(tǒng)所需要的6個(gè)基本模塊:過程定義工具,工作流執(zhí)行服務(wù),其他工作流執(zhí)行服務(wù),客戶應(yīng)用程序,被調(diào)應(yīng)用程序,管理及監(jiān)控工具;并制定了個(gè)模塊之間的接口標(biāo)準(zhǔn)。</p><p>  流程設(shè)計(jì)工具與其系統(tǒng)交互的簡(jiǎn)單模塊關(guān)系圖:</p><p>  圖1 流程設(shè)計(jì)工具與其系統(tǒng)交互的簡(jiǎn)單模塊關(guān)系圖</p><p>  圖2 可視化流程設(shè)計(jì)工具的系統(tǒng)

46、關(guān)系圖</p><p>  可視化流程設(shè)計(jì)工具各模塊的功能描述和設(shè)計(jì)思想介紹:</p><p>  (1)繪圖模塊:可將需要設(shè)計(jì)的流程用此模塊畫出,利用java.awt來繪制節(jié)點(diǎn)和弧線;</p><p>  (2)圖象關(guān)系序列化模塊:可將已畫出流程中的節(jié)點(diǎn)和弧線序列化,利用接口java.io.Serializable就能實(shí)現(xiàn);</p><p>

47、;  (3)圖象關(guān)系保存模塊:可將序列化后的節(jié)點(diǎn)和弧線關(guān)系保存起來供上層流程定義解釋器使用。</p><p><b>  3.4數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  3.4.1 E-R圖設(shè)計(jì)</p><p>  實(shí)體關(guān)系圖(E-R圖)將系統(tǒng)中的數(shù)據(jù)模型以一種更加清楚、具體的方式展現(xiàn)出來。圖中方框代表實(shí)體,橢圓代表實(shí)體的屬性,實(shí)體和實(shí)體之間的關(guān)

48、系用菱形來表示。</p><p>  在工作流管理系統(tǒng)中,上層程序需要通過讀取保存在數(shù)據(jù)庫(kù)里流程的XML文件來實(shí)現(xiàn)流程的解釋和實(shí)例化。在對(duì)工作流進(jìn)行定義的工作中用到的E-R如下圖所示: </p><p><b>  圖3 E-R圖</b></p><p>  3.4.2 表的構(gòu)建</p><p>  表1 流程節(jié)點(diǎn)表(

49、flow_Node)</p><p>  表2 流程表(flowdata)</p><p>  3.4.3 數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)</p><p>  public Connection getConnection(){</p><p>  // now we can get the connection from the DriverManag

50、er</p><p>  Connection con = null;</p><p><b>  try {</b></p><p>  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); </p><p>  //驅(qū)動(dòng) set this to a MS

51、Access DB you have on your machine</p><p>  String filename = "/fileData.mdb";</p><p>  String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";</p>

52、<p>  database+= filename.trim() + ";DriverID=22;READONLY=true}"; </p><p>  // add on to the end </p><p>  con = DriverManager.getConnection( "jdbc:odbc:ccos" ,"

53、","");</p><p><b>  //數(shù)據(jù)源 </b></p><p>  } catch (ClassNotFoundException e) {</p><p>  // TODO Auto-generated catch block</p><p>  e.printStack

54、Trace();</p><p>  } catch (SQLException e) {</p><p>  // TODO Auto-generated catch block</p><p>  e.printStackTrace();</p><p><b>  } </b></p><p&g

55、t;  return con;</p><p><b>  } </b></p><p>  4 系統(tǒng)功能模塊實(shí)現(xiàn)</p><p>  4.1系統(tǒng)流程及圖示</p><p>  一個(gè)流程的設(shè)計(jì)是先通過繪圖來對(duì)實(shí)際業(yè)務(wù)過程進(jìn)行分析、建模,然后通過一定的技術(shù)生成所建立流程模型的可被上層接口處理的形式化描述。其流程如下圖:&l

56、t;/p><p><b>  圖4 系統(tǒng)流程圖</b></p><p>  4.2流程可視化設(shè)計(jì)實(shí)現(xiàn)</p><p>  4.2.1界面可視化</p><p>  這是工具開始運(yùn)行出現(xiàn)的第一個(gè)界面,由Internet Explorer瀏覽器打開,可以適應(yīng)B/S結(jié)構(gòu)的OA系統(tǒng)。</p><p>  圖

57、5 工具可視化界面</p><p>  界面的布局由BorderLayout來實(shí)現(xiàn),分北部、西部、中部三部分。</p><p><b>  包括:</b></p><p>  北部 控制板(ArcControls);</p><p>  西部 繪圖工具板(ToolBlank);</p><p> 

58、 中部 繪圖畫板 (ArcCanvas)。</p><p><b>  具體代碼實(shí)現(xiàn)如下:</b></p><p>  this.setLayout(borderLayout1);</p><p>  this.add(ArcControls,BorderLayout.NORTH);</p><p>  this.add

59、(ArcCanvas,BorderLayout.CENTER);</p><p>  this.add(ToolBlank, BorderLayout.WEST);</p><p>  4.2.2 繪圖功能設(shè)計(jì) </p><p>  當(dāng)設(shè)計(jì)一個(gè)流程時(shí),用戶點(diǎn)擊繪圖工作板中的繪制節(jié)點(diǎn)和繪制弧線兩個(gè)按鈕結(jié)合著選擇環(huán)節(jié)名,將指定的可視化部件拖

60、拉繪制在工作平臺(tái)上,每一個(gè)可視化部件代表一個(gè)角色,用流向箭頭將各個(gè)部件關(guān)聯(lián)起來。還可以對(duì)節(jié)點(diǎn)和弧線進(jìn)行修改和刪除。</p><p>  一個(gè)矩形節(jié)點(diǎn)的繪制,需要對(duì)它的各項(xiàng)屬性進(jìn)行定義,包括對(duì)它的起點(diǎn)坐標(biāo)、矩形的寬和高、矩形的邊框坐標(biāo)。以下是節(jié)點(diǎn)定義的簡(jiǎn)單描述: </p><p>  public class Node extends BaseObject{</p><p

61、>  int LeftUpNodeX;//定義頂點(diǎn)坐標(biāo)</p><p>  int LeftUpNodeY;</p><p>  private int starx; //定義起始點(diǎn),高,寬</p><p>  private int stary;</p><p>  private int Heigh;</p><

62、;p>  private int Width;</p><p>  private int MinX; //定義邊框</p><p>  private int MinY;</p><p>  private int MaxX;</p><p>  private int MaxY;</p><p>  Col

63、or color; //定義外框顏色</p><p>  String NodeName="";//節(jié)點(diǎn)名稱</p><p><b>  }</b></p><p><b>  繪制節(jié)點(diǎn):</b></p><p>  g.drawRect(this.starx,this.sta

64、ry,this.Width,this.Height);//畫矩形</p><p>  g.drawString(this.NodeName,this.starx+this.Width/3,this.stary+Height/2);//畫節(jié)點(diǎn)名</p><p><b>  拖動(dòng)節(jié)點(diǎn):</b></p><p>  public void SetNo

65、deMoved(int x,int y){</p><p>  this.starx = x;</p><p>  this.stary = y;</p><p>  this.MinX = starx;</p><p>  this.MinY = stary;</p><p>  this.MaxX = starx

66、+ Width;</p><p>  this.MaxY = stary + Height;</p><p><b>  }</b></p><p>  拖動(dòng)節(jié)點(diǎn)時(shí)鼠標(biāo)動(dòng)態(tài):</p><p>  public void mouseDragged(MouseEvent e) { //鼠標(biāo)拖動(dòng)</p><

67、p>  int x = e.getX();</p><p>  int y = e.getY();</p><p>  switch(status){</p><p><b>  case 1:</b></p><p>  if (this.NodeIFinit == true) {</p><

68、p>  node = new Node(e.getX(), e.getY(),CurrentNodeName);</p><p>  this.NodeObject.add(node);</p><p>  this.IfDrag = true;</p><p>  this.NodeIFinit = false;</p><p>  

69、repaint();</p><p><b>  }</b></p><p><b>  else {</b></p><p>  if (IfDrag == true) {</p><p>  if (node != null) {</p><p>  node.SetHe

70、ightAndWidth(x, y);</p><p>  repaint();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else {</b></p><p>  if (SelectN

71、odeDrag == true) {</p><p>  node.SetNodeMoved(x, y);</p><p>  node.DrawMyself(this.getGraphics());</p><p>  repaint();</p><p><b>  }</b></p><p>

72、;<b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

73、;  節(jié)點(diǎn)與節(jié)點(diǎn)之間需要用弧線進(jìn)行連接。一段弧線需要對(duì)它的起點(diǎn)坐標(biāo)、終點(diǎn)坐標(biāo)等屬性進(jìn)行定義。以下是弧線定義的簡(jiǎn)單描述:</p><p><b>  弧線定義:</b></p><p>  public class Arc {</p><p>  private int endx; //結(jié)束坐標(biāo)</p><p>  pri

74、vate int endy;</p><p>  private int startx;//起點(diǎn)坐標(biāo)</p><p>  private int starty;</p><p>  private int[] SelectedNode = new int[2];//選擇節(jié)點(diǎn)</p><p>  private Vector Point;//點(diǎn)

75、元素</p><p>  private Color color;</p><p>  private boolean ArcEnd;//判斷弧段是否結(jié)束增加節(jié)點(diǎn)</p><p>  public Arc(int x,int y) {</p><p>  Point = new Vector();</p><p>  

76、int[] star = new int[2];//點(diǎn)由2元素(x,y)組成</p><p>  star[0] = x;</p><p>  star[1] = y;</p><p>  this.startx = x;</p><p>  this.starty = y;</p><p>  this.Point.

77、addElement(star);</p><p>  this.color = Color.BLACK;</p><p>  this.ArcEnd = false;</p><p><b>  }</b></p><p><b>  繪制弧線:</b></p><p> 

78、 public void DrawMyself(Graphics g){</p><p>  int length = Point.size();</p><p>  g.setColor(color);</p><p>  if (length > 0) {</p><p>  System.out.println("Arc

79、 node size:" + length);</p><p>  if (length == 1) { }</p><p><b>  else {</b></p><p>  for (int i = 0; i < length - 1; i++) {</p><p>  int[] Spoint =

80、 (int[]) Point.elementAt(i);</p><p>  int[] Epoint = (int[]) Point.elementAt(i + 1);</p><p>  g.drawLine(Spoint[0], Spoint[1], Epoint[0], Epoint[1]);</p><p><b>  }</b>&l

81、t;/p><p><b>  弧線拖動(dòng):</b></p><p>  public void mouseDragged(MouseEvent e) { //鼠標(biāo)拖動(dòng)</p><p>  int x = e.getX();</p><p>  int y = e.getY();</p><p>  s

82、witch(status){ </p><p><b>  case 3:</b></p><p>  if (SelectArcDrag == true) {</p><p>  if ( (arc != null) && (arcNodeindex != -1)) {</p><p>  arc.Se

83、tSelectedNode(arcNodeindex, x, y);</p><p>  repaint();</p><p>  }else if((arc != null)&&(arcNodeindex == -1)){//選中的是最后一個(gè)不再Vetor里面的點(diǎn)</p><p>  arc.SetSelectedNode(x, y);</p

84、><p>  repaint();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><

85、p><b>  }</b></p><p><b>  畫箭頭:</b></p><p>  int[] lastpoint = (int[]) Point.elementAt(length - 1);</p><p>  g.drawLine(lastpoint[0], lastpoint[1], this.end

86、x, this.endy); //畫箭頭</p><p>  if((lastpoint[0] == endx)&&(lastpoint[1]<endy))//開口向下</p><p><b>  {</b></p><p>  g.drawLine(endx,endy,endx+3,endy-3);</p>

87、<p>  g.drawLine(endx,endy,endx-3,endy-3);</p><p>  }else if((lastpoint[0] == endx)&&(lastpoint[1]>endy)){ //開口向上</p><p>  g.drawLine(endx,endy,endx+3,endy+3);</p><p&

88、gt;  g.drawLine(endx,endy,endx-3,endy+3);</p><p>  }else if((lastpoint[1] == endy)&&(lastpoint[0]>endx)){//開口向左</p><p>  g.drawLine(endx,endy,endx+3,endy-3);</p><p>  g.d

89、rawLine(endx,endy,endx+3,endy+3);</p><p>  }else if((lastpoint[1] == endy)&&(lastpoint[0]<endx)){//開口向右</p><p>  g.drawLine(endx,endy,endx-3,endy-3);</p><p>  g.drawLine(

90、endx,endy,endx-3,endy+3);</p><p>  }else{//任意方向用點(diǎn)代替</p><p>  g.fillOval(endx-2,endy-2,5,5);</p><p><b>  }</b></p><p>  if ( (SelectedNode[0] != 0) &&

91、; (SelectedNode[1] != 0)) {</p><p>  g.setColor(Color.BLUE);</p><p>  g.fillOval(SelectedNode[0]-2,SelectedNode[1]-2,5,5);</p><p><b>  }</b></p><p><b>

92、;  刪除節(jié)點(diǎn):</b></p><p>  public void DeleteSelectedNode() {</p><p>  if (haveSelectedNode == true) {</p><p>  this.NodeObject.removeElementAt(nodeindex);</p><p>  th

93、is.haveSelectedNode = false;</p><p>  repaint();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  刪除弧線 : </b></p><p>  p

94、ublic void DeleteSelectedArc() {</p><p>  if (haveSelectedArc == true) {</p><p>  this.ArcObject.removeElementAt(arcindex);</p><p>  this.haveSelectedArc = false;</p><p&g

95、t;  repaint();</p><p><b>  }</b></p><p><b>  }</b></p><p>  下圖為一設(shè)計(jì)好了的流程圖:</p><p>  圖6 一個(gè)設(shè)計(jì)好的工作流程圖</p><p>  4.2.3 流程圖保存和讀取方法設(shè)計(jì)</

96、p><p>  將序列化后的節(jié)點(diǎn)與弧線的對(duì)象保存為xml文件,易于保存和重繪。</p><p>  序列化是將對(duì)象寫到流中,序列化需要對(duì)象實(shí)現(xiàn)Serializable接口,序列化后能將對(duì)象轉(zhuǎn)換成一系列字節(jié),并可在以后完全復(fù)原。序列化可以實(shí)現(xiàn)“有限持久化”。</p><p>  在保存前先要對(duì)已經(jīng)繪出的節(jié)點(diǎn)以及弧線進(jìn)行屬性采集,我們用一個(gè)NodeBean以及ArcBean

97、方法來實(shí)現(xiàn)其功能,NodeBean的代碼描述如下:</p><p>  public class NodeBean implements java.io.Serializable{}</p><p>  public NodeBean(){</p><p><b>  }</b></p><p>  String Lef

98、tUpNodeX; //定義頂點(diǎn)坐標(biāo)</p><p>  String LeftUpNodeY;</p><p>  private String MinX;//定義邊框</p><p>  private String MinY;</p><p>  private String MaxX;</p><p>  pr

99、ivate String MaxY;</p><p>  Color color; //定義外框顏色</p><p>  String NodeName="";//節(jié)點(diǎn)名稱</p><p>  public String getNodeName() {</p><p>  return NodeName;</p>

100、;<p><b>  }</b></p><p>  public void setNodeName(String nodeName) {</p><p>  NodeName = nodeName;</p><p><b>  }</b></p><p>  public Color

101、 getColor() {</p><p>  return color;</p><p><b>  }</b></p><p>  public void setColor(Color color) {</p><p>  this.color = color;</p><p><b&g

102、t;  }</b></p><p>  public String getLeftUpNodeX() {</p><p>  return LeftUpNodeX;</p><p><b>  }</b></p><p>  public void setLeftUpNodeX(String leftUpNo

103、deX) {</p><p>  LeftUpNodeX = leftUpNodeX;</p><p><b>  }</b></p><p>  public String getLeftUpNodeY() {</p><p>  return LeftUpNodeY;</p><p><

104、b>  }</b></p><p>  public void setLeftUpNodeY(String leftUpNodeY) {</p><p>  LeftUpNodeY = leftUpNodeY;</p><p><b>  }</b></p><p>  public String ge

105、tMaxX() {</p><p>  return MaxX;</p><p><b>  }</b></p><p>  public void setMaxX(String maxX) {</p><p>  MaxX = maxX;</p><p><b>  }</b&g

106、t;</p><p>  public String getMaxY() {</p><p>  return MaxY;</p><p><b>  }</b></p><p>  public void setMaxY(String maxY) {</p><p>  MaxY = maxY;

107、</p><p><b>  }</b></p><p>  public String getMinX() {</p><p>  return MinX;</p><p><b>  }</b></p><p>  public void setMinX(String m

108、inX) {</p><p>  MinX = minX;</p><p><b>  }</b></p><p>  public String getMinY() {</p><p>  return MinY;</p><p><b>  }</b></p>

109、<p>  public void setMinY(String minY) {</p><p>  MinY = minY;</p><p><b>  }</b></p><p>  將流程圖中節(jié)點(diǎn)的屬性對(duì)象進(jìn)行采集以后,通過調(diào)用</p><p>  ObjectToXMLUtil.objectXmlE

110、ncoder方法可以對(duì)節(jié)點(diǎn)和弧段進(jìn)行保存,以下代碼是對(duì)節(jié)點(diǎn)的保存,描述如下:</p><p>  Vector v = new Vector();</p><p>  Vector temp = this.canvas.getNodeObject();</p><p>  for(int i=0;i<temp.size();i++){//通過NODEBEAN存

111、儲(chǔ)</p><p>  Node o = (Node)temp.elementAt(i);</p><p>  NodeBean bean = new NodeBean();</p><p>  bean.setNodeName(o.NodeName);</p><p>  bean.setLeftUpNodeX(o.getLeftUpNod

112、eX()+"");</p><p>  bean.setLeftUpNodeY(o.getLeftUpNodeY()+"");</p><p>  bean.setMaxX(o.GetMaxX()+"");</p><p>  bean.setMaxY(o.GetMaxY()+"");&

113、lt;/p><p>  bean.setMinX(o.GetMinX()+"");</p><p>  bean.setMinY(o.GetMinY()+"");</p><p>  v.add(bean); </p><p><b>  }</b></p><p

114、>  String nodeFile = "nodeData"+System.currentTimeMillis()+".xml";</p><p>  ObjectToXMLUtil.objectXmlEncoder( v ,nodeFile );</p><p>  對(duì)弧線的屬性采集類ArcBean相關(guān)的代碼描述如下:</p>

115、<p>  public class ArcBean implements java.io.Serializable{}</p><p>  private String endx;</p><p>  private String endy;</p><p>  private String startx;</p><p>  

116、private String starty;</p><p>  public ArcBean(){//返回值</p><p><b>  } </b></p><p>  public String getEndx() {</p><p>  return endx;</p><p><b

117、>  }</b></p><p>  public void setEndx(String endx) {</p><p>  this.endx = endx;</p><p><b>  }</b></p><p>  public String getEndy() {</p><

118、;p>  return endy;</p><p><b>  }</b></p><p>  public void setEndy(String endy) {</p><p>  this.endy = endy;</p><p><b>  }</b></p><p

119、>  public String getStartx() {</p><p>  return startx;</p><p><b>  }</b></p><p>  public void setStartx(String startx) {</p><p>  this.startx = startx;&l

120、t;/p><p><b>  }</b></p><p>  public String getStarty() {</p><p>  return starty;</p><p><b>  }</b></p><p>  public void setStarty(Stri

121、ng starty) {</p><p>  this.starty = starty;</p><p><b>  }</b></p><p>  將流程圖中弧線的屬性對(duì)象進(jìn)行采集以后,通過調(diào)用</p><p>  ObjectToXMLUtil.objectXmlEncoder方法可以對(duì)節(jié)點(diǎn)和弧段進(jìn)行保存,以下代碼是

122、對(duì)節(jié)點(diǎn)的保存,描述如下:</p><p>  Vector line = new Vector();</p><p>  Vector lineTemp = this.canvas.getArcObject();</p><p>  for(int i=0;i<lineTemp.size();i++){</p><p>  Arc o

123、= (Arc)lineTemp.elementAt(i);</p><p>  ArcBean bean = new ArcBean();</p><p>  bean.setStartx(o.getStartx()+"");</p><p>  bean.setStarty(o.getStarty()+"");</p&

124、gt;<p>  bean.setEndx(o.getEndx()+"");</p><p>  bean.setEndy(o.getEndy()+"");</p><p>  line.add(bean); </p><p><b>  }</b></p><p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論