基于SSM框架--医疗信息管理系统

目录

实现:

实现用户管理中的用户添加功能

药品信息管理--查询

总结


初步完成一个医疗信息系统的系统框架,设计简单功能:

  1)完成用户登录模块,并实现用户密码修改功能,运行查看其结果;

  2)完成用户管理模块,实现查询用户功能,运行查看其结果;

  3)  完成部分功能的增删查改;

因为时间关系,目前只实现了用户登录、退出登录、修改密码、用户管理中查询与用户信息添加、药品信息管理--查询、科室管理--查询、会员管理查询;只展示部分代码模块

在实现功能之前,了解SSM框架各层资源包:

在 SSM(Spring + Spring MVC + MyBatis)框架中,资源包通常采用分层的结构来存储不同类型的组件。下面是不同资源包的含义及其存储的内容:

  1. 1. Controller层:存储应用程序的控制器,负责处理请求和响应
  2. 2. mapper.Java:存储MyBatis的Mapper接口,提供了访问数据库操作的方法
  3. 3. mapper.xml:存储MyBatis的映射文件,提供Java类和SQL语句之间的映射
  4. 4. pojo:存储数据对象,即Java类,通常与数据库中的表相对应
  5. 5. Service:存储服务层组件,提供业务逻辑的实现
  6. 6. ServiceImpl:存储服务层的实现类,实现Service接口提供的业务逻辑

实现:

实现用户管理中的用户添加功能

在Controller层中的UserController中设置一个方法名为insertUserssm,其功能是实现其作用是将传入的HttpServletRequest对象中的id,username,password等参数值提取出来,并将这个值设置到Userssm1对象的id,username,password属性中,最终返回更新后的Userssm1对象

该方法接收两个参数:HttpServletRequest类型的request对象和Userssm1类型的userssm对象.其作用方式如id:它首先通过request.getParameter("id")方法从请求中获取id参数值(以字符串形式),然后调用userssm.setId()方法将其设置到Userssm1对象的id属性中。最后,方法返回更新后的Userssm1对象;

再在Controller层中设置一个Spring MVC的控制器方法。当用户访问路径为“/addUserList”的页面并提交表单数据时,该方法将被调用。该方法使用HttpServletRequest对象来从HTTP请求中获取信息,并使用@ModelAttribute注释来将表单数据绑定到Userssm1对象。然后它通过调用名为insertUserssm的私有方法来插入新的Userssm1对象,并使用MyBatis持久性层框架将其插入数据库中.最后,该方法返回字符串“adminList”,以便将用户重定向到管理列表页面.

	public Userssm1 insertUserssm(HttpServletRequest request, Userssm1 userssm) {
		
		userssm.setId(request.getParameter("id"));
		userssm.setUsername(request.getParameter("username"));
		userssm.setPassword(request.getParameter("password"));
		userssm.setRealname(request.getParameter("realname"));
		userssm.setRole(request.getParameter("role"));
		userssm.setAge(request.getParameter("age"));
		userssm.setTel(request.getParameter("tel"));
		userssm.setAddress(request.getParameter("address"));

		return userssm;
	}
	
	@RequestMapping(value = "/addUserList")
	public String addUserList(HttpServletRequest request,
			@ModelAttribute("userssm1") Userssm1 userssm){
		
		Userssm1 userssm1 = insertUserssm(request, userssm);
		
		
		SqlSession openSession = sqlSessionFactory.openSession();
		Userssm1Mapper mapper = openSession.getMapper(Userssm1Mapper.class);
		mapper.insert(userssm1);
		openSession.close();
		
		return "adminList";
	}
	

在Userssm1Mapper.java中将int insert(Userssm1 record);改为void类型不需要返回值;

  void insert(Userssm1 record);

在pojo资源包中添加user对象属性:

package com.inspur.ssm.pojo;

import java.math.BigDecimal;
import java.sql.Date;

public class Userssm1 {
    private String id;

    private String username;

    private String password;

    private String role;

    private String realname;

    private String tel;

    private String age;

    private String sex;

    private String address;

