一種通用的樹形結構編碼設計方法_第1頁
一種通用的樹形結構編碼設計方法_第2頁
一種通用的樹形結構編碼設計方法_第3頁
一種通用的樹形結構編碼設計方法_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一種通用的樹形結構編碼設計方法邢海燕獨山子石化公司信息中心摘 要:本文詳細介紹了一種樹形結構編碼的設計思想及方法,并提供了一個Asp.Net實現Web頁面樹形結構的實例。關鍵詞:樹;Asp.Net;Web ;TreeView1. 前言從軟件的角度來講,最終直接影響軟件質量的,是軟件的編碼,設計再好,編碼設計的一塌糊涂,結果軟件還是很糟糕,所以編碼質量,在任何情況下,都是軟件質量的基礎。由于樹是一種常見的非線性的數據結構,能很好的描述有分支和層次特性的數據集合,它可以直觀的表現出數據之間的分類及層次關系,其應用非常廣泛。在許多地方都需要用到樹形結構來顯示和管理數據,如組織機構管理、地區管理、物資

2、分類管理、樹型結構論壇管理等等。由于關系數據庫不擅于存放樹形結構的數據,如果使用關系數據庫存放樹形結構數據,數據的查詢和統計是個比較頭痛的問題,往往需要用很多復雜的SQL查詢語句。過去最常用的方法是預先規劃好編碼,將編碼分幾級,每級規定幾位數,這種辦法局限性很大,為開發人員程序實現增加了許多工作量,要負責生成編碼,檢查編碼的長度、連續性、重復性,而且編碼規則確定后,以后要想增加、刪除樹的節點,就必須修改源程序,對編碼進行擴展就很困難。而且根據編碼的類別不同,編碼長度大小各異,所以這種方式也不具通用性。筆者也看到一些不同的實現方法,但認為太復雜,涉及的數據表太多,數據統計也很困難。筆者在軟件開發

3、過程中總結出了本文所介紹的方法,此方法只用一個數據表就可實現樹形結構編碼的設計,它不必考慮編碼的層次和長度,可由用戶隨意根據需要定義樹結構層次節點,可生成并管理任意層次的數據,也便于不同層次數據的查詢、統計,此方法很適合樹形目錄結構的實現,具有很好的可維護性和一定的通用性。2. 設計思想本文以組織機構編碼的設計為例,說明這種設計思想和方法,此實例采用SqlSever數據庫存儲數據,用Asp.Net下的C#語言編寫代碼。其它具有分類屬性的編碼可參照此方法設計,也可以用其它開發工具來實現。2.1. 編碼數據結構設計數據表Org_def用于存儲組織機構的定義信息,此表中各級組織部門都作為一個樹中不同

4、層次的節點。其中,Code_id表示組織部門唯一的標識編碼,由系統自動生成;Superior_id是父節點編碼;Code_level是一個編碼層次字符串,由其所有上級及其本級編碼組成,中間用一個字符“|”分割開,如“0|1|2”表示本節點的編碼是“2”,其上級是“1”,而“1”的上級是“0”;Code_order用于組織機構同級順序的顯示;Is_last用來說明是否是最后一級編碼,即葉子節點。序號字段名稱字段標識類型1編碼Code_idInteger identity not null primary key2名稱Code_nameVarchar3上級編碼Superior_idInteger4

5、編碼層次串Code_levelVarchar5顯示順序Code_orderInteger6是否最后一級Is_lastBit2.2. 編碼實例利用這種編碼設計的方法,產生的編碼記錄示例如下表所示,其生成的樹形結構如界面設計圖中的樹形圖。需要特別說明的是樹的根節點的上級最好由開發人員指定,如果編碼Code_id的種子是以0為起始值遞增的,則其根節點的上級編碼Superior_id可設為比0小的任意值,如下表中的第一條記錄,根節點的上級為-1。開發人員可事先手工定義此條記錄,根節點的上級規定好,有利于開發人員對樹的操作,其它節點的信息都由用戶通過應用程序生成。Code_idCode_nameSupe

