java-简单员工管理系统(使用bootStrap)

本文提供详细页面代码与java后端代码,并提供编写过程中值得注意的地方。

简单员工管理系统

注意:写页面代码时,需注意以下几点:

1、修改、添加操作,需先清空模态框中form表单缓存(不然会造成修改数据后,点击添加操作,刚修改的数据会展示在添加操作页面中)。 方法: $("#form")[0].reset();
2、修改、添加操作,需先清空隐藏域(即隐藏域中的id。若不清空,执行修改操作后,拿到的id保存在隐藏域中,这时执行添加操作(添加操作本无id),会将执行修改操作时的id,传给添加操作。造成添加操作变成修改操作的bug)。 方法:$("#eid").val("");
3、添加操作无id,修改操作有id(通过隐藏域设置id)。 方法:<input type="hidden" id="eid" name="eid" >
4、每次查询之前,需先将页面原来的信息清空(不然执行添加与修改操作后,新查询到的数据,展示在原来的数据下方)。 方法:$("tbody").empty();
5、单选框信息查询(例如性别)赋值方法:$("#sex1, #sex2").val([sex])

涉及到的一些方法:

1、$().eq(n)方法。下标过滤,指的是根据元素集合的下标来过滤
	(1). 在jQuery 中,可以使用 eq() 方法来实现下标过滤。
	(2). n 是一个整数。当 n 取值为 0 或正整数时,eq(0) 获取的是第 1 个元素,eq(1) 获取的是第 2 个元素,……,以此类推。当 n 取值为负整数时,eq(-1) 获取的是倒数第 1 个元素,eq(-2) 获取的是倒数第 2 个元素,……,以此类推。
2、serialize() 方法,
	(1). 功能:将表单内容序列化成一个字符串。
	(2). 这样在ajax提交表单数据时,就不用一一列举出每一个参数。只需将data参数设置为* $("form").serialize()即可。

页面代码:

