文档简介
基于JAVA的医院门诊信息管理系统设计与实现摘要医院门诊信息管理系统是一个基于INTERNET的应用系统它是一个面对当前的医院门诊管理工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于INTERNET的一个信息自动化的系统整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发完成预约、诊断、开具处方、保存病历管理的全过程。医疗事业单位只需具备访问INTERNET的条件即可在系统发布的站点上进行医疗门诊的管理。在图型化的人机界面中完成日常的医疗门诊管理工作一方面摆脱了时间和空间的限制另一方面有效的解决的数据共享的问题。经过实际使用证明本文所设计的医院门诊信息管理系统可以满足医院在门诊管理方面的需要。关键词JSP医院门诊信息管理系统JSPBASEDHOSPITALOUTPATIENTINFORMATIONMANAGEMENTSYSTEMABSTRACTHOSPITALOUTPATIENTINFORMATIONMANAGEMENTSYSTEMISANINTERNETBASEDAPPLICATIONSYSTEMITISANINTERNETBASEDAUTOMATEDINFORMATIONSYSTEMTHATSOLVESTHEOUTPATIENTMEDICALMANAGEMENTOFTHEBASICWORKISSTILLINTHEMANUALANDSEMIAUTOMATEDPROCESSINGOFINFORMATIONTHEENTIRESYSTEMISSIMPLE,FRIENDLYINTERFACE,FLEXIBLE,PRACTICALANDSAFE,ANDCOMPLETETHEENTIREPROCESSOFBOOKING,DIAGNOSIS,PRESCRIBINGANDMEDICALRECORDSMANAGEMENTPRESERVATIONMEDICALINSTITUTIONSONLYNEEDVISITTHEINTERNETCANUSETHESYSTEMFORTHERELEASESITEMEDICALCLINICMANAGEMENTUSINGTHEPATTERNOFTHEMANMACHINEINTERFACECOMPLETEROUTINEOUTPATIENTMEDICALMANAGEMENTWHILEOUTOFTIMEANDSPACECONSTRAINTS,ONTHEOTHERHAND,ITISANEFFECTIVESOLUTIONTOTHEDATASHARINGPROBLEMTHROUGHPRACTICALSHOWTHATJSPBASEDHOSPITALOUTPATIENTINFORMATIONMANAGEMENTSYSTEMTOMEETTHEHOSPITALINPATIENTMANAGEMENTNEEDSKEYWORDSJSPHOSPITALOUTPATIENTINFORMATIONMANAGEMENTSYSTEM1绪论医院门诊信息管理系统是信息管理系统在医院门诊部门中的应用。随着INTERNET技术的发展其被广泛应用与各行各业医院门诊部门是其一个重要的应用领域。伴随着医院的改革医院信息化进程的加速建立基于WEB的医院门诊信息管理系统显得尤为重要。11课题研究现状分析随着医疗卫生事业的发展医院改革的深入信息的有效、高效利用已受到人们的关注。充分利用现代科技手段加强各种信息的利用开发是医院信息管理的一个重要内容也是当今医院的需要。目前的医院仅仅把医院的信息管理系统作为微机工具系统而没有发挥其管理的真正功能系统分散设计各部门独立实施没有考虑信息的关联和共享存在信息孤岛现象医院管理错综复杂从而形成了医院信息管理系统数据的多样化数据量大等特点1。通过本次医院门诊信息系统的设计解决医院系统中各种信息管理的集成问题使医院系统的各种信息管理一体化。同时了解医院门诊的流程把握信息管理系统开发概念掌握动态网站技术熟悉系统开发的进程做到会用相关工具设计和开发相关系统并实现。12技术发展趋势随着INTERNET技术的普及和发展基本上各种不同的操作系统平台上都有相应的WEB浏览器程序这就使得医院门诊信息管理系统具有非常广泛的平台兼容性。客户端仅需一个WEB浏览器程序不再需要安装其它软件。客户程序主要包括HTML页面和一些特殊的数据库访问程序它们都存放在WEB服务器上客户应用系统的设计、维护和更新工作只需在WEB服务器上进行这样就大大降低了系统安装、测试、维护的工作量2。通过基于WEB的医院门诊信息管理系统的开发可以实现对医院门诊相关信息的整合管理以及共享并且通过组件技术的应用可以使得本医院门诊信息管理系统具有很大的可扩展性和可移植性3。2医院门诊信息管理系统需求分析21业务分析211业务角色1患者角色可联机注册成为用户设定自己的登陆名及密码可按医生姓名自定义查询可基于查询结果进行预约若指定医生当日预约量已满则预约失败。预约结果随机返回给患者可对已经进行的预约情况查看或撤销。图21患者用例图2医生角色可查看预约患者的情况可查询患者病历可创建患者病历可对患者的病历进行修改。图22医生用例图3管理员角色可添加或删除医生账号。图23管理员用例图212业务词汇1医院门诊门诊是医院接诊病人的场所。病人到医院之后首先在门诊由医护人员进行接诊经过一整套的诊断手段给病人得出初步诊断并且进行进一步治疗的指导。2预约由于医院某些专家的就诊患者多医生为了确保有时间问诊患者并且患者为了确定来医院就诊时可以准时接收医生的诊断而采用的一种手段。3电子病历由于传统的纸质病历不利于保存和查询而且浪费资源所以采用将病历信息电子化便于整个医院信息的共享和交流。4医生基本信息记录医生编号、姓名、年龄、登录时的密码、职称、所属科室和专家门诊科目等医生相关信息。5患者基本信息记录注册患者的编号、姓名、登录时用户名、登录时密码、年龄、性别、家庭住址和联系电话等患者相关信息。6病历基本信息记录病历记录的编号、主治医生编号、症状、诊断、患者编号、处方等病历相关的信息。7预约信息记录预约记录的编号、主治医生的编号、患者编号、预约时间、预约就诊时间等预约相关信息。22系统需求定义本系统是基于JSP的医疗门诊信息管理系统要求实现对医院里医生信息、病人、病历以及医药信息进行有效管理及其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面4重点解决的问题包括1病历基本信息管理病历信息包括病历记录的编号、主治医生的编号、症状、诊断、患者编号、处方等内容医生可以创建病历并且可以添加病历信息和修改病历信息病人可以查询自己的病历信息。2患者基本信息管理患者基本信息包括患者编号、姓名、登录系统的用户名、登录密码、年龄、性别、家庭住址和联系电话等。患者注册时向患者表中插入一条记录。3医生基本信息管理医生基本信息包括医生的编号、姓名、年龄、性别、职称、所属科室、学历等内容管理员通过登录可以添加和删除医生信息。4预约信息管理预约信息包括记录编号、主治医生编号、患者编号、预约就诊时间等内容病人可以预约医生和取消预约医生登录后可以查询自己的预约信息。本课题的应用难点有1病历基本信息管理传统的纸质病历既不便于患者、医生查询信息也不便于保存本系统才用电子病历5。病历基本信息管理系统选择基于三层结构的C/S、B/S混合模式三层结构中底层是电子病历数据库服务器用于存储和管理病历等数据中间层是应用服务器和WEB服务器其中应用服务器用于实现系统的业务逻辑完成各种复杂的管理操作和数据存取WEB服务器用于提供系统的WEB服务还可以通过网关与外部系统进行数据交换和信息传递最上层是客户端位于门诊大厅WINDOWS用户通过专用程序完成相关操作IE用户通过浏览器使用。2预约信息管理患者登录系统预约医生信息插入预约表或者取消预约即从预约表中删除相关预约信息医生通过登录可以创建病历通过给预约的患者看病在病历表中添加病历信息。3医院门诊信息管理系统技术解决方案比较31WEB应用解决方案本系统采用动态网站技术。早期的动态网站开发技术使用的是CGIBIN接口。这种开发技术存在着严重的扩展性问题每一个新的CGI程序要求在服务器上新增一个进程。为克服这一弊端微软公司提出了ACTIVESERVERPAGESASP技术该技术利用“插件”和API简化了WEB应用程序的开发。HYPERTEXTPREPROCESSOR超文本预处理器即PHP动态网站开发技术与ASP相似也是一种嵌入HTML文档的服务器端脚本语言。还有一些技术如JAVASERVLETS技术利用该技术可以很容易地用JAVA语言编写交互式的服务器端代码。太阳微系统公司SUNMICROSYSTEMSINC在WEB服务器、应用服务器、交易系统以及开发工具供应商间广泛支持与合作下整合并平衡了已经存在的对JAVA编程环境例如JAVASERVLETS和JAVABEANS进行支持的技术和工具后产生了一种新的、开发基于WEB应用程序的方法JAVASERVERPAGES技术JSP。这种动态网站开发技术能够在任何的WEB或应用服务器上运行而且分离了应用程序的逻辑和页面显示能够进行快速的开发和测试并且简化了开发基于WEB的交互式应用程序的过程。基于此我们选择JSPJAVABEAN技术来实现相应模块的开发。32基于JSPJAVABEAN的解决方案321什么是JSPJSPJAVASERVERPAGES是由SUNMICROSYSTEMS公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术是用JAVA语言作为脚本语言的JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序6。在传统的网页HTML文件HTMHTML中加入JAVA程序片段SCRIPTLET和JSP标记TAG就构成了JSP网页JSP。WEB服务器在遇到访问JSP网页的请求时首先执行其中的程序片段然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送EMAIL等等这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行网络上传送给客户端的仅是得到的结果对客户浏览器的要求最低可以实现无PLUGIN无ACTIVEX无JAVAAPPLET甚至无FRAME。322使用JSP的好处JSP的设计目标主要是提供一种更为简便、有效的动态网页编写手段并且增强网页程序的独立性、兼容性和可重用性。它是通过以下几个方面加以实现的1简便性和有效性JSP动态网页的编写与一般的静态HTML的网页的编写十分相似只是在原来的HTML网页中加入一些JSP专有的标签或是一些脚本程序而且此项不是必需的。这样一个熟悉HTML网页编写的设计人员可以很容易进行JSP网页的开发。而且开发人员完全可以不自己编写脚本程序而只是通过JSP独有的标签利用别人已写好的部件来实现动态网页的编写。这样一个不熟悉脚本语言的网页开发者完全可以利用JSP做出漂亮的动态网页而这在其他的动态网页开发中是不可思议的。2程序的独立性JSP是JAVAAPI家族的一部分它拥有一般的JAVA程序的跨平台的特性换句话说就是拥有程序的对平台的独立性。即WRITEONCE,RUNANYWHERE3程序的兼容性因为JSP中的动态内容可以各种形式进行显示所以它可以为各种客户提供服务从使用HTML/DHTML的浏览器到使用WML的各种手提无线设备如移动电话和个人数字设备PDA再到使用XML的B2B应用都可以使用JSP的动态页面。323什么是JAVABEANJAVABEAN是一种可重复用、跨平台的软件组件。JAVABEAN可以为两种一种是有用户界面UIUSERINTERFACE的JAVABEAN还有一种是没有用户界面主要负责处理事务如数据运算操纵数据库的JAVABEAN。JSP通常访问的是后一种JAVABEAN。324使用JAVABEAN的好处JAVABEAN最大的优点在于可以实现代码的可重用性。同时JAVABEAN又具有一下特性JAVABEAN是一个公共的PUBLIC类JAVABEAN有一个不带数的构造方法JAVABEAN通过GET方法没置属性通过SET方法获取属性易于维护、使用、编写可移植性强但仅限于JAVA工作平台便于传输不论是本地还是网络可以以其它部件的模式进行工作。325使用JSPJAVABEAN的好处JSP与JAVABEAN搭配使用有3个好处使得HTML与JAVA程序分离这样便于维护代码。如果把所有的程序代码都写到JSP网中会使得代码繁杂难以维护。可以降低开发JSP网页人员对JAVA编程能力的要求。JSP侧重于生成动态网页事务处理由JAVABEAN来完成这样可以充分利用JAVABEAN组件的可重用性特点提高开发网站的效率。33JSP及JAVABEAN工作原理介绍331JSP内置对象JSP有九种内置对象REQUESTREPONSEOUTSESSIONAPPLICATIONCONFIGPAGECONTEXTPAGEEXCEPTION7。1REQUEST对象REQUEST对象代表请求对象它被包装在HTTPSERVLETREQUEST接口。通过GETPARAMETER方法可以得到REQUEST的参数通过GET、POST、HEAD等方法可以得到REQUEST的类型通过COOKIES、REFERER等可以得到请求的HTTP头。来自客户端的请求经SERVLET容器处理后有REQUEST对象进行封装。它作为JSPSERVICE方法的一个参数有容器传递给JSP页面。REQUEST对象主要方法GETATTRIBUTESTRINGNAME返回NAME属性值。GETATTRIBUTENAMES返回REQUEST对象所有属性名字。GETCOOKIES返回客户端的COOKIES对象。GETHEADERSTRINGNAME获得HTTP协议定义的文件头信息。GETHEADERSSTRINGNAME返回指定名字的REQUESTHEADER的所有值。GETMETHOD获得客户端向服务器端传送数据的方法。GETPARAMETERSTRINGNAME获得客户端传送给服务器端的参数值。GETPARAMETERNAMES获得客户端传送给服务器端的所有参数的名字。GETPARAMETERVALUESTRINGNAME获得指定参数的所有值。GETPROTOCOL获取客户端向服务器端传送数据所依据的协议名称。GETQUERYSTRING获得查询字符串。GETREQUESTURI获取发出请求字符串的客户端地址。GETREMOTEADDR获取客户端的IP地址。GETREMOTEHOST获取客户端的名字。GETSERVERNAME获取服务器的名字。GETSERVLETPATH获取客户端所请求的脚本文件的文件路径。GETSERVERPORT获取服务器的端口号。SETATTRIBUTESTRINGNAME,JAVALANGOBJECTOBJT设置名字为NAME的REQUEST参数的值该值是由JAVALANGOBJECT类型的OBJT指定。2RESPONSE对象RESPONSE被包装成HTTPSERVLETRESPONSE接口它封装了JSP产生响应然后被发送到客户端以响应客户的请求。和REQUEST对象一样它由容器生成作为JSPSERVICE方法的参数被传入JSP。因为输出流是缓冲的所以可以设置HTTP状态码和RESPONSE头。RESPONSE对象的主要方法有ADDCOOKIECOOKIECOOK添加一个COOKIE对象用来保存客户端的用户信息。ADDHEADERSTRINGNAME,STRINGVALUE添加HTTP文件头信息。CONTAINSHEADERSTRINGNAME判断指定名字的HTTP文件头是否已经存在。SENDERRORINT向客户端发送错误的信息。SETHEADERSTRINGNAME,STRINGVALUE设置指定名字的HTTP文件头的值。3PAGECONTEXT对象PAGECONTEXT对象被封装成JAVAXSERVLETJSPPAGECONTEXT接口它为JSP页面包装页面的上下文管理对属于JSP中特殊可见部分中以命名对象的访问。它的创建和初始化都是由容器完成的。PAGECONTEXT对象中常用的方法有GETATTRIBUTESCOPE检索一个特定的已经命名对象的范围。FINDATTRIBUTE用来按照页面请求、会话以及应用程序范围的顺序实现对某个已经命名属性的搜索。SETATTRIBUTE用来设置默认页面的范围或特定范围之中的已命名对象。REMOVEATTRIBUTE用来删除默认页面范围或特定范围之中已命名的对象。4SESSION对象SESSION对象用来保存每个用户的信息以便跟踪每个用户的操作状态。其中SESSION信息保存在容器里SESSION的ID保存在客户机的COOKIE中。SESSION对象的主要方法GETATTRIBUTESTRINGNAME获取与指定名字NAME相联系的信息。GETATTRIBUTENAMES返回SESSION对象中存储的每一个属性对象。GETCREATIONTIME返回SESSION被创建的时间。GETID返回唯一的标识为每一个SESSION而产生。GETLASTACCESSEDTIME返回当前SESSION对象最后被客户发送的时间。GETMAXINACTIVEINTERVAL返回总时间秒。REMOVEATTRIBUTESTRINGNAME删除与指定名字NAME的相联系的信息。SETATTRIBUTESTRINGNAME,JAVALANGOBJECTVALUE设置指定名字NAME的属性值VALUE并存储在SESSION对象中。5APPLICATION对象APPLICATION对象为多个应用程序保存信息。APPLICATION对象的主要方法GETATTRIBUTESTRINGNAME返回由NAME指定的名字APPLICATION对象的属性的值。GETATTRIBUTENAMES返回所有APPLICATION对象的属性的名字。GETINITPARAMETERSTRINGNAME返回由NAME指定的名字的APPLICATION对象的某个属性的初始值。GETSERVLETINFO返回SERVLET编译器当前版本信息。SETATTRIBUTESTRINGNAME,OBJECTOBJECT设置指定名字NAME的APPLICATION对象的属性值OBJECT6OUT对象OUT对象被封装成JAVAXSERVLETJSPJSPWRITER接口。他主要用来向客户端输出数据代表输出流的对象。OUT对象的主要方法OUTPRINT/PRINTLNBOOLEAN|CHAR|CHAR|DOUBLE|FLOAT|INT|LONG|OBJECT|STRING|输出各种类型的数据。OUTNEWLINE输出一个换行字符。OUTFLUSH输出缓冲区里的数据。OUTCLOSE关闭输出流。OUTCLEARBUFFER清除缓冲区里的是数据并把数据输出到客户端。OUTCLEAR清除缓冲区里的是数据但不会把数据输出到客户端。OUTGETBUFFERSIZE获得缓冲区的大小。OUTGETREMAINING获取缓冲区中没有被占用的空间的大小。OUTISAUTOFLUSH返回布尔值。7CONFIG对象CONFIG对象被封装成JAVAXSERVLETSERVLETCONFIG接口它表示SERVLET的配置。CONFIG对象的主要方法GETSERVLETCONTEXT返回执行者的SERVLET上下文。GETSERVLETNAME返回SERVLET的名字。GETINITPARAMETERSTRINGNAME返回名字为NAME的初始参数的值。GETINITPARAMETERNAMES返回这个JSP的所有的初始参数的名字。8PAGE对象PAGE对象是类JAVALANGOBJECT类的一个实例它是JSP本身通过这个可以对它进行访问。9EXCEPTION对象EXCEPTION对象是JAVALANGTHROWABLE类的一个实例。它指的是运行时的异常也就是被调用的错误页面的结果只在错误页面在页面指令里有ISERRORPAGETRUE的页面中才可以使用。332JSPJAVABEAN运行环境本系统建立在WINDOWSXP平台上用APACHETOMCAT作为JSP服务端引擎采用ECLIPSE作为后台设计开发环境。APACHE是一个WEB服务器环境程序启用他可以作为WEB服务器使用。不过只支持静态网页不支持动态网页如ASPJSP等。如果要在APACHE环境下运行JSP网页就需要一个解释器来执行JSP网页而这个JSP解释器就是TOMCAT。TOMCAT是一个免费且开源的SERLVET容器它是APACHE基金会的JAKARTA项目中的一个核心项目由APACHE、SUN和其它一些公司及个人共同开发而成。由于有了SUN的参与和支持最新的SERVLET和JSP规范总能在TOMCAT中得到体现。与传统的桌面应用程序不同TOMCAT中的应用程序是一个WARWEBARCHIVE文件。在TOMCAT中应用程序的部署很简单你只需将你的WAR放到TOMCAT的WEBAPP目录下TOMCAT会自动检测到这个文件并将其解压。ECLIPSE是替代IBMVISUALAGEFORJAVA的下一代IDE开发环境。根据ECLIPSE的体系结构通过开发插件它能扩展到任何语言的开发甚至能成为图片绘制的工具。ECLIPSE是开放源代码的项目其本身是用JAVA语言编写但下载的压缩包中并不包含JAVA运行环境需要用户自己另行安装JRE并且要在操作系统的环境变量中指明JRE中BIN的路径。ECLIPSE提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。4医院门诊信息管理系统概要设计41医院门诊信息管理系统文档结构定义本系统包括两个逻辑层包HOSPITALDB包和HOSPITALDBOPERATION包以及一些JSP文件。1HOSPITALDB包封装了整个网站用于完成基础功能的类具体包括HOSPITALDBUTIL辅助类用于完成一些JSP中常用的功能比如字符集的转换。HOSPITALDBINITSERVLET初始化整个SERVLET环境。HOSPITALDBDBCONNECTION与整个数据库连接返回CONNECTION对象。HOSPITALDBDEBUG记录日志将信息写入指定的日志文件中。2HOSPITALDBOPERATION包封装了所有用户角色有关的模型具体如下HOSPITALDBDBOPERATIONDBOPERATION建立用户的抽象模型供子类继承。HOSPITALDBDBOPERATIONADMIN继承自DBOPERATION定义管理员模型。HOSPITALDBDBOPERATIONDOCTOR继承自DBOPERATION定义医生模型。HOSPITALDBDBOPERATIONPATIENT继承自DBOPERATION定义患者模型。HOSPITALDBDBOPERATIONINVALIDUSEREXCEPTION继承自EXCEPTION用以封装一个表示“非法用户名”的异常。3JSP文件以适当的方式通过逻辑层与数据层交互及一些页面代码。42数据组织与定义421数据库概念设计医院门诊信息管理系统的数据库功能主要体现在对各种信息的提供、保存、更新和查找操作上主要包括患者信息、医生信息、预约信息8。因此患者和医生有不同的权限因此身份不同。用户信息记录不同的用户资料。预约信息有预约时间、预约用户等。经过上述功能分析和需求总结考虑到将来功能上的扩展设计如下的数据项和数据结构管理员信息包括数据项管理员名、密码等。医生信息包括数据项医生名、密码等。患者信息包括数据项用户名、密码等。预约信息包括数据项医生名、预约时间等。由上面的数据项和数据结构以及系统的功能分析得到系统数据库的实体联系图如图43系统数据库ER图432数据库逻辑设计根据以上分析知系统需要的基本信息表有管理员信息表、医生信息表、患者信息表、病历记录表和预约记录表。本系统是一个多用户系统牵涉多个管理人员和多用户因此需要针对不同类别的用户进行密码认证和权限限制防止出现越权现象。部分具体数据库设计如下1医生表用于存储医生的个人信息。表41医生表的结构字段名类型备注约束条默认值DIDVARCHER5医生编号主键NAMEVARCHAR12姓名索引AGETINYINT3UNSIGNED年龄0PASSWORDVARCHAR20密码初始DIDSEXTINYINT3UNSIGNED性别1男2女1LEVELVARCHAR12医生职称SECTIONVARCHAR12所属科室索引SPECIALISMVARCHAR20专家门诊科目PHONEVARCHAR15联系电话可为空2患者表用于存储患者的个人信息。表42患者表的结构患者病历预约信息医生管理员可预约数量管理治疗有有有有管理1111111NNNNNNN字段名类型备注约束条默认值PIDMEDIUMINT8UNSIGNEDAUTO_INCREMENT患者编号主键NAMEVARCHAR姓名USERNAMEVARCHAR登录时用户名唯一索引PASSWORDVARCHAR密码AGETINYINT3UNSIGNED年龄0SEXTINYINT1UNSIGNED性别1男2女1ADDRESSTINYTEXT家庭住址可为空PHONEVARCHAR联系电话可为空3病历记录表病历记录表记录了患者的病历信息。表43病历记录表的结构字段名类型备注约束条默认值HIDINTUNSIGNED10AUTO_INCREMENT病历记录编号主键DOCTORVARCHAR5主治医生编号索引DESCRIPTIONTINYTEXT症状DIAGNOSETINYTEXT诊断PATIENTMEDIUMINT8UNSIGNED患者编号索引0RXTINYTEXT处方SDATEDATETIME开始时间00000000000000FDATEDATETIME结束时间可为空00000000000000FINISHEDTINYINT1UNSIGNED就诊过程是否结束1是2否04预约记录表预约记录表记录了已预约但尚未创建病历的患者信息。表44预约记录表的结构字段名类型备注约束条默认值QIDINTUNSIGNED10AUTO_INCREMENT记录编号主键DOCTORVARCHAR5主治医生编号索引PATIENTMEDIUMINT8UNSIGNED患者编号索引0DATEDATETIME预约时间00000000000000DAYTINYINT1UNSIGNED预约就诊时间0周日1周一2周二3周三4周四5周五6周六0APTINYINT1UNSIGNED预约就诊时间0上午1下午05管理员表管理员表存储了与管理员有关的信息。图45管理员表结构字段名类型备注约束条默认值AIDTINYINT2UNSIGNEDAUTO_INCREMENT管理员编号主键USERNAMEVARCHAR20登录时的用户名唯一索引PASSWORDVARCHAR20登录时密码EMAILVARCHAR20电子邮件NAMEVARCHAR12姓名PHONEVARCHAR15联系电话可为空5基于JSP与JAVABEAN的医院门诊信息管理系统详细设计51系统功能模块设计根据客户要求操作者的权限层次要有明确的分类进入软件时需要进行身份验证出于对患者个人隐私的负责患者的病历记录只能在患者就医期间有主治医生条约其它任何人包括管理员无权查阅。整个系统需要实现以下功能如图所示图57系统功能模块图52系统功能模块实现521HOSPITALDB包中的类医疗门诊信息管理系统病历基本信息管理模块医生基本信息管理模块患者基本信息管理模块预约信息管理模块图41HOSPITALDB包的UML图5211与数据库建立连接类DBCONNECTION本类位于HOSPITALDB包中由于CONNECTION是一个非常耗费资源的对象因此在这里使用单例模式设计DBCONNECTION类保证了真个生命周期内只存在一个CONNECTION对象该对象可以被其它类重复利用这样可以大大节省系统资源。DBCONNECTION类核心代码如下PUBLICABSTRACTCLASSDBCONNECTIONPUBLICSTATICCONNECTIONGETCONNECTIONCONNECTIONCONNNULLTRYIFCONNNULLCLASSFORNAME“ORGGJTMMMYSQLDRIVER“/CONNDRIVERMANAGERGETCONNECTION“JDBCMYSQL/LOCALHOST3306/HOSPITAL“,“ROOT“,“NEMO“DEBUGLOG“CONNECIONCREATED“ELSESTATEMENTSTMTCONNCREATESTATEMENTRESULTSETRSSTMTEXECUTEQUERY“SELECTCOUNTFROMADMINISTRATOR“IFRSNULL|RSNEXTCLASSFORNAME“COMMYSQLJDBCDRIVER“CONNDRIVERMANAGERGETCONNECTION“JDBCMYSQL/LOCALHOST3306/HOSPITAL“,“ROOT“,“NEMO“DEBUGLOG“CONNECIONRECREATED“CATCHEXCEPTIONEXDEBUGLOGDEBUGGETEXCEPTIONMSGEXRETURNCONN5212记录日志的DEBUG类本类位于HOSPITALDB包中本系统的一个亮点是日志记录这里也是用单例模式实现的。DEBUG类的核心代码如下PUBLICFINALCLASSDEBUGPRIVATESTATICDEBUGINSTANCENULLPRIVATESTATICSIMPLEDATEFORMATDATEFORMATNULLPRIVATESTATICFILEOUTPUTSTREAMFOSNULLPRIVATEDEBUGSTATICSYNCHRONIZEDDEBUGINITSTRINGPATHPUBLICSTATICSYNCHRONIZEDVOIDLOGSTRINGMSGPRIVATESTRINGWRITEFILESTRINGMSGPUBLICSTATICSTRINGGETEXCEPTIONMSGEXCEPTIONESTACKTRACEELEMENTSTEEGETSTACKTRACE0STRINGMSGSTEGETCLASSNAME“STEGETMETHODNAME“LN“STEGETLINENUMBER“EGETMESSAGERETURNMSG下面对DEBUG类中一些关键原理和值得注意的地方加以说明。程序中将构造器定义为私有也是为了防止以构造器的方式生成对象。大多数情况下以这种方式实现单例模式。为了便于调试在DEBUG类中定义了一个专门用来处理异常的方法GETEXCEPTIONMSG在返回的字符串中包括了抛出异常的类名、方法名和所在行数。5213初始化SERVELET的INITSERVLET类本类位于HOSPITALDB包中继承自JAVAXSERVLETHTTPHTTPSERVLET配合TOMCAT中的设置使服务器启动后首先按生成一个INITSERVLET的实例然后调用其INIT方法对SERVLET环境进行初始化。INITSERVLET的核心代码如下PUBLICCLASSINITSERVLETEXTENDSHTTPSERVLETPUBLICVOIDINITTHROWSSERVLETEXCEPTIONSTRINGLOGPATHGETSERVLETCONTEXTGETREALPATH“/LOG/“DEBUGINITLOGPATHDEBUGLOG“SERVERSTARTED“PUBLICVOIDDESTROYDEBUGLOG“SERVERSHUTTEDDOWN“5214辅助类UTIL本类位于HOSPITALDB包中本类只有三个方法其中ENCODE和DECODE方法负责对带有中文字符的数据惊醒转码工作而PARSESPDAYS方法则是用来处理医生的预约人数信息。UTIL的核心代码如下PUBLICABSTRACTCLASSUTILPUBLICSTATICSTRINGDECODESTRINGSTRTHROWSUNSUPPORTEDENCODINGEXCEPTIONRETURNNEWSTRINGSTRGETBYTES“ISO88591“,“GBK“PUBLICSTATICSTRINGENCODESTRINGSTRTHROWSUNSUPPORTEDENCODINGEXCEPTIONRETURNNEWSTRINGSTRGETBYTES“GBK“,“ISO88591“PUBLICSTATICINTPARSESPDAYSSTRINGDAYPATTERNTHROWSNUMBERFORMATEXCEPTIONINTSPDAYSNEWINT14STRINGTOKENIZERTOKENNEWSTRINGTOKENIZERDAYPATTERNTRIM,“,“IFTOKENCOUNTTOKENS14THROWNEWNUMBERFORMATEXCEPTIONFORINTI0I6|AP1/DAY必须是06之间的整数AP必须是0或1THROWNEWNUMBERFORMATEXCEPTIONINDEXDAY2APSTMTCONNCREATESTATEMENTSTRSQL“SELECTFROMCURAPPOINTMENTWHEREDID“DID“RSSTMTEXECUTEQUERYSTRSQLIFRSNEXT|CURPCRSGETINTDAYSINDEX0THROWNEWNUMBERFORMATEXCEPTIONSTRSQL“SELECTDOCTORFROMPINQUEUEWHEREDOCTOR“DID“ANDPATIENT“THISPID“ANDDAY“DAY“ANDAP“APRSSTMTEXECUTEQUERYSTRSQLIFRSNEXTTHROWNEWILLEGALARGUMENTEXCEPTIONCONNSETAUTOCOMMITFALSE/事务处理开始STMTCONNCREATESTATEMENTSTRSQL“INSERTINTOPINQUEUEPATIENT,DOCTOR,DAY,AP,DATEVALUES“THISPID“,“DID“,“DAY“,“AP“,“DATEFORMATFORMATNEWJAVAUTILDATE“/向PINQUEUE表插入预约记录STMTADDBATCHSTRSQLSTRSQL“UPDATECURAPPOINTMENTSET“DAYSINDEX“CURPC1“WHEREDID“DID“/将CURAPPOINTMENT表中相应可预约数量减1STMTADDBATCHSTRSQLSTMTEXECUTEBATCHCONNCOMMITRES1CATCHNUMBERFORMATEXCEPTIONNFERES3CATCHSQLEXCEPTIONSQLECONNROLLBACKRES1DEBUGLOGDEBUGGETEXCEPTIONMSGSQLECATCHILLEGALARGUMENTEXCEPTIONIAERES2CATCHEXCEPTIONEDEBUGLOGDEBUGGETEXCEPTIONMSGERES0FINALLYRETURNRES6取消预约CANCLEAPPOINTMENTINTQID本方法用于患者取消预约信息即从数据库中删除相应的预约记录其流程如下。删除PINQUEUE表中记录将CURAPPOINTMENT表中相应可预约数量加1。参数QID预约编号。返回值1操作结果。0抛出一般异常。1抛出数据库异常。PATIENTCANCLEAPPOINTMENT实现代码PUBLICSYNCHRONIZEDINTCANCLEAPPOINTMENTINTQIDINTRES0CONNDBCONNECTIONGETCONNECTIONSTRINGDAYS“SUNA“,“SUNP“,“MONA“,“MONP“,“TUEA“,“TUEP“,“WEDA“,“WEDP“,“THUA“,“THUP“,“FRIA“,“FRIP“,“SATA“,“SATP“INTINDEX,CURPC,DAY,APSTRINGDID“TRYSTRSQL“SELECTFROMPINQUEUEWHEREQID“QIDSTMTCONNCREATESTATEMENTRSSTMTEXECUTEQUERYSTRSQLIFRSNEXTTHROWNEWSQLEXCEPTION“QIDDOESNOTEXIST“DAYRSGETINT“DAY“APRSGETINT“AP“DIDRSGETSTRING“DOCTOR“INDEXDAY2APSTRSQL“SELECTFROMCURAPPOINTMENTWHEREDID“DID“RSSTMTEXECUTEQUERYSTRSQLRSNEXTCURPCRSGETINTDAYSINDEXCONNSETAUTOCOMMITFALSESTMTCONNCREATESTATEMENTSTRSQL“DELETEFROMPINQUEUEWHEREQID“QIDSTMTADDBATCHSTRSQLSTRSQL“UPDATECURAPPOINTMENTSET“DAYSINDEX“CURPC1“WHEREDID“DID“STMTADDBATCHSTRSQLSTMTEXECUTEBATCHCONNCOMMITRES1CATCHSQLEXCEPTIONSQLECONNROLLBACKRES1DEBUGLOGDEBUGGETEXCEPTIONMSGSQLECATCHEXCEPTIONERES0DEBUGLOGDEBUGGETEXCEPTIONMSGEDEBUGLOGEGETMESSAGEFINALLYRETURNRES7查询预约信息GETAPPOINTMENTINFO本方法返回当前患者的所有预约信息。返回值如下1操作成功。0抛出一般异常。1抛出数据库异常。2用户未预约。PATIENTGETAPPOINTMENTINFO实现代码如下PUBLICINTGETAPPOINTMENTINFOCONNDBCONNECTIONGETCONNECTIONINTRES0STRSQL“SELECTFROMPINQUEUEWHEREPATIENT“THISPIDTRYSTMTCONNCREATESTATEMENTRSSTMTEXECUTEQUERYSTRSQLIFRSNEXTTHROWNEWILLEGALARGUMENTEXCEPTIONRES1RSBEFOREFIRSTRESULTRSCATCHSQLEXCEPTIONSQLERES1DEBUGLOGDEBUGGETEXCEPTIONMSGSQLECATCHILLEGALARGUMENTEXCEPTIONIAERES2CATCHEXCEPTIONERES0FINALLYRETURNRES8查询医生预约信息GETDOCTORAPPOINTMENTINFOSTRINGDID本方法返回某位医生的当前可预约信息。参数DID医生编号。返回值1操作成功。0抛出一般异常。1抛出数据库异常。2DID不存在。5223管理员模型类ADMIN类本类位于HOSPITALDBDBOPERATION包中ADMIN类封装了管理员角色可执行的所有操作部分代码如下PUBLICCLASSADMINEXTENDSDBOPERATIONPUBLICADMINSTRINGIDTHROWSINVALIDUSEREXCEPTIONSUPERID/调用父类构造器PUBLICINTLOGINSTRINGPASSWORDPUBLICSYNCHRONIZEDINTADDDOCTORSTRINGDID,STRINGNAME,STRINGPASSWORD,INTAGE,INTSEX,STRINGLEVEL,STRINGSPE,INTPPERDAY,STRINGPHONE,STRINGSECTIONPUBLICINTGETDOCTORINFOPROTECTEDVOIDCHECKUSERSTRINGIDTHROWSINVALIDUSEREXCEPTIONCONNDBCONNECTIONGETCONNECTIONSTRSQL“SELECTUSERNAMEFROMADMINISTRATORWHEREUSERNAME“ID“TRYSTMTCONNCREATESTATEMENTRSSTMTEXECUTEQUERYSTRSQLIFRSNEXTTHROWNEWINVALIDUSEREXCEPTIONCATCHSQLEXCEPTIONSQLEDEBUGLOGDEBUGGETEXCEPTIONMSGSQLEPUBLICSYNCHRONIZEDINTREMOVEDOCTORSTRINGDID下面对ADMIN类中的一些关键方法的功能和原理加以说明。1添加医生账户ADDDOCTOR本方法用于添加医生账户其流程如下。向DOCTOR表中插入记录向APPOINTMENT表中插入记录向CURAPPOINTMENT表中插入记录。参数DID医生编号。NAME姓名。AGE年龄。SEX性别。LEVEL职称。SPE特长。PPERDAY每天最大可预约数量周日上午、周日下午、周一上午。PHONE联系电话。SECTION科室。返回值1操作成功。0抛出一般异常。1抛出数据库异常。2医生账户信息已存在。ADMINADDDOCTOR的实现代码如下PUBLICSYNCHRONIZEDINTADDDOCTORSTRINGDID,STRINGNAME,STRINGPASSWORD,INTAGE,INTSEX,STRINGLEVEL,STRINGSPE,INTPPERDAY,STRINGPHONE,STRINGSECTIONINTRES0CONNDBCONNECTIONGE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 律师职业面试技巧与问题解析
- 翻译员面试常见问题及答案解析
- 2025年人工智能在医疗健康领域应用项目可行性研究报告
- 2025年在线教育平台运营与发展可行性研究报告
- 2025年基于5G的智能制造解决方案可行性研究报告
- 2025年电子商务产业链优化可行性研究报告
- 2025年大数据分析与数据挖掘项目可行性研究报告
- 2025年线上购物平台物流优化可行性研究报告
- 星辰未来社区发展
- 8.1+科学立法、严格执法、公正司法、全民守法(教学设计)-中职思想政治《中国特色社会主义法治道路》(高教版2023·基础模块)
- 2025年高职物理(电磁学基础)试题及答案
- 服装打版制作合同范本
- 技术部门项目交付验收流程与标准
- 林场管护知识培训课件
- 2025年江苏事业单位笔试真题及答案(完整版)
- 公司反贪腐类培训课件
- 寝室内务规范讲解
- 2025年慢阻肺培训试题(附答案)
- 部队地雷使用课件
- 航空材料基础培训课件
- 血细胞形态学幻灯片课件
评论
0/150
提交评论