    private Date createdate;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role == null ? null : role.trim();
    }

    public String getRealname() {
        return realname;
    }

    public void setRealname(String realname) {
        this.realname = realname == null ? null : realname.trim();
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel == null ? null : tel.trim();
    }

    public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }

    public Date getCreatedate() {
        return createdate;
    }

    public void setCreatedate(Date createdate) {
        this.createdate = createdate;
    }
}

在UserService层封装一个应用程序的业务逻辑,插入数据的方法进行封装

@Resource
public interface UserService {
	
	void insert(Userssm1 record);

}

在UserServiceImpl中对UserService中的插入方法进行实现;在 UserServiceImpl 层中,可以调用 DAO 层提供的方法获取需要的数据,并对这些数据进行处理和业务逻辑的实现

@Service("userService")
public class UserServiceImpl implements UserService{
	@Autowired
	private Userssm1Mapper userssm1Mapper;
	
	@Override
	public void insert(Userssm1 record) {
		// TODO Auto-generated method stub
		return ;
	}
	
}

在jsp中创建一个名为adminadd.jsp页面,使用组件进行代码;在<form>标签的action属性中指定将在表单提交时向其发送数据的服务器端页面的URL地址为${ctx}/user/addUserList.action,当用户提交表单时,数据将被发送到 ${ctx}/user/addUserList.action 这个URL上.然后由服务端处理这些数据,并做出相应的响应.

<div id="contentWrap">
	<!--表格控件 -->
  <div id="widget table-widget">
    <div class="pageTitle">用户管理</div>
    <div class="querybody" >
    <form name="queryForm" action="${ctx}/user/queryUserList.action" method="post">
	    <ul class="seachform" >
	    <li><label>用户ID</label><input id="id" name="id" type="text" value="${userssm.id}" class="scinput" /></li>
	    <li><label>用户名称</label><input id="username" name="username" type="text" value="${userssm.username}" class="scinput" /></li>
        <li><label>用户类型</label>  
		    <select id="role" name="role" style="width:150px;height:32px;" >
				<c:forEach items="${roleList}" var="role" >
					<option value="${role.BM}" <c:if test="${userssm.role eq role.BM}">selected</c:if>>${role.MC}</option>
				</c:forEach>
			</select>
	    </li>
	    <li><label>&nbsp;</label><input type="submit" class="scbtn" value="查询" /></li>
	    </ul>
	</form>
	</div>
    <div class="pageColumn">
      <div class="pageButton"><a href="${ctx}/jsp/adminadd.jsp"><img src="${ctx}/images/t01.png" title="新增"/></a><span>用户列表</span></div>
      <table>
        <thead>
	          <th width="">用户ID</th>
	          <th width="">用户名</th>
	          <th width="">姓名</th>
	          <th width="">用户类型</th>
	          <th width="">联系电话</th>
	          <th width="">年龄</th>
	          <th width="">家庭住址</th>
	          <th width="10%">操作</th>
        </thead>
        <tbody>
           <c:forEach items="${userList}" var="user">
				<tr>
					<td>${user.id}</td>
					<td>${user.username}</td>
					<td>${user.realname}</td>
					<td>${user.role eq 01 ? "管理员":user.role eq 02 ? "大堂服务员": user.role eq 03 ? "药剂师": "未知"}</td>
					<td>${user.tel}</td>
					<td>${user.age}</td>
					<td>${user.address}</td>
					<td><a onclick="modify(id)"><img src="${ctx}/images/icon/edit.png" width="16" height="16" /></a>
	         			<a onclick="deletes(id)"><img src="${ctx}/images/icon/del.png" width="16" height="16" /></a></td>
				</tr>
			</c:forEach>
        </tbody>
      </table>
      <jsp:include page="common/includefoot.jsp">
		  <jsp:param name="url" value="/user/queryUserList.action" />					
	  </jsp:include>
    </div>
  </div><!-- #widget -->
</div>

药品信息管理--查询

