DormitoryMs

项目介绍

功能

  • 楼栋、楼姨、宿舍、学生、考勤信息的增改删查
  • 登记、修改时进行逐级选择
  • 综合筛选查询
  • 编码过滤
  • 是否登录验证(防止直接访问内部页面)
  • 安全退出

相关技术

java、mysql、jquery、ajax、json、log4j
(没有框架的使用)

整体结构

在这里插入图片描述

示例

登录界面
在这里插入图片描述

主界面
在这里插入图片描述

楼栋登记界面
在这里插入图片描述

学生列表
在这里插入图片描述

学生修改界面
在这里插入图片描述

综合查询界面
在这里插入图片描述
时间选择示例
在这里插入图片描述

系统实现

登录模块

Administrator

package com.ff.dormitoryManage.model;

/**
 * 系统管理员类
 *
 * @author Deevan
 */
public class Administrator {
    private int id;
    private String account;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

login.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>欢迎登录</title>
    <link href="css/login.css" type="text/css" rel="stylesheet">
    <script src="js/jquery-1.8.3.js" type="text/javascript"></script>
    <script type="text/javascript">
        function login() {
        	//登录请求
            $.post("login", $("#loginForm").serialize(), function (res) {
                var administratorObj = $.parseJSON(res);
                if (administratorObj.id != null) {
                    alert("登录成功");
					//将administrator的字符串传入sessionStorage   !!sessionStorage中不能存对象
                    window.sessionStorage.setItem("administrator", res);
                    location.replace("main.html");
                } else if (res == 1) {
                    alert("账号密码错误");
                } else {
                    alert("服务器忙,请稍后再试");
                }
            })
        }
    </script>
</head>
<body>

<div class="login">
    <div class="title">欢迎登录</div>
    <div id="darkbannerwrap"></div>

    <form id="loginForm">
        <input name="action" value="login" type="hidden">
        <input name="account" placeholder="账号" type="text">
        <hr class="hr15">
        <input name="password" placeholder="密码" type="password">
        <hr class="hr15">
        <input value="登录" style="width:100%;" type="button" onclick="login()">

    </form>
</div>
</body>
</html>

main.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>信息管理系统界面</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />

<style type="text/css">
	*{
		margin: 0px;
		padding: 0px;
	}
</style>
	<script src="js/jquery-1.8.3.js" type="text/javascript"></script>
<script type="text/javascript">
	$(function(){
		//拿到sessionStorage中administrator的json字符串
		var str = window.sessionStorage.getItem("administrator");
		//前端判断用户是否登录
		if(str==null){
			alert("登录超时,请重新登录")
			location.replace("login.html");
			return;
		}
		//显示用户账号
		var user = $.parseJSON(str);
		$("#userSpan").html(user.account);
	})

	//安全退出
	function exit(){
		if(confirm("您确定要退出吗?")){
			//删除前端浏览器存储的administrator信息
			window.sessionStorage.removeItem("administrator");
			//向服务器发送请求,销毁session
			$.get("back/index",function(){
				location.replace("login.html")
			});
		}
	}
</script>

</head>
 <body>
	<table border="1" cellspacing="0" cellpadding="0" width="100%" height="100%">
		<tr style="background:url(images/topbg.gif) repeat-x;">
			<td colspan="2">
				<div class="topleft">
				  <img src="images/logo.png" title="系统首页" /> 
				</div>
				<div class="topright">    
					<ul>
						<li><span><img src="images/help.png" title="帮助"  class="helpimg"/></span><a href="#">帮助</a></li>
						<li><a href="#">关于</a></li>
						<li><a href="login.html" target="_parent" onclick="exit()">退出</a></li>
					</ul>
					<div class="user">
					  <span id="userSpan">admin</span>
					</div>
				</div>
			</td>
		</tr>
		<tr>
			<td width="187" valign="top"  height="100%"  style="background:#f0f9fd;">
			  <div class="lefttop"><span></span>操作菜单</div>
			  <dl class="leftmenu">
				<dd>
					<div class="title">
					  <span><img src="images/leftico01.png" /></span>
					  <a href="">管理信息</a>
					</div>
					<ul class="menuson">
				      <li><cite></cite>
					    <a href="building/list.html" target="rightFrame">楼栋管理</a>
					  </li>
						<li><cite></cite>
							<a href="buildAdmin/list.html" target="rightFrame">楼姨管理</a>
						</li>
						<li><cite></cite>
							<a href="dormitory/list.html" target="rightFrame">宿舍管理</a>
						</li>
						<li><cite></cite>
							<a href="student/list.html" target="rightFrame">学生管理</a>
						</li>
						<li><cite></cite>
							<a href="attend/list.html" target="rightFrame">考勤管理</a>
						</li>
						<li><cite></cite>
							<a href="allfind/search.html" target="rightFrame">综合查询</a>
						</li>
				    </ul>
				</dd>
			 </dl>
		    </td>
			<td>
				<iframe name="rightFrame" src="building/list.html" width="100%" height="600"></iframe>
			</td>
		</tr>
	</table> 
 </body>
</html>

LoginServlet

package com.ff.dormitoryManage.servlet;

import com.ff.dormitoryManage.dao.LoginDao;
import com.ff.dormitoryManage.model.Administrator;
import com.google.gson.Gson;
import org.apache.log4j.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author Deevan
 */
public class LoginServlet extends HttpServlet {

    private static Logger logger = Logger.getLogger(LoginServlet.class);

    /**
     * 接收index.html发送的post请求,获取请求体中的账号密码并与数据库交互,并返回给index.html中js(Administrator对象字符串或编码1/2)
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = null;
        try {
            //设置编码格式
            resp.setContentType("text/html;charset=utf-8");
            out = resp.getWriter();

            //拿到请求中的信息并验证
            String account = req.getParameter("account");
            String password = req.getParameter("password");

            logger.debug("account:" + account + "  password:" + password);
            logger.info("account:" + account + "  password:" + password);

            LoginDao loginDao = new LoginDao();
            Administrator administrator = loginDao.loginCheck(account, password);
            //账号密码正确,返回administrator对象字符串
            if (administrator != null) {
                //获取服务器生成的session对象
                HttpSession session = req.getSession();
                //向session对象设置一组键值,登录成功后将用户信息存储到一个对象的session对象中
                session.setAttribute("administrator", administrator);

                //new一个Gson对象,通过gson.toJson()把user对象转换成字符串并输出给前端js
                Gson gson = new Gson();
                String s = gson.toJson(administrator);
                out.println(s);
            } else {
                //输出编码1:交给js,让js接收并显示账号密码错误
                out.println(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
            //输出编码2:交给js,让js接收并显示服务器异常
            out.println(2);
        }
    }

    /**
     * 安全退出,销毁服务器端的session
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.invalidate();
    }
}

LoginDao

package com.ff.dormitoryManage.dao;

import com.ff.dormitoryManage.model.Administrator;

import java.sql.*;

/**
 * @author Deevan
 */
public class LoginDao {
    /**
     * @param account  用户登录时提交的账号
     * @param password 用户提交的密码
     * @return 该用户对象
     */
    public Administrator loginCheck(String account, String password) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        Administrator administrator = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT id,account FROM administrator WHERE account=? AND PASSWORD=?");
            ps.setString(1, account);
            ps.setString(2, password);
            resultSet = ps.executeQuery();
            if (resultSet.next()) {
                administrator = new Administrator();
                administrator.setId(resultSet.getInt("id"));
                administrator.setAccount(resultSet.getString("account"));
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return administrator;
    }
}

楼栋管理模块

Building

package com.ff.dormitoryManage.model;

import java.util.Date;

public class Building {
    private int id;
    private String name;
    private String type;
    private int floorNumbers;
    private String remark;
    private String operatorAccount;
    private Date operateTime;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getFloorNumbers() {
        return floorNumbers;
    }

    public void setFloorNumbers(int floorNumbers) {
        this.floorNumbers = floorNumbers;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getOperatorAccount() {
        return operatorAccount;
    }

    public void setOperatorAccount(String operatorAccount) {
        this.operatorAccount = operatorAccount;
    }

    public Date getOperateTime() {
        return operateTime;
    }

    public void setOperateTime(Date operateTime) {
        this.operateTime = operateTime;
    }
}

list.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>楼栋信息列表</title>
<link href="../css/style.css" rel="stylesheet" type="text/css" />
	<script src="../js/jquery-1.8.3.js"  type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		$(function (){
			//打开页面后,向servlet发送请求
			$.get("../back/building",{mark:"list"},function (res){
				if (res==201){
					window.parent.location.replace("../login.html");
				}else if(res==500) {
					alert("服务器忙,请稍后再试");
				}else{
					var str = "";
					for (let i = 0; i < res.length; i++) {
						str += "<tr align='center'>";
						str += "<td id='numTd'>"+(i+1)+"</td>"
						str += "<td>"+res[i].name+"</td>"
						str += "<td>"+res[i].type+"</td>"
						str += "<td>"+res[i].floorNumbers+"</td>"
						str += "<td>"+res[i].remark+"</td>"
						str += "<td>"+res[i].operatorAccount+"</td>"
						str += "<td>"+(new Date(res[i].operateTime)).toLocaleString()+"</td>"
						str += "<td><a οnclick='updateBuilding("+res[i].id+")' href='javaScript:void(0)'>修改</a> " +
								"<a οnclick='deleteBuilding("+res[i].id+")' href='javaScript:void(0)'>删除</a></td>"
						str += "</tr>"
					}
					$("#buildTable").append(str);
				}
			},"json")
		})

		//删除楼栋
		function deleteBuilding(id){
			if(confirm("您确定删除该楼栋信息吗?")){
				//发送请求,删除楼栋
				$.get("../back/building",{mark: "deleteBuilding",id:id},function(res){
					console.log(res);
					if (res==200){
						alert("删除成功");
						location.assign("list.html");
					}else if(res==500) {
						alert("删除失败");
					}
				})
			}
		}

		//修改楼栋
		function updateBuilding(id){
			location.assign("update.html");
			window.localStorage.id=id;
		}
	</script>
</head>


<body>
 <div class="rightinfo">
	<!-- 顶部按钮 -->
    <div class="tools">
    	<ul class="toolbar">
			<!--增加链接-->
        <a href="add.html">
		  <li class="click">
			<span><img src="../images/t01.png" /></span>
			添加
		  </li>
		</a>
        </ul>
    </div>
	<!--数据列表 -->
    <table class="tablelist" id="buildTable">
    	<tr>
			<th>序号<i class="sort"><img src="../images/px.gif" /></i></th>
			<th>楼栋名称</th>
			<th>楼栋类型</th>
			<th>楼层数</th>
			<th>备注</th>
			<th>操作人</th>
			<th>操作时间</th>
			<th>操作</th>
        </tr>
    </table>
 </div>
</body>
</html>

add.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="../css/style.css" rel="stylesheet" type="text/css" />
	<script src="../js/jquery-1.8.3.js"  type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		$(function (){
			//生成楼层下拉框
			var str = "<option>请选择</option>";
			for (let i = 1; i < 21; i++) {
				str += "<option value='"+i+"'>"+i+"</option>>"
			}
			$("#floorId").append(str);
		})

		//楼栋名称重复异步验证
		function nameCheck(name){
			$.get("../back/building",{name:name,mark:"checkName"},function(res){
				if (res==1){
					$("#msgId").html("名称已存在").css("font-size","5px");
					return;
				}else if(res==0){
					$("#msgId").html("名称可用").css("color","green");
					$("#addBtn").attr("disabled",false);
				}else {
					$("#msgId").html("服务器忙!").css("font-size","5px");
				}
			})
		}

		//添加
		function add(){
			$.post("../back/building",$("#addForm").serialize(),function (res){
				if (res==0){
					alert("添加成功");
					location.replace("list.html");
				}else if (res==1){
					alert("添加失败");
				}else{
					alert("服务器忙,请稍后再试");
				}
			})
		}
	</script>
</head>

<body>
    <div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
		<form id="addForm">
			<input type="hidden" name="mark" value="add">
			<ul class="forminfo">
				<li>
					<label>楼栋名称</label>
					<input name="name" type="text" class="dfinput" onblur="nameCheck(this.value)"/><span id="msgId"></span>
				</li>
				<li>
					<label>楼栋类型</label>
					<input name="type" type="radio" value="" checked/><input name="type" type="radio" value=""/></li>
				<li>
					<label>楼层数</label>
					<select name="floorNumbers" id="floorId" class="dfinput">
					</select>
				</li>
				<li>
					<label>备注</label>
					<input name="remark" type="text" class="dfinput"/>
				</li>
				<li>
					<input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="add()" disabled/>
				</li>
			</ul>
		</form>
    </div>
</body>
</html>

update.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<title>无标题文档</title>
	<link href="../css/style.css" rel="stylesheet" type="text/css"/>
	<script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
	<script type="text/javascript">
		//拿到该楼id
		var id = window.localStorage.id;
		$(function () {
			//获取该楼信息
			$.get("../back/building", {id: id, mark: "updateGet"}, function (res) {
				console.log(res.type)
				if (res == 201) {
					window.parent.location.replace("../login.html");
				} else if (res == 500) {
					alert("服务器忙,请稍后再试");
				} else {
					$("#nameText").val(res.name);
					$("#remarkText").val(res.remark);
					//单选框
					if (res.type == '男') {
						$("input[value='男']").attr("checked", true);
					} else {
						$("input[value='女']").attr("checked", true);
					}
					//生成楼层下拉框并选中
					var str = "";
					for (let i = 1; i < 21; i++) {
						str += "<option value='" + i + "'>" + i + "</option>"
					}
					$("#floorId").append(str);
					$("option[value='" + res.floorNumbers + "']").attr("selected", true);
					//id
					$("input[name='id']").val(res.id);
				}
			}, "json")
		})

