资源描述:
《JSP医院门诊取药功能实现全解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
2013级本科数据库课程设计报告摘要随着社会的进步和人类生产生活水平的提高,国内现有的医院不论从规模上还是服务质量上都实现了显著增长。显然,如果医院门诊仍采用人工管理的方式显然无法应对庞大的病患需求。如今,科学与发展已成为时代的主题。在中国软件行业日益进步的今天,我们可以利用这些资源来帮助减轻医生和病人的负担,让病人能够尽快就医。一个高质量的医院门诊管理系统,能提高医院的社会效益与经济效益。本文采用结构化分析和设计方法,通过MVC模式用JSP页面实现医院的网络化,通过msql数据库来存储信息。运用数据流程图和E-R图等工具对小型医院门诊管理系统数据库进行分析和设计,实现登记挂号、诊断治疗、收费挂号等医院门诊的基本业务。 关键词:医院;门诊管理信息系统;JSP;系统开发;数据库设计一、概述1、1背景介绍随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已经进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对医院门诊信息进行管理,具有比手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大等。这些优点能够极大地提高人事劳资管理的效率,也是企业的科学化、正规化管理的重要条件。针对典型的管理系统,以医院门诊管理为载体,设计医院门诊管理系统。在传统的医院门诊信息管理中,其过程往往是很复杂的,繁琐的,医院门诊信息管理以患者挂号、诊治、开药为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程必须实现信息化。近年来我国医疗事业发展迅速,手工管理方式在医院门诊信息管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使医疗行业直面外国同行单位的直接挑战,因此,医院必须提高其工作效率,改善其工作环境。这样,医院门诊信息管理的信息化势在必行。我们的系统开发的整体任务是实现医院门诊信息管理的系统化、规范化、自动化和智能化,从而达到提高医疗单位管理效率的目的。1、2系统目标本课题的目的是使医院门诊信息管理清晰化,透明化,便于操作,易于管理。通过功能模块的优化组合实现不同的管理细节,使管理过程实现最大程度的自动化与信息化,并能自动对人工操作环节进行复查,使医院门诊管理信息系统出错率降至最低。在传统的医院门诊信息管理中,各种管理工作往往是很复杂烦琐的。医院门诊信息管理的特点是信息处理量比较大,所管理的种类比较繁多,而且由于挂号、开药等单据发生量特别大,关联信息多,查询和统计的方式不尽相同。在管理过程中经常会出现信息的重复传递,因此医院门诊信息管理必须实现计算机化处理。对于后台数据库的建立和维护要求建立起数据的一致性和完整性强、数据安全性好、符合3NF范式。而前端应用程序的开发则要求应用程序能提供强大的数据操纵功能,界面友好、使 用简单方便等特点。我们系统开发的总体任务是实现医院门诊信息管理的系统化、规范化、自动化、信息化与智能化,从而达到提高医院门诊信息管理效率的目的。通过医院门诊收费系统的设计,熟练掌握MyEclipse,Mysql等工具软件,系统地掌握需求分析、数据库设计、编码实现、测试等软件开发的流程,提高自身分析问题、解决问题的能力。21
12013级本科数据库课程设计报告1、3系统功能框架图图1医院门诊管理信息系统的系统结构图一、技术简介2、1java简介Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。1.平台无关性平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。2.安全性Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。3.面向对象Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。4.分布式Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。21
22013级本科数据库课程设计报告5.健壮性Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Bytecode校验等功能。6.解释型我们知道C,C++等语言,都是针对CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CPU有关。Java不像C或C++,它不针对CPU芯片进行编译,而是把程序编译成称为自字节码的一种“中间代码”。字节码是很接近机器码的文件,可以在提供了java虚拟机(JVM)的任何系统上被解释执行。7.动态java程序的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分部环境中动态的维护程序及分类,而不像C++那样,没档期类库升级以后,如果想让程序具有新类库提供的功能,就需要修改程序,重新编译。2、2 JSP 简介 JSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。它实现了Html语法中的java扩张(以<%,%>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。JSP(JavaServerPages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。语言组成:request:对象是javax.servlet.httpServletRequest类型的对象。Response:代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。Session:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。Application:服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。out:用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。page:代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,类似于Java编程中的this指针。Config:主要作用是取得服务器的配置信息。通过pageContext对象的getServletConfig()21
32013级本科数据库课程设计报告方法可以获取一个config对象。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。Exception:java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。pageContext:作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、reponse、session、application等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。2、3MySQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。2、4JDBC简介JDBC,全称为JavaDataBaseConnectivitystandard,是Sun公司注册了的商标,代表用来执行SQL语句的Java语言应用程序编程接口API,它包括一系列用Java语言编写的类和接口,是J2EE访问数据库的标准接口技术,它与Microsoft开发的ODBC技术具有同样的功效,提供一组通用的API,通过数据库特定的驱动程序,访问数据库。不同之处是ODBC是用C语言编写的,主要用于在Windows平台下访问数据库,JDBC是完全用Java语言编写的,是Java程序访问数据库的接口技术。目标:JDBCAPI的目标是提供对关系数据库的厂商无关的访问。通过JDBCAPI的使用,可以将使用的各种数据库实现上的不同都为用户抽象出来。也就是说,采用JDBC可以很容易用SQL语句访问任何商用数据库,通过JDBCAPI,数据库应用开发者就不需要编写1个程序访问Sybase数据库,编写另1个程序访问Oracle数据库,再编写第3个程序访问Informix数据库,而只需编写1个使用JDBCAPI的程序,就可以将SQL查询语句送往合适的数据库。同时,采用Java语言编写应用程序,具有平台无关性,不需要为不同的平台编写不同的应用程序。因此,采用Java和JDBC编写数据库应用程序的开发者可以真正做到“编写一次,随处可用”。虽然JDBC规范并没有指明JDBCAPI只用于关系数据库(实际上,它们可以用于访问任何表格式的数据库,包括电子表格和文件)但实际上它一直主要用于实施对关系数据库的访问。三、需求分析3、1角色描述医院门诊管理系统主要是为了病人就诊方便,医院管理简单快捷而设的。在病人从就诊医生处的到开药处方单时,则需要凭借处方单到药房从管理员那儿进行缴费取药,而药品拿去之后,药品管理员会给病人开出药品缴费单,上面注明日期表明病人已经领取药物。3、2功能描述1.顶层数据流图21
42013级本科数据库课程设计报告2.总体DFD(第一层数据流图)本医院门诊管理系统主要实现:挂号、就诊、缴费取药、仓库药品管理和财务管理。总体的DFD图如3-1所示。图3-1医院门诊管理系统总体DFD图3.门诊药房取药DFD门诊药房取药主要实现:病人根据处方缴费取药,药品的缴费过程则要参考药品信息,病人领取药品后获取缴费单信息。总体的DFD图如3-2所示。21
52013级本科数据库课程设计报告图3-2医院门诊药房取药总体DFD图四、概念结构设计概念设计阶段的任务是将需求分析得到的用户需求抽象为信息结构(概念模型)的过程。要能充分的反应事物与事物之间的联系,是对现实世界的一个真实模型。在需求分析阶段得到的应用需求首先抽象为信息世界的结构才能更好的用某一DBMS实现这些需求。E-R模型是概念模型的有力工具。逐一设计分E-R图,再将所有的分E-R图综合成系统的总E-R图。下面是医院门诊管理系统子系统——药房取药的概念结构设计的具体步骤。4、1抽象出系统的实体根据分析,医院门诊管理系统子系统——药房取药的基本实体为:处方,病人,药房管理员,药品,而它们之间的联系分别是处方对病人的“提醒”联系,病人对收费员的“缴费”联系以及药品管理员对药品的“管理”联系。而每个实体应该具有如下所列的基本属性,画出E-R图,如图4-1、图4-2、图4-3、图4-4所示。l处方:处方号,药品名称,药品数量,就诊日期,病人姓名,医生编号。l病人:病人编号,病人姓名,性别,电话,地址。l缴费单:缴费单号、总价、单价、日期,药品名称,药品数量,管理员编号,病人姓名。l药品管理员:管理员编号,管理员姓名,性别。l药品:药品编号,药品名称,单价,生产日期。图4-1处方实体21
62013级本科数据库课程设计报告图4-2病人实体图4-3药品管理员实体图4-4药品实体4、2设计分E-R图在医院门诊管理系统子系统——药房取药中,有处方,病人,药品管理员和药品4个实体,这四个实体之间存在联系。一个病人可以拥有多个处方,一张处方只属于一个病人。一个病人可以向不同的药品管理员缴费取药,一个管理员可以向多个病人收取药品费用。一个管理员能管理多种药品。由以上分析,将处方与病人之间的联系命名为提醒,将病人与药品管理员之间的联系命名为缴费,将药品管理员与药品之间的联系命名为管理,得到各个局部的E-R图。如图4-5,4-6,4-7所示。21
72013级本科数据库课程设计报告1M图4-5处方与病人之间的E-R图图4-6药品管理员与药品之间的E-R图图4-7药品管理员与病人之间的E-R图4、3合并分E-R图,生成初步E-R图经过分析,将各个实体联系之间进行分析合并。因此,合并上述分E-R图,生成初步E-R图,如图4-8所示:21
82013级本科数据库课程设计报告图4-8药房取药的初步E-R图4、4生成全局E-R图根据上述列出的分E-R图,消除其中存在的冲突、冗余,建立全局E-R图(详见图4-9),并列出所有实体和联系以及相关属性。图4-9药房缴费取药总体E-R图五、逻辑结构设计逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。根据DBMS产品以及不同系统的限制,设计逻辑结构时一般有以下三个步骤:首先将概念结构转换为一般的 21
92013级本科数据库课程设计报告关系、网状、层次模型;将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;最后对数据模型进行优化。 医院门诊管理系统的设计采用关系模型。E-R图转化为关系模型实际上就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。 在概念结构设计阶段得到E-R图之后,下一步是进行数据库的逻辑结构设计,根据转换规则将E-R图转换为关系模式,即将实体与联系转换为关系数据库的基本表,并标识各个表的主键。得到药房缴费取药的关系模式:关系模式的初步设计:l处方(处方号,就诊日期,药品名称,药品数量,病人姓名,医生编号)处方号为主键,病人姓名和医生编号为外键。l病人(病人编号,病人姓名,性别,电话,地址)病人编号作为主键。l缴费单(缴费单号,药品名称,药品数量,单价,总价,管理员编号,日期,病人姓名)缴费单号为主键,管理员编号和病人姓名为外键。l药品管理员(管理员编号,管理员姓名,性别)。l药品(药品编号,药品名称,单价,生产日期)。优化关系模式,在处方单和缴费单中均存在表中表的问题,这就需要分别生成二级表来保证数据库的安全性完整性设计:l处方(处方号,就诊日期,病人姓名,医生编号)处方号为主键,病人姓名和医生编号为外键。经过消除传递性依赖和部分函数依赖,使得成为第三范式。l处方二级表(序号,药品名称,药品数量,处方号)序号为主键,处方号为外键。l缴费单(缴费单号,管理员编号,日期,病人姓名)缴费单号为主键,管理员编号和病人姓名为外键,经过消除传递性依赖和部分函数依赖,使得成为第三范式。l缴费单二级表(序列号,药品名称,药品数量,单价,总价,缴费单号)序列号为主键,缴费单号为外键。六、数据库的物理设计与实施6、1数据库表设计表6-1处方表名类型长度允许空值是否为主键备注cfidvarchar20否是处方号cdatedate20否否就诊日期sicknamevarchar20否否病人姓名doctoridvarchar20否否医生编号表6-2处方二级表名类型长度允许空值是否为主键备注xuhaovarchar6否是序号ynamevarchar20否否药品名称qualityint8否否药品数量cfidvarchar20否否处方号21
102013级本科数据库课程设计报告表6-3病人表名类型长度允许空值是否为主键备注sickidvarchar8否是病人编号sicknamevarchar20否否病人姓名sexvarchar6否否性别phonevarchar30否否电话addressvarchar200否否地址表6-4药品管理员表名类型长度允许空值是否为主键备注aidvarchar20否是管理员编号anamevarchar20否否管理员姓名sexvarchar6否否性别表6-5药品表名类型长度允许空值是否为主键备注yidvarchar20否是药品编号ynamevarchar20否是药品名称dpricedouble6否否单价scdatedate20否否生产日期表6-6缴费单名类型长度允许空值是否为主键备注jidvarchar6否是缴费单号jdatedate20否是日期sicknamevarchar20否否病人姓名anamevarchar20否否管理员编号表6-7缴费单二级表名类型长度允许空值是否为主键备注xuliehaovarchar6否是序列号ynamevarchar20否是药品名称qualityint6否否药品数量dpricedouble8否否单价zpricedouble20否否总价jidint20否否缴费单号6、2数据库代码实现在把数据库设计完成之后,转而投入了实现了前台界面与后台数据库的交互,我此次用的是JSP实现的一个小型界面,这正是MVC模式的体现,通过程序与数据库连接,可以对数据库里面的信息进行修改,删除,查看等操作。连接数据库的BateDao.java实现代码如下:publicclassBateDao{21
112013级本科数据库课程设计报告staticConnectionconn=null;Statementstmt=null;staticResultSetres=null;static{try{Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("加载驱动失败");}}publicstaticConnectiongetConn(){try{conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospital","root","root");}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("连接数据库失败");}returnconn;}publicvoidgetStatement(){if(conn==null){this.getConn();}try{stmt=conn.createStatement();}catch(SQLExceptione){e.printStackTrace();System.out.println("创建句柄失败");}}publicResultSetgetResult(Stringmysql){if(stmt==null){this.getStatement();}try{res=stmt.executeQuery(mysql);}catch(SQLExceptione){e.printStackTrace();}returnres;21
122013级本科数据库课程设计报告}publicvoidrelease(){if(res!=null){try{res.close();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}if(stmt!=null){try{stmt.close();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}if(conn!=null){try{conn.close();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}publicstaticChufangfind(Stringcid){Connectionconn=null;PreparedStatementpt=null;ResultSetrs=null;try{conn=BateDao.getConn();Stringsql="select*fromchufangwherecid=?";pt=conn.prepareStatement(sql);pt.setString(1,cid);rs=pt.executeQuery();if(rs.next()){Chufangb=newChufang();b.setId(rs.getString("cid"));b.setName(rs.getString("name"));b.setTime(rs.getDate("date"));b.setQuality(rs.getString("quality"));b.setDname(rs.getString("doctorid"));21
132013级本科数据库课程设计报告returnb;}returnnull;}catch(Exceptione){thrownewRuntimeException(e);}}publicstaticYaofinddanjia(Stringcid){Connectionconn=null;PreparedStatementpt=null;ResultSetrs=null;try{conn=BateDao.getConn();Stringsql="select*fromyaowherename=?";pt=conn.prepareStatement(sql);pt.setString(1,cid);rs=pt.executeQuery();if(rs.next()){Yaob=newYao();b.setDanjia(rs.getDouble("danjia"));returnb;}returnnull;}catch(Exceptione){thrownewRuntimeException(e);}}} 药房登录界面如下图6-8所示:图6-8登录界面(1)登录的JSP页面实现代码如下:21
142013级本科数据库课程设计报告
门诊药房登录
管理员: | |
密码: | |
|