基于Java web的敬老院管理系统

1.系统简要概述

此系统采用java语言,利用java web技术设计而成,主要涉及的内容有:JSP、JavaBean、Servlet、JDBC、Tomact,数据库语言采用的是mysql,另外对echart、MD5加密校验、以及在线接收短信验证技术,也有所运用。此系统难度适中,对标高校平常的课程设计以及毕业设计。

2.系统主要用到的数据库表(列举三个)

admins(管理员、护工) 管理员相关信息

老人信息表

老人每日健康打卡信息表

3.主要功能

此系统分为管理端和用户端。管理端主要是后台管理员,负责全院人员信息的维护,护工主要功能是对负责的老人每日健康上报,和记录老人的需求等,总的功能框架见下图。

部分功能详细实现:

3.1系统用户管理

在敬老院系统中,系统用户管理算时最基本的功能。因为里面要设置护工信息,随时登记护工的信息,所以在这个基础功能中主要包括查询系统用户、增加系统用户,以及适当的进行修改等几个模块。

3.2老人信息管理

敬老院的主要面向对象就是老人,所以对老人的管理贯穿在整个系统之中,首先老人信息管理包括系统管理员管理和护工管理。其中系统管理员的功能包括老人入院信息登记,查看院里全部老人分布信息,护工的功能包括老人健康信息上报,查看老人信息,以及反馈老人意见到系统等。

3.3疾病记录管理

老人在院里的健康记录非常重要,是评估老人身体发展的一项重大指标,在日常生活中,老人会生病,这时候就需要系统管理员详细的记录老人的疾病状况。

3.4健康数据管理

健康数据管理是此系统的一项重大功能,此功能可以反应近期老人的部分重要健康指标,主要包括血氧饱和度,心率以及体温变化情况。管理员以可视化查询指定老人的健康指标,对近期老人的健康是否有异常能够清晰透彻的观察到。

4.具体实现效果

登录页面:

管理员或护工在使用系统时必须要顺利登录到系统中。在这里有两种登录方式,一种是需要提供账号和密码,另外一种是以手机号接收验证码方式登录。无论哪种都需要提供正确的账号和密码信息,同时在验证中生成动态验证码对用户信息进行验证。如果不正确,提示输入信息有误,请重新输入,如果正确则成功登录系统,并根据登录的用户名不同而进入相应的用户功能界面,具备不同的操作权限。登录界面如图所示。

系统用户管理

系统用户管理是后端管理员管理护工的一项功能,包括护工信息的查看和修改,新增护工信息等。

老人信息汇总

为了达到可视化的效果,此功能接入了Echarts接口,将院里的老人以统计表的形式呈现在网页上面,其效果图如图所示。

健康数据管理

5.代码部分

登陆

login.jsp

<%@ page language="java" import="java.util.*"
	contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link href="css/login.css" rel="stylesheet" rev="stylesheet"
	type="text/css" media="all" />
<link href="css/demo.css" rel="stylesheet" rev="stylesheet"
	type="text/css" media="all" />
<link rel="stylesheet" href="css/bootstrap.min.css" />
<link rel="stylesheet" href="css/bootstrap-datetimepicker.min.css" />
<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<style type="text/css">
#login {
	width: 450px;
	height: 100px;
	margin: 126px auto;
}

#btn {
	margin-left: 128px;
	margin-top: 3px;
	width: 112px;
	height: 27px;
	font-size: 10px;
	background: #eef3f8;
	text-align: center;
}

body {
	background-color: #ecfcf9;
}
</style>
</head>
<script type="text/javascript">
	var InterValObj; //timer变量,控制时间
	var count = 60; //间隔函数,1秒执行
	var curCount; //当前剩余秒数
	function sendMessage() {
		curCount = count;
		$("#btn").attr("disabled", "true");
		$("#btn").val(curCount + "秒后可重新发送");
		InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次请求后台发送验证码 TODO
	}
	//timer处理函数
	function SetRemainTime() {
		if (curCount == 0) {
			window.clearInterval(InterValObj); //停止计时器
			$("#btn").removeAttr("disabled"); //启用按钮
			$("#btn").val("重新发送验证码");
		} else {
			curCount--;
			$("#btn").val(curCount + "秒后可重新发送");
		}
	}
