張樂吟
(廣東食品藥品職業(yè)學院 廣東省廣州市 510520)
除了通用的操作平臺和辦公軟件以外,健康、醫(yī)藥等不同行業(yè)的專業(yè)化軟件占有很大一部分市場份額。然而,傳統(tǒng)的軟件人才只懂得單一的計算機知識,對其他領域知之甚少,無法理解市場和客戶的需求。衛(wèi)生信息管理專業(yè)是信息學在醫(yī)藥衛(wèi)生領域應用中產(chǎn)生的一門交叉學科,致力于為新醫(yī)改環(huán)境下的醫(yī)療衛(wèi)生機構、企事業(yè)單位和醫(yī)療信息化企業(yè)培養(yǎng)既精通IT 技術,又理解健康醫(yī)療行業(yè)基本知識的高素質復合應用型專業(yè)人才。
《C/S 系統(tǒng)設計與開發(fā)》是廣東食品藥品職業(yè)學院衛(wèi)生信息管理專業(yè)一年級下學期的期末綜合實訓周,其先修課程是《C#程序設計》和《數(shù)據(jù)庫技術與應用(SQL Server)》。將電子病歷系統(tǒng)引入本專業(yè)實訓,可以培養(yǎng)學生綜合運用IT 技術解決健康醫(yī)療行業(yè)問題的能力,為今后的專業(yè)學習和實習就業(yè)奠定良好基礎。
電子病歷是指以電子化方式管理的個人健康狀態(tài)和醫(yī)療保健信息[1]。電子病歷系統(tǒng)是醫(yī)院信息系統(tǒng)的核心,在提高醫(yī)療質量和區(qū)域醫(yī)療衛(wèi)生平臺建設等方面具有重要意義[2]??紤]到實訓只有一周時間,我們將功能模塊結構圖簡化為圖1。該系統(tǒng)采用C/S 結構,以Visual Studio 2017 為開發(fā)工具,采用C#面向對象程序設計語言,數(shù)據(jù)庫采用Microsoft SQL Server 2014。基于“高內聚,低耦合”的軟件設計思想,電子病歷系統(tǒng)采用三層邏輯架構設計,實現(xiàn)表現(xiàn)層(Presentation Layer)、業(yè)務邏輯層(Business Tier)與數(shù)據(jù)訪問層(Data Tier)的邏輯分離,使程序邏輯清晰,便于代碼管理。
三層體系架構解決方案包含4 個項目,分別為實體類庫、數(shù)據(jù)訪問層、業(yè)務邏輯層和表現(xiàn)層。表現(xiàn)層(UI)創(chuàng)建為Windows 窗體應用程序項目,主要負責實現(xiàn)交互界面;業(yè)務邏輯層(BLL)和數(shù)據(jù)訪問層(DAL)創(chuàng)建為類庫項目,分別實現(xiàn)系統(tǒng)的業(yè)務邏輯和數(shù)據(jù)庫操作;還需要創(chuàng)建一個類庫項目用于封裝實體類(Model),實現(xiàn)在各層之間傳遞數(shù)據(jù)。由于這4 個項目相互獨立,還需要添加各項目之間的依賴關系,才能使其協(xié)同工作。
圖1:電子病歷系統(tǒng)的功能模塊結構圖(簡化)
3.2.1 數(shù)據(jù)庫設計
數(shù)據(jù)庫設計應該科學合理,主要包括以下數(shù)據(jù)表:
(1)用戶登錄和權限表(醫(yī)生ID、密碼、權限、姓名、性別、出生日期、職稱、科室、身份證號、電話);
(2)患者信息表(患者ID、姓名、性別、婚姻狀況、出生日期、住址、電話、身份證號、醫(yī)保卡號、過敏史、血型、身高、體重);
(3)病歷表(病歷ID、患者ID、創(chuàng)建時間、主治醫(yī)生、科室、主訴、用藥、醫(yī)囑、收費);
(4)藥品表(藥品ID、名稱、單價、醫(yī)保報銷比例、庫存、廠家、生產(chǎn)日期);
(5)掛號表(掛號ID、患者ID、就診時間、主治醫(yī)生、科室)。3.2.2 防范SQL 注入攻擊
在C#程序中操作數(shù)據(jù)庫,需要使用ADO.NET 五大對象,包 括SqlConnection 類、SqlCommand 類、SqlDataReader 類、SqlDataAdapter 類和DataSet 類。另外,還需要編寫SQL 命令,然后將SQL 語句字符串作為SqlCommand 對象的參數(shù)來執(zhí)行對數(shù)據(jù)庫的操作,如果SQL 語句查詢條件使用了拼接字符串的方法,例如以下代碼:
表1:電子病歷系統(tǒng)測試用例的設計
3.2.3 數(shù)據(jù)庫操作封裝為工具類
患者管理、用戶管理、藥品管理、病歷管理等模塊主要涉及到數(shù)據(jù)庫的增(insert)、刪(delete)、查(select)、改(update)操作,很多代碼都是重復的。軟件開發(fā)初學者往往會復制黏貼這些重復代碼。為了提高項目的開發(fā)效率,應該將常用的數(shù)據(jù)庫操作封裝到工具類SqlHelper 中,在后續(xù)項目中直接使用,提高代碼復用;也有利于降低后期軟件維護成本。
3.2.4 數(shù)據(jù)庫的備份還原操作
使用master 數(shù)據(jù)庫連接,實現(xiàn)SQL 數(shù)據(jù)庫的備份(BACKUP)和還原(RESTORE)操作。把備份數(shù)據(jù)庫還原到當前數(shù)據(jù)庫的位置上,數(shù)據(jù)庫中不能有活動的用戶。在還原操作之前,可以運行SQL 腳本, 對系統(tǒng)表sysprcoesses 進行檢查, 強行關閉(Kill)所有連接當前數(shù)據(jù)庫的進程[3]。SQL 代碼如下:
患者相片的存儲和顯示是選做任務,課堂上沒有講過,要求學生自行查找相關資料,培養(yǎng)學生分析和解決新問題的能力。圖像在數(shù)據(jù)庫中主要有兩種存儲方式。第一種方法是保存圖像文件的存儲路徑,然后通過獲取路徑來實現(xiàn)對文件的讀寫操作。第二種方法的原理是,任何文件本質上都是二進制序列,因此可以把圖像文件轉化成二進制序列,保存在SQL 數(shù)據(jù)庫的image 數(shù)據(jù)類型中。
測試應該貫穿于項目的整個過程,避免錯誤隨開發(fā)的深入而產(chǎn)生疊加效應。學生常見的誤區(qū)是寫完所有代碼后再進行測試,導致難以定位錯誤。本實訓采用黑盒測試,通過輸入條件,觀察輸出結果是否符合預期。如果結果不符合預期,要進一步采用白盒測試和單步調試,排除運行故障。如表1所示。
《電子病歷系統(tǒng)設計與開發(fā)(C/S)》實訓教學設計,使學生能夠運用C#程序設計的技術方法,開發(fā)小型健康醫(yī)療系統(tǒng),提高其實際應用技能,達到理論聯(lián)系實際、活學活用的基本目標,為后續(xù)的專業(yè)學習以及實習就業(yè)奠定堅實基礎。