创建一个Java Spring MVC 的控制器类,名为 DruController继承了PageController类.使用@Controller 注解表示这是一个控制器类,负责处理前端请求并返回响应.@RequestMapping("/Dru") 注解指定了该控制器下所有处理请求的URL前缀为 "/Dru";该类使用了@Autowired注解注入了一个DruService对象.该类中有一个名为queryDruList的方法,使用了@RequestMapping注解,用于处理请求路径为"/queryDruList"的请求.该方法中首先调用了CommonUtil类的getCode方法获取系统角色列表,然后根据前端传递的查询条件,调用druService的getCounts方法获取符合条件的记录总数,并根据记录总数设置了分页对象.接着根据前端传递的排序条件,调用druService的getDruList方法获取符合条件的药品列表,并将结果集存入request中,最后返回"yplist"字符串,表示使用名为yplist的JSP页面进行展示;

@Controller //注解表示这是一个控制器类
@RequestMapping("/Dru") //注解指定了该控制器下所有处理请求的URL前缀为 "/Dru"
public class DruController extends PageController {
	@Autowired //注解注入了一个DruService对象
	private DruService druService;
	@RequestMapping("/queryDruList")
	public String findDruList(HttpServletRequest request,@ModelAttribute("drugs") Drugs drugs) {
		List<Map<String, Object>> roleList = CommonUtil.getCode("system_role", true, "asc");
		Map<String,Object> params = new HashMap<String,Object>(); 
		//添加查询条件
		params.put("drugsid",drugs.getDrugsid());
		
		if(!StringUtil.isEmptyString(drugs.getName())) {
			params.put("name", drugs.getName());
		}
		//获取总条数
		Long totalCount = druService.getCounts(params);
		//设置分页对象
		Page page = executePage(request,totalCount);
		//如排序
		if(page.isSort()){
			params.put("orderName",page.getSortName());	
			params.put("descAsc",page.getSortState());
		}else{
		//没有进行排序,默认排序方式
			params.put("orderName","id");	
			params.put("descAsc","desc");
		}
		//压入查询参数:开始条数与结束条灵敏
		params.put("startIndex", page.getBeginIndex());
		params.put("endIndex", page.getEndinIndex());
		
		//查询集合
		List<Drugs> Drug = druService.getDruList(params);
		request.setAttribute("druList", Drug);
		request.setAttribute("roleList", roleList);
		
		return "yplist";
	}

}

创建一个名为“DrugsMapper”的Java接口,它定义了两个方法:

getDruList(Map<String,Object> params)——这个方法根据给定的参数返回drug对象的列表。Map<String, Object>参数允许向查询传递多个参数,该方法将返回符合指定条件的drug对象列表.

getCounts(Map<String,Object> p)——该方法接受Map对象作为参数,并根据指定的搜索条件返回记录的总数。通过确定需要在每个页面上显示的记录数量,并计算显示所有结果所需的总页数,可以使用它来实现分页功能.

    public List<Drugs> getDruList(Map<String,Object> params);
  //分页总条数  
    public Long getCounts(Map<String,Object> p); 

创建一个名为"DruService"的接口,包含两个方法:

getDruList: 该方法返回药物列表(List<Drugs>),其中参数params是一个java.util.Map类型的对象,用于传递查询条件.

getCounts: 该方法返回满足查询条件的药物总条数(Long)。其中参数p也是一个java.util.Map类型的对象,用于传递查询条件.

public interface DruService {
	
	public Long getCounts(Map<String, Object> params);
	
	public List<Drugs>  getDruList(Map<String, Object> params);
	
}

创建一个DruServiceImpl,它实现了一个接口DruService。 @Service("druService")注解指定了这个类是一个服务,且其在IOC容器中的名称为"druService".

这个类使用了注解@Autowired注入了一个名为drugsMapper的依赖项。该DrugsMapper 是一个数据访问对象(DAO),用于从数据库中获取药品信息的查询.

getCounts和getDruList 两个方法是DruService 接口中定义的抽象方法,该类重写了这些方法并提供了具体实现,其中调用了Dao层的方法来执行操作.

@Service("druService")
public class DruServiceImpl implements DruService {
	@Autowired
	private DrugsMapper drugsMapper; 
	@Override
	public Long getCounts(Map<String, Object> params) {
		// TODO 自动生成的方法存根
		return drugsMapper.getCounts(params);
	}