<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
		<title>Bootstrap 101 Template</title>
	
		<!-- Bootstrap -->
		<link
			href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
			rel="stylesheet">
	
		<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
		<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
		<!--[if lt IE 9]>
	      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js">		</script>
	   	  <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
	    <![endif]-->
		<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
		<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
		<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
		<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
	******<!--  以上是引入插件 -->*** ***
	
	*<!--样式调整 -->*
		<style type="text/css">
			.table-striped > tbody > tr:nth-of-type(odd) {
			
			  background-color: #f9f9f9;
			}
			.table-hover > tbody > tr:hover { 
	 		 	 background-color: lightgray; 
			}
			tr,th{
				text-align: center;
			}
		</style>
	</head>
	
	 *<!-- 首行信息 -->*
	<body>
		<div class="container-fluid table-hover">
			<h1 style="text-align: center; color:midnightblue">员工管理系统</h1>
			<table class="table table-bordered table-hover">
				<thead style="background-color: burlywood">
					<tr>
						<th>姓名</th>
						<th>性别</th>
						<th>电话号码</th>
						<th>住址</th>
						<th>卡号</th>
						<th>操作
							<button type="button" class="btn btn-success  btn-xs" id="add">
								<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加
							</button>
						</th>
					</tr>
				</thead>
				<tbody>
					 *<!-- 动态生成的信息插入这里 -->*
				</tbody>
			</table>
		</div>
		
		<!--数据操作,模态框 -->
		<div class="modal fade" id="myModal" tabindex="-1" role="dialog"
			aria-labelledby="myModalLabel">
			<div class="modal-dialog" role="document">
				<div class="modal-content">
					<div class="modal-header">
						<button type="button" class="close" data-dismiss="modal"
							aria-label="Close">
							<span aria-hidden="true">&times;</span>
						</button>
						<h4 class="modal-title" id="myModalLabel">数据操作</h4>
					</div>
					<div class="modal-body">
						<form id="form">
							<input type="hidden" id="eid" name="eid" >
							<div class="form-group">
								<label for="ename">姓名</label> 
								<input type="text" class="form-control" id="ename" name="ename" placeholder="请输入姓名">
							</div>
							<div class="form-group">
								<label for="sex">性别</label> 
								<input type="radio" id="sex1" name="sex" value="男" checked="checked">男
								<input type="radio" id="sex2" name="sex" value="女">女
							</div>
							<div class="form-group">
								<label for="tel">电话</label> 
								<input type="text" class="form-control" id="tel" name="tel" placeholder="请输入电话">
							</div>
							<div class="form-group">
								<label for="address">住址</label> 
								<input type="text" class="form-control" id="address" name="address" placeholder="请输入住址">
							</div>
							<div class="form-group">
								<label for="card">卡号</label> 
								<input type="text" class="form-control" id="card" name="card" placeholder="请输入卡号">
							</div>
						</form>
					</div>
					<div class="modal-footer">
						<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
						<button type="button" class="btn btn-primary" id="save">保存</button>
					</div>
				</div>
			</div>
		</div>

		<!-- js代码  -->
		<script type="text/javascript">
			//入口函数
			$(function(){
				//调用方法,展示信息
				select()
				//添加功能
				$("#add").click(function(){
					**//清空缓存**
					$("#form")[0].reset();
					**//清空隐藏域**
					$("#eid").val("");
					//弹出模态框
					$("#myModal").modal("show");
				})
				
				//修改、添加。动态创建的信息,使用事件委托
				$("tbody").on("click", "#update", function(){
					//清空缓存
					$("#form")[0].reset();
					//清空隐藏域
					$("#eid").val("");
					//获取id
					var eid = $(this).val();
					//获取当前的信息
					var ename = $(this).parents("tr").find("td:eq(0)").text();
					var sex = $(this).parents("tr").find("td:eq(1)").text();
					var tel = $(this).parents("tr").find("td:eq(3)").text();
					var address = $(this).parents("tr").find("td:eq(2)").text();
					var card = $(this).parents("tr").find("td:eq(4)").text();
					//写入模态框的form中
					$("#ename").val(ename)
					单选框,需这样处理
					$("#sex1, #sex2").val([sex])
					$("#tel").val(tel)
					$("#address").val(address)
					$("#card").val(card)
					$("#eid").val(eid)
					//弹出模态框
					$("#myModal").modal("show");
				})
				
				//保存模态框内容
				$("#save").click(function(){
					//发送请求
					$.ajax({
						//请求方式					
						type: "post",
						//路径
						url: "/emp/save",
						//请求数据类型
						data: $("#form").serialize(), 
						**//serialize() 方法,功能:将表单内容序列化成一个字符串。这样在ajax提交表单数据时,就不用一一列举出每一个参数。只需将data参数设置为* $("form").serialize()即可。*
						//处理返回值
						success: function(msg){
							if (msg.indexOf("ok") != -1) {
								//关闭模态框
								$("#myModal").modal("hide");
								//刷新页面
								select();							
								//弹窗提示
								//alert("保存成功!")
							} else {
								//弹窗提示
								alert("保存失败!")
							}
						}
					});
				})
				
				//删除操作
				$("tbody").on("click", "#del", function(){
					//删除确认框
					if (confirm("确定要删除吗?")) {
						//获取id
						var eid = $(this).val();
						//发送请求
						$.ajax({
							type: "post",
							url: "/emp/del",
							data: {"eid":eid},
							success: function(msg){
								if (msg.indexOf("ok") != -1) {
									select();
									//弹窗提示
									alert("删除成功!")
								} else {
									//弹窗提示
									alert("删除失败!")
								}
							}
						});
					}
				});
			});
		
			//查询操作,访问数据库,数据展示至页面
			function select(){
				***//查询之前先清空原来的页面***
				$("tbody").empty();
				//发送请求
				$.ajax({
					//发送方式
					type: "post",
					//路径
					url: "/emp/findAll",
					//接收数据方式
					dataType: "json",
					//处理接收到的信息
					success: function(msg){
						//调用方法,添加信息
						addTr(msg);
					}
				});
			}
			
			//字符串拼接,加入tbody节点
			function addTr(msg){
				$(msg).each(function(i, obj){
					//拼接
					var trs = '<tr>'+
								'<td>'+obj.ename+'</td>'+
								'<td>'+obj.sex+'</td>'+
								'<td>'+obj.tel+'</td>'+
								'<td>'+obj.address+'</td>'+
								'<td>'+obj.card+'</td>'+
								'<td>'+
									'<button type="button" class="btn btn-info  btn-xs" id="update" value='+obj.eid+'>'+
										'<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改</button>&ensp;'+
									'<button type="button" class="btn btn-danger  btn-xs" id="del" value='+obj.eid+'>'+
										'<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除</button>'+
								'</td>'+
							'</tr>'
					//动态查询到的数据,加入tbody节点
					$("tbody").append(trs);
				})	
			}
		</script>
	</body>
