基于SSM医院病历管理系统的设计与实现
摘要
病历管理系统是医院管理系统的重要组成,在计算机技术快速发展之前,病人或者医生如果想记录并查看自己的健康信息是非常麻烦的,因为在以往病人的健康信息通常只保存在自己的病历卡或者就诊报告中,如果在就诊时想进行查看只能通过观看纸质报告这种方式。但这种方式首先效率很低,因为每位医生或护士的精力是有限的,而且每个病人的病历或就诊报告很容易丢失或者出现破损,从而造成信息的丢失或信息出现错误。所以提高信息的记录及查询效率是很重要的,这样一方面可以保证病人的体验,另一方面医生或者护士也可以避免因为浪费时间造成的效率低下。
进入二十一世纪以来,计算机技术蓬勃发展,人们的生活发生了许多变化。很多时候人们不需要亲力亲为的做一些事情,通过网络即可完成以往需要花费很多时间的操作,这可以提升人们的生活质量。计算机及移动互联技术对人们生活的改变不仅仅包含衣食住行等方面,它在各种领域都对现代生活作出了贡献。本系统前台使用的是HTML技术,后台使用JSP语言和MySQL数据库开发,为各位病人及医务工作者提供了医院公告查询、医生信息查看、患者病情管理等多种功能,让人们不需要再通过拿着自己的纸质病历前往医院就可以进行了历史就诊信息的查看,在极大地满足病人们进行在线健康管理的需求的同时,还在首页中添加了X光片子的查看等功能,让病人用户们可以自行进行X光片子的查看。
关键词:病历管理;JSP;HTML;MYSQL
病历管理系统的实现
前台首界面
用户注册登录
医生信息查看
医生后台首页
医院公告管理
系统架构选择
在确定了项目的主题和研究背景之后,就要确定本系统的架构了。主流的架构有两种,一种是B/S架构,一种是C/S架构。C/S的全称是Client/Server,Client是客户端的意思,Server是服务器的意思,所以C/S架构就是客户端-服务器的模式,我们常用的电脑上的软件比如QQ、微信都是C/S架构的程序。B/S架构的全称是Browser/Server,含义是浏览器-服务器,我们常用的一些网站系统就是属于B/S架构。
本系统的开发框架为B/S架构,与传统的C/S架构相比,它不需要繁琐的安装,并且运行时只需要打开浏览器即可,对电脑的硬件要求和对操作者的要求较低。以往的很多系统使用的都是C/S架构,C/S架构虽然在某些方面表现非常好,但是逐渐被B/S架构取代了,因为C/S架构必须进行安装或者升级之后才可以使用,而B/S架构只需要电脑有浏览器即可使用,所以本系统采用了B/S架构。
系统开发环境
通过本节来介绍本系统的开发环境,开发的环境为个人笔记本电脑,处理器为I5十代,内存为8GB,硬盘为500G固态硬盘,浏览器为谷歌浏览器。用来编程的工具为MyEclipse,它是功能强大的编辑工具,在市面上进行Java和JSP编程时非常流行,具备代码提示、代码自动缩进和换行等基本功能,还能用来对程序进行部署和测试等。用来进行MYSQL编辑的工具为Navicat for MySQL,它非常直观,可以对数据进行导入和导出。
可行性的分析
系统的技术可行性主要是在开发开始前对本系统所使用的开发环境、开发技术等进行分析,对所有可能遇到的问题进行预估等。本系统的开发环境为自己的个人电脑,所有使用的工具都是平时学习时用过的,所用的开发技术大多数都是大学期间学习过的,如果遇到没有涉及的领域可以通过在CSDN、博客园等技术论坛寻找答案,也可以咨询指导老师。所以从技术层面分析,本系统是可行的。
一个系统的经济可行性主要是指网站去除成本后还是否可以盈利,该系统为计算机专业大学生的毕业设计,主要目的是为了使用大学四年所学的知识开发出一个有价值的系统,证明自己可以达到毕业的要求。该项目几乎没有任何成本,因为所有的设备及开发软件都为电脑上已安装的免费版本,该项目为非商业项目,所以从经济可行性上分析,本系统是可行的。
系统的操作可行性也可以被称为运行可行性,主要对系统运行或操作进行分析。在当前这个电脑和手机走入寻常百姓家的时代,不管是成年人还是小朋友都多多少少对电脑和手机操作略知一二,本系统只要有简单的微信操作常识就可以熟练使用,所以说从系统的操作方面是可行的。
部分代码
package com.controller;
import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.entity.Yisheng;
import com.server.YishengServer;
import com.util.PageBean;
import net.sf.json.JSONObject;
import com.util.db;
import java.sql.SQLException;
import java.sql.*;
@Controller
public class YishengController {
@Resource
private YishengServer yishengService;
@RequestMapping("addYisheng.do")
public String addYisheng(HttpServletRequest request,Yisheng yisheng,HttpSession session) throws SQLException{
Timestamp time=new Timestamp(System.currentTimeMillis());
yisheng.setAddtime(time.toString().substring(0, 19));
yishengService.add(yisheng);
db dbo = new db();
//kuabiaogaizhi
return "redirect:yisheng_add.jsp?ok=1";
}
@RequestMapping("addYishengqt.do")
public String addYishengqt(HttpServletRequest request,Yisheng yisheng,HttpSession session) throws SQLException{
Timestamp time=new Timestamp(System.currentTimeMillis());
yisheng.setAddtime(time.toString().substring(0, 19));
yishengService.add(yisheng);
db dbo = new db();
//kuabiaogaizhi
session.setAttribute("backxx", "添加成功");
session.setAttribute("backurl", request.getHeader("Referer"));
return "redirect:postback.jsp";
}
// 处理编辑
@RequestMapping("doUpdateYisheng.do")
public String doUpdateYisheng(int id,ModelMap map,Yisheng yisheng){
yisheng=yishengService.getById(id);
map.put("yisheng", yisheng);
return "yisheng_updt";
}
@RequestMapping("doUpdateYisheng2.do")
public String doUpdateYisheng2(ModelMap map,Yisheng yisheng,HttpServletRequest request){
yisheng=yishengService.getById(Integer.parseInt((String)request.getSession().getAttribute("uid")));
map.put("yisheng", yisheng);
return "yisheng_updt2";
}
@RequestMapping("updateYisheng2.do")
public String updateYisheng2(int id,ModelMap map,Yisheng yisheng,HttpServletRequest request,HttpSession session){
yishengService.update(yisheng);
session.setAttribute("backxx", "修改成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";
}
// 后台详细
@RequestMapping("yishengDetail.do")
public String yishengDetail(int id,ModelMap map,Yisheng yisheng){
yisheng=yishengService.getById(id);
map.put("yisheng", yisheng);
return "yisheng_detail";
}
// 前台详细
@RequestMapping("ysDetail.do")
public String ysDetail(int id,ModelMap map,Yisheng yisheng){
yisheng=yishengService.getById(id);
map.put("yisheng", yisheng);
return "yishengdetail";
}
//
@RequestMapping("updateYisheng.do")
public String updateYisheng(int id,ModelMap map,Yisheng yisheng,HttpServletRequest request,HttpSession session){
yishengService.update(yisheng);
return "redirect:"+request.getHeader("Referer")+"&ok=1";
}
// 分页查询
@RequestMapping("yishengList.do")
public String yishengList(@RequestParam(value="page",required=false)String page,
ModelMap map,HttpSession session,Yisheng yisheng, String yishenggonghao, String yishengxingming, String mima, String xingbie, String zhicheng, String suozaikeshi, String zhuzhizhengzhuang, String zhaopian, String lianxidianhua, String shenfenzheng, String beizhu, String issh){
if(page==null||page.equals("")){
page="1";
}
PageBean pageBean=new PageBean(Integer.parseInt(page), 5);
Map<String, Object> pmap=new HashMap<String,Object>();
pmap.put("pageno", pageBean.getStart());
pmap.put("pageSize", 5);
if(yishenggonghao==null||yishenggonghao.equals("")){pmap.put("yishenggonghao", null);}else{pmap.put("yishenggonghao", yishenggonghao);}
if(yishengxingming==null||yishengxingming.equals("")){pmap.put("yishengxingming", null);}else{pmap.put("yishengxingming", yishengxingming);}
if(mima==null||mima.equals("")){pmap.put("mima", null);}else{pmap.put("mima", mima);}
if(xingbie==null||xingbie.equals("")){pmap.put("xingbie", null);}else{pmap.put("xingbie", xingbie);}
if(zhicheng==null||zhicheng.equals("")){pmap.put("zhicheng", null);}else{pmap.put("zhicheng", zhicheng);}
if(suozaikeshi==null||suozaikeshi.equals("")){pmap.put("suozaikeshi", null);}else{pmap.put("suozaikeshi", suozaikeshi);}
if(zhuzhizhengzhuang==null||zhuzhizhengzhuang.equals("")){pmap.put("zhuzhizhengzhuang", null);}else{pmap.put("zhuzhizhengzhuang", zhuzhizhengzhuang);}
if(zhaopian==null||zhaopian.equals("")){pmap.put("zhaopian", null);}else{pmap.put("zhaopian", zhaopian);}
if(lianxidianhua==null||lianxidianhua.equals("")){pmap.put("lianxidianhua", null);}else{pmap.put("lianxidianhua", lianxidianhua);}
if(shenfenzheng==null||shenfenzheng.equals("")){pmap.put("shenfenzheng", null);}else{pmap.put("shenfenzheng", shenfenzheng);}
if(beizhu==null||beizhu.equals("")){pmap.put("beizhu", null);}else{pmap.put("beizhu", beizhu);}
int total=yishengService.getCount(pmap);
pageBean.setTotal(total);
List<Yisheng> list=yishengService.getByPage(pmap);
map.put("page", pageBean);
map.put("list", list);
session.setAttribute("p", 1);
return "yisheng_list";
}
@RequestMapping("ysList.do")
public String ysList(@RequestParam(value="page",required=false)String page,
ModelMap map,HttpSession session,Yisheng yisheng, String yishenggonghao, String yishengxingming, String mima, String xingbie, String zhicheng, String suozaikeshi, String zhuzhizhengzhuang, String zhaopian, String lianxidianhua, String shenfenzheng, String beizhu, String issh){
if(page==null||page.equals("")){
page="1";
}
PageBean pageBean=new PageBean(Integer.parseInt(page), 5);
Map<String, Object> pmap=new HashMap<String,Object>();
pmap.put("pageno", pageBean.getStart());
pmap.put("pageSize", 5);
if(yishenggonghao==null||yishenggonghao.equals("")){pmap.put("yishenggonghao", null);}else{pmap.put("yishenggonghao", yishenggonghao);}
if(yishengxingming==null||yishengxingming.equals("")){pmap.put("yishengxingming", null);}else{pmap.put("yishengxingming", yishengxingming);}
if(mima==null||mima.equals("")){pmap.put("mima", null);}else{pmap.put("mima", mima);}
if(xingbie==null||xingbie.equals("")){pmap.put("xingbie", null);}else{pmap.put("xingbie", xingbie);}
if(zhicheng==null||zhicheng.equals("")){pmap.put("zhicheng", null);}else{pmap.put("zhicheng", zhicheng);}
if(suozaikeshi==null||suozaikeshi.equals("")){pmap.put("suozaikeshi", null);}else{pmap.put("suozaikeshi", suozaikeshi);}
if(zhuzhizhengzhuang==null||zhuzhizhengzhuang.equals("")){pmap.put("zhuzhizhengzhuang", null);}else{pmap.put("zhuzhizhengzhuang", zhuzhizhengzhuang);}
if(zhaopian==null||zhaopian.equals("")){pmap.put("zhaopian", null);}else{pmap.put("zhaopian", zhaopian);}
if(lianxidianhua==null||lianxidianhua.equals("")){pmap.put("lianxidianhua", null);}else{pmap.put("lianxidianhua", lianxidianhua);}
if(shenfenzheng==null||shenfenzheng.equals("")){pmap.put("shenfenzheng", null);}else{pmap.put("shenfenzheng", shenfenzheng);}
if(beizhu==null||beizhu.equals("")){pmap.put("beizhu", null);}else{pmap.put("beizhu", beizhu);}
int total=yishengService.getCount(pmap);
pageBean.setTotal(total);
List<Yisheng> list=yishengService.getByPage(pmap);
map.put("page", pageBean);
map.put("list", list);
session.setAttribute("p", 1);
return "yishenglist";
}
@RequestMapping("ysListtp.do")
public String ysListtp(@RequestParam(value="page",required=false)String page,
ModelMap map,HttpSession session,Yisheng yisheng, String yishenggonghao, String yishengxingming, String mima, String xingbie, String zhicheng, String suozaikeshi, String zhuzhizhengzhuang, String zhaopian, String lianxidianhua, String shenfenzheng, String beizhu, String issh){
if(page==null||page.equals("")){
page="1";
}
PageBean pageBean=new PageBean(Integer.parseInt(page), 8);
Map<String, Object> pmap=new HashMap<String,Object>();
pmap.put("pageno", pageBean.getStart());
pmap.put("pageSize", 8);
if(yishenggonghao==null||yishenggonghao.equals("")){pmap.put("yishenggonghao", null);}else{pmap.put("yishenggonghao", yishenggonghao);}
if(yishengxingming==null||yishengxingming.equals("")){pmap.put("yishengxingming", null);}else{pmap.put("yishengxingming", yishengxingming);}
if(mima==null||mima.equals("")){pmap.put("mima", null);}else{pmap.put("mima", mima);}
if(xingbie==null||xingbie.equals("")){pmap.put("xingbie", null);}else{pmap.put("xingbie", xingbie);}
if(zhicheng==null||zhicheng.equals("")){pmap.put("zhicheng", null);}else{pmap.put("zhicheng", zhicheng);}
if(suozaikeshi==null||suozaikeshi.equals("")){pmap.put("suozaikeshi", null);}else{pmap.put("suozaikeshi", suozaikeshi);}
if(zhuzhizhengzhuang==null||zhuzhizhengzhuang.equals("")){pmap.put("zhuzhizhengzhuang", null);}else{pmap.put("zhuzhizhengzhuang", zhuzhizhengzhuang);}
if(zhaopian==null||zhaopian.equals("")){pmap.put("zhaopian", null);}else{pmap.put("zhaopian", zhaopian);}
if(lianxidianhua==null||lianxidianhua.equals("")){pmap.put("lianxidianhua", null);}else{pmap.put("lianxidianhua", lianxidianhua);}
if(shenfenzheng==null||shenfenzheng.equals("")){pmap.put("shenfenzheng", null);}else{pmap.put("shenfenzheng", shenfenzheng);}
if(beizhu==null||beizhu.equals("")){pmap.put("beizhu", null);}else{pmap.put("beizhu", beizhu);}
int total=yishengService.getCount(pmap);
pageBean.setTotal(total);
List<Yisheng> list=yishengService.getByPage(pmap);
map.put("page", pageBean);
map.put("list", list);
session.setAttribute("p", 1);
return "yishenglisttp";
}
@RequestMapping("deleteYisheng.do")
public String deleteYisheng(int id,HttpServletRequest request,HttpSession session){
yishengService.delete(id);
return "redirect:"+request.getHeader("Referer")+"?ok=2";
}
@RequestMapping("quchongYisheng.do")
public void quchongYisheng(Yisheng yisheng,HttpServletResponse response){
Map<String,Object> map=new HashMap<String,Object>();
map.put("yishenggonghao", yisheng.getYishenggonghao());
System.out.println("yishenggonghao==="+yisheng.getYishenggonghao());
System.out.println("yishenggonghao222==="+yishengService.quchongYisheng(map));
JSONObject obj=new JSONObject();
if(yishengService.quchongYisheng(map)!=null){
obj.put("info", "ng");
}else{
obj.put("info", "医生工号可以用!");
}
response.setContentType("text/html;charset=utf-8");
PrintWriter out=null;
try {
out=response.getWriter();
out.print(obj);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
out.close();
}
}
}
测试
本系统在进行测试的时候选择的主要是自己的电脑,为了保证测试的严谨性也借用了同学的电脑进行测试。性能在整个软件测试阶段是非常重要的,我选择了LoadRunner作为性能测试的工具。LoadRunner的使用非常简单,首先需要在LoadRunner中录入自己要操作的功能脚本,然后输入测试次数就可以进行重复的性能测试了。除了使用自动化测试工具之外,大部分的性能测试都是通过多打开几个浏览器窗口进行的,比如测试多人同时访问网站、多人同时进行下单的操作。接下来以用户注册模块为例对本系统的单元测试进行讲解,以下为用户注册模块的测试用例及测试结果:
1. 用户名:123456 密码123456 确认密码123456
第一条测试数据预期的结果为注册失败,预期的错误提示为用户名必须由六位及以上的字符组成且第一位不能是数字。经过使用LoadRunner的多次自动化测试,最终结果均在预期的结果之中。
2. 用户名:zhangsan密码123 确认密码123
对于本系统的注册功能来说,密码必须由六位以上的字符组成,但测试数据中的密码长度为三位。所以,第二条测试数据的预期测试结果为失败,提示信息为密码长度不能少于六位。经过多次测试,本条测试用例所属的模块不存在缺陷。
3. 用户名:zhangsan 密码123456 确认密码12345
本系统的注册功能使用的表单验证为JavaScript验证,在密码和确认密码这两个密码框中使用了比较验证,JavaScript会比较用户输入的这两个值,如果两者不一致,在浏览器端就无法通过验证,预期的结果为注册失败,错误提示信息为密码与确认密码不一致。经过测试,本模块所对应的代码不存在缺陷。
4. 用户名:zhangsan密码123456 确认密码123456
本条测试数据符合本系统对账号的格式要求,预期的测试结果为注册成功,并跳转到用户首页,而最终的测试结果也与之相符。