获取项目源文件,联系Q:1225467431,可指导毕设,课设
摘 要
Internet互联网技术的快速发展的同时也带来了社会各个行业的发展。它的发展已经深入到社会的各个角落。作为社会发展的前沿技术,各行各业只要对其合理的进行运用,必将会带来巨大的便捷。成功的运用Internet将为医疗事业带来无限便利。
在传统的医院挂号过程中,信息处理停留在手工方式,劳动强度大且工作效率低,医师护士和管理人员的大量时间都消耗在事务性工作上,病人排队等候时间长,这些影响了医疗的秩序,也延误了患者的病情。而本论文的探索研究方向则为医院挂号网站的开发与实现。本系统采用的是基于广域网的B/S结构平台,比C/S有更强的适用范围,具有更加生动和丰富的表现方式与用户交流。系统的设计框架采用的是已经发展成熟、安全的SSH(Struts+Spring+Hibernate)技术框架,使系统实施更为方便和安全。网页采用的是JSP技术,它拥有卓越的系统可移植性,同时它与流行的XML等技术也能良好整合,加上MYSQL数据库强大的后台数据支持,奠定了JSP技术在网络应用系统开发中的关键地位。它使我们的网页更加生动、具有表现力。
这次毕业设计开发了医院预约挂号系统,该系统是专为解决广大患者挂号难这个问题。通过本网站患者可以有针对性的快速的找到符合自身的需求的医师进行预约挂号。
Hospital registration and online booking system based on JSP
Abstract
With rapid development of Internet technology,which also brought the development of all sectors of society。Its development has deep into every corner of society. As a cutting-edge technology, all walks of life as long as use it reasonablely , which will bring tremendous convenient and fast. Successful use of Internet will facilitate the medical cause enormous.
Hospital in the traditional process, the information processing remain in the manual, labor-intensive and low efficiency, doctors、nurses and managers have a lot of time consumed by the business work, patients waiting in line for a long time around the course, and the impact of the order of a medical, but also delayed patients. The system is based on the wide area network of the B / S structure of the platform, than the C / S have more scope with a more lively and rich exchange of expressions with the user. System used in the design of the framework is already mature and secure SSH (Struts + Spring + Hibernate) technology framework, allowing the system to the implementation of more convenient and secure. JSP pages using the technology, it has excellent portability of the system, at the same time with popular technologies such as XML can be a good integration, coupled with a strong background MYSQL database data support, laid the JSP technology applications in the network development key position. It makes our website more lively and with expression.
Design and development of the graduate appointment to the hospital registration system, the system is designed to address the vast number of registered patients with the problem difficult. Patients through this website can be found quickly targeted in line with the needs of their own to make appointments for registered physicians.
Key words:hospital, registration, StrutsSpringHibernate,JSP.
目 录
TOC 1-3 1 绪 论 1
1.1 课题背景及研究意义 1
1.2 国内外研究现状 1
1.3本课题研究内容 2
1.3.1功能模块 2
1.3.2后台数据库 3
2 开发环境及开发技术 4
2.1 B/S模型 4
2.2 JSP技术发展背景 4
2.3 SSH框架 5
2.4 Struts框架 6
2.5 Spring框架 8
2.6 Hibernate框架 8
2.7 Tomcat 5.5简介 9
2.8 MyEclipse 5.5.1 GA 9
2.9 数据库简介 10
3 系统需求分析 11
3.1系统需求分析 11
3.2系统可行性分析 11
3.3系统功能需求 11
3.3数据流图 12
3.4 系统的数据字典 14
3.5系统的性能需求 14
3.6系统的数据需求 14
3.7系统的运行需求 15
4 系统设计 16
4.1系统数据库设计 16
4.1.1 数据库表格设计 16
4.1.2 ER图设计 18
4.2 系统设计 19
4.2 .1系统结构设计 19
4.2 .2系统流程设计 20
4.3 系统子模块设计 21
4.3.1 管理员模块 21
4.3.2 用户模块 22
5 系统实现 24
5.1 登录功能的实现 24
5.2 用户注册页面的实现 25
5.3 查询科室以及查询、预约医师的实现 26
5.4 科室添加功能的实现 28
5.5 医师添加功能的实现 29
6 总 结 30
参考文献 31
致 谢 32
1 绪 论
1.1 课题背景及研究意义
随着经济与科学技术的高速发展,信息化的进程不断加快。随着计算机性能不断提高,价格不断下降,计算机已在医院医疗,教学,科研,管理的各个方面得到越来越广泛的应用。然而,我国还有部分医院的信息处理停留在手工方式,劳动强度大且工作效率低,医师护士和管理人员的大量时间都消耗在事务性工作上,病人排队等候时间长,辗转过程多,影响了医疗的秩序。计算机化的医院信息系统已成为现代化医院运营必不可少的基础设施与技术支撑环境。门诊挂号系统是整个医院管理信息系统的第一个窗口,是病人到医院就诊要做的第一项工作。它用于收集病人的信息,协调科室医生管理,控制各科室的流量等等。
医院网上预约挂号系统是一种基于互联网的新型挂号系统,是卫生信息化建设的基础的项目之一。利用该预约挂号系统,用户就可以在网上预约医院的专家、专科号,而无须再受排队之苦。它能更好的改善就医环境,简化就医环节,节约就医时间,真正体现了以病人为中心,一切从方便患者出发,符合当今医院人性化温馨服务的理念。
目前,门诊一直是困扰医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院,而造成门诊质量难以提高的因素主要有两方面:
一方面集中式挂号(现在流行的分层挂号只是相对而言一个范围较小的集中式挂号),就诊人员流量不均、具有不确定性,有明显的就诊高峰和低谷(表现在整个医院不同门诊时间段及同科室的不同时间段)。高峰期病人挂号排队长,就诊时间长,医生熟人插号现象,环境拥挤混乱,医生问诊时间短、不仔细、态度差。而低谷期,医生无病人看、溜号,医院资源浪费。
另一方面专家号(特别是名专家号)难挂,出现倒号、炒号现象,严重损害病人利益,影响到医院的声誉。而采用网上预约挂号,可有效的解决这一现象,还通过有效的身份验证,杜绝倒、炒专家号的现象,提高医院门诊服务质量,取得良好的社会效益和经济效益。此外,病人到医院就诊前对医院的相关信息了解不多,对所要挂的专科医生的情况又不太了解,只能凭经验和印象进行选择,具有较大的盲目性。而当医院开通网上挂号预约服务以后,求医者只需坐在家中,轻点儿下鼠标,就可以挂上医院专家门诊号,可以做到足不出户选医生”。网上预约正悄然改变着都市求医者的看病观念。拥有相对固定的个人医生和习惯,预约看病,将不再遥远,所以应用必将越来越广泛。
1.2 国内外研究现状
随着互联网络的迅猛发展,Internet用户已呈几何级数增长,目前已经有很多医院投入使用网上挂号系统。据了解,预约挂号在国外颇为普及。在西方国家,病人看病都需要事先进行预约。随着预约挂号的深入推广,国内越来越多的医院也意识到预约服务在节约看病时间、分流患者、减轻医院压力上的作用。据了解,尽管存在很多困难,但全国各地的医院在尝试预约挂号的实践中还是提供了很多有益的做法。
广东省人民医院早在2004年就采取了一套相对完整的预约挂号体系,其三种预约方式,按照受欢迎程度排名依此为:电话、现场、网络,分别占到了预约挂号中 50%、40%、10%。在福建,全省范围内拨打12320海西健康热线电话,即可预约到福建省立医院等5家医院的专家号,只按市话费标准收费,不收取任何信息服务费。在北京,解放军总医院(三○一医院)于前不久专门开通了夜间门诊电话预约挂号66936619(不收预约费),可以毫不费力地约到各科室的专家,开通不久即见成效,目前已经成功分流了约1/3的患者。
此外医院还开通手机挂号功能,患者只需要发送短信就可以进行预约挂号。患者根据系统提示,输入姓名、性别、年龄、住址、付费方式、就诊卡号、预约时间、预约科室、预约项目、预约医师等内容,系统就会根据各门诊科室提供的具体情况,安排给患者合适的就诊排号位或挂号建议。在患者就诊前一天、就诊当天、就诊前一小时、就诊前5分钟,系统还会以短信的形式多次通知患者。患者如果有事无法就诊,通过发送短信,经过医师或护士同意,还可二次预约。
1.3本课题研究内容
本课题的主要研究的内容是运用JSP语言、TOMCAT服务器和SQL数据库实现管理员对系统的管理、用户预约挂号等功能的管理和实现,包括前台模块和后台管理模块。此系统采用技术框架为SSH框架(Spring + Struts + Hibernate)
1.3.1功能模块
通过对用户需求的分析,本系统的功能主要包括两块,前台用户操作及后台管理。各个功能的具体描述如下:
前台用户操作界面功能主要有:专家查询、用户信息修改、密码修改等功能设置。各个模块的功能简述如下:
<1>专家查询
通过这个功能可以浏览到每个专家的简介及所属科室,从而选择专家进行具体预约。
<2>用户信息修改
可以对自己的信息进行修改,如:姓名、密码提示问题及答案、性别、出生年月、身份证号、E-mail地址等信息。
<3>密码修改
输入一遍旧密码,两遍新密码即可成功修改密码。
<4>系统管理
管理员进行对科室信息、医师信息的添加、删除与修改操作,也可以对用户进行删除操作。
1.3.2后台数据库
使用Hibernate驱动程序访问数据库,数据库由五张表组成:管理员信息表、用户信息表、医生表、科室表以及提供预约的时间表。数据库主要记录用户信息、医生信息以及预约挂号的信息,并且预约记录也保存到数据库中。
2 开发环境及开发技术
医院网上挂号系统是以SSH框架为主要的技术框架,以JSP技术为客户端的主要显示技术,以MySQL数据库作为系统的数据存储单元。下面我们来介绍下本系统的开发环境以及开发中所用到的相关技术。
2.1 B/S模型
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者说是改进的结构。用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成三层结构,是一种全新的软件系统构造技术。
B/S模式最大特点是:用户可以通过WWW例览器去访问Internet上的文本、数据、图像、动画、视频点播和声音信息,这些信息都是由许许多多的Web服务器产生的,而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中。客户端除了WWW创览器,一般无须任何用户程序,只需从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。
B/S模型结构图如图2.1所示:
图2.1 B/S模型结构图
从上图可见 这种结构的一个重要的特点是,用户可以完全不需要安装客户端软件,当然也不需要担心任何软件升级和不兼容等任何客户端所遇到的问题。相比之下,B/S模型的优点显而易见,更适合这个网站的构建,有利于网站的维护和扩充。
2.2 JSP技术发展背景
Web技术的迅猛发展正推动Internet上信息服务类的进步。WWW服务的基础是HTML语言。这个系统模块中用到的JSP技术是在HTML语言的基础上使用脚本语言对网页的对象模型进行编程。JSP全称JavaServerPages,它是由Sun Microsystems公司提出、许多公司参与建立的一种动态网页技术标准。它诞生在 1999年6月1日。目前国内外已经在广泛地使用JSP。随着JAVA语言得到普及,越来越多的公司开始关注JSP的前景。
传统的动态网页制作包括CGI、ASP、JSP三种,而JSP具有明显的优势。使用CGI-BINJ接口是一个最早的动态WEB页面问题的解决方案。缺点,CGI程序必须从CGI接口读入一长串的字符串,再从字符串中取得所需要的数据并加以处理。过程十分繁琐。另一个缺点,除了Perl是解释语言外,其他都是编译式的语言。每次修改后,都必须重新编译一次,这给开发人员带来麻烦,增加了工作量。ASP和JSP都能取代CGI使网站建设和发展变得简单快捷。尽管JSP技术和ASP在许多方面都有相似的,但仍然存在很多不同之处,其中最本质上的区别在于:两者是来源于不同的技术规范组织,其实现的基础,WEB服务器平台要求不相同。
<1> 作为Java平台的一部分,JSP拥有Java编程语言一次编写,各处运行”的特点。一次写入,之后,可以运行在任何具有符合Java TM语法结构的环境。取代过去单一平台开发。ASP主要工作环境是微软的IIS应用程序结构,又因Activex对象具有平台特性,所以ASP技术不能很容易地实现在跨平台的WEB服务器的工作。
<2> 从开发人员的角度来看其区别在于:ASP仅支持组件对象模型COM,而JSP技术提供的组件都是基于JavaBeans TM技术或JSP标签库。
<3> JSP标签可扩充性。JSP技术能够使用开发者扩展JSP标签,JSP开发者能定制标签库,减少对脚本语言的依赖。
<4> 生成可重用的组件。JSP基于组件的技术方法加速了总体开发过程。 JSP组件(JavaBeans,或定制的JSP标签)是跨平台可重用的。JavaBeans组件可以访问数据库,并能以分布式系统模式工作于UNIX和WINDOWS平台。
<5> 易于维护性。 基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理。JSP突出的组件技术使修改内容而不影响逻辑或修改逻辑而不影响内容变得很容易实现。
如上的比较不难看出,JSP技术编写的程序运用要更加灵活,可扩展性更强。
2.3 SSH框架
即为Struts + Spring + Hibernate技术,典型的MVC三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。
表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。
中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。
Web层,就是MVC模式里面的C”(Controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。
Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。
DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。
PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。
Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO层无缝整合,其数据服务层用来存放数据。
2.4 Struts框架
Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:
<1>模型(Model),本质上来说在Struts中Model是一个Action类,开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。
<2>视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。
<3>控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。
<4>一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBeans的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。
struts框架的各个部分以及相互之间的运作:
在使用Struts之前,咱们必先设置好JSP服务器,以便让服务器在用户请求时,知道该如何将指定后缀的请求转到相应的Controller-Struts ActionServlet处理,当然,这些配置信息都一般在服务器启动时通过web.xml文件读入的。我们可以在web.xml定义多个Controller,为每一个应用定义一个Controller。
<1>控制器(Controller)
Controller是这个框架中扮演交通警察”的角色,当客户端与服务器有交互动作时,都由她来控制。Controller将HTTP请求封包并转发到框架中相应的对象,这些对象可能是一个JSP页面或一个Action。
Controller在web.xml中设置为org.apache.struts.action.ActionServlet的一个实例,在一个完整的控制过程中,也就是处理一个HTTP请求时,在控制过程之初,这个Servlet会从一个配置文件struts-config.xml中获取请求与控制动作向对应的配置信息, Controller通过这些配置信息来决定HTTP请求该往何处转发,而这些Action在接收到转发来的请求后,实现真正的商业逻辑。
Action对象要能够调用这个ActionServlet的若干方法,通过这个有力的特性,当Action对象在控制过程中将请求再向别的Action对象转发时(最初的请求是由ActionServlet获取,向Action对象转发,而Action对象还可以再转发到别的对象),我们可以将一些需要共享的数据对象通过调用一些方法放入这个Servlet相关的一些标准容器中捎带过去。
<2>模型(Model)
所谓Model就是在对用户请求的整个控制过程中,真正处理用户请求并保存处理结果的对象,在整个过程中,我们一般利用JavaBean来把一些信息保存起来以便在各个对象之间传递。
因为在框架中,Model对象是真正处理商业逻辑功能的对象,因此也就是框架中应用需求实现相关性最大的部分。在Struts的实现里,Model的具体表现形式就是ActionForm对象和与其对应的Action对象了。对用户提交表单的数据进行校验,甚至对数据进行预处理都能在ActionForm中完成。
通常的应用中,一般是一个Model对象和一个请求页面对应的关系,但也可以一个Model对象对应多个页面请求。如果struts-config.xml配置文件没有指定一个Model对象对应的Action,那么控制器将直接把(通过Model对象完成数据封装的)请求转到一个View对象。
<3>视图(View)
View对象通常来说都是指的JSP页面。Struts框架实际上并没有真正的JSP的要求规范,而是提供了大量的标签库来为开发者更简便的将JSP整合到Struts框架中。在Struts中通过标签定义方式的JSP页面能够将用户通过表单输入的数据存入一个JavaBean中,也就是我们前面提到的ActionForm Bean。通过Action类调用(自动或手动)ActionForm的校验方法来检查用户输入的数据,如果发现不合法的数据,再通过Struts的一个通用机制将错误信息返回给用户显示。
Struts框架提供了若干个标签库,它们有各自不同的用途。由于这些库还可以脱离Struts框架单独使用,这样我们也可以在其他系统中尝试使用这些标签库,它们包括:
* struts-html - 这个标签库用来创建动态的HTML页面和表单。
* struts-bean - 提供了类似甚至更强于中的功能。
* struts-logic - 用于在页面输出文本信息时的条件、循环等流程的控制。
* struts-template - 用于产生有共同风格的动态JSP页面模板。
此外,可定制标签库在Struts中还有一大用处是,通过资源文件的方式来实现应用系统的多语言特性,应用Struts的系统若想将系统中的用户交互信息换一种语言的会很简单,更换一个不同的资源文件就可以了。
<4>struts-config.xml
前面多次提到的struts-config.xml配置文件是整个框架的主心骨。web.xml文件定义了一个请求到来应向何处转发后,后面的工作就全权由struts-config.xml管理控制了。可以说struts-config.xml就是整个Struts框架的大脑”,只有它清楚所有请求与动作的映射关系,如今的应用系统,XML形式的配置文件越来越多,如果整个系统只使用一个这样的配置文件的话,那么保持整个系统的模块化和可维护性都非常的轻松。
使用配置文件来描述请求-动作的控制过程和相互关系,而不是在代码中将对象之间的调用关系写死,那么当应用系统有变动时,我们只用修改配置文件就行了,而不是再重新编译发布程序了。
Controller通过struts-config.xml文件的配置信息确定当有请求时应该调用那个对象来处理,从效率的角度出发,这些信息都是在系统启动时读入并存在内存中的。
2.5 Spring框架
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
通过Spring提供的IOC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。
Spring的特点:
<1> AOP编程的支持: 通过Spring提供的AOP (http://baike.baidu.com/view/73626.htm _blank)功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
<2> 声明式事务的支持 : 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明方式灵活地进行事务的管理,提高开发效率和质量。
<3> 方便程序的测试:可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。
<4> 方便集成各种优秀框架: Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。
<5>降低Java EE API的使用难度: Spring对很多难用的Java EE API(如JDBC,Java Mail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
2.6 Hibernate框架
Hibernate是一种Java语言下的对象关系映射解决方案。 它是一种自由、开源的软件。它用来把对象模型表示的对象映射到基于SQL 的关系模型结构中去,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。
Hibernate不仅管理Java 类到数据库表的映射(包括从Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL 和JDBC 处理数据的时间。
Hibernate对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,它既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。最具革命意义的是,Hibernate可以在应用EJB(Enterprise JavaBeans是Java应用于企业计算的框架)的J2EE架构中取代CMP,完成数据持久化的重任。
它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。
Hibernate的优点:
<1> Hibernate使用 Java 反射机制 而不是字节码增强程序来实现透明性。
<2> Hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。
<3> Hibernate支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.7 Tomcat 5.5简介
Tomcat是一个免费的开源的Servlet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总能在Tomcat中得到体现。
Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
2.8 MyEclipse 5.5.1 GA
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, JavaScript, SQL, Hibernate。
在结构上,MyEclipse的特征可以被分为7类:
1. J2EE模型
2. WEB开发工具
3. EJB开发工具
4. 应用程序服务器的连接器
5. J2EE项目部署服务
6. 数据库服务
7. MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任意一个模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
2.9 数据库简介
由于本系统采用的数据库为MySQL数据库,所以这里对MySQL数据库的相关知识进行简单介绍。
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
MySQL特点:
<1>.使用C和C++编写,并使用了多种编译器 (http://baike.baidu.com/view/487018.htm _blank)进行测试,保证源代码的可移植。
<2>.支持AIX、FreeBSD (http://baike.baidu.com/view/21459.htm _blank)、HP-UX、Linux (http://baike.baidu.com/view/1634.htm _blank)、Mac OS、Novell (http://baike.baidu.com/view/68826.htm _blank) Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
<3>.为多种编程语言提供了API。这些编程语言包括C (http://baike.baidu.com/view/10075.htm _blank)、C++、Eiffel、Java、Perl (http://baike.baidu.com/view/46614.htm _blank)、PHP (http://baike.baidu.com/view/99.htm _blank)、Python、Ruby和Tcl等。
<4>.支持多线程 (http://baike.baidu.com/view/65706.htm _blank),充分利用CPU资源。
<5>.优化的SQL (http://baike.baidu.com/view/34.htm _blank)查询算法,有效地提高查询速度。
<6>.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码 (http://baike.baidu.com/view/237708.htm _blank)如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
<7>.提供TCP/IP、ODBC和JDBC等多种数据库连接途径 。
<8>.提供用于管理、检查、优化数据库操作的管理工具。
<9>.可以处理拥有上千万条记录的大型数据库。
3 系统需求分析
3.1系统需求分析
目前,门诊一直是困扰医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院,而造成门诊质量难以提高的因素主要有两方面:
一方面集中式挂号(现在流行的分层挂号只是相对而言一个范围较小的集中式挂号),就诊人员流量不均、具有不确定性,有明显的就诊高峰和低谷(表现在整个医院不同门诊时间段及同科室的不同时间段)。高峰期病人挂号排队长,就诊时间长,医生熟人插号现象,环境拥挤混乱,医生问诊时间短、不仔细、态度差。而低谷期,医生无病人看、溜号,医院资源浪费。
另一方面专家号(特别是名专家号)难挂,出现倒号、炒号现象,严重损害病人利益,影响到医院的声誉。而采用网上预约挂号,可有效的解决这一现象,还通过有效的身份验证,杜绝倒、炒专家号的现象,提高医院门诊服务质量,取得良好的社会效益和经济效益。
为了解决这一问题,我们需要一种能够方便快捷的挂号方式来满足各方面的需求,减少排队挂号的痛苦和时间的浪费,而本课题所研究的基于JSP的医院网上挂号预约系统正好是为了解决这一问题而设计的方案,因此,本系统拥有很大的用户需求。
3.2系统可行性分析
网上预约挂号系统是一种基于互联网的新型挂号系统,是卫生信息化建设的基础项目之一。利用该预约挂号系统,用户就可以在网上预约医院的专家、专科号,而无须再受排队之苦。
而当医院开通网上挂号预约服务以后,求医者只需坐在家中,轻点儿下鼠标,就可以挂上医院专家门诊号,可以做到足不出户选医生”。网上预约正悄然改变着都市求医者的看病观念。拥有相对固定的个人医生和习惯,预约看病,将不再遥远,所以应用必将越来越广泛。
网上预约挂号系统是运用JSP语言、TOMCAT服务器和SQL数据库实现管理员对系统的管理、用户预约挂号等功能的管理和实现,包括前台模块和后台管理模块。系统采用技术框架为SSH框架(Spring + Struts + Hibernate)。
从可行性上分析,无论是需求方面,还是技术方面,完全可以对系统进行开发,这样的方案是可行的。
3.3系统功能需求
JSP医院网上预约挂号系统的总体目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的系统环境,开发一个具有开放体系结构的,易扩充的,易维护的,具有良好人机交互界面的JSP医院网上预约挂号系统,为广大患者提供一个方便快捷的网上预约挂号服务。系统具体需要实现以下功能:
<1>浏览医院信息:对医院的概况有所了解。
<2>预约查询:查询医师及其所属科室信息,以及查询医师可以被预约的时间列表。
<3>预约服务:已登录的用户按照自己的实际情况选择合适的医师和合适的就医时间进行预约服务。
<4>管理员模块:对医师以及医师所属科室进行添加、删除和修改的操作。
<5>用户信息修改:对自己的信息可以进行修改。
3.3数据流图
软件需求分析中主要采用结构化分析方法(Structured Analysis,简称SA),SA是面向数据流进行需求分析的方法,像所有的软件分析方法(如面向对象分析方法、IDEF方法等等)一样,SA也是一种建模活动,它使用简单易读的符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘满足功能要求的软件模型。
在系统中主要采用数据流图(DFD)这种半形式化的描述方式表达需求。它是一种功能模型,以图形的方式描绘数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能。它有四种基本图形符号:
● 外部实体:与系统进行交互,但系统不对其进行加工和处理的实体,用带标记的矩形表示;
● 加工:对数据进行的交换和处理,用带标记的圆圈表示;
● 数据流:在数据加工之间或数据存储和数据加工之间进行流动的数据,用带标记的箭头表示;
● 数据存储:在系统中需要存储的实体,用带标记的双实线表示。
在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输出流是该系统的输出数据;底层流图是指其加工不需要再做分解的数据流图,中间层流图表示对其上层父图的细化,它的每一步加工可能继续细化成子图。
将整个系统看成一个加工,然后找出作用于该加工的外部实体,以及相应的数据输入和输出。对于基于JSP的医院网上挂号系统”而言,整个系统就是一个加工医院网上挂号系统”。管理人员”是数据的源点,用户”是数据的终点。另外,管理人员需要添加科室信息和医师信息,说明科室信息”和医师信息”是数据流,同样,查询请求”和查询结果”也是数据流。因此得到了第0层DFD图,如图3.1所示:
图3.1 第0层DFD图
科室信息”是管理人员需要添加的一个信息,因此加入一个加工添加科室信息”,同样得到添加医师信息”这个加工。数据流查询请求”和查询结果”应该由加工查询信息”来完成。这样,添加科室信息”,添加医师信息”和查询信息”三个加工代替了第0层的医院网上挂号系统”,同时增加了科室”和医师”这两个数据存储,因此,得到了第1层DFD图,如图3.2所示:
图3.2 第1层DFD图
对第1层DFD图的一个加工查询信息”进行展开,得到了第2层DFD图,如图3.3所示:
图3.3 第2层DFD图
3.4 系统的数据字典
以下列出基于JSP的医院网上预约挂号系统”的部分数据字典:
<1> 科室信息数据字典,如图3.4所示:
名字 科室信息
描述 医院开设科室的信息
定义 科室信息=科室名称+科室简介
位置 输出到用户的浏览器
图3.4 科室信息数据字典
<1> 医师信息数据字典,如图3.5所示:
名字 医师信息
描述 医院医师的信息
定义 医师信息=医师名称+医师简介+所属科室+医师职称
位置 输出到用户浏览器
图3.5医师信息数据字典
3.5系统的性能需求
为了保证系统能够长期,安全,稳定,可靠,高效的运行,医院网上挂号系统应该满足以下的性能需求:
<1>系统处理的准确性
系统处理的准确性是系统的必要性能。由于医院网上挂号系统的医师功能和挂号预约功能对于整个系统的功能和性能举足轻重。所以在系统的开发过程中,必须采用一定的方法保证系统的准确性。
<2>系统的易用性
医院网上挂号系统是直接面对广大患者的,所以系统应该使用用户熟悉的术语和中文信息的界面。
3.6系统的数据需求
<1>数据录入和处理的准确性和实时性
系统的大部分数据的输入都是由管理员手工输入,所以系统的界面应具有排错功能,保证系统正常运行。
<2>数据的一致性和完整性
由于有关科室信息和医师信息是共享的,所以要保持文档数据的一致性,对于输入的数据则要求保持完整性。
3.7系统的运行需求
系统软件:TOMCAT 5.5,JDK 1.6
数据库管理系统:MySQL
硬件要求:Pentium III 450以上, 258M RAM,14G HD
4 系统设计
4.1系统数据库设计
在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进入数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就是数据库的设计问题,软件设计的一个核心。
4.1.1 数据库表格设计
在完成系统的ER图之后,需要将ER模型转化为关系模型,也就是说,要设计出数据库所需要的表格。在这里,选用的是关系数据库。因为关系数据库中的二维表格可以很清楚地描述数据之间的联系。
在系统中定义的表格都严格地按照范式的思想和要求完成,数据库中的所有表格都达到了三范式的要求。根据系统ER图,针对本系统的特点,在对所搜集的数据进行规范化之后,定义了如下五张表格,分别是用户信息表、科室信息表、医师信息表、时刻表和管理员信息表。通过对这五张表格的操作可以较好地完成系统设计的各项功能,五张表格之间有着不同程度的联系。
此软件文档系统采用MySQL数据库管理系统。首先在MySQL中建立一个数据库,将其命名为hospital,然后根据数据库的逻辑结构分析创建5张数据表。
● 时刻信息表:用于存放所有可以预约的时间信息,如图4.1所示。
● 管理员表: 用于存放系统的管理员信息,如图4.2所示。
● 医师信息表:用于存放所有医师的信息,包括医师姓名、医师职称、医师简介、所属科室等信息,如图4.3所示。
● 用户信息表:用于存放所有用户的信息,包括账号、密码、学号、姓名、性别、住址等基本信息,如图4.4所示。
● 科室信息表:用于存放所有科室的信息,包括科室名称,科室简介等。
五张表的表结构如下(带k的为主键):
表4.1时刻信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
time Varchar2(32) 预约时间
表4.2管理员表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
loginName Varchar2(16) 登录账号
password Varchar2(32) 登录密码
表4.3医师信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
name Varchar2(32) 医师姓名
description Varchar2(32) 医师简介
zhicheng Varchar2(32) 医师职称
表4.4用户信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
name Varchar2(32) 用户姓名
loginName Varchar2(32) 登录名称
loginpassword Varchar2(32) 登录密码
department Varchar2(32) 所在院系
schoolNumber Varchar2(32) 学号
gender Varchar2(8) 性别
address Varchar2(32) 所在公寓
phone Varchar2(32) 联系电话
email Varchar2(32) 电子邮箱
表4.5科室信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
name Varchar2(32) 科室名称
description Varchar2(32) 科室简介
4.1.2 ER图设计
ER模型直接从现实世界抽象出实体类型及实体间联系,然后用ER图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。
E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
构成E-R图的基本要素是实体型、属性和联系,其表示方法为:
· 实体型:用矩形表示,矩形框内写明实体名;
· 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;
· 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。
本系统的各实体类的属性图如下所示:
本系统的E-R图如图4.11所示:
图4.11 系统E-R图
4.2 系统设计
4.2 .1系统结构设计
系统的概要设计中最重要的就是系统的模块化。模块化是指解决一个复杂问题时自项向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。
将系统划分为多个模块是为了降低软件系统的复杂性,使系统容易修改,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
在系统的概要设计中主要采用结构化设计(Structure Design,简称SD),SD以需求分析阶段产生的数据流图DFD为基础,按一定的步骤映射成软件结构。
系统的结构图,如图4.12所示:
图4.12 系统结构图
● 用户注册:可以注册用户类型的账号。
● 删除用户:管理人员可以删除任何一个用户账号。
● 修改信息:注册的用户可以修改信息。
● 科室管理:实现对医院科室的管理,包括科室的添加、编辑和删除。
● 医师管理:实现对医院医师的管理,包括医师的添加、修改和删除等等。
● 医院概况:用户可以浏览医院的基本信息,如招聘信息,操作流程等
● 科室查询:用户可以查询现有的医院科室。
● 医师查询:用户根据已经选择的科室信心可以查询该科室下的医师信息。
● 医师预约:用户根据自己的实际情况,选择符合自己需要的医师,选择合适的就医时间。
4.2 .2系统流程设计
系统在用户登录的时候,除了对账号的合法性进行判断外,还对账号的类型判断,从而显示不同的界面给用户。
管理员可以管理用户信息,如删除账号,还可以对医院所属科室进行添加、修改、删除的操作、也可以对科室所属医师进行添加、删除和修改的操作。
普通用户可以查询系统内已有的科室信息和医师信息,根据自己情况预约。
根据这些功能的要求,系统的总体流程图如图4.13所示:
图4.13 系统总体流程图
4.3 系统子模块设计
在实现系统各个子模块的功能上,我们需要了解子模块的主要功能。是实现系统的各部分更容易,高效。下面我们将具体介绍各个功能模块。
4.3.1 管理员模块
管理员可以管理用户信息,如删除账号,还可以对医院所属科室进行添加、修改、删除的操作、也可以对科室所属医师进行添加、删除和修改的操作,其功能结构图如图4.14所示:其操作流程图如图4.15所示:
图4.14 管理员模块结构图
图4.15 管理员模块流程图
4.3.2 用户模块
用户可以管理用户信息,如删除账号,还可以对医院所属科室进行添加、修改、删除的操作、也可以对科室所属医师进行添加、删除和修改的操作,该模块的结构图如图4.16所示,其操作流程图如图4.17所示:
图4.17 用户模块流程图
5 系统实现
5.1 登录功能的实现
在登录窗口,用户可以输入账号和密码进行登录,只有合法的账号和密码才成功登录到系统。系统会根据输入的用户名判断用户的类型,从而提供相应的功能如图5.1所示:
图5.1 用户登录窗口
由于本系统中只有一个管理员而且管理员的用户名是不能修改的,所以在登陆的时候通过用户输入的用户名来判断登陆者的类型,其代码实现如下:
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String loginName = request.getParameter(userName);
String password = request.getParameter(password);
if(loginName.equals(admin)){
try {
Admin admin= this.adminService.findAdminByName(loginName, password);
request.getSession().setAttribute(currentAdmin, admin);
request.getSession().setAttribute(currentUser, null);
System.out.println(adminlogin);
return mapping.findForward(adminLogin);
} catch (UserNotFoundException e) {
return mapping.findForward(loginFail);
}
}else{
try {
System.out.println(user);
Users user = this.userService.findUserByLoginName(loginName, password);
request.getSession().setAttribute(currentUser, user);
request.getSession().setAttribute(currentAdmin, null);
System.out.println(userLogin);
return mapping.findForward(userLogin);
} catch (UserNotFoundException e) {
// TODO Auto-generated catch block
return mapping.findForward(loginFail);
}
}
}
5.2 用户注册页面的实现
如果需要注册新用户,可以使用用户注册功能,添加的信息包括用户的姓名、性别、学号、登陆名、登陆密码、所在院系等其他信息。当输入的内容不匹配的时候,系统会给出提示,让用户修改,如图5.2所示:
图5.2 用户注册页面
5.3 查询科室以及查询、预约医师的实现
通过该功能,用户可以查询该系统内所有的科室信息以及该可是下所有医师的信息,并根据用户自己的实际需要和实际情况选择合适的医师、合适的时间进行就医,如图5.3所示:
图5.3 医师查询页面
<1> 查询医师可预约时间的代码实现
public ActionForward findDoctorById (ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
Integer id = Integer.parseInt (request.getParameter (doctorId));
try {
//根据参数查询相应的医师情况
Doctor doctor = (Doctor) this.doctorService.findDoctorById (id);
List allTimes = this.timeService.findAllTimes ();
List dateTimes = new ArrayList ();
//找出医师可以预约的时间集合
if(doctor.getUsers ().size() > 0) {
for(Users u :doctor.getUsers()){
if(u.getTimes().size() > 0){
for(Time t :u.getTimes()){
for(int i = 0; i< allTimes.size();i++ ){
Time time = (Time) allTimes.get (i);
if(!t.getId().equals(time.getId())&& !dateTimes.contains(time)){
dateTimes.add (time);
}
}
}
request.getSession ().setAttribute (dateTimes, dateTimes); } else {
request.getSession ().setAttribute (dateTimes, allTimes);
}
}
} else {
request.getSession ().setAttribute (dateTimes, allTimes);
}
request.getSession ().setAttribute (currentdoctor, doctor);
} catch (UserNotFoundException e) {
//异常捕获
return mapping.findForward (error);
}
return mapping.findForward(findDoctorById);
}
<2> 用户预约功能的代码实现
public ActionForward dateTimeManager(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
try {
Integer id = Integer.parseInt (request.getParameter (timeId));
Integer uid = Integer.parseInt (request.getParameter (userId));
Integer did = Integer.parseInt (request.getParameter (doctorId));
Time time;
time = this.timeService.findTimeById (id);
//根据参数及时更新用户情况
Users user = this.userService.findUserById (uid);
Doctor doctor = this.doctorService.findDoctorById (did);
if(doctor.getUsers().contains(user)){
//如果用户已经选择该医师,则跳转异常页面
return mapping.findForward(timeerror);
}
//用户添加预约时间,并更新到数据库
user.getTimes ().add (time);
this.userService.saveOrUpdate (user);
Users us = this.userService.findUserById (user.getId());
request.getSession ().setAttribute (currentUser, us);
request.getSession ().setAttribute (timeSucess, time);
} catch (UserNotFoundException e) {
//异常捕获
return mapping.findForward (error);
}catch (NumberFormatException e1) {
//参数异常
// TODO Auto-generated catch block
return mapping.findForward (error);
} catch (Exception e) {
return mapping.findForward(timeerror);
}
return mapping.findForward(dateTimeManager);
5.4 科室添加功能的实现
该功能中主要由管理员使用,可以根据实际需要添加、修改科室信息,如图5.4所示:
图5.4 添加科室页面
5.5 医师添加功能的实现
该功能中主要由管理员使用,可以根据实际需要添加、修改医师信息,如图5.5所示:
图6.4 添加医师页面
图5.5 添加医师页面
目 录
TOC 1-3 1 绪 论 1
1.1 课题背景及研究意义 1
1.2 国内外研究现状 1
1.3本课题研究内容 2
1.3.1功能模块 2
1.3.2后台数据库 3
2 开发环境及开发技术 4
2.1 B/S模型 4
2.2 JSP技术发展背景 4
2.3 SSH框架 5
2.4 Struts框架 6
2.5 Spring框架 8
2.6 Hibernate框架 8
2.7 Tomcat 5.5简介 9
2.8 MyEclipse 5.5.1 GA 9
2.9 数据库简介 10
3 系统需求分析 11
3.1系统需求分析 11
3.2系统可行性分析 11
3.3系统功能需求 11
3.3数据流图 12
3.4 系统的数据字典 14
3.5系统的性能需求 14
3.6系统的数据需求 14
3.7系统的运行需求 15
4 系统设计 16
4.1系统数据库设计 16
4.1.1 数据库表格设计 16
4.1.2 ER图设计 18
4.2 系统设计 19
4.2 .1系统结构设计 19
4.2 .2系统流程设计 20
4.3 系统子模块设计 21
4.3.1 管理员模块 21
4.3.2 用户模块 22
5 系统实现 24
5.1 登录功能的实现 24
5.2 用户注册页面的实现 25
5.3 查询科室以及查询、预约医师的实现 26
5.4 科室添加功能的实现 28
5.5 医师添加功能的实现 29
6 总 结 30
参考文献 31
致 谢 32
1 绪 论
1.1 课题背景及研究意义
随着经济与科学技术的高速发展,信息化的进程不断加快。随着计算机性能不断提高,价格不断下降,计算机已在医院医疗,教学,科研,管理的各个方面得到越来越广泛的应用。然而,我国还有部分医院的信息处理停留在手工方式,劳动强度大且工作效率低,医师护士和管理人员的大量时间都消耗在事务性工作上,病人排队等候时间长,辗转过程多,影响了医疗的秩序。计算机化的医院信息系统已成为现代化医院运营必不可少的基础设施与技术支撑环境。门诊挂号系统是整个医院管理信息系统的第一个窗口,是病人到医院就诊要做的第一项工作。它用于收集病人的信息,协调科室医生管理,控制各科室的流量等等。
医院网上预约挂号系统是一种基于互联网的新型挂号系统,是卫生信息化建设的基础的项目之一。利用该预约挂号系统,用户就可以在网上预约医院的专家、专科号,而无须再受排队之苦。它能更好的改善就医环境,简化就医环节,节约就医时间,真正体现了以病人为中心,一切从方便患者出发,符合当今医院人性化温馨服务的理念。
目前,门诊一直是困扰医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院,而造成门诊质量难以提高的因素主要有两方面:
一方面集中式挂号(现在流行的分层挂号只是相对而言一个范围较小的集中式挂号),就诊人员流量不均、具有不确定性,有明显的就诊高峰和低谷(表现在整个医院不同门诊时间段及同科室的不同时间段)。高峰期病人挂号排队长,就诊时间长,医生熟人插号现象,环境拥挤混乱,医生问诊时间短、不仔细、态度差。而低谷期,医生无病人看、溜号,医院资源浪费。
另一方面专家号(特别是名专家号)难挂,出现倒号、炒号现象,严重损害病人利益,影响到医院的声誉。而采用网上预约挂号,可有效的解决这一现象,还通过有效的身份验证,杜绝倒、炒专家号的现象,提高医院门诊服务质量,取得良好的社会效益和经济效益。此外,病人到医院就诊前对医院的相关信息了解不多,对所要挂的专科医生的情况又不太了解,只能凭经验和印象进行选择,具有较大的盲目性。而当医院开通网上挂号预约服务以后,求医者只需坐在家中,轻点儿下鼠标,就可以挂上医院专家门诊号,可以做到足不出户选医生”。网上预约正悄然改变着都市求医者的看病观念。拥有相对固定的个人医生和习惯,预约看病,将不再遥远,所以应用必将越来越广泛。
1.2 国内外研究现状
随着互联网络的迅猛发展,Internet用户已呈几何级数增长,目前已经有很多医院投入使用网上挂号系统。据了解,预约挂号在国外颇为普及。在西方国家,病人看病都需要事先进行预约。随着预约挂号的深入推广,国内越来越多的医院也意识到预约服务在节约看病时间、分流患者、减轻医院压力上的作用。据了解,尽管存在很多困难,但全国各地的医院在尝试预约挂号的实践中还是提供了很多有益的做法。
广东省人民医院早在2004年就采取了一套相对完整的预约挂号体系,其三种预约方式,按照受欢迎程度排名依此为:电话、现场、网络,分别占到了预约挂号中 50%、40%、10%。在福建,全省范围内拨打12320海西健康热线电话,即可预约到福建省立医院等5家医院的专家号,只按市话费标准收费,不收取任何信息服务费。在北京,解放军总医院(三○一医院)于前不久专门开通了夜间门诊电话预约挂号66936619(不收预约费),可以毫不费力地约到各科室的专家,开通不久即见成效,目前已经成功分流了约1/3的患者。
此外医院还开通手机挂号功能,患者只需要发送短信就可以进行预约挂号。患者根据系统提示,输入姓名、性别、年龄、住址、付费方式、就诊卡号、预约时间、预约科室、预约项目、预约医师等内容,系统就会根据各门诊科室提供的具体情况,安排给患者合适的就诊排号位或挂号建议。在患者就诊前一天、就诊当天、就诊前一小时、就诊前5分钟,系统还会以短信的形式多次通知患者。患者如果有事无法就诊,通过发送短信,经过医师或护士同意,还可二次预约。
1.3本课题研究内容
本课题的主要研究的内容是运用JSP语言、TOMCAT服务器和SQL数据库实现管理员对系统的管理、用户预约挂号等功能的管理和实现,包括前台模块和后台管理模块。此系统采用技术框架为SSH框架(Spring + Struts + Hibernate)
1.3.1功能模块
通过对用户需求的分析,本系统的功能主要包括两块,前台用户操作及后台管理。各个功能的具体描述如下:
前台用户操作界面功能主要有:专家查询、用户信息修改、密码修改等功能设置。各个模块的功能简述如下:
<1>专家查询
通过这个功能可以浏览到每个专家的简介及所属科室,从而选择专家进行具体预约。
<2>用户信息修改
可以对自己的信息进行修改,如:姓名、密码提示问题及答案、性别、出生年月、身份证号、E-mail地址等信息。
<3>密码修改
输入一遍旧密码,两遍新密码即可成功修改密码。
<4>系统管理
管理员进行对科室信息、医师信息的添加、删除与修改操作,也可以对用户进行删除操作。
1.3.2后台数据库
使用Hibernate驱动程序访问数据库,数据库由五张表组成:管理员信息表、用户信息表、医生表、科室表以及提供预约的时间表。数据库主要记录用户信息、医生信息以及预约挂号的信息,并且预约记录也保存到数据库中。
2 开发环境及开发技术
医院网上挂号系统是以SSH框架为主要的技术框架,以JSP技术为客户端的主要显示技术,以MySQL数据库作为系统的数据存储单元。下面我们来介绍下本系统的开发环境以及开发中所用到的相关技术。
2.1 B/S模型
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者说是改进的结构。用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成三层结构,是一种全新的软件系统构造技术。
B/S模式最大特点是:用户可以通过WWW例览器去访问Internet上的文本、数据、图像、动画、视频点播和声音信息,这些信息都是由许许多多的Web服务器产生的,而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中。客户端除了WWW创览器,一般无须任何用户程序,只需从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。
B/S模型结构图如图2.1所示:
图2.1 B/S模型结构图
从上图可见 这种结构的一个重要的特点是,用户可以完全不需要安装客户端软件,当然也不需要担心任何软件升级和不兼容等任何客户端所遇到的问题。相比之下,B/S模型的优点显而易见,更适合这个网站的构建,有利于网站的维护和扩充。
2.2 JSP技术发展背景
Web技术的迅猛发展正推动Internet上信息服务类的进步。WWW服务的基础是HTML语言。这个系统模块中用到的JSP技术是在HTML语言的基础上使用脚本语言对网页的对象模型进行编程。JSP全称JavaServerPages,它是由Sun Microsystems公司提出、许多公司参与建立的一种动态网页技术标准。它诞生在 1999年6月1日。目前国内外已经在广泛地使用JSP。随着JAVA语言得到普及,越来越多的公司开始关注JSP的前景。
传统的动态网页制作包括CGI、ASP、JSP三种,而JSP具有明显的优势。使用CGI-BINJ接口是一个最早的动态WEB页面问题的解决方案。缺点,CGI程序必须从CGI接口读入一长串的字符串,再从字符串中取得所需要的数据并加以处理。过程十分繁琐。另一个缺点,除了Perl是解释语言外,其他都是编译式的语言。每次修改后,都必须重新编译一次,这给开发人员带来麻烦,增加了工作量。ASP和JSP都能取代CGI使网站建设和发展变得简单快捷。尽管JSP技术和ASP在许多方面都有相似的,但仍然存在很多不同之处,其中最本质上的区别在于:两者是来源于不同的技术规范组织,其实现的基础,WEB服务器平台要求不相同。
<1> 作为Java平台的一部分,JSP拥有Java编程语言一次编写,各处运行”的特点。一次写入,之后,可以运行在任何具有符合Java TM语法结构的环境。取代过去单一平台开发。ASP主要工作环境是微软的IIS应用程序结构,又因Activex对象具有平台特性,所以ASP技术不能很容易地实现在跨平台的WEB服务器的工作。
<2> 从开发人员的角度来看其区别在于:ASP仅支持组件对象模型COM,而JSP技术提供的组件都是基于JavaBeans TM技术或JSP标签库。
<3> JSP标签可扩充性。JSP技术能够使用开发者扩展JSP标签,JSP开发者能定制标签库,减少对脚本语言的依赖。
<4> 生成可重用的组件。JSP基于组件的技术方法加速了总体开发过程。 JSP组件(JavaBeans,或定制的JSP标签)是跨平台可重用的。JavaBeans组件可以访问数据库,并能以分布式系统模式工作于UNIX和WINDOWS平台。
<5> 易于维护性。 基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理。JSP突出的组件技术使修改内容而不影响逻辑或修改逻辑而不影响内容变得很容易实现。
如上的比较不难看出,JSP技术编写的程序运用要更加灵活,可扩展性更强。
2.3 SSH框架
即为Struts + Spring + Hibernate技术,典型的MVC三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。
表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。
中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。
Web层,就是MVC模式里面的C”(Controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。
Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。
DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。
PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。
Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO层无缝整合,其数据服务层用来存放数据。
2.4 Struts框架
Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:
<1>模型(Model),本质上来说在Struts中Model是一个Action类,开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。
<2>视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。
<3>控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。
<4>一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBeans的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。
struts框架的各个部分以及相互之间的运作:
在使用Struts之前,咱们必先设置好JSP服务器,以便让服务器在用户请求时,知道该如何将指定后缀的请求转到相应的Controller-Struts ActionServlet处理,当然,这些配置信息都一般在服务器启动时通过web.xml文件读入的。我们可以在web.xml定义多个Controller,为每一个应用定义一个Controller。
<1>控制器(Controller)
Controller是这个框架中扮演交通警察”的角色,当客户端与服务器有交互动作时,都由她来控制。Controller将HTTP请求封包并转发到框架中相应的对象,这些对象可能是一个JSP页面或一个Action。
Controller在web.xml中设置为org.apache.struts.action.ActionServlet的一个实例,在一个完整的控制过程中,也就是处理一个HTTP请求时,在控制过程之初,这个Servlet会从一个配置文件struts-config.xml中获取请求与控制动作向对应的配置信息, Controller通过这些配置信息来决定HTTP请求该往何处转发,而这些Action在接收到转发来的请求后,实现真正的商业逻辑。
Action对象要能够调用这个ActionServlet的若干方法,通过这个有力的特性,当Action对象在控制过程中将请求再向别的Action对象转发时(最初的请求是由ActionServlet获取,向Action对象转发,而Action对象还可以再转发到别的对象),我们可以将一些需要共享的数据对象通过调用一些方法放入这个Servlet相关的一些标准容器中捎带过去。
<2>模型(Model)
所谓Model就是在对用户请求的整个控制过程中,真正处理用户请求并保存处理结果的对象,在整个过程中,我们一般利用JavaBean来把一些信息保存起来以便在各个对象之间传递。
因为在框架中,Model对象是真正处理商业逻辑功能的对象,因此也就是框架中应用需求实现相关性最大的部分。在Struts的实现里,Model的具体表现形式就是ActionForm对象和与其对应的Action对象了。对用户提交表单的数据进行校验,甚至对数据进行预处理都能在ActionForm中完成。
通常的应用中,一般是一个Model对象和一个请求页面对应的关系,但也可以一个Model对象对应多个页面请求。如果struts-config.xml配置文件没有指定一个Model对象对应的Action,那么控制器将直接把(通过Model对象完成数据封装的)请求转到一个View对象。
<3>视图(View)
View对象通常来说都是指的JSP页面。Struts框架实际上并没有真正的JSP的要求规范,而是提供了大量的标签库来为开发者更简便的将JSP整合到Struts框架中。在Struts中通过标签定义方式的JSP页面能够将用户通过表单输入的数据存入一个JavaBean中,也就是我们前面提到的ActionForm Bean。通过Action类调用(自动或手动)ActionForm的校验方法来检查用户输入的数据,如果发现不合法的数据,再通过Struts的一个通用机制将错误信息返回给用户显示。
Struts框架提供了若干个标签库,它们有各自不同的用途。由于这些库还可以脱离Struts框架单独使用,这样我们也可以在其他系统中尝试使用这些标签库,它们包括:
* struts-html - 这个标签库用来创建动态的HTML页面和表单。
* struts-bean - 提供了类似甚至更强于中的功能。
* struts-logic - 用于在页面输出文本信息时的条件、循环等流程的控制。
* struts-template - 用于产生有共同风格的动态JSP页面模板。
此外,可定制标签库在Struts中还有一大用处是,通过资源文件的方式来实现应用系统的多语言特性,应用Struts的系统若想将系统中的用户交互信息换一种语言的会很简单,更换一个不同的资源文件就可以了。
<4>struts-config.xml
前面多次提到的struts-config.xml配置文件是整个框架的主心骨。web.xml文件定义了一个请求到来应向何处转发后,后面的工作就全权由struts-config.xml管理控制了。可以说struts-config.xml就是整个Struts框架的大脑”,只有它清楚所有请求与动作的映射关系,如今的应用系统,XML形式的配置文件越来越多,如果整个系统只使用一个这样的配置文件的话,那么保持整个系统的模块化和可维护性都非常的轻松。
使用配置文件来描述请求-动作的控制过程和相互关系,而不是在代码中将对象之间的调用关系写死,那么当应用系统有变动时,我们只用修改配置文件就行了,而不是再重新编译发布程序了。
Controller通过struts-config.xml文件的配置信息确定当有请求时应该调用那个对象来处理,从效率的角度出发,这些信息都是在系统启动时读入并存在内存中的。
2.5 Spring框架
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
通过Spring提供的IOC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。
Spring的特点:
<1> AOP编程的支持: 通过Spring提供的AOP (http://baike.baidu.com/view/73626.htm _blank)功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
<2> 声明式事务的支持 : 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明方式灵活地进行事务的管理,提高开发效率和质量。
<3> 方便程序的测试:可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。
<4> 方便集成各种优秀框架: Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。
<5>降低Java EE API的使用难度: Spring对很多难用的Java EE API(如JDBC,Java Mail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
2.6 Hibernate框架
Hibernate是一种Java语言下的对象关系映射解决方案。 它是一种自由、开源的软件。它用来把对象模型表示的对象映射到基于SQL 的关系模型结构中去,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。
Hibernate不仅管理Java 类到数据库表的映射(包括从Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL 和JDBC 处理数据的时间。
Hibernate对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,它既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。最具革命意义的是,Hibernate可以在应用EJB(Enterprise JavaBeans是Java应用于企业计算的框架)的J2EE架构中取代CMP,完成数据持久化的重任。
它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。
Hibernate的优点:
<1> Hibernate使用 Java 反射机制 而不是字节码增强程序来实现透明性。
<2> Hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。
<3> Hibernate支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.7 Tomcat 5.5简介
Tomcat是一个免费的开源的Servlet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总能在Tomcat中得到体现。
Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
2.8 MyEclipse 5.5.1 GA
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, JavaScript, SQL, Hibernate。
在结构上,MyEclipse的特征可以被分为7类:
1. J2EE模型
2. WEB开发工具
3. EJB开发工具
4. 应用程序服务器的连接器
5. J2EE项目部署服务
6. 数据库服务
7. MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任意一个模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
2.9 数据库简介
由于本系统采用的数据库为MySQL数据库,所以这里对MySQL数据库的相关知识进行简单介绍。
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
MySQL特点:
<1>.使用C和C++编写,并使用了多种编译器 (http://baike.baidu.com/view/487018.htm _blank)进行测试,保证源代码的可移植。
<2>.支持AIX、FreeBSD (http://baike.baidu.com/view/21459.htm _blank)、HP-UX、Linux (http://baike.baidu.com/view/1634.htm _blank)、Mac OS、Novell (http://baike.baidu.com/view/68826.htm _blank) Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
<3>.为多种编程语言提供了API。这些编程语言包括C (http://baike.baidu.com/view/10075.htm _blank)、C++、Eiffel、Java、Perl (http://baike.baidu.com/view/46614.htm _blank)、PHP (http://baike.baidu.com/view/99.htm _blank)、Python、Ruby和Tcl等。
<4>.支持多线程 (http://baike.baidu.com/view/65706.htm _blank),充分利用CPU资源。
<5>.优化的SQL (http://baike.baidu.com/view/34.htm _blank)查询算法,有效地提高查询速度。
<6>.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码 (http://baike.baidu.com/view/237708.htm _blank)如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
<7>.提供TCP/IP、ODBC和JDBC等多种数据库连接途径 。
<8>.提供用于管理、检查、优化数据库操作的管理工具。
<9>.可以处理拥有上千万条记录的大型数据库。
3 系统需求分析
3.1系统需求分析
目前,门诊一直是困扰医院提高服务质量的一个复杂环节,特别是医疗水平高、门诊量大的医院,而造成门诊质量难以提高的因素主要有两方面:
一方面集中式挂号(现在流行的分层挂号只是相对而言一个范围较小的集中式挂号),就诊人员流量不均、具有不确定性,有明显的就诊高峰和低谷(表现在整个医院不同门诊时间段及同科室的不同时间段)。高峰期病人挂号排队长,就诊时间长,医生熟人插号现象,环境拥挤混乱,医生问诊时间短、不仔细、态度差。而低谷期,医生无病人看、溜号,医院资源浪费。
另一方面专家号(特别是名专家号)难挂,出现倒号、炒号现象,严重损害病人利益,影响到医院的声誉。而采用网上预约挂号,可有效的解决这一现象,还通过有效的身份验证,杜绝倒、炒专家号的现象,提高医院门诊服务质量,取得良好的社会效益和经济效益。
为了解决这一问题,我们需要一种能够方便快捷的挂号方式来满足各方面的需求,减少排队挂号的痛苦和时间的浪费,而本课题所研究的基于JSP的医院网上挂号预约系统正好是为了解决这一问题而设计的方案,因此,本系统拥有很大的用户需求。
3.2系统可行性分析
网上预约挂号系统是一种基于互联网的新型挂号系统,是卫生信息化建设的基础项目之一。利用该预约挂号系统,用户就可以在网上预约医院的专家、专科号,而无须再受排队之苦。
而当医院开通网上挂号预约服务以后,求医者只需坐在家中,轻点儿下鼠标,就可以挂上医院专家门诊号,可以做到足不出户选医生”。网上预约正悄然改变着都市求医者的看病观念。拥有相对固定的个人医生和习惯,预约看病,将不再遥远,所以应用必将越来越广泛。
网上预约挂号系统是运用JSP语言、TOMCAT服务器和SQL数据库实现管理员对系统的管理、用户预约挂号等功能的管理和实现,包括前台模块和后台管理模块。系统采用技术框架为SSH框架(Spring + Struts + Hibernate)。
从可行性上分析,无论是需求方面,还是技术方面,完全可以对系统进行开发,这样的方案是可行的。
3.3系统功能需求
JSP医院网上预约挂号系统的总体目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的系统环境,开发一个具有开放体系结构的,易扩充的,易维护的,具有良好人机交互界面的JSP医院网上预约挂号系统,为广大患者提供一个方便快捷的网上预约挂号服务。系统具体需要实现以下功能:
<1>浏览医院信息:对医院的概况有所了解。
<2>预约查询:查询医师及其所属科室信息,以及查询医师可以被预约的时间列表。
<3>预约服务:已登录的用户按照自己的实际情况选择合适的医师和合适的就医时间进行预约服务。
<4>管理员模块:对医师以及医师所属科室进行添加、删除和修改的操作。
<5>用户信息修改:对自己的信息可以进行修改。
3.3数据流图
软件需求分析中主要采用结构化分析方法(Structured Analysis,简称SA),SA是面向数据流进行需求分析的方法,像所有的软件分析方法(如面向对象分析方法、IDEF方法等等)一样,SA也是一种建模活动,它使用简单易读的符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘满足功能要求的软件模型。
在系统中主要采用数据流图(DFD)这种半形式化的描述方式表达需求。它是一种功能模型,以图形的方式描绘数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能。它有四种基本图形符号:
● 外部实体:与系统进行交互,但系统不对其进行加工和处理的实体,用带标记的矩形表示;
● 加工:对数据进行的交换和处理,用带标记的圆圈表示;
● 数据流:在数据加工之间或数据存储和数据加工之间进行流动的数据,用带标记的箭头表示;
● 数据存储:在系统中需要存储的实体,用带标记的双实线表示。
在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输出流是该系统的输出数据;底层流图是指其加工不需要再做分解的数据流图,中间层流图表示对其上层父图的细化,它的每一步加工可能继续细化成子图。
将整个系统看成一个加工,然后找出作用于该加工的外部实体,以及相应的数据输入和输出。对于基于JSP的医院网上挂号系统”而言,整个系统就是一个加工医院网上挂号系统”。管理人员”是数据的源点,用户”是数据的终点。另外,管理人员需要添加科室信息和医师信息,说明科室信息”和医师信息”是数据流,同样,查询请求”和查询结果”也是数据流。因此得到了第0层DFD图,如图3.1所示:
图3.1 第0层DFD图
科室信息”是管理人员需要添加的一个信息,因此加入一个加工添加科室信息”,同样得到添加医师信息”这个加工。数据流查询请求”和查询结果”应该由加工查询信息”来完成。这样,添加科室信息”,添加医师信息”和查询信息”三个加工代替了第0层的医院网上挂号系统”,同时增加了科室”和医师”这两个数据存储,因此,得到了第1层DFD图,如图3.2所示:
图3.2 第1层DFD图
对第1层DFD图的一个加工查询信息”进行展开,得到了第2层DFD图,如图3.3所示:
图3.3 第2层DFD图
3.4 系统的数据字典
以下列出基于JSP的医院网上预约挂号系统”的部分数据字典:
<1> 科室信息数据字典,如图3.4所示:
名字 科室信息
描述 医院开设科室的信息
定义 科室信息=科室名称+科室简介
位置 输出到用户的浏览器
图3.4 科室信息数据字典
<1> 医师信息数据字典,如图3.5所示:
名字 医师信息
描述 医院医师的信息
定义 医师信息=医师名称+医师简介+所属科室+医师职称
位置 输出到用户浏览器
图3.5医师信息数据字典
3.5系统的性能需求
为了保证系统能够长期,安全,稳定,可靠,高效的运行,医院网上挂号系统应该满足以下的性能需求:
<1>系统处理的准确性
系统处理的准确性是系统的必要性能。由于医院网上挂号系统的医师功能和挂号预约功能对于整个系统的功能和性能举足轻重。所以在系统的开发过程中,必须采用一定的方法保证系统的准确性。
<2>系统的易用性
医院网上挂号系统是直接面对广大患者的,所以系统应该使用用户熟悉的术语和中文信息的界面。
3.6系统的数据需求
<1>数据录入和处理的准确性和实时性
系统的大部分数据的输入都是由管理员手工输入,所以系统的界面应具有排错功能,保证系统正常运行。
<2>数据的一致性和完整性
由于有关科室信息和医师信息是共享的,所以要保持文档数据的一致性,对于输入的数据则要求保持完整性。
3.7系统的运行需求
系统软件:TOMCAT 5.5,JDK 1.6
数据库管理系统:MySQL
硬件要求:Pentium III 450以上, 258M RAM,14G HD
4 系统设计
4.1系统数据库设计
在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进入数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就是数据库的设计问题,软件设计的一个核心。
4.1.1 数据库表格设计
在完成系统的ER图之后,需要将ER模型转化为关系模型,也就是说,要设计出数据库所需要的表格。在这里,选用的是关系数据库。因为关系数据库中的二维表格可以很清楚地描述数据之间的联系。
在系统中定义的表格都严格地按照范式的思想和要求完成,数据库中的所有表格都达到了三范式的要求。根据系统ER图,针对本系统的特点,在对所搜集的数据进行规范化之后,定义了如下五张表格,分别是用户信息表、科室信息表、医师信息表、时刻表和管理员信息表。通过对这五张表格的操作可以较好地完成系统设计的各项功能,五张表格之间有着不同程度的联系。
此软件文档系统采用MySQL数据库管理系统。首先在MySQL中建立一个数据库,将其命名为hospital,然后根据数据库的逻辑结构分析创建5张数据表。
● 时刻信息表:用于存放所有可以预约的时间信息,如图4.1所示。
● 管理员表: 用于存放系统的管理员信息,如图4.2所示。
● 医师信息表:用于存放所有医师的信息,包括医师姓名、医师职称、医师简介、所属科室等信息,如图4.3所示。
● 用户信息表:用于存放所有用户的信息,包括账号、密码、学号、姓名、性别、住址等基本信息,如图4.4所示。
● 科室信息表:用于存放所有科室的信息,包括科室名称,科室简介等。
五张表的表结构如下(带k的为主键):
表4.1时刻信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
time Varchar2(32) 预约时间
表4.2管理员表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
loginName Varchar2(16) 登录账号
password Varchar2(32) 登录密码
表4.3医师信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
name Varchar2(32) 医师姓名
description Varchar2(32) 医师简介
zhicheng Varchar2(32) 医师职称
表4.4用户信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
name Varchar2(32) 用户姓名
loginName Varchar2(32) 登录名称
loginpassword Varchar2(32) 登录密码
department Varchar2(32) 所在院系
schoolNumber Varchar2(32) 学号
gender Varchar2(8) 性别
address Varchar2(32) 所在公寓
phone Varchar2(32) 联系电话
email Varchar2(32) 电子邮箱
表4.5科室信息表结构
字段名称 字段类型 说明
Id(k) int(16) ID序列号
name Varchar2(32) 科室名称
description Varchar2(32) 科室简介
4.1.2 ER图设计
ER模型直接从现实世界抽象出实体类型及实体间联系,然后用ER图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。
E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
构成E-R图的基本要素是实体型、属性和联系,其表示方法为:
· 实体型:用矩形表示,矩形框内写明实体名;
· 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;
· 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。
本系统的各实体类的属性图如下所示:
本系统的E-R图如图4.11所示:
图4.11 系统E-R图
4.2 系统设计
4.2 .1系统结构设计
系统的概要设计中最重要的就是系统的模块化。模块化是指解决一个复杂问题时自项向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。
将系统划分为多个模块是为了降低软件系统的复杂性,使系统容易修改,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
在系统的概要设计中主要采用结构化设计(Structure Design,简称SD),SD以需求分析阶段产生的数据流图DFD为基础,按一定的步骤映射成软件结构。
系统的结构图,如图4.12所示:
图4.12 系统结构图
● 用户注册:可以注册用户类型的账号。
● 删除用户:管理人员可以删除任何一个用户账号。
● 修改信息:注册的用户可以修改信息。
● 科室管理:实现对医院科室的管理,包括科室的添加、编辑和删除。
● 医师管理:实现对医院医师的管理,包括医师的添加、修改和删除等等。
● 医院概况:用户可以浏览医院的基本信息,如招聘信息,操作流程等
● 科室查询:用户可以查询现有的医院科室。
● 医师查询:用户根据已经选择的科室信心可以查询该科室下的医师信息。
● 医师预约:用户根据自己的实际情况,选择符合自己需要的医师,选择合适的就医时间。
4.2 .2系统流程设计
系统在用户登录的时候,除了对账号的合法性进行判断外,还对账号的类型判断,从而显示不同的界面给用户。
管理员可以管理用户信息,如删除账号,还可以对医院所属科室进行添加、修改、删除的操作、也可以对科室所属医师进行添加、删除和修改的操作。
普通用户可以查询系统内已有的科室信息和医师信息,根据自己情况预约。
根据这些功能的要求,系统的总体流程图如图4.13所示:
图4.13 系统总体流程图
4.3 系统子模块设计
在实现系统各个子模块的功能上,我们需要了解子模块的主要功能。是实现系统的各部分更容易,高效。下面我们将具体介绍各个功能模块。
4.3.1 管理员模块
管理员可以管理用户信息,如删除账号,还可以对医院所属科室进行添加、修改、删除的操作、也可以对科室所属医师进行添加、删除和修改的操作,其功能结构图如图4.14所示:其操作流程图如图4.15所示:
图4.14 管理员模块结构图
图4.15 管理员模块流程图
4.3.2 用户模块
用户可以管理用户信息,如删除账号,还可以对医院所属科室进行添加、修改、删除的操作、也可以对科室所属医师进行添加、删除和修改的操作,该模块的结构图如图4.16所示,其操作流程图如图4.17所示:
图4.17 用户模块流程图
5 系统实现
5.1 登录功能的实现
在登录窗口,用户可以输入账号和密码进行登录,只有合法的账号和密码才成功登录到系统。系统会根据输入的用户名判断用户的类型,从而提供相应的功能如图5.1所示:
图5.1 用户登录窗口
由于本系统中只有一个管理员而且管理员的用户名是不能修改的,所以在登陆的时候通过用户输入的用户名来判断登陆者的类型,其代码实现如下:
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String loginName = request.getParameter(userName);
String password = request.getParameter(password);
if(loginName.equals(admin)){
try {
Admin admin= this.adminService.findAdminByName(loginName, password);
request.getSession().setAttribute(currentAdmin, admin);
request.getSession().setAttribute(currentUser, null);
System.out.println(adminlogin);
return mapping.findForward(adminLogin);
} catch (UserNotFoundException e) {
return mapping.findForward(loginFail);
}
}else{
try {
System.out.println(user);
Users user = this.userService.findUserByLoginName(loginName, password);
request.getSession().setAttribute(currentUser, user);
request.getSession().setAttribute(currentAdmin, null);
System.out.println(userLogin);
return mapping.findForward(userLogin);
} catch (UserNotFoundException e) {
// TODO Auto-generated catch block
return mapping.findForward(loginFail);
}
}
}
5.2 用户注册页面的实现
如果需要注册新用户,可以使用用户注册功能,添加的信息包括用户的姓名、性别、学号、登陆名、登陆密码、所在院系等其他信息。当输入的内容不匹配的时候,系统会给出提示,让用户修改,如图5.2所示:
图5.2 用户注册页面
5.3 查询科室以及查询、预约医师的实现
通过该功能,用户可以查询该系统内所有的科室信息以及该可是下所有医师的信息,并根据用户自己的实际需要和实际情况选择合适的医师、合适的时间进行就医,如图5.3所示:
图5.3 医师查询页面
<1> 查询医师可预约时间的代码实现
public ActionForward findDoctorById (ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
Integer id = Integer.parseInt (request.getParameter (doctorId));
try {
//根据参数查询相应的医师情况
Doctor doctor = (Doctor) this.doctorService.findDoctorById (id);
List allTimes = this.timeService.findAllTimes ();
List dateTimes = new ArrayList ();
//找出医师可以预约的时间集合
if(doctor.getUsers ().size() > 0) {
for(Users u :doctor.getUsers()){
if(u.getTimes().size() > 0){
for(Time t :u.getTimes()){
for(int i = 0; i< allTimes.size();i++ ){
Time time = (Time) allTimes.get (i);
if(!t.getId().equals(time.getId())&& !dateTimes.contains(time)){
dateTimes.add (time);
}
}
}
request.getSession ().setAttribute (dateTimes, dateTimes); } else {
request.getSession ().setAttribute (dateTimes, allTimes);
}
}
} else {
request.getSession ().setAttribute (dateTimes, allTimes);
}
request.getSession ().setAttribute (currentdoctor, doctor);
} catch (UserNotFoundException e) {
//异常捕获
return mapping.findForward (error);
}
return mapping.findForward(findDoctorById);
}
<2> 用户预约功能的代码实现
public ActionForward dateTimeManager(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
try {
Integer id = Integer.parseInt (request.getParameter (timeId));
Integer uid = Integer.parseInt (request.getParameter (userId));
Integer did = Integer.parseInt (request.getParameter (doctorId));
Time time;
time = this.timeService.findTimeById (id);
//根据参数及时更新用户情况
Users user = this.userService.findUserById (uid);
Doctor doctor = this.doctorService.findDoctorById (did);
if(doctor.getUsers().contains(user)){
//如果用户已经选择该医师,则跳转异常页面
return mapping.findForward(timeerror);
}
//用户添加预约时间,并更新到数据库
user.getTimes ().add (time);
this.userService.saveOrUpdate (user);
Users us = this.userService.findUserById (user.getId());
request.getSession ().setAttribute (currentUser, us);
request.getSession ().setAttribute (timeSucess, time);
} catch (UserNotFoundException e) {
//异常捕获
return mapping.findForward (error);
}catch (NumberFormatException e1) {
//参数异常
// TODO Auto-generated catch block
return mapping.findForward (error);
} catch (Exception e) {
return mapping.findForward(timeerror);
}
return mapping.findForward(dateTimeManager);
5.4 科室添加功能的实现
该功能中主要由管理员使用,可以根据实际需要添加、修改科室信息,如图5.4所示:
图5.4 添加科室页面
5.5 医师添加功能的实现
该功能中主要由管理员使用,可以根据实际需要添加、修改医师信息,如图5.5所示:
图6.4 添加医师页面
图5.5 添加医师页面
Web服务器
Datebase服务器
JSP页面
用户基本操作
用户
创建基本信息
0
医院网上挂号系统
管理员员
用 户
科室信息
医师信息
查询结果
查询请求
1添加科
室信息
1查 询
信 息
1添加医
师信息
科 室
医 师
管 理 员
用 户
查询结果
医师信息
查询请求
科室信息
2合法性检 查
2查 询
信 息
用 户
科室
医师
条件合法
查询请求
查询条件
查询条件
2信息输出列表
查询结果
科 室 信 息
科 室 名 称
科 室 概 况
图4.6 科室信息属性图
管 理 员
账号名
密 码
图4.7 管理员信息属性图
用 户
真实姓名
登 录 名
登录密码
所在院系
性 别
联系电话
所在公寓
电子邮件
学号
图4.8用户信息属性图
图4.9 医师信息属性图
医师信息
医师职称
医师名称
医师简介
时 间 表
时 刻
图4.10 时间属性图
用户管理
科室管理
医师管理
修改信息
医院
概况
科室查询
用户注册
管理人员
用 户
医院挂号预约系统
删除用户
添加科室
删除科室
添加医师
修改医师
删除医师
医师查询
医师预约
修改科室
管理员模块
用户管理
医师管理
科室管理
用户管理
添加医师
修改医师
删除医师
添加科室
修改科室
删除科室
医师查询
医师预约
用户注册
科室查询
医院概况
用 户
修改信息
图4.16 用户模块结构图
Web服务器
Datebase服务器
JSP页面
用户基本操作
用户
创建基本信息
0
医院网上挂号系统
管理员员
用 户
科室信息
医师信息
查询结果
查询请求
1添加科
室信息
1查 询
信 息
1添加医
师信息
科 室
医 师
管 理 员
用 户
查询结果
医师信息
查询请求
科室信息
2合法性检 查
2查 询
信 息
用 户
科室
医师
条件合法
查询请求
查询条件
查询条件
2信息输出列表
查询结果
科 室 信 息
科 室 名 称
科 室 概 况
图4.6 科室信息属性图
管 理 员
账号名
密 码
图4.7 管理员信息属性图
用 户
真实姓名
登 录 名
登录密码
所在院系
性 别
联系电话
所在公寓
电子邮件
学号
图4.8用户信息属性图
图4.9 医师信息属性图
医师信息
医师职称
医师名称
医师简介
时 间 表
时 刻
图4.10 时间属性图
用户管理
科室管理
医师管理
修改信息
医院
概况
科室查询
用户注册
管理人员
用 户
医院挂号预约系统
删除用户
添加科室
删除科室
添加医师
修改医师
删除医师
医师查询
医师预约
修改科室
管理员模块
用户管理
医师管理
科室管理
用户管理
添加医师
修改医师
删除医师
添加科室
修改科室
删除科室
医师查询
医师预约
用户注册
科室查询
医院概况
用 户
修改信息
图4.16 用户模块结构图
II
获取项目源文件,联系Q:1225467431,可指导其它毕设,课设