《网上门诊管理系统(共18页).doc》由会员分享,可在线阅读,更多相关《网上门诊管理系统(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上华 北 科 技 学 院课程设计说明书(网络编程)班级:姓名: 学号:设计题目: 网上门诊管理系统 设计时间: 2013-06-17 至 2013-06-30 指导教师: 彭珍、刘华 评 语: 评阅成绩: 评阅教师: 目录专心-专注-专业1引 言1.1课程设计选题网上门诊管理系统1.2课程设计题目设计要求要求参照实际的医院门诊处理流程,实现门诊管理系统。 1)病人信息:包括病历编号、病人姓名、性别、年龄、处方编号;2)处方信息:包括处方编号、病因、处方详情、开方医生;3)用户信息:包括用户姓名、身份(护士/医生)、密码;4)系统管理员能够对用户信息进行增删改操作;5)护
2、士能够增加、删除、修改病人信息,能够修改自己的密码,能够查看病人的处方信息;6)医生能够查看病人信息,为病人开设处方;7)要求所有用户先登录后使用。2需求分析2.1 功能需求系统分析:实际医院门诊处理大致流程是就诊病人需先挂号登记然后到相关科室就诊。参照大致流程在该系统中应包含有以下功能:挂号时,护士将病人基本信息录入病历中的功能。所以护士有管理病历的功能;医生为病人问诊时,能查看病人基本信息,并依据病人的病情及其个人状况为病人开具处方。所以医生有管理处方的功能;为了实现医院护士和医生的有效、合理化管理,则该系统还需要有后台的管理功能,即管理员管理用户。具体功能分析:该系统包括三类用户:护士(
3、nurse)、医生(doctor)、管理员(admin)为保护系统中病人及病人基本信息,该系统不允许用户注册,用户由管理员内部添加。所有用户通过登录进入系统,进入其对应的功能模块。并能查看部分个人信息及修改自己的登录密码。护士:能在该系统录入病人的基本信息,通过查询功能轻松查获病历信息,并能对所有病历进行增删改查操作。医生:进入系统能查看所有病人的病历信息,并为就诊的病人开具处方。能查看所有处方信息,能修改自己开具的处方。管理员:能在该系统录入客户的信息资料,通过查询功能轻松得到用户的基本信息,并且可以对所有用户信息进行增删改查操作。 2.2 系统的开发运行环境本系统开发集成环境: JSP引擎
4、(Tomcat5.5以上版本)+ JDK(1.6)+ sql server 2000本系统运行环境: windows xp 或以上版本2.3 数据建模(E-R图)用户E-R图如图1.所示,病历E-R图如图2.所示。 图1.用户实体及属性 图2.病历实体及属性处方E-R图如图3.所示。处方由医生为病人开具,处方是用户(医生)与病历表之前的联系。总体E-R图:一个病人可以有多张处方,一个医生可以为多个病人开具多张处方,如图4.所示。图3.联系的属性图4.总体E_R图3 .总体设计3.1 系统功能模块及主要设计该系统的主要功能模块:登录模块,管理员功能模块,医生功能模块,护士功能模块。功能模块图如图
5、1.所示。登录模块:用以实现用户登录,判断登录用户的用户名与登录密码是否正确,正确才能进入系统。非用户不能登录系统。护士功能模块:护士进入系统可执行的操作包括三类:病历管理:为前来就诊的病人创建病历记录,并能对错误的病历信息进行删、改操作。检索病历:根据病人的局部信息,选择检索方式从所有病历记录中找到所要查找的病历记录。并可对其进行操作。个人操作:个人操作是所有用户的公共功能。包括修改个人密码和注销登录。系统用户注销登录后,储存在session中的登录状态信息会被清空,必须重新登录系统才能再进行相关操作。医生功能模块:医生进入系统可执行的操作包括三类:病历查看:医生类用户可查看所有病历的记录,
6、并可根据病人提供的部分基本信息检索病历,并可查看病人的处方信息及为就诊病人开具处方。处方管理:可查看所有处方信息,修改个人开具的处方信息。能通过病人病历ID号查看病人的就诊记录。通过医生的ID号查看医生开具的处方记录。管理员功能模块:管理员进入系统可执行的操作主要包括三类:用户管理:对用户的信息进行增删改查。检索用户:根据用户的局部信息,选择检索方式从所有记录中找到所要查找的用户记录。并可对其进行操作。本系统主要采用MVC(JSP+JavaBean+Servlet)开发模式实现。具体实现是用JSP实现界面设计。用Servlet类接收用户的请求,控制调用JavaBean中相应类的功能,实现功能并
7、响应用户的请求。NServlet起控制作用,通过接收参数判断,用户请求的功能,并执行对应操作。当用户提交一个请求,就到Servlet类(NServlet.java)中进行判断并处理然后反馈到用户界面。即NServlet在系统中起控制作用。JavaBean用于封装数据和业务。界面设计:该系统的界面主要是运用了style.css样式。页面结构如图5.所示。页面中用include指令在页面中插入子页面文件。代码实例如下: bannermainleftfooterGlobarlink(包含在header中)Container(最外层盒子)图5.页面结构图3.2 系统功能模块设计图登录(login.ph
8、p)管理员医生护士病历查看处方管理个人操作病历管理检索病历个人操作检索用户用户管理个人操作图6.系统功能模块图3.3数据库设计在该系统中用户需先登录才能进入系统进行,不同用户有不同的权限,需有针对性的进行各种不同操作。所以该系统的数据库中要有相应的表来保存用户的信息。该表中应包含用户的姓名、用户密码、以及用户类型(用以对用户权限的判断,使用户登录后进入自己对应的页面)。在该系统中将保存用户信息的表设为用户信息表(userlist)。在该系统中,护士要为来就诊的病人录入病人的基本信息,并对病人的基本信息进行管理。所以该系统需要为病人建一张表,病历信息表(patient)。用来保存病人的基本信息。
9、在该系统中医生主要操作就是为就诊病人开处方。为储存处方信息,系统中的数据库还需要一个表。处方信息表(cf)医生为病人开处方后,将处方信息入库保存。处方表是病历实体和用户实体之间的联系表。所以处方表中还应包括该处方针对的病历的ID号,以及开具处方的医生ID。综上所述:该系统的数据库应包含三个表,用户信息表、病历信息表及处方信息表。表的结构如表1,表2,表3所示。详细表结构见数据库文件。用户信息表的属性包括用户ID,用户姓名,密码,用户类型,用户性别及所在科室、照片。表1.用户信息表(userlist)列名数据类型长度是否为空说明用户ID号(uid)int4非空主键用户姓名(uname)varch
10、ar20非空密码(upass)varchar20非空用户类型(ukind)varchar20非空用户性别(usex)varchar20非空所在科室(uwork)varchar20非空个人照片(uphoto)varchar20非空病历信息表的属性包括病历ID,姓名,性别,年龄,联系电话,病历添加时间。表2.病历信息表(patient)列名数据类型长度是否为空说明病历ID号(pid)int4非空主键,自动增1姓名(pname)varchar20非空性别(psex)varchar10非空年龄(page)varchar10非空联系电话(ptel)varchar20非空病历添加时间(ptime)date
11、time非空自动获取系统时间处方信息表的属性包括处方、病历、用户的ID号,病情描述,处方,年龄,开方时间。表3.处方信息表(cf)列名数据类型长度是否为空说明处方ID号(cid)int4非空主键,自动增1病历ID号(pid)int4非空主键,自动增1用户(医生)ID号(uid)int4非空主键,自动增1病情描述(reason)varchar500非空处方详情(content)varchar500非空开方时间(ctime)datetime8非空自动获取系统时间4详细设计与实现4.1 登录模块4.1.1功能设计为保护系统中的信息,所有用户通过登录进入系统。在登录页面(login.jsp)输入用户名
12、(本系统的登录用户名为用户ID号)与密码。提交,系统根据用户输入的信息,判断该用户是否为系统中的用户。若是系统中的用户则可进入系统,通过用户的身份使其进入不同的页面。如管理员登录成功后进入用户管理页面(admin.jsp)。在登录页面还包括有帮助和医院门诊规章链接,点击可进入相关页面。除此之外在登陆模块中还包含一个医院宣传图片的播放器。4.1.2界面设计图7. 登录窗口4.1.3模块算法用户填入登录信息点击登录按钮,带参提交到Servlet类中action=NServlet?func=login。在NServlet中接收func参数。通过对参数func进行判断,若func.equals(log
13、in)则接收表单中的数据封装到用户类User的对象u中,通过用户的业务封装类UserDao的对象userdao调用list=userdao.queryAll(); 方法获得数据库中所有的用户记录。通过调用userdao.isExist(u);方法判断用户输入信息是否正确,若输入不正则跳转到nlogin.jsp页面,输出提示信息。若正确则在session中设置登录标记字符为“YES”,从数据库中取出该用户的相关信息,将用户的用户名,用户类型,用户ID号暂存在session中。session.setAttribute(login,YES);session.setAttribute(uname,un
14、ame);session.setAttribute(ukind,ukind);session.setAttribute(uid,uid);然后对用户的身份类型进行判断:并使其进入其对应的页面:if(b.equals(nurse) response.sendRedirect(nurse.jsp); if(b.equals(admin) response.sendRedirect(admin.jsp); if(b.equals(doctor) response.sendRedirect(doctor.jsp); 用户登录后再界面中显示欢迎语句:在top.inc中获取用户名:String uname
15、=(String)session.getAttribute(uname);然后在页面中指定位置显示提示语句:用户:,欢迎回来!4.2 护士功能模块4.2.1功能设计护士功能模块包括的三大功能:病历管理、病历检索、个人操作。病历管理:护士进入系统后的主页面就是显示所有病历记录的页面,与医生主页面相似但最后一列的操作不,在护士主界面能进行的操作 对病历记录进行删除和修改。病历检索:其实可以说这个功能是为病历管理服务的辅助功能。它主要实现的功能是通过病历中的部分信息,选择相应的检索方式。进入检索页面,进行查询。4.2.2界面设计图8.护士功能模块_主页面4.2.3模块算法病历管理:护士用户在页面点击
16、相关操作的链接,提交增删改的请求,(携带判断参数)提交到NServlet类中。在NServlet类通过func参数的判断,调用Patient类中的方法封装数据,调用PatientDao类中的方法封装业务。执行用户请求的操作,并返回提示信息进入不同页面。病历检索:功能与管理员检索用户类似,详细可见管理员功能模块分析。个人操作:个人操作是所有用户的公共功能。修改个人密码和注销登录。系统用户注销登录后,储存在session中的登录状态信息会被清空,必须重新登录系统才能再进行相关操作。4.3 医生功能模块4.3.1功能设计医生功能模块包括的三大功能:病历查询、处方管理、个人操作。因为个人操作时所有用户
17、的公共功能,在前面已经介绍过,所以在这里着重分析前两个功能。病历查询:医生进入系统后的主页面就是显示所有病历记录的页面,见界面设计。该功能与护士管理病历雷同,除了操作不同。在医生界面点击对应病历后面的查看处方操作链接,传递病历ID号到NServlet类中从数据库中查询出该病人的就诊处方记录,链接语句如下:a href=NServlet?func=sc1&pid=最重要的是医生可以通过各种方式,利用病人的基本信息检索病历,并可对检索出来的结果进行操作包括查看处方和为病人开具处方。处方管理:包括三个子功能,查看所有处方、检索病人的开方记录、检索医生的开方记录。查看所有处方与查看所有病历类似。不同的
18、是医生查看的是处方表。在该页面中点击病历编号可查看病人的基本信息。点击医生编号可查看医生的个人信息。查看医生信息与管理员功能模块中查看用户信息功能雷同,详见管理员功能给模块说明。检索病人处方的记录和检索医生的开方记录功能实现方法雷同,都是查询多个表。从结果集中选中所需的信息,显示在表中。具体实现见模块算法分析。个人操作:与护士类型用户相同,详见护士功能模块说明。4.3.2界面设计图9.医生功能模块_主页面图10.查看处方及检索病人处方记录图11.医生为病人开处方图12.查看所有处方4.3.3模块算法医生最重要的功能就是为病人开具处方。病人的基本信息如年龄、性别可能会是医生开处方时须要知道的信息
19、。所以要求医生为病人开具处方时需显示出用户的基本信息。可是在数据库中病历信息和处方信息存储在不同表中。如果要联系在一起,就需要查询病历表得到病人对应病历信息。主要处理步骤:医生点击开具处方操作链接,a href=kcf.jsp?pid=进入kcf.jsp页面,在kcf.jsp获得session中当前用户(医生)的用户名,String doctor=(String)session.getAttribute(uname);从数据库中获得所有病历记录。存到list中。接收从前一页面传来的对应病人病历ID号,与list中的所有记录进行比对,找到该条病历记录。将该病历中的基本信息的值显示在表格中的对应位
20、置。并将当前开具处方的医生姓名也显示在对应开方医生的位置。点击提交后将表单信息传递到NServlet 类中进行处理:action=NServlet?func=addc&pid=从session中获得当前开方医生的Uid,接收上一页面传来的病历ID号,病情描述及处方内容。然后创建处方业务封装类CfDao类的对象调用添加处方的方法执行添加功能。如果处方添加成功跳转到cadd.jsp页面,到如果操作不成功则跳转cadderror.jsp页面。医生为病人开处方时有时候需要查看病人以往生病的记录,所以在该系统中有一个检索病人处方记录的功能。实现的主要步骤:点击链接进入按病历ID号查看处方记录的页面,在表
21、单中输入要查询的病历ID号,点击提交按钮。提交查询请求到NServlet类。action=NServlet?func=sc1在NServlet类中接收传递过来的病历ID号。从三个表中查询sql语句如下:select * from patient,cf,userlist where patient.pid=cf.pid and cf.uid=userlist.uid and cf.pid=+pid+;,调用处方业务封装类CfDao中的select(sql)方法获得查询结果集。将结果集添加到request中,跳转到显示页面:showcf_p.jsp。在显示页面接收结果集,并显示部分结果集中的信息。
22、以下是该页面接收结果集后,对结果集的处理。List list=(List)request.getAttribute(list);for(int i=0;ilist.size();i+)Cf c=(Cf)list.get(i); /取出list中第一条记录强制转换成Cf类型i+; /取出第二条记录,强制转换成Patient类型Patient p=(Patient)list.get(i);i+; /取出第三条记录,强制转换成User类型User u=(User)list.get(i);查看医生开方记录与上述查看病人就诊记录雷同。在这里就不在赘述了。4.3.4调试与测试在整个医生功能模块中,最让我纠
23、结的是处方管理中的检索病人的处方记录和查看医生的开方记录。因为这两个功能都涉及查询多个表都涉及病历表和处方表和用户表。其实查询多个表并不难,难的是结果集的处理。一开始时我的想法是像查询病历那样在处方业务封装类(CfDao.java)中,新建一个方法select用来执行查询语句。然后在页面将查询提交到NServlet中,在NServlet中创建查询语句的对象,创建CfDao类对象调用select(sql)方法,获得结果集。但是在select(sql)方法中,对于执行查询语句所得到的结果集处理。我一直不太懂。刚开始我考虑,以往我们在学数据库的时候,要获得结果中的部分信息时总是用表名.列名调用显示如
24、patient.pid。所以我就采用这种方法获得结果:p.setPid(rs.getInt(patient.pid);结果编译类的时后并没有出错,但是,输出方法返回结果中的属性,发现没有获得值。后来有同学说,要从结果集中取出值要按查询所得得结果,一一对应的去出来,进行封装才可以。而且在接收结果集的页面,取出顺序要与存入顺序对应。后来改过结果集处理方式之后:p.setPid(rs.getInt(1);果然就能获得结果集了。4.4 管理员功能模块4.4.1功能设计管理员功能模块主要是实现对用户的管理。管理员功能模块:管理员进入系统可执行的操作主要包括三类:用户管理,检索用户,个人操作用户管理:对用
25、户的信息进行增删改,如界面设计所示。检索用户:根据用户的局部信息,选择检索方式从所有记录中找到所要查找的用户记录。并可对其进行操作,点击查看用户信息可查看用户(包括相片)的所有基本信息。4.4.2界面设计图13.管理员功能模块_主页面图14.添加用户 图15.检索用户_按科室检索 图16.查看用户信息4.4.3模块算法用户管理:该功能与护士管理病历雷同。管理员用户在页面点击相关操作的链接,提交增删改的请求,到NServlet类中。在NServlet类通过func参数的判断,调用User类中的方法封装数据,调用UserDao类中的方法封装业务。执行用户请求的操作,并返回提示信息进入不同页面。详细
26、实现可参见护士管理病历说明。检索用户:该功能主要是通过点击不同检索方式,进入对应页面。输入用户的部分信息点击进行查询,将表单提交到NServlet类。判断func参数后执行对应查询。不同的检索方式其实方法雷同。在这里以科室、性别进行检索为例进行说明。点击左侧的功能链接进入按科室检索页面如图3.。在下拉列表中选择所在科室,在性别单选框选中性别点击按钮搜索,带参func=us6将表单传到NServlet类。action=NServlet?func=us6在NServlet类中接收表单中的数据,创建sql语句:String sql=select * from userlist where uwork
27、=+uwork+and usex=+usex+;创建UserDao对象userdao调用UserDao 中的select(sql);方法,返回符合条件的用户记录,添加到request中,带参传到ushowselect.jsp显示。select(sql);方法主要算法:创建与数据库的连接;执行sql语句,获得结果集;将结果集记录一条条封装成User类的记录,存放到list中。返回链表list,捕捉异常。关闭数据库连接。添加用户基本信息功能中有一个属性是添加用户的头像。这个属性是基于现实中人员管理的实际来考虑的。主要实现算法如下:在添加用户信息页面中,添加照片这一属性对应的列中设置添加一个file
28、类主键(与文本框、密码框类似)。在其显示框后有一“浏览”按钮,点击该按钮后选中所需要的头像照片。之后提交到NServlet类中,在NServlet中通过判断func参数,确定执行的操作。接收新用户的基本信息(uid等)。但是通过file主键选中了文件传递过来的值是照片的文件名。所以,需要对uphoto属性值进行处理:String photoname=request.getParameter(uphoto);获得头像图片的文件名String path=image/photo/; 头像图片的相对位置String uphoto=path+photoname; 确定头像图片的位置及名字 u.setUp
29、hoto(uphoto);所以在该系统中存入系统的用户的头像图片必须放在固定位置。该系统中用户信息表中用户的照片属性存储的是头像图片的相对路径。4.4.4调试与测试添加用户头像应该算是一个困扰我蛮久的一个疙瘩,在这次的课设中。因为它是一个花费了较多时间的小功能。刚开始考虑到添加用户头像时,对添加图片并没有什么概念。上网找了些资料发现主要有两种方法。一是将图片转化为二进制码存放在数据库中,然后随取随用。二是在数据库中存储图片的相对路径,固定图片存放的位置。用的时候通过路径取图片。Sql servler系列产品中适用于存储图片的有Sql Servler 2005,而我用的数据库是Sql Servl
30、er 2000。我没有找到第一种方法的具体实现过程。而第二种方法比较容易实现,所以我选了后者。然而在之前我也并没有用过file这种主键,不知道它能实现怎样的功用。后来我在测试页面,获得了uphoto传过来的值才发现file获得的是文件名。后来对图片的存储处理就是从这以后才成功的。小结和展望本次课程设计我完成的这个网上门诊管理系统主要是采用了Model2(MVC)模式:JSP+Servlet+JavaBen。之前的综合实验我采用的是Model1模式,Model2(MVC)模式有比Model1模式更优越的开发效率和优点。能实现页面和后台功能的分离,更适合用于开发。但是这次我完成的这个系统还没有完全
31、的实现页面设计和功能的分离,在页面中还是代码。还有因为时间比较紧凑,后面有小部分功能的页面处理并不很如人意,只是着重完成功能。这个系统还有很多不足,和实际运用的系统相差甚远。有技术上的原因也有时间上的原因。但总的来说,此次完成的这个系统还是比较全面的完成完成我预先对这个网上门诊管理系统的功能设置。可以说这次的两周的课程设计,大致上完成情况相对比较圆满。这个学期我们比较系统的学习了软件的开发过程,对整个软件的开发有了一个较为深刻的认识。所以这次在完成这个系统的过程中,脑子里有了比较清晰的概念,先做什么再做什么。在这次的课程设计过程中我们把所学的知识运用到我们开发的系统中,积累了实践的经验。在程序调试的过程中,你会发现有许许多多细如牛毛的问题。比如刚开始为系统建库,实现用户注册往库里添加数据时,从创建数据库连接到执行语句到最后关闭数据库连接这一系列步骤下来但凡中间有一个环节出现什么错误,程序就是没办法实现。在此次的实验中,几乎所有的同学都很是吃了几次类似拼写错误这类的亏。调了半天,最后发现错误就各种纠结。吸取以往课程设计的经验,这次的课程设计我早早就开始着手,就怕后面会赶不及。但是虽然有意识要紧张起来,但总是觉得还有时间没有特别的紧迫感导致后一周的课设任务较为紧凑比较吃力。这个深刻的教训,我们要牢记啊!编程其实并不是那么枯燥乏味的。经过实践,我们总是能发现许多问题,也收获许多。