一个简单的考勤系统

原创 2003年12月15日 01:28:00

不考虑加班,请假,外出之类。

原始记录表:
1:工作日历表calendar
2:排班表worktime
3:人事资料表employee
4:异常类别表(迟到,早退,无刷卡...)abnormity
5:考勤记录表timecard


处理结果表:(可以用表或视图的形式存放)
1: 打卡异常         10001   20031102   上午上班   迟到
2:考勤明细表1:    10001   20031101   07:55/12:01/12:02/13:55/18:00/18:01  列出所有打卡明细
3:考勤明细表2:    10001   20031101   07:55  12:01    13:55    18:00

 

/*工作日历表:
如下假设只有三种工作日历,默认情况如下
1:星期六和星期天不上班
2:星期天不上班
4:每天都上班
*/
create table calendar(
 date smalldatetime primary key clustered,
 flag1 bit,
 flag2 bit,
 flag3 bit
)
exec sp_addextendedproperty N'MS_Description', N'日期', N'user', N'dbo', N'table', N'calendar', N'column', N'date'
exec sp_addextendedproperty N'MS_Description', N'是否上班1', N'user', N'dbo', N'table', N'calendar', N'column', N'flag1'
exec sp_addextendedproperty N'MS_Description', N'是否上班2', N'user', N'dbo', N'table', N'calendar', N'column', N'flag2'
exec sp_addextendedproperty N'MS_Description', N'是否上班3', N'user', N'dbo', N'table', N'calendar', N'column', N'flag3'
/* 个别录入资料
insert calendar select '20031101',0,1,1
union all select '20031102',0,0,1
union all select '20031103',1,1,1
union all select '20031104',1,1,1
*/

/*********如下存储过程用于批量录入资料**************/
create  Procedure AddWorkCalendar @BDate SmallDateTime,@EDate SmallDateTime
As
 Declare @CDate SmallDateTime
 Declare @Flag1 Bit
 Declare @Flag2 Bit
 Declare @Flag3 Bit
 
 Set @CDate = @BDate
 If Exists (Select * from calendar Where cld_rq Between @BDate And @EDate)
 Begin
  Raiserror('已有该范围的资料,请核对开始日期和结束日期!!!',16,-1)
  Return
 End
 While @CDate <= @EDate
 Begin
  Set @Flag1 = (Case When DatePart(WeekDay,@CDate) in (1,7) then 0 Else 1 End)
  Set @Flag2 = (Case When DatePart(WeekDay,@CDate)=1 then 0 Else 1 End)
  Set @Flag3 = 1
  Insert calendar Values(@CDate,@Flag,@Flag1,@Flag2)
  Set @CDate = DateAdd(Day,1,@CDate)
 End

/********  Usage:
    Exec AddWorkCalendar '20031101','20031130'
*********/

/*************
当然,更灵活的方法是如下方式建表:
日期   方式   标志
20011101   1          0
20011101   2          1
20011101   3          1
...
********************/

 

/*
2:排班表(为简单起见,不考虑加班的排班,且只考虑一天最多需四次刷卡的情况)
*/
create table worktime(
 worktimeid int primary key clustered,
 minb char(5),
 mins char(5),
 mine char(5),
 moutb char(5),
 mouts char(5),
 moute char(5),
 ainb char(5),
 ains char(5),
 aine char(5),
 aoutb char(5),
 aouts char(5),
 aoute char(5)
)
go
exec sp_addextendedproperty N'MS_Description', N'班制编号', N'user', N'dbo', N'table', N'worktime', N'column', N'worktimeid'
exec sp_addextendedproperty N'MS_Description', N'上午上班始', N'user', N'dbo', N'table', N'worktime', N'column', N'minb'
exec sp_addextendedproperty N'MS_Description', N'上午上班标准', N'user', N'dbo', N'table', N'worktime', N'column', N'mins'
exec sp_addextendedproperty N'MS_Description', N'上午上班止', N'user', N'dbo', N'table', N'worktime', N'column', N'mine'
exec sp_addextendedproperty N'MS_Description', N'上午下班始', N'user', N'dbo', N'table', N'worktime', N'column', N'moutb'
exec sp_addextendedproperty N'MS_Description', N'上午下班标准', N'user', N'dbo', N'table', N'worktime', N'column', N'mouts'
exec sp_addextendedproperty N'MS_Description', N'上午下班止', N'user', N'dbo', N'table', N'worktime', N'column', N'moute'