6、rior_idCode_levelCode_orderIs_last0公司-10101信息中心00|1102計算所10|1|2113情報所10|1|3214原油處00|4205原油處職工40|4|5102.3. 設計思想由于樹是一種非線性的數據結構,其節點間的關系及其本身所處的位置,要靠節點的屬性來表示,存儲在關系數據庫中的樹的信息就是節點的各項屬性,所以節點的屬性設置是至關重要的。在數據表Org_def中, Superior_id相當于指向其父節點的指針,通過此字段實現了有父子關系的節點之間的關聯;通過編碼層次字段Code_level的設置,可以解決樹形結構存儲的數據查詢和統計效率低的問題,

7、根據此編碼可以很方便的通過Sql語句查詢各級編碼下的數據,也可按編碼級別進行統計各級數據,而不需要用各種復雜的方法去遍歷樹節點;通過Is_last字段明確了是否是最后一級編碼,在做和組織機構相關的其他操作功能時,可以幫助判斷和限制數據的設置,如只有最后一級的組織編碼才可以錄入員工信息;除以上6個必須設置的基本屬性外,開發人員還可根據編碼類別的特點和要求的不同,結合實際方面的需求增加一些屬性。使用這種方法生成的樹,結構層次清晰,其節點的層數和編碼的長度不受限制,可以由用戶根據需要動態的任意定義生成多層子節點,既每個子節點都可以定義多個子節點,在理論上可以實現任意多層的一對多的無限延伸關系,結點的

8、總數不受限制(除非機器約束)。3. 實現方法及步驟在Asp.Net中,我們可以很方便地利用由微軟提供的Internet Exploer Web Controls控件來實現樹形列表,就像WINDOWS的資源管理器一樣,它和在Windows下一樣的方便,一樣的功能強大,甚至更靈活。TreeView控件包含了稱作節點(node)的一些條目的一個列表。每一個節點都可以有自己的節點集合,從而提供了一種更深層的數據定義。此控件可用于幫助生成用戶界面,以顯示分層的數據集、文件夾視圖以及其他類似的數據結構,它可以讓具有層次結構的數據的顯示、管理、導航變得很容易。由于用Asp.Net 開發Web應用程序時設置和

9、引用的內容很多,并且筆者所完成的應用系統采用的是多層架構,實現的具體代碼不便于完整呈現給讀者,在此略去,為了突出主題,這里只對和樹節點操作相關的實現步驟及注意事項進行闡述。3.1. 步驟一、數據結構的建立、創建一個SqlServer數據庫。、在數據庫中創建數據表“Org_def”,結構在2.1中已經詳述。3.2. 步驟二、創建界面窗體、以A Web應用程序為模版,建立一個Visual C#項目。、創建一個新的Web窗體“Org_def.aspx”。、界面設計、界面中控件TreeView1的AutoPostBack屬性、AutoSelect屬性和SelectExpands屬性都設為True。表示

10、節點信息的TextBox等組件默認的Enabled屬性設為False。3.3. 步驟三、添加代碼及主要注意事項、在Page_Load中添加初始化頁面代碼本例在初始化生成樹視圖時,只是先生成根層節點視圖項,再在應用中動態生成下級視圖項。生成根節點時一般將節點的Superior_id作為入口參數,默認父節點代碼為0。、在SelectedIndexChange事件中添加節點選擇改變代碼在此段代碼中,主要將節點信息分別賦給界面設計圖右邊所示的節點信息列表,以便用戶查看和修改節點信息。、在Expand事件中添加節點擴展代碼在節點擴展后,如果調用SelectedIndexChange事件代碼,可在擴展節點

11、的同時完成選擇節點。、增加一級節點在一個節點也沒有的情況下,節點信息以入口參數Superior_id及其相關信息生成。、增加下級節點新節點的Code_level 等于當前選定節點的Code_level加上字符“|”加上新節點的Code_id 。、更改上級節點此操作需要界面上設計兩個TreeView控件,其中更改的上級不能是自己的下級;更改的上級不能已被設為最后一級;更改上級的節點及其各層子節點的Code_level要重新生成。、當前插入節點新節點的Code_level 等于當前選定節點的父節點的Code_level加上字符“|”加上新節點的Code_id ;當前選定節點及其順序在其后的同級節點的序號Code_order都要加1 。、刪除節點刪除節點時,為防止意外丟失數據,不能刪除有子節點的節點;如果是最后一級,要判斷其他數據表中是否已經使用此節點代碼;順序在刪除節點后面的同級節點的序號Code_order都要減1 。、修改節點修改節點代碼時需要檢查節點信息的合法性。、設為一級節點在將

溫馨提示

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

評論

0/150

提交評論