唐 燕 黃友良 陳國勇 武 彬
(北京中醫藥大學信息中心 北京 100029) (上海理工大學出版傳媒與藝術設計學院 上海 200093)
?
網絡預約掛號系統設計與實現*
唐 燕 黃友良 陳國勇 武 彬
(北京中醫藥大學信息中心 北京 100029) (上海理工大學出版傳媒與藝術設計學院 上海 200093)
從系統需求分析、體系架構、數據庫的設計、系統業務流程及系統實現中的關鍵技術等方面介紹國醫堂網絡預約掛號系統的設計與實現,指出該系統方便患者通過網絡提前預約掛號,有效緩解“掛號難”問題,有助于醫院管理人員優化就醫流程、合理有效分配醫療資源。
預約掛號; B/S;3層體系結構
北京中醫藥大學創辦的國醫堂中醫門診部是以中醫藥為特色的診療機構,云集多名全國中醫知名專家,掛號難問題非常突出。為了方便患者就醫,節省掛號時間,合理安排就醫流程,提高醫院的管理水平和醫療服務水平,醫院實行預約掛號和現場掛號兩種方式。其中,預約掛號主要以網絡預約為主,暫時沒有開通電話、短信、微信等掛號方式。但是,目前的預約掛號功能很不完善,甚至提交預約信息后不能馬上確定是否預約成功。如果患者在就醫前收到郵件,則預約成功;否則預約不成功。除此外,患者無法取消預約、無法查詢預約記錄、無法給醫生留言等,預約掛號系統功能亟待改進。
網上預約掛號系統是醫院管理信息系統中非常重要的組成部分,可以有效緩解掛號難以及高峰時段掛號、就醫壓力等問題[1]。同時,通過網上預約掛號系統,患者可以了解醫院、醫生情況,可以進行醫患溝通;醫院也可以及時了解預約情況,合理安排醫療資源。因此,本文對國醫堂的預約掛號系統重新進行了設計和改進。
經過調研,患者、醫生、掛號處人員、醫務管理者使用網絡預約掛號系統掛號的完整過程如下:打開掛號系統,患者注冊并登錄系統,查看醫院通知、醫生介紹,瀏覽醫生出診情況,選定醫生和時間預約掛號,收到預約短信,預約成功。等到就診當日,在掛號處確認,交費、取號,按順序等待醫生看病;醫生在出門診前,可以登錄掛號系統,查看個人的出診情況,患者的預約情況,提前了解患者病情;掛號處工作人員每天對網絡預約掛號的患者進行確認,同時及時統計爽約的患者;醫務管理人員對醫生、注冊的患者進行管理,負責醫院信息、調診、停診信息的發布,取消預約,修改出診信息,將爽約3次的患者加入黑名單。通過分析,系統的用戶有患者、醫生、掛號處人員、醫務管理者。因此對整個系統分角色進行管理,不同角色權限不同、界面不同、功能也不同。經過需求分析,各類用戶的功能,見圖1。

圖1 系統總體功能
3.1 系統體系結構設計
3.1.1 3層體系架構 系統在Visual Studio 2010平臺中使用Asp.net 和 C#進行開發,后臺數據庫為SQL Server 2008。采用B/S 3層體系結構進行設計,自頂向下依次為表示層、業務邏輯層和數據訪問層[2]。整個系統的3層體系結構,見圖2。