		//保存修改
		function save() {
			$.post("../back/building", $("#updateForm").serialize(), function (res) {
				if (res == 201) {
					window.parent.location.replace("../index.html");
				} else if (res == 500) {
					alert("服务器忙,请稍后再试");
				} else {
					alert("修改成功");
					location.assign("list.html");
				}
			})
		}
	</script>
</head>

<body>
<div class="formbody">
	<div class="formtitle"><span>基本信息</span></div>
	<form id="updateForm">
		<input type="hidden" name="mark" value="update">
		<input type="hidden" name="id">
		<ul class="forminfo">
			<li>
				<label>楼栋名称</label>
				<input id="nameText" name="name" type="text" class="dfinput" disabled/>
			</li>
			<li>
				<label>楼栋类型</label>
				<input name="type" type="radio" value=""/><input name="type" type="radio" value=""/></li>
			<li>
				<label>楼层数</label>
				<select name="floorNumbers" id="floorId" class="dfinput">
				</select>
			</li>
			<li>
				<label>备注</label>
				<input name="remark" type="text" class="dfinput"/>
			</li>
			<li>
				<input id="addBtn" name="" type="button" class="btn" value="确认修改" onclick="save()"/>
			</li>
		</ul>
	</form>
</div>
</body>
</html>

BuildingServlet

package com.ff.dormitoryManage.servlet;

import com.ff.dormitoryManage.dao.BuildingDao;
import com.ff.dormitoryManage.model.Administrator;
import com.ff.dormitoryManage.model.Building;
import com.google.gson.Gson;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * @author Deevan
 */
public class BuildingServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("list".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                BuildingDao buildingDao = new BuildingDao();
                List<Building> buildingList = buildingDao.findBuilding();
                //把集合转换成json字符串
                out.println(new Gson().toJson(buildingList));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("checkName".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String name = req.getParameter("name");
                BuildingDao buildingDao = new BuildingDao();
                int res = buildingDao.checkNanme(name);
                out.println(res);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("deleteBuilding".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                BuildingDao buildingDao = new BuildingDao();
                buildingDao.deleteBuilding(id);
                out.println(200);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateGet".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                BuildingDao buildingDao = new BuildingDao();
                Building building = buildingDao.getBuildingMsg(id);
                //把集合转换成json字符串
                out.println(new Gson().toJson(building));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        System.out.println(mark);
        if ("add".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String name = req.getParameter("name");
                String type = req.getParameter("type");
                String floorNumbers = req.getParameter("floorNumbers");
                String remark = req.getParameter("remark");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //添加成功
                BuildingDao buildingDao = new BuildingDao();
                buildingDao.addBuild(name, type, floorNumbers, remark, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("update".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                String type = req.getParameter("type");
                String floorNumbers = req.getParameter("floorNumbers");
                String remark = req.getParameter("remark");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //修改成功
                BuildingDao buildingDao = new BuildingDao();
                buildingDao.updateSave(id, type, floorNumbers, remark, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }
}

BuildingDao

package com.ff.dormitoryManage.dao;

import com.ff.dormitoryManage.model.Building;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Deevan
 */
public class BuildingDao {
    public List<Building> findBuilding() throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Building> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT b.id,b.name,b.type,b.floorNumbers,b.remark,a.account,b.operateTime FROM building b LEFT JOIN administrator a ON b.operatorId=a.id");
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Building building = new Building();
                building.setId(resultSet.getInt("id"));
                building.setName(resultSet.getString("name"));
                building.setType(resultSet.getString("type"));
                building.setFloorNumbers(resultSet.getInt("floorNumbers"));
                building.setRemark(resultSet.getString("remark"));
                building.setOperatorAccount(resultSet.getString("account"));
                building.setOperateTime(resultSet.getTimestamp("operateTime"));
                list.add(building);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public int checkNanme(String name) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT COUNT(*) FROM building WHERE NAME=?");
            ps.setString(1, name);
            resultSet = ps.executeQuery();
            resultSet.next();
            return resultSet.getInt(1);
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
    }

    public void addBuild(String name, String type, String floorNumbers, String remark, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intFloorNumbers = Integer.parseInt(floorNumbers);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("INSERT INTO building(NAME,TYPE,floorNumbers,remark,operatorId,operateTime)VALUES(?,?,?,?,?,NOW())");
            ps.setString(1, name);
            ps.setString(2, type);
            ps.setInt(3, intFloorNumbers);
            ps.setString(4, remark);
            ps.setInt(5, administratorId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public void deleteBuilding(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("DELETE FROM building WHERE id=?");
            ps.setString(1, id);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public Building getBuildingMsg(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        Building building = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM building WHERE id=?");
            ps.setString(1, id);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                building = new Building();
                building.setId(resultSet.getInt("id"));
                building.setName(resultSet.getString("name"));
                building.setType(resultSet.getString("type"));
                building.setFloorNumbers(resultSet.getInt("floorNumbers"));
                building.setRemark(resultSet.getString("remark"));
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return building;
    }

    public void updateSave(String id, String type, String floorNumbers, String remark, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intFloorNumbers = Integer.parseInt(floorNumbers);
        int intId = Integer.parseInt(id);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("UPDATE building\n" +
                    "SET TYPE=?,floorNumbers=?,remark=?,operatorId=?,operateTime=NOW()\n" +
                    "WHERE id=?");
            ps.setString(1, type);
            ps.setInt(2, intFloorNumbers);
            ps.setString(3, remark);
            ps.setInt(4, administratorId);
            ps.setInt(5, intId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public List<Building> getBuildingsName() throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Building> list = new ArrayList();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM building");
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Building building = new Building();
                building.setId(resultSet.getInt("id"));
                building.setName(resultSet.getString("name"));
                building.setType(resultSet.getString("type"));
                building.setFloorNumbers(resultSet.getInt("floorNumbers"));
                building.setRemark(resultSet.getString("remark"));
                list.add(building);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public int getFloors(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        int intId = Integer.parseInt(id);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT floorNumbers FROM building WHERE id=?");
            ps.setInt(1, intId);
            resultSet = ps.executeQuery();
            resultSet.next();
            return resultSet.getInt(1);
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
    }

    public List<Building> getBuildBySex(String sex) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Building> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM building WHERE TYPE=?");
            ps.setString(1, sex);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Building building = new Building();
                building.setId(resultSet.getInt("id"));
                building.setName(resultSet.getString("name"));
                building.setType(resultSet.getString("type"));
                building.setFloorNumbers(resultSet.getInt("floorNumbers"));
                building.setRemark(resultSet.getString("remark"));
                list.add(building);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }
}

楼姨管理模块

BuildAdmin

package com.ff.dormitoryManage.model;

import java.util.Date;

/**
 * 楼姨类
 *
 * @author Deevan
 */
public class BuildAdmin {
    private int id;
    private String name;
    private String sex;
    private int age;
    private String telephone;
    private String address;
    private Date entryTime;
    private int buildId;
    private String buildName;
    private int operatorId;
    private String operatorAccount;
    private Date operateTime;

    public String getBuildName() {
        return buildName;
    }

    public void setBuildName(String buildName) {
        this.buildName = buildName;
    }

    public String getOperatorAccount() {
        return operatorAccount;
    }

    public void setOperatorAccount(String operatorAccount) {
        this.operatorAccount = operatorAccount;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Date getEntryTime() {
        return entryTime;
    }

    public void setEntryTime(Date entryTime) {
        this.entryTime = entryTime;
    }

    public int getBuildId() {
        return buildId;
    }

    public void setBuildId(int buildId) {
        this.buildId = buildId;
    }

    public int getOperatorId() {
        return operatorId;
    }

    public void setOperatorId(int operatorId) {
        this.operatorId = operatorId;
    }

    public Date getOperateTime() {
        return operateTime;
    }

    public void setOperateTime(Date operateTime) {
        this.operateTime = operateTime;
    }
}

list.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>楼姨信息列表</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            //打开页面后,向servlet发送请求
            $.get("../back/buildadmin", {mark: "list"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<tr align='center'>";
                        str += "<td id='numTd'>" + (i + 1) + "</td>"
                        str += "<td>" + res[i].name + "</td>"
                        str += "<td>" + res[i].sex + "</td>"
                        str += "<td>" + res[i].age + "</td>"
                        str += "<td>" + res[i].telephone + "</td>"
                        str += "<td>" + res[i].address + "</td>"
                        str += "<td>" + (new Date(res[i].entryTime)).toLocaleString() + "</td>"
                        str += "<td>" + res[i].buildName + "</td>"
                        str += "<td>" + res[i].operatorAccount + "</td>"
                        str += "<td>" + (new Date(res[i].operateTime)).toLocaleString() + "</td>"
                        str += "<td><a οnclick='updateBuildAdmin(" + res[i].id + ")' href='javaScript:void(0)'>修改</a> " +
                            "<a οnclick='deleteBuildAdmin(" + res[i].id + ")' href='javaScript:void(0)'>删除</a></td>"
                        str += "</tr>"
                    }
                    $("#buildAdminTable").append(str);
                }
            }, "json")
        })

        //删除楼栋
        function deleteBuildAdmin(id) {
            if (confirm("您确定删除该楼栋信息吗?")) {
                //发送请求,删除楼栋
                $.get("../back/buildadmin", {mark: "deleteBuildAdmin", id: id}, function (res) {
                    if (res == 200) {
                        alert("删除成功");
                        location.assign("list.html");
                    } else if (res == 500) {
                        alert("删除失败");
                    }
                })
            }
        }

        //修改楼栋
        function updateBuildAdmin(id) {
            location.assign("update.html");
            localStorage.setItem("baid", id);
        }
    </script>
</head>

<body>
<div class="rightinfo">
    <!-- 顶部按钮 -->
    <div class="tools">
        <ul class="toolbar">
            <!--增加链接-->
            <a href="add.html">
                <li class="click">
                    <span><img src="../images/t01.png"/></span>
                    添加
                </li>
            </a>
        </ul>
    </div>
    <!--数据列表 -->
    <table class="tablelist" id="buildAdminTable">
        <tr>
            <th>序号<i class="sort"><img src="../images/px.gif"/></i></th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>电话</th>
            <th>地址</th>
            <th>入职时间</th>
            <th>楼栋名称</th>
            <th>操作人</th>
            <th>操作时间</th>
            <th>操作</th>
        </tr>
    </table>
</div>
</body>
</html>

add.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //或取楼栋信息下拉框
        $(function () {
            $.get("../back/buildadmin", {mark: "getBuildMsg"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        console.log(res[i].name)
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#buildingId").append(str);
                }
            }, "json")

            //生成年龄下拉框
            var str = "";
            for (let i = 25; i < 60; i++) {
                str += "<option value='" + i + "'>" + i + "</option>>"
            }
            $("#ageId").append(str);
        })

        function add() {
            $.post("../back/buildadmin", $("#addForm").serialize(), function (res) {
                if (res == 0) {
                    alert("添加成功");
                    location.replace("list.html");
                } else if (res == 1) {
                    alert("添加失败");
                } else {
                    alert("服务器忙,请稍后再试");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="addForm">
        <input type="hidden" name="mark" value="add">
        <ul class="forminfo">
            <li>
                <label>姓名</label>
                <input name="name" type="text" class="dfinput"/>
            </li>
            <li>
                <label>姓别</label>
                <input name="sex" type="radio" value="" checked/><input name="sex" type="radio" value=""/></li>
            <li>
                <label>年龄</label>
                <select id="ageId" name="age" class="dfinput">
                </select>
            </li>
            <li>
                <label>电话</label>
                <input name="telephone" type="text" class="dfinput"/>
            </li>
            <li>
                <label>地址</label>
                <input name="address" type="text" class="dfinput"/>
            </li>
            <li>
                <label>楼栋</label>
                <select id="buildingId" name="build" class="dfinput">
                </select>
            </li>
            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="add()"/>
            </li>
        </ul>
    </form>

</div>

</body>

</html>

update.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //拿到该楼姨id
        var baid = localStorage.getItem("baid");
        console.log("getid" + baid)
        //或取楼栋信息下拉框
        $(function () {
            $.get("../back/buildadmin", {mark: "getBuildMsg"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#buildingId").append(str);
                }
            }, "json")

            //生成年龄下拉框
            var str = "";
            for (let i = 25; i < 60; i++) {
                str += "<option value='" + i + "'>" + i + "</option>>"
            }
            $("#ageId").append(str);

            //获取该楼信息
            $.get("../back/buildadmin", {id: baid, mark: "updateGet"}, function (res) {
                console.log(res.type)
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    $("#nameId").val(res.name);
                    $("#telephoneId").val(res.telephone);
                    $("#addressId").val(res.address);
                    //单选框
                    if (res.sex == '男') {
                        $("input[value='男']").attr("checked", true);
                    } else {
                        $("input[value='女']").attr("checked", true);
                    }
                    //年龄下拉框
                    $("option[value='" + res.age + "']").attr("selected", true);
                    //楼栋名下拉框
                    $("option[value='" + res.buildId + "']").attr("selected", true);
                    //id
                    $("input[name='id']").val(res.baid);
                }
            }, "json")
        })

        //保存修改
        function save() {
            $.post("../back/buildadmin", $("#updateForm").serialize(), function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    alert("修改成功");
                    location.assign("list.html");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="updateForm">
        <input type="hidden" name="id">
        <input type="hidden" name="mark" value="add">
        <ul class="forminfo">
            <li>
                <label>姓名</label>
                <input name="name" type="text" id="nameId" class="dfinput"/>
            </li>
            <li>
                <label>姓别</label>
                <input name="sex" type="radio" value=""/><input name="sex" type="radio" value=""/></li>
            <li>
                <label>年龄</label>
                <select id="ageId" name="age" class="dfinput">
                </select>
            </li>
            <li>
                <label>电话</label>
                <input name="telephone" id="telephoneId" type="text" class="dfinput"/>
            </li>
            <li>
                <label>地址</label>
                <input name="address" id="addressId" type="text" class="dfinput"/>
            </li>
            <li>
                <label>楼栋</label>
                <select id="buildingId" name="build" class="dfinput">
                </select>
            </li>
            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="save()"/>
            </li>
        </ul>
    </form>

</div>

</body>

</html>

BuildAdminServlet

package com.ff.dormitoryManage.servlet;

import com.ff.dormitoryManage.dao.BuildAdminDao;
import com.ff.dormitoryManage.dao.BuildingDao;
import com.ff.dormitoryManage.model.Administrator;
import com.ff.dormitoryManage.model.BuildAdmin;
import com.ff.dormitoryManage.model.Building;
import com.google.gson.Gson;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

public class BuildAdminServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("list".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                BuildAdminDao buildAdminDao = new BuildAdminDao();
                List<BuildAdmin> buildAdminList = buildAdminDao.findBuildAdmin();
                //把集合转换成json字符串
                out.println(new Gson().toJson(buildAdminList));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("deleteBuildAdmin".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                BuildAdminDao buildAdminDao = new BuildAdminDao();
                buildAdminDao.deleteBuildAdmin(id);
                out.println(200);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getBuildMsg".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                BuildingDao buildingDao = new BuildingDao();
                List<Building> buildingsName = buildingDao.getBuildingsName();
                //把集合转换成json字符串
                out.println(new Gson().toJson(buildingsName));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateGet".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                BuildAdminDao buildAdminDao = new BuildAdminDao();
                BuildAdmin buildAdmin = buildAdminDao.getBuildAdmin(id);
                //把集合转换成json字符串
                out.println(new Gson().toJson(buildAdmin));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("add".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String name = req.getParameter("name");
                String sex = req.getParameter("sex");
                String age = req.getParameter("age");
                String telephone = req.getParameter("telephone");
                String address = req.getParameter("address");
                String buildId = req.getParameter("build");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //添加成功
                BuildAdminDao buildAdminDao = new BuildAdminDao();
                buildAdminDao.addBuildAdmin(name, sex, age, telephone, address, buildId, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateForm".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                String name = req.getParameter("name");
                String sex = req.getParameter("sex");
                String age = req.getParameter("age");
                String telephone = req.getParameter("telephone");
                String address = req.getParameter("address");
                String buildId = req.getParameter("build");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //修改成功
                BuildAdminDao buildAdminDao = new BuildAdminDao();
                buildAdminDao.updateSave(id, name, sex, age, telephone, address, buildId, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }
}

BuildAdminDao

package com.ff.dormitoryManage.dao;

import com.ff.dormitoryManage.model.BuildAdmin;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Deevan
 */
public class BuildAdminDao {

    public List<BuildAdmin> findBuildAdmin() throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<BuildAdmin> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT ba.id,ba.name,ba.sex,ba.age,ba.telephone,ba.address,ba.entryTime,b.name bname,a.account,ba.operateTime " +
                    "FROM buildAdmin ba " +
                    "INNER JOIN building b ON ba.buildId=b.id " +
                    "INNER JOIN administrator a ON ba.operatorId=a.id");
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                BuildAdmin buildAdmin = new BuildAdmin();
                buildAdmin.setId(resultSet.getInt("id"));
                buildAdmin.setName(resultSet.getString("name"));
                buildAdmin.setSex(resultSet.getString("sex"));
                buildAdmin.setAge(resultSet.getInt("age"));
                buildAdmin.setTelephone(resultSet.getString("telephone"));
                buildAdmin.setAddress(resultSet.getString("address"));
                buildAdmin.setEntryTime(resultSet.getTimestamp("entryTime"));
                buildAdmin.setBuildName(resultSet.getString("bname"));
                buildAdmin.setOperatorAccount(resultSet.getString("account"));
                buildAdmin.setOperateTime(resultSet.getTimestamp("operateTime"));
                list.add(buildAdmin);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public void deleteBuildAdmin(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("DELETE FROM buildAdmin WHERE id=?");
            ps.setString(1, id);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public void addBuildAdmin(String name, String sex, String age, String telephone, String address, String buildId, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intAge = Integer.parseInt(age);
        int intBuildId = Integer.parseInt(buildId);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("INSERT INTO buildAdmin(NAME,sex,age,telephone,address,entryTime,buildId,operatorId,operateTime)VALUES(?,?,?,?,?,NOW(),?,?,NOW())");
            ps.setString(1, name);
            ps.setString(2, sex);
            ps.setInt(3, intAge);
            ps.setString(4, telephone);
            ps.setString(5, address);
            ps.setInt(6, intBuildId);
            ps.setInt(7, administratorId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public BuildAdmin getBuildAdmin(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        BuildAdmin buildAdmin = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM buildadmin WHERE id=?");
            ps.setString(1, id);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                buildAdmin = new BuildAdmin();
                buildAdmin.setId(resultSet.getInt("id"));
                buildAdmin.setName(resultSet.getString("name"));
                buildAdmin.setSex(resultSet.getString("sex"));
                buildAdmin.setAge(resultSet.getInt("age"));
                buildAdmin.setTelephone(resultSet.getString("telephone"));
                buildAdmin.setAddress(resultSet.getString("address"));
                buildAdmin.setBuildId(resultSet.getInt("buildId"));
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return buildAdmin;
    }

    public void updateSave(String id, String name, String sex, String age, String telephone, String address, String buildId, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intAge = Integer.parseInt(age);
        int intId = Integer.parseInt(id);
        int intBuildId = Integer.parseInt(buildId);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("UPDATE buildadmin \n" +
                    "SET NAME=?,sex=?,age=?,telephone=?,address=?,buildId=?,operatorId=?,operateTime=NOW()\n" +
                    "WHERE id=?");
            ps.setString(1, name);
            ps.setString(2, sex);
            ps.setInt(3, intAge);
            ps.setString(4, telephone);
            ps.setString(5, address);
            ps.setInt(6, intBuildId);
            ps.setInt(7, administratorId);
            ps.setInt(8, intId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }
}

宿舍管理模块

Dormitory

package com.ff.dormitoryManage.model;

import java.util.Date;
import java.util.List;

/**
 * 宿舍类
 *
 * @author Deevan
 */
public class Dormitory {
    private int id;
    private String num;
    private int floorNumber;
    private int buildingId;
    private String buildingName;
    private int population;
    private int state;
    private String remark;
    private int operatorId;
    private String operatorAccount;
    private Date operateTime;
    private List<Student> students;

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    public int getId() {
        return id;
    }

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

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public int getFloorNumber() {
        return floorNumber;
    }

    public void setFloorNumber(int floorNumber) {
        this.floorNumber = floorNumber;
    }

    public int getBuildingId() {
        return buildingId;
    }

    public void setBuildingId(int buildingId) {
        this.buildingId = buildingId;
    }

    public String getBuildingName() {
        return buildingName;
    }

    public void setBuildingName(String buildingName) {
        this.buildingName = buildingName;
    }

    public int getPopulation() {
        return population;
    }

    public void setPopulation(int population) {
        this.population = population;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        if (remark == null) {
            this.remark = "";
        } else {
            this.remark = remark;
        }
    }

    public int getOperatorId() {
        return operatorId;
    }

    public void setOperatorId(int operatorId) {
        this.operatorId = operatorId;
    }

    public String getOperatorAccount() {
        return operatorAccount;
    }

    public void setOperatorAccount(String operatorAccount) {
        this.operatorAccount = operatorAccount;
    }

    public Date getOperateTime() {
        return operateTime;
    }

    public void setOperateTime(Date operateTime) {
        this.operateTime = operateTime;
    }
}

list.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>宿舍信息列表</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            //打开页面后,向servlet发送请求
            $.get("../back/dormitory", {mark: "list"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<tr align='center'>";
                        str += "<td id='numTd'>" + (i + 1) + "</td>"
                        str += "<td>" + res[i].num + "</td>"
                        str += "<td>" + res[i].buildingName + "</td>"
                        str += "<td>" + res[i].floorNumber + "</td>"
                        str += "<td>" + res[i].population + "</td>"
                        if (res[i].state === 0) {
                            str += "<td>空闲</td>"
                        } else if (res[i].state === 1) {
                            str += "<td>已入住</td>"
                        } else {
                            str += "<td>维修</td>"
                        }
                        str += "<td>" + res[i].remark + "</td>"
                        str += "<td>" + res[i].operatorAccount + "</td>"
                        str += "<td>" + (new Date(res[i].operateTime)).toLocaleString() + "</td>"
                        str += "<td><a οnclick='updatedormitory(" + res[i].id + ")' href='javaScript:void(0)'>修改</a> " +
                            "<a οnclick='deletedormitory(" + res[i].id + ")' href='javaScript:void(0)'>删除</a></td>"
                        str += "</tr>"
                    }
                    $("#dormitoryTable").append(str);
                }
            }, "json")
        })

        //删除楼栋
        function deletedormitory(id) {
            if (confirm("您确定删除该宿舍信息吗?")) {
                $.get("../back/dormitory", {mark: "deleteDormitory", id: id}, function (res) {
                    if (res == 200) {
                        alert("删除成功");
                        location.assign("list.html");
                    } else if (res == 500) {
                        alert("删除失败");
                    }
                })
            }
        }

        //修改楼栋
        function updatedormitory(id) {
            location.assign("update.html");
            localStorage.setItem("did", id);
        }
    </script>
</head>


<body>
<div class="rightinfo">
    <!-- 顶部按钮 -->
    <div class="tools">
        <ul class="toolbar">
            <!--增加链接-->
            <a href="add.html">
                <li class="click">
                    <span><img src="../images/t01.png"/></span>
                    添加
                </li>
            </a>
        </ul>
    </div>
    <!--数据列表 -->
    <table class="tablelist" id="dormitoryTable">
        <tr>
            <th>序号<i class="sort"><img src="../images/px.gif"/></i></th>
            <th>宿舍号</th>
            <th>楼栋</th>
            <th>楼层</th>
            <th>容量</th>
            <th>状态</th>
            <th>备注</th>
            <th>操作人</th>
            <th>操作时间</th>
            <th>操作</th>
        </tr>
    </table>
</div>
</body>
</html>

add.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            //或取楼栋信息下拉框
            $.get("../back/dormitory", {mark: "getBuildings"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#buildingId").append(str);
                }
            }, "json")

            //生成宿舍容量下拉框
            var str = "<option>请选择</option>";
            for (let i = 1; i < 15; i++) {
                str += "<option value='" + i + "'>" + i + "人间" + "</option>"
            }
            $("#populationId").append(str);
        })

        //通过楼栋获取楼层层数
        function getFloors(buildingId) {
            $.get("../back/dormitory", {mark: "getFloors", buildingId: buildingId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 1; i <= res; i++) {
                        str += "<option value='" + i + "'>" + i + "</option>"
                    }
                    $("#floorNumber").html(str + "层");
                }
            })
        }

        function add() {
            $.post("../back/dormitory", $("#addForm").serialize(), function (res) {
                if (res == 0) {
                    alert("添加成功");
                    location.replace("list.html");
                } else if (res == 1) {
                    alert("添加失败");
                } else {
                    alert("服务器忙,请稍后再试");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="addForm">
        <input type="hidden" name="mark" value="add">
        <ul class="forminfo">
            <li>
                <label>宿舍号</label>
                <input name="num" type="text" id="numId" class="dfinput"/>
            </li>
            <li>
                <label>楼栋</label>
                <select id="buildingId" name="build" onchange="getFloors(this.value)" class="dfinput">
                </select>
            </li>
            <li>
                <label>楼层</label>
                <select id="floorNumber" name="floorNumber" class="dfinput">
                </select>
            </li>
            <li>
                <label>容量</label>
                <select id="populationId" name="population" class="dfinput">
                </select>
            </li>
            <li>
                <label>状态</label>
                <input name="state" type="radio" value="0" checked/>空闲
                <input name="state" type="radio" value="1"/>已入住
                <input name="state" type="radio" value="2"/>维修
            </li>
            <li>
                <label>备注</label>
                <input type="text" name="remark" class="dfinput">
            </li>
            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="add()"/>
            </li>
        </ul>
    </form>

</div>

</body>

</html>

update.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //拿到该楼姨id
        var did = localStorage.getItem("did");
        $(function () {

            //获取该宿舍信息
            $.get("../back/dormitory", {id: did, mark: "updateGet"}, function (res) {
                console.log(res);
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    $("#numId").val(res.num);
                    $("#remark").val(res.remark);
                    //单选框
                    if (res.state == 0) {
                        $("input[value='0']").attr("checked", true);
                    } else if (res.state == 1) {
                        $("input[value='1']").attr("checked", true);
                    } else {
                        $("input[value='2']").attr("checked", true);
                    }

                    //或取楼栋信息下拉框
                    $.get("../back/dormitory", {mark: "getBuildings"}, function (res) {
                        if (res == 201) {
                            window.parent.location.replace("../login.html");
                        } else if (res == 500) {
                            alert("服务器忙,请稍后再试");
                        } else {
                            var str = "";
                            for (let i = 0; i < res.length; i++) {
                                str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                            }
                            $("#buildingId").append(str);
                        }
                    }, "json")

                    //选中楼栋下拉框
                    $("#buildingId option[value='" + res.buildingId + "']").attr("selected", true);

                    //通过楼栋生成楼层下拉框并选中
                    var str = "";
                    for (let i = 1; i <= res.floorNumber; i++) {
                        str += "<option value='" + i + "'";
                        if (res.floorNumber == i) {
                            str += " selected='selected' ";
                        }
                        str += ">"
                        str += i + "层 </option>";
                    }
                    $("#floorNumber").html(str);

                    //生成宿舍容量下拉框
                    var str = "<option>请选择</option>";
                    for (let i = 1; i < 15; i++) {
                        str += "<option value='" + i + "'>" + i + "人间" + "</option>"
                    }
                    $("#populationId").append(str);

                    //容量下拉框
                    $("#populationId option[value='" + res.population + "']").attr("selected", true);

                    //id
                    $("input[name='id']").val(res.id);
                }
            }, "json")

        })
		
        //通过楼栋获取楼层层数
        function getFloors(buildingId) {
            $.get("../back/dormitory", {mark: "getFloors", buildingId: buildingId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 1; i <= res; i++) {
                        str += "<option value='" + i + "'>" + i + "</option>"
                    }
                    $("#floorNumber").html(str + "层");
                }
            })
        }

        //保存修改
        function updateSave() {
            $.post("../back/dormitory", $("#updateForm").serialize(), function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    alert("修改成功");
                    location.assign("list.html");
                }
            })
        }

    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="updateForm">
        <input type="hidden" name="id">
        <input type="hidden" name="mark" value="updateSave">
        <ul class="forminfo">
            <li>
                <label>宿舍号</label>
                <input name="num" type="text" id="numId" class="dfinput"/>
            </li>
            <li>
                <label>楼栋</label>
                <select id="buildingId" name="build" onchange="getFloors(this.value)" class="dfinput">
                </select>
            </li>
            <li>
                <label>楼层</label>
                <select id="floorNumber" name="floorNumber" class="dfinput">
                </select>
            </li>
            <li>
                <label>容量</label>
                <select id="populationId" name="population" class="dfinput">
                </select>
            </li>
            <li>
                <label>状态</label>
                <input name="state" type="radio" value="0"/>空闲
                <input name="state" type="radio" value="1"/>已入住
                <input name="state" type="radio" value="2"/>维修
            </li>
            <li>
                <label>备注</label>
                <input type="text" name="remark" class="dfinput">
            </li>
            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="updateSave()"/>
            </li>
        </ul>
    </form>

</div>

</body>

</html>

DormitoryServlet

package com.ff.dormitoryManage.servlet;

import com.ff.dormitoryManage.dao.BuildAdminDao;
import com.ff.dormitoryManage.dao.BuildingDao;
import com.ff.dormitoryManage.dao.DormitoryDao;
import com.ff.dormitoryManage.dao.StudentDao;
import com.ff.dormitoryManage.model.Administrator;
import com.ff.dormitoryManage.model.BuildAdmin;
import com.ff.dormitoryManage.model.Building;
import com.ff.dormitoryManage.model.Dormitory;
import com.google.gson.Gson;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

public class DormitoryServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("list".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                DormitoryDao dormitoryDao = new DormitoryDao();
                List<Dormitory> dormitoryList = dormitoryDao.finddormitory();
                //把集合转换成json字符串
                out.println(new Gson().toJson(dormitoryList));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("deleteDormitory".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                DormitoryDao dormitoryDao = new DormitoryDao();
                dormitoryDao.deleteDormitory(id);
                out.println(200);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getFloors".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("buildingId");
                BuildingDao buildingDao = new BuildingDao();
                int floors = buildingDao.getFloors(id);
                //把集合转换成json字符串
                out.println(floors);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getBuildings".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                BuildingDao buildingDao = new BuildingDao();
                List<Building> buildings = buildingDao.getBuildingsName();
                //把集合转换成json字符串
                out.println(new Gson().toJson(buildings));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateGet".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                DormitoryDao dormitoryDao = new DormitoryDao();
                Dormitory dormitory = dormitoryDao.updateGet(id);
                //把集合转换成json字符串
                out.println(new Gson().toJson(dormitory));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getStudents".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String dormId = req.getParameter("dormId");
                StudentDao studentDao = new StudentDao();
                List<String> studentsByDorm = studentDao.findStudentsByDorm(dormId);
                //把集合转换成json字符串
                out.println(new Gson().toJson(studentsByDorm));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("add".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String num = req.getParameter("num");
                String buildingId = req.getParameter("build");
                String floorNumber = req.getParameter("floorNumber");
                String population = req.getParameter("population");
                String state = req.getParameter("state");
                String remark = req.getParameter("remark");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //添加成功
                DormitoryDao dormitoryDao = new DormitoryDao();
                dormitoryDao.add(num, buildingId, floorNumber, population, state, remark, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateSave".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                String num = req.getParameter("num");
                String buildingId = req.getParameter("build");
                String floorNumber = req.getParameter("floorNumber");
                String population = req.getParameter("population");
                String state = req.getParameter("state");
                String remark = req.getParameter("remark");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //修改成功
                DormitoryDao dormitoryDao = new DormitoryDao();
                dormitoryDao.updateSave(id, num, buildingId, floorNumber, population, state, remark, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }
}

DormitoryDao

package com.ff.dormitoryManage.dao;

import com.ff.dormitoryManage.model.BuildAdmin;
import com.ff.dormitoryManage.model.Dormitory;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DormitoryDao {
    public List<Dormitory> finddormitory() throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Dormitory> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT d.id,d.num,d.floorNumber,b.name BuildName,d.population,d.state,d.remark,a.account,d.operateTime\n" +
                    "FROM dormitory d INNER JOIN building b ON d.buildingId=b.id\n" +
                    "INNER JOIN administrator a ON d.operatorId=a.id");
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Dormitory dormitory = new Dormitory();
                dormitory.setId(resultSet.getInt("id"));
                dormitory.setNum(resultSet.getString("num"));
                dormitory.setFloorNumber(resultSet.getInt("floorNumber"));
                dormitory.setBuildingName(resultSet.getString("BuildName"));
                dormitory.setPopulation(resultSet.getInt("population"));
                dormitory.setState(resultSet.getInt("state"));
                dormitory.setRemark(resultSet.getString("remark"));
                dormitory.setOperatorAccount(resultSet.getString("account"));
                dormitory.setOperateTime(resultSet.getTimestamp("operateTime"));
                list.add(dormitory);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public void deleteDormitory(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("DELETE FROM dormitory WHERE id=?");
            ps.setString(1, id);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public void add(String num, String buildingId, String floorNumber, String population, String state, String remark, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intBuildId = Integer.parseInt(buildingId);
        int intFloorNumber = Integer.parseInt(floorNumber);
        int intPopulation = Integer.parseInt(population);
        int intState = Integer.parseInt(state);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("INSERT INTO dormitory(num,floorNumber,buildingId,population,state,remark,operatorId,operateTime)VALUES(?,?,?,?,?,?,?,NOW())");
            ps.setString(1, num);
            ps.setInt(2, intFloorNumber);
            ps.setInt(3, intBuildId);
            ps.setInt(4, intPopulation);
            ps.setInt(5, intState);
            ps.setString(6, remark);
            ps.setInt(7, administratorId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public Dormitory updateGet(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        Dormitory dormitory = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM dormitory WHERE id=?");
            ps.setString(1, id);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                dormitory = new Dormitory();
                dormitory.setId(resultSet.getInt("id"));
                dormitory.setNum(resultSet.getString("num"));
                dormitory.setBuildingId(resultSet.getInt("buildingId"));
                dormitory.setFloorNumber(resultSet.getInt("floorNumber"));
                dormitory.setPopulation(resultSet.getInt("population"));
                dormitory.setState(resultSet.getInt("state"));
                dormitory.setRemark(resultSet.getString("remark"));
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return dormitory;
    }

    public List<Dormitory> getDorms(String buildingId, String floorNumber) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Dormitory> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM dormitory WHERE floorNumber=? AND buildingId=?");
            ps.setString(1, floorNumber);
            ps.setString(2, buildingId);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Dormitory dormitory = new Dormitory();
                dormitory.setId(resultSet.getInt("id"));
                dormitory.setNum(resultSet.getString("num"));
                dormitory.setBuildingId(resultSet.getInt("buildingId"));
                dormitory.setFloorNumber(resultSet.getInt("floorNumber"));
                dormitory.setPopulation(resultSet.getInt("population"));
                dormitory.setState(resultSet.getInt("state"));
                dormitory.setRemark(resultSet.getString("remark"));
                list.add(dormitory);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public void updateSave(String id, String num, String buildingId, String floorNumber, String population, String state, String remark, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intId = Integer.parseInt(id);
        int intPopulation = Integer.parseInt(population);
        int intBuildingId = Integer.parseInt(buildingId);
        int intState = Integer.parseInt(state);
        int intFloorNumber = Integer.parseInt(floorNumber);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("UPDATE dormitory\n" +
                    "SET num=?,floorNumber=?,buildingId=?,population=?,state=?,remark=?,operatorId=?,operateTime=NOW()\n" +
                    "WHERE id=?");
            ps.setString(1, num);
            ps.setInt(2, intFloorNumber);
            ps.setInt(3, intBuildingId);
            ps.setInt(4, intPopulation);
            ps.setInt(5, intState);
            ps.setString(6, remark);
            ps.setInt(7, administratorId);
            ps.setInt(8, intId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }
}

学生管理模块

Student

package com.ff.dormitoryManage.model;

import java.util.Date;

/**
 * 学生类
 *
 * @author Deevan
 */
public class Student {
    private int id;
    private String num;
    private String name;
    private String sex;
    private String clas;
    private int state;
    private Date checkinDate;
    private int dormitoryId;
    private String dormitoryName;
    private int operatorId;
    private String operatorAccount;
    private Date operateTime;
    private int buildingId;
    private int floorNumber;
    private int floors;

    public int getFloors() {
        return floors;
    }

    public void setFloors(int floors) {
        this.floors = floors;
    }

    public int getBuildingId() {
        return buildingId;
    }

    public void setBuildingId(int buildingId) {
        this.buildingId = buildingId;
    }

    public int getFloorNumber() {
        return floorNumber;
    }

    public void setFloorNumber(int floorNumber) {
        this.floorNumber = floorNumber;
    }

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public int getId() {
        return id;
    }

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

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getClas() {
        return clas;
    }

    public void setClas(String clas) {
        this.clas = clas;
    }

    public Date getCheckinDate() {
        return checkinDate;
    }

    public void setCheckinDate(Date checkinDate) {
        this.checkinDate = checkinDate;
    }

    public int getDormitoryId() {
        return dormitoryId;
    }

    public void setDormitoryId(int dormitoryId) {
        this.dormitoryId = dormitoryId;
    }

    public String getDormitoryName() {
        return dormitoryName;
    }

    public void setDormitoryName(String dormitoryName) {
        this.dormitoryName = dormitoryName;
    }

    public int getOperatorId() {
        return operatorId;
    }

    public void setOperatorId(int operatorId) {
        this.operatorId = operatorId;
    }

    public String getOperatorAccount() {
        return operatorAccount;
    }

    public void setOperatorAccount(String operatorAccount) {
        this.operatorAccount = operatorAccount;
    }

    public Date getOperateTime() {
        return operateTime;
    }

    public void setOperateTime(Date operateTime) {
        this.operateTime = operateTime;
    }
}

list.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>学生信息列表</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            //打开页面后,向servlet发送请求
            $.get("../back/student", {mark: "list"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<tr align='center'>";
                        str += "<td id='numTd'>" + (i + 1) + "</td>"
                        str += "<td>" + res[i].num + "</td>"
                        str += "<td>" + res[i].name + "</td>"
                        str += "<td>" + res[i].sex + "</td>"
                        str += "<td>" + res[i].clas + "</td>"
                        str += "<td>" + res[i].dormitoryName + "</td>"
                        if (res[i].state === 0) {
                            str += "<td>已入住</td>"
                        } else {
                            str += "<td>未入住</td>"
                        }
                        str += "<td>" + res[i].checkinDate + "</td>"
                        str += "<td>" + res[i].operatorAccount + "</td>"
                        str += "<td>" + (new Date(res[i].operateTime)).toLocaleString() + "</td>"
                        str += "<td><a οnclick='updateStudent(" + res[i].id + ")' href='javaScript:void(0)'>修改</a> " +
                            "<a οnclick='deleteStudent(" + res[i].id + ")' href='javaScript:void(0)'>删除</a></td>"
                        str += "</tr>"
                    }
                    $("#studentTable").append(str);
                }
            }, "json")
        })

        //删除学生
        function deleteStudent(id) {
            if (confirm("您确定删除该学生信息吗?")) {
                //发送请求,删除楼栋
                $.get("../back/student", {mark: "deleteStudent", id: id}, function (res) {
                    if (res == 200) {
                        alert("删除成功");
                        location.assign("list.html");
                    } else if (res == 500) {
                        alert("删除失败");
                    }
                })
            }
        }

        //修改学生
        function updateStudent(id) {
            location.assign("update.html");
            localStorage.setItem("sid", id);
        }
    </script>
</head>

<body>
<div class="rightinfo">
    <!-- 顶部按钮 -->
    <div class="tools">
        <ul class="toolbar">
            <!--增加链接-->
            <a href="add.html">
                <li class="click">
                    <span><img src="../images/t01.png"/></span>
                    添加
                </li>
            </a>
        </ul>
    </div>
    <!--数据列表 -->
    <table class="tablelist" id="studentTable">
        <tr>
            <th>序号<i class="sort"><img src="../images/px.gif"/></i></th>
            <th>学号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>班级</th>
            <th>宿舍号</th>
            <th>状态</th>
            <th>入住日期</th>
            <th>操作人</th>
            <th>操作时间</th>
            <th>操作</th>
        </tr>
    </table>
</div>
</body>
</html>

add.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript">
        //通过性别获取指定楼栋下拉框
        function getBuild(sex) {
            $.get("../back/student", {mark: "getBuild", sex: sex}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#building").html(str);
                }
            }, "json")
        }

        //通过楼栋获取楼层层数
        function getFloors(buildingId) {
            $.get("../back/dormitory", {mark: "getFloors", buildingId: buildingId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 1; i <= res; i++) {
                        str += "<option value='" + i + "'>" + i + "</option>"
                    }
                    $("#floor").html(str + "层");
                }
            })
        }

        //通过楼层获取该层宿舍
        function getDormitory(floorNumber) {
            var buildingId = $("#building").val();
            $.get("../back/student", {
                mark: "getDorms",
                buildingId: buildingId,
                floorNumber: floorNumber
            }, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].num + "</option>"
                    }
                    $("#dormitoryNum").html(str);
                }
            }, "json")
        }

