唐 燕 黃友良 陳國勇 武 彬
(北京中醫(yī)藥大學(xué)信息中心 北京 100029) (上海理工大學(xué)出版?zhèn)髅脚c藝術(shù)設(shè)計學(xué)院 上海 200093)
?
網(wǎng)絡(luò)預(yù)約掛號系統(tǒng)設(shè)計與實現(xiàn)*
唐 燕 黃友良 陳國勇 武 彬
(北京中醫(yī)藥大學(xué)信息中心 北京 100029) (上海理工大學(xué)出版?zhèn)髅脚c藝術(shù)設(shè)計學(xué)院 上海 200093)
從系統(tǒng)需求分析、體系架構(gòu)、數(shù)據(jù)庫的設(shè)計、系統(tǒng)業(yè)務(wù)流程及系統(tǒng)實現(xiàn)中的關(guān)鍵技術(shù)等方面介紹國醫(yī)堂網(wǎng)絡(luò)預(yù)約掛號系統(tǒng)的設(shè)計與實現(xiàn),指出該系統(tǒng)方便患者通過網(wǎng)絡(luò)提前預(yù)約掛號,有效緩解“掛號難”問題,有助于醫(yī)院管理人員優(yōu)化就醫(yī)流程、合理有效分配醫(yī)療資源。
預(yù)約掛號; B/S;3層體系結(jié)構(gòu)
北京中醫(yī)藥大學(xué)創(chuàng)辦的國醫(yī)堂中醫(yī)門診部是以中醫(yī)藥為特色的診療機構(gòu),云集多名全國中醫(yī)知名專家,掛號難問題非常突出。為了方便患者就醫(yī),節(jié)省掛號時間,合理安排就醫(yī)流程,提高醫(yī)院的管理水平和醫(yī)療服務(wù)水平,醫(yī)院實行預(yù)約掛號和現(xiàn)場掛號兩種方式。其中,預(yù)約掛號主要以網(wǎng)絡(luò)預(yù)約為主,暫時沒有開通電話、短信、微信等掛號方式。但是,目前的預(yù)約掛號功能很不完善,甚至提交預(yù)約信息后不能馬上確定是否預(yù)約成功。如果患者在就醫(yī)前收到郵件,則預(yù)約成功;否則預(yù)約不成功。除此外,患者無法取消預(yù)約、無法查詢預(yù)約記錄、無法給醫(yī)生留言等,預(yù)約掛號系統(tǒng)功能亟待改進。
網(wǎng)上預(yù)約掛號系統(tǒng)是醫(yī)院管理信息系統(tǒng)中非常重要的組成部分,可以有效緩解掛號難以及高峰時段掛號、就醫(yī)壓力等問題[1]。同時,通過網(wǎng)上預(yù)約掛號系統(tǒng),患者可以了解醫(yī)院、醫(yī)生情況,可以進行醫(yī)患溝通;醫(yī)院也可以及時了解預(yù)約情況,合理安排醫(yī)療資源。因此,本文對國醫(yī)堂的預(yù)約掛號系統(tǒng)重新進行了設(shè)計和改進。
經(jīng)過調(diào)研,患者、醫(yī)生、掛號處人員、醫(yī)務(wù)管理者使用網(wǎng)絡(luò)預(yù)約掛號系統(tǒng)掛號的完整過程如下:打開掛號系統(tǒng),患者注冊并登錄系統(tǒng),查看醫(yī)院通知、醫(yī)生介紹,瀏覽醫(yī)生出診情況,選定醫(yī)生和時間預(yù)約掛號,收到預(yù)約短信,預(yù)約成功。等到就診當(dāng)日,在掛號處確認,交費、取號,按順序等待醫(yī)生看?。会t(yī)生在出門診前,可以登錄掛號系統(tǒng),查看個人的出診情況,患者的預(yù)約情況,提前了解患者病情;掛號處工作人員每天對網(wǎng)絡(luò)預(yù)約掛號的患者進行確認,同時及時統(tǒng)計爽約的患者;醫(yī)務(wù)管理人員對醫(yī)生、注冊的患者進行管理,負責(zé)醫(yī)院信息、調(diào)診、停診信息的發(fā)布,取消預(yù)約,修改出診信息,將爽約3次的患者加入黑名單。通過分析,系統(tǒng)的用戶有患者、醫(yī)生、掛號處人員、醫(yī)務(wù)管理者。因此對整個系統(tǒng)分角色進行管理,不同角色權(quán)限不同、界面不同、功能也不同。經(jīng)過需求分析,各類用戶的功能,見圖1。
圖1 系統(tǒng)總體功能
3.1 系統(tǒng)體系結(jié)構(gòu)設(shè)計
3.1.1 3層體系架構(gòu) 系統(tǒng)在Visual Studio 2010平臺中使用Asp.net 和 C#進行開發(fā),后臺數(shù)據(jù)庫為SQL Server 2008。采用B/S 3層體系結(jié)構(gòu)進行設(shè)計,自頂向下依次為表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層[2]。整個系統(tǒng)的3層體系結(jié)構(gòu),見圖2。
圖2 系統(tǒng)3層體系架構(gòu)
3.1.2 表示層 用來展示用戶界面,為用戶提供一種交互式、友好、優(yōu)雅的界面,顯示數(shù)據(jù)和接收用戶輸入的數(shù)據(jù);系統(tǒng)中使用多個.aspx頁面、用戶控件、服務(wù)器控件、安全控件等實現(xiàn)表示層的功能。表示層如同系統(tǒng)和用戶之間的橋梁,通過表示層完成患者獲得醫(yī)生出診情況,提交預(yù)約信息等所有功能。
3.1.3 業(yè)務(wù)邏輯層 主要完成業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計。業(yè)務(wù)邏輯層在體系架構(gòu)中的位置很重要,它處于數(shù)據(jù)訪問層與表示層中間,起到了數(shù)據(jù)交換中承上啟下的作用。完成整個系統(tǒng)中最復(fù)雜的應(yīng)用,例如在系統(tǒng)中該醫(yī)生是否可以預(yù)約、該患者是否加入黑名單等這些功能都在業(yè)務(wù)邏輯層實現(xiàn)。
3.1.4 數(shù)據(jù)訪問層 也稱為持久層,其功能主要是負責(zé)數(shù)據(jù)庫的訪問。數(shù)據(jù)層根據(jù)需要把所需數(shù)據(jù)存放于相應(yīng)的數(shù)據(jù)庫或數(shù)據(jù)倉庫中,作為檢索、分析的數(shù)據(jù)源。通過數(shù)據(jù)訪問層可以訪問數(shù)據(jù)庫系統(tǒng)、二進制文件、文本文檔或是XML文檔。系統(tǒng)在該層通過配置文件保存數(shù)據(jù)庫的連接方式,通過封裝存儲過程或一些公共類實現(xiàn)對數(shù)據(jù)庫各種操作。
3.2 系統(tǒng)數(shù)據(jù)庫的設(shè)計
3.2.1 表設(shè)計 系統(tǒng)數(shù)據(jù)庫采用SQL Server 2008,根據(jù)分析,數(shù)據(jù)庫中包含7張表,分別為醫(yī)生信息表、患者信息表、醫(yī)生出診表、預(yù)約明細表、患者留言表、醫(yī)院信息表、系統(tǒng)用戶表。各個表的結(jié)構(gòu)如下:醫(yī)生信息表(醫(yī)生ID,姓名,性別,學(xué)歷,職稱,專長,簡介,手機,照片);患者信息表(患者ID,身份證號,姓名,性別,生日,手機,電子郵箱,家庭住址,醫(yī)保類別,預(yù)約次數(shù),最后預(yù)約時間,加入黑名單否,解除日期);醫(yī)生出診表(出診ID,醫(yī)生ID,星期,診室,時間,允許預(yù)約人數(shù),已約人數(shù));預(yù)約明細表(預(yù)約ID,患者ID,出診ID,預(yù)約日期,預(yù)約成功否,發(fā)送短信否,是否取號);患者留言表(患者ID、醫(yī)生ID、預(yù)約ID、留言);醫(yī)院信息表(標(biāo)題,內(nèi)容,圖片,發(fā)布日期,發(fā)布時間,發(fā)布部門,撰稿人);系統(tǒng)用戶表(角色,用戶名,密碼)。
3.2.2 對應(yīng)關(guān)系 醫(yī)生信息表和醫(yī)生出診表之間有1對多的關(guān)系;患者信息表和預(yù)約明細表之間有1對多的關(guān)系;醫(yī)生出診表和預(yù)約明細表之間有1對多的關(guān)系;預(yù)約明細表和患者留言表之間有1對1的關(guān)系。并且為了實現(xiàn)1個患者1天只能預(yù)約同1個醫(yī)生的1個號,在預(yù)約明細表中用患者ID+出診ID+預(yù)約日期建立唯一索引,實現(xiàn)這種限制。
3.3 系統(tǒng)業(yè)務(wù)流程
在預(yù)約掛號系統(tǒng)中,當(dāng)醫(yī)務(wù)管理人員發(fā)布醫(yī)院通知、醫(yī)生信息、醫(yī)生出診信息后,其他用戶登錄系統(tǒng)后都能看到最新消息[3]。醫(yī)務(wù)管理人員權(quán)限較大,還能管理患者信息、患者黑名單。如果醫(yī)生出診情況有變動,能取消患者的預(yù)約并發(fā)短信通知已經(jīng)預(yù)約的患者。使用系統(tǒng)的患者要先注冊信息,才能登錄進行預(yù)約掛號、取消預(yù)約、瀏覽醫(yī)院信息、醫(yī)生信息、出診信息等操作。在預(yù)約時,判斷患者是否為黑用戶,醫(yī)生是否已經(jīng)約滿,如果都不是,則預(yù)約成功。系統(tǒng)會自動發(fā)送手機短信,確認預(yù)約成功,患者還可以給預(yù)約的醫(yī)生留言。對于醫(yī)生用戶,登錄系統(tǒng)后除可以查看各種信息外,還可以修改個人信息、瀏覽患者的留言,以便提前了解病情。掛號處人員登錄系統(tǒng)后,也可以瀏覽各種信息、進行爽約處理,最主要的功能是查詢預(yù)約記錄是否正確,如果是,給患者掛號,否則無法掛號。整個系統(tǒng)的業(yè)務(wù)流程,見圖3。
圖3 系統(tǒng)業(yè)務(wù)流程
4.1 登錄模塊圖形驗證碼生成技術(shù)
登錄模塊是每個系統(tǒng)中非常重要、必不可缺的模塊,本系統(tǒng)中的登錄模塊不但要選擇用戶的身份,以便不同用戶進入不同界面,還需要防止非法用戶進行惡意攻擊等安全問題。為了保證系統(tǒng)的安全,防止攻擊者編寫程序重復(fù)登錄破解密碼,給醫(yī)院和其他用戶帶來不便,本系統(tǒng)采用動態(tài)生成的圖形碼進行驗證。要實現(xiàn)動態(tài)生成圖形驗證碼,需要兩個關(guān)鍵步驟:第一,生成指定位數(shù)的隨機字符串;第二,將生成的隨機字符串繪成圖片并顯示在登錄頁面中[4]。在程序中,使用方法CreateRandomNum()生成隨機字符串,使用方法CreateCheckCodeImage()實現(xiàn)生成圖片。具體代碼如下所示:
//生成隨機字符串
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(',');//拆分成數(shù)組
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()中,從數(shù)字或字母中隨機生成4個字符組成字符串;將生成的字符串表示成圖形碼的方法CreateCheckCodeImage()中,還加入了隨機背景花紋等干擾元素,使得每次看到的圖片都不同。
4.2 患者預(yù)約功能
患者登錄系統(tǒng)后,預(yù)約掛號功能非常重要,實現(xiàn)的算法如下所示:(1)讀取“患者信息表”中的“加入黑名單否”和“解除日期”字段,判斷患者是否禁止預(yù)約。如果不可以預(yù)約,執(zhí)行第8步。(2)選擇預(yù)約的醫(yī)生以及預(yù)約的日期、時間。(3)查詢“醫(yī)生出診表”,找到對應(yīng)記錄并將“允許預(yù)約人數(shù)”和“已約人數(shù)”存放在兩個變量中。(4)比較兩個變量的大小,確定是否已經(jīng)預(yù)約滿。如果預(yù)約滿了則轉(zhuǎn)向第8步。(5)預(yù)約成功,調(diào)用自動發(fā)送短信模塊,為患者發(fā)送手機短信。(6)將預(yù)約記錄追加到“預(yù)約明細表”,更新“醫(yī)生出診表”中的“已約人數(shù)”字段。(7)患者可以留言,提交信息。將留言記錄追加到“患者留言表”。預(yù)約模塊結(jié)束。(8)預(yù)約不成功提示,退出預(yù)約模塊。
本文在.net平臺中,使用Asp.net和 C#設(shè)計并實現(xiàn)了基于B/S 3層體系結(jié)構(gòu)的中醫(yī)門診部網(wǎng)絡(luò)預(yù)約掛號系統(tǒng),該系統(tǒng)實現(xiàn)了患者、醫(yī)生、掛號處人員、醫(yī)務(wù)管理人員多個用戶的需求?;颊呤褂孟到y(tǒng)可以預(yù)約掛號,節(jié)省現(xiàn)場排隊時間,有效緩解掛號難問題;同時,系統(tǒng)對提高醫(yī)院的管理水平、醫(yī)療服務(wù)水平以及信息化水平都有積極的作用。系統(tǒng)設(shè)計流程規(guī)范,具有很好的擴展性,為今后的維護和升級帶來極大的便利。
1 曹課興,劉紅霞.基于JSP 的網(wǎng)上預(yù)約掛號系統(tǒng)的設(shè)計與實現(xiàn)[J].電子設(shè)計工程,2014,22(16):14-17.
2 查修齊,吳榮泉,高元鈞. C/S 到B/S 模式轉(zhuǎn)換的技術(shù)研究[J].計算機工程,2014,40(1):263-267.
3 楊旺明.基于asp.net的權(quán)限系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,2014,42(3):482-485.
4 明日科技,鄭齊心,房大偉,等.ASP.NET項目開發(fā)案例全程實錄[M].北京:清華大學(xué)出版社,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
唐燕,講師,發(fā)表論文6篇;通訊作者:武彬,講師,發(fā)表論文6篇。
北京中醫(yī)藥大學(xué)自主科研課題“基于Hadoop的大數(shù)據(jù)平臺在高校中的研究與應(yīng)用”(項目編號:2015-JYB-JSMS051)。
R-056
A 〔DOI〕10.3969/j.issn.1673-6036.2015.11.009