为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

医疗门诊查询系统_(基于JavaEE)

2011-09-14 41页 doc 1MB 102阅读

用户头像

is_353670

暂无简介

举报
医疗门诊查询系统_(基于JavaEE)基于JavaEE的医疗门诊查询系统分析与设计 摘要 随着计算机技术的发展和进步,计算机应用已经涉及到人们生活的各个方面。医疗门诊查询预约系统是通过分析一个医院门诊系统,把数据库,Servlet,Bean,JSP整合在一起,从而实现一个从信息收集,处理到查询的完整的处理方案。该系统集合了患者管理,医生管理,以及病历管理的综合性应用软件。在该系统中,患者可以不用在医院里面排很长的队伍挂号,只要在门诊系统的页面上选择自己喜欢的医生进行预约看病。这样不仅方便了患者,也方便了医生更容易查阅病历和患者资料。更进一步方便了医院的门诊管理,符...
医疗门诊查询系统_(基于JavaEE)
基于JavaEE的医疗门诊查询系统分析与设计 摘要 随着计算机技术的发展和进步,计算机应用已经涉及到人们生活的各个方面。医疗门诊查询预约系统是通过分析一个医院门诊系统,把数据库,Servlet,Bean,JSP整合在一起,从而实现一个从信息收集,处理到查询的完整的处理。该系统集合了患者管理,医生管理,以及病历管理的综合性应用软件。在该系统中,患者可以不用在医院里面排很长的队伍挂号,只要在门诊系统的页面上选择自己喜欢的医生进行预约看病。这样不仅方便了患者,也方便了医生更容易查阅病历和患者资料。更进一步方便了医院的门诊管理,符合信息化时代的软件应用潮流。 本系统是基于J2EE的设计方案,使用表示层,逻辑层和数据层三层模式。使用B/S模式,大大减低了服务端的数据处理任务。提供了高性能的处理速度,降低数据库的运行时的开销。使用MS SQL Server 2000作为数据库,Tomcat作为JSP容器。数据库层使用JDBC与底层数据库进行交互,逻辑层封装在Java类中,表示层由JSP实现。 关键词:B\S模式;JSP;Enterprise JavaBean;三层模式;JDBC 目 录 TOC \o "1-3" \h \z \u 3.1 系统功能分析 13 4.2.1 逻辑层包结构设计 23 4.2.2 与数据库建立连接类DBConnection 25 第五章 设计总结 35 附录A 开报告 附录B 外文资料原文 附录C 外文资料译文 附录D 源程序代码 第一章 绪 论 1.1 引 言 管理信息系统(Management Information System)简称MIS,是一个由人,计算机及其他外围设备等组成的能进行信息的收集、传递、存储、加工、维护和使用的系统,是一门新兴的科学,其主要任务是最大限度的利用现代计算机及网络通信技术加强企业的信息管理,通过对企业拥有的人力、物力、财力、设备、技术等资源的调查了解、建立正确的数据,加工处理并编制成各种信息资料及时提供给管理人员,以便进行正确的决策,不断提高企业的管理水平和经济效益。目前,企业的计算机网络已成为企业进行技术改造及提高企业管理水平的重要手段。随着我国与世界信息高速公路的接轨,企业通过计算机网络获得信息必将为企业带来巨大的经济效益和社会效益,企业的办公及管理都将朝着高效、快速、无纸化的方向发展。MIS系统通常用于系统决策,例如,可以利用MIS系统找出目前迫切需要解决的问题,并将信息及时反馈给上层管理人员,使他们了解当前工作发展的进展或不足。换句话说,MIS系统的最终目的是使管理人员及时了解公司现状,把握将来的发展路径。 传统的MIS系统的核心是C/S(Client/Server——客户端/服务器)架构,而基于Internet的MIS系统的核心是B/S(Browser/Server——浏览器/服务器)架构。B/S架构比起C/S架构有着很大的优越性,传统的MIS系统依赖于专门的操作环境,这意味着操作者的活动空间受到极大限制;而B/S架构则不需要专门的操作环境,在任何地方,只要能上网,就能够操作MIS系统,这其中的优劣差别是不言而喻的。基于Internet上的MIS系统是对传统MIS系统概念上的扩展,它不仅可以用于高层决策,而且可以用于进行普通的商务管理。通过用户的具名登录(或匿名登录),以及相应的权限控制,可以实现在远端对系统的浏览、查询、控制和审阅。随着Internet的扩展,现有的公司和学校不再局限于物理的有形的真实的地域,网络本身成为事实上发展的空间。基于Internet上的MIS系统,弥补了传统MIS系统的不足,充分体现了现代网络时代的特点。随着Internet技术的高速发展,因特网必将成为人类新社会的技术基石。基于Internet的MIS系统必将成为网络时代的新一代管理信息系统,前景极为乐观[7]。 1.2 概 述 随着计算机技术的发展和进步,计算机应用已经涉及到人们生活的各个方面。软件行业的兴起,各个单位为了提高生产效率,降低生产成本,很多由人来管理的工作都由计算机来完成。医疗门诊查询预约系统是通过分析一个真正的医院门诊系统,运用信息技术,结合软件,利用数据库和一些编程语言设计,从而实现一个从信息收集,处理到查询的完整的处理方案。该系统集合了患者管理,医生管理,以及病历管理的综合性应用软件。现实中,很多病患在就医看病的时候都苦恼于大医院的挂号队伍,因为挂号排队延误病情治疗的事情也时有发生,也有很多病患想了解专家门诊的医生情况和经验,来选择自己的就医方向,很多病患不能提前知道该专家医生的就医时间而延误病情的事和打乱自己的就医安排也是存在的。在该系统中,患者可以不用在医院里面排很长的队伍挂号,只要在门诊系统的页面上选择自己喜欢的医生进行预约看病。在系统中没个医生都有自己的看病时间表,病患可以通过医生的时间表来选择自己的就医时间,方便患者安排时间,这样就方便了患者,而医生也可以通过系统查询到预约自己的病患的基本情况,为治疗做好前期准备,为医生成功治疗病患打下基础,这样方便了医生更容易查阅病历和患者资料。每次治疗完毕医生通过简单的电脑操作可以完成一份治疗患者的病历和处方,存入数据库,方便了医院的病历管理,也就方便了医院的门诊管理,符合信息化时代的软件应用潮流[2]。 本系统使用MS SQL Server 和 Tomcat,其中Tomcat是开源软件,可以从网上免费得到其正式的发行版本,而MS SQL Server 是当前使用得最广泛的数据库,其性能,安全性等方面都有很好的保证。Tomcat虽然是开源软件,但许多大型网站也因其稳定的性能和出色的性能而选择它作为专业的JSP容器。由这两者组成的整个系统的底层框架,既能节省开支,配置过程也相对简单。 服务器端使用三层体系结构,将业务逻辑从表示层中抽出,使页面,业务逻辑和数据库开发互相独立,并行地进行,这样可以大大减少开发时间。同时这种设计方法降低了三层之间的耦合层度,日后对某一层的修改,扩充时,对其他层可以只产生很小的影响[4]。 使用面向对象技术,将各个角色(医生,患者,管理员)封装成类,这样能帮助程序员更直观地去理解整个业务流程,将重点放在业务逻辑的处理上,降低了开发难度,这样也便于将来的扩展。 而且该系统的一些亮点: (1)在逻辑层实现了一个简单的日志记录系统,可以将任何信息记录到指定的日志文件中,方便服务器程序的跟踪和调试,同时可以记录一些重要的事物信息(比如管理员登陆,重要信息的删除等),以便将来需要是查询。 (2)逻辑层实现时使用事务(Transaction)保证数据的完整性。 (3)服务器端采用数据库,事务逻辑,用户截面相互独立的结构,各个模块自身扩充方便,且互相之间耦合度非常低,对逻辑层稍做扩充就可以实现一个功能更完善的系统。 (4)使用单例模式(Singleton Design Pattern)设计逻辑层,大大降低数据库运行的开销。 总体来说,本系统是基于J2EE的设计方案,使用表示层,逻辑层和数据层三层模式。使用B/S模式,使用MS SQL Server作为数据库,Tomcat作为JSP容器。数据库层使用JDBC与底层数据库进行交互,逻辑层封装在Java类中,表示层由JSP实现。 1.3 J2EE概述 JSP技术是由Servlet技术发展起来的,自从有了JSP后,在Java服务器端编程中普遍采用的就是JSP,而不是Servlet。因为JSP在编写表示页面时远远比Servlet简单,并且不需要手工编译,目前Servlet主要用于做视图控制器,处理后台应用等。由于JSP构建在Servlet上。所以它有Servlet所有强大的功能[1]。 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记,就构成了JSP网页(*.jsp)。 JSP基于强大的Java语言,具有良好的伸缩性,与Java Enterprise API紧密地集成在一起,在网络数据库应用开发领域具有得天独厚的优势,基于Java平台构建网络程序已经被越来越多的人认为是未来最有发展前途的技术[1]。 从JSP这几年的发展来看,JSP已经获得了巨大的成功,它通过和EJB等J2EE组件进行集成,可以编写出处理具有大的伸缩性,高负载的企业级应用。JSP技术在多个方面加速了动态Web页面的开发。 通过分析和总结,列出了以下几点说明JSP的特点。 (1)将内容的生成和显示进行分离 使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容。生成内容的逻辑被封装在标识和JavaBean组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Bean中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。 在服务器端,JSP引擎解释JSP标识和小脚本中,生成所请求的内容,并且将结果以HTML页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保护任何基于HTML的Web浏览器的完全可用性。 (2)生成可重用的组件 绝大多数JSP页面依赖于可重用的,跨平台的组件来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使用这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。 (3)采用标识简化页面开发 Web页面开发人员不一定都熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的,与JSP相关的XML标识中进行动态内容生成是所需要的。的JSP标识能够访问和实例化JavaBean组件,设置或者检索组件属性,下载Applet,以及执行同其他方法更难于编码或耗时的功能。 通过开发定制标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样执行特定功能的构件来工作。 (4)JSP能提供所有的Servlets功能 与Servlet相比,JSP能提供所有的Servlets功能,它比用Println书写和修改HTML更加方便。此外,您可以更明确地进行分工,Web页面设计人员编写HTML,只需要留出空间让Servlets程序员插入动态部分即可。 (5)健壮的存储管理和安全性 由于JSP页面内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有优点,包括健壮的存储管理和安全性。 (6)一次编写,随处运行 作为Java平台的一部分,JSP拥有Java编程语言“一次编写,随处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,但并不影响当前的应用。 (7)JSP的平台适应性更广 这是JSP与ASP的优越之处。几乎所有的平台都支持Java,JSP+Beans,它们可以在任何平台下通行无阻。Windows NT下的IIS通过一个插件就能支持JSP,例如JRUN或者ServletExec,著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在Windows NT,UNIX和Linux上,因此JSP有更广泛的运行平台。从一个平台移植到另一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标准的字节码,与平台无关。 (8)Java中连接数据库的技术是JDBC 很多数据库系统带有JDBC驱动程序,Java程序通过JDBC驱动程序与数据库相连,执行查询,提取数据等操作。Sun公司还开发了JDBC-ODBC Bridge,用此技术Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能够访问如Oracle,Sybase,MS SQL Server和MS Access等类型的数据库。 (9)简单易学 随着JSP 2.0中标签语言的出现,即使不懂Java的程序员也能编写出功能完善的JSP应用[2]。 EJB(Enterprise Java Bean,企业Bean),是基于Java的服务器端组件架构技术。借助于EJB,开发者能够轻松构建企业级的,分布式组件应用。与此同时,在不用自身开发复杂分布式组件框架的前提下,开发者能够开发架构灵活,运行可靠及安全的应用系统。对于服务器端开发而言,EJB引入了快速应用开发(Rapid Application Development,RAD)模型。因此,在Java应用服务器提供商提供的分布式基础框架的基础上,开发者能够快速,轻松地构建服务器端组件。EJB的重要设计初衷是保证应用能够在任一提供商提供的企业中间件服务上畅行无阻,而且便携性,可重用性都是一流的。 EJB仅仅是J2EE(Java 2 Platform,Enterprise Edition)的组成部分之一。其中,J2EE平台规范是由JCP(Java Community Process,Java工业标准组织)制定。J2EE平台规范使命是,提供平台独立的,便携的,多用户的,安全的,遵循标准的企业级平台。而且,它必须基于Java和在服务器端的部署。 J2EE只是规范,不是产品。J2EE规范定义了开发企业级软件产品的规则。J2EE应用服务器供应商需要在他们的J2EE兼容产品中实现J2EE规范。 J2EE是由一套健壮的中间件服务构成的,它使得服务器端应用开发者能够高效,快乐地开发应用。为了使开发者能够进一步理解J2EE的重要性,列举出J2EE兼容实现必须提供的一些重要技术。如EJB,用于XML RPC的Java API,Java远程方法调用(RMI)和RMI-IIOP,Java命名和服务接口(JNDI),Java数据库连接(JDBC),Java事务API,Java消息服务,Java Servlet,JSP,Java IDL以及J2EE连接器架构(JCA)等。J2EE就是通过以上大量的组件来构件一个企业级的应用[4]。 图1.1 J2EE应用部署场景 第二章 系统运行必要的环境 本章主要介绍JSP开发环境的搭建。介绍JSP对运行环境的要求。讲述JSP开发和运行环境的安装配置,并且介绍当今流行的JSP运行环境的安装和配置,以及集成开发环境的设置以及数据库的安装和配置。 2.1 JSP运行环境的要求 2.1.1 对硬件条件和操作系统的要求 JSP环境对硬件要求不是很高,所以开发成本比较低,比如CPU只要求使用586或更高级别的处理器;内存大概64MB及其以上水平,如果使用WebLogic或者WebSphere配置要求256MB以上;硬盘大概500MB以上,根据不同的服务器要求不同,如果使用WebLogic或者WebSphere则要求硬盘空间大概1GB空间;当然机器还要配置适合通信的网卡,毕竟JSP是网络通信与信息技术的媒介。 由于Java具有跨平台的特点,所以只要能够安装JDK,就能在此安装JSP服务器。JSP服务器能够运行在目前绝大多数的操作系统上,目前在普通用户中用到的系统绝大多数为Windows系列和UNIX系列[11]。 2.1.2 对软件环境的要求 要使用JSP,在服务器端和客户端都必须有对应的运行环境。服务器端主要是Servlet兼容的Web服务器,客户端主要是浏览器。 表2-1 对软件环境的要求 Web浏览器 任何支持HTML TABLE和FORM元素的浏览器,浏览器应支持如下HTML: Frames;Cookie Tables 客户端的图片映射 文件上载 典型情况下使用IE6.0和Netscape 7.0 续表2-1 Web服务器 BEA WebLogic 8.1 IBM WebSphere Server 5.5 Apache Tomcat 5.0 Apache Web Server Jserv Allaire Jrun 3.0 ATG Dynamo Application Bluestone Sapphire GemStone J4.0 Java Web Server 2.0 Resin ... 数据库 Oracle Sybase Microsoft SQL Server 2000 Informix DB2 Mysql Microsoft Access ... Java Developer Kit(JDK) Jdk1_4_2-win.exe Jdk1_4_2-unix Jdk1_4-os2 ... 2.2 安装和配置JDK JDK中包含了Java开发中必需的工具和Java程序运行环境(JRE)。可以从SUN公司网站http://java.sun.com免费下载JDK1.4.2。 JDK的安装特别简单,和安装应用程序软件没什么区别,不过JDK的安装路径一定要设好,方便以后环境变量的设置。 安装好JDK后,还需要在环境变量中进行对应的配置。就以本次毕业设计为例。JDK安装在D:\j2sdk1.4.2。 主要进行以下配置: (1)设置JAVA_HOME环境变量 (2)设置CLASSPATH环境变量 (3)更新PATH环境变量的值 JAVA_HOME表示Java安装目录,其他的应用程序如果需要使用Java运行环境,首先获得JAVA_HOME变量的信息,然后确定执行的路径。 在鼠标右键单击“我的电脑”,在属性栏的高级选项中可以选择环境变量的设置,新建一个系统变量或者用户变量,名称为JAVA_HOME,它的值为D:\j2sdk1.4.2。如图: 图2.1 JAVA_HOME变量设置 然后建立一个CLASSPATH的变量,它表示搜索Java类的路径,这个路径可以包含一些Jar归档文件,也可以是一个目录。在应用程序执行是,往往会动态地在CLASSPATH中添加一些自己需要的路径。在本机上CLASSPATH的值为“.;d:\j2sdk1.4.2\lib\tools.jar;d:\j2sdk1.4.2\lib\dt.jar;” (.;一定不能少)。 图2.2 CLASSPATH变量设置 当以上都配置好了,我们可以测试下Java环境是否配置成功。我们可以在[运行]中进入[命令提示符cmd]下面。输入java –version回车,看是否能看到当前JDK的版本。如果看见就配置成功了[3]。 2.3 安装和配置Tomcat Tomcat服务器是当今使用最广泛的Servlet/JSP服务器。它运行稳定,性能可靠,是学习和中小企业的最佳选择,而且是开源程序,下载免费,大大降低系统的开发成本。 我们可以从http://jakarta.apache.org/tomcat下载Tomcat 5.0 服务器。安装也很方便。本次设计Tomcat安装目录是D:\Tomcat。 安装完成以后,把Tomcat里面的类包(*.jar文件)包含到环境变量的CLASSPATH里面。这些Jar文件都在D:\Tomcat\common\lib目录下。 然后运行Tomcat程序,启动Tomcat。在IE中,输入http://127.0.0.1:8080或者http://localhost:8080。如果出现Tomcat的欢迎页面,就表示Tomcat的安装和配置是正确的。 图2.3 测试Tomcat是否安装成功 当Tomcat配置成功以后,就要在%Tomcat%目录下的webapps下面建立一个虚拟目录,来方便将来程序的开发。本次设计是医院门诊系统,所以我们在webapps下面新建立一个叫hospital的文件夹,然后使用Tomcat Administrator tools来建立关于hospital的虚拟目录。这样以后我们的程序就可以在hospital文件夹下面进行,当设计完成以后,只要在IE里面输入http://localhost:8080/hospital就可以看到你所设计的系统程序的实现了[3]。 图2.4 Tomcat Administrator tool页面和hospital的虚拟目录 2.4 Microsoft SQL Server 的配置 本节不对SQL Server的安装做过多的赘述,本节介绍如何让SQL Server能加入到JSP运行的集成环境中来。 当安装好SQL Server程序之后,由于JSP要与SQL Server集成,进行对数据库的操作,就必须下载Microsoft SQL Server 2000 Driver for JDBC的驱动,微软的官方网站提供免费下载。安装该程序之后,把安装目录里面\lib\下面的3个驱动jar文件拷贝到你所开发的JSP程序目录下面的WEB-INF文件夹下面的lib文件夹下。这3个文件分别是:mssqlserver.jar;msbase.jar;msutil.jar。然后在环境变量的CLASSPATH变量里面包含这3个文件的初试路径。这样我们就可以在以后的程序开发过程中,调用Bean文件或者通过Servlet来进行对数据库的连接和操作[9]。 值得注意的是如果是老版本的SQL Server,可能会出现与Tomcat和JSP连接失败的故障,你可以通过Telnet 127.0.0.0:1433指令来测试数据库的连通性,在本次设计时这个问题出现过,如果连接失败,就应该给SQL Server打Service patch 3和Service patch 4补丁。一般这个问题打上SP3和SP4补丁就基本能够解决,而且Telnet也会成功。本次设计的这个问题也是这么解决的。 图2.5 三个SQL Server的JDBC驱动的放置位置 第三章 系统分析与设计 3.1 系统功能分析 根据对医院门诊流程的分析及客户的要求,整个系统需要实现以下功能。 软件的整体功能,系统要操作简单,要有友好的界面,系统的操作者的权限层次要有明确的分类,进入软件时要进行身份验证。而且出于对患者个人隐私的负责,患者病历记录只能在患者就医期间由主治医生调阅,其他任何人包括管理员无权查阅。这样使的系统更具有人性化,因为系统中三个角色之间没有联系,所以设置三个独立操作的角色对象。 (1)患者角色能进行的对象操作 ①可以联机注册成为用户,设定自己的登录名及密码。 ②可按医生姓名自定义查询。 ③可基于查询结果进行预约,若指定医生当日预约量已满,则预约失败。预约结果随机返回给患者。 ④可对已经进行预约的情况查看或撤消。 ⑤预约成功后可查询主治医生信息,病例信息。 (2)医生角色 ①可查看预约患者的情况。 ②可查询患者病例。 ③可创建患者病历。 ④可对患者的病例进行修改。 (3)管理员角色 有固定的帐号,直接在数据库添加,不能注册成管理员,可以添加和删除医生帐号,对医生用户进行管理。但不能管理患者用户,保证患者的隐私。 3.2 系统设计思想 3.2.1 数据库层-逻辑层-表示层三层结构 服务器端三层结构及之间的关系如图3-1所示。 图3.1 服务器端体系结构 3.2.2 角色模块设计-设计模式 整个系统中有三种用户:医生、患者、管理员,他们之间没有相互的操作,因此可以封装到各自的类中去。dboperation包中设计了一个抽象父类DBOperation,具体的角色类(Admin、Patient、Doctor)从它继承。将它的子类所公用的方法划分成两类进行设计。其中一类方法在各个子类内部的具体实现时间,这些方法被直接设计在DBOperation类中,供子类继承;另一类方法在各个子类内部的具体实现不相同,这些方法被设计成抽象方法,由子类负责实现。 3.2.3 与数据库的连接 设计一个类只负责与数据库的连接工作,当与数据库成功连接后,该类将能返回一个可靠的数据库连接对象供其他类使用。每当用户开始操作,即登录成功就开始连接数据库,数据库的连接贯穿整个用户操作的全过程,不会是每个操作进行一次连接,这样太消耗数据库资源,只到用户完成操作,注销退出后才断开数据库连接。 3.2.4 日志记录 为了便于调试与服务器信息的记录,设计一个类负责将需要的信息记入本地硬盘上的日志文件中。在开始系统运行开始,日记系统就开始记录,记录在log文件夹里面,存放格式是*.txt文件,当用户的每个操作都会记录到日记里面,不管是正确操作,错误操作还是误操作,都会记录。而且连系统的异常和数据库异常都会记录在日志上,这样方便管理员的系统维护工作。而且日志每条记录都显示实时的时间。 3.3 系统功能分析 根据系统所要求实现的功能要求,不同的用户具有不同的操作权限,本系统主要划分为三大用户模块:患者、医生、管理员,模块图如下所示: 图3.2 系统功能模块划分 3.4 业务流程 根据现实的医院门诊业务流程,以及根据系统功能模块的分析,规划出该系统的业务流程图 图 3.3 业务流程图 第四章 系统实现与详细设计 4.1 数据库设计 当一个系统涉及数据库时,其运行效率、冗余程度、可靠性、稳定性等评价指标除了与上层的代码有关外,更多地会受到低层数据库效率的影响。因此,一个好的数据库设计能够让你的系统跑的更顺畅、稳定[5]。 4.1.1 设计思路 一、确定各实体间的关系 首先确定各个实体之间的相互关系,这是设计好一个数据库的基础。实体之间的关系图如图4-1所示 图4.1 实体关系图 二、将实体和关系转化为表 将各个角色的所有信息分别放在独立的表中,其中包括该角色的全部信息。选定一个字段作为主键,这个字段存储的信息在整个表中两两必须相异,比如本次设计中,医生编号(DID)等。如果表中没有此类信息,可人为加入惟一的ID用于标志,比如本次设计中的PID、AID、QID、HID等。 三、主键是唯一的依赖性 保证表中其他字段只与主键有关系,如果一组信息同时与一个以上的表或者一个表中一个以上的字段有关系,则必须将这组信息抽出去独立构成一张表。 四、指定索引 对所有会成为查询关键字的字段进行索引,以提高查询效率。 4.1.2 表的设计 一、医生表(doctor) 用来存储医生个人信息,其中“Password”字段在记录插入时与“DID”字段信息相同,因此医生在第一次登录后应该及时地更改自己的密码 表4-1 医生表结构 字段名 类型 备注 约束条 默认值 DID Varchar(5) 医生编号 PK Name Varchar(12) 姓名 索引 Password Varchar(20) 登录密码 初始=DID Sex tinyint 性别 1-男 0-女 1 Level Varchar(12) 医生职称 Section Varchar(20) 所属科室 索引 Specialism Varchar(20) 专家门诊科目 Phone Varchar(15) 联系电话 可为空 Age Int(4) 年龄 0 二、患者表(Patient) 表4-2 患者表结构 字段名 类型 备注 约束条件 默认值 PID Identity类型 患者编号 PK Name Varchar(12) 姓名 Username Varchar(20) 登录用户名 索引 Password Varchar(20) 登录时密码 Age Tinyint(4) 年龄 0 续表4-2 字段名 类型 备注 约束条件 默认值 Sex Tinyint(4) 性别 1-男 0-女 1 Address Varchar(20) 家庭地址 可为空 Phone Varchar(15) 联系电话 可为空 值得注意的是PID设置成Identity类型是为了添加患者记录时,患者编号能自动增长。这样对患者注册时提供方便,而且又是PK,又方便数据库操作。 三、病历记录表(history) 病历记录表记录了患者的病历信息,以doctor字段与doctor表建立关系,以patient字段与patient表建立关系。当finished字段设为“1”时,逻辑层将不能对记录进行修改,只能查询。 表 4-3 病历记录表结构 字段名 类型 备注 约束条件 默认值 HID Identity类型 病历记录编号 PK Doctor Varchar(5) 主治医生编号 索引 Description Varchar(20) 症状 Diagnose Varchar(20) 诊断 Patient Int(8) 患者编号 索引 0 Rx Varchar(20) 处方 Finished Tinyint(1) 就诊是否结束 1-是 0-否 0 四、预约记录表(pinqueue) 预约记录表记录了已预约但尚未创建病历的患者的信息。在这一阶段患者可以取消预约,而医生创建病历也会删除记录,这里对预约就诊时间(Day字段)的约束条件,其取值范围被限定在0~6之间。 表4-4 预约记录表结构 字段名 类型 备注 约束条件 默认值 QID Identity类型 记录编号 PK Doctor Varchar(5) 主治医生编号 索引 续表4-4 字段名 类型 备注 约束条件 默认值 Patient Int(4) 患者编号 索引 0 Date Datatime 预约时间 Day Tinyint(1) 预约就诊时间 Ap Tinyint(1) 预约就诊时间 0-上午 1-下午 五、管理员表(administrator) 管理员表存储了与管理员有关的信息,如用户名、密码、电子邮件、真实姓名 等。注意这里将管理员登录用户名设为索引,目的是为了提高查询时的效率。 表4-5 管理员表结构 字段名 类型 备注 约束条件 默认值 AID Identity类型 管理员编号 PK Username Varchar(20) 登录时用户名 索引 Password Varchar(20) 登录密码 Email Varchar(20) 电子邮件 Name Varchar(12) 姓名 Phone Varchar(15) 联系电话 可为空 六、医生最大可预约数量表(appointment)和当前可预约数量表(curappointment) 这2个表存储了医生每天可预约的最大数量和当前可预约数量,在逻辑层中不提供对其的修改操作,只能在管理员添加医生帐户时输入。以DID字段与doctor表中建立关系。而对于curappointment表,逻辑层提供修改方法。即医生的可预约数量要与患者的预约和取消预约操作相联系。 表4-6 医生最大可预约数量表结构 字段名 类型 备注 约束条件 默认值 DID Varchar(5) 医生编号 PK SunA Tinyint(1) 周日上午 0 SunP Tinyint(1) 周日下午 0 MonA Tinyint(1) 周一上午 0 续表4-6 字段名 类型 备注 约束条件 默认值 MonP Tinyint(1) 周一下午 0 TurA Tinyint(1) 周二上午 0 TurP Tinyint(1) 周二下午 0 WebA Tinyint(1) 周三上午 0 WebP Tinyint(1) 周三下午 0 ThuA Tinyint(1) 周四上午 0 ThuP Tinyint(1) 周四下午 0 FriA Tinyint(1) 周五上午 0 FriP Tinyint(1) 周五下午 0 SatA Tinyint(1) 周六上午 0 SatP Tinyint(1) 周六下午 表4-7 医生当前可预约数量表结构 字段名 类型 备注 约束条件 默认值 DID Varchar(5) 医生编号 PK SunA Tinyint(1) 周日上午 0 SunP Tinyint(1) 周日下午 0 MonA Tinyint(1) 周一上午 0 MonP Tinyint(1) 周一下午 0 TurA Tinyint(1) 周二上午 0 TurP Tinyint(1) 周二下午 0 WebA Tinyint(1) 周三上午 0 WebP Tinyint(1) 周三下午 0 ThuA Tinyint(1) 周四上午 0 ThuP Tinyint(1) 周四下午 0 FriA Tinyint(1) 周五上午 0 FriP Tinyint(1) 周五下午 0 续表4-7 字段名 类型 备注 约束条件 默认值 SatA Tinyint(1) 周六上午 0 SatP Tinyint(1) 周六下午 0 4.1.3 表关系图 图 4.2 表关系图 在SQL Server的hospital数据库中的关系图中,新建关系图,把所有要用到的表添加进去,然后根据下表的关联进行操作,就可以生成上面的关系图。 表 4-8 各表之间的关系 表名 字段名 关联表 关联字段 Pinqueue Doctor Doctor DID 续表4-8 表名 字段名 关联表 关联字段 Pinqueue Patient Patient PID History Doctor Doctor DID History Patient Patient PID Appointment DID Doctor DID curappointment DID Doctor DID 值得注意的是与字符串尤其是中文字符串相比,数据库在处理字符、数字上更有效率,因此一些复杂度有限的字符串数据应该设计成字符或数字类型,并与字符串建立一一对应的关系,而把转换工作交给逻辑层去处理。本次设计中的“性别”字段,虽然使用“男”、“女”作为存储数据更直观,但使用“0”、“1”来代替可以带来性能上的提高。 4.2 逻辑层的设计 4.2.1 逻辑层包结构设计 逻辑层的设计是本次毕业设计的重点环节,根据三层结构,逻辑层封装了系统能够执行的所有机制和程序,以及对数据库的操作。用户只要在表示层里面调用逻辑层内相映的CLASS文件就可以了,这些类文件都存放在/WEB-INF/CLASSES下面。而且程序只要编译一次,就可以多次使用[2]。本次设计的逻辑层Bean文件的存放路径如图4-3所示,所有源程序见附录。 图4.3 逻辑层使用的Bean文件 (1)hospital包概述 整个逻辑层都封装在hospital包中,其UML图如图4-4所示。 图4.4 hospital包的UML图 (2)hospital.db包的概述 hospital.db封装了整个系统用于完成基础功能的类,如数据库连接、日志记录等。hospital.db包的UML图如图4-5所示。 图4.5 hospital.db包的UML图 hospital.db.Util:辅助类,用于完成一些JSP中常用的功能。 hospital.db.InitServlet:初始化整个Servlet环境。 hospital.db.DBconnection:与数据库建立连接,返回Connection对象。 hospital.db.Debug:记录日志,将信息写入指定的日志文件中。 (3)hospital.db.dboperation包概述 hospital.db.dboperation包封装了所有与用户角色有关的模型。其中DBOperation类是一个抽象类,用于建立用户模型,供具体角色(Admin、Patient、Doctor)继承。其UML图如图4-6所示。 图4.6 hosptial.db.dboperation包的UML图 hospital.db.dboperation.DBOperation:建立用户的抽象模型,供子类继承。 hospital.db.dboperation.Admin:继承DBOperation,定义管理员模型。 hospital.db.dboperation.Patient:继承DBOperation,定义患者模型。 hospital.db.dboperation.Doctor:继承DBOperation,定义医生模型。 hospital.db.dboperation.InvalidUserException:继承自Exception,用以封装 一个表示“非法用户名”的异常。 4.2.2 与数据库建立连接类DBConnection 本类位于hospital.db包中,由于Connection是一个非常耗资源的对象,因此在这里使用单例模式来设计DBConnection类,保证了整个生命周期内只存在一个Connection对象,该对象可以被其他类重复利用,这样可以大大节省系统资源。下面是DBConnection类的部分代码的说明。 package hospital.db; import java.sql.*; import hospital.db.*; /*本类用于与数据库建立接*/ public abstract class DBConnection{ private static Connection conn=null; /* 与数据库建立连接,返回值-Connection对象*/ public static Connection getConnection(){ String CLASSFORNAME="com.microsoft.jdbc.sqlserver.SQLServerDriver"; String SERVANDDB="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hospital"; /*调用JDBC驱动,以及定位hospital数据库*/ String USER="sa"; String PWD="tiantang"; //数据库管理员sa帐号和密码 try{ Class.forName(CLASSFORNAME); conn=DriverManager.getConnection(SERVANDDB,USER,PWD); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); Debug.log("Connection created."); //连接成功,写入LOG文件 }catch(Exception ex) { Debug.log(Debug.getExceptionMsg(ex)); //连接抛出错误,也写入LOG文件 } return conn; } } 该程序中一些关键的原理值得说明一下。将类定义为抽象类防止被实例化,这样可以保证内部封装的Connection对象只能用该类定义的静态方法(getConnection())来访问。将内部的Connection对象“conn”定义为静态私有变量,保证整个生命周期只有一份“conn”实例存在,且不能被其他类直接访问。 数据库服务器为了保证资源被充分利用,会设定一个连接保持时限,当一个连接时限内与数据库没有通信时,会被服务器关闭。而“Debug.log()”是定义在Debug类中的静态方法,用来将信息存入日志文件。 关于hosptial.db包中其他类的介绍和说明本节不在赘述,源程序见附录。 4.2.3 用户角色类 (1)医生模型Doctor类 本类位于hospital.db.dboperation包中,doctor类封状了医生角色可执行的所有操作。比如登录,查询患者病历,修改病历等操作。每个对象对应一个可执行操作。 图4.7 doctor类对象列表 (2)管理员模型Admin类 本类位于hospital.db.dboperation包中,admin类封状了管理员可执行的所有操作,根据下图,每个对象对应一个操作。 图4.8 admin类对象列表 (3)患者模型Patient类 本类位于hospital.db.dboperation包中,patient类封装了患者角色可执行的所有操作。比如登录,查询医生信息,预约等操作。在编写程序时,每个对象就是一个操作。如addPatient()就是针对患者注册的一个公有对象。 图4.9 patient类对象列表 4.3 表达层设计 4.3.1 表达层设计概述 表示层是信息系统的用户接口部分,即人机界面,是用户与系统间交互信息的窗口,主要功能是指导操作人员使用界面,输入数据、输出结果。它并不拥有企业逻辑,或只拥有部分不涉及企业核心机密的应用逻辑[8]。 当逻辑层编写完毕,只剩下最后一项工作,允许用户以适当的方式通过逻辑层与数据库层交互,而这正是表示层的工作。这里就要通过功能完整的JSP代码和HTML代码来整合。所以下面将JSP页面与逻辑层的整合过程中的重要部分。 (1)声明部分 这个部分用“<%@……%>”包括,用于设定一些于JSP页面有关的信息。一般第一行定义了页面所使用的字符集,中文界面一般使用GB2312;接下来使用“<%@page import=“……”%>”定义页面需要导入的包,即“import”语句,本次设计中一般被用到的包有:“hospital.db.*”、“hospital.db.dboperation.*”、“java.sql.*”[11]。 (2)HTML设计部分 这部分更多地使用HTML代码把搭建出来并进行美化。一般使用HTML中的 form标签、table标签和div标签以及辅助action属性来搭建框架和美化。其中加入“<%@.....%>”的JSP代码段,使得实现动态页面。 (3)页面数据处理 这个部分是整个JSP页面的核心部分,负责关于系统的权限检查,从页面收集数据、对数据库进行操作、检测操作结果等。 (4)释放数据库资源 当所有操作都完成,用户结束操作或关闭界面,系统调用DBOperation类中的“closeConnection()”方法来释放数据资源。 4.3.2​ 表达层设计中使用的几大JSP对象 (1)​ Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获得封装的信息,即使用该对象可以获取用户提交的信息。 如request.getParameter()方法可以获取该表单通过text提交的信息。、 (2)​ Response对象 该对象封装了对客户的请求做出的动态的响应,向客户端发送数据。如response.sendRedirect()方法来实现客户的重定向,就是当用户进行了之前的操作,就会使用这个方法来跳转到别的页面。 (3)​ Session对象 它是在第一个JSP页面被装载时自动创建,完成会话期间的管理,当会话结束,session自动释放。如session.getId()方法是获取Session对象编号。 (4)​ Application对象 服务器启动后就产生了这个Application对象,当客户在所访问的各个页面之间浏览时,这个Application对象都是同一个,直到服务器关闭。如application.setAttribute(String key)方法是获取application对象中含有关键字的对象。 (5)​ 其他对象 在JSP几大内置对象中,还有Out,Cookie,Config,Page和Exception等,但在本次设计中不是很常用,所以不在赘述[8]。 本次设计的系统,有三个用户角色,每个角色都是独立的操作。所以这次设计针对每个用户的操作界面即每个用户独立操作的表示层。在系统文件中,…/hospital/admin;…/hospital/patient;…/hospital/doctor三个文件夹中分别放了每个用户独立操作的JSP页面。比如管理员文件中的addDoctor.jsp就是来实现添加医生信息的JSP文件。所有的JSP文件名简单好懂,一目了然,便于再次开发的时候方便设计。 4.4 系统功能实现与演示 由于系统有3个角色模型,每个角色的模型都有很多执行操作,介绍繁杂留给用户自己体验。所以本节介绍一些基本的用户操作来实现基本的功能。 一、打开IE输入http://localhost:8080/hospital进入系统主界面 图4.10 系统主界面 二、选择角色类型进行登录,点击左边导航链接进行操作。下图是管理员登录界面,其他角色用户登录也是一样。所以用一张图来代表。 图4.11 管理员登录界面 三、当患者登录成功以后,会回到主界面,再点击患者用户,就可以看见下面出现很多操作条目,点击其中的条目进行患者必须的操作。比如查询医生信息,预约等。 图4.12 患者查询医生信息界面 当患者用户点击医生,就进入预约界面。选择合适的时间进行就医,如果想取消预约,就在查询预约中,点击显示的记录就可以提示是否取消。 四、患者就医过后可以查询自己的病历,以及出访和是否治疗结束。 图4.13 患者查询病历信息界面 五、如果患者是新用户,想要进入预约系统就要注册新帐号。 图4.14 患者注册界面 六、管理员登录进去后可以添加,删除医生信息和帐户。 图4.15 管理员管理医生信息界面 七、删除医生信息只需要点选医生姓名就可以获得是否删除的提示。 图4.16 是否删除医生信息 八、医生第一次登录后应该及时更改密码,因为数据库默认的医生帐户和密码是一致的,为了安全应该改密码。 图4.17 医生更改密码界面及可执行操作界面 到这里,该系统的基本功能设计和界面操作基本介绍完毕,整个系统操作简单,界面友好,根据左边导航栏,用户的操作一目了然,基本不存在难度。而且功能也基本实现,而且移植性高,只要重新编译hospital.db包下面的DBConnection.java文件即可。当然数据库的移植也要匹配。所以本次系统设计的功能基本成功,但还有待进一步的提高和深化。 第五章 设计总结 从接受毕业设计任务到设计完成已经差不多3个月了。整个设计要求对MS SQL Server数据库应用系统的基本实现方法以及实现技术、工具有一定的了解。而且,在设计医院门诊查询系统时,需要对功能需求考虑完善。虽然我以前也做过类似应用系统的设计开发,但通过本次设计还是受益匪浅。在整个设计过程中,系统的整体构架很早就完成了,接下来的细节问题却使我颇伤脑筋。随着设计程度的不断深入,又遇到了一些早期没有想到的问题。为了解决这些问题,有时还要对几个模块进行大幅度的修改。在设计中,还需要进行细致的测试工作,以发现程序的错误和功能上的不足。 本系统开发时使用的系统为Windows XP Professional版本。数据库的建立使用的是MS SQL Server 2000个人版。数据访问方法是使用通过调用封装了JDBC驱动的Bean程序实现。本系统是基于JSP设计的。数据库的设计由于在校学习了这门课程,所以,着手较快。设计的基本框架1个星期就完成了。然后分步完善各项功能。但是随着设计的深入,在应用JSP的高级设计方法时就出现了一些问题,往往这些问题都需要花不少的时间来解决。遇到这种情况,不仅仅是由于专业知识的缺乏,更多是实际应用操作的缺乏。所以我们在学习的时候,不要一味的注重理论知识,而忽视了动手操作。只有将理论知识和实践结合起来,就可以灵活运用任何一套软件了。 由于时间和个人技术关系,本系统还有一些不足和值得改进的地方,比如说查询问题,可以结合企业进行模糊判断,这样查询的准确性还会明显的提高。通过这次毕业设计,提高了我在系统整体设计上的能力,增长了分析、解决问题的经验,对一些知识有了更深一步的掌握。可以说,这次毕业设计既锻炼了我动脑分析问题的能力,又锻炼了我动手解决实际问题的能力,这将对我以后的学习起到不可估量的作用。 通过毕业设计这次磨砺,我这把小刀变得更锋利了。我的能力也提高了。所以它对于我们来说有着十分重要的意义。我会运用从中得到的宝贵经验来指导我今后的学习和工作,不断的实践,不断地学习,让自己变得更加充实自己,更有内涵,更适合于社会发展的需要。 参考文献 [1] Herbert著.张玉清等译.Java2参考大全[M].北京:清华大学出版社,2002年1月:56-80. [2] 汪孝宜等著.JSP数据库开发实例精粹[M].北京:电子工业出版社,2005年1月:124-130. [3] 飞思科技开发中心著.JSP应用开发详解[M].北京:电子工业出版社,2002年1月:98-110. [4] Ed Roman著. Wiley Mastering EJB[M].北京:电子工业出版社,2002年10月:10-16. [5] 王珊,萨师煊著.数据库系统概论[M].北京:高等教育出版社,2000年2月:225-27
/
本文档为【医疗门诊查询系统_(基于JavaEE)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索