目录
项目介绍
功能
- 楼栋、楼姨、宿舍、学生、考勤信息的增改删查
- 登记、修改时进行逐级选择
- 综合筛选查询
- 编码过滤
- 是否登录验证(防止直接访问内部页面)
- 安全退出
相关技术
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'>></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="上一年"><<</td>' +
'<td width="12" align="center" id="monthL" title="上一月"><</td><td align="center">' +
'<span id="y" title="点击选择年份"></span>年<span id="m" title="点击选择月份"></span>月</td>' +
'<td width="12" align="center" id="monthR" title="下一月">></td>' +
'<td width="20" align="center" id="yearR" title="下一年">>></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="时减少"><<</td>' +
'<td align="center" id="minL" title="分减少"><</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="分增加">></td><td align="center" id="hoursR" title="时增加">>></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>