劉暐,趙嵩正,殷茗
樹型目錄用于顯示按照樹型結(jié)構(gòu)進(jìn)行組織的數(shù)據(jù),其層次清晰,操作方便的優(yōu)點(diǎn)使之在計(jì)算機(jī)中的文件系統(tǒng)(Windows中的資源管理器)、企業(yè)或公司的組成結(jié)構(gòu)等方面得到了廣泛的應(yīng)用。近年來,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展與WEB應(yīng)用程序的廣泛使用,樹型目錄在功能和意義上都有了進(jìn)一步的拓展和延伸,例如應(yīng)用于網(wǎng)頁導(dǎo)航的菜單目錄樹,用于上傳文檔管理的文檔目錄樹,以及面向資產(chǎn)管理的編碼目錄樹和面向權(quán)限控制的功能目錄樹[1,2]。上述的樹型目錄大多是針對(duì)信息的組織與管理的,本文結(jié)合筆者參與開發(fā)的某大型航空產(chǎn)品質(zhì)量評(píng)估系統(tǒng),介紹一種面向信息統(tǒng)計(jì)的樹型目錄及其實(shí)現(xiàn)方法,該樹型目錄不僅可以自頂向下地組織信息,實(shí)現(xiàn)信息導(dǎo)航,而且可以自底向上地進(jìn)行動(dòng)態(tài)的信息統(tǒng)計(jì)與歸集,方便掌握總體及各層級(jí)信息,利于管理與決策。
ASP.NET是微軟推出的一項(xiàng)基于Microsoft.Net平臺(tái)的新技術(shù),是建立、管理、部署 Web應(yīng)用程序最佳的平臺(tái)。ASP.NET擁有對(duì)多種高級(jí)語言的支持、豐富的類庫、良好的可擴(kuò)展性和先進(jìn)的數(shù)據(jù)庫存取模式等眾多優(yōu)點(diǎn)[3]。ASP.NET的數(shù)據(jù)訪問機(jī)制是利用ADO. NET訪問數(shù)據(jù)庫,ADO.NET 的整體體系結(jié)構(gòu)如圖1所示。ADO. NET訪問數(shù)據(jù)庫是一種非連接的數(shù)據(jù)庫訪問機(jī)制。用戶通過 ASP.NET程序訪問數(shù)據(jù)庫時(shí),并不是始終與數(shù)據(jù)庫保持著連接,而是請(qǐng)求服務(wù)器時(shí)短時(shí)間打開連接讀取整個(gè)數(shù)據(jù)庫, 然后在內(nèi)存中建立一個(gè)映像,即生成數(shù)據(jù)集,用戶再在連接關(guān)閉的情況下操作數(shù)據(jù)集,從而實(shí)現(xiàn)了斷開方式數(shù)據(jù)庫連接和內(nèi)存管理自動(dòng)化,極大節(jié)約了連接資源,使網(wǎng)絡(luò)用戶能快速訪問數(shù)據(jù)庫服務(wù)器。
DataSet組件是 ADO. NET開發(fā)環(huán)境的核心,類似一個(gè)保存在內(nèi)存中的微型數(shù)據(jù)庫,表示組成數(shù)據(jù)表的一組相關(guān)數(shù)據(jù)、約束規(guī)則和表關(guān)系信息。其中 DataRelation是代表DataSet中兩個(gè)DataTable對(duì)象之間的父子關(guān)系,其中,父表相當(dāng)于關(guān)系列為主鍵的表,子表相當(dāng)于關(guān)系列為外鍵的表。DataRelation通過具有相同DataType的DataCollumn對(duì)象,把兩個(gè)DataTable關(guān)聯(lián)起來,將建立好的關(guān)系添加到DataSet中,便可導(dǎo)航并從相關(guān)的表中檢索數(shù)據(jù)[4]。以下是 C#中的實(shí)現(xiàn)方法:
DataRelation dataRelation = dataset.Relations.Add("RelationName", dcParent, dcChild )
針對(duì)層次型數(shù)據(jù)引用DataRelation對(duì)象,可以不需要復(fù)雜的同步代碼就能方便地定位有關(guān)系的數(shù)據(jù),通過在客戶端執(zhí)行數(shù)據(jù)完整性(data-integrity)驗(yàn)證,可以減少一次數(shù)據(jù)庫調(diào)用中檢索所有父表和子表數(shù)據(jù)所需的網(wǎng)絡(luò)來回,提高應(yīng)用程序的運(yùn)行速度,節(jié)省開發(fā)時(shí)間。
圖1 ADO.NET 的整體體系結(jié)構(gòu)
TreeView控件是一種開發(fā)樹型目錄的工具。目前,許多 Windows應(yīng)用程序開發(fā)工具如:PowerBuilder,VB,Delphi,都提供了一個(gè)功能強(qiáng)大的樹型控件TreeView,然而Web應(yīng)用程序開發(fā)工具還不夠成熟,大多沒有提供直接可用的TreeView控件,在網(wǎng)頁中實(shí)現(xiàn)目錄樹,大多使用HTML或javascript語言,根據(jù)事先需要描述的數(shù)據(jù)結(jié)構(gòu)來生成靜態(tài)目錄樹[5]。在ASP.NET中雖然本身沒有提供TreeView控件,但ASP.NET所具有的可擴(kuò)展性使其可以引用第三方控件,微軟提供的Internet Explorer Web Controls (其中包含用于網(wǎng)頁的TreeView、Toolbar、Tabstrip等控件),就是一種方便開發(fā)人員結(jié)合數(shù)據(jù)庫實(shí)現(xiàn)動(dòng)態(tài)樹型目錄的控件。
TreeView中每個(gè)節(jié)點(diǎn),可能包含稱為子節(jié)點(diǎn)的其他節(jié)點(diǎn)。父節(jié)點(diǎn)或包含子節(jié)點(diǎn)的節(jié)點(diǎn),可以展開或折疊的方式顯示。TreeView控件的一個(gè)主要屬性,是Nodes,Nodes屬性包含樹視圖中的頂級(jí)節(jié)點(diǎn)列表。欲使用TreeView控件生成動(dòng)態(tài)的樹型目錄,需采用編程的方式為樹控件添加子節(jié)點(diǎn)。在c#中實(shí)現(xiàn)為TreeView1添加子節(jié)點(diǎn)可以使用Nodes屬性的Add方法實(shí)現(xiàn),如下所示:
TreeNode newNode = new TreeNode();
TreeView1.Nodes.Add(newNode);
如果是為樹控件中某個(gè)節(jié)點(diǎn)添加子節(jié)點(diǎn),此處的TreeView1應(yīng)改為相應(yīng)的節(jié)點(diǎn)。由于TreeView控件是以層次結(jié)構(gòu)的方式顯示節(jié)點(diǎn),在添加節(jié)點(diǎn)時(shí)就必須注意誰是它的父節(jié)點(diǎn)。
面向信息統(tǒng)計(jì)的質(zhì)量評(píng)估樹型目錄,是以某大型航空產(chǎn)品的質(zhì)量評(píng)估系統(tǒng)為背景,該系統(tǒng)是為綜合評(píng)估單件產(chǎn)品的制造過程質(zhì)量,實(shí)現(xiàn)產(chǎn)品質(zhì)量精細(xì)化管理而設(shè)計(jì)的。系統(tǒng)要求實(shí)現(xiàn)對(duì)單件產(chǎn)品從每一項(xiàng)關(guān)重件到零件、組件、部件、段件及最終產(chǎn)品的裝配過程跟蹤和質(zhì)量狀態(tài)、質(zhì)量指標(biāo)的動(dòng)態(tài)跟蹤管理。
質(zhì)量評(píng)分目錄樹是質(zhì)量評(píng)估系統(tǒng)中,實(shí)現(xiàn)單件產(chǎn)品的質(zhì)量信息統(tǒng)計(jì)和歸集的動(dòng)態(tài)樹型目錄。單件產(chǎn)品的質(zhì)量,由影響該產(chǎn)品質(zhì)量的關(guān)重件(QBOM)的質(zhì)量所構(gòu)成,關(guān)重件的質(zhì)量可以通過與其相關(guān)的各類質(zhì)量要素如:代料、生產(chǎn)保留和質(zhì)量問題等因素來衡量。其中,由于各關(guān)重件的重要度不同,各類因素的影響產(chǎn)品質(zhì)量的程度也不一樣,因此需要為各關(guān)重件以及各項(xiàng)因素設(shè)置權(quán)重。此外,質(zhì)量因素還可以繼續(xù)細(xì)化到不同的影響控制參數(shù),通過控制參數(shù)的加權(quán)累計(jì),實(shí)現(xiàn)各項(xiàng)質(zhì)量因素下某關(guān)重件質(zhì)量的具體量化,進(jìn)而最終實(shí)現(xiàn)單件產(chǎn)品的具體量化。質(zhì)量評(píng)估的計(jì)算方法如下所示:
其中,D表示單件產(chǎn)品中關(guān)重件的質(zhì)量減分,Q表示單件產(chǎn)品的制造過程質(zhì)量,Kij表示第i種因素出現(xiàn)第j種控制參數(shù)的次數(shù),Wij表示第i種因素出現(xiàn)第j種控制參數(shù)的權(quán)重,ui表示第i種因素的權(quán)重, ψ表示關(guān)重件在整個(gè)產(chǎn)品的樹狀結(jié)構(gòu)中所占的權(quán)重,F(xiàn)表示單件產(chǎn)品的質(zhì)量滿分,質(zhì)量評(píng)估權(quán)重及滿分的確定主要是由專家根據(jù)一定的評(píng)估標(biāo)準(zhǔn)確定。
質(zhì)量評(píng)分樹型目錄的根節(jié)點(diǎn)代表單件產(chǎn)品,對(duì)應(yīng)的分值為該件產(chǎn)品的制造過程質(zhì)量,樹型目錄的各子節(jié)點(diǎn)代表影響該產(chǎn)品質(zhì)量的關(guān)重件,右邊標(biāo)簽顯示的分值為對(duì)應(yīng)關(guān)重件的質(zhì)量扣分,質(zhì)量評(píng)估得分均由質(zhì)量評(píng)估算法計(jì)算得出。質(zhì)量評(píng)估樹型目錄上各節(jié)點(diǎn)顯示的質(zhì)量得分,代表的是該節(jié)點(diǎn)加權(quán)后質(zhì)量得分與該節(jié)點(diǎn)下所有子部件或零件綜合加權(quán)得分之和。這種自頂向下顯示單件產(chǎn)品QBOM結(jié)構(gòu)并自底向上實(shí)現(xiàn)質(zhì)量信息量化評(píng)估的質(zhì)量評(píng)分目錄樹,不僅可以方便直觀地顯示單件產(chǎn)品的關(guān)重件的樹狀結(jié)構(gòu)目錄及其對(duì)應(yīng)的質(zhì)量單據(jù)信息,更重要的是可以在樹狀結(jié)構(gòu)目錄直接反映出相應(yīng)節(jié)點(diǎn)的質(zhì)量評(píng)估得分。層次清晰的質(zhì)量評(píng)分樹型目錄,對(duì)產(chǎn)品的各個(gè)因素對(duì)單件產(chǎn)品的影響程度進(jìn)行具體的量化,使用戶能夠迅速定位單件產(chǎn)品的質(zhì)量狀況及關(guān)鍵質(zhì)量問題,同時(shí),還可以通過展開其中某節(jié)點(diǎn),查看其子部件或零件的質(zhì)量評(píng)估得分,或者單擊某個(gè)節(jié)點(diǎn)在主頁面中查看相應(yīng)該節(jié)點(diǎn)的評(píng)估得分依據(jù)及詳細(xì)單據(jù)信息,便于用戶追蹤影響單件產(chǎn)品質(zhì)量的零部件和質(zhì)量問題單據(jù),從而為航空企業(yè)提高產(chǎn)品質(zhì)量、采取質(zhì)量改進(jìn)措施等提供決策依據(jù)。
質(zhì)量評(píng)分樹型目錄涉及的數(shù)據(jù)庫設(shè)計(jì)如圖2所示:
圖2 數(shù)據(jù)庫設(shè)計(jì)
以下是筆者編制的一個(gè)顯示質(zhì)量評(píng)分樹型目錄的主要過程AddTreeNodes(C#),建樹的基本思路是從根節(jié)點(diǎn)開始,遞歸調(diào)用顯示子樹,同時(shí)從末節(jié)點(diǎn)開始,逐級(jí)加權(quán)累計(jì)返回質(zhì)量評(píng)估得分。
public double AddTreeNodes(DataRow[] dataRows,DataRelation dataRel,TreeNode treenode)
{//帶有返回值的深度遍歷的遞歸算法,顯示質(zhì)量評(píng)分樹形目錄
TreeNode tmpNd;
DataRow[] drChildren;
i = ExcuteSP(strPartNo); //調(diào)用存儲(chǔ)過程得到部件的自身質(zhì)量得分
k = AddTreeNodes(drChildren, dataRel, tmpNd);//返回該部件所有子部件的加權(quán)和值
在裝入網(wǎng)頁時(shí),初始化樹型目錄,建立數(shù)據(jù)集,并為數(shù)據(jù)集添加關(guān)系,通過調(diào)用AddTreeNodes方法來實(shí)現(xiàn)具有信息統(tǒng)計(jì)功能的質(zhì)量評(píng)估樹型目錄。
// 調(diào)用的遞歸算法組裝子節(jié)點(diǎn),GetChildRows方法為DataTable 中的每個(gè)子級(jí) DataRelation返回子級(jí) DataRow對(duì)象。
AddTreeNodes (dr.GetChildRows(dataRelation), dr,
程序執(zhí)行,顯示的質(zhì)量評(píng)分樹型目錄如圖3所示。
圖3 產(chǎn)品的質(zhì)量評(píng)分樹型層次圖
本文結(jié)合某大型航空產(chǎn)品質(zhì)量評(píng)估系統(tǒng),研究了ASP.NET中一種面向信息統(tǒng)計(jì)的動(dòng)態(tài)樹型目錄,深入探討了集成信息統(tǒng)計(jì)功能的產(chǎn)品質(zhì)量評(píng)分樹型目錄的實(shí)現(xiàn)方法。運(yùn)行結(jié)果表明,該樹型目錄能夠直觀量化地反映出產(chǎn)品制造過程中各環(huán)節(jié)的質(zhì)量狀況,利于監(jiān)督并采取質(zhì)量改進(jìn)措施,對(duì)提高產(chǎn)品質(zhì)量,輔助決策具有重要應(yīng)用價(jià)值。
[1] Freeman R, Yin H. Tree view self-organisation of web content[J] . Neurocomputing,2005, 63: 415-446.
[2] 周淑琴,趙遠(yuǎn)東.樹型圖及其在ASP.NET程序開發(fā)中的應(yīng)用[J] . 計(jì)算機(jī)應(yīng)用研究,2004,(9):233-235.
[3] Bellinaso M, Gaster B, Hoffman K. Fast Track ASP.NET C# Edition[M] . Wrox Press. 2002.
[4] Otey M, Otey D. ADO.NET The Complete Reference[M] .Osborne McGraw-Hill, 2003.
[5] 郭兆勝,張登榮. ASP.NeT環(huán)境下樹狀圖的研究與實(shí)現(xiàn)[J] .計(jì)算機(jī)工程與設(shè)計(jì),2005,(2).