</script>
<body>
	<div style="background-color: ghostwhite; height: 60px; margin: 3px;">
		<h1 align="left" style="margin-left: 120px;">
			敬老院信息管理系统 <span style="font-size: 10px;  margin-left: 880px;">欢迎光临</span>
		</h1>

	</div>
	<div class="banner">

		<div class="login-aside">
			<div id="o-box-up"></div>
			<div id="o-box-down" style="table-layout:fixed;">
				<div class="error-box"></div>
				<p style="margin-top: -15px;">
					<a href="index.jsp "
						style="font-size: 10px; color:#ffb707; margin-left: 200px;">账号密码登录</a>
				</p>
				<form class="registerform" action="AdminServlet?method=lojin2 "
					method="post">
					<div class="fm-item">
						<label for="logonId" class="form-label">手机号:</label> <input
							type="text" maxlength="100" id="phone" name="phone"
							class="i-text" placeholder="输入手机号">
						<div class="ui-form-explain"></div>
					</div>

					<div class="fm-item">
						<label for="logonId" class="form-label">验证码:</label>
						<div class="col-sm-3">
							<input type="text" maxlength="100" name="code" class="i-text"
								placeholder="输入6位验证码"> <input class="btn btn-default"
								id="btn" name="btn" value="发送验证码" onclick="sendMessage()" />
						</div>
						<div class="ui-form-explain"></div>
					</div>



					<div class="fm-item">
						<label for="logonId" class="form-label"></label> <input
							type="submit" value="登录" name="submit" class="btn_btn" id="sub" />
						<!-- <input type="submit" value="" tabindex="4" id="send-btn" class="btn-login">-->
						<div class="ui-form-explain"></div>
					</div>

				</form>

			</div>

		</div>

		<div class="bd">
			<ul>
				<li
					style="background:url(images/bg2.png) #CCE1F3 center 0 no-repeat ; background-size: 100% 100%;"></li>
				<!-- <li style="background:url(themes/bg.png) #BCE0FF center 0 no-repeat; background-size: 100% 100%;"></li> -->
			</ul>
		</div>

		<!-- <div class="hd"><ul></ul></div> -->
	</div>
	<!-- <script type="text/javascript">jQuery(".banner").slide({ titCell:".hd ul", mainCell:".bd ul", effect:"fold",  autoPlay:true, autoPage:true, trigger:"click" });</script> -->


	<div class="banner-shadow"></div>

	<div class="footer">
		<p>
			Copyright &copy; 2023.Company name All rights reserved.<a
				target="_blank" href="index.jsp">敬老院信息管理系统v1.0</a>
		</p>
	</div>

</body>
<script type="text/javascript">
	var sms = "";
	$("#btn").click(function() {
		var phone = $("#phone").val();
		var method = "tel_login"
		if (phone != "") {
			$.ajax({
				url : "AdminServlet", //发送请求 
				async : true,
				type : "post",
				data : {
					"phone" : phone,
					"method" : method
				},
				success : function(result) {
					sms = result;

				}
			});
		} else {
			alert("请输入手机号");
			return false;
		}
	});
</script>
<script type="text/javascript">

	$("#sub").click(function() {
		var phone = $("#phone").val();
		if (phone == "") {
			alert("请输入手机号");
			return false;
		}
	});
</script>
</html>

AdminServlet

//登录
	private void Login(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		// TODO 自动生成的方法存根
		ComBean cBean = new ComBean();
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		HttpSession session = request.getSession();  
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String entrypassword=MD5util.encrypt(password);//对密码进行加密
		System.out.print(entrypassword);
		String rember=request.getParameter("rember");//获取是否记住密码
		String piccode=(String) request.getSession().getAttribute("piccode");
		String checkCode=request.getParameter("checkCode");//取前端值
		checkCode=checkCode.toUpperCase();//把字符全部转化为大写的(用于验证码不区分大小写)
		//判断
		if(username.equals("")||password.equals("")){
			out.print("<script>" +
					"alert('请输入信息!');" +
					"window.location.href=\"index.jsp\";" +
					"</script>");
			return;
		}

		String sf = request.getParameter("sf");
		if(!username.equals("")&&!password.equals("")&&sf==null){
			out.print("<script>" +
					"alert('请选择登录身份!');" +
					"window.location.href=\"index.jsp\";" +
					"</script>");
			return;
		}

		String sql="select realname from admin where username='"+username+"' and  password='"+entrypassword+"'  and  sf='"+sf+"' ";
		String str=cBean.getString(sql);
		if(str==null){
			//request.setAttribute("message", "登录信息错误!");
			out.print("<script>" +
					"alert('账号或密码错误,请重新输入!');" +
					"window.location.href=\"index.jsp\";" +
					"</script>");
			return;
			//			request.getRequestDispatcher("index.jsp").forward(request, response); 
		}
		if(!checkCode.equals(piccode)){
			out.print("<script>" +
					"alert('登录失败!验证码有误');" + 
					"window.location.href=\"index.jsp\";"+
					"</script>");
			return;
		}
		else{
			session.setAttribute("user", username); 
			session.setAttribute("sf", sf); 
			//			if("1".equals(rember)){
			//				//创建2个Cookie
			//				Cookie namecookie=new Cookie("username", username);
			//				//设置Cookie的有效期为三天
			//				namecookie.setMaxAge(60*60*24*3);
			//				Cookie pwdcookie=new Cookie("password", entrypassword);
			//				pwdcookie.setMaxAge(60*60*24*3);
			//				response.addCookie(namecookie);
			//				response.addCookie(pwdcookie);
			//			}
			//out.print("登陆成功!");
			out.print("<script>" +
					"alert('登录成功!');" + 
					"window.location.href=\"admin/index.jsp\";"+
					"</script>");
			//request.getRequestDispatcher("admin/index.jsp").forward(request, response); 
		}			
	}