	@Override
	public List<Drugs> getDruList(Map<String, Object> params) {
		// TODO 自动生成的方法存根
		return drugsMapper.getDruList(params);
	}

}

”DrugsMapper.xml中实现sql语句:

  <sql id="query_user_where">
    <if test="drugsid!='' and drugsid != null">
		and t.drugsid  like '%${drugsid}%'
	</if>
	<if test="name != ''  and name != null">
		and t.name like '%${name}%'
	</if>
  </sql>
  
  <select id="getCounts" resultType="long" parameterType="java.util.HashMap"> 
  	   select count(*) from drugs  t   
  	   <where>
			<include refid="query_user_where"></include>
		</where>
  </select> 
  
  <select id="getDruList"  resultType="java.util.List" resultMap="BaseResultMap" parameterType="java.util.HashMap">  
     <!-- include refid="com.inspur.ssm.mapper.CommonMapper.pagingTop"></include>	 -->
	     select * from drugs t
	     <where>
			<include refid="query_user_where"></include>
		</where>
	 <!--  <include refid="com.inspur.ssm.mapper.CommonMapper.pagingBottom"></include>-->
  </select>

<sql id="query_user_where">...</sql>:定义一个 SQL 片段,ID 为 query_user_where。

<if test="drugsid!='' and drugsid != null">...</if>:如果 drugsid 不为空或不为 null,就加入一个过滤条件,其值包含指定的 drugsid.

<if test="name != ''  and name != null">...</if>:如果 name 不为空或不为 null,就加入一个过滤条件,其值包含指定的 name.

所以,该查询语句的作用是:根据输入的 drugsid 和 name 条件筛选用户信息,并返回符合筛选条件的结果.这是一种动态拼接 SQL 查询语句的方式.

查询数据库中名为"drugs"的表中符合特定条件的数据行数。条件是通过使用名为 "query_user_where" 的地方引用内的查询语句来指定的。这一查询操作使用一个名为"getCounts" 的标识符进行定义,该标识符是一个使用Java HashMap作为参数类型,并返回长整型数值的 SQL 查询语句。具体而言,它将返回符合特定条件的数据行的总数(即计数)

从数据库中查询药品列表.

id="getDruList":定义了此查询语句的标识符.

resultType="java.util.List":定义了结果类型为java.util.List列表.

resultMap="BaseResultMap":该查询语句将使用BaseResultMap映射结果到药品实体类.

parameterType="java.util.HashMap":指定传递给该查询语句的参数类型为java.util.HashMap.

<where>和</where>之间包含一个<include>元素,引用了一个名为query_user_where的外部SQL片段,用于构建WHERE子句来过滤药品.

SQL查询语句: select * from drugs t where ... 输出所有药品( t是别名 );

最后:

在jsp资源包中添加jsp页面命名为”yplist.jsp

在这个JSP页面中使用<c:forEach>标签,用于循环遍历druList集合中的每个元素,并将每个元素的属性值显示在表格中的每一列中。具体来说,代码中的items属性指定了要遍历的集合为druList,var属性指定了当前遍历的元素名为dru。在循环体中,使用EL表达式{dru.drugsid}、dru.drugsid、{dru.name}等获取了dru对象的各个属性值,并将其分别显示在表格的不同列中