圖2 系統3層體系架構
3.1.2 表示層 用來展示用戶界面,為用戶提供一種交互式、友好、優雅的界面,顯示數據和接收用戶輸入的數據;系統中使用多個.aspx頁面、用戶控件、服務器控件、安全控件等實現表示層的功能。表示層如同系統和用戶之間的橋梁,通過表示層完成患者獲得醫生出診情況,提交預約信息等所有功能。
3.1.3 業務邏輯層 主要完成業務規則的制定、業務流程的實現等與業務需求有關的系統設計。業務邏輯層在體系架構中的位置很重要,它處于數據訪問層與表示層中間,起到了數據交換中承上啟下的作用。完成整個系統中最復雜的應用,例如在系統中該醫生是否可以預約、該患者是否加入黑名單等這些功能都在業務邏輯層實現。
3.1.4 數據訪問層 也稱為持久層,其功能主要是負責數據庫的訪問。數據層根據需要把所需數據存放于相應的數據庫或數據倉庫中,作為檢索、分析的數據源。通過數據訪問層可以訪問數據庫系統、二進制文件、文本文檔或是XML文檔。系統在該層通過配置文件保存數據庫的連接方式,通過封裝存儲過程或一些公共類實現對數據庫各種操作。
3.2 系統數據庫的設計
3.2.1 表設計 系統數據庫采用SQL Server 2008,根據分析,數據庫中包含7張表,分別為醫生信息表、患者信息表、醫生出診表、預約明細表、患者留言表、醫院信息表、系統用戶表。各個表的結構如下:醫生信息表(醫生ID,姓名,性別,學歷,職稱,專長,簡介,手機,照片);患者信息表(患者ID,身份證號,姓名,性別,生日,手機,電子郵箱,家庭住址,醫保類別,預約次數,最后預約時間,加入黑名單否,解除日期);醫生出診表(出診ID,醫生ID,星期,診室,時間,允許預約人數,已約人數);預約明細表(預約ID,患者ID,出診ID,預約日期,預約成功否,發送短信否,是否取號);患者留言表(患者ID、醫生ID、預約ID、留言);醫院信息表(標題,內容,圖片,發布日期,發布時間,發布部門,撰稿人);系統用戶表(角色,用戶名,密碼)。
3.2.2 對應關系 醫生信息表和醫生出診表之間有1對多的關系;患者信息表和預約明細表之間有1對多的關系;醫生出診表和預約明細表之間有1對多的關系;預約明細表和患者留言表之間有1對1的關系。并且為了實現1個患者1天只能預約同1個醫生的1個號,在預約明細表中用患者ID+出診ID+預約日期建立唯一索引,實現這種限制。
3.3 系統業務流程
在預約掛號系統中,當醫務管理人員發布醫院通知、醫生信息、醫生出診信息后,其他用戶登錄系統后都能看到最新消息[3]。醫務管理人員權限較大,還能管理患者信息、患者黑名單。如果醫生出診情況有變動,能取消患者的預約并發短信通知已經預約的患者。使用系統的患者要先注冊信息,才能登錄進行預約掛號、取消預約、瀏覽醫院信息、醫生信息、出診信息等操作。在預約時,判斷患者是否為黑用戶,醫生是否已經約滿,如果都不是,則預約成功。系統會自動發送手機短信,確認預約成功,患者還可以給預約的醫生留言。對于醫生用戶,登錄系統后除可以查看各種信息外,還可以修改個人信息、瀏覽患者的留言,以便提前了解病情。掛號處人員登錄系統后,也可以瀏覽各種信息、進行爽約處理,最主要的功能是查詢預約記錄是否正確,如果是,給患者掛號,否則無法掛號。整個系統的業務流程,見圖3。