UserServlet

//添加老人打卡信息

	private void Adddk(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		// TODO 自动生成的方法存根
		String date=new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
		ComBean cBean = new ComBean();
		String hg=request.getParameter("hg");
		//System.out.print(hg);
		PrintWriter out=response.getWriter();
		String xm=request.getParameter("xm");
		String cw=request.getParameter("cw");
		String tw=request.getParameter("tw");
		String xy=request.getParameter("xy");
		String xl=request.getParameter("xl");
		String yc=request.getParameter("yc");
		String ms=cBean.getString("select xm from lr where cw='"+cw+"'");
		String yf=date.substring(5, 7);
		System.out.print(yf);
		//需求
		//根据日期设置sum值  截取第6和第7位  月份  
		//获取月份  与表里对比 当没有时  设置上一个月份的sum全为0  这样可以统计每个月打卡的次数
		int sum=0;
		//System.out.print(ms);
		//所有护工先设置未打卡标志 0
		cBean.comUp("update admin set stadu='0' where sf='hg'");



		if(cBean.getMessageCount("select count(*) from lr_dk where xm='"+xm+"' and sj='"+date+"'")<1){
			if(xm.equals(ms)){	
				int flag2=cBean.getCount("select count(*) from lr_dk where sj like '%_____"+yf+"%'");
				if(flag2==0){
					int yf1=Integer.parseInt(yf)-1;
					cBean.comUp("update lr_dk set sum=0 where sj like '%_____"+yf1+"%'");
				}
				sum+=1;

				int flag=cBean.comUp("insert into lr_dk(xm,cw,tw,xy,xl,yc,hg,sj,sum) values('"+xm+"','"+cw+"','"+tw+"','"+xy+"','"+xl+"','"+yc+"','"+hg+"','"+date+"','"+sum+"')");
				if(flag==Constant.SUCCESS){
					cBean.comUp("update admin set stadu='1' where username='"+hg+"'");

					out.print("<script>;" +
							"alert('上报成功!');" +
							"window.location.href=\"admin/daka/add.jsp\";" +
							"</script>");
				}else {
					out.print("<script>;" +
							"alert('上报失败!');" +
							"window.location.href=\"admin/daka/add.jsp\";" +
							"</script>");
				}
			}else {
				out.print("<script>;" +
						"alert('上报失败!床位与老人不符');" +
						"window.location.href=\"admin/daka/add.jsp\";" +
						"</script>");
			}
		}
		else {
			out.print("<script>;" +
					"alert('上报失败!该老人今日以上报');" +
					"window.location.href=\"admin/daka/add.jsp\";" +
					"</script>");
		}
	}

pojo层

admin

package bysj_yly.demo.pojo;
/**
*@author:fqx
*@version:2023年5月11日下午4:35:25
*类说明
*/
public class admin {
private String username;
private String password;
private String nl;
private String relname;
private String tel;
private String sf;
private String stadu;
private String addtime;
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public String getNl() {
	return nl;
}
public void setNl(String nl) {
	this.nl = nl;
}
public String getRelname() {
	return relname;
}
public void setRelname(String relname) {
	this.relname = relname;
}
public String getTel() {
	return tel;
}
public void setTel(String tel) {
	this.tel = tel;
}
public String getSf() {
	return sf;
}
public void setSf(String sf) {
	this.sf = sf;
}
public String getStadu() {
	return stadu;
}
public void setStadu(String stadu) {
	this.stadu = stadu;
}
public String getAddtime() {
	return addtime;
}
public void setAddtime(String addtime) {
	this.addtime = addtime;
}

}

Dao层

comeBean

package bysj_yly.demo.DAO;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

//import com.mysql.jdbc.PreparedStatement;
import java.sql.Statement;
import bysj_yly.demo.Bean.Constant;
import bysj_yly.demo.Bean.DBA;
/**
*@author:fqx
*@version:2023年1月14日下午6:45:24
*类说明
*/