<div id="contentWrap">
	<!--表格控件 -->
  <div id="widget table-widget">
    <div class="pageTitle">药品管理</div>
    <div class="querybody">
	    <form name="queryForm" action="${ctx}/Dru/queryDruList.action" method="post">
	    	<ul class="seachform" >
		    <li><label>药品ID</label><input name="drugsid" type="text" class="scinput" /></li>
		    <li><label>药品名称</label><input name="name" type="text" class="scinput" /></li>
		    <li><label>&nbsp;</label><input name="" type="submit" class="scbtn" value="查询"/></li>
	    </ul>
	    </form>
	</div>
    <div class="pageColumn">
      <div class="pageButton"><a href="ypAdd.html"><img src="../images/t01.png" title="新增"/></a><span>药品列表</span></div>
      <table>
        <thead>
          <th width="">药品ID</th>
          <th width="">药品名称</th>
          <th width="">进价</th>
          <th width="">售价</th>
          <th width="">库存数量</th>
          <th width="">引入日期</th>
          <th width="">生产厂商</th>
          <th width="">生产日期</th>
          <th width="">保质期</th>
          <th width="">供货单位</th>
          <th width="10%">操作</th>
          <th width="10%">库存新增</th>
        </thead>
        <tbody>
        	<c:forEach items="${druList}" var="dru">
        		<tr>
        			<td>${dru.drugsid}</td>
        			<td>${dru.name}</td>
        			<td>${dru.purchaseprice}</td>
        			<td>${dru.price}</td>
        			<td>${dru.num}</td>
        			<td>${dru.introducedate}</td>
        			<td>${dru.productunit}</td>
        			<td>${dru.productdate}</td>
        			<td>${dru.qualityperiod}</td>
        			<td>${dru.supplyunit}</td>
        			<td><a onclick="modify(id)"><img src="${ctx}/images/icon/edit.png" width="16" height="16" /></a>
	         			<a onclick="deletes(id)"><img src="${ctx}/images/icon/del.png" width="16" height="16" /></a></td>
        			<td><a onclick=""><img src="${ctx}/images/icon/edit2.png" width="16" height="16" /></td>
        		</tr>
        	</c:forEach>
        </tbody>
      </table>
      <jsp:include page="common/includefoot.jsp">
      		<jsp:param value="/user/queryMemList.action" name="url"/>
      </jsp:include>  
    </div>
  </div><!-- #widget -->
</div>

总结

本次实验主要是使用SSM框架(Spring+SpringMVC+Mybatis)开发医疗信息系统,通过实践掌握SSM框架的使用和应用,同时深入了解医疗信息系统的设计和开发。

在实验中,我首先进行了系统的需求分析和设计,明确了系统的功能模块和流程,确定了系统的数据库设计和数据表结构。然后,我使用Maven构建了项目,并引入了SSM框架的相关依赖。

接着,我使用Spring框架搭建了系统的核心容器,并配置了SpringMVC框架的DispatcherServlet,实现了请求的转发和响应。同时,我使用Mybatis框架进行数据持久化操作,实现了对数据库的增删改查等操作。

在实现具体功能模块时,我采用了面向对象的编程思想,使用Java语言编写了相应的业务逻辑代码,并进行了测试和调试,确保系统的稳定性和可靠性。

最后,我对整个系统进行了部署和调试,并进行了性能测试和优化,确保系统的高效性和可扩展性。

通过本次实验,我深入了解了SSM框架的使用和应用,掌握了医疗信息系统的设计和开发方法,提高了自己的编程能力和实践经验。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
基于ssm框架医疗诊治信息管理系统是一种集成了丰富的功能模块和技术特性的全面性解决方案。该系统具有高效性、精确性和安全性等优点,可以为医疗机构提供全面的信息管理服务。 该系统利用ssm框架实现了各个功能模块之间的无缝协作,有效提升了系统的运行速度和数据处理效率。同时,该系统具备完善的安全防护措施和数据备份功能,能够确保数据的安全性和完整性。 在具体实现上,该系统主要包括患者信息管理、医生信息管理、药品信息管理、门诊、住院、检查、治疗等功能模块。患者信息管理模块主要用于记录患者的基本信息和就诊记录,方便医护人员对患者信息进行查询和维护;医生信息管理模块用于记录医生的基本信息和科室信息,方便医护人员进行排班和管理;药品信息管理模块可以方便医护人员对门诊和住院所需药品进行管理和调配。 门诊、住院、检查、治疗等模块则是该系统的核心功能模块,包括丰富的电子病历功能、医嘱管理、检查与治疗计划制定、药品使用管理等。这些功能模块可以有效提高医疗机构的诊疗质量和效率,为医疗机构提供优质的信息管理和服务。 总之,基于ssm框架医疗诊治信息管理系统是一款高效、安全、可靠的全面性解决方案,可以大大提高医疗机构的信息管理和运行效率。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值