        function add() {
            $.post("../back/student", $("#addForm").serialize(), function (res) {
                if (res == 0) {
                    alert("添加成功");
                    location.replace("list.html");
                } else if (res == 1) {
                    alert("添加失败");
                } else {
                    alert("服务器忙,请稍后再试");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="addForm">
        <input type="hidden" name="mark" value="add">
        <ul class="forminfo">
            <li>
                <label>学号</label>
                <input name="num" type="text" id="num" class="dfinput"/>
            </li>
            <li>
                <label>姓名</label>
                <input name="name" type="text" id="name" class="dfinput"/>
            </li>
            <li>
                <label>性别</label>
                <select id="sex" name="sex" class="dfinput" onchange="getBuild(this.value)">
                    <option>请选择</option>
                    <option value=""></option>
                    <option value=""></option>
                </select>
            </li>
            <li>
                <label>班级</label>
                <input name="class" type="text" id="class" class="dfinput"/>
            </li>
            <li>
                <label>楼栋</label>
                <select id="building" name="building" class="dfinput" onchange="getFloors(this.value)">
                </select>
            </li>
            <li>
                <label>楼层</label>
                <select id="floor" name="floor" class="dfinput" onchange="getDormitory(this.value)">
                </select>
            </li>
            <li>
                <label>宿舍号</label>
                <select id="dormitoryNum" name="dormitoryNum" class="dfinput">
                </select>
            </li>
            <li>
                <label>状态</label>
                <input name="state" type="radio" value="0" checked/>已入住
                <input name="state" type="radio" value="1"/>未入住
            </li>
            <li>
                <label>入住时间</label>
                <input type="text" class="sang_Calender"
                       style="width:345px; height:32px; line-height:32px; border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; background:url(../images/inputbg.gif) repeat-x; text-indent:10px;"/>
            </li>
            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="add()"/>
            </li>
        </ul>
    </form>

</div>
<script type="text/javascript" src="../js/datetime.js"></script>
</body>

</html>

update.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //拿到学生的id
        var sid = localStorage.getItem("sid");
        console.log("getid" + sid)
        $(function () {
            //获取该学生信息
            $.get("../back/student", {id: sid, mark: "updateGet"}, function (res) {
                console.log(res);
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    $("#num").val(res.num);
                    $("#name").val(res.name);
                    $("#class").val(res.clas);
                    //单选框
                    if (res.state == 0) {
                        $("input[value='0']").attr("checked", true);
                    } else {
                        $("input[value='1']").attr("checked", true);
                    }

                    //性别下拉框
                    $("option[value='" + res.sex + "']").attr("selected", true);
                    //通过性别或取楼栋下拉框并选中
                    $.get("../back/student", {mark: "getBuild", sex: res.sex}, function (res) {
                        if (res == 201) {
                            window.parent.location.replace("../login.html");
                        } else if (res == 500) {
                            alert("服务器忙,请稍后再试");
                        } else {
                            var str = "";
                            for (let i = 0; i < res.length; i++) {
                                str += "<option value='" + res[i].id + "'";
                                if (res.id == i) {
                                    str += " selected='selected' ";
                                }
                                str += ">"
                                str += res[i].name + "</option>";
                            }
                            $("#building").html(str);
                        }
                    }, "json")
                    //通过楼栋生成楼层下拉框并选中
                    var str = "";
                    for (let i = 1; i <= res.floorNumber; i++) {
                        str += "<option value='" + i + "'";
                        if (res.floorNumber == i) {
                            str += " selected='selected' ";
                        }
                        str += ">"
                        str += i + "层 </option>";
                    }
                    $("#floor").html(str);
                    //通过楼层生成宿舍下拉框并选中
                    $.get("../back/student", {
                        mark: "getDorms",
                        buildingId: res.buildingId,
                        floorNumber: res.floorNumber
                    }, function (res) {
                        if (res == 201) {
                            window.parent.location.replace("../login.html");
                        } else if (res == 500) {
                            alert("服务器忙,请稍后再试");
                        } else {
                            var str = "";
                            for (let i = 0; i < res.length; i++) {
                                str += "<option value='" + res[i].id + "'";
                                if (res[i].id == i) {
                                    str += " selected='selected' ";
                                }
                                str += ">"
                                str += res[i].num + "</option>";
                            }
                            $("#dormitoryNum").html(str);
                        }
                    }, "json")

                    //id
                    $("input[name='id']").val(res.id);
                }
            }, "json")
        })

        //通过性别获取指定楼栋下拉框
        function getBuild(sex) {
            $.get("../back/student", {mark: "getBuild", sex: sex}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#building").html(str);
                }
            }, "json")
        }

        //通过楼栋获取楼层层数
        function getFloors(buildingId) {
            $.get("../back/dormitory", {mark: "getFloors", buildingId: buildingId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 1; i <= res; i++) {
                        str += "<option value='" + i + "'>" + i + "</option>"
                    }
                    $("#floor").html(str + "层");
                }
            })
        }

        //通过楼层获取该层宿舍
        function getDormitory(floorNumber) {
            var buildingId = $("#building").val();
            $.get("../back/student", {
                mark: "getDorms",
                buildingId: buildingId,
                floorNumber: floorNumber
            }, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].num + "</option>"
                    }
                    $("#dormitoryNum").html(str);
                }
            }, "json")
        }

        //保存修改
        function updateSave() {
            $.post("../back/student", $("#updateForm").serialize(), function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    alert("修改成功");
                    location.assign("list.html");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="updateForm">
        <input type="hidden" name="id"/>
        <input type="hidden" name="mark" value="updateSave">
        <ul class="forminfo">
            <li>
                <label>学号</label>
                <input name="num" type="text" id="num" class="dfinput"/>
            </li>
            <li>
                <label>姓名</label>
                <input name="name" type="text" id="name" class="dfinput"/>
            </li>
            <li>
                <label>性别</label>
                <select id="sex" name="sex" class="dfinput" onchange="getBuild(this.value)">
                    <option>请选择</option>
                    <option value=""></option>
                    <option value=""></option>
                </select>
            </li>
            <li>
                <label>班级</label>
                <input name="class" type="text" id="class" class="dfinput"/>
            </li>
            <li>
                <label>楼栋</label>
                <select id="building" name="building" class="dfinput" onchange="getFloors(this.value)">
                </select>
            </li>
            <li>
                <label>楼层</label>
                <select id="floor" name="floor" class="dfinput" onchange="getDormitory(this.value)">
                </select>
            </li>
            <li>
                <label>宿舍号</label>
                <select id="dormitoryNum" name="dormitoryNum" class="dfinput">
                </select>
            </li>
            <li>
                <label>状态</label>
                <input name="state" type="radio" value="0" checked/>已入住
                <input name="state" type="radio" value="1"/>未入住
            </li>
            <li>
                <input id="addBtn" type="button" class="btn" value="确认保存" onclick="updateSave()"/>
            </li>
        </ul>
    </form>

</div>

</body>

</html>

StudentServlet

package com.ff.dormitoryManage.servlet;

import com.ff.dormitoryManage.dao.BuildingDao;
import com.ff.dormitoryManage.dao.DormitoryDao;
import com.ff.dormitoryManage.dao.StudentDao;
import com.ff.dormitoryManage.model.Administrator;
import com.ff.dormitoryManage.model.Building;
import com.ff.dormitoryManage.model.Dormitory;
import com.ff.dormitoryManage.model.Student;
import com.google.gson.Gson;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

public class StudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("list".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                StudentDao studentDao = new StudentDao();
                List<Student> students = studentDao.findStudents();
                //把集合转换成json字符串
                out.println(new Gson().toJson(students));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("deleteStudent".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                StudentDao studentDao = new StudentDao();
                studentDao.deleteStudent(id);
                out.println(200);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getBuild".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String sex = req.getParameter("sex");
                BuildingDao buildingDao = new BuildingDao();
                List<Building> buildBySex = buildingDao.getBuildBySex(sex);
                //把集合转换成json字符串
                out.println(new Gson().toJson(buildBySex));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getDorms".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String buildingId = req.getParameter("buildingId");
                String floorNumber = req.getParameter("floorNumber");
                DormitoryDao dormitoryDao = new DormitoryDao();
                List<Dormitory> list = dormitoryDao.getDorms(buildingId, floorNumber);
                //把集合转换成json字符串
                out.println(new Gson().toJson(list));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateGet".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                StudentDao studentDao = new StudentDao();
                Student student = studentDao.updateGet(id);
                //把集合转换成json字符串
                out.println(new Gson().toJson(student));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("getStudent".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String dormId = req.getParameter("dormId");
                StudentDao studentDao = new StudentDao();
                List<Student> students = studentDao.getStudent(dormId);
                //把集合转换成json字符串
                out.println(new Gson().toJson(students));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("add".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String num = req.getParameter("num");
                String name = req.getParameter("name");
                String sex = req.getParameter("sex");
                String clas = req.getParameter("class");
                String dormitoryId = req.getParameter("dormitoryNum");
                String state = req.getParameter("state");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                StudentDao studentDao = new StudentDao();
                studentDao.add(num, name, sex, clas, state, dormitoryId, administratorId);
                //添加成功
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateSave".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                String num = req.getParameter("num");
                String name = req.getParameter("name");
                String sex = req.getParameter("sex");
                String clas = req.getParameter("class");
                String state = req.getParameter("state");
                String dormitoryId = req.getParameter("dormitoryNum");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //修改成功
                StudentDao studentDao = new StudentDao();
                studentDao.updateSave(id, num, name, sex, clas, state, dormitoryId, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }
}

StudentDao

package com.ff.dormitoryManage.dao;

import com.ff.dormitoryManage.model.Student;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class StudentDao {
    public List<Student> findStudents() throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Student> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT s.id,s.num,s.name,s.sex,s.class,s.state,s.checkinDate,d.num dormitoryName,a.account,s.operateTime\n" +
                    "FROM student s INNER JOIN dormitory d ON s.dormitoryId=d.id\n" +
                    "INNER JOIN administrator a ON s.operatorId=a.id ORDER BY s.id");
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Student student = new Student();
                student.setId(resultSet.getInt("id"));
                student.setNum(resultSet.getString("num"));
                student.setName(resultSet.getString("name"));
                student.setSex(resultSet.getString("sex"));
                student.setClas(resultSet.getString("class"));
                student.setState(resultSet.getInt("state"));
                student.setCheckinDate(resultSet.getDate("checkinDate"));
                student.setDormitoryName(resultSet.getString("dormitoryName"));
                student.setOperatorAccount(resultSet.getString("account"));
                student.setOperateTime(resultSet.getTimestamp("operateTime"));
                list.add(student);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public void deleteStudent(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("DELETE FROM student WHERE id=?");
            ps.setString(1, id);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public void add(String num, String name, String sex, String clas, String state, String dormitoryId, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intDormId = Integer.parseInt(dormitoryId);
        int intState = Integer.parseInt(state);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("INSERT INTO student(num,NAME,sex,class,state,checkinDate,dormitoryId,operatorId,operateTime)VALUES(?,?,?,?,?,NOW(),?,?,NOW())");
            ps.setString(1, num);
            ps.setString(2, name);
            ps.setString(3, sex);
            ps.setString(4, clas);
            ps.setInt(5, intState);
            ps.setInt(6, intDormId);
            ps.setInt(7, administratorId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public Student updateGet(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        Student student = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT s.id,s.num,s.name,s.sex,s.class,s.state,s.checkinDate,s.dormitoryId,d.floorNumber,d.buildingId,b.floorNumbers\n" +
                    "FROM student s INNER JOIN dormitory d ON s.dormitoryId=d.id\n" +
                    "INNER JOIN building b ON d.buildingId=b.id\n" +
                    "WHERE s.id=?");
            ps.setString(1, id);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                student = new Student();
                student.setId(resultSet.getInt("id"));
                student.setNum(resultSet.getString("num"));
                student.setName(resultSet.getString("name"));
                student.setSex(resultSet.getString("sex"));
                student.setClas(resultSet.getString("class"));
                student.setState(resultSet.getInt("state"));
                student.setCheckinDate(resultSet.getDate("checkinDate"));
                student.setDormitoryId(resultSet.getInt("dormitoryId"));
                student.setBuildingId(resultSet.getInt("buildingId"));
                student.setFloorNumber(resultSet.getInt("floorNumber"));
                student.setFloors(resultSet.getInt("floorNumbers"));
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return student;
    }

    public void updateSave(String id, String num, String name, String sex, String clas, String state, String dormitoryId, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intId = Integer.parseInt(id);
        int intState = Integer.parseInt(state);
        int intDormitoryId = Integer.parseInt(dormitoryId);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("UPDATE student\n" +
                    "SET num=?,NAME=?,sex=?,class=?,state=?,checkinDate=NOW(),dormitoryId=?,operatorId=?,operateTime=NOW()\n" +
                    "WHERE id=?");
            ps.setString(1, num);
            ps.setString(2, name);
            ps.setString(3, sex);
            ps.setString(4, clas);
            ps.setInt(5, intState);
            ps.setInt(6, intDormitoryId);
            ps.setInt(7, administratorId);
            ps.setInt(8, intId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public List<String> findStudentsByDorm(String dormId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<String> list = new ArrayList<>();
        int intDormId = Integer.parseInt(dormId);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT NAME FROM student WHERE dormitoryId=?");
            ps.setInt(1, intDormId);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                String str = "";
                str = resultSet.getString("name");
                list.add(str);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public List<Student> getStudent(String dormId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Student> list = new ArrayList<>();
        int intDormId = Integer.parseInt(dormId);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT* FROM student WHERE dormitoryId=?");
            ps.setInt(1, intDormId);
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Student student = new Student();
                student.setId(resultSet.getInt("id"));
                student.setNum(resultSet.getString("num"));
                student.setName(resultSet.getString("name"));
                list.add(student);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }
}

考勤管理模块

Attend

package com.ff.dormitoryManage.model;

import java.util.Date;

/**
 * 考勤类
 *
 * @author Deevan
 */
public class Attend {
    private int id;
    private int studentId;
    private String studentName;
    private int dormId;
    private String dormNum;
    private Date time;
    private String remark;
    private int operatorId;
    private String operatorAccount;
    private Date operateTime;

    public int getId() {
        return id;
    }

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

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public int getDormId() {
        return dormId;
    }

    public void setDormId(int dormId) {
        this.dormId = dormId;
    }

    public String getDormNum() {
        return dormNum;
    }

    public void setDormNum(String dormNum) {
        this.dormNum = dormNum;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public int getOperatorId() {
        return operatorId;
    }

    public void setOperatorId(int operatorId) {
        this.operatorId = operatorId;
    }

    public String getOperatorAccount() {
        return operatorAccount;
    }

    public void setOperatorAccount(String operatorAccount) {
        this.operatorAccount = operatorAccount;
    }

    public Date getOperateTime() {
        return operateTime;
    }

    public void setOperateTime(Date operateTime) {
        this.operateTime = operateTime;
    }
}

list.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>考勤信息列表</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            //打开页面后,向servlet发送请求
            $.get("../back/attend", {mark: "list"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<tr align='center'>";
                        str += "<td id='numTd'>" + (i + 1) + "</td>"
                        str += "<td>" + res[i].studentName + "</td>"
                        str += "<td>" + res[i].dormNum + "</td>"
                        str += "<td>" + (new Date(res[i].time)).toLocaleString() + "</td>"
                        str += "<td>" + res[i].remark + "</td>"
                        str += "<td>" + res[i].operatorAccount + "</td>"
                        str += "<td>" + (new Date(res[i].operateTime)).toLocaleString() + "</td>"
                        str += "<td><a οnclick='updateAttend(" + res[i].id + ")' href='javaScript:void(0)'>修改</a> " +
                            "<a οnclick='deleteAttend(" + res[i].id + ")' href='javaScript:void(0)'>删除</a></td>"
                        str += "</tr>"
                    }
                    $("#attendTable").append(str);
                }
            }, "json")
        })

        //删除考勤
        function deleteAttend(id) {
            if (confirm("您确定删除此次考勤信息吗?")) {
                $.get("../back/attend", {mark: "deleteAttend", id: id}, function (res) {
                    if (res == 200) {
                        alert("删除成功");
                        location.assign("list.html");
                    } else if (res == 500) {
                        alert("删除失败");
                    }
                })
            }
        }

        //修改
        function updateAttend(id) {
            location.assign("update.html");
            localStorage.setItem("aid", id);
        }
    </script>
</head>


<body>
<div class="rightinfo">
    <!-- 顶部按钮 -->
    <div class="tools">
        <ul class="toolbar">
            <!--增加链接-->
            <a href="add.html">
                <li class="click">
                    <span><img src="../images/t01.png"/></span>
                    添加
                </li>
            </a>
        </ul>
    </div>
    <!--数据列表 -->
    <table class="tablelist" id="attendTable">
        <tr>
            <th>序号<i class="sort"><img src="../images/px.gif"/></i></th>
            <th>姓名</th>
            <th>宿舍号</th>
            <th>时间</th>
            <th>备注</th>
            <th>操作人</th>
            <th>操作时间</th>
            <th>操作</th>
        </tr>
    </table>
</div>
</body>
</html>

add.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript">
        $(function () {
            //或取楼栋信息下拉框
            $.get("../back/dormitory", {mark: "getBuildings"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#buildingId").append(str);
                }
            }, "json")
        })

        //通过楼栋获取楼层层数
        function getFloors(buildingId) {
            $.get("../back/dormitory", {mark: "getFloors", buildingId: buildingId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 1; i <= res; i++) {
                        str += "<option value='" + i + "'>" + i + "</option>"
                    }
                    $("#floor").html(str + "层");
                }
            })
        }

        //通过楼层获取该层宿舍
        function getDormitory(floorNumber) {
            var buildingId = $("#buildingId").val();
            $.get("../back/student", {
                mark: "getDorms",
                buildingId: buildingId,
                floorNumber: floorNumber
            }, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].num + "</option>"
                    }
                    $("#dormitoryNum").html(str);
                }
            }, "json")
        }

        //通过宿舍获取该宿舍学生
        function getStudent(dormId) {
            $.get("../back/student", {mark: "getStudent", dormId: dormId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "<option>请选择</option>";
                    for (let i = 0; i < res.length; i++) {
                        str += "<option value='" + res[i].id + "'>" + res[i].name + "</option>"
                    }
                    $("#name").html(str);
                }
            }, "json")
        }


        function add() {
            $.post("../back/attend", $("#addForm").serialize(), function (res) {
                if (res == 0) {
                    alert("添加成功");
                    location.replace("list.html");
                } else if (res == 1) {
                    alert("添加失败");
                } else {
                    alert("服务器忙,请稍后再试");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="addForm">
        <input type="hidden" name="mark" value="add">
        <ul class="forminfo">
            <li>
                <label>楼栋</label>
                <select id="buildingId" name="building" class="dfinput" onchange="getFloors(this.value)">
                </select>
            </li>
            <li>
                <label>楼层</label>
                <select id="floor" name="floor" class="dfinput" onchange="getDormitory(this.value)">
                </select>
            </li>
            <li>
                <label>宿舍号</label>
                <select id="dormitoryNum" name="dormitoryNum" class="dfinput" onchange="getStudent(this.value)">
                </select>
            </li>
            <li>
                <label>姓名</label>
                <select id="name" name="studentId" class="dfinput"></select>
            </li>
            <li>
                <label>时间</label>
                <input type="text" name="time" class="sang_Calender"
                       style="width:345px; height:32px; line-height:32px; border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; background:url(../images/inputbg.gif) repeat-x; text-indent:10px;"/>
            </li>
            <li>
                <label>备注</label>
                <input name="remark" type="text" id="remark" class="dfinput"/>
            </li>

            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="add()"/>
            </li>
        </ul>
    </form>

</div>
<script type="text/javascript" src="../js/datetime.js"></script>


</body>

</html>

update.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css"/>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //拿到考勤单的id
        var aid = localStorage.getItem("aid");
        console.log("getid" + aid)
        $(function () {
            //获取该考勤的信息
            $.get("../back/attend", {id: aid, mark: "updateGet"}, function (res) {
                console.log(res);
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    $("#time").val((new Date(res.time)).toLocaleString());
                    $("#name").val(res.studentName);
                    $("#remark").val(res.remark);
                    //id
                    $("input[name='id']").val(aid);
                }
            }, "json")
        })

        //保存修改
        function updateSave() {
            $.post("../back/attend", $("#updateForm").serialize(), function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    alert("修改成功");
                    location.assign("list.html");
                }
            })
        }
    </script>
</head>

<body>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form id="updateForm">
        <input type="hidden" name="id"/>
        <input type="hidden" name="mark" value="update">
        <ul class="forminfo">
            <li>
                <label>姓名</label>
                <input id="name" name="studentId" class="dfinput" readonly>
            </li>
            <li>
                <label>时间</label>
                <input type="text" name="time" id="time" class="sang_Calender"
                       style="width:345px; height:32px; line-height:32px; border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; background:url(../images/inputbg.gif) repeat-x; text-indent:10px;"/>
            </li>
            <li>
                <label>备注</label>
                <input name="remark" type="text" id="remark" class="dfinput"/>
            </li>
            <li>
                <input id="addBtn" name="" type="button" class="btn" value="确认保存" onclick="updateSave()"/>
            </li>
        </ul>
    </form>

</div>
<script type="text/javascript" src="../js/datetime.js"></script>
</body>

</html>

AttendServlet

package com.ff.dormitoryManage.servlet;

import com.ff.dormitoryManage.dao.AttendDao;
import com.ff.dormitoryManage.model.Administrator;
import com.ff.dormitoryManage.model.Attend;
import com.google.gson.Gson;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * @author Deevan
 */
public class AttendServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("list".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                AttendDao attendDao = new AttendDao();
                List<Attend> attends = attendDao.attendList();
                //把集合转换成json字符串
                out.println(new Gson().toJson(attends));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("deleteAttend".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                AttendDao attendDao = new AttendDao();
                attendDao.deleteAttend(id);
                out.println(200);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("updateGet".equals(mark)) {
            System.out.println("updateAttend");
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                AttendDao attendDao = new AttendDao();
                String id = req.getParameter("id");
                Attend attend = attendDao.gatAttend(id);
                //把集合转换成json字符串
                out.println(new Gson().toJson(attend));
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("add".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String dormitoryId = req.getParameter("dormitoryNum");
                String studentId = req.getParameter("studentId");
                String time = req.getParameter("time");
                String remark = req.getParameter("remark");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                AttendDao attendDao = new AttendDao();
                attendDao.add(dormitoryId, studentId, time, remark, administratorId);
                //添加成功
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        } else if ("update".equals(mark)) {
            PrintWriter out = null;
            resp.setContentType("text/html;charset=utf-8");
            try {
                out = resp.getWriter();
                String id = req.getParameter("id");
                String remark = req.getParameter("remark");
                String time = req.getParameter("time");
                //拿到操作人的id
                HttpSession session = req.getSession();
                Administrator administrator = (Administrator) session.getAttribute("administrator");
                int administratorId = administrator.getId();
                //修改成功
                AttendDao attendDao = new AttendDao();
                attendDao.updateSave(id, remark, time, administratorId);
                out.println(0);
            } catch (Exception e) {
                e.printStackTrace();
                out.println(500);
            }
        }
    }
}

AttendDao

package com.ff.dormitoryManage.dao;

import com.ff.dormitoryManage.model.Attend;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class AttendDao {
    public List<Attend> attendList() throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        List<Attend> list = new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT ad.id,s.name,d.num,ad.time,ad.remark,a.account,ad.operateTime\n" +
                    "FROM attendance ad INNER JOIN student s ON ad.studentId=s.id\n" +
                    "INNER JOIN dormitory d ON ad.dormitoryId=d.id\n" +
                    "INNER JOIN administrator a ON ad.operatorId=a.id");
            resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Attend attend = new Attend();
                attend.setId(resultSet.getInt("id"));
                attend.setStudentName(resultSet.getString("name"));
                attend.setDormNum(resultSet.getString("num"));
                attend.setTime(resultSet.getTimestamp("time"));
                attend.setRemark(resultSet.getString("remark"));
                attend.setOperatorAccount(resultSet.getString("account"));
                attend.setOperateTime(resultSet.getTimestamp("operateTime"));
                list.add(attend);
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return list;
    }

    public void deleteAttend(String id) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("DELETE FROM attendance WHERE id=?");
            ps.setString(1, id);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public void add(String dormitoryId, String studentId, String time, String remark, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intDormId = Integer.parseInt(dormitoryId);
        int intStudentId = Integer.parseInt(studentId);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("INSERT INTO attendance(studentId,dormitoryId,TIME,remark,operatorId,operateTime)VALUES(?,?,NOW(),?,?,NOW())");
            ps.setInt(1, intStudentId);
            ps.setInt(2, intDormId);
            ps.setString(3, remark);
            ps.setInt(4, administratorId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }

    public Attend gatAttend(String id) throws ClassNotFoundException, SQLException {
        System.out.println("getAttendDao");
        System.out.println(id);
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        Attend attend = null;
        int intId = Integer.parseInt(id);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("SELECT s.name,a.TIME,a.remark \n" +
                    "FROM attendance a LEFT JOIN student s ON a.studentId=s.id\n" +
                    "WHERE a.id=?");
            ps.setInt(1, intId);
            resultSet = ps.executeQuery();
            if (resultSet.next()) {
                attend = new Attend();
                attend.setStudentName(resultSet.getString("name"));
                attend.setTime(resultSet.getTimestamp("time"));
                attend.setRemark(resultSet.getString("remark"));
            }
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
        return attend;
    }

    public void updateSave(String id, String remark, String time, int administratorId) throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        int intId = Integer.parseInt(id);
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/dormitoryManage_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
            connection = DriverManager.getConnection(url, "root", "152475");
            ps = connection.prepareStatement("update attendance\n" +
                    "set remark=?,time=now(),operatorId=?,operateTime=now()\n" +
                    "where id=?");
            ps.setString(1, remark);
            ps.setInt(2, administratorId);
            ps.setInt(3, intId);
            ps.executeUpdate();
        } finally {
            if (connection != null) {
                connection.close();
            }
            if (ps != null) {
                ps.close();
            }
        }
    }
}