exec sp_addextendedproperty N'MS_Description', N'下午上班始', N'user', N'dbo', N'table', N'worktime', N'column', N'ainb'
exec sp_addextendedproperty N'MS_Description', N'下午上班标准', N'user', N'dbo', N'table', N'worktime', N'column', N'ains'
exec sp_addextendedproperty N'MS_Description', N'下午上班止', N'user', N'dbo', N'table', N'worktime', N'column', N'aine'
exec sp_addextendedproperty N'MS_Description', N'下午下班始', N'user', N'dbo', N'table', N'worktime', N'column', N'aoutb'
exec sp_addextendedproperty N'MS_Description', N'下午下班标准', N'user', N'dbo', N'table', N'worktime', N'column', N'aouts'
exec sp_addextendedproperty N'MS_Description', N'下午下班止', N'user', N'dbo', N'table', N'worktime', N'column', N'aoute'
/*
注:在上班始-上班标准间打卡属于正常打卡,在上班标准-上班止间打卡属于迟到
  在下班始-下班标准间打卡属于早退,在下班标准-下班止间打卡属于正常打卡
  其余时间打卡属于无效打卡。
*/

--3:人事资料表(只列出与考勤有关的字段)
create table employee(
 workno char(6) primary key,
 [name] varchar(10),
 calendarFlag int check(calendarFlag in (1,2,3) ),   -- 1,2,3分别表示工作日历中的标志1,标志2,标志3
 worktimeid int       -- 排班表中的班制
)
go
exec sp_addextendedproperty N'MS_Description', N'工号', N'user', N'dbo', N'table', N'employee', N'column', N'workno'
exec sp_addextendedproperty N'MS_Description', N'姓名', N'user', N'dbo', N'table', N'employee', N'column', N'name'
exec sp_addextendedproperty N'MS_Description', N'工作日历方式', N'user', N'dbo', N'table', N'employee', N'column', N'calendarFlag'
exec sp_addextendedproperty N'MS_Description', N'班制', N'user', N'dbo', N'table', N'employee', N'column', N'worktimeid'

/*
calendarFlag  1,2,3分别表示工作日历中的标志1,标志2,标志3
worktimeid   对应排班表中的班制
*/


--4:异常类别表abnormity
create table abnormity(
 abnormityno int primary key clustered,
 [description] varchar(10)
)
go
exec sp_addextendedproperty N'MS_Description', N'异常类别', N'user', N'dbo', N'table', N'abnormity', N'column', N'abnormityno'
exec sp_addextendedproperty N'MS_Description', N'异常说明', N'user', N'dbo', N'table', N'abnormity', N'column', N'description'

/**************
异常包括:迟到(还可细分成迟到的时间段),早退,无刷卡...
当然可能还有扣薪方式之类的,此处不予考虑。
*****************/

 

 

5:考勤记录表timecard
create table timecard(
 workno char(6),
 [date] datetime,
 constraint [pk_timecard] primary key clustered
 (
  workno,
  [date]
 )  ON [PRIMARY]
)
go
exec sp_addextendedproperty N'MS_Description', N'工号', N'user', N'dbo', N'table', N'timecard', N'column', N'workno'
exec sp_addextendedproperty N'MS_Description', N'打卡时间', N'user', N'dbo', N'table', N'timecard', N'column', N'date'

/*******
其实我实际中是按卡号(对应工号),日期,时间,卡钟号  四个字段来存的。
*******/

 


/****************如下处理得到 考勤明细表1:**********/
--1.创建一个合并的函数
create  function f_kqlist(@workno char(6),@date char(8))
returns varchar(400)
as
begin
declare @str varchar(1000)
set @str=''
select @str=@str+'/'+ convert(char(8),[date],108) from timecard
 where workno = @workno and datediff(day,[date], @date) = 0
set @str=right(@str,len(@str)-1)
return(@str)
End

/*   Usage:  
    select distinct workno,date,dbo.f_kqlist(workno,[date])
        from timecard
 where workno = '102337' and convert(char(8),[date],112) = '20030814'
*/

