版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)論文</b></p><p> 通用的Web信息管理系統(tǒng)框架</p><p> 專業(yè)名稱: 計算機科學與技術 </p><p><b> 摘要</b></p><p> 在Web數(shù)據(jù)庫應用系統(tǒng)(如MIS、ERP、CRM等)的開發(fā)中,軟件開發(fā)人員往往要面臨重復
2、編寫一些簡單的、令人乏味的代碼的問題,而且每當新需求來臨的時候, 又不得不一再重復以前的工作。但是在面向對象的編程中,實際情況是,一旦項目開發(fā)的整體框架和需求或是數(shù)據(jù)模型確定時,很多與項目相關的工作都可以自動生成。為了使編程人員從繁復的代碼開發(fā)中解放出來,基于MDA 的代碼生成技術很好的解決了這些問題?;贛DA 的代碼生成技術就是一個專注于解放編碼生產(chǎn)力,用程序來編程的研究方向。</p><p> 系統(tǒng)使用M
3、icrosoft Visual Studio 2008為主要開發(fā)工具。畢業(yè)設計為一個asp.net三層架構的Web應用開發(fā)了一個基于Xml技術軟件項目生成系統(tǒng),生成的產(chǎn)品包括了項目源代碼、數(shù)據(jù)庫、項目文檔。在軟件開發(fā)人員平時的開發(fā)中,當系統(tǒng)的需求分析和開發(fā)使用的軟件框架確定后,采用此軟件項目生成系統(tǒng),就可以快速生成基于Web系統(tǒng)框架的軟件(包括了對數(shù)據(jù)實體的添加、修改、刪除、下載等通用操作)。軟件項目生成系統(tǒng),是在微軟的WPF框架而開發(fā)
4、,使用了Ribbon界面,迎合了當代軟件界面的趨勢。WPF框架做到了分離界面設計人員與開發(fā)人員的工作,提供了全新的多媒體交互用戶圖形界面,可以迅速開發(fā)出絢麗的界面。</p><p> 在基于MDA技術的軟件生成的研究的理論基礎上,本文結合一個穩(wěn)定的asp.net Web三層框架,最終設計出基于Xml軟件項目生成系統(tǒng)。論文分五個部分詳細闡述了軟件項目生成系統(tǒng)從設計到實現(xiàn)的全過程。第一部分簡要敘述了軟件項目生成系統(tǒng)
5、的背景、現(xiàn)狀以及用到的核心技術;第二部分詳細描述了系統(tǒng)的功能需求以及可行性;第三部分闡述了系統(tǒng)模塊設計以及數(shù)據(jù)設計;第四部分詳細討論了系統(tǒng)核心功能的實現(xiàn);第五部分簡述了系統(tǒng)測試,包括黑盒測試和白盒測試。</p><p> 關鍵詞:MDA;WPF;代碼生成器;Asp.net</p><p><b> ABSTRACT</b></p><p>
6、 In a Web database application system (such as MIS, ERP, CRM, etc.) development, the software developers are often repeat to write some simple, boring code problem, and when new requirements come, and have to repeat pre
7、vious work. But in object-oriented programming, the reality is, once the project development or data model to determine the overall framework and demand a lot of project related work can be generated automatically. A pro
8、grammer from heavy and complicated to make code development, c</p><p> System uses Microsoft Visual Studio 2008 as main development tools. Graduation design is an asp.net three layer architecture of Web app
9、lications which has developed a software program generating system based on Xml technology, the generated products including the project source code, database, project documentation. During the development of software de
10、velopers at ordinary times, when the development of the use of system requirement analysis and software framework is determined, using the softwa</p><p> Based on MDA technology research based on the theory
11、 of generated by the software, this paper combined with a stable asp.net Web three layers framework, final design based on Xml software projects generating system. Paper is divided into five parts in detail elaborated th
12、e software project during the process of production system from design to implementation. The first part briefly describes the background of a software project, the present situation as well as the use of core technology
13、; The se</p><p> Key words: the MDA; WPF; The code generator; ASP.NET </p><p><b> 目 錄</b></p><p><b> 1緒論1</b></p><p><b> 1.1背景2</
14、b></p><p><b> 1.2意義2</b></p><p> 1.3系統(tǒng)開發(fā)工具及相關核心技術3</p><p> 1.3.1 開發(fā)工具3</p><p> 1.3.2 核心技術4</p><p><b> 2用戶需求分析5</b><
15、/p><p><b> 2.1需求描述5</b></p><p><b> 2.2需求分析5</b></p><p> 2.2.1 可行性分析5</p><p> 2.2.2 WEB架構分析6</p><p> 2.2.3 數(shù)據(jù)庫及項目文檔分析7</p&
16、gt;<p><b> 2.3需求設計7</b></p><p> 3系統(tǒng)總體設計11</p><p> 3.1體系結構設計11</p><p> 3.2 數(shù)據(jù)設計13</p><p> 3.2.1 數(shù)據(jù)模型實體13</p><p> 3.2.2設計模式15&
17、lt;/p><p> 4系統(tǒng)詳細設計與實現(xiàn)17</p><p> 4.1 Web三層架構模板的抽象17</p><p> 4.2 Ribbon界面的實現(xiàn)19</p><p> 4.3系統(tǒng)流程分析20</p><p> 4.3.1 內存共享20</p><p> 4.3.2數(shù)據(jù)庫
18、生成流程22</p><p> 4.3.3文檔生成流程24</p><p> 4.3.4代碼生成流程26</p><p><b> 5系統(tǒng)測試30</b></p><p> 5.1測試基礎30</p><p> 5.2黑盒測試30</p><p>
19、5.2.1 輸出源代碼及數(shù)據(jù)庫測試30</p><p> 5.2.1 輸出文檔測試32</p><p><b> 結束語33</b></p><p><b> 致 謝34</b></p><p><b> 參考文獻35</b></p><p
20、> 通用的Web信息管理系統(tǒng)框架</p><p><b> 1緒論</b></p><p> 軟件開發(fā)的高效性、簡便性一直受到學術界和軟件業(yè)界的高度重視,軟件的自動生成更是業(yè)界努力發(fā)展的目標。1968 年Mcllroy 在的NATO 軟件工程會議論文《大量生產(chǎn)的軟件構件》中,第一次提出了“軟件組裝生產(chǎn)線”的思想。從那年開始,采用構件技術實現(xiàn)軟件復用,并以“
21、搭積木” 的方式來生產(chǎn)軟件,成為軟件開發(fā)人員長期的夢想。</p><p> 軟件復用與軟件構件技術的研究,最大程度地利用了已有設計成果。在軟件工程的發(fā)展過程中,許許多多的計算機科學家為了降低軟件開發(fā)強度,縮短軟件開發(fā)周期,減少軟件代碼的重復書寫,從而減輕程序員的編碼負擔, 一直以來都致力于代碼自動生成方面的研究。</p><p> 代碼生成可以歸為下列形式:代碼重塑,內聯(lián)代碼展開,混合
22、代碼生成,局部類生成,層次化生成,全領域語言描述等?,F(xiàn)存的代碼生成工具為自動生成代碼提供了大量的解決方案。但是,如果把這些方案和已有的系統(tǒng)進行集成會遇到很多困難。另外,雖然各種技術層出不窮,但都是基于傳統(tǒng)的代碼生成方法,即代碼生成和模型設計脫離;對模型驅動架構(Model-Driven Architecture, MDA)的研究多半基于模型轉換,很少有模型到代碼轉換的研究與實現(xiàn)。本文的重點在于后者的研究也實現(xiàn),最終的目標是生成項目源代碼
23、以及相關的文檔和數(shù)據(jù)庫。</p><p> MDA 的主要思想是分離業(yè)務功能分析設計和實現(xiàn)技術平臺之間緊耦合的關系,從而將技術與平臺變化對系統(tǒng)的影響降到最低。一個MDA 的應用是從建立平臺無關模型(Platform Independent Model, PIM)開始,然后使用相應的轉換工具,結合具體技術,將PIM 映射為特定平臺上的平臺相關模型(Platform Specific Model, PSM),最后通
24、過這個特定平臺上的PSM,使用代碼生成器自動生成全部或部分特定平臺上的程序代碼。在實際應用中,代碼生成器也可以直接根據(jù)PIM 生成程序代碼。</p><p> PIM 的核心是企業(yè)的業(yè)務模型。在ERP 中,業(yè)務模型的核心是過程視圖,而每一個業(yè)務過程可看作是一系列業(yè)務活動的組合。業(yè)務活動包括所處理的業(yè)務對象的屬性、作用于業(yè)務對象內部的操作及處理業(yè)務對象間關系的操作3個部分。如果能夠建立靈活的業(yè)務對象及其操作模型,
25、就可以實現(xiàn)ERP 系統(tǒng)的敏捷性。從業(yè)務對象模型的結構考慮,模型包含穩(wěn)定部分和頻繁變化部分。穩(wěn)定部分包括業(yè)務對象(包含屬性、內部狀態(tài)等要素)及處理業(yè)務對象內部邏輯的操作(稱為簡單操作,如采購需求單的新增、審核等操作),穩(wěn)定部分在系統(tǒng)建模時很容易得到且很少變化。頻繁變化部分是實現(xiàn)業(yè)務對象之間關聯(lián)的業(yè)務操作(稱為復合操作,如由采購需求單生成采購訂單)。本文基于穩(wěn)定部分和頻繁變化部分分離的思想,把復合操作與業(yè)務對象本身分離,分別建立PIM,再由
26、代碼生成器生成各自的代碼,最后加以組裝形成完整的業(yè)務對象處理程序。</p><p><b> 1.1背景</b></p><p> 隨著互聯(lián)網(wǎng)技術的飛速發(fā)展,越來越多的企業(yè)利用互聯(lián)網(wǎng)技術來實現(xiàn)自己的業(yè)務系統(tǒng),許多企業(yè)都要求建立基于Web業(yè)務系統(tǒng)或將現(xiàn)有的業(yè)務系統(tǒng)改造成基于Web形式??蛻舳瞬僮鹘缑娴囊恢滦砸约胺掌鞫讼到y(tǒng)維護的簡便性和基于標準的連接方案,大大加強了
27、企業(yè)與外部的聯(lián)系。同時,動態(tài)的、交互式的信息發(fā)布改進了企業(yè)的服務質量,增加企業(yè)的商業(yè)機會。</p><p> 雖然這些Web業(yè)務系統(tǒng)因具體業(yè)務不同,在業(yè)務邏輯上會有所不同,但從軟件開發(fā)的角度看,這些軟件應用系統(tǒng)的開發(fā)過程是相似的。當前,在開發(fā)這些基于Web業(yè)務系統(tǒng)時,軟件開發(fā)人員不斷重復著一些不必要而且浪費很多時間的技術性勞動。如果能夠按照一定的方法和流程,自動的生成全部或者大部分的業(yè)務系統(tǒng)代碼,一方面能夠縮短
28、軟件項目開發(fā)周期,降低成本,另一方面,能夠解放開發(fā)人員的生產(chǎn)力,提高軟件產(chǎn)品的設計質量。因此,基于Web業(yè)務系統(tǒng)代碼自動生成技術越來越引起業(yè)界的重視。</p><p> 為了簡化基于Web業(yè)務系統(tǒng)的開發(fā),一些公司先后提出了一些開發(fā)框架,如Struts、Hibernate、Ruby on Rails等,這些開發(fā)框架可以有效提高系統(tǒng)的開發(fā)效率,但是由于其未充分考慮實際系統(tǒng)的業(yè)務邏輯,因此要求開發(fā)人員至少進行基于某種
29、腳本語言的開發(fā),當系統(tǒng)的業(yè)務功能龐雜且用戶需求變化很快時,系統(tǒng)的開發(fā)周期與所開發(fā)代碼的質量仍很難滿足實際需要。</p><p><b> 1.2意義</b></p><p> 在以數(shù)據(jù)庫為核心的業(yè)務系統(tǒng)中,相當一部分業(yè)務屬于錄入、編輯、刪除、查詢或基于上述基本功能的組合業(yè)務模式。因此,基本業(yè)務系統(tǒng)是業(yè)務系統(tǒng)的基礎,基本業(yè)務系統(tǒng)的質量直接決定了最終的業(yè)務系統(tǒng)的質量。
30、</p><p> 基本業(yè)務系統(tǒng)都是以對數(shù)據(jù)庫信息的操作為核心,在基本業(yè)務系統(tǒng)的開發(fā)過程中,每種基本業(yè)務的業(yè)務邏輯存在著很多相似的地方。目前,在開發(fā)基本業(yè)務系統(tǒng)時,軟件開發(fā)人員不斷重復著一些不必要且耗時的技術性勞動;另一方面,這類系統(tǒng)用戶需求變化很快,如何縮開發(fā)周期并應對用戶對系統(tǒng)需求的快速變和后期維護中最大難題。</p><p> 在這些業(yè)務系統(tǒng)的開發(fā)過程中,特別是對基本業(yè)務的開發(fā)存
31、在很多重復的勞動。本文決定在為企業(yè)開發(fā)基于Web業(yè)務系統(tǒng)時,以突出代碼重用性為重點,并且為達到這個目標設計和開發(fā)一套基本業(yè)務代碼生成平臺,用于業(yè)務系統(tǒng)中基本業(yè)務系統(tǒng)的設計和開發(fā)。本次研究定位為基于.NET平臺的基本業(yè)務的自動生成。實際客戶需求千變萬化,但仍然具有一定規(guī)則和相同之處。開發(fā)人員在開發(fā)不同系統(tǒng)時,有大量重復工作,浪費大量人力。因為機械的重復編碼工作對人力資源的大量消耗,設計和開發(fā)人員沒有足夠時間和精力研究客戶需求。.NET的技
32、術已日趨成熟,其優(yōu)異的性能幫助軟件工作者解決了很多棘手的問題。</p><p> 1.3系統(tǒng)開發(fā)工具及相關核心技術</p><p> 1.3.1 開發(fā)工具</p><p> 系統(tǒng)開發(fā)環(huán)境的選擇對于系統(tǒng)的建立來說至關重要,它將決定著系統(tǒng)開發(fā)工作量的大小,系統(tǒng)的性能特點以及系統(tǒng)今后的維護工作難易等。因此在開發(fā)系統(tǒng)之前,應該對系統(tǒng)所采用的技術、實現(xiàn)功能進行評估,在選
33、擇開發(fā)環(huán)境時,主要考慮因素有擴展性,總成本,是否容易開發(fā)與管理,另外開放性和互操作性也是需要考慮的一個重要方面。因為該系統(tǒng)是運行WindowsNT系統(tǒng)上的,用戶平臺的差異決定了與其它系統(tǒng)的互操作性是不可避免的。</p><p> 系統(tǒng)基于.NET平臺開發(fā),其主要開發(fā)工具為Microsoft Visual Studio2008。.NET為全球著名軟件公司Microsoft公司為新一代軟件開發(fā)商提供的全新的開發(fā)平臺
34、,具有安全、高效、便捷的特點。</p><p> Microsoft.NET技術框架是一個新的開發(fā)平臺,它為局域網(wǎng)(LAN)和Internet上的分布式企業(yè)應用提供了一致和有效的支持。該平臺的關鍵特性包括:統(tǒng)一的、語言無關的、面向對象開發(fā)環(huán)境。它充分利用開發(fā)者已有的編程知識無沖突軟件部署,避免組件的版本沖突豐富的可執(zhí)行模式,與存儲位置無關,組件可以在本地存儲執(zhí)行,或者遠程存儲本地執(zhí)行,或者在Internet上遠
35、程存儲執(zhí)行安全代碼執(zhí)行,具有高級安全設置以滿足現(xiàn)代組織的安全需求,Windows和Web應用程序具有統(tǒng)一的編程環(huán)境,通過在各自環(huán)境中高效的代碼編譯提升Windows和Web應用程序的執(zhí)行性能兼容的通信標準,確保.NET應用程序可以與其它應用程序和其它平臺的應用程序共存和集成。</p><p> 1.3.2 核心技術</p><p> 可擴展標記語言 (Extensible Markup
36、 Language, XML) ,用于標記電子文件使其具有結構性的標記語言,可以用來標記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標記語言進行定義的源語言。 XML是標準通用標記語言(SGML) 的子集,非常適合 Web 傳輸。XML 提供統(tǒng)一的方法來描述和交換獨立于應用程序或供應商的結構化數(shù)據(jù)。XML與HTML的設計區(qū)別是:XML的核心是數(shù)據(jù),其重點是數(shù)據(jù)的內容。而HTML 被設計用來顯示數(shù)據(jù),其重點是數(shù)據(jù)的顯示。</p>
37、<p> 微軟的.NET框架可以用來快速構建企業(yè)解決方案。在.NET類庫中提供了對XML操作的多種方法,包括文檔對象模型(DOM)、XML框架、流式讀寫XML,可擴展的樣式轉化(XSLT)、XML序列化與反序列化等較為完善的XML支持。.NET 2.0框架提供了內存中處理XML的兩種方式,分別為XmlDocument類和XPathNavigator類。前者基于W3C DOM第1級核心和第2級核心的建議。后者使用XPath
38、數(shù)據(jù)模型,在內存中提供XML文檔的快速只讀形式,在一定場合下還可以用于選擇計算、瀏覽、編輯XML數(shù)據(jù)。.NET中提供了一些類可以從XML文檔實例推斷出相應的XML架構結構,以便于自動生成效驗XML數(shù)據(jù)的架構。XML序列化和反序列化是溝通面向對象編程領域的利器。.NET中的XML序列化與Java等語言的序列化概念不同。Java中的XML序列化是將內存中的XML模型輸出到磁盤、網(wǎng)絡輸出流或其他對象中。而.NET中的XML序列化是將.NET對
39、象的公共字段、屬行或方法的參數(shù)和返回值轉換為XML形式數(shù)據(jù),而反序列化即將XML形式數(shù)據(jù)構造類或結構的實例對象。.NET提供的XML技術并不局限于</p><p> 本畢業(yè)設計中主要使用了XML的序列化以及反序列化以及可擴展的樣式轉化(XSLT)相關的技術。對這些技術的應用貫穿設計的始終。相關的其他XML技術都有或多或少的涉及。</p><p><b> 2用戶需求分析<
40、;/b></p><p> 軟件需求是數(shù)據(jù)庫信息管理開發(fā)的第一步,對于用戶需求的準確分析和定位能為以后的開發(fā)打下一個堅實的基礎。需求分析就是描述系統(tǒng)的需求,通過定義系統(tǒng)中的關鍵域進一步建立模型。分析的根本目的是在開發(fā)者和提出需求的人之間建立一座理解和溝通的橋梁,通過了解用戶的實際業(yè)務流程和數(shù)據(jù)流程來達到與客戶需求的契合。</p><p> 本系統(tǒng)面向的用戶主要是有一定開發(fā)經(jīng)驗的軟
41、件開發(fā)者,包括軟件設計人員、軟件架構人員、軟件工程管理人員、程序員。本系統(tǒng)的實現(xiàn)將有助于更高效的管理軟件開發(fā)過程,以解決軟件開發(fā)中很多繁復瑣碎環(huán)節(jié)中常遇到的問題。系統(tǒng)的輸出產(chǎn)品包括源代碼、項目文檔、數(shù)據(jù)庫。</p><p><b> 2.1需求描述</b></p><p> 通用的Web信息管理系統(tǒng)框架,主要解決的問題包括:1 開發(fā)過程中部分代碼需要重復使用,分散
42、了軟件開發(fā)人員尤其是程序員的大部分精力;2 由于項目開發(fā)時間緊張或其他問題,很多開發(fā)中需要的文檔沒有時間書寫,同時加上公司人事的頻繁調動,導致后期無法有效維護軟件項目。3 在.net方面還比較完善、開源的asp.net框架,數(shù)據(jù)庫的設計與代碼的設計分離,降低軟件開發(fā)的效率。</p><p> 本畢業(yè)設計需要解決以上提到軟件開發(fā)中亟待解決的問題。本畢業(yè)設計需要做到,把軟件設計人員做的需求分析,包括軟件實體的ER圖
43、所表達的信息轉化為數(shù)據(jù)模型,輸入本系統(tǒng),然后經(jīng)過本系統(tǒng)的加工處理,輸出軟件項目中的產(chǎn)品包括程序源代碼、項目文檔以及數(shù)據(jù)庫。同時輸出的源代碼基于特定的Web框架,生成的源代碼主要實現(xiàn)了對數(shù)據(jù)庫中表中數(shù)據(jù)的添加、修改、刪除、瀏覽、下載等操作以及在Web頁面展示時分頁顯示等功能。通過本系統(tǒng),可以將開發(fā)人員從繁復的工作中解脫出來,將精力用在關鍵技術的開發(fā)中,提高軟件開發(fā)的工作效率。</p><p><b>
44、2.2需求分析</b></p><p> 2.2.1 可行性分析</p><p> 系統(tǒng)的實現(xiàn)需要用到代碼生成技術,查詢相關資料收集到如下代碼生成技術實現(xiàn)的方法。</p><p> 第一種方法是在Windows Form 的代碼中包含全部的模型邏輯、控制器邏輯、視圖邏輯;第二種方法是表示層采用服務器視圖模板引擎的MVC 結構,如JSP 視圖引擎、A
45、SP、ASPX、PHP 等服務器視圖引擎;第三種方法是與Code Smith 類似,自行開發(fā)一個視圖模板引擎,然后基于該模板引擎實現(xiàn)一個MVC 的代碼生成器;第四種方法是基于開源模板引擎Velocity,String Template 建造一個MVC 的代碼生成器;第五種方法是基于流行的動態(tài)語言開發(fā)一個代碼生成器,這些語言可以是ruby、python 等;第六種方法是視圖引擎采用Velocity、String Template 等開源引
46、擎,控制器引擎采用JAVA、NET 接口采用動態(tài)語言,利用動態(tài)語言把模板引擎和控制器引擎有機地結合起來。第七種方法是在特定項目的數(shù)據(jù)庫中建幾個存儲過程來實現(xiàn)代碼的自動生成。</p><p> 以上提到的代碼生成技術部分已有相關的產(chǎn)品,而且代碼生成技術已經(jīng)發(fā)展了很多年,應經(jīng)相當成熟。因此,靈活、合理地應用上邊提到的方法,就可以實現(xiàn)軟件項目生成系統(tǒng)中代碼生成的功能,從而開發(fā)出通用的Web信息管理系統(tǒng)框架。</
47、p><p> 2.2.2 WEB架構分析</p><p> 軟件項目生成系統(tǒng)輸出產(chǎn)品中包括項目源代碼。但是對于不同的Web框架,架構設計人員對源代碼的組織形式會有或多或少的差別,因此需要選取特定的WEB框架。此次畢業(yè)設計中選取了一個asp.net Web三層框架作為實例,專門為其定做了一份代碼生成系統(tǒng),并考慮到軟件生成系統(tǒng)將來的擴展,所以為于其他的Web框架留下了相應的擴展接口。</
48、p><p> 通常意義上Asp.net Web三層架構就是將整個業(yè)務應用劃分為:表現(xiàn)層(UI)、業(yè)務邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。區(qū)分層次的目的即為了“高內聚,低耦合”的思想。表現(xiàn)層(UI),通俗講就是展現(xiàn)給用戶的界面,即用戶在使用一個系統(tǒng)的時候他的所見所得。業(yè)務邏輯層(BLL),針對具體問題的操作,也可以說是對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務邏輯處理。數(shù)據(jù)訪問層(DAL),所做事務直接操作數(shù)據(jù)庫,針對數(shù)據(jù)的增、
49、刪、改、查。</p><p> 在Asp.net Web三層架構中,數(shù)據(jù)的訪問層是對數(shù)據(jù)庫的操作,所以對于不同的實體可以實現(xiàn)共用。而對于業(yè)務邏輯層和表示層,不同的實體代碼不同,而這些代碼的差異又與實體以及實體的屬性具有密切的關系,所以有效地抽象邏輯層和表示層的代碼文件,采用模板的形式可以統(tǒng)一的管理軟件項目中的源代碼。</p><p> 但同時應該注意,自動生成的代碼僅包括通用操作,例如
50、添加、修改、刪除、瀏覽、下載等操作,這些操作屬于程序中的原子操作。而對于更復雜的操作需要軟件開發(fā)者合理的組合這些原子操作,以實現(xiàn)比較復雜的業(yè)務邏輯。</p><p> 2.2.3 數(shù)據(jù)庫及項目文檔分析</p><p> 在我們日常軟件開發(fā)中,最常用的是關系數(shù)據(jù)庫庫。關系數(shù)據(jù)庫是建立在關系數(shù)據(jù)庫模型基礎上的數(shù)據(jù)庫,借助于集合代數(shù)等概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。目前主流的關系數(shù)據(jù)庫有Or
51、acle、SQL Server、Access、db2、sybase等。</p><p> 在軟件開發(fā)中,程序員根據(jù)從軟件設計人員得到的ER模型,在數(shù)據(jù)庫服務器上生成我們需要的數(shù)據(jù)庫。雖然每種的數(shù)據(jù)庫的Sql語句有些差別,但是它們同為關系數(shù)據(jù)庫,而且都是對基本的Sql語句的擴展,所以對于我們要實現(xiàn)有程序來生成數(shù)據(jù)庫提供了共同的理論基礎。但是系統(tǒng)只負責生成數(shù)據(jù)庫的最基本組成元素,包含了基本的表與視圖,若開發(fā)者需要使
52、用觸發(fā)器、存儲過程等高級操作,需要開發(fā)者手工設置。</p><p> 項目文檔是軟件項目中重要的組成成分。文檔是與程序開發(fā),維護和使用有關的圖文材料。開發(fā)過程中的典型文檔包括軟件需求規(guī)格說明書,它描述將要開發(fā)的軟件做什么;項目計劃,它描述將要完成的任務及其順序,并估計所需要的時間及工作量;軟件測試計劃,它描述如何測試軟件,使之確保軟件應實現(xiàn)規(guī)定的功能,并達到預期的性能。軟件設計說明書,它描述軟件的結構,包括概要
53、設計及詳細設計。用戶手冊,它描述如何使用軟件。 </p><p> 這些文檔包含的內容描述了軟件生命周期中的各個階段的內容,可謂相當復雜,應用本系統(tǒng)不可能要生成所有的這些文檔。系統(tǒng)秉承減少軟件開發(fā)人員繁復工作的宗旨,生成的項目文檔只包含了簡單的信息(這些信息都由軟件設計人員輸入系統(tǒng)),而且只要輸出的模板確定,最終的文檔的格式不在需要開發(fā)者設置,而將精力放在核心的內容的編輯中。</p><p&
54、gt;<b> 2.3需求設計</b></p><p> 通過對需求的分析,本畢業(yè)設計的的流程圖如下。</p><p> 軟件設計人員將需求分析的成果輸入軟件項目生成系統(tǒng),軟件架構人員將對Web框架抽象得到的XSLT模板文件輸入系統(tǒng),然后通過本系統(tǒng)分析、處理,最終輸出軟件開發(fā)中需要的項目文檔、數(shù)據(jù)庫、源代碼等產(chǎn)品。頂層數(shù)據(jù)流圖如圖2-1,一級數(shù)據(jù)流圖如圖2-2。
55、</p><p> 圖2-1 軟件項目生成系統(tǒng)頂層數(shù)據(jù)流圖</p><p> 圖2-2 軟件項目生成系統(tǒng)一級數(shù)據(jù)流圖</p><p> 系統(tǒng)的需要開發(fā)者做的工作是向本系統(tǒng)輸入數(shù)據(jù)模型。在實際情況中,由于各種原因,一次設計后可能需要更改,所以需要對已設計內容保存,以便今后打開后繼續(xù)設計。而且還可以設計軟件的膚色,給軟件開發(fā)者更好的用戶體驗。如圖2-3,圖2-4。
56、</p><p> 圖2-3 S1 acproject文件、膚色的數(shù)據(jù)流圖</p><p> 圖2-4 S2項目數(shù)據(jù)模型設置的數(shù)據(jù)流圖</p><p> 最后處理分析用戶輸入的數(shù)據(jù)模型,通過映射的方式輸出產(chǎn)品,包括數(shù)據(jù)庫、源代碼、項目文檔,如圖2-5。</p><p> 圖2-5 S3系統(tǒng)生成引擎數(shù)據(jù)流圖</p><
57、;p><b> 3系統(tǒng)總體設計</b></p><p> 軟件的系統(tǒng)設計是一個將需求轉變?yōu)檐浖愂觯ū磉_)的過程。這種陳述給一個對軟件的全局觀點。系統(tǒng)通過逐步求精使得設計陳述逐漸接近源代碼。這里有兩個基本步驟;第一步是初步設計 Preliminary design,關注于如何將需求轉換成數(shù)據(jù)和軟件框架。第二步是 詳細設計Detail design,關注于將框架逐步求精細化為具體的數(shù)
58、據(jù)結構和軟件的算法表達。發(fā)生中的設計行為、數(shù)據(jù)、算法和程序設計都需要由現(xiàn)代程序所需的界面設計這一清晰的行為結合起來。界面設計Interface design建立程序布局和人機交互機制。貫穿設計過程的質量由一系列的正式技術評定formal technical reviews或設計排演design walkthroughs來評價。</p><p><b> 3.1體系結構設計</b></
59、p><p> 系統(tǒng)的主要完成的功能是軟件設計人員根據(jù)需求分析得到的數(shù)據(jù)模型,在本系統(tǒng)中進行設置要實現(xiàn)的項目的基本信息,將數(shù)據(jù)模型轉化為本系統(tǒng)能夠識別的模型,然后輸出產(chǎn)品(代碼、項目文檔、數(shù)據(jù)庫)。在Xml技術的基礎之上,可以臨時保存已經(jīng)設計的數(shù)據(jù)模型,便于用戶下次繼續(xù)設計,以及增加了軟件的皮膚功能。系統(tǒng)結構如圖3-1。</p><p><b> 圖3-1 系統(tǒng)結構</b&g
60、t;</p><p> 項目文件管理模塊分為新建項目,打開項目,保存項目三個子模塊。新建項目主要在指定文件夾形成一個系統(tǒng)定義的、擴展名是acproject文件,此文件主要存儲軟件開發(fā)者已經(jīng)輸入軟件生成系統(tǒng)的信息,以便于今后打開后繼續(xù)修改完善。打開項目就是前邊提到新建的項目文件,繼續(xù)修改設計信息。保存項目是保存現(xiàn)在的修改到項目文件中。acproject文件是自定義的XML文件。</p><p&
61、gt; 皮膚管理模塊主要設置軟件的背景顏色,給軟件開發(fā)者更好的工作環(huán)境。</p><p> 項目設計模塊分為項目基本信息、實體基本信息、實體屬性信息、實體分組模等模塊。項目設計模塊主要描述數(shù)據(jù)模型的信息,以便項目生成模塊提取分析得到需要的信息。項目基本信息主要包括了項目的名稱設置、英文名稱設置、項目組人員信息設置、項目開發(fā)時間設置、項目使用數(shù)據(jù)庫的類型設置、數(shù)據(jù)庫連接字符串的設置、生成的項目源代碼使用模板的設
62、置、生成的程序類型的設置(包括Winform和WebForm以及WPF)、以及使用的模板各層命名空間的設置、項目子模塊分組的設置等信息。這里主要是對項目基本信息的設置,對于這些信息的使用在后續(xù)模塊。</p><p> 項目生成模塊包括數(shù)據(jù)庫生成、項目文檔生成、項目源代碼生成等子模塊。數(shù)據(jù)庫生成模塊主要生成項目所需要的數(shù)據(jù)庫,包括表、視圖等基本信息,開發(fā)者若要使用存儲過程等其他高級功能,需要開發(fā)者手動在數(shù)據(jù)庫操作
63、。項目文件生成模塊主要生成軟件開發(fā)中所需要的文檔,這些文檔和軟件設計人員手里的文檔或許會有沖突,但是這里生成的文檔是按標準格式設計好的文檔,雖然生成的信息不夠完善,需要軟件工程管理人員將這些信息補充完整,然后存檔以便將來需要時查閱。源代碼生成模塊主要生成程序員需要的源代碼,這些源代碼已完成了最基本的添加、修改、刪除等操作,更復雜的業(yè)務邏輯才是程序員需要維護的核心,也是軟件開發(fā)的核心。</p><p><b&
64、gt; 3.2 數(shù)據(jù)設計</b></p><p> 3.2.1 數(shù)據(jù)模型實體</p><p> 為了管理軟件設計人員在使用軟件生成系統(tǒng)中對數(shù)據(jù)模型所做的設計信息。定義如圖3-2所示的數(shù)據(jù)結構。</p><p> 圖3-2 數(shù)據(jù)模型設計</p><p> DaXiaoSet實體記錄了設計時對屬性和方法大小寫的設置。<
65、/p><p> O_Control實體該類記錄了設計中所使用控件的縮寫的設置。</p><p> O_Pack實體記錄了設計時要生成的項目分包的情況。</p><p> Attribute實體為核心實體,包括了開發(fā)中屬性的大部分信息,有屬性的名稱(英文),屬性的友好名稱,屬性的類型,精度,是否為空,在頁面顯示時的索引、所使用的空間、所屬于的組等信息。</p&
66、gt;<p> P_Template實體記錄了代碼生成時所使用的模板(本畢業(yè)設計由于時間有限目前只寫了一套Asp.net Web三層架構的模板)。</p><p> P_NameSpaces實體記錄了設計中命名空間情況。</p><p> P_DataBase實體記錄了生成代碼時所使用的數(shù)據(jù)庫類型及連接字符串(本畢業(yè)設計由于時間有限目前只能訪問Sql server數(shù)據(jù)庫
67、)。</p><p> P_BaseInfo實體記錄了項目的基本信息,如開發(fā)者姓名,項目名稱等。</p><p> 為了滿足代碼生成時有效的管理各個實體信息,定義如下數(shù)據(jù)結構。圖3-3主要用來描述以實體為單位存儲實體的基本信息,而上面提到放入數(shù)據(jù)結構也含有此信息,但是數(shù)據(jù)的層次有差別。</p><p><b> 圖3-3 實體信息</b>
68、</p><p> Entity實體是對軟件開發(fā)中實體的抽象。包括了實體在軟件生成系統(tǒng)中的名稱,實體的表名稱,實體的命名空間等信息。</p><p> Property實體是對屬性的抽象。包括了屬性的名稱、屬性的類型以及屬性在數(shù)據(jù)庫中的名稱類型等信息。</p><p><b> 3.2.2設計模式</b></p><p
69、> 此系統(tǒng)面向不同的數(shù)據(jù)庫類型。對于不同的數(shù)據(jù)庫像SqlServer、Oracle、Access,雖然都同為關系數(shù)據(jù)庫,但是各個數(shù)據(jù)庫復雜程度差別很大。比如要獲取數(shù)據(jù)庫的基本信息如表、字段、索引、鍵等,這些都可以通過數(shù)據(jù)庫中的系統(tǒng)表獲得,但是對于每種數(shù)據(jù)庫獲取的方法略有不同。對于SQLServer,數(shù)據(jù)庫中有SysObjects 和SysColumns這兩個系統(tǒng)表,可以查詢系統(tǒng)表來獲得所有的表名稱和字段名稱以及格式,還有一個sp
70、_helpindex的系統(tǒng)預定義存儲過程來獲得指定表的字段索引信息。對于Oracle 數(shù)據(jù)庫,有一個名為Col的系統(tǒng)預定義視圖,可以查詢這個視圖獲得所有的表名和字段定義信息。還有一個user_ind_columns的系統(tǒng)預定義視圖, 可以獲得關鍵字段信息。對于Access 2000 數(shù)據(jù)庫, 沒有這些系統(tǒng)表, 因此使用.NET 框架中的OleDB 數(shù)據(jù)連接對象的GetOleDbSchemaTable 函數(shù)來獲得數(shù)據(jù)庫表和字段定義信息。所
71、以雖然同為獲得數(shù)據(jù)庫的基本信息,但是對不同數(shù)據(jù)庫操作時需要不同的方法。解決此問題是通過設計模式中的工程模式。</p><p> 工廠模式是對象創(chuàng)建模式之一,它通常在類或類的靜態(tài)方法中去實現(xiàn)。構造對象的一種方式是使用new操作符,但使用new時正是針對實現(xiàn)編程,會造成“耦合”問題,與具體的類關系緊密,導致代碼更脆弱,缺乏彈性,在復雜邏輯的項目中建議是面向接口編程。圖3-4是實現(xiàn)工廠模式的類圖。</p>
72、<p><b> 圖3-4 工廠模式</b></p><p> 4系統(tǒng)詳細設計與實現(xiàn)</p><p> 4.1 Web三層架構模板的抽象</p><p> 可擴展樣式表語言轉化(Extensible Stylesheet Language Transformations,XSLT)是XML最重要的應用技術之一。雖然使用DO
73、M、SAX、XMLPULL等編程模型也可以處理XML文件,將其中的信息抽取出來,轉化成其他格式的數(shù)據(jù),但如對每個任務都編制專門程序,這無疑是低效而枯燥的。引入XSL轉換的目的,是為了提供將XML文檔方便地轉化為素需要數(shù)據(jù)形式的途徑。</p><p> XSLT的元素既有標記性元素,又有像高級語言那樣的程序控制元素,如下面包含的<xsl:if > </xsl:if>和<xsl:for
74、-each ></xsl:for-each>。以下是一個數(shù)據(jù)訪問層的代碼模板。</p><p> 模板文件部分代碼如下。</p><p> <xsl:for-each select="propertys/Property"></p><p> <xsl:text>dt.Columns.Add(&qu
75、ot;</xsl:text><xsl:value-of select ="PropertyName"/>",typeof(<xsl:value-of select ="PropertyType"/><xsl:text>));</p><p> </xsl:text></p><p&g
76、t; </xsl:for-each></p><p> <xsl:text>dt.Columns.Add("tableID");</p><p> return dt; </p><p><b> }</b></p><p><b> }</b&g
77、t;</p><p> }</xsl:text></p><p> </xsl:template></p><p> <!--獲得數(shù)據(jù)訪問層類名--></p><p> <xsl:template name="EntityName"></p><p
78、> <xsl:value-of select ="EntityName"/></p><p> </xsl:template></p><p> <xsl:template name="TableName"></p><p> <xsl:value-of select =
79、"TableName"/></p><p> </xsl:template></p><p> <xsl:template name="D_NameSpace"></p><p> <xsl:value-of select ="D_NameSpace"/>&l
80、t;/p><p> </xsl:template></p><p> </xsl:stylesheet></p><p> 通過.NET中的XslCompiledTransform類加載Xml文件和Xslt文件既可以生成所需要的類文件。</p><p> 本文用到的模板文件見表4-1。</p><
81、;p><b> 表4-1</b></p><p> 4.2 Ribbon界面的實現(xiàn)</p><p> Ribbon界面提供了豐富的控件,大多數(shù)控件是相互嵌套而成。如圖4-1,是完整的Ribbon界面。</p><p> 4-1 Ribbon界面</p><p> 圖4-2介紹RibbonButton按鈕類
82、的實現(xiàn),其他控件實現(xiàn)方式和其相似。</p><p> 首先定義IRibbonButton接口來定義RibbonButton所需要的屬性,然后定義RibbonButton類使其繼承與IRibbonButton接口和Button類,以實現(xiàn)RibbonButton所需要的邏輯。</p><p> 圖4-2 RibbonButton的實現(xiàn)</p><p> 最后在WP
83、F的XAML頁面的模板標簽使TargetType屬性指向所定義的類就可以實現(xiàn)RibbonButton按鈕,部分代碼如下。</p><p> <ControlTemplate x:Key="InternalRibbonButton" TargetType="{x:Type odc:RibbonButton}" ></p><p> &l
84、t;odc:RibbonChrome RenderFlat="False" </p><p> RenderPressed="{TemplateBinding IsPressed}" </p><p> RenderMouseOver="{TemplateBinding IsMouseOver}" </p>&l
85、t;p> CornerRadius="{TemplateBinding CornerRadius}"</p><p> Content="{TemplateBinding Content}"/></p><p> </ControlTemplate></p><p><b> 4.3系
86、統(tǒng)流程分析</b></p><p> 4.3.1 內存共享</p><p> 開發(fā)中遇到的第一個問題是多個窗體之間內存的共享,包括子窗體與子窗體的共享,子窗體與主窗體的共享。</p><p> 解決的流程如下。首先在主窗體定義一個AcProject對象,子窗體初始化時判斷是否對此窗體設計過,如果設計過還原設計的內容,如果還沒有設計,等待用戶設計。子
87、窗體關閉時,在主窗體實現(xiàn)SaveOldInfo()方法用于保存舊窗體的數(shù)據(jù),然后打開新的窗體。內存共享的流程圖如圖4-3。</p><p> 圖4-3 內存共享流程</p><p> 例如,圖4-4是本系統(tǒng)定義的對象到數(shù)據(jù)庫中表和屬性映射的過程,當離開此頁面時我們已經(jīng)設置好的信息通過SaveOldInfo方法保存在定義的AcProject對象中,然后再次回到頁面時,會根據(jù)AcProj
88、ect中的信息初始化此頁面。而且保存在AcProject中的數(shù)據(jù)允許其他頁面的進程訪問。</p><p> 圖4-4 數(shù)據(jù)映射頁面</p><p><b> 核心的代碼如下</b></p><p> int index = CB_ClassType.SelectedIndex;</p><p> oldIndex
89、 = index;</p><p> if (index >= 0)</p><p><b> {</b></p><p> dt[index].Rows.Clear();</p><p> for (int i = 0; i < acproject.o_objects[index].attibute
90、s.Count; i++)</p><p><b> {</b></p><p> DataRow dr = dt[index].NewRow();</p><p> dr["Name"] = acproject.o_objects[index].attibutes[i].Name;</p><p&
91、gt; dr["TC_Name"]= acproject.o_objects[index].attibutes[i].TC_Name;</p><p> dr["TC_Type"] = acproject.o_objects[index].attibutes[i].TC_Type;</p><p> dr["TC_jingdu&quo
92、t;] = acproject.o_objects[index].attibutes[i].TC_jingdu;</p><p> dr["TC_IsNull"] = acproject.o_objects[index].attibutes[i].TC_IsNull;</p><p> dt[index].Rows.Add(dr);</p><p
93、><b> }</b></p><p> dataGrid1.ItemsSource = dt[index].DefaultView;</p><p><b> } </b></p><p> 4.3.2數(shù)據(jù)庫生成流程</p><p> 圖4-5 是數(shù)據(jù)庫生成功能界面,可
94、以預覽生成的用戶表和視圖腳本,也可以將腳本另存到磁盤上。點擊生成數(shù)據(jù)庫按鈕直接在數(shù)據(jù)可系統(tǒng)上生成目標系統(tǒng)的數(shù)據(jù)庫。</p><p><b> 圖4-5</b></p><p> 數(shù)據(jù)庫生成的流程圖如圖4-6。主要過程是首先訪問master數(shù)據(jù)庫生成數(shù)據(jù)庫信息,然后獲得系統(tǒng)表與視圖的信息。接著獲取用戶表和視圖的信息,最終將獲得的信息分割成可執(zhí)行的Sql語句,訪問上邊
95、建立的數(shù)據(jù)庫執(zhí)行建立表和視圖的操作。</p><p> 圖4-6 數(shù)據(jù)庫生成</p><p><b> 部分代碼如下</b></p><p> O_Objects obs = acproject.o_objects;</p><p> for (int i = 0; i < objectCount; i++
96、)</p><p><b> {</b></p><p> O_Object ob = obs[i];</p><p> int popCount = ob.attibutes.Count;</p><p> if (popCount == 0)</p><p><b> {&
97、lt;/b></p><p><b> break;</b></p><p><b> }</b></p><p> scriptTable += "/****** 對象: Table [" + obs[i].BaseInfo.TableName + "] 腳本日期: &q
98、uot; + DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss") + " ******/" + Huanhang;</p><p> scriptView += "/****** 對象: View [" + obs[i].BaseInfo.TableName + "_View] 腳本日期: &qu
99、ot; + DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss") + " ******/" + Huanhang;</p><p> scriptTable += "GO" + Huanhang;</p><p> scriptView += "GO" + Huanhan
100、g;</p><p> scriptTable += "Create Table" + " " + obs[i].BaseInfo.TableName + " (" + Huanhang;</p><p> scriptView += "Create View " + obs[i].BaseInfo.Tab
101、leName + "_View" + Huanhang + "As" + Huanhang + "Select ";</p><p> for (int j = 0; j < popCount; j++)</p><p><b> {</b></p><p> scr
102、iptTable += " " + ob.attibutes[j].TC_Name + " " + ProduceType(ob.attibutes[j]) + " " + (ob.attibutes[j].TC_IsNull ? "NULL" : "NOT NULL") + "," + Huanhang;&
103、lt;/p><p> scriptView += obs[i].BaseInfo.TableName + "." + ob.attibutes[j].TC_Name + ", ";</p><p><b> }</b></p><p> scriptView += obs[i].BaseInfo.Tab
104、leName + "." + "tableID From " + obs[i].BaseInfo.TableName + Huanhang;</p><p> scriptTable += " tableID bigint IDENTITY(1,1) NOT NULL)" + Huanhang;</p><p>&
105、lt;b> }</b></p><p> 4.3.3文檔生成流程</p><p> 如圖4-7 是文檔生成界面,可以選擇不同的文檔進行生成,包括需求分析文檔、詳細設計文檔、數(shù)據(jù)庫表結構文檔。選擇本地磁盤后點擊輸出文檔按鈕,文檔會保存在相應的磁盤下。</p><p><b> 圖4-7 文檔生成</b></p>
106、;<p> 數(shù)據(jù)庫生成的流程圖如圖4-8。流程為首先獲取要生成數(shù)據(jù)庫的類型,然后生成文檔所需要的數(shù)據(jù),接著加載定義好的文檔模板,最后生成目標文檔。</p><p><b> 圖4-8 文檔生成</b></p><p><b> 核心代碼如下:</b></p><p> for (int i = 0;
107、i < acproject.o_objects.Count ; i++)</p><p><b> {</b></p><p> Microsoft.Office.Interop.Word.Paragraph para = oDoc.Paragraphs.Add(ref oMissing); ;</p><p><b>
108、……</b></p><p> oWord.Selection.MoveDown(ref WdLine, ref count, ref oMissing);</p><p> int rowCount = acproject.o_objects[i].attibutes.Count;</p><p> Microsoft.Office.Intero
109、p.Word.Table newTable = oDoc.Tables.Add(oWord.Selection.Range , rowCount + 2, 6, ref oMissing, ref oMissing);</p><p><b> ……</b></p><p> for (int j = 0; j < rowCount; j++)</p&
110、gt;<p><b> {</b></p><p><b> ……</b></p><p><b> }</b></p><p> oWord.Selection.MoveDown(ref WdLine, ref count,ref oMissing ); // 移動焦點<
111、/p><p> oWord.Selection.TypeParagraph(); // 插入段落</p><p><b> }</b></p><p><b> }</b></p><p> catch (Exception ex)</p><p><b>
112、{</b></p><p> System.Windows.Forms.MessageBox.Show(ex.Message);</p><p><b> }</b></p><p><b> finally</b></p><p><b> {</b>&l
113、t;/p><p><b> …….</b></p><p> oWord.Quit(ref oMissing, ref oMissing, ref oMissing);</p><p> System.Windows.Forms.MessageBox.Show("創(chuàng)建Word文檔成功!", "提示",
114、MessageBoxButtons.OK, MessageBoxIcon.Information);</p><p><b> }</b></p><p> 4.3.4代碼生成流程</p><p> 如圖4-9 是最終項目源代碼生成界面,目前只提供了.net中Asp.net的生成。對于Wpf程序只要編寫在一定的框架下編寫相應的XSLT模板
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息管理畢業(yè)設計--設備信息管理系統(tǒng)設計
- 畢業(yè)設計---基于web學生信息管理系統(tǒng)設計與開發(fā)
- 通用信息管理框架系統(tǒng)的通用信息定義子系統(tǒng)設計及應用.pdf
- 畢業(yè)設計--學生信息管理系統(tǒng)畢業(yè)設計
- 基于web的通用信息管理系統(tǒng)的設計與實現(xiàn).pdf
- 畢業(yè)設計基于web的通用權限管理系統(tǒng)
- 畢業(yè)設計--職工信息管理系統(tǒng)
- 畢業(yè)設計---客戶信息管理系統(tǒng)
- 學校信息管理系統(tǒng)畢業(yè)設計
- 學生信息管理系統(tǒng)畢業(yè)設計
- 畢業(yè)設計---學生信息管理系統(tǒng)
- 畢業(yè)設計---客戶信息管理系統(tǒng)
- 畢業(yè)設計---學生信息管理系統(tǒng)
- 畢業(yè)設計----學生信息管理系統(tǒng)
- 畢業(yè)設計-班級信息管理系統(tǒng)
- 小區(qū)信息管理系統(tǒng)畢業(yè)設計
- 學生信息管理系統(tǒng)畢業(yè)設計
- 畢業(yè)設計---超市信息管理系統(tǒng)
- 畢業(yè)設計---客戶信息管理系統(tǒng)
- 期刊信息管理系統(tǒng)畢業(yè)設計
評論
0/150
提交評論