張樂吟
(廣東食品藥品職業學院 廣東省廣州市 510520)
除了通用的操作平臺和辦公軟件以外,健康、醫藥等不同行業的專業化軟件占有很大一部分市場份額。然而,傳統的軟件人才只懂得單一的計算機知識,對其他領域知之甚少,無法理解市場和客戶的需求。衛生信息管理專業是信息學在醫藥衛生領域應用中產生的一門交叉學科,致力于為新醫改環境下的醫療衛生機構、企事業單位和醫療信息化企業培養既精通IT 技術,又理解健康醫療行業基本知識的高素質復合應用型專業人才。
《C/S 系統設計與開發》是廣東食品藥品職業學院衛生信息管理專業一年級下學期的期末綜合實訓周,其先修課程是《C#程序設計》和《數據庫技術與應用(SQL Server)》。將電子病歷系統引入本專業實訓,可以培養學生綜合運用IT 技術解決健康醫療行業問題的能力,為今后的專業學習和實習就業奠定良好基礎。
電子病歷是指以電子化方式管理的個人健康狀態和醫療保健信息[1]。電子病歷系統是醫院信息系統的核心,在提高醫療質量和區域醫療衛生平臺建設等方面具有重要意義[2]。考慮到實訓只有一周時間,我們將功能模塊結構圖簡化為圖1。該系統采用C/S 結構,以Visual Studio 2017 為開發工具,采用C#面向對象程序設計語言,數據庫采用Microsoft SQL Server 2014。基于“高內聚,低耦合”的軟件設計思想,電子病歷系統采用三層邏輯架構設計,實現表現層(Presentation Layer)、業務邏輯層(Business Tier)與數據訪問層(Data Tier)的邏輯分離,使程序邏輯清晰,便于代碼管理。
三層體系架構解決方案包含4 個項目,分別為實體類庫、數據訪問層、業務邏輯層和表現層。表現層(UI)創建為Windows 窗體應用程序項目,主要負責實現交互界面;業務邏輯層(BLL)和數據訪問層(DAL)創建為類庫項目,分別實現系統的業務邏輯和數據庫操作;還需要創建一個類庫項目用于封裝實體類(Model),實現在各層之間傳遞數據。由于這4 個項目相互獨立,還需要添加各項目之間的依賴關系,才能使其協同工作。

圖1:電子病歷系統的功能模塊結構圖(簡化)
3.2.1 數據庫設計
數據庫設計應該科學合理,主要包括以下數據表:
(1)用戶登錄和權限表(醫生ID、密碼、權限、姓名、性別、出生日期、職稱、科室、身份證號、電話);
(2)患者信息表(患者ID、姓名、性別、婚姻狀況、出生日期、住址、電話、身份證號、醫保卡號、過敏史、血型、身高、體重);
(3)病歷表(病歷ID、患者ID、創建時間、主治醫生、科室、主訴、用藥、醫囑、收費);
(4)藥品表(藥品ID、名稱、單價、醫保報銷比例、庫存、廠家、生產日期);
(5)掛號表(掛號ID、患者ID、就診時間、主治醫生、科室)。3.2.2 防范SQL 注入攻擊
在C#程序中操作數據庫,需要使用ADO.NET 五大對象,包 括SqlConnection 類、SqlCommand 類、SqlDataReader 類、SqlDataAdapter 類和DataSet 類。另外,還需要編寫SQL 命令,然后將SQL 語句字符串作為SqlCommand 對象的參數來執行對數據庫的操作,如果SQL 語句查詢條件使用了拼接字符串的方法,例如以下代碼:



表1:電子病歷系統測試用例的設計
3.2.3 數據庫操作封裝為工具類
患者管理、用戶管理、藥品管理、病歷管理等模塊主要涉及到數據庫的增(insert)、刪(delete)、查(select)、改(update)操作,很多代碼都是重復的。軟件開發初學者往往會復制黏貼這些重復代碼。為了提高項目的開發效率,應該將常用的數據庫操作封裝到工具類SqlHelper 中,在后續項目中直接使用,提高代碼復用;也有利于降低后期軟件維護成本。
3.2.4 數據庫的備份還原操作
使用master 數據庫連接,實現SQL 數據庫的備份(BACKUP)和還原(RESTORE)操作。把備份數據庫還原到當前數據庫的位置上,數據庫中不能有活動的用戶。在還原操作之前,可以運行SQL 腳本, 對系統表sysprcoesses 進行檢查, 強行關閉(Kill)所有連接當前數據庫的進程[3]。SQL 代碼如下:

患者相片的存儲和顯示是選做任務,課堂上沒有講過,要求學生自行查找相關資料,培養學生分析和解決新問題的能力。圖像在數據庫中主要有兩種存儲方式。第一種方法是保存圖像文件的存儲路徑,然后通過獲取路徑來實現對文件的讀寫操作。第二種方法的原理是,任何文件本質上都是二進制序列,因此可以把圖像文件轉化成二進制序列,保存在SQL 數據庫的image 數據類型中。
測試應該貫穿于項目的整個過程,避免錯誤隨開發的深入而產生疊加效應。學生常見的誤區是寫完所有代碼后再進行測試,導致難以定位錯誤。本實訓采用黑盒測試,通過輸入條件,觀察輸出結果是否符合預期。如果結果不符合預期,要進一步采用白盒測試和單步調試,排除運行故障。如表1所示。
《電子病歷系統設計與開發(C/S)》實訓教學設計,使學生能夠運用C#程序設計的技術方法,開發小型健康醫療系統,提高其實際應用技能,達到理論聯系實際、活學活用的基本目標,為后續的專業學習以及實習就業奠定堅實基礎。