一、思路
1.创建数据库(注:添加自增主键或者双主键,这里使用了自增主键dtid)
2.创建控制层和业务层,添加signin和signout两种方法
二、功能实现
1.创建数据库

create table duty
(
dtid int(10) not null auto_increment,
empid varchar(10) ,
dtdate date ,
signintime varchar(100),
signouttime varchar(100),
PRIMARY key(dtid)
)

2.视图层
注意要用ajax实现页面窗口的跳转

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" >$(function(){//给按钮1绑定单击事件,实现签到功能$("#signin").click(function(){//发送一个Ajax请求,完成签到,并通过回调函数显示签到的结果$.ajax({url:"servlet/DutyServlet?method=signin",type:"POST",dataType:"text",success:function(data){//显示签到的结果if(data==0){$("#result").html("签到失败");}else if(data==1){$("#result").html("签到成功");}else{$("#result").html("已经签到");}}});});//实现签退功能$("#signout").click(function(){$.ajax({url:"servlet/DutyServlet?method=signout",success:function(result){$("#result").html(result);}});});});</script></head><body><div class="place"><span>位置:</span><ul class="placeul"><li><a href="#">考勤管理</a></li><li><a href="#">签到签退</a></li></ul></div><div class="formbody"><div class="formtitle"><span>基本信息</span></div><ul class="forminfo"><li><label>&nbsp;</label><input name="" type="button" class="btn" value="签到" id="signin"/> 每天签到一次,不可重复签到</li><li><label>&nbsp;</label></li><li><label>&nbsp;</label></li><li><label>&nbsp;</label><input name="" type="button" class="btn" value="签退" id="signout"/>可重复签退,以最后一次签退为准</li></ul></div><span style="color:red;font-size:16px;font-weight:bold;" id="result"></span>
</body></html>

注意:这里的ajax我犯了一个小bug

//当我在设置签退按钮时如果重复设置请求类型和数据类型时,按钮会失效
//实现签退功能$("#signout").click(function(){$.ajax({url:"servlet/DutyServlet?method=signout",//type:"POST",//dataType:"text",success:function(result){$("#result").html(result);}});});

3.控制层:

package com.facai.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.facai.entity.Employee;
import com.facai.service.DutyService;
import com.facai.service.impl.DutyServiceImpl;public class DutyServlet extends BaseServlet {//签到public void signin(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获得请求中的信息Employee emp=(Employee) request.getSession().getAttribute("emp");String empId=emp.getEmpId();//调用业务层完成业务操作DutyService dutyService=new DutyServiceImpl();int n=dutyService.signin(empId);//0失败1成功2已经签到//无需返回页面,只需返回响应内容response.getWriter().println(n);}//签退public void signout(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获得请求中的信息Employee emp=(Employee) request.getSession().getAttribute("emp");String empId=emp.getEmpId();//调用业务层完成业务操作DutyService dutyService=new DutyServiceImpl();int n=dutyService.signout(empId);//0失败1成功2没有签到//无需返回页面,只需返回响应内容response.setContentType("text/html;charset=utf-8");//返回中午PrintWriter out=response.getWriter();if(n==0){out.println("签退失败");}else if(n==1){out.println("签退成功");}else{out.println("你还没有签到");}}
}

4.业务层

