唐 燕 黄友良 陈国勇 武 彬
(北京中医药大学信息中心 北京 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