综合查询模块

search.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
        #main {
            width: 100%;
            min-width: 1000px;
            height: 600px;
            font-family: 黑体;
        }

        .top {
            height: 100px;
            margin-bottom: 10px;
            background-color: white;
        }

        .title {
            color: black;
            font-size: 14px;
            font-weight: bold;
            padding: 10px;
        }

        .building {
            float: left;
            width: 100px;
            height: 30px;
            line-height: 30px;
            text-align: center;
            background-color: #33C6A7;
            margin-left: 10px;
            border-radius: 5px;
            color: white;
            font-size: 14px;
            font-weight: 700;
        }

        .left, .right {
            background-color: white;
            height: 500px;
        }

        .left {
            width: 19%;
            float: left;
            padding: 10px;
        }

        .floor {
            height: 40px;
            line-height: 41px;
            padding-left: 10px;
            border-bottom: 1px gainsboro solid;
        }

        .go {
            float: right;
            margin-right: 10px;
        }

        .right {
            width: 78%;
            float: right;
        }

        .dorm {
            width: 150px;
            height: 150px;
            background-color: #F2FEFF;
            float: left;
            margin-left: 10px;
            margin-top: 10px;
            border-radius: 5px;
            text-align: center;
            color: #a7acac;
            font-size: 14px;
        }
    </style>
    <script src="../js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            $.get("../back/building", {mark: "list"}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<div class=\"building\" οnclick='selectFloors(" + res[i].id + ")'>" + res[i].name + "</div>"
                    }
                    $("#building").html(str);
                }
            }, "json")
        })

        function selectFloors(buildingId) {
            $.get("../back/dormitory", {mark: "getFloors", buildingId: buildingId}, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 1; i <= res; i++) {
                        str += "<div class='floor' οnclick='selectDorms(" + i + "," + buildingId + ")'>"
                        str += "" + i + "层"
                        str += "<span class='go'>&gt;</span>"
                        str += "</div>"
                    }
                    $("#floorNumber").html(str);
                }
            })
        }

        function selectDorms(floorNumber, buildingId) {
            $.get("../back/student", {
                mark: "getDorms",
                buildingId: buildingId,
                floorNumber: floorNumber
            }, function (res) {
                if (res == 201) {
                    window.parent.location.replace("../login.html");
                } else if (res == 500) {
                    alert("服务器忙,请稍后再试");
                } else {
                    var str = "";
                    for (let i = 0; i < res.length; i++) {
                        str += "<div class='dorm'>"
                        str += "<span>" + res[i].num + "</span><br>"
                        str += "<span>"
                        str += "入住学生<br>"
                        $.ajax({
                            url: "../back/dormitory",
                            type: "get",
                            data: {
                                mark: "getStudents",
                                dormId: res[i].id,
                            },
                            dataType: 'json',
                            async: false,
                            success: function (res) {
                                if (res == 201) {
                                    window.parent.location.replace("../login.html");
                                } else if (res == 500) {
                                    alert("服务器忙,请稍后再试");
                                } else {
                                    for (let j = 0; j < res.length; j++) {
                                        str += "" + res[j] + "<br>"
                                    }
                                }
                            }
                        })
                        str += "</span>"
                        str += "</div>"
                    }
                    $("#dormsId").html(str);
                }
            }, "json")
        }

    </script>