package com.facai.service.impl;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import oracle.sql.DATE;import com.facai.dao.DutyDao;
import com.facai.dao.impl.DutyDaoImpl;
import com.facai.entity.Duty;
import com.facai.entity.Employee;
import com.facai.service.DutyService;public class DutyServiceImpl implements DutyService {DutyDao dutyDao=new DutyDaoImpl();/** 签到*/@Overridepublic int signin(String empId) {//判断用户是否已经签到Date now=new Date();java.sql.Date today=new java.sql.Date(now.getTime());//yyyy-MM-dd,hhmmssboolean flag=dutyDao.find(empId,today);int n=0;if(flag){//已经签到return 2;}else{//完成签到DateFormat sdf=new SimpleDateFormat("hh:mm:ss");String signinTime=sdf.format(now);Duty duty=new Duty(today, signinTime, null, empId);n=this.dutyDao.save(duty);return n;}}@Overridepublic int signout(String empId) {//判断用户是否已经签到Date now=new Date();java.sql.Date today=new java.sql.Date(now.getTime());//yyyy-MM-dd,hhmmssboolean flag=dutyDao.find(empId,today);int n=0;if(!flag){//还没有签到return 2;}else{//完成签退DateFormat sdf=new SimpleDateFormat("hh:mm:ss");String signoutTime=sdf.format(now);Duty duty=new Duty(today, null,signoutTime, empId);n=this.dutyDao.out(duty);return n;}}}

5.Dao层

package com.facai.dao.impl;import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;import com.facai.dao.DutyDao;
import com.facai.entity.Department;
import com.facai.entity.Duty;
import com.facai.entity.Employee;
import com.facai.util.DBUtil;public class DutyDaoImpl implements DutyDao{@Overridepublic boolean find(String empId, Date today) {//声明jdbc对象Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;//声明变量Department dept=null;boolean flag=false;//默认没有签到try {//创建连接conn=DBUtil.getConnection();//创建SQL语句String sql="select * from duty where empid=? and dtdate=?";//创建SQL语句对象ps=conn.prepareStatement(sql);ps.setString(1, empId);ps.setDate(2, today);//执行SQL命令rs=ps.executeQuery();if(rs.next()){flag=true;}} catch (Exception e) {e.printStackTrace();}finally{//关闭资源DBUtil.closeAll(rs, ps, conn);}//返回集合return flag;}@Overridepublic int save(Duty duty) {String sql="insert into duty (empid,dtdate,signintime,signouttime) values(?,?,?,null)";Object[] params={duty.getEmpId(),duty.getDtDate(),duty.getSigninTime(),};return DBUtil.executeDML(sql, params);}@Overridepublic int out(Duty duty) {String sql="update duty set signouttime=? where empid=? and dtdate=?";Object[] params={duty.getSignoutTime(),duty.getEmpId(),duty.getDtDate(),};return DBUtil.executeDML(sql, params);}}

三、运行图

OA系统:实现签到签退功能相关推荐

  1. 签到签退功能的实现-01

    实现思路 签到流程是怎样的? 点击签到,往表中插入用户名.签到日期.签到时间.默认自增id,签到一次后不可重复签到,点击签退,更新签退时间,可能未签到,可能已签退,更新时间

  2. JavaEE中,考勤(签到签退)功能的实现

    体会实现具体功能的思想并加以运用 签到功能 1.数据库中要有相应的表,并创建相应的实体类,复写相关方法 2.在相关的jsp页面添加两个jsp按钮,用于签到与签退,并添加id属性 3.在servlet中 ...

  3. java 学生考勤系统(四、签退功能)

    上回总结完了签到功能,现在总结一下签退功能,其实签到和签退这两个功能差不多,无非就是签到是插入而签退是更新一下.因为在你点击签到的时候你的签退时间是没有的是空,你还没有点击签退所以你的签退字段是没有值 ...

  4. 实现高德地图签到签退(uniapp)

    项目场景: 用uniapp 实现签到签退(使用高德的api) 问题描述 提示:这里描述项目中遇到的问题: 例如:使用uniapp 自带的组件不能实现点击地图 再签退 提示思路: 提示:使用uniapp ...

  5. php会议签到签退系统,会议签到管理系统,无障碍会议签到系统,一卡通会议签到系统,会议签到系统 - 新开普(NewCapec)...

    会议签到系统 会议签到管理系统是对会议信息的一种统计和详细记录,对参加会议人员进行统一的管理,及时.准确地统计与会人员的迟到.早退.未参加等各种会议状态. 会议签到系统主要是在一卡通系统平台下开发的针 ...

  6. 每日自动签到签退的程序

    公司里有一个网页版的考勤系统.每天打开电脑,用域账户登录,然后打开IE,输入网址,系统会自动感知你的域账户,显示个人信息,在8点半之前点击签到就不算迟到. 像下面的图这样 终于有一天由于地铁故障迟到了 ...

  7. 慧点科技OA系统解析之会签管理功能

    -让公文会签业务高效.合理 北京2017年1月16日电 /美通社/ -- 本文是慧点科技业务顾问邓琼兰所著的文章,以下为详细内容: 在公文流转过程中,经常会碰到"会签"流程.那么, ...

  8. 【JavaScript】分享一个定时到网站上签到/签退的JS脚本

    之前介绍过使用temperMonkey屏蔽CSDN广告的方法,主要就是要针对性地分析网站结构,然后用代码去改变或者操作DOM.今天也一样,我们需要观察网页结构,找到我们要操作的按钮,触发他的click ...

  9. EF实现考勤管理---(MVC,签到签退)

    1.获取登陆用户id 2.后台控制器实现数据库访问和数据传递 3.DAL层实现后台数据库访问和数据传递(上班签到时间.审核状态,下班签退时间.审核状态)判断 4.前台解析后台传递数据,动态解析用户和时 ...

最新文章

  1. 22.Chain of Responsibility(职责链)模式
  2. win7 telnet命令无法使用
  3. Modal提示框插件的使用
  4. ML之回归预测:利用两种机器学习算法(LiR,XGBoost(调优+重要性可视化+特征选择模型))对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值
  5. Intellectual Property Essentials for Start-Ups
  6. python 量化交易_Quantsrat让R语言像Python一样进行策略回测和量化交易
  7. ROS探索总结(二)——ROS总体框架
  8. 毕业后才认清的15个道理
  9. linux framebuffer 例子
  10. MYSQL存储引擎笔记
  11. php imagemagick 文档,调用ImageMagick的PHP函数中文文档
  12. 制动刹车片六个养护要点
  13. L2-008. 最长对称子串-PAT团体程序设计天梯赛GPLT
  14. 【Oracle】服务器端监听配置
  15. Windows下后台运行cmd启动的程序
  16. 【目标跟踪】基于matlab帧差法结合卡尔曼滤波行人姿态识别【含Matlab源码 1127期】
  17. autojs遍历当前页面所有控件_解放双手,手机自动化神器-AutoJS的使用
  18. 北邮“一号邮路”上的数学体验
  19. Planning with Goal-Conditioned Policies读书笔记
  20. 软件质量管理-6-质量管理

热门文章

  1. 机器学习——科学计算库(Numpy,Matplotlib,Pandas)
  2. windows下结束进程命令
  3. Mac电脑结束进程方法大全
  4. 索尼PS VR2体验:硬件素质不错,高质量游戏是关键
  5. 人工智能算法之三数码
  6. 【Writeup】第六季极客大挑战(部分题目)
  7. 英语月份、星期、日期的缩写
  8. word指定文档每页行数
  9. 《万历十五年》 黄仁宇
  10. 网络游戏协议测试(接口测试)的一些总结