基于C#開發(fā)電子病歷系統(tǒng)體溫曲線圖設(shè)計(jì)
電子病歷(Electronic Medical Record,EMR)系統(tǒng)是一個(gè)數(shù)字技術(shù)、計(jì)算機(jī)技術(shù)、通訊技術(shù)、軟件工程、圖形圖像綜合技術(shù)等多學(xué)科的高新科技項(xiàng)目。其完整資料、數(shù)據(jù)處理、網(wǎng)絡(luò)傳輸、診療支援、統(tǒng)計(jì)分析等均是紙質(zhì)病歷無法比擬的。
體溫是電子病歷系統(tǒng)中一個(gè)重要的數(shù)據(jù),比如某病人體溫升高可以讓臨床醫(yī)生知道該病人有發(fā)熱的癥狀。在電子病歷系統(tǒng)中,體溫單所針對的用戶是醫(yī)院的護(hù)士。護(hù)士每天記錄病人的體溫等各項(xiàng)信息,錄入到數(shù)據(jù)庫中,系統(tǒng)自動生成電子體溫單,并繪制成曲線圖。體溫曲線圖直觀地顯示了病人的體溫等相關(guān)數(shù)據(jù),這些數(shù)據(jù)與有關(guān)疾病和治療的知識相結(jié)合,可作為進(jìn)一步診斷及確定治療方案的基礎(chǔ)。
筆者參與開發(fā)的電子病歷系統(tǒng)根據(jù)某大型醫(yī)院的實(shí)際需求,在.NET平臺下全程采用C#語言開發(fā)實(shí)現(xiàn)。本文著重介紹電子病歷系統(tǒng)中體溫曲線圖的設(shè)計(jì)和實(shí)現(xiàn)。
1 電子病歷系統(tǒng)主要功能
本系統(tǒng)根據(jù)醫(yī)院的實(shí)際需求,最主要的目的是采集病人的數(shù)據(jù),使之能為臨床醫(yī)生提供所需要的診斷和決策信息,更進(jìn)一步的目的是這些信息能夠用于臨床科研。系統(tǒng)主要功能如圖1所示。
2 體溫曲線圖的設(shè)計(jì)與實(shí)現(xiàn)
2.1 體溫表的生成
在電子病歷系統(tǒng)中,每個(gè)來院就診的病患在醫(yī)院就診期間會產(chǎn)生一個(gè)病歷號,這是標(biāo)志病人的確定碼,通常在數(shù)據(jù)庫系統(tǒng)中也作為惟一的對應(yīng)碼和關(guān)鍵字。病人人院后,護(hù)士對病人進(jìn)行體溫、脈搏、呼吸等各個(gè)方面的檢測,將這些數(shù)據(jù)錄入到電子病歷系統(tǒng)中,系統(tǒng)則自動生成體溫單。
在病人的體溫單中,需要記錄并分析病人的體溫變換情況。體溫單信息的“體溫”、“脈搏”、“呼吸”這三項(xiàng)信息是要每隔4個(gè)小時(shí)記錄1次,分別在4時(shí)、8時(shí)、12時(shí)、16時(shí)、20時(shí)、24時(shí)這幾個(gè)時(shí)間段。而“大便次數(shù)”、“小便次數(shù)或量”、“攝人量”、“排出量”、“血壓”、“體重”等信息是1天記錄1次。根據(jù)體溫單信息,以1天為1個(gè)單位,畫出1天內(nèi)病人在各個(gè)時(shí)間段的“體溫”、“脈搏”、“呼吸”的曲線變化情況,以及記錄的“大便次數(shù)”、“小便次數(shù)或量”、“攝入量”、“排出量”、“血壓”、“體重”等信息。整個(gè)體溫圖1次只顯示7天的情況。在體溫圖中用坐標(biāo)以及曲線描述病人體溫的連續(xù)變化情況,直觀地滿足了護(hù)士對患者的體溫、呼吸、脈搏等信息的錄入和查詢的需要。圖2是體溫單顯示界面。
2.2 體溫圖的繪制
體溫圖是根據(jù)體溫單的數(shù)據(jù)自動生成的。由于體溫圖每次只顯示病人7天的體溫變化情況,所以設(shè)計(jì)了翻頁的功能,對住院時(shí)間久的病人通過翻頁每次跳過7天,保證病人的體溫信息完整的顯示。
2.2.1 C#的GDI+繪圖
體溫圖的繪制由.NET基類集組成的GDI+實(shí)現(xiàn),這些基類可用于在屏幕上完成定制繪圖,能把合適的指令發(fā)送到圖形設(shè)備的驅(qū)動程序上,確保在顯示器屏幕上顯示正確的輸出。
在GDI中,識別輸出設(shè)備的方式是使用對象設(shè)備環(huán)境(DC)。該對象存儲特定設(shè)備的信息,并能把GDI API函數(shù)調(diào)用轉(zhuǎn)換為要發(fā)送給該設(shè)備的指令。實(shí)現(xiàn)畫圖的功能要使用到GDI+畫圖技術(shù)。通過重寫Form類中的OnPaint(PaintEventArgs e)執(zhí)行畫圖操作。
在OnPaint()中,首先從PaintEventArgs中引用Graphics對象,繪制圖形。最后調(diào)用基類的OnPaint()方法。
在應(yīng)用程序第一次啟動,窗口第一次顯示出來時(shí),也調(diào)用了OnPaint(),所以不需要在構(gòu)造函數(shù)中復(fù)制繪圖代碼。
由于整個(gè)體溫圖比較大,而顯示窗口定為800×600,為了能完整顯示體溫圖文檔,需要在文檔超出窗口時(shí),通知窗口在右側(cè)出現(xiàn)滾動條。為此,把整個(gè)文檔區(qū)域定為(800,1 886)像素,并在窗體設(shè)計(jì)器的屬性中把AutoScroll屬性設(shè)置為True。這樣,在體溫圖超過窗口時(shí)自動出現(xiàn)滾動條。
2.2.2 絕對坐標(biāo)到相對坐標(biāo)的變換
在一般的繪圖代碼中,由于所繪制的圖形區(qū)域一般不超過窗口的大小,所以不需要特別的注意。Graphics實(shí)例在默認(rèn)情況下把坐標(biāo)解釋為是相對于窗口的,它并不知道滾動條的情況。當(dāng)用戶滑動滾動條時(shí),Windows沒有要求應(yīng)用程序重新繪制已經(jīng)顯示在屏幕中的內(nèi)容。Windows只指出屏幕上目前顯示的內(nèi)容可以平滑的移動,以匹配滾動條的位置。對于多出來的文檔部分,在應(yīng)用程序第一次顯示時(shí),沒有繪制這部分窗口,因?yàn)樵跐L動窗口前,這部分在窗口區(qū)域的外部。這表示W(wǎng)indows要求ScrollShapes應(yīng)用程序繪制這個(gè)區(qū)域。它將引發(fā)Paint事件,把這個(gè)區(qū)域作為剪切的矩形,在窗口中和原來的圖形一起顯示出來,這樣會出現(xiàn)一個(gè)窗口中有多個(gè)圖形重疊,造成圖形的混亂。
評論