</head>
<body bgcolor="#F3F3F4">
<div id="main">
    <div class="top">
        <div class="title">
            宿舍信息查询
        </div>
        <div id="building">
        </div>
    </div>
    <div>
        <div class="left" id="floorNumber">

        </div>
        <div class="right" id="dormsId">

        </div>
        <div style="clear:left;"></div>
    </div>
</div>
</body>
</html>

数据库设计

-- 创建大学生宿舍管理系统数据库
CREATE DATABASE dormitoryManage_db;

-- 创建系统管理员表
CREATE TABLE administrator(
	id INT PRIMARY KEY AUTO_INCREMENT,
	account VARCHAR(10) NOT NULL UNIQUE,
	PASSWORD VARCHAR(10) NOT NULL
)

-- 创建楼栋表
CREATE TABLE building(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(8) NOT NULL UNIQUE,
	TYPE VARCHAR(2) NOT NULL,
	floorNumbers INT NOT NULL,
	remark VARCHAR(16),
	operatorId INT,
	operateTime DATETIME,
	CONSTRAINT fk_bo FOREIGN KEY(operatorId) REFERENCES administrator(id)
)

-- 创建楼栋管理员表
CREATE TABLE buildAdmin(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(8) NOT NULL,
	sex VARCHAR(1) NOT NULL,
	age INT NOT NULL,
	telephone VARCHAR(16) NOT NULL,
	address VARCHAR(16),
	entryTime DATETIME NOT NULL,
	buildId INT,
	operatorId INT,
	operateTime DATETIME,
	CONSTRAINT fk_bab FOREIGN KEY(buildId) REFERENCES building(id),
	CONSTRAINT fk_bao FOREIGN KEY(operatorId) REFERENCES administrator(id)
)

