王崇陽
(長春理工大學(xué) 理學(xué)院,長春 130022)
基于.NET的危險(xiǎn)化學(xué)品突發(fā)泄漏事故應(yīng)急決策系統(tǒng)開發(fā)
王崇陽
(長春理工大學(xué) 理學(xué)院,長春 130022)
介紹了C/S模式下危險(xiǎn)化學(xué)品突發(fā)泄漏事故應(yīng)急決策系統(tǒng)的開發(fā)過程,系統(tǒng)借助Visual Studio.Net平臺(tái),C#語言和SQL Server2000數(shù)據(jù)庫,實(shí)現(xiàn)了對(duì)危險(xiǎn)源、危險(xiǎn)品的信息管理,以及模糊查詢。此系統(tǒng)是一個(gè)功能比較齊全的危險(xiǎn)化學(xué)品突發(fā)泄漏事故應(yīng)急決策系統(tǒng)。
危險(xiǎn)化學(xué)品;模糊查詢;突發(fā)泄漏;決策系統(tǒng)
隨著國家經(jīng)濟(jì)建設(shè)的快速發(fā)展,作為化工生產(chǎn)的原料、中間體及產(chǎn)品的危險(xiǎn)化學(xué)品(簡稱?;?種類不斷增加,在生產(chǎn)、經(jīng)營、儲(chǔ)存、運(yùn)輸和使用過程中發(fā)生的?;沸孤┦鹿室膊粩嘣龆?據(jù)公安部消防局統(tǒng)計(jì),近幾年,僅全國公安消防部隊(duì)平均每年參加處置的?;沸孤┦鹿示投噙_(dá)近千起),給國家和人民群眾生命財(cái)產(chǎn)以及生態(tài)環(huán)境都造成了極大的危害[1]。為讓政府和企業(yè)迅速、穩(wěn)妥地做出診斷、急救、自救、互救、消防、堵漏等正確的決策[2],盡可能避免?;沸孤┦鹿实陌l(fā)生,或減少?;吠话l(fā)泄漏帶來的人員傷亡、經(jīng)濟(jì)損失等,建立危險(xiǎn)化學(xué)品突發(fā)泄漏事故應(yīng)急決策系統(tǒng),可以實(shí)現(xiàn)危險(xiǎn)源及危險(xiǎn)化學(xué)品的系統(tǒng)化、規(guī)范化和自動(dòng)化的管理,并具有推廣實(shí)用價(jià)值。
ORM是英文(Object Relational Mapping)的縮寫,意思為對(duì)象關(guān)系映射,是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù),是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。因此,對(duì)象關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射[3]。
SQLDMO是英文(SQL Distributed Management Objects)的縮寫,意思為SQL分布式管理對(duì)象,封裝 Microsoft SQL Server 2000數(shù)據(jù)庫中的對(duì)象。SQL-DMO允許用支持自動(dòng)化或COM的語言編寫應(yīng)用程序,以管理SQL Server安裝的所有部分。SQLDMO是SQL Server 2000中的SQL Server企業(yè)管理器所使用的應(yīng)用程序接口 (API);因此使用 SQLDMO的應(yīng)用程序可以執(zhí)行 SQL Server企業(yè)管理器執(zhí)行的所有功能[4]。
根據(jù)需求分析,系統(tǒng)具有信息查詢、信息管理和系統(tǒng)管理三大功能模塊,系統(tǒng)功能模塊圖如圖1所示。
圖1 系統(tǒng)功能模塊圖
系統(tǒng)主界面很好的展現(xiàn)了本系統(tǒng)界面設(shè)計(jì)特點(diǎn),簡潔、大方并很實(shí)用。在界面設(shè)計(jì)中主要用到TextBox、RichTextBox、Label、ListBox、ListView、TreeView、ComboBox、Button、MainMenu、TabControl以及用戶控件。其中ComboBox和用戶控件用的很多,因?yàn)镃omboBox能省去用戶輸入操作,而用戶控件能避免大量控件的冗余使用。而ListBox和ListView是兩個(gè)顯示數(shù)據(jù)很好的控件,尤其是ListView能很好的顯示一條含有多種信息的記錄。
數(shù)據(jù)庫設(shè)計(jì)(Database Design)是指對(duì)于一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,使之能夠有效地存儲(chǔ)數(shù)據(jù),滿足各種用戶的應(yīng)用需求(信息要求和處理要求)。
本系統(tǒng)共涉及到22個(gè)表,主要的數(shù)據(jù)庫表如表1所示。
表1 Chemical數(shù)據(jù)庫中主要的數(shù)據(jù)表
以危險(xiǎn)源基本信息表為例,描述它的結(jié)構(gòu),如表2所示。
表2 危險(xiǎn)源基本信息表(Wxy_Info)
3.3.1 登錄界面的實(shí)現(xiàn)
為了增加數(shù)據(jù)安全性,本系統(tǒng)使用兩層安全驗(yàn)證。第一層為數(shù)據(jù)庫安全驗(yàn)證。在本界面要求進(jìn)行數(shù)據(jù)庫配置,當(dāng)測試連接失敗時(shí),說明用戶沒有登錄數(shù)據(jù)庫的權(quán)限。當(dāng)測試連接成功時(shí),就進(jìn)入第二層數(shù)據(jù)驗(yàn)證,也是表數(shù)據(jù)驗(yàn)證。在本界面要求輸入用戶類型、用戶名和密碼,當(dāng)用戶類型、用戶名和密碼不正確時(shí),說明用戶在表中沒有記錄。而當(dāng)用戶類型、用戶名和密碼正確時(shí)就進(jìn)入系統(tǒng)。
3.3.2 未知物質(zhì)識(shí)別功能
為了方便用戶對(duì)未知物質(zhì)的識(shí)別,本系統(tǒng)提供了未知物質(zhì)識(shí)別功能。具體實(shí)現(xiàn)過程如下:在后臺(tái)用Wxp_LiHuaSb表存儲(chǔ)識(shí)別信息,在前臺(tái)中用到Lable、ListBox、Button以及未知物質(zhì)識(shí)別控件,通過單擊“開始識(shí)別”按鈕調(diào)用Search函數(shù)查詢識(shí)別物質(zhì),然后將識(shí)別結(jié)果在前臺(tái)顯示出來。未知物質(zhì)識(shí)別功能的實(shí)現(xiàn)主要用到Search方法。
Search方法的關(guān)鍵代碼如下:
private void Search()
{ ……//部分代碼省略
string sql="select w.Wxp_ID,Wxp_Name,Wxp_XiaoName,Wxp_English,
Wxp_XiaoEng,y.UNbh from Wxp_Info w"+"join Wxp_LiHuaSb l on w.Wxp_ID=l.Wxp_ID join Wxp_Ys y on w.Wxp_ID=y.Wxp_ID where 1=1";
……//部分代碼省略
List< IdentifyResult> res=dao.getIdentifyResult(sql);
for(int i=0;i < res.Count;i++)
{string[]sub={Convert.ToString(i+1),res[i].Wxp_ID.ToString(),res[i].
Wxp_name,res[i].Wxp_xiaoname,res[i].Wxp_english,res[i].Wxp_xiaoeng,res[i].UNbh};
ListViewItem lvi=new ListViewItem(sub);
unkown.ResultListView.Items.Add(lvi);}
}
3.3.3 數(shù)據(jù)導(dǎo)出功能
為了方便用戶打印危險(xiǎn)源和危險(xiǎn)品信息,本系統(tǒng)提供了數(shù)據(jù)導(dǎo)出功能。在本系統(tǒng)選擇將數(shù)據(jù)導(dǎo)出為Excel文件,因?yàn)镋xcel操作簡單,并且與數(shù)據(jù)庫有相似之處。具體實(shí)現(xiàn)過程:通過單擊“屬性操作”工具欄的“導(dǎo)出Excel”按鈕,則會(huì)根據(jù)當(dāng)前顯示的信息將數(shù)據(jù)導(dǎo)到相關(guān)的Excel文件中,并且存儲(chǔ)在指定的目錄下。數(shù)據(jù)導(dǎo)出功能的實(shí)現(xiàn)主要用到Dao類里的ExportToExcel方法。
ExportToExcel方法的關(guān)鍵代碼如下:
for(int i=0;i<iMaxCol;i++)
{xlApp.Cells[2,i+1] =ds.Tables[0].Columns[i].ColumnName;
}
//填充數(shù)據(jù)
for(int iRow=0;iRow<iMaxRow;iRow++)
{for(int iCol=0;iCol<iMaxCol;iCol++)
{xlApp.Cells[iRow+3,iCol+1] =ds.Tables[0].Rows[iRow][iCol].ToString();
}}
3.3.4 屏幕截圖功能
為了方便當(dāng)前頁面的信息查看,本系統(tǒng)提供了當(dāng)前活動(dòng)窗體的屏幕截圖功能。具體實(shí)現(xiàn)過程:通過單擊“屬性操作”工具欄的“截取當(dāng)前屏幕”按鈕,則會(huì)將當(dāng)前窗體屏幕保存到指定目錄中。屏幕截圖功能的實(shí)現(xiàn)主要用到MyGraphics類里的CaptureScreen和ResizeBitmap。
CaptureScreen實(shí)現(xiàn)代碼如下:
public static void CaptureScreen(Form f)
{Graphics mygraphics=f.CreateGraphics();
Size s=f.Size;
memoryImage=new Bitmap(s.Width - 228,s.Height - 75,mygraphics);
Graphics memoryGraphics=Graphics.FromImage(memoryImage);
IntPtr dc1=mygraphics.GetHdc();
IntPtr dc2=memoryGraphics.GetHdc();
BitBlt(dc2,0,0,f.ClientRectangle.Width - 218,f.ClientRectangle.Height - 22,dc1,218,22,13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
memoryImage=ResizeBitmap(memoryImage,770,770*671/911);
}
3.3.5 備份/恢復(fù)數(shù)據(jù)功能
為了更好的保護(hù)數(shù)據(jù),本系統(tǒng)提供了數(shù)據(jù)庫備份和恢復(fù)功能。在備份/恢復(fù)數(shù)據(jù)窗體中用到Label、Text-Box、Button、ListView和CheckBox控件。數(shù)據(jù)備份的具體實(shí)現(xiàn)過程:單擊“數(shù)據(jù)備份”,則會(huì)在ListView中添加新創(chuàng)建的數(shù)據(jù)備份文檔,并且會(huì)顯示當(dāng)前備份文檔的備份時(shí)間,如果選擇了“數(shù)據(jù)備份過程中,清理以前所有的備份”,則在創(chuàng)建新備份文檔的同時(shí)會(huì)刪除之前的所有備份文檔。數(shù)據(jù)恢復(fù)的具體實(shí)現(xiàn)過程:首先選擇要恢復(fù)的數(shù)據(jù)備份文檔,然后單擊“數(shù)據(jù)恢復(fù)”,則實(shí)現(xiàn)了數(shù)據(jù)恢復(fù)功能。備份和恢復(fù)功能的實(shí)現(xiàn)主要用到DataClass類里的backupDb和restoreDb。
backupDb關(guān)鍵代碼如下:
if(format)sql="BACKUP DATABASE"+dbName+"TO DISK= '"+backupName+" 'with format";
elsesql="BACKUP DATABASE"+dbName+"TO DISK= '"+backupName+" 'with noformat";
restoreDb關(guān)鍵代碼如下:
string sql="use master exec killspid '"+dbName+"'RESTORE DATABASE"+dbName+"from disk= '"+reStoreName+" 'WITH file="+bakFile+"";
本系統(tǒng)把以前繁瑣地危險(xiǎn)源和危險(xiǎn)品信息的查詢和管理過程整合到一個(gè)系統(tǒng)中,并且界面簡潔大方,方便操作,而且很好地處理了危險(xiǎn)源與危險(xiǎn)品間的關(guān)系,保證了數(shù)據(jù)的完整性和一致性。而且還支持模糊查詢,能快速地讓政府和企業(yè)了解危險(xiǎn)源的事故特征、危險(xiǎn)品的主要特性等信息,以便做出正確的決策。其次本系統(tǒng)給用戶提供了強(qiáng)大的幫助文檔,可使用戶對(duì)危險(xiǎn)源和危險(xiǎn)品等相關(guān)知識(shí)有更多的了解。
[1] 高建明,曾明榮.我國危險(xiǎn)化學(xué)品安全生產(chǎn)現(xiàn)狀與對(duì)策[J].中國安全生產(chǎn)科學(xué)技術(shù),2005,1(3):52-55.
[2] 李鑫,陸海東.危險(xiǎn)化學(xué)品查詢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].吉林化工學(xué)院學(xué)報(bào),2005,22(4):50-52.
[3] James W.Cooper.C#Design Patterns:A Tutorial[M].BeiJing:Publishing House of Tsinghua University,2004.
On the Development of Decision-making System for Unexpected Hazardous Chemical Leakage Accident Emergency Based on.NET
WANG Chong-Yang
(College of Science,Changchun University of Science and Technology,Changchun 130022,China)
This paper introduces the process of developing the decision-making system for the unexpected dangerous chemical leakage accident emergency under C/S pattern.This system,which is a decision-making system with complete functions,implements the information management and fuzzy query on dangerous source and goods by means of Visual Studio.Net platform,C#language and SQL Server 2000 database.
dangerous chemical;fuzzy inquiry;unexpected leaking;decision-making system
TP392
A
1009-3907(2012)06-0669-04
2012-04-10
王崇陽(1977-),男,遼寧鞍山人,講師,主要從事計(jì)算機(jī)程序設(shè)計(jì)和高等數(shù)學(xué)方面研究。
責(zé)任編輯:吳旭云