圖3 系統業務流程
4.1 登錄模塊圖形驗證碼生成技術
登錄模塊是每個系統中非常重要、必不可缺的模塊,本系統中的登錄模塊不但要選擇用戶的身份,以便不同用戶進入不同界面,還需要防止非法用戶進行惡意攻擊等安全問題。為了保證系統的安全,防止攻擊者編寫程序重復登錄破解密碼,給醫院和其他用戶帶來不便,本系統采用動態生成的圖形碼進行驗證。要實現動態生成圖形驗證碼,需要兩個關鍵步驟:第一,生成指定位數的隨機字符串;第二,將生成的隨機字符串繪成圖片并顯示在登錄頁面中[4]。在程序中,使用方法CreateRandomNum()生成隨機字符串,使用方法CreateCheckCodeImage()實現生成圖片。具體代碼如下所示:
//生成隨機字符串
private string CreateRandomNum()
{
String str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] strArray = str.Split(',');//拆分成數組
string randonStr = "";
Random r = new Random();
for (int i = 0; i < 4; i++)//字符串由4個字符組成
{
int t = r.Next(35);
randonStr += strArray[t];
}
return randonStr;
}
//將隨機字符串生成圖
private void CreateCheckCodeImage(string str)
{
if (str == null || str.Trim() == String.Empty)
return;
//生成圖片
System.Drawing.Bitmap image = new System.Drawing.Bitmap(str.Length * 12 + 10, 22);
Graphics g = Graphics.FromImage(image);
try
{
Random random = new Random();//生成隨機生成器
g.Clear(Color.White); //清空圖片背景色
for (int i = 0; i < 25; i++)//畫圖片的背景噪音線
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold |System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush= new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(str, font, brush, 2, 2);
for (int i = 0; i < 100; i++)//畫圖片的前景噪音點
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); //畫圖片的邊框線
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
在生成隨機字符串方法CreateRandomNum()中,從數字或字母中隨機生成4個字符組成字符串;將生成的字符串表示成圖形碼的方法CreateCheckCodeImage()中,還加入了隨機背景花紋等干擾元素,使得每次看到的圖片都不同。
4.2 患者預約功能
患者登錄系統后,預約掛號功能非常重要,實現的算法如下所示:(1)讀取“患者信息表”中的“加入黑名單否”和“解除日期”字段,判斷患者是否禁止預約。如果不可以預約,執行第8步。(2)選擇預約的醫生以及預約的日期、時間。(3)查詢“醫生出診表”,找到對應記錄并將“允許預約人數”和“已約人數”存放在兩個變量中。(4)比較兩個變量的大小,確定是否已經預約滿。如果預約滿了則轉向第8步。(5)預約成功,調用自動發送短信模塊,為患者發送手機短信。(6)將預約記錄追加到“預約明細表”,更新“醫生出診表”中的“已約人數”字段。(7)患者可以留言,提交信息。將留言記錄追加到“患者留言表”。預約模塊結束。(8)預約不成功提示,退出預約模塊。
本文在.net平臺中,使用Asp.net和 C#設計并實現了基于B/S 3層體系結構的中醫門診部網絡預約掛號系統,該系統實現了患者、醫生、掛號處人員、醫務管理人員多個用戶的需求。患者使用系統可以預約掛號,節省現場排隊時間,有效緩解掛號難問題;同時,系統對提高醫院的管理水平、醫療服務水平以及信息化水平都有積極的作用。系統設計流程規范,具有很好的擴展性,為今后的維護和升級帶來極大的便利。
1 曹課興,劉紅霞.基于JSP 的網上預約掛號系統的設計與實現[J].電子設計工程,2014,22(16):14-17.
2 查修齊,吳榮泉,高元鈞. C/S 到B/S 模式轉換的技術研究[J].計算機工程,2014,40(1):263-267.
3 楊旺明.基于asp.net的權限系統的設計與實現[J].計算機與數字工程,2014,42(3):482-485.
4 明日科技,鄭齊心,房大偉,等.ASP.NET項目開發案例全程實錄[M].北京:清華大學出版社,2013:106-109.
Design and Implementation of Online Appointment Registration System
TANGYan,HUANGYou-liang,CHENGuo-yong,InformationCenter,BeijingUniversityofChineseMedicine,Beijing100029,China;WUBin,
PrintMediaandArtDesignCollege,UniversityofShanghaiforScienceandTechnology,Shanghai200093,China
The paper introduces the design and implementation of Guoyitang online appointment registration system from the system requirement analysis, system structure, database design, system business process and key techniques in system implementation, etc. It points out that this system is convenient for patients to make appointments and get registered online, effective for solving the problem of "registration difficulty", and beneficial for hospital management personnel to optimize the medical procedure and distribute medical resources reasonably and effectively.
Appointment registration; B/S; Three-tier architecture
2015-03-23
唐燕,講師,發表論文6篇;通訊作者:武彬,講師,發表論文6篇。
北京中醫藥大學自主科研課題“基于Hadoop的大數據平臺在高校中的研究與應用”(項目編號:2015-JYB-JSMS051)。
R-056
A 〔DOI〕10.3969/j.issn.1673-6036.2015.11.009