-- 创建宿舍表  状态(0-空闲,1-已入住,2-维修)
CREATE TABLE dormitory(
	id INT PRIMARY KEY AUTO_INCREMENT,
	num VARCHAR(8) NOT NULL UNIQUE,
	floorNumber INT NOT NULL,
	buildingId INT NOT NULL,
	population INT NOT NULL,
	state INT NOT NULL,
	remark VARCHAR(16),
	operatorId INT,
	operateTime DATETIME,
	CONSTRAINT fk_db FOREIGN KEY(buildingId) REFERENCES building(id),
	CONSTRAINT fk_do FOREIGN KEY(operatorId) REFERENCES administrator(id)
)

-- 创建学生表  状态(0-已入住,1-未入住)
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT,
	num VARCHAR(16) NOT NULL UNIQUE,
	NAME VARCHAR(8) NOT NULL UNIQUE,
	sex VARCHAR(1) NOT NULL,
	class VARCHAR(8),
	state INT NOT NULL,
	checkinDate DATE,
	dormitoryId INT,
	operatorId INT,
	operateTime DATETIME,
	CONSTRAINT fk_sd FOREIGN KEY(dormitoryId) REFERENCES dormitory(id),
	CONSTRAINT fk_so FOREIGN KEY(operatorId) REFERENCES administrator(id)
)

-- 创建考勤表
CREATE TABLE attendance(
	id INT PRIMARY KEY AUTO_INCREMENT,
	TIME DATETIME,
	remark CHAR(5),
	studentId INT,
	dormitoryId INT,
	operatorId INT,
	operateTime DATETIME,
	CONSTRAINT fk_as FOREIGN KEY(studentId) REFERENCES student(id),
	CONSTRAINT fk_ad FOREIGN KEY(dormitoryId) REFERENCES dormitory(id),
	CONSTRAINT fk_ao FOREIGN KEY(operatorId) REFERENCES administrator(id)
)

-- 登录验证
SELECT id,account FROM administrator WHERE account='admin' AND PASSWORD='00000'

-- 显示楼栋信息
SELECT b.id,b.name,b.type,b.floorNumbers,b.remark,a.account,b.operateTime FROM building b LEFT JOIN administrator a ON b.operatorId=a.id

-- 验证楼栋名称是否存在
SELECT COUNT(*) FROM building WHERE NAME='一号楼'

-- 添加楼栋
INSERT INTO building(NAME,TYPE,floorNumbers,remark,operatorId,operateTime)VALUES(?,?,?,?,?,NOW())

-- 删除楼栋
DELETE FROM building WHERE id=?

-- 通过id查找楼栋信息
SELECT* FROM building WHERE id=1

-- 通过id修改楼栋信息
UPDATE building
SET TYPE=?,floorNumbers=?,remark=?,operatorId=?,operateTime=NOW()
WHERE id=?


-- 显示楼姨信息
SELECT ba.id,ba.name,ba.sex,ba.age,ba.telephone,ba.address,ba.entryTime,b.name,a.account,ba.operateTime FROM buildAdmin ba INNER JOIN building b ON ba.buildId=b.id INNER JOIN administrator a ON ba.operatorId=a.id

-- 查找楼栋名称下拉框
SELECT id,NAME FROM building

-- 添加楼姨信息
INSERT INTO buildAdmin(NAME,sex,age,telephone,address,entryTime,buildId,operatorId,operateTime)VALUES('asd','d',15,'156165','asdas',NOW(),1,1,NOW())

-- 删除楼姨信息
DELETE FROM buildAdmin WHERE id=?

-- 修改获取楼姨信息
SELECT* FROM buildadmin WHERE id=1

-- 修改楼姨信息
UPDATE buildadmin 
SET NAME=?,sex=?,age=?,telephone=?,address=?,buildId=?,operatorId=?,operateTime=NOW()
WHERE id=?


-- 显示宿舍信息
SELECT d.id,d.num,d.floorNumber,b.name BuildName,d.population,d.state,d.remark,a.account,d.operateTime
FROM dormitory d INNER JOIN building b ON d.buildingId=b.id
		INNER JOIN administrator a ON d.operatorId=a.id
		
-- 获取楼栋下拉框
SELECT* FROM building
		
-- 通过楼栋id获得楼栋总层数
SELECT floorNumbers FROM building WHERE id=?

-- 添加宿舍
INSERT INTO dormitory(num,floorNumber,buildingId,population,state,remark,operatorId,operateTime)VALUES(?,?,?,?,?,?,?,NOW())
		
-- 删除宿舍信息
DELETE FROM dormitory WHERE id=?

-- 修改获取宿舍信息
SELECT* FROM dormitory WHERE id=?

-- 修改宿舍信息
UPDATE dormitory
SET num=?,floorNumber=?,buildingId=?,population=?,state=?,remark=?,operatorId=?,operateTime=NOW()
WHERE id=?


-- 显示学生信息
SELECT s.id,s.num,s.name,s.sex,s.class,s.state,s.checkinDate,d.num dormitoryName,a.account,s.operateTime
FROM student s INNER JOIN dormitory d ON s.dormitoryId=d.id
		INNER JOIN administrator a ON s.operatorId=a.id ORDER BY s.id
		
-- 通过学生性别选楼栋
SELECT* FROM building WHERE TYPE=?

-- 通过楼层获取该层宿舍信息
SELECT* FROM dormitory WHERE floorNumber=? AND buildingId=?

-- 添加学生
INSERT INTO student(num,NAME,sex,class,state,checkinDate,dormitoryId,operatorId,operateTime)VALUES(?,?,?,?,?,NOW(),?,?,NOW())

-- 通过Id获取学生信息
SELECT s.id,s.num,s.name,s.sex,s.class,s.state,s.checkinDate,s.dormitoryId,d.floorNumber,d.buildingId,b.floorNumbers
FROM student s INNER JOIN dormitory d ON s.dormitoryId=d.id
INNER JOIN building b ON d.buildingId=b.id
WHERE s.id=1

-- 修改学生信息
UPDATE student
SET num=?,NAME=?,sex=?,class=?,state=?,checkinDate=NOW(),dormitoryId=?,operatorId=?,operateTime=NOW()
WHERE id=?

-- 显示考勤信息
SELECT ad.id,s.name,d.num,ad.time,ad.remark,a.account,ad.operateTime
FROM attendance ad INNER JOIN student s ON ad.studentId=s.id
INNER JOIN dormitory d ON ad.dormitoryId=d.id
INNER JOIN administrator a ON ad.operatorId=a.id

-- 通过宿舍id显示所有学生姓名
SELECT NAME FROM student WHERE dormitoryId=?

-- 添加考勤信息
INSERT INTO attendance(studentId,dormitoryId,TIME,remark,operatorId,operateTime)VALUES(?,?,?,?,?,NOW())

-- 获取指定宿舍学生信息
SELECT* FROM student WHERE dormitoryId=?

-- 通过id获取该考勤信息
SELECT s.name,a.TIME,a.remark 
FROM attendance a LEFT JOIN student s ON a.studentId=s.id
WHERE a.id=2

-- 修改考勤信息
UPDATE attendance
SET remark=?,TIME=NOW(),operatorId=?,operateTime=NOW()
WHERE id=?

其他设计

过滤器

编码过滤器
package com.ff.dormitoryManage.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * 编码过滤器
 *
 * @author Deevan
 */
public class EncodeFilter implements Filter {
    String encode;

    /**
     * 从编码过滤器配置中通过encode键获取值(encode)
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        encode = filterConfig.getInitParameter("encode");
    }

    /**
     * 执行过滤代码
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding(encode);
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
是否登录过滤器
package com.ff.dormitoryManage.filter;

import com.ff.dormitoryManage.model.Administrator;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * sessionId过滤器
 *
 * @author Deevan
 */
public class IsLoginFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //把ServletRequest向下转型为HttpServletRequest对象
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpSession session = httpServletRequest.getSession();
        Administrator user = (Administrator) session.getAttribute("administrator");
        if (user == null) {
            PrintWriter out = servletResponse.getWriter();
            out.println(201);
        } else {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }
}

日志

log4j.properties

log4j.rootLogger = debug,stdout,D
#System out Console
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n

#System out File
log4j.appender.D = org.apache.log4j.FileAppender
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F://java project/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ] -[%l] %m%n

引用

时间框

datetime.js