</html>

java端
controller层:

@Controller
@RequestMapping("/emp")
public class EmpController {

	@Autowired
	private IEmpService service;
	
	@RequestMapping("/findAll") //与页面传过来的路径一致
	@ResponseBody //不走视图解析器
	public List<Emp> findAll(){
		//查询所有
		return service.findAll();
	}
	
	@RequestMapping("/save") //与页面传过来的路径一致
	@ResponseBody //不走视图解析器
	public String saveData(Emp emp){ //保存数据
		try {
			//调用数据修改方法(包括添加与修改)
			service.edit(emp);
			//成功,则返回ok
			return "ok"; 
		} catch (Exception e) {
			//打印错误信息
			e.printStackTrace();
			//失败,则返回error
			return "error";
		}
	}

	@RequestMapping("/del")
	@ResponseBody
	public String delData(Integer eid){ //删除操作,通过id删除
	try {
			//调用删除方法
			service.del(eid); 
			return "ok";
		} catch (Exception e) {
			e.printStackTrace();
			return "error";
		}
	}
	
}

service层:

public interface IEmpService {
	//查询操作
	List<Emp> findAll();
	//删除操作
	void del(Integer eid);
	//数据修改(包括添加与修改)
	void edit(Emp emp);

}

service层实现类:

@Service
public class EmpServiceImpl implements IEmpService {

	@Autowired
	private EmpMapper mapper;
	
	@Override
	public List<Emp> findAll() {//查询数据
		return mapper.findAll();
	}


	@Override
	public void edit(Emp emp) { //修改数据操作(包括添加与修改)
		if (emp.getEid() != null) { //有id,则为修改数据
			mapper.update(emp);
		} else { //无id则为添加操作
			mapper.add(emp);
		}
		
	}

	@Override
	public void del(Integer eid) { //通过id删除
		mapper.del(eid);
		
	}

}

mapper层:

public interface EmpMapper {
	//查询
	List<Emp> findAll();
	//修改
	void update(Emp emp);
	//删除
	void del(Integer eid);
	//添加
	void add(Emp emp);

}

*Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 包路径-->
<mapper namespace="cn.itsource.mapper.EmpMapper">
	<!-- List<Emp> findAll();  //查询。注意:查询时尽量不使用*,使用具体的字段-->
	<select id="findAll" resultType="cn.itsource.domain.Emp">
		select * from emp
	</select>

	<!-- void update(Emp emp);  //修改-->
	<update id="update">
		update emp set ename=#{ename}, sex=#{sex},
		address=#{address}, tel=#{tel}, card=#{card} where eid=#{eid}
	</update>

	<!-- void del(Integer eid);  //删除-->
	<delete id="del">
		delete from emp where eid=#{eid}
	</delete>

	<!-- void add(Emp emp); //添加 -->
	<insert id="add">
		insert into emp(ename, sex, address, tel, card) value(#{ename}, #{sex}, #{address}, #{tel}, #{card})
	</insert>

</mapper>

效果展示:
首页
添加
修改
删除

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值