public class ComBean {

	private List list;
	private ResultSet rs = null;
	private int EVERYPAGENUM = 2;
	private int count = -1;
	private int qq = 0;
	 
	//声明时间变量
	String date1=new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
	String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
	
	//分页查询 
	public void setEVERYPAGENUM(int EVERYPAGENUM){
    	this.EVERYPAGENUM=EVERYPAGENUM;
    }
    public int getMessageCount(String sql) { //得到信息总数
       DBA dbo=new DBA();
       dbo.open();
        try { 
            rs = dbo.executeQuery(sql);
            rs.next();
            count = rs.getInt(1);
            return count;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return -1;
        } finally {
            dbo.close();
        }
    }
    public int getPageCount() { //得到共多少页(根据每页要显示几条信息)
        if (count % EVERYPAGENUM == 0) {
            return count / EVERYPAGENUM;
        } else {
            return count / EVERYPAGENUM + 1;
        }
    }
    public List getMessage(int page,String sql2,int rr) { //得到每页要显示的信息
        DBA dbo=new DBA();
        dbo.open();
        List list = new ArrayList();
        try {
            rs = dbo.executeQuery(sql2);
            for (int i = 0; i < (page - 1) * EVERYPAGENUM; i++) {
                rs.next();
            }
            for (int t = 0; t < EVERYPAGENUM; t++) {
                if (rs.next()) {
                    qq++;
                    List list2=new ArrayList();
                    for(int cc=1;cc<=rr;cc++){
                    	list2.add(rs.getString(cc));
                    }
    				list.add(list2);
                } else {
                    break; //减少空循环的时间
                }
            }
            return list;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        } finally {
            dbo.close();
        }
    }
    
	
	public int comUp(String sql){//增删改
		DBA dbo = new DBA();
		dbo.open();
		try{
			int i = dbo.executeUpdate(sql);
			if(i == 1){
				return Constant.SUCCESS;
			}
			else{
				return Constant.SYSTEM_ERROR;
			}
		}catch(Exception e){
			e.printStackTrace();
			return Constant.SYSTEM_ERROR;
		}finally{
			dbo.close();
		}
	}
	public List getCom(String sql,int row){ 
		DBA dbo = new DBA();
		list = new ArrayList();
		dbo.open();
		try{
			rs = dbo.executeQuery(sql);
			while(rs.next()){
				List list2 = new ArrayList();
				for(int i=1;i<=row;i++){
					list2.add(rs.getString(i));
				}
				list.add(list2);
			}
			return list;
		}catch(Exception e){
			e.printStackTrace();
			return list;
		}finally{
			dbo.close();
		}
	}
	public List get1Com(String sql,int row){ 
		DBA dbo = new DBA();
		list = new ArrayList();
		dbo.open();
		try{
			rs = dbo.executeQuery(sql);
			if(rs.next()){
				for(int i=1;i<=row;i++){
					list.add(rs.getString(i));
				}
			}
			return list;
		}catch(Exception e){
			e.printStackTrace();
			return list;
		}finally{
			dbo.close();
		}
	}
	public String getString(String sql){ 
		DBA dbo = new DBA();
		list = new ArrayList();
		dbo.open();
		try{
			rs = dbo.executeQuery(sql);
			if(rs.next())
			return rs.getString(1);
			else return null;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}finally{
			dbo.close();
		}
	}
	public int getCount(String sql){//整数查询个数
		DBA dbo = new DBA();
		dbo.open();
		try{
			rs = dbo.executeQuery(sql);
			rs.next();
			return rs.getInt(1);
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}finally{
			dbo.close();
		}
	}
	public float getFloat(String sql){
		DBA dbo = new DBA();
		dbo.open();
		try{
			rs = dbo.executeQuery(sql);
			rs.next();
			return rs.getInt(1);
		}catch(Exception e){
			e.printStackTrace();
			return 0;
		}finally{
			dbo.close();
		}
	}
	int getSum(String sql){
		DBA dbo = new DBA();
		dbo.open();
		try {
			rs=dbo.executeQuery(sql);
			rs.next();
			return rs.getInt(1);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return 0;
		}finally{
			dbo.close();
		}
		
	}
	 public boolean insert(String sql,Object... args) throws Exception{
		 DBA dbo = new DBA();
	        PreparedStatement statement =  (PreparedStatement) dbo.getConnection().prepareStatement(sql);
	        for (int i=0;i< args.length;i++){
	            statement.setObject(i+1,args[i]);
	        }
	        if (statement.executeUpdate()!=1){
	            return false;
	        }
	        return true;
	    }

	
}

6.总结

以上为此系统的简要概括,如有不当或者改进的地方还请大家多多交流。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值