




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要随着时代的发展以及人口的增长,人们的生活节奏也变得越来越紧凑,而挂号看病难成了在当今社会最典型的问题。当人口的基数情况下,无论是对患者还是对医院方而言,挂号看病都成了一个极为困扰的问题。这是由于传统的门诊挂号方式不适用于处理数目庞大的患者。为了解决这一问题,我设计了医院预约挂号系统。该系统是以JAVAWEB的技术利用MVC框架结合Servlet与MySql数据库来编写一个可以为患者提供线上进行预约的系统。患者可以通过浏览器访问预约挂号系统来进行网上预约挂号,也可以对预约信息进行取消处理,而不是需要到医院现场进行排队挂号,以此减少整个看病流程。同时,该系统也为医院方提供了两种类型用户,即医生用户和管理员用户,两种用户皆可以于浏览器访问使用该系统。医生用户可对自身所属部门的预约信息进行接受、拒绝、取消以及确认完成处理。管理员用户可对整个系统中的用户信息、部门信息以及预约信息进行增删改查的操作。该系统能在一定程度上减轻医院人力资源的损耗,提高医院的医疗效率,缓解当今社会紧张的医患关系。关键字:JAVAWEB、MVC框架、Servlet、MySql数据库DesignandimplementationofHospitalReservationSystemAbstractWiththedevelopmentofthetimesandthegrowthofthepopulation,people'sliferhythmhasbecomemoreandmorecompact,andthedifficultyofregisteringadoctorhasbecomethemosttypicalproblemintoday'ssociety.Whenthebaseofthepopulation,whetheritisforpatientsorhospitals,registeredmedicaltreatmenthasbecomeaverytroublesomeproblem.Thisisbecausethetraditionaloutpatientregistrationmethodisnotsuitableforhandlingalargenumberofpatients.Tosolvethisproblem,Idesignedahospitalappointmentregistrationsystem.ThesystemisbasedonJAVAWEBtechnologyusingMVCframeworkcombinedwithservletandmysqldatabasetowriteasystemthatcanprovideonlineappointmentsforpatients.Patientscanaccesstheappointmentregistrationsystemthroughabrowsertoperformonlineappointmentregistration,andcanalsocancelthereservationinformation,insteadofgoingtothehospitalsitetoqueueupandregister,therebyreducingtheentiremedicaltreatmentprocess.Atthesametime,thesystemalsoprovidestwotypesofusersforthehospital,namelydoctorusersandadministratorusers.Bothuserscanaccessandusethesysteminthebrowser.Doctoruserscanaccept,reject,cancel,andconfirmthecompletionoftheappointmentinformationoftheirowndepartment.Administratoruserscanadd,delete,modify,andcheckuserinformation,departmentinformation,andreservationinformationintheentiresystem.Thesystemcanreducethelossofhumanresourcesinthehospitaltoacertainextent,improvethemedicalefficiencyofthehospital,andeasethetensionbetweendoctorsandpatientsintoday'ssociety.Keywords:JAVAWEB,MVCFramework,Servlet,MySqlDatabase 目录TOC\o"1-3"\h\u1前言 前言1.1现状传统的医院门诊挂号是实时挂号、实时就诊的门诊模式。但是这种就诊的模式给患者带来诸多不便。人民反映最突出的就是“三长一短”的问题,也就是挂号时间长、候诊时间长、缴费时间长以及看病时间短。据网上统计,患者在门诊有六成以上的时间都是用来等候的,真正就诊的时间却是非常地短。门诊挂号厅的建立,需要投入大笔的费用以及巨大的地方空间,同时还需要人员管理,这是耗费不少的资源。此外,如若遇上高峰期时,挂号大厅人满为患很可能导致患者病菌交叉感染,这样对于挂号厅的建设管理也是有一定的压力和难度。其次,患者方面也存在着行动不便的情况,他们不仅要到挂号厅排队等号,而且还不一定能排上号看上病,这些患者不得己立刻转移到其他医院再挂号以及等待。1.2目的本次的医院预约挂号系统的设计以及实现,主要是为了解决患者们看病是减少进行排队挂号等不必要的时间问题,也是为了减少医院方关于排队挂号管理的人力损耗以及医院空间的占用,减轻患者到医院看病的流程臃肿,提高医院在人力、物力以及空间时间等多种因素的利用效率,也是为了缓解当前社会的部分压力,促进社会向更先进、更快捷、更方便的方向进行发展。1.3意义如今计算机和网络技术发展趋势良好,网络的速度,稳定性和安全性不断地在改善,计算机和网络设备的性价比也不断地在提高,群众们都普遍认可了这种信息传递媒介的便利性以及有效性。因此,通过网络实现预约挂号的想法也应运而生,这对于加强门诊挂号的便捷性、安全性、高效性和提高节省资源效益方面都有着重大的意义。这是对现行的实时挂号、实时就诊门诊模式的补充和完事,是为了缓解群众看病问题的有益尝试,也是为了方便患者到医院看病,免去需要到医院现场排队挂号的时间,缩减看病的流程。同时,也为医院减少不必要的人力资源的浪费。2技术以及开发环境简介2.1JAVA简介Java是一门面向对象编程语言,在吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。2.2HTML简介即超文本标记语言,标准通用标记语言下的一个应用。“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。超文本标记语言的结构包括“头”部分(Head)、和“主体”部分(Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。2.3MYSQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统(RDBMS)之一。2.4CSS简介CSS英文全称为CascadingStyleSheets,即层叠样式表,是一种用来表现HTML或XML等档样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。2.5JSP简介JSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,其是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML档(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP档,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。2.6JavaWeb简介JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有javaapplet不过现在使用的很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。2.7JAVAEE开发环境简介JavaEE全称JavaPlatform,EnterpriseEdition,是sun公司推出的企业级应用程序版本。这个版本以前称为J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web3.0应用程序。3需求分析3.1系统设计目标分析患者角度:于患者而言,传统的医院门诊方式在目前人口众多的环境中极为地不适宜。患者如果到医院进行排队看病的话,绝大多数的患者有七八成的时间将花费在排队这一节点。患者再医院内排队主要是排队挂号、排队看病,以及排队拿药物,后两者的所需要花费的时间,由于医院的人力以及物力的限制,目前而言并无更好的缓解方法,但是排队挂号却可以通过网上预约进行消减这方面所浪费的时间。假设一名患者距离医院有着很长的一段距离,那么其可以先通过网上预约挂号来预先进行预约从而,当抵达医院的时候恰好可以进行看病,这样就可以减轻患者在看病过程中所消耗的心力,也能防止因不同患者之间的接触而导致交叉感染等现象。这样能够让患者更轻松、方便地看病,减轻看病的焦虑。医院角度:于医院而言,众多的患者前往医院看病将增加医院的压力,并且无法有效地分配人力以及医疗资源来处理。同时,也要预防在挂号大厅内,患者与患者之间有可能发生的交叉感染,从而导致新型的病毒的诞生。若是医院通过网上预约挂号来减少挂号大厅的患者数量的存在的话,那么将在很大程度上缓解医院方的人力物力的压力,同时也避免新病毒的诞生,从而提高医院的治疗效率。社会角度:当今社会是个飞速发展的社会,也是个人口剧增的时代,而互联网的存在让生活中的许多事情变得更为方便简洁。为了让社会的秩序更好地维护,互联网应用到各行各业是必然的环节,而人们看病问题是社会中最重要,以及最严重的问题之一,因此,利用互联网使用医院预约挂号系统能够有效地缓解社会的压力,让社会更加有序地运行以及发展。3.2业务流程分析图3.1一般患者看病流程图如上图3.1所示,该图为一般患者到医院进行门诊看病的流程。在图中我们可以看到,患者首先需要进行挂号,然后接受门诊医生的看诊,在医生诊断好患者的病情之后,患者则需要到门诊收费处进行缴费。之后根据患者的病情状况,是到门诊药房取药治疗或者进行住院治疗。在整个的看病流程中,患者主要需要进行的操作可总结为挂号、医生诊断、缴费以及接受治疗。在这个流程中,核心部分为医生诊断以及接受,但是由于受限于医院方的人力资源的因素,该过程难以进行缩减,除非扩充相关的人力资源;缴纳费用亦是同理,都受限于医院的人力资源以及医疗物资等因素,但是这个相对于前者要简单些,因为人员的筛选并不如前者严格。以上三个步骤皆以医院方为主导,都容易受限于医院方的人力和物资资源的调用,若如果看病的患者增多了的话,传统的医院门诊方式也在这时候暴露出了其弊端,即其整个看病的流程的时间将延长,呈现出医疗的低效性。为了解决这一问题,最有效的方式就是减少排队的时间,而目前最直观有效的则是减少甚至减去患者到医院排队挂号的时间。医院预约挂号系统能够有效地解决这一问题,患者可以通过医院预约挂号系统来进行预约挂号以及网上支付预约挂号费用,这样可以免去到医院进行排队挂号的时间,同时提高医疗效率,可以让患者更快更好地看病。3.3功能需求分析3.3.1管理员功能医生用户列表:后台呈现出医院方所有注册的医生用户的信息列表,同时能够对医生用户进行添加、删除、修改,以及查找等相关操作。患者用户列表:后台呈现出医院方所有注册的患者用户的信息列表,同时能够对患者用户进行添加、删除、修改,以及查找等相关操作。预约信息列表:后台呈现出所有预约信息的列表,同时能够对预约信息进行相关的添加、修改以及删除等操作。管理员用户管理:后台呈现出所有管理员用户信息的列表,同时对管理员用户进行添加、删除、修改等操作。3.3.2医生用户功能查看可接受预约信息:医生可以通过查看自身所在部门的预约信息,同时根据自身的实际情况来进行决定,来拒绝或者接受显示的预约。查看已接受预约信息:医生可以查看自身已经接受的预约信息,然后根据预约医治的进度来决定是否继续进行接受预约或者取消,若继续接受预约的话,在完成病状诊断之后可以来确认预约是否完成。医生用户修改自身账号密码:医生用户可以修改自身账号的密码。3.3.3患者用户功能进行网上预约挂号:患者通过网上进行预约挂号,免去到医院大厅进行排队挂号。查看自身预约进度:患者可以查看自身预约信息的预约进度,同时可以对预约信息进行取消预约的操作。患者用户修改自身账号密码:患者用户可以修改自身账号的密码。余额充值:患者用户可以进行余额充值来确保可以进行网上支付预约挂号的费用。患者用户账号注册:患者用户可以于网上自行进行用户注册。3.4非功能需求分析用户易用性需求:患者用户以及医生用户都可以通过医院预约挂号系统来进行网上的预约挂号或者是接受以及拒绝预约,以此方便提高医疗效率。用户安全性需求:患者用户可以直接通过网上注册来进行用户注册,而医生用户则需要管理员来进行医生用户的添加。系统可靠性需求:为了更为方便快捷得管理医院预约挂号系统,系统将管理员、医生用户,以及患者用户,划分成三个不同的用户,避免不同类型的用户之间的信息混乱。运行环境约束:预约挂号系统的三个不同类型的用户都可以通过浏览器来进行访问,并不需要下载其他任何软件来进行操作访问。性能需求:为了更为方便快捷得进行用户的管理,医生用户可以通过不同部门进行划分归类,而患者用户则根据地址来进行划分归类。4系统总体设计4.1系统架构4.1.1数据库设计为了方便医院预约挂号系统的管理,我将关于医院预约挂号系统的三个类型的用户分配设计成三张成员表,分别为管理员用户表(即admin),医生用户表(即doctor),患者用户表(即patient)。同时还有存储部门信息的部门表(即department),以及用以存储预约信息的预约信息表(即reserve),一共为五张表,其关系如图4.1。图4.1表与表之间的关系在图4.1中,我们可以看到五张表之间的关系。首先管理员用户可以对患者用户、医生用户、部门、预约信息四张表进行管理,如对这四张表的信息进行增删改查等一系列操作,以确保系统的信息维护。而一个患者用户只能进行一次的预约挂号,而同属于某个部门的医生用户有多个,而同一个部门的医生可以对自身所属的部门需要的预约信息进行处理,如接受、拒绝、取消预约或者确认预约完成。表4.1管理员用户表成员名表内列名类型长度默认值主键非空其他约束管理员idUidint11无是是自增管理员用户名uservarchar8无否是唯一密码passwordvarchar10111111否是无如上表4.1所示,该表为管理员用户表,用于存储管理员信息的表。以绝大多数系统为例,管理员用户的表主要核心成员为管理员id、管理员用户名,以及管理员密码这三个成员,管理员id主要是作为管理员用户表的主键,用以在系统中作为进行增删改查等一系列的操作的标识,同时其能自增,以方便之后注册新的管理员的时候自动填写管理员用的id而不需要手动在数据库中填写;管理员用户名必须具备唯一性,这是为了以后管理员用户进行登录的时候避免不同的用户登录同一个账号,也避免用户账号的混淆;管理员用户的密码设置了默认值,这是为之后其他管理员创建新的管理员对象的时候自动设置默认密码,同时以方便以后其他创建的新的管理员用户的登录以及使用。表4.2医生用户表成员名表内列名类型长度默认值主键非空其他约束医生IDDTidint11无是是自增部门IDDPidint11无否是外键医生名DTnamevarchar50无否是无密码Passwordvarchar10111111否是无性别Sexvarchar10无否否无电话号码Phonevarchar11无否是唯一如上表4.2所示,该表为医生用户表,用以存储医生用户的相关信息。该表与管理员用户表一样具备相应的ID,用户名,以及密码,密码的默认值也是为“111111”,同理亦是为了方便以后于系统中创建新的医生用户对象。但是不同的是,该表中的用户名不同于管理员用户名必须具备唯一性,这是考虑到医生用户也许会重名的情况下的问题,因此将电话号码设置为唯一性,以此用于以后医生用户登录系统时候进行使用,这样就不用担心系统因为医生用户的名字相同而导致混淆。此外,医生用户还多了个部门ID,该成员主要是用以将医生分配到哪个部门,以方便归类。为了让系统更为健全,在医生表内我添加了如性别的成员。表4.3患者用户表、成员名表内列名数据类型长度默认值主键非空其他约束患者IDPidint11无是是自增患者名Pnamevarchar50无否是无密码Passwordvarchar10111111否是无性别Sexvarchar10无否是无电话Phonevarchar11无否是唯一年龄Ageint3无否是无地址Addressvarchar50无否是无如上表4.3所示,该表为患者用户表,用以存储患者用户的相关信息。该表与医生用户表类似,同样是具备ID,用户名,密码,性别,以及电话号码等五个成员,其作用都类似,但是没用部门ID来关联到之后的部门表。在患者用户表中,添加了年龄与地址两个成员,其用途与性别成员一样,不过不同于医生用户表可以为空,该信息为非空,主要是为了健全医院预约挂号系统的信息,更好地去管理患者用户的信息。表4.4部门表成员名表内列名数据类型长度默认值主键非空其他约束部门IDDPidint11无是是自增部门名DPnamevarchar50无否是非空如上表4.4所示,该表为部门表,用以存储部门的信息。该表的部门ID作为主键,同时具备自增的约束,用以以后医院预约挂号系统的用户成员进行相关的操作,而部门名不能为空。表4.5预约信息表成员名表内列名数据类型长度默认值主键非空其他约束预约IDPGidint11无是是自增患者IDPidint11无否是无患者名Pnamevarchar50无否是无部门IDDPidint11无否是无部门名DPnamevarchar50无否是无医生IDDTidint110否是无医生名DTnamevarchar50待分配否否无患者电话PPhonevarchar11无否否无预约状态YYZTvarchar50预约中否是无完成状态WCZTvarchar50否否是无预约时间YYTimedatetime无否是无如上表4.5所,该表为预约信息表,其主要用以存储患者的预约信息。该表中包括患者用户、医生用户以及医生所属的部门的ID号与名字,其中医生ID和医生用户名的默认值为0以及待分配,这是为了方便患者用户进行预约挂号的填写实现。在该表中具备独具的三个成员,分别为预约状态、完成状态以及预约时间三个成员,预约状态以及完成状态主要用以定义某条预约信息的预约进度以及完成进度,而预约时间则存储患者填写的预约时间。4.1.2MVC框架设计实体类:用以封装系统中管理员、部门、医生以及患者等对象所需要包含的成员信息;实体类DAO类:以接口的方式封装关于实体类的增删改查的相关方法;实体类DAOImpl类:用以继承DAO以及实现实体类DAO类中的封装方法,为servlet提供相关操作。Servlet类:用以接收处理前台传入的参数信息,并调用相应的DAO方法来更新数据库或获取相关数据信息,并转发至前台相应的界面。前台前台页面Servlet实体类DAOImpl类DAO实体类DAO类图4.2MVC基本架构图如图4.2所示,前台界面将参数传入到后台的Servlet中相应的方法,方法名为跳转地址的前缀,后缀则是系统通过web.xml文件映射跳转到相应的Servlet。后台的Servlet则将参数传入到实体类DAO类,并通过被实体类DAOImpl类继承并实现实体类DAO类中的方法,并将编写好的sql语句以及参数传入到DAO的方法中,以此更新数据库信息或获取数据库中的信息。当完成实体类DAO类的方法调用之后,则会将获取的信息通过Servlet转发至前台相应的界面。4.2模块简介图4.3系统模块功能结构图如图4.3所示,该图显示了医院预约挂号系统功能基本模块。在该图中,主要分为前台用户以及后台用户,前台用户又划分出了医生用户以及患者用户。4.2.1前台用户医生用户:查看可接受预约:医生用户可以查看自身所属部门可以接受的预约,从而选择拒绝或者接受处理;查看已接受预约:医生用户可以查看自身已经接受的预约,从而选择取消预约或者确认预约完成;修改密码:医生用户可以进行自身账号的密码修改。患者用户:进行预约:患者通过填写正确的预约信息并提交,从而达成网上预约功能;查看预约:患者可查看自身的预约信息,从而选择是否取消预约;修改密码:患者用户可以修改自身用户的账号密码;4.2.2后台用户管理员用户:管理员表:管理员用户可以在该表中进行管理员用户信息的增删改查等操作;部门表:管理员用户可以在该表中进行部门信息的增删改查等操作;医生用户表:管理员用户可以在该表中进行医生用户信息的增删改查等操作;患者用户表:管理员用户可以在该表中进行患者用户信息的增删改查等操作;预约信息表:管理员用户可以在该表中进行预约信息的增删改查等操作。5系统详细设计5.1数据源创建以及连接MYSQL数据库5.1.1数据源创建本系统设计使用的数据源为c3p0数据源,以此来进行数据源的连接。在导入c3p0-config.xml文件之后,并对其进行配置。首先需要配置的内容是MYSQL数据库的用户名、密码、连接数据源的驱动类以及连接数据源的地址,之后在对数据源其他内容进行配置,如连接自动增量为5、初始获取的连接数量为10、连接池最小保留连接数量为10、连接池最大保留连接数量为50、最大链接数为20,以及连接池内单个连接所拥有的最大Statement数量。具体配置可参考附录中的c3p0-config.xml的代码。5.1.2连接MYSQL数据库为了使得项目连接上MYSQL数据库,则需要创建一个JdbcUtils类以此来通过获取上述配置好的c3p0数据源,需要在该类中创建一个DateSource类的静态变量来获取。之后就是创建两个方法来进行连接数据源以及关闭数据源,分别为getConnection()以及releaseConnection(),具体代码可参考附录中的JdbcUtils.java。5.2对数据库增删改查的DAO类设计首先需要创建一个QueryRunner类的变量以及一个Class<T>的变量,前者用以对进行创建数据库增删改查等方法的调用,后者则负责对DAO类的无参构造器的初始化,使得实体类能够继承以及调用DAO类中的方法。在完成DAO类的无参构造器的初始化后,则需要分别设计数据库增删改查的方法。主要方法为以查找对象的类型为返回值的getForValue(Stringsql,Object...args)、以返回实体类列表为返回值的getForList(Stringsql,Object...args)、以返回实体类为返回值的get(Stringsql,Object...args),以进行增加、修改以及删除等操作的方法update(Stringsql,Object...args)。这些方法都会创建一个Connection对象用以调用JdbcUtils.java中的连接数据库的方法getConnection(),其在queryRunner对象调用完成相应的增删改查等的方法后,则需要调用releaseConnection()方法来关闭数据源。另外,关于数据源调用的sql语句以及具体变量将会通过实体类的DAO类相关方法进行调用时传入。5.3实体类的设计本系统的实体类主要为管理员类(即Admin),部门类(即Department),医生类(即Doctor),患者类(即Patient),以及预约信息类(即Reserve)。管理员类:管理员ID(即Uid)、管理员名(即user)、密码(即Password);部门类:部门ID(即DPid)、部门名(即DPname);医生类:医生ID(即DTid)、部门ID(即DPid)、医生名(即DTname)、部门名(即DPname)、密码(即Password)、性别(即Sex)、电话号码(即Phone);患者类:患者ID(即Pid)、患者名(即Pname)、密码(即Password)、性别(即Sex)、电话号码(即Phone)、年龄(即Age)、地址(即Address);预约信息类:预约ID(即PGid)、患者ID(即Pid)、患者名(即Pname)、部门ID(即DPid)、部门名(即DPname)、医生ID(即DTid)、医生名(即DTname)、患者电话号码(即PPhone)、预约状态(即YYZT)、完成状态(即WCZT)、预约时间(即YYTime);5.4用户登录图5.1用户登录界面如图5.1所示,该图为用户登录界面。在该界面中管理员用户、医生用户以及患者用户都可以通过该界面进行用户的登录。各个用户在登录的时候,首先需要选择自己的用户类型,然后在图中的两个文本框中输入用户登录的账号以及密码。管理员用户的用户账号需要填写其管理员的用户名,而患者用户和医生用户则需要填写其账号锁绑定的手机号码(以下DAO相关具体实现方法详见附录)。当点击登录的时候,系统就会以表单的形式将填写的内容根据web.xml文件的映射提交到相应的后台的LoginServlet,LoginServlet会根据映射的前缀调用login方法。在login方法中,通过getParameter方法来获取界面传递的参数信息。在获取到表单提交的信息之后,首先需要对其进行判断用户账号和密码是否为空,若为空,则返回内容为空的提示信息至登录页面。若不为空,则通过比较userclass的字符串是否与“admin”、“doctor”、“patient”相匹配,以此来进行相应的类型用户登录。然后向相应的实体类DAO类的login方法传递用户名以及密码,如登录用户为管理员用户,LoginServlet会调用AdminDAO的login方法,而该方法根据MVC框架的实现原理,其与DAO类同时被AdminDAOJdbcImpl继承实现,在login方法内预先编写好sql语句,并将其与用户名和密码传递到DAO.java中的get()方法,若查询成功,将返回一个Admin对象,若Admin对象不为空,则将该Admin对象通过session.setAttribute方法封装到session中,并通过request.getRequestDispatcher().forward(request,response)进行请求转发至管理员首页,医生用户与患者用户的登录亦是同理。5.5用户注册图5.2患者用户注册如图5.2所示,该图为患者用户的注册界面,患者需要填写正确的注册信息才可以完成注册,否则会出现相应的提示信息于注册页面上。注册功能的实现主要依靠注册信息以表单的格式进行提交到后台servlet,然后根据MVC框架调用相应方法并录入到数据库中(以下DAO相关具体实现方法详见附录)。患者需要在上图中填写相应的信息,在点击注册之后,系统则会根据映射将相应的数据提交到后台PatientServlet的patientre方法中去。在PatientServlet中,系统会对用户提交的信息进行判断字符串是否为空,比较密码与确认密码的字符串是否一致。调用DoctorDAO和PatientDAO的getCountWithPhone方法判断电话号码是否已经被注册,在getCountWithPhone方法中则将预先编写好的sql语句和电话号码传入到DAO中的getForValue,若返回值大于零则判定电话号码以注册,反之则没注册;以及通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")来判断电话号码的格式是否正确,若上述四个判断出现相应的错误,则会通过request.setAttribute封装相应提示信息于message字符串信息,并返回至注册页面通过request.getAttribute获取显示。若患者提交的信息是正确的话,则Patientervlet会将信息传递给PatientDAO的save方法,该方法利用MVC框架原理实现,将相应说起来语句与参数传递到DAO类方法中,以实现注册到系统连接的数据库当中去,并通过请求转发request.getRequestDispatcher().forward(request,response)跳转至登录页面。5.6管理员用户管理员用户主要是对系统内的信息进行增删改查等一系列操作,包括对管理员用户、医生用户、患者用户、部门信息以及预约信息。一个系统的建立就必须要有管理员用户的成立,这是为了方便对预约挂号系统的用户成员以及预约信息等进行管理,以避免某些用户的错误操作而无法进行修改,同时也是为了系统的信息安全的可靠性。图5.3管理员用户首页如上图5.3所示,该图为管理员首页,而在首页的最左侧则是管理员系统的导航条,管理员用户可以通过点击相应的栏目进行相关操作。5.6.1管理员表操作图5.4管理员表如图5.4所示,该图显示了医院预约挂号中目前存在的管理员信息,管理员用户可以对该表中的信息进行增删改查的操作。管理员用户的权限在系统中的是最高的,其对于其他成员以及预约信息表的处理也是具备最高权限,因此只有管理员用户才能对管理员表信息进行操作。(以下相关DAO具体实现方法详见附录)。利用MVC框架的原理,当用户点击左侧导航栏目的“查看管理员表”的时候,系统后台AdminServlet则会根据前缀映射调用AdminDAO中的queryad方法,在该方法中将预先编写好的sql语句传入到DAO中的getForList并返回一个List<Admin>对象来存储获取所有管理员信息利用request.setAttribute,并将其通过request.getRequestDispatcher().forward(request,response)转发至界面上利用request.getAttribute获取显示。同理,当管理员用户对某个用户点击删除的时候,系统则会所选择的管理员ID通过超链接方式根据地址前缀传递到AdminServlet的delete方法中中,并在方法中调用AminDAO的delete的方法进行删除操作,在delete方法中将管理员ID以及预先编写好的sql语句封装到DAO中的update方法进行删除并更新数据库,但管理员用户不能对自身所使用的管理员账号进行删除操作。完成删除操作后则通过response.sendRedirect()重定向到管理员表界面。同理,管理员用户可以点击重置来重置密码。当管理员对某个用户进行账号密码重置的时候,系统则会根据所选择的管理员ID通过超链接方式根据地址前缀传递到AdminServlet的reset方法中,并调用AdminDAO的resetPassword方法重置的密码为“111111”,在resetPassword将预先编写好的sql语句以及字符串“111111”以及管理员ID封装到DAO的update更新数据库信息。完成密码重置操作后则通过request.getRequestDispatcher().forward(request,response)转发至管理员表界面。图5.5管理员添加如图5.5所示,该图为管理员用户的添加,管理员用户可进行其他管理员用户的添加操作,在考虑到医院的医生用户以及患者用户的增加,还有预约信息的数量不断上升,需要的管理员用户也会随之增多,这是为了减少单个管理员的工作量,也是为了更好得去处理预约信息。其主要利用表单的形式将用户名提交到AdminServlet,再利用MVC框架调用相应的DAO方法录入到系统中。在填入用户名之后,系统则会将输入的用户名以表单形式映射提交到AdminServlet的add方法中去,然后先判断该用户名是否为空;若不为空,则通过调用AdminDAO的getLongByUser方法来判断是否存在,在该方法中,其将预先编写好的sql语句以及用户名封装到DAO的getForValue方法中并返回一个长整型数,若返回值大于零则表示存在,并将提示信息封装通过request.setAttribute封装并转发至添加管理员界面,管理员界面通过request.getAttribute获取显示,反之则不存在则通过AdminDAO的add方法添加新的管理员用户,在add方法中将sql语句以及管理员名封装至DAO的update方法中,同时密码默认设置为“111111”,并通过请求转发方式回到管理员表界面。图5.6管理员密码修改如图5.6所示,该图为修改相应的管理员用户的密码,在考虑到管理员用户的密码可能会忘记的情况下,或者需要对用户的密码进行修改,因此在此设置了修改密码的功能。系统利用表单的形式将信息提交到后台servlet,并利用MVC框架原理调用相应的DAO方法实现。用户在修改密码的时候,需要填写旧密码、新密码以及确认密码,系统则将相关信息以表单的形式根据地址映射提交到AdminServlet的save方法中,在save方法中,首先调用AdminDAO方法的getByUid方法根据sql语句以及管理员ID获取该管理员对象,检测到三个内容有一个或以上为空值,则通过request.setAttribute封装“内容不能为空”的提示至修改密码界面;若输入的旧密码错误或者新密码与确认密码不一致,则同理封装“新密码不一致”提示返回。若输入的信息无误,则将新密码设置到先前获取的管理员对象,在save方法中,并调用AdminDAO的save封装管理员对象,将sql语句以及通过get的方法获取管理员对象的密码以及ID,并传入DAO的update方法更新管理员密码,最后通过重定向的方式返回至管理员表。5.6.2部门表操作图5.7医院部门表如图5.7所示,该表显示的信息为医院的部门信息,管理员用户可以于该界面进行部门信息的增删改查操作。一个医院就有不同的部门,不同的部门下会有多个医生用户。患者在不了解医院的医生有哪些的情况下,设置部门信息就是为了让患者能够更快更好的根据自己的病情进行预约挂号。管理员用户对于部门表的操作是基于MVC框架的基础上,后台servlet获取从页面传递的参数,并调用相应的DAO方法来获取数据或者修改数据(以下相关DAO具体实现方法详见附录)。部门表信息的获取主要是通过地址映射后调用DepartmetServlet的querydp方法,并调用DepartmentDAO的getAll方法,通过预先编写好的sql语句封装到DAO的getForList方法,返回封装List<Department>列表对象,其封装了获取数据库中所有的部门信息,并将该列表通过request.setAttribute封装后请求转发显示至系统界面。医院部门的删除则由系统将所选择的医院部门的ID通过超链接的形式根据地址映射传递到DepartmentServlet的delete方法,并来调用DepartmentDAO的delete方法,其将部门ID以及相关sql语句封装到DAO的update方法完成删除操作,之后通过请求转发返回部门表,即图5.7医院部门表。图5.8添加医院部门如图5.8,管理员进行医院部门的添加操作。随着社会的发展,考虑到科室会逐渐细分,为了方便患者预约挂号以及医生处理预约信息,部门添加的功能也是系统的一个必须功能。当用户进行部门添加的操作时,用户需要填写新的部门名,系统则会将其以表单的形式根据地址映射传递到DepartmentServlet的add方法中。其先通过DepartmentDAO的getCountWithDPname方法将预先编写好的sql语句以及部门名封装到DAO的update方法,通过返回值判断该部门是否已经存在,若返回值大于零则表示存在,则将返回信息以上文的返回提示信息的形式返回至添加界面;若不存在,则实将部门名封装到一个Department类对象中,并将该对象封装到departmentDAO的save方法中,在该方法中通过get方法获取部门对象的部门名,并将相关sql语句与部门名封装到DAO的update方法中,实现添加操作,并通过重定向方式返回至部门表界面。图5.8修改部门信息如图5.9,管理员进行医院部门信息修改操作。在考虑到某些部门名字的变更的情况下,为了也是为了方便医生处理患者信息而添加部门名变更的功能。当用户进行修改操作的时候,则值需要修改部门名信息,与添加部门操作类似。系统将相关信息以表单的形式根据地址映射到DepartmentServlet的update方法。在方法中,先判断部门名是否为空,若不为空,则判断是否与原来的部门名一致,若不一致,则将部门名封装到一个部门对象,并将该部门名封装到DepartmentDAO的getCountWithDPname方法,在将其与sql语句传递到getForValue方法中,根据返回的长整形判断该部门是否已经存在,若返回值大于零则表示存在,则以上文相同的返回提示方式至修改部门界面;若不存在,则将部门对象封装到departmentDAO方法的update方法,在该方法中通过get方法获取部门名以及ID,并与相关sql语句封装到DAO的update完成部门信息更新,最后通过重定向的方式返回至部门列表。5.6.3医生表操作图5.9医生表总表如图5.9所示,该表为医生表主表,其显示了系统中录入的所有医生用户的信息,管理员用户可对该界面医生表进行增删改查的操作。医生用户的建立以及相关的信息管理都需要由管理员用户来操作,这是为了系统的正常运转,以及避免患者用户和医生用户的混淆。让预约挂号系统能够更方便、更好地去运行(以下相关DAO具体实现方法详见附录)。管理员用户对于医生用户表的操作是基于MVC框架的基础上,后台servlet获取从页面传递的参数,并调用相应的DAO方法来获取数据或者修改数据。系统根据地址映射DoctorServlet调用querydo方法,并在方法中调用DoctorDAO的getAll方法,返回一个封装了获取的所有的医生用户信息List<Docotor>的列表对象,另外还调用DepartmentDAO的getAll方法,返回一个封装了获取的所有的医生用户信息List<Department>的列表对象,并将这两个列表对象通过request.setAttribute封装,请求转发显示到界面上。医生表关于删除的操作和重置密码与管理员表的删除操作类似,皆是通过超链接的方式将医生ID传递到DoctorServlet的delete或者reset,调用DoctorDAO的delete或者resetPassword的方法,将传入的医生ID以及相关sql语句封装到DAO的update方法中来进行医生用户的删除或者将医生用户的密码重置为“11111111”,最后通过重定向返回至医生表界面。图5.10医生表条件查询图5.11条件查询后的医生表图5.11是通过图5.10的部门名下拉列表选择“儿科”进行条件查询。这是为了方便管理员查看相关部门的医生信息并对其进行操作,例如若处理一个儿科的医生,则可以通过条件查询来快速查找。其主要过程就是以表单的信息将查询的条件提交到后台的DoctorServlet的queryby,并调用queryby方法进行查询显示,其中在将参数传入的时候则会在servlet中新建一个CriterDoctor类并将参数传入其中,在该类中对成员的get方法进行修改,当DAO中的方法获取了新建的CriterDoctor类对象时,若对象某一成员的值为空,则该成员值返回“%%”,若不为空则返回“%”+成员值+“%”,以进行相应的条件查询;最后将该CriterDoctor类对象传递到DoctorDAO中的getListByCriter,在该方法中通过get方法获取医生名和部门名并与相关sql语句封装到DAO的getForList方法中,并返回一个List<Doctor>对象封装了条件查询的信息,并通过request.setAttribute封装列表对象请求转发至界面上。图5.12添加医生用户如图5.12所示,其为管理员进行医生用户添加。该功能的设立主要是为了防止非医院方成员的注册,这是为了维护系统的安全性和正常运行,也为了避免非医院方用户处理预约信息。当管理员添加新的医生用户的时候,需要填写相应的信息。系统将填写的信息以表单的信息根据地址映射至DoctorServlet的save方法中。在该方法中,首先对传入的信息值判断是否为空,若不为空,则将Phone字符串传递到DoctorDAO以及PatientDAO的getCountWithPhone方法,在getCountWithPhone方法中将相关sql语句以及Phone封装到DAO的getForValue中,根据返回值是否大于零来判断该电话号码是否已经注册了;若不大于零,则判断Phone的字符串是否为11位,并通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")来判断电话号码的格式是否正确。若信息出现以上判断的相关错误,则会以上文同理的方式将提示形式返回显示至添加界面,若无误,则将相关的信息封装到一个Doctor对象中,并将该对象传递到DoctorDAO的save方法,在save方法中,将相关sql语句以及通过get方法获取Doctor对象的相关参数封装到DAO的update方法中,以此完成添加操作,最后通过重定向的方式返回至医生列表。图5.13修改医生用户如图5.13所示,其为管理员对医生用户进行修改。这是为了在某个医生用户所属科室调动的时候,或者电话号码等信息的修改所设立的,也为了方便医生查看可接受预约信息时所需要进行的操作。管理员用户对医生用户的修改与添加操作类似,以表单的形式根据地址映射提交到DoctorServlet的update方法。在该方法中,首先对传入的信息值判断是否为空,若不为空,则将Phone字符串传递到DoctorDAO以及PatientDAO的getCountWithPhone方法,在getCountWithPhone方法中将相关sql语句以及Phone封装到DAO的getForValue中,根据返回值是否大于零来判断该电话号码是否已经注册了;若不大于零,则判断Phone的字符串是否为11位,并通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")来判断电话号码的格式是否正确。若信息出现以上判断的相关错误,则会以上文同理的方式将提示形式返回显示至添加界面,若无误,则将相关的信息封装到一个Doctor对象中,并将该对象传递到DoctorDAO的update方法,在update方法中,将相关sql语句以及通过get方法获取Doctor对象的相关参数封装到DAO的update方法中,以此完成修改操作,最后通过请求转发的方式返回至医生列表。5.6.4患者表操作图5.14患者表总表如图5.14所示,该图所显示的表为系统录入的所有的患者信息,管理员用户可与该界面对患者用户信息进行增删改查的操作。患者用户无法对自身的信息进行修改,这是为了防止信息的随意变动而导致系统的内部数据的混乱,而管理员用户处理患者用户信息则是必须具备的,也是为了防止预约挂号信息存在错误信息。管理员对于患者表的操作是基于MVC框架的基础上,调用相应的DAO方法来实现增删改查操作(以下相关DAO具体实现方法详见附录)。系统根据地址映射调用PatientServlet的querypa方法。在该方法中,调用PatientDAO的getAll方法,其将预先编写好的sql语句封装到DAO的getForList,并返回List<Patient>列表对象,其封装获取的所有的患者信息,并将列表对象通过request.setAttribute请求转发显示到前台界面。管理员可以在该表中对某个成员进行删除以及密码重置的操作,系统更加映射地址将患者ID以超链接的方式传递到PatientServlet的delete或者reset方法,并在各自的方法中调用PatientDAO的delete或者resetPassword方法,并分别将相关sql语句以及患者ID传递到DAO的update中,以此达到删除以及重置密码的操作,最后通过请求转发返回至患者表。图5.15患者表条件查询图5.16条件查询后的患者表图5.16所示的患者用户则是通过如图5.15所示进行条件查询所显示,其条件为“地址为北京”。这是为了方便管理员用户快速查找并管理患者信息。该表的条件查询与医生表的条件查询类似,皆是通过将查询条件封装到一个CriterriaPatient类中,系统根据地址映射调用PatientServlet的querypa方法。当后台servlet调用相应的DAO方法获取该类对象的成员时,返回“%%”或者“%”+成员名+“%”来实现条件查询。最后将该CriterPatient类对象传递到PatientDAO中的getListByCriter。在该方法中通过get的方法获取CriterPatient类对象的相关信息,将其与相关sql语句封装到DAO的getForList方法中,并返回一个List<Patient>列表对象封装了条件查询的信息,并通过request.setAttribute封装列表对象请求转发至界面上。图5.17添加患者用户如图5.17所示,该界面是管理员进行患者用户添加。在考虑到某些特殊人群,如老年人等,该类人群不会注册预约挂号系统的账号,因此可以通过管理员来进行患者用户的添加,以此为该类人群提供预约挂号的服务账号。管理员需要将正确的信息填入,系统则会根据映射地址将信息以表单的形式提交到后台的PatientServlet的add方法。在该方法中,首先对传入的信息值判断是否为空,若不为空,则将Phone字符串传递到DoctorDAO以及PatientDAO的getCountWithPhone方法,在getCountWithPhone方法中将相关sql语句以及Phone封装到DAO的getForValue中,根据返回值是否大于零来判断该电话号码是否已经注册了;若不大于零,则判断Phone的字符串是否为11位,并通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")来判断电话号码的格式是否正确。若信息出现以上判断的相关错误,则会以上文同理的方式将提示形式返回显示至添加界面,若无误,则将相关的信息封装到一个Patient对象中,并将该对象传递到PatientDAO的save方法,在save方法中,将相关sql语句以及通过get方法获取Patient对象的相关参数封装到DAO的update方法中,以此完成添加操作,最后通过重定向的方式返回至患者列表。图5.18修改患者用户信息如图5.18所示,该界面为管理员进行患者信息修改。修改患者信息的设立,是为某些患者用户因错误填写信息,但随意修改信息会导致系统的安全性存在某些问题的情况下,管理员用户可对患者信息进行修改。在进入该界面之前,后台的Patientervle则会先将所选择的患者ID来传递到PatientDAO的get方法,与相关的sql语句封装到DAO的get方法,获取相应的患者对象,并将其利用request.setAttribute封装请求转发至修改界面显示。当管理员对该患者用户进行修改的时候,系统则会根据映射地址将信息以表单的形式提交到后台的PatientServlet的update方法。在该方法中,首先对传入的信息值判断是否为空,若不为空,则将Phone字符串传递到DoctorDAO以及PatientDAO的getCountWithPhone方法,在getCountWithPhone方法中将相关sql语句以及Phone封装到DAO的getForValue中,根据返回值是否大于零来判断该电话号码是否已经注册了;若不大于零,则判断Phone的字符串是否为11位,并通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")来判断电话号码的格式是否正确。若信息出现以上判断的相关错误,则会以上文同理的方式将提示形式返回显示至添加界面,若无误,则将相关的信息封装到一个Patient对象中,并将该对象传递到PatientDAO的update方法,在update方法中,将相关sql语句以及通过get方法获取Patient对象的相关参数封装到DAO的update方法中,以此完成修改操作,最后通过重定向的方式返回至患者列表。5.6.5预约信息表操作图5.19预约信息表如图5.19所示,该表为录入了系统的所有预约信息表,管理员可于该界面对预约信息进行增删改查的操作。管理员具备对预约信息的处理权限,这是为了维护医院预约挂号系统的正常运行。管理员对于预约信息表的操作是基于MVC框架的基础上,调用相应的DAO方法来实现增删改查操作(以下相关DAO具体实现方法详见附录)。系统根据地址映射调用AdminServlet的queryre方法。在该方法中,调用ReserveDAO的getAll方法,其将相关sql语句封装到DAO的getForList方法中,并返回List<Reserve>列表来封装获取数据库中所有的预约信息,并通过request.setAttribute封装请求转发显示至界面上。考虑到某些预约信息的过时性以及无用性,预约信息删除的功能也因此而设立。当管理员相对某一条预约信息进行删除的时候,系统则会根据地址映射将该预约信息的ID以超链接的方式传递到后台的AdminServlet的admindeletere方法,其调用ReserveDAO的delete方法,将预约ID和相关的sql语句封装到DAO的update方法中,完成删除预约信息的操作,最后通过请求转发的方式返回至预约信息表的界面。图5.20添加预约信息如图5.20所示,管理员可以在该见面中添加新的预约信息。这个功能的使用,是在患者用户出现某些特殊情况,如急症之类的情况,由管理员用户添加新的预约信息。系统根据地址映射将相关信息以表单的形式传递到AdminServlet中的adminaddre方法中,并预先设置一个患者ID为0。首先对相关信息的字符串进行空值判断,若不为空,则通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")判断电话号码格式是否正确;若格式正确,将PPhone字段封装到PaitentDAO的getCountWithPhone方法,该方法将PPhone字段与相关sql语句封装到DAO的getForValue中,并返回一个长整型,若该长整型则该电话号码存在;之后,系统则会调用patientDAO的getValueByPPhoneAndPname方法,来确认是否存在该患者用户;若存在,系统再将该电话号码传递到PatientDAO的getByPhone,其将PPhone字段与相关sql语句传递到DAO的get方法并返回一个Paitent对象;通过get方法获取该Patient对象的Pid。若以上判断有误,则以上文相同的方式将提示信息返回至添加界面。完成信息判断之后,通过DoctorDAO的get方法根据传入的医生ID获取Doctor对象,再将预约时间信息YYTime通过SimpleDateFormat类的对象format的parse方法转成时间格式为"yyyy-MM-ddHH:mm:ss"的Date对象,之后再new一个Date类的对象date2,通过date.getTime()-date2.getTime()<0方式来确认日期是否为未来式,若为未来式,则再将date转换成Timestamp类对象,若转换失败则以上文相同的方式将提示信息返回至添加界面。最后将相关的预约信息传递到ReserveDAO的adminsave方法中,该方法将相关的预约信息参数与预先编写好的sql语句封装到DAO的update方法,以此达到添加预约信息的操作,并通过重定向返回至预约信息表。图5.21修改预约信息如图5.21所示,该界面是管理员对预约信息进行修改操作。这是为了防止医生用户或者患者用户对预约挂号信息的错误操作。系统根据地址映射将相关信息以表单的形式传递到AdminServlet中的adminrewritere方法中,并预先设置一个患者ID为0。首先对相关信息的字符串进行空值判断,若不为空,则通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")判断电话号码格式是否正确;若正确,则判断YYZT与WCZT字段是否分别为“预约中”和“是”,或者为“取消”和“是”,若是的话则返回提示信息至修改界面;最后通过调用patientDAO的getValueByPPhoneAndPname方法,并传入患者名以及患者电话号码,查看返回值是否小于或等于零,若是则返回提示没有该患者用户的信息的提示;若上述信息判断有误的话,则以与上文相同的方式将提示信息返回至修改界面显示。若信息无误,则通过DoctorDAO的get方法根据医生ID获取Doctor对象如若预约的时间发生了修改,则先将预约信息的字段转换成"yyyy-MM-ddHH:mm:ss"的Date类,其变量名为date,转换方式与管理员用户添加预约信息是一样,之后在new一个Date类对象date2,通过date.getTime()-date2.getTime()<0方式来确认日期是否为未来式,若为未来式,则再将date转换成Timestamp类对象,若转换失败则以上文相同的方式将提示信息返回至添加界面。之后,利用ReserveDAO的get方法,将预约ID与相关sql语句封装到DAO的get方法中,并返回一个Reserve对象,之后利用set方法将修改的预约信息传递到该Reserve对象中,其中医生ID、医生名、部门ID以及部门名,皆通过上述创建的Doctor对象利用get方法获取;最后将修改好的Reserve对象封装到ReserveDAO中的update方法,该方法将想sql语句以及利用get方法获取Reserve对象的相关信息封装到DAO的update方法中,以此更新该条预约信息,并通过重定向的方式返回预约信息表。5.7患者用户图5.22患者用户首页患者用户可以在预约挂号系统内进行预约挂号、查看预约信息、取消预约、修改用户账号自身密码。管患者用户是预约挂号系统的主要使用者之一,也是预约信息的生成的主要来源。患者用户所进行的操作皆是基于MVC框架的基础上,从页面获取相应的参数传递至后台Servlet,并映射到和跳转的前缀相应的方法,在该方法中调用相应的DAO的方法来进行数据的获取或者修改(以下相关DAO具体实现方法详见附录)。5.7.1患者预约挂号图5.23患者预约挂号界面如图5.23所示,该界面为患者用户进行预约挂号的界面。但是患者只能进行一次预约操作,若需要在旧预约未完成的情况下,进行新的预约操作,则需要取消上一次的预约。在进入该界面之前,系统会从session中获取患者用户的对象所存储的信息,并将相关信息信息显示至界面的相关区域,患者可以对姓名以及电话号码的信息进行修改,科室则可通过下拉列表进行选择,预约的时间的格式为“yyyy-MM-DDhh:mm:ss”。当用户点击提交之后,系统则会将信息以表单的形式提交到后台的ReserveServlet的reserve方法中。在该方法中,首先利用request.getSession方法获取Session对象,再利用Session对象的request.getAttribute获取存储到session对象中的患者对象,并且通过DepartmentDAO的getByDPname方法根据传入的DP那么获取Department对象,然后对提交信息的值判断是否存在空值;若不存在空值,则通过matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$")以及判断电话号码是否为11位,来判断电话号码格式是否正确;之后,将预约时间的字段通过创建的SimpleDateFormat类对象format利用format.parse方法转换成"yyyy-MM-ddHH:mm:ss"各式的Date类对象date,再new一个Date类对象date2来获取当前时间,利用date.getTime()-date2.getTime()<0来判断预约时间是否为未来时间,若大于零是未来时间,否则返回提示至界面;之后通过调用patientDAO的getYYZT1以及getYYZT1来判断该患者用户是否已经有预约状态为“预约中”或者“接受”但完成状态为“否”的预约信息,若有则返回提示;同理以上判断皆以与上文返回提示信息的方法进行返回提示。部门ID通过上述获取的Department对象利用get的方法获取,最后将相关的信息封装到一个Reserve对象,再将Reserve对象封装到ReserveDAO的save方法。在save方法中,利用get方法获取Reserve对象需要传入的预约信息,并将其与写好的sql语句封装到DAO的update方法中,最后返回一个boolean对象flag,若flag为真则调用PatientDAO的updateMoney方法,将减10后的Money对象传入,更新患者用户的余额,并通过请求转发返回至患者用户首页,若flag为假则以上文相同的重定向方式返回提示信息至预约界面。图5.24患者查看预约信息如图5.24所示,患者可以在该界面中查看到自身所进行的预约信息,并且可以进行取消预约操作。患者在取消旧的预约之后,方可进行新的预约。系统在显示该界面之前,首先会从session获取患者用户的ID,并将ID通过超链接的方式传递到后台的ReserveServlet的palookreserve方法中去,并调用ReserveDAO中的getAllByPid,该方法将患者ID与相关sql语句传递到DAO的getForList中,以此获取封装该患者用户的预约信息List<Reserve>列表对象,并通过request.setAttribute封装列表对象方式,并请求转发显示到界面上。若患者用户取消某一条预约信息时,系统则会将其预约信息的ID通过超链接的方式根据地址映射提交到后台的ReserveServlet的pacancel方法。在该方法中,首先通过request.getSession方法获取Session对象,之后在利用request.getAttribute方法获取存储在session中的患者对象,再利用get方法获取患者ID;然后调用ReserveDAO的pancacel方法,将预约ID传入,在该方法中其将预约ID与相关的sql语句传入到DAO的update方法,以此达成取消预约操作,最后通过将患者ID传入到ReserveDAO的getAllByPid获取封装了更新后的预约信息List<Reserve>列表对象,并通过request.setAttribute封装列表对象方式,并请求转发显示到界面上。PAGEPAGE15.7.2修改密码图5.25患者用户修改密码如图5.25所示,患者用户可以在该界面修改密码。首先系统会通过session.getAttribute获取存储在session的患者对象,在通过get方法获取患者名字并显示到修改密码界面上。当用户点击提交的时候,系统则会将信息以表单的形式根据地址映射提交到后台的PatientServlet的rewritepwd方法。之后,通过request.getSession方法获取Session对象,之后在利用request.getAttribute方法获取存储在session中的患者对象,在利用get方法获取患者用户原来的密码Password。然后判断输入的内容是否存在空值,若不存在空值,则判断输入的旧密码pwd1是否与患者用户原来的密码一致;若一致,则判断新密码pwd2与确认密码pwd3是否一致。若以上判断有误,则以与上文相同的方式返回提示信息至修改密码界面。若正确,则会调用PatientDAO的rewritePassword方法,其将新密码pwd2与患者ID传入到DAO的update方法中,以此来录入新密码至数据库中,并通过PatientDAO的get方法根据Pid获取患者用户对象,将其利用session.setAttribute存储到session中,以此更新session中的数据,并返回至患者用户首页。5.8医生用户图5.26医生用户首页医生用户可以在该系统中进行查看可接受的预约并选择接受或者拒绝、查看已接受的预约并选择取消或者确认预约完成,以及修改医生用户账号自身密码。医生用户所进行的操作皆是基于MVC框架的基础上,从页面获取相应的参数传递至后台Servlet,并映射到和跳转的前缀相应的方法,在该方法中调用相应的DAO的方法来进行数据的获取或者修改(以下相关DAO具体实现方法详见附录)。5.8.1医生处理预约信息图5.27查看可接受的预约信息如图5.28所示,在该界面中,医生用户可以查看到自身部门尚未处理的预约信息,并对这些预约进行接受或者拒绝的操作。在界面显示之前,系统将session中获取医生对象的部门ID,即DPid,再以超链接的形式根据地址映射传递到ReserveServlet中dolookre方法。ReserveServlet会将DPid传递到ReserveDAO的getAllByDPid方法。在该方法中,其将写好的sql语句与DPid传入到DAO的getForList方法,来获取封装了与该部门的可接受的预约信息的List<Reserve>列表对象,并将该列表对象封装到request.setAttribute中后请求转发显示至界面上。医生用户在该界面可以对预约信息选择接受或者拒绝的操作。若选择接受,系统则会将该预约信息的ID即PGid以超链接的方式传递到ReserveServlet的doaccept方法中;之后,通过request.getSession()创建session对象,在利用session.getAttribute获取医生对象doctor;再通过get方法获取doctor的医生ID与医生名,即
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子公司使用总部管理制度
- 专职调解员考核管理制度
- 景区工作规范管理制度
- 奉贤区家庭仓库管理制度
- 二十四节气非遗走进小学美术课堂的教学初探与反思
- 计算机网络技术(第二版)课件第9章 Windows Server 服务器配置
- DB43-T 2803-2023 灰毡毛忍冬嫁接育苗技术规程
- 《汉书郊祀志》测试题带答案
- 挫折教育班会课件
- 挂篮悬臂施工技术
- 空调检测报告
- 变压器实验报告
- 游乐场合作经营合同书
- 神经生理治疗技术
- 浙江温州高速公路瓯北片区招聘高速公路巡查人员考试真题2022
- 江苏苏州工业园区苏相合作区管理委员会机关工作人员招聘13人告5204笔试题库含答案解析
- 三年级下学期音乐复习题
- 电网调度自动化系统调试报告模板
- 电梯维保考试经典试题
- 飞机应急设备检查与控制
- GA 1808-2022军工单位反恐怖防范要求
评论
0/150
提交评论