(function () {
    var d = document,
        w = window,
        isIE = w.navigator.appVersion.indexOf("MSIE") > -1,
        now = new Date(),
        nowM = now.getMonth();
    nowY = now.getFullYear();
    date = null,
        ids = null,
        oInput = null;
    document.write('<iframe frameborder=0 style="display:none;position:absolute;" width="200" height="215" scrolling="no" name="sangcalender" id="sangcalender"></iframe>');
    var f = window.frames['sangcalender'];
    var ff = d.getElementById('sangcalender');
    var fd = f.document;
    fd.open();
    fd.write('<!DOCTYPE html><html><head><style type="text/css">#yearL, #monthL, #monthR, #yearR, #hoursL, #hoursR, #minL, #minR, #y, #m, #h, #i, #s{cursor:pointer;}.calenderClose a{display:block;width:13px;line-height:13px;border:1px solid #cccccc;background-color:#eeeeee;color:#666; text-decoration:none}.calenderClose a:hover{color:red}td{text-align:center}#calenderDay{cursor:pointer}body{font-size:12px;padding:0;margin:0}.col666{color:#999}.bg9ebdd6{background-color:#9ebdd6}</style></head><body onselectstart="return false" style="-moz-user-select:none" οncοntextmenu="return false">')
    fd.write('<table width="100%" border="0" bgcolor="#CCCCCC" cellspacing="1" cellpadding="0">' +
        '<tr><td><table border="0" cellspacing="0" bgcolor="#6699FF" cellpadding="0" width="100%">' +
        '<tr><td width="20" height="25" align="center" id="yearL" title="上一年">&lt;&lt;</td>' +
        '<td width="12" align="center" id="monthL" title="上一月">&lt;</td><td align="center">' +
        '<span id="y" title="点击选择年份"></span>年<span id="m" title="点击选择月份"></span>月</td>' +
        '<td width="12" align="center" id="monthR" title="下一月">&gt;</td>' +
        '<td width="20" align="center" id="yearR" title="下一年">&gt;&gt;</td></tr></table></td></tr>' +
        '<tr bgcolor="#FFFFFF"><td><table width="100%" border="0" bgcolor="#9999FF" cellspacing="1" cellpadding="0">' +
        '<tr bgcolor="#CCCCFF" height="18"><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr></table></td></tr>' +
        '<tr bgcolor="#FFFFFF"><td><div id="calenderDay"></div></td></tr>' +
        '<tr><td><table border="0" bgcolor="#eeeeee" cellpadding="0" cellspacing="0" width="100%">' +
        '<tr><td align="center" height="20" id="hoursL" title="时减少">&lt;&lt;</td>' +
        '<td align="center" id="minL" title="分减少">&lt;</td>' +
        '<td align="center"><span id="h" title="点击选择小时"></span>:<span id="i" title="点击选择分"></span>:<span id="s" title="点击选择秒"></span></td>' +
        '<td align="center" id="minR" title="分增加">&gt;</td><td align="center" id="hoursR" title="时增加">&gt;&gt;</td></tr>' +
        '</table></td></tr></table>');
    fd.write('</body></html>');
    fd.close();

    //获取框架里的元素  gids.call(obj,id)
    function gids(idArr) {
        var oId = [];
        for (var i = 0, len = idArr.length; i < len; i++) {
            oId[idArr[i]] = this.getElementById(idArr[i]);
        }
        return oId;
    }

    //需要添加事件的元素的集合
    var idsArr = ['yearL', 'yearR', 'y', 'm', 'monthL', 'monthR', 'hoursL', 'hoursR', 'minL', 'minR', 'calenderClose', 'calenderDay', 'h', 'i', 's'];
    if (!ids) {
        ids = gids.call(fd, idsArr)
    }
    ;

    //格式化日历控件
    function formatDay(timestr) {
        var t = /(\d+)-(\d+)-(\d+)\s*(\d*):?(\d*):?(\d*)/.exec(timestr);
        var da = null;
        var dn = getdate(now);
        if (t) {
            da = new Date(t[1], t[2] - 1, 1, t[4], t[5], t[6]);
        } else {
            da = new Date(dn['y'], dn['m'], 1, dn['h'], dn['i'], dn['s']);
        }
        date = getdate(da);
        var mon = [31, date['y'] % 4 == 0 ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
        var str = "", day = 1;
        str += '<table width="100%" border="0" bgcolor="#cecece" cellspacing="1" cellpadding="0">';
        for (var md = mon[date['m'] - 1], wd = md - date['w'] + 1, n = 0; n < 6; n++) {
            str += '<tr bgcolor="#ffffff" height="23">';
            for (var nn = 0; nn < 7; nn++) {
                if (wd <= md) {
                    str += '<td class="col666">' + wd + '</td>';
                    wd++;
                } else {
                    if (day <= mon[date['m']]) {
                        if (day == dn['d'] && nowM == now.getMonth() && nowY == now.getFullYear()) {
                            str += '<td class="bg9ebdd6">' + (day++) + '</td>';
                        } else {
                            str += '<td>' + (day++) + '</td>';
                        }
                        var day2 = 1;
                    } else {
                        str += '<td class="col666">' + (day2++) + '</td>';
                    }
                }
            }
            str += '</tr>';
        }
        str += '</table>';
        ids['calenderDay'].innerHTML = str;
        var dates = [date['y'], fillzero(date['m'] + 1), fillzero(date['h']), fillzero(date['i']), fillzero(date['s'])];
        each.call([ids['y'], ids['m'], ids['h'], ids['i'], ids['s']], function (o, i) {
            o.innerHTML = dates[i]
        });
        each.call(ids['calenderDay'].getElementsByTagName("td"), function (o, i) {
            addEvent(o, "mouseover", function (e) {
                o.style.backgroundColor = "#9ebdd6";
            })
            addEvent(o, "mouseout", function (e) {
                o.style.backgroundColor = "";
            })
            addEvent(o, "click", function (e) {
                if (o.className == "col666") {
                    return
                }
                oInput.value = ids['y'].innerHTML + "-" + ids['m'].innerHTML + "-" + fillzero(o.innerHTML)
                    + " " + ids['h'].innerHTML + ":" + ids['i'].innerHTML + ":" + ids['s'].innerHTML;
                hide();
            })
        })
    }

    //为按钮添加事件
    var handlers = [yL, yR, mL, mR, hL, hR, iL, iR];
    each.call([ids['yearL'], ids['yearR'], ids['monthL'], ids['monthR'], ids['hoursL'], ids['hoursR'], ids['minL'], ids['minR']], function (o, i) {
        addEvent(o, "click", handlers[i]);
    })

    var clicks = [yClick, mClick, hClick, iClick, sClick];
    each.call([ids['y'], ids['m'], ids['h'], ids['i'], ids['s']], function (o, i) {
        addEvent(o, "click", clicks[i]);
    })

    //获取元素位置
    function getPos(e) {
        var x, y, e = typeof e == "string" ? d.getElementById(e) : e, p = [];
        x = e.offsetLeft;
        y = e.offsetTop;
        while (e = e.offsetParent) {
            x += e.offsetLeft;
            y += e.offsetTop;
        }
        p['x'] = x;
        p['y'] = y;
        return p;
    }

    //上一年
    function yL() {
        now.setFullYear(date['y'] - 1);
        formatDay();
    }

    //下一年
    function yR() {
        now.setFullYear(date['y'] + 1);
        formatDay();
    }

    //上一月
    function mL() {
        now.setMonth(date['m'] - 1);
        formatDay();
    }

    //下一月
    function mR() {
        now.setMonth(date['m'] + 1);
        formatDay();
    }

    //时增加
    function hR() {
        now.setHours(date['h'] + 1);
        formatDay();
    }

    //时减少 
    function hL() {
        now.setHours(date['h'] - 1);
        formatDay();
    }

    //分增加
    function iR() {
        now.setMinutes(date['i'] + 1);
        formatDay();
    }

    //分减少
    function iL() {
        now.setMinutes(date['i'] - 1);
        formatDay();
    }

    //为SELECT添加事件
    function addEventForSelect(type) {
        function changeInner() {
            ids[type].innerHTML = fillzero(oSelect.value);
            now.setFullYear(ids['y'].innerHTML);
            now.setMonth(Number(ids['m'].innerHTML) - 1);
            now.setHours(ids['h'].innerHTML);
            now.setMinutes(ids['i'].innerHTML);
            now.setSeconds(ids['s'].innerHTML);
            formatDay();
        }

        var oSelect = gids.call(fd, ['calenderSelect'])['calenderSelect'];
        oSelect.focus();
        addEvent(oSelect, 'change', changeInner);
        addEvent(oSelect, "blur", changeInner);
    }

    //生成option选项
    function createOption(type, v) {
        var str = '', str2 = '', i = 0, i2 = 0;

        function create(i, i2) {
            while (i >= i2) {
                if (v == i) {
                    str2 += '<option value="' + i + '" selected>' + i + '</option>';
                } else {
                    str2 += '<option value="' + i + '">' + i + '</option>';
                }
                i--;
            }
            str += str2 + '</select>';
            ids[type].innerHTML = str;
            addEventForSelect(type);
        }

        str += '<select id="calenderSelect">';
        if (type == "y") {
            i = 2011;
            i2 = 1990;
            create(i, i2);
            return;
        }
        if (type == "m") {
            i = 1;
            i2 = 12;
        }
        if (type == "h") {
            i = 00;
            i2 = 23;
        }
        if (type == "i") {
            i = 00;
            i2 = 59;
        }
        if (type == "s") {
            i = 00;
            i2 = 59;
        }
        create(i2, i);
    }

    //年鼠标点击
    function yClick(e) {
        if (getTarget(e).tagName.toLowerCase() == "span") {
            createOption("y", ids['y'].innerHTML);
        }
    }

    //月鼠标点击
    function mClick(e) {
        if (getTarget(e).tagName.toLowerCase() == "span") {
            createOption("m", ids['m'].innerHTML);
        }
    }

    //时鼠标点击
    function hClick(e) {
        if (getTarget(e).tagName.toLowerCase() == "span") {
            createOption("h", ids['h'].innerHTML);
        }
    }

    //分鼠标点击
    function iClick(e) {
        if (getTarget(e).tagName.toLowerCase() == "span") {
            createOption("i", ids['i'].innerHTML);
        }
    }

    //秒鼠标点击
    function sClick(e) {
        if (getTarget(e).tagName.toLowerCase() == "span") {
            createOption("s", ids['s'].innerHTML);
        }
    }

    //each方法
    function each(handler) {
        var o = null;
        for (var i = 0, len = this.length; i < len; i++) {
            o = typeof this[i] == "string" ? fd.getElementById(this[i]) : this[i];
            handler(o, i);
        }
    }

    //如果日期为一位数,则在前面补零
    function fillzero(str) {
        var str = typeof str == "string" ? str : str.toString();
        if (str.length == 1) {
            str = "0" + str;
        }
        return str;
    }

    //获取时间
    function getdate(da) {
        var date = [];
        date['y'] = da.getFullYear();
        date['m'] = da.getMonth();
        date['d'] = da.getDate();
        date['w'] = da.getDay();
        date['h'] = da.getHours();
        date['i'] = da.getMinutes();
        date['s'] = da.getSeconds();
        return date;
    }

    //阻止默认事件
    function preventDefault(e) {
        var e = e || window.event;
        if (e.preventDefault) {
            e.preventDefault();
        } else {
            e.returnValue = false;
        }
    }

    function getTarget(e) {
        var e = e || window.event;
        return e.srcElement || e.target;
    }

    //显示日历控件
    function show(o) {
        var s = o.value;
        var p = getPos(o);
        if (s) {
            formatDay(s);
        } else {
            now = new Date();
            formatDay();
        }
        ff.style.left = p['x'] + "px";
        ff.style.top = p['y'] + o.offsetHeight + "px";
        ff.style.display = "block";
    }

    //隐藏日历控件
    function hide() {
        ff.style.display = "none";
    }

    //添加事件
    function addEvent(element, event, handler) {
        var element = typeof element == "string" ? d.getElementById(element) : element;
        if (element.addEventListener) {
            element.addEventListener(event, handler, false)
        } else if (element.attachEvent) {
            element.attachEvent("on" + event, handler);
        } else {
            element["on" + event] = handler;
        }
    }

    //获取要实现控件的表单
    function getObj(className) {
        var o = d.getElementsByTagName('*'), oArr = [];
        for (var i = 0, len = o.length; i < len; i++) {
            if (o[i].className == className) {
                oArr.push(o[i])
            }
        }
        return oArr;
    }

    each.call(getObj("sang_Calender"), function (o, i) {
        addEvent(o, "click", function (e) {
            preventDefault(e);
            oInput = o, show(o);
            ff.focus()
        })
    })

    //var iframeObj=isIE?ff:f;
    addEvent(isIE ? ff : f, "blur", function (e) {
        hide()
    })
})()

css

login.css

* {
    font: 13px/1.5 '微软雅黑', Verdana, Helvetica, Arial, sans-serif;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    -box-sizing: border-box;
    padding: 0;
    margin: 0;
    list-style: none;
    box-sizing: border-box;
}

body, html {
    height: 100%;
    overflow: hidden;
}

body {
    background: url(../images/login_bg.jpg) no-repeat center;
    background-size: cover;
    min-height: 600px;
    min-width: 500px
}

a {
    color: #27A9E3;
    text-decoration: none;
    cursor: pointer;
}

.login {
    margin: 150px auto 0 auto;
    height: 380px;
    width: 420px;
    padding: 40px;
    background-color: #ffffff;

    border-radius: 4px;
    /* overflow-x: hidden; */
    box-sizing: border-box;

}

a.logo {
    display: block;
    height: 58px;
    width: 167px;
    margin: 0 auto 30px auto;
    background-size: 167px 42px;
}

.title {

    padding: 18px 10px 18px 10px;
    background: #27A9E3;
    position: relative;
    color: #fff;
    font-size: 20px;
    text-align: center;
}

#darkbannerwrap {

    width: 18px;
    height: 10px;
    margin: 0 0 20px -58px;
    position: relative;
}

input[type=text],
input[type=file],
input[type=password],
input[type=email], select {
    border: 1px solid #DCDEE0;
    vertical-align: middle;
    border-radius: 3px;
    height: 50px;
    padding: 0px 16px;
    font-size: 14px;
    color: #555555;
    outline: none;
    width: 100%;
}

input[type=text]:focus,
input[type=file]:focus,
input[type=password]:focus,
input[type=email]:focus, select:focus {
    border: 1px solid #27A9E3;
}


input[type=submit],
input[type=button] {
    display: inline-block;
    vertical-align: middle;
    padding: 12px 24px;
    margin: 0px;
    font-size: 18px;
    line-height: 24px;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    cursor: pointer;
    color: #ffffff;
    background-color: #27A9E3;
    border-radius: 3px;
    border: none;
    -webkit-appearance: none;
    outline: none;
    width: 100%;
}

hr.hr15 {
    height: 15px;
    border: none;
    margin: 0px;
    padding: 0px;
    width: 100%;
}

hr.hr20 {
    height: 20px;
    border: none;
    margin: 0px;
    padding: 0px;
    width: 100%;
}

.copyright {
    font-size: 14px;
    color: rgba(255, 255, 255, 0.85);
    display: block;
    position: absolute;
    bottom: 15px;
    right: 15px;
}

style.css

@charset "utf-8";
/* CSS Document */
/***
 * uimaker
 * http://www.uimaker.com
 * e-mail: admin@uimaker.com
 */