剩下的留给大家吧。其实也不难,就看谁的效率比较高一些罢了。  :D
(我的做法:  异常处理   :   用存储过程,用游标做的,懒得去优化了
     考勤明细表2: 用函数,原来用游标,不好,后来才改用函数的)

 

一个简单的考勤签到程序

项目介绍 项目:在我们的课堂,一般有3-5次全班考勤的机会。往年老师都是在考勤表上做标记,今年不一样了,让我们来编个程序,把考勤数据保存到电脑中。 已有数据,学生名单文件: list.tx...
  • u013910357
  • u013910357
  • 2014年03月05日 22:51
  • 1336

PHP考勤登录系统--上

一、作业要求 电计算机实验室考勤登记系统(三张表,班级信息表,考勤表,请假表)可变动(小于等于三个表) 1 admin管理员用户     1.能对班级人员进增、添、删改、查看     2.请假审批(上...
  • shaynerain
  • shaynerain
  • 2016年12月28日 16:39
  • 41896

考勤管理系统需求文档

考勤管理系统需求文档 简介 背景       某软件公司,员工人数100人左右,大部分员工是软件研发人员,包括项目经理、软件设计师、程序员、测试工程师、实施工程师等,除此之外还包括行政人员、财务人...
  • q547550831
  • q547550831
  • 2016年01月07日 09:30
  • 5429

java企业考勤系统

java企业考勤系统 源代码下载地址:http://www.zuidaima.com/share/1612485580475392.htm
  • springmvc_springdata
  • springmvc_springdata
  • 2015年09月11日 09:54
  • 3534

考勤系统的数据库分析

这个考勤系统的数据库,其实就是从打卡机里导出的所有员工的考勤信息,一个sheet里有三个员工的信息,具体如下: ,一位员工的信息可以看做是一个实体,所以还需要考勤表(包括某个人上班的天数,迟到的天数,...
  • qq_17255515
  • qq_17255515
  • 2016年12月04日 00:09
  • 524

人脸识别考勤系统解决方案

系统概述严格规范的员工考勤管理是现代企事业单位提高管理效益的重要保证,而传统的以打卡、刷卡为代表的考勤产品,存在着替代打卡,效率低下,不易统计,管理和使用维护成本高等弊端。指纹识别产品在考勤中的大规模...
  • SmartTony
  • SmartTony
  • 2013年03月18日 01:28
  • 1185

基于.NET考勤系统(附源码)

时隔一个月,突然想起来之前设计的考勤系统,当时也是脑子一股热,觉得这个可行,然后就上手去做,前因可以扯到大一的时候,上计算机组成原理课,老师给我们看了下他Java弄的点到系统,现在都记不清了,唯一的有...
  • k183000860
  • k183000860
  • 2016年07月03日 15:27
  • 2645

HR人力资源软件考勤的两种计算方法

HR人力资源软件考勤的两种计算方法 说起考勤,最明显的特点莫过于他灵活的规则。 每家企业基本上都各不相同,所以一直以来考勤的计算在劳动密集型企业都是件繁杂的差事。人力部门到月底往往要面对成千上万的...
  • albert1222344
  • albert1222344
  • 2015年03月29日 20:11
  • 2304

袁高腾 基于RFID技术的学生考勤系统

科技的发展,给人类的生活带来了便利。物联网时代的来临,数字化,智能化已深入人们的日常生活,利用无线射频技术进行识别考勤,顺应了时代发展的潮流,方便了人们的生活。采用RFID识别模块、WIFI通信、单片...
  • GaotYuan
  • GaotYuan
  • 2017年06月22日 21:43
  • 362

蓝牙签到系统 入公司自动打卡

由手机、自拍神器,以至可穿戴式装置、智能家居,蓝牙装置无处不在,去年蓝牙装置出货量达30亿部。 原来除用作短程无?传输外,有80後大学生毕业後实现创业梦,开发「蓝牙签到」系统,上班族进入公司范围...
  • cos_sin_tan
  • cos_sin_tan
  • 2016年01月25日 09:11
  • 1794
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的考勤系统
举报原因:
原因补充:

(最多只允许输入30个字)