*{font-size:9pt;border:0;margin:0;padding:0;}
body{font-family:'微软雅黑'; margin:0 auto;min-width:980px;}
ul{display:block;margin:0;padding:0;list-style:none;}
li{display:block;margin:0;padding:0;list-style: none;}
img{border:0;}
dl,dt,dd,span{margin:0;padding:0;display:block;}
a,a:focus{text-decoration:none;color:#000;outline:none;blr:expression(this.onFocus=this.blur());}
a:hover{color:#00a4ac;text-decoration:none;}
table{border-collapse:collapse;border-spacing: 0;}
cite{font-style:normal;}
h2{font-weight:normal;}

/*cloud*/

#mainBody {width:100%;height:100%;position:absolute;z-index:-1;}
.cloud {position:absolute;top:0px;left:0px;width:100%;height:100%;background:url(../images/cloud.png) no-repeat;z-index:1;opacity:0.5;}
#cloud2 {z-index:2;}


/*login*/
.logintop{height:47px; position:absolute; top:0; background:url(../images/loginbg1.png) repeat-x;z-index:100; width:100%;}
.logintop span{color:#fff; line-height:47px; background:url(../images/loginsj.png) no-repeat 21px 18px; text-indent:44px; color:#afc5d2; float:left;}
.logintop ul{float:right; padding-right:30px;}
.logintop ul li{float:left; margin-left:20px; line-height:47px;}
.logintop ul li a{color:#afc5d2;}
.logintop ul li a:hover{color:#fff;}
.loginbody{background:url(../images/loginbg3.png) no-repeat center center; width:100%; height:585px; overflow:hidden; position:absolute; top:47px;}
.systemlogo{background:url(../images/loginlogo.png) no-repeat center;width:100%; height:71px; margin-top:75px;}
.loginbox{width:692px; height:336px; background:url(../images/logininfo.png) no-repeat; margin-top:30px;}
.loginbox ul{margin-top:88px; margin-left:285px;}
.loginbox ul li{margin-bottom:25px;}
.loginbox ul li label{color:#687f92; padding-left:25px;}
.loginbox ul li label a{color:#687f92;}
.loginbox ul li label a:hover{color:#3d96c9;}
.loginbox ul li label input{margin-right:5px;}
.loginuser{width:299px; height:48px; background:url(../images/loginuser.png) no-repeat; border:none; line-height:48px; padding-left:44px; font-size:14px; font-weight:bold;}
.loginpwd{width:299px; height:48px; background:url(../images/loginpassword.png) no-repeat; border:none;line-height:48px; padding-left:44px; font-size:14px; color:#90a2bc;}
.loginbtn{width:111px;height:35px; background:url(../images/buttonbg.png) repeat-x; font-size:14px; font-weight:bold; color:#fff;cursor:pointer; line-height:35px;}
.loginbm{height:50px; line-height:50px; text-align:center; background:url(../images/loginbg2.png) repeat-x;position:absolute; bottom:0; width:100%; color:#0b3a58;}
.loginbm a{font-weight:bold;color:#0b3a58;}
.loginbm a:hover{color:#fff;}


/*top.html*/
.header{height:88px;}
.topleft{height:88px;background:url(../images/topleft.jpg) no-repeat;float:left; width:300px;}
.topleft img{margin-top:12px;margin-left:10px;}
.topright{height:88px;background:url(../images/topright.jpg) no-repeat right;float:right;}
.nav{float:left;}
.nav li{float:left;width:87px;height:88px; text-align:center;}
.nav li a{display:block;width:87px;height:88px;-moz-transition: none; transition: background-color 0.3s linear; -moz-transition: background-color 0.3s linear; -webkit-transition: background-color 0.3s linear; -o-transition: background-color 0.3s linear; }
.nav li a.selected{background:url(../images/navbg.png) no-repeat;}
.nav li a:hover{display:block;background:#000;color:#fff;background: none repeat scroll 0% 0% rgb(43, 127, 181);}
.nav li img{margin-top:10px;}
.nav li a{display:block;}
.nav a h2{font-size:14px;color:#d6e8f1;}
.nav a:hover h2{color:#fff;}
.topright ul{padding-top:15px; float:right; padding-right:12px;}
.topright ul li{float:left; padding-left:9px; padding-right:9px; background:url(../images/line.gif) no-repeat right;}
.topright ul li:last-child{background:none;}
.topright ul li a{font-size:13px; color:#e9f2f7;}
.topright ul li a:hover{color:#fff;}
.topright ul li span{margin-top:2px;float:left;padding-right:3px;}
.user{height:30px;background:url(../images/ub1.png) repeat-x;clear:both;margin-top:10px;float:right; margin-right:12px;border-radius:30px;  white-space:nowrap;position:relative;}
.user span{display:inline-block;padding-right:10px; background:url(../images/user.png) no-repeat 15px 10px; line-height:30px; font-size:14px;color:#b8ceda; padding-left:20px; padding-left:35px;}
.user b{display:inline-block;width:20px;height:18px; background:url(../images/msg.png);text-align:center; font-weight:normal; color:#fff;font-size:14px;margin-right:13px; margin-top:7px; line-height:18px;}
.user i{display:inline-block;margin-right:5px;font-style:normal;line-height:30px; font-size:14px;color:#b8ceda;}

/*left.html*/
.lefttop{background:url(../images/lefttop.gif) repeat-x;height:40px;color:#fff;font-size:14px;line-height:40px;}
.lefttop span{margin-left:8px; margin-top:10px;margin-right:8px; background:url(../images/leftico.png) no-repeat; width:20px; height:21px;float:left;}
.leftmenu{width:187px; overflow:hidden; background:url(../images/leftline.gif) repeat-y right;}
.leftmenu dd{background:url(../images/leftmenubg.gif) repeat-x;line-height:35px;font-weight:bold;font-size:14px;border-right:solid 1px #b7d5df;}
.leftmenu dd span{float:left;margin:10px 8px 0 12px;}
.leftmenu dd .menuson{display:none;}
.leftmenu dd:first-child .menuson{display:block;}
.menuson {line-height:30px; font-weight:normal; }
.menuson li{cursor:pointer;}
.menuson li.active{position:relative; background:url(../images/libg.png) repeat-x; line-height:30px; color:#fff;}
.menuson li cite{display:block; float:left; margin-left:32px; background:url(../images/list.gif) no-repeat; width:16px; height:16px; margin-top:7px;}
.menuson li.active cite{background:url(../images/list1.gif) no-repeat;}
.menuson li.active i{display:block; background:url(../images/sj.png) no-repeat; width:6px; height:11px; position:absolute; right:0;z-index:10000; top:9px; right:-1px;}
.menuson li a{ display:block; *display:inline; *padding-top:5px;}
.menuson li.active a{color:#fff;}
.title{cursor:pointer;}


/*right.html*/
.place{height:40px; background:url(../images/righttop.gif) repeat-x;}
.place span{line-height:40px; font-weight:bold;float:left; margin-left:12px;}
.placeul li{float:left; line-height:40px; padding-left:7px; padding-right:12px; background:url(../images/rlist.gif) no-repeat right;}
.placeul li:last-child{background:none;}
.rightinfo{padding:8px;}
.tools{clear:both; height:35px; margin-bottom:8px;}
.toolbar{float:left;}
.toolbar li{background:url(../images/toolbg.gif) repeat-x; line-height:33px; height:33px; border:solid 1px #d3dbde; float:left; padding-right:10px; margin-right:5px;border-radius: 3px;  cursor:pointer;}
.toolbar li span{float:left; margin-left:10px; margin-right:5px; margin-top:5px;}
.toolbar1{float:right;}
.toolbar1 li{background:url(../images/toolbg.gif) repeat-x; line-height:33px; height:33px; border:solid 1px #d3dbde; float:left; padding-right:10px; margin-left:5px;border-radius: 3px; }
.toolbar1 li span{float:left; margin-left:10px; margin-right:5px; margin-top:5px;}
.tablelist{border:solid 1px #cbcbcb; width:100%; clear:both;}
.tablelist th{background:url(../images/th.gif) repeat-x; height:34px; line-height:34px; border-bottom:solid 1px #b6cad2; text-indent:11px; text-align:left;}
.tablelist td{line-height:35px; text-indent:11px; border-right: dotted 1px #c7c7c7;}
.tablelink{color:#056dae;}
.tablelist tbody tr.odd{background:#f5f8fa;}
.tablelist tbody tr:hover{background:#e5ebee;}
.sort{padding-left:3px;}

/*page*/
.pagin{position:relative;margin-top:10px;padding:0 12px;}
.pagin .blue{color:#056dae;font-style:normal;}
.pagin .paginList{position:absolute;right:12px;top:0;}
.pagin .paginList .paginItem{float:left;}
.pagin .paginList .paginItem a{float:left;width:31px;height:28px;border:1px solid #DDD; text-align:center;line-height:30px;border-left:none;color:#3399d5;}
.pagin .paginList .paginItem:first-child a{border-left:1px solid #DDD;}
.pagin .paginList .paginItem:first-child a{border-bottom-left-radius:5px;border-top-left-radius:5px;}
.pagin .paginList .paginItem:last-child a{border-bottom-right-radius:5px;border-top-right-radius:5px;}
.pagin .paginList .paginItem.current,.pagin .paginList .paginItem.current a{background:#f5f5f5; cursor:default;color:#737373;}
.pagin .paginList .paginItem:hover{background:#f5f5f5;}
.pagin .paginList .paginItem.more,.pagin .paginList .paginItem.more a:hover{ cursor:default;}
.pagin .paginList .paginItem.more:hover{background:#FFF;}
.pagin .paginList .paginItem.more a{color:#737373;}
.pagepre{background:url(../images/pre.gif) no-repeat center center; width:31px; height:28px;}
.pagenxt{background:url(../images/next.gif) no-repeat center center; width:31px; height:28px;}

/*index*/
.mainindex{padding:20px; overflow:hidden;}
.welinfo{height:32px; line-height:32px; padding-bottom:8px;}
.welinfo span{float:left;}
.welinfo b{padding-left:8px;}
.welinfo a{padding-left:15px;color:#3186c8;}
.welinfo a:hover{color:#F60;}
.welinfo i{font-style:normal; padding-left:8px;}
.xline{border-bottom:solid 1px #dfe9ee; height:5px;}
.iconlist{padding-left:40px; overflow:hidden;}
.iconlist li{text-align:center; float:left; margin-right:25px; margin-top:25px;}
.iconlist li p{line-height:25px;}
.ibox{clear:both; padding-left:40px; padding-top:18px; overflow:hidden; padding-bottom:18px;}
.ibtn{background:url(../images/ibtnbg.png) repeat-x;border:solid 1px #bfcfe1; height:23px; line-height:23px; display:block; float:left; padding:0 15px; cursor:pointer;}
.ibtn img{margin-top:5px; float:left; padding-right:7px;}
.box{height:15px;}
.infolist{padding-left:40px; padding-bottom:15px;}
.infolist li{ line-height:23px; height:23px; margin-bottom:8px;}
.infolist li span{float:left; display:block; margin-right:10px;}
.uimakerinfo{padding-left:40px; background:url(../images/search.png) no-repeat 10px 15px; padding-top:15px; padding-bottom:20px;}
.umlist{padding-left:40px;}
.umlist li{float:left; background:url(../images/ulist.png) no-repeat 0 5px; padding-left:10px; margin-right:15px;}


/*default*/
.mainbox{padding:8px;position:relative;}
.mainleft{padding-right:298px;}
.leftinfo{border:#d3dbde solid 1px; height:290px;}
.mainright{width:298px;position:absolute; top:8px; right:8px;}
.dflist{border:#d3dbde solid 1px; width:288px; height:290px; float:right;}
.dflist1{border:#d3dbde solid 1px; width:288px; height:238px; float:right; margin-top:8px;}
.listtitle{background:url(../images/tbg.png) repeat-x; height:36px; line-height:36px; border-bottom:solid 1px #d3dbde; text-indent:14px; font-weight:bold; font-size:14px;}
.more1{float:right; font-weight:normal;color:#307fb1; padding-right:17px;}
.maintj{text-align:center;}
.newlist{padding-left:14px; padding-top:15px;}
.newlist li{line-height:25px; background:url(../images/list2.png) no-repeat 0px 8px; text-indent:11px;}
.newlist i{width:80px; display:block; float:left; font-style:normal;}
.newlist b{font-weight:normal; color:#7b7b7b; padding-left:10px;}
.leftinfos{height:238px;margin-top:8px;}
.infoleft{border:#d3dbde solid 1px; float:left;height:238px;}
.inforight{border:#d3dbde solid 1px; float:right;height:238px; }
.tooli{padding:30px 20px;}
.tooli li{float:left;padding-left:15px; padding-right:15px;margin-bottom:20px;}
.tooli li span{text-align:center;}
.tooli li p{line-height:35px; text-align:center;}


/*form*/
.formbody{padding:10px 18px;}
.formtitle{border-bottom:solid 1px #d0dee5; line-height:35px; position:relative; height:35px; margin-bottom:28px;}
.formtitle span{font-weight:bold;font-size:14px; border-bottom:solid 3px #66c9f3;float:left; position:absolute; z-index:100; bottom:-1px; padding:0 3px; height:30px; line-height:30px;}
.forminfo{padding-left:23px;}
.forminfo li{margin-bottom:13px; clear:both;}
.forminfo li label{width:86px;line-height:34px; display:block; float:left;}
.forminfo li i{color:#7f7f7f; padding-left:20px; font-style:normal;}
.forminfo li cite{display:block; padding-top:10px;}
.dfinput{width:345px; height:32px; line-height:32px; border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; background:url(../images/inputbg.gif) repeat-x; text-indent:10px;}
.textinput{border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; background:url(../images/inputbg.gif) repeat-x; padding:10px; width:504px; height:135px; line-height:20px; overflow:hidden;}
.btn{width:137px;height:35px; background:url(../images/btnbg.png) no-repeat; font-size:14px;font-weight:bold;color:#fff; cursor:pointer;}

/*tip*/
.tip{width:485px; height:260px; position:absolute;top:10%; left:30%;background:#fcfdfd;box-shadow:1px 8px 10px 1px #9b9b9b;border-radius:1px; display:none; z-index:111111;}
.tiptop{height:40px; line-height:40px; background:url(../images/tcbg.gif)  repeat-x; cursor:pointer;}
.tiptop span{font-size:14px; font-weight:bold; color:#fff;float:left; text-indent:20px;}
.tiptop a{display:block; background:url(../images/close.png) no-repeat; width:22px; height:22px;float:right;margin-right:7px; margin-top:10px; cursor:pointer;}
.tiptop a:hover{background:url(../images/close1.png) no-repeat;}
.tipinfo{padding-top:30px;margin-left:65px; height:95px;}
.tipinfo span{width:95px; height:95px;float:left;}
.tipright{float:left;padding-top:15px; padding-left:10px;}
.tipright p{font-size:14px; font-weight:bold; line-height:35px;}
.tipright cite{color:#858686;}
.tipbtn{margin-top:25px; margin-left:125px;}
.sure ,.cancel{width:96px; height:35px; line-height:35px; color:#fff; background:url(../images/btnbg1.png) repeat-x; font-size:14px; font-weight:bold;border-radius: 3px; cursor:pointer;}
.cancel{background:url(../images/btnbg2.png) repeat-x;color:#000;font-weight:normal;}

/*tools*/
.toolsli{clear:both; overflow:hidden; margin-bottom:20px;}
.toollist{margin-left:20px; overflow:hidden; float:left;}
.toollist li{width:66px; text-align:center; float:left; margin-right:32px;}
.toollist li a{width:65px; height:65px; background:#fafbfb; border-right:solid 1px #dbdbdb;border-bottom:solid 1px #dbdbdb; display:block;}
.toollist li a:hover{background:#eef4f7;border-right:solid 1px #d0d5d7;border-bottom:solid 1px #d0d5d7;}
.toollist li h2{line-height:35px;}
.tooladd{margin-top:25px; width:20px; height:20px; float:left; display:block;}

/*error 404*/
.error{background:url(../images/404.png) no-repeat; width:490px; margin-top:75px;padding-top:65px;}
.error h2{font-size:22px; padding-left:154px;}
.error p{padding-left:154px; line-height:35px;color:#717678;}
.reindex{padding-left:154px;}
.reindex a{width:115px; height:35px; font-size:14px; font-weight:bold; color:#fff; background:#3c95c8; display:block; line-height:35px; text-align:center;border-radius: 3px; margin-top:20px;}

/*computer*/
.comtitle{padding:20px; clear:both;}
.comtitle span{width:10px;height:10px; background:url(../images/clist.png) no-repeat; float:left; background:#fff; padding-top:3px;}
.comtitle h2{font-size:14px; display:block; float:left;color:#2a3e93; background:#fff; padding-left:5px; padding-right:8px;}
.rline{border-bottom:solid 1px #e5ecf0; height:10px; margin-left:50px;}
.disklist{padding-left:20px; padding-right:20px;}
.disklist li{width:275px;_width:270px;float:left; margin-right:10px;height:70px; cursor:pointer; margin-bottom:5px;border:solid 1px #fff;}
.disklist li a{color:#000;}
.disklist li:hover{background:#fcfcfc; border:solid 1px #e5ecf0;}
.dleft{background:url(../images/c02.png) no-repeat; height:50px; margin-left:12px; float:left; width:50px; margin-top:15px;}
.dleft1{background:url(../images/c01.png) no-repeat; height:50px; margin-left:12px; float:left; width:50px; margin-top:15px;}
.dleft2{background:url(../images/c03.png) no-repeat; height:50px; margin-left:12px; float:left; width:50px; margin-top:15px;}
.dright{float:left; margin-left:10px; margin-top:5px;}
.dright h3{font-weight:normal; padding-top:15px;}
.dright p{color:#949494;}
.dinfo{width:189px;height:15px; background:url(../images/diskbg.png) no-repeat; margin-top:5px; margin-bottom:5px;}
.dinfo span{background:url(../images/cbg.png) repeat-x; height:15px;}
.filetable{width:100%;}
.filetable thead tr{background:#f5f9fb; line-height:35px;}
.filetable thead tr th{text-align:left; text-indent:15px;font-weight:normal;color:#597190;}
.filetable tbody tr td{text-indent:15px; line-height:23px;}
.filetable tbody tr td img {margin-right:5px;}
.tdlast{text-align:right;}
.filetable tbody tr:hover{background:#f5f8fa; cursor:pointer;}

/*imglist*/
.imglist{clear:both; overflow:hidden; margin-bottom:20px; margin-left:5px;}
.imglist li{width:188px; border:solid 1px #fff;height:199px;float:left; margin-right:8px; margin-bottom:10px; cursor:pointer;}
.imglist li:hover{border:solid 1px #d7e4ea;}
.imglist li span{width:168px; height:126px; margin:8px;}
.imglist li h2{text-align:center; line-height:25px;}
.imglist li p{text-align:center; line-height:17px; background:url(../images/line1.png) center center no-repeat;}
.imglist li p a{color:#1f7cb6;}
.imglist li p a:hover{color:#F60;}

/*imgtable*/
.imgtable{width:100%;border:solid 1px #cbcbcb; }
.imgtable th{background:url(../images/th.gif) repeat-x; height:34px; line-height:34px; border-bottom:solid 1px #b6cad2; text-indent:21px; text-align:left;}
.imgtable td{line-height:20px; text-indent:21px; border-right: dotted 1px #c7c7c7;}
.imgtable td img{margin:10px 20px 10px 0;}
.imgtable td p{color:#919191;}
.imgtable td i{font-style:normal; color:#ea2020;}
.imgtd{text-indent:0;}
.imgtable tbody tr.odd{background:#f5f8fa;}
.imgtable tbody tr:hover{background:#e5ebee;}

/*tab*/
.itab{height:36px; border-bottom:solid 1px #d0dee5; position:relative; border-left:solid 1px #d3dbde;}
.itab ul li{float:left;height:37px; line-height:37px; background:url(../images/itabbg.png) repeat-x; border-right:solid 1px #d3dbde;}
.itab ul li a{font-size:14px; color:#000; padding-left:25px; padding-right:25px;}
.itab ul li a.selected{ height:37px; display:block; background:url(../images/itabbg1.png) repeat-x; font-weight:bold;}
.tabson{margin:18px 0px;}
.formtext{height:45px; padding-left:25px; line-height:20px; color:#848383;}
.formtext b{color:#d70101;}
.forminfo b{color:#ea2020; padding-left:3px;}

/*class*/
.classlist li{float:left;margin-right:10px;margin-bottom:10px;padding:12px;border:1px solid #ebebeb; background:#fcfcfc;}
.classlist li:hover{border:1px solid #3eafe0; cursor:pointer;}
.classlist li span{float:left;margin-right:18px;border:3px solid #fff;}
.classlist li .lright{float:left;width:150px;}
.classlist li .lright h2{font-size:12px; font-weight:bold;line-height:30px;}
.classlist li .lright p{line-height:20px;}
.enter{display:block;margin-top:5px;width:94px;height:30px;color:#fff;background:#3eafe0;font-weight:bold; border-radius:2px; text-align:center;line-height:30px; cursor:pointer;}
.enter:hover{color:#fff; background:#d98c1d;}
.clear{clear:both;}

/*seachform*/
.seachform{ height:42px;}
.seachform li{float:left; margin-right:15px;}
.seachform li label{padding-right:10px; float:left; line-height:32px;}
.scinput{width:150px; height:32px; line-height:32px; border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; background:url(../images/inputbg.gif) repeat-x; text-indent:10px;}
.scbtn{width:85px;height:35px; background:url(../images/btnbg.png) no-repeat center; font-size:14px;font-weight:bold;color:#fff; cursor:pointer;border-radius:3px; behavior:url(js/pie.htc);}

配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.ff.dormitoryManage.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>building</servlet-name>
        <servlet-class>com.ff.dormitoryManage.servlet.BuildingServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>building</servlet-name>
        <url-pattern>/back/building</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>buildadmin</servlet-name>
        <servlet-class>com.ff.dormitoryManage.servlet.BuildAdminServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>buildadmin</servlet-name>
        <url-pattern>/back/buildadmin</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>dormitory</servlet-name>
        <servlet-class>com.ff.dormitoryManage.servlet.DormitoryServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>dormitory</servlet-name>
        <url-pattern>/back/dormitory</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>student</servlet-name>
        <servlet-class>com.ff.dormitoryManage.servlet.StudentServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>student</servlet-name>
        <url-pattern>/back/student</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>attend</servlet-name>
        <servlet-class>com.ff.dormitoryManage.servlet.AttendServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>attend</servlet-name>
        <url-pattern>/back/attend</url-pattern>
    </servlet-mapping>

    <!--编码过滤器-->
    <filter>
        <filter-name>encode</filter-name>
        <filter-class>com.ff.dormitoryManage.filter.EncodeFilter</filter-class>
        <init-param>
            <param-name>encode</param-name>
            <param-value>utf-8</param-value><!--过滤编码-->
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encode</filter-name>
        <url-pattern>/back/*</url-pattern>
    </filter-mapping>

    <!--sessionId过滤器-->
    <filter>
        <filter-name>islogin</filter-name>
        <filter-class>com.ff.dormitoryManage.filter.IsLoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>islogin</filter-name>
        <url-pattern>/back/*</url-pattern>
    </filter-mapping>
</web-app>
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EnndmeRedis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值