1、人事与考勤管理系统的设计与实现1 概述待开发的系统的名称为企业职工在线考勤系统.我以中小型企业的考勤管理业务为依托,结合科学管理的理论,设计并开发一个企业考勤管理信息系统,提供一个科学合理的考勤管理解决方案,彻底实现无纸化作业.根据管理权限的不同,将界面分为一般职员、部门经理、系统管理员和最高管理者四个层次,系统目标如下:(1)提供简单、方便的操作。(2)根据企业用工人事状况及相关制度,提供人事信息管理查询功能。(3)根据企业原来的考勤管理制度,为企业不同管理层次提供相应的功能.(4)通过考勤管理无纸化的实现,使企业的考勤管理更加科学规范,节省考勤管理的成本。实现考勤信息实时化查询,可以及时了
2、解相关情况.(5)提高企业考勤管理的透明度和效率,防止“虚假出勤“的现象。(6)对系统提供必要的权限管理.(7)为企业实现整体信息化的其他相关系统提供必要的数据支持.总体方案设计2 需求分析2。1功能需求(1) 数据管理功能是设置和管理基础数据,包括人事信息,加班、请假类别的定义和班次的定义,在权限范围内可以进行基础数据的添加、删除和修改。(2)人事管理分为管理员和一般员工两个功能块,管理员可以添加、删除、查看部门、员工信息,实现人事管理,一般员工可以查看部门信息。实现人事资料管理无纸化作业.(3) 考勤管理包括出勤动作、出勤信息的查询;上级对下级员工的出勤信息的确认;生成考勤统计信息并可以根
3、据指定的条件进行查询。实现从每日出勤到统计全部考勤信息的无纸化操作.为方便数据传递和查阅,要根据需求提供不同时间短的考勤统计信息表。 (4) 请假管理可以提出请假申请,并完善请假信息,如请假开始时间,请假结束时间,请假的次数进行管理。(5) 出差管理管理者安排员工出差,对出差时间,次数的管理。(6)实时显示管理员实时查看员工出勤情况.2.2 系统功能设计要设计一个完备的企业人事管理系统,需涉及大量的信息,因目前还未涉及C语言的学习,只能简化系统设计,只选取与企业基本信息紧密相关的部门信息,员工信息以及考勤信息等进行管理.具体规划的模块如下:(1)部门信息管理:包括部门信息的查询,修改,添加,删
4、除等功能。( 2)员工信息管理:包括员工基本信息的查询,修改,添加,删除等功能。(3)考勤信息管理:包括考勤信息的录入,查看等功能.根据功能的关联关系,将功能细化为下图所示的功能结构图(图1),其业务流程如图(2)所示。人事管理系统部门信息管理员工信息管理考勤信息管理系统管理添加部门信息查看部门信息修改部门信息添加员工信息查看员工信息修改员工信息录入出勤信息查看考勤信息管理员录入考勤信息录入出差信息录入病假信息录入事假信息一般员工图(1)登 录系统主窗体用户角色管理员普通员工部门信息管理员工信息管理考勤信息管理部门,员工,考勤信息的查看;记录出勤图(2)2.3 开发工具选择本系统采用SQL S
5、erver 2008创建后台数据库,前台开发工具利用Dreamweaver CS6进行开发。详细设计3系统数据库设计3。1 实体ER图根据人事与考勤管理系统的系统分析与功能设计,人事管理系统中主要包括部门信息实体,员工信息实体,职位信息实体,考勤信息实体等,下面为它们的ER图:出差月份员工编号上班时间出勤编号员工编号考勤月份员工编号员工编号员工信息姓名 性别出生年月政治面貌婚姻状况职位学历n实体ER图cdfekjiyp x工作部门部门编号部门信息办公室负责人部门名称q 职位职位信息所属部门职位名称职位编号考勤信息出差天数病假天数考勤月份迟到次数事假m早退次数加班时数事假天数所属部门联系电话考勤
6、病假出差出勤事假信息病假信息出差信息h下班时间病假编号出差编号结束时间起始时间病假月份起始时间结束时间结束时间起始时间事假月份员工编号事假编号员工编号出勤信息3.2 逻辑模型设计3。2。1 关系模式员工表(员工编号,姓名,性别,出生年月,所属部门,职位,学历,联系电话,政治面貌,婚姻状况)性别表(性别编号,性别)学历表(学历编号,学历)政治面貌表(面貌编号,政治面貌)婚姻表(婚姻编号,婚姻状况)部门表(部门编号,部门名称,负责人,办公室)职位表(职位编号,职位名称,所属部门)考勤表(职工编号,月份,迟到次数,早退次数,加班时数,出差天数,病假天数,事假天数)出勤表(职工编号,出勤编号,上班时间
7、,下班时间)出差表(职工编号,出差编号,出差月份,出差起始时间,出差结束时间)病假表(职工编号,出差编号,病假月份,病假起始时间,病假结束时间事假表(职工编号,事假编号,事假月份,事假起始时间,事假结束时间)3。2。2数据关系图图 3.1如图3。1所示,在数据库中生成的关系图中,员工编号是员工表的主键,是考勤表、出勤表、出差表、病假表、事假表的外键,而员工表的性别、学历、职位、所属部门、政治面貌、婚姻状况又分别是性别表、学历表、职位表、部门表、政治面貌表、婚姻表的外键.3。3 应用程序设计3。3.1 建立数据库CREATE DATABASE rs ON PRIMARY ( NAME = Nrs
8、, FILENAME = ND:Program FilesMicrosoft SQL ServerMSSQL10。MSSQLSERVERMSSQLDATArs.mdf , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = Nrs_log, FILENAME = ND:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATArs_log。ldf , SIZE = 470144KB , MAXSIZE = 2048GB , FILEG
9、ROWTH = 10%)3。3。2 数据表的创建本系统总共建有12个表,创建员工表代码如下,与创建员工表方法相同,创建其余表.所有表分别如图3。23。13所示。CREATE TABLE dbo。员工表(员工编号 int NOT NULL,姓名 nchar(10) NULL,所属部门 nchar(20) NULL,职位 nchar(10) NULL,学历 nchar(10) NULL,性别 nchar(10) NULL,出生年月 nchar(20) NULL,政治面貌 nchar(10) NULL,婚姻状况 nchar(10) NULL,联系电话 nchar(20) NULL, CONSTRAI
10、NT PK_员工表 PRIMARY KEY CLUSTERED (员工编号 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY) ON PRIMARY图3.2 员工表图3.3 部门表图3。4 职位表图3。5 性别表图3。6 婚姻表图3。7 政治面貌表图3。8 学历表图3.9 考勤表图3。10出勤表图3。11 出差表图3.12 病假表图3。13 事假表3.3.3建立视图本系统共建有
11、两个视图,其中员工视图用于查询员工详细信息,员工考勤视图用于查询员工考勤信息。CREATE VIEW dbo.员工信息ASSELECT dbo。员工表。员工编号, dbo.员工表。姓名, dbo。部门表。部门名称, dbo.职位表。职位名称, dbo。学历表。学历, dbo。性别表。性别, dbo。员工表.出生年月, dbo。政治面貌表。政治面貌, dbo。婚姻表。婚姻状况, dbo.员工表.联系电话FROM dbo.员工表 INNER JOIN dbo.部门表 ON dbo.员工表.所属部门 = dbo。部门表。部门编号 INNER JOIN dbo。职位表 ON dbo.员工表.职位 =
12、dbo。职位表。职位编号 INNER JOIN dbo。学历表 ON dbo。员工表。学历 = dbo。学历表.学历编号 INNER JOIN dbo.性别表 ON dbo。员工表。性别 = dbo。性别表。性别编号 INNER JOIN dbo。政治面貌表 ON dbo.员工表。政治面貌 = dbo。政治面貌表。面貌编号 INNER JOIN dbo.婚姻表 ON dbo。员工表。婚姻状况 = dbo。婚姻表.婚姻编号CREATE VIEW dbo。员工考勤ASSELECT dbo.员工表。职位, dbo.员工表。姓名, dbo。员工表。员工编号, dbo.考勤表.月份, dbo.考勤表。出
13、差天数, dbo.考勤表。病假天数, dbo。考勤表.事假天数FROM dbo。员工表 INNER JOIN dbo。考勤表 ON dbo.员工表。员工编号 = dbo.考勤表.员工编号3。3。4创建触发器本系统中,触发器主要实现数据管理功能,即相关数据的删除,录入和统计功能.创建一个触发器,当删除员工基本信息时,同事也删除其他表中相应员工的信息.即当删除员工表中信息时,触发触发器dbo。delkq,也删除考勤表中相应员工的记录内容。同样建立删除出勤记录、出差记录、请假记录和事假记录的同类触发器。从员工表删除考勤记录的触发器代码如下:CREATE TRIGGER dbo。delkqON dbo
14、。员工表 AFTER DELETEAS DELETE FROM dbo.考勤表 WHERE 员工编号 = (SELECT 员工编号 FROM deleted)建立一个触发器,当向出差表中添加一条新的出差记录时,触发统计该员工一个月的出差记录,并存入考勤表的出差次数属性中。病假表、事假表分别建立此类触发器。ALTER TRIGGER dbo.updatecctokq ON dbo。出差表 AFTER INSERTAS IF exists (Select 员工编号 from dbo。考勤表 where 员工编号=(Select 员工编号 from inserted) AND 月份=(Select
15、出差月份 from inserted))BEGINUPDATE dbo。考勤表SET 出差天数=出差天数+(Select 出差结束时间 from inserted)-(Select 出差起始时间 from inserted) + 1 WHERE 员工编号=(Select 员工编号 from inserted) AND 月份=(Select 出差月份 from inserted)END ELSEBEGININSERT INTO dbo.考勤表 (员工编号, 月份, 出差天数) VALUES ((Select 员工编号 from inserted), (Select 出差月份 from inser
16、ted),((Select 出差结束时间 from inserted) - (Select 出差起始时间 from inserted) + 1)END创建立一个触发器,当向出勤表中添加一条新的出勤记录时,触发统计该员工一个月的迟到次数,并存入考勤表的迟到次数属性中。同样建立统计早退次数、加班时数的触发器.CREATE TRIGGER dbo.updatecdtokq ON dbo。出勤表 AFTER INSERTAS IF (12(Select convert(int,Datename(hh,(Select 上班时间 from inserted)),14)AND (Select convert
17、(int,Datename(hh,(Select 上班时间 from inserted),14))8) OR (17(Select convert(int,Datename(hh,(Select 上班时间 from inserted)),14)) AND (Select convert(int,Datename(hh,(Select 上班时间 from inserted)),14))13)) AND (Select convert(int,Month((Select 上班时间 from inserted)))=1IF exists (Select 员工编号 from dbo。考勤表 where
18、 员工编号=(Select 员工编号 from inserted) AND 月份=(Select convert(int,Month(Select 上班时间 from inserted)))BEGINUPDATE dbo。考勤表SET 迟到次数=迟到次数 + 1 WHERE 员工编号=(Select 员工编号 from inserted) AND 月份=(Select convert(int,Month(Select 上班时间 from inserted),14))END ELSEBEGININSERT INTO dbo。考勤表 (员工编号, 月份, 迟到次数) VALUES ((Select
19、 员工编号 from inserted), (Select convert(int,Month(Select 上班时间 from inserted),14)),1)ENDGO4 网页设计本系统采用Dreamweaver CS6设计网页.根据本系统设计的功能,网页分为管理员和普通员工两大类,总共有21个网页页面。其主要功能如下表:编号网页名称功能首页1index.asp首页管理员2guanliyuan。asp登录管理员功能页面3ckbmxx.asp查看、管理部门信息4tjbmxx。asp添加部门信息5tjbmcg。asp添加部门成功6scbmxx。asp删除部门信息7ckygxx.asp查看、管
20、理所有员工的信息8tjygxx。asp添加新的员工信息9tjygcg。asp添加新员工信息成功10scygxx.asp删除员工信息11ckkqxx。asp查看所有员工的考勤信息12tjccxx.asp添加员工出差信息13tjbjxx。asp添加员工病假信息14tjsjxx.asp添加员工事假信息15tjkqcg.asp添加新的考勤信息成功普通员工16ygdl。asp普通员工按权限登录17ptyh。asp登录管理员功能页面,添加上班信息18ptyh1。asp添加下班信息19ckbmxx1.asp查看部门信息20ckygxx1。asp查看登录员工的信息21ckkqxx1.asp查看登录员工的考勤信
21、息4.1 网页相关功能的实现网页的重点在于通过网页记录集向数据库添加信息、从数据库读取需要的信息、从数据库删除信息以及网页实时刷新功能的实现。信息统计工作由数据库在后台实现。4。1。1 向数据库添加信息通过数据库INSERT语句向数据库添加数据,数据来源为通过向网页插入的文本域表单插件输入的信息。向数据库的员工表录入员工信息的主要代码如下:%If (CStr(Request(MM_insert”)) = form2) Then If (Not MM_abortEdit) Then execute the insert Dim MM_editCmd Set MM_editCmd = Server
22、。CreateObject (”ADODB.Command) MM_editCmd。ActiveConnection = MM_rsglxt_STRING MM_editCmd.CommandText = ”INSERT INTO dbo。员工表 (员工编号, 姓名, 所属部门, 职位, 学历, 性别, 出生年月, 政治面貌, 婚姻状况, 联系电话) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) MM_editCmd.Prepared = true MM_editCmd。Parameters。Append MM_editCmd.CreateParameter(”p
23、aram1”, 5, 1, 1, MM_IIF(Request。Form(”ygbh”), Request。Form(”ygbh”), null) adDouble MM_editCmd。Parameters.Append MM_editCmd。CreateParameter(”param2”, 201, 1, 1, Request.Form(”xm”) adLongVarChar MM_editCmd。Parameters。Append MM_editCmd。CreateParameter(param3”, 201, 1, 1, Request。Form(”ssbm)) adLongVarC
24、har MM_editCmd。Parameters.Append MM_editCmd.CreateParameter(”param4, 201, 1, 1, Request。Form(zw”)) adLongVarChar MM_editCmd.Parameters.Append MM_editCmd.CreateParameter(”param5”, 201, 1, 1, Request。Form(xl”)) adLongVarChar MM_editCmd。Parameters.Append MM_editCmd。CreateParameter(”param6, 201, 1, -1,
25、Request.Form(”xb”) adLongVarChar MM_editCmd。Parameters。Append MM_editCmd。CreateParameter(param7, 201, 1, 1, Request。Form(”csny)) adLongVarChar MM_editCmd。Parameters.Append MM_editCmd。CreateParameter(param8, 201, 1, 1, Request。Form(zzmm)) adLongVarChar MM_editCmd.Parameters.Append MM_editCmd。CreatePa
26、rameter(”param9”, 201, 1, 1, Request。Form(hyzk”) adLongVarChar MM_editCmd.Parameters.Append MM_editCmd。CreateParameter(param10, 201, 1, -1, Request。Form(”lxdh”) adLongVarChar MM_editCmd.Execute MM_editCmd。ActiveConnection。Close append the query string to the redirect URL Dim MM_editRedirectUrl MM_ed
27、itRedirectUrl = ”tjygcg.asp” If (Request。QueryString 4。1。2 从数据库添加信息通过数据库SELECT语句由网页记录集从相应的数据库表获得数据来源,以重复读取数据库表信息的方式,显示表中所有记录信息。向网页添加名为ygxx记录集的代码如下,其中数据来源为员工信息视图:%Dim ygxxDim ygxx_cmdDim ygxx_numRowsSet ygxx_cmd = Server.CreateObject (”ADODB。Command”)ygxx_cmd。ActiveConnection = MM_rsglxt_STRINGygxx_c
28、md.CommandText = ”SELECT FROM dbo。员工信息 ” ygxx_cmd。Prepared = trueSet ygxx = ygxx_cmd。Executeygxx_numRows = 0%实现重复显示数据库员工信息视图员工具体信息的代码如下: tddiv align=”center=(ygxx。Fields.Item(员工编号”).Value)%/div/td tddiv align=”center”=(ygxx。Fields.Item(”姓名”)。Value)div align=center=(ygxx.Fields。Item(”部门名称)。Value)/div
29、/td tddiv align=”center=(ygxx.Fields.Item(”职位名称).Value) tddiv align=”center”=(ygxx。Fields。Item(学历).Value)/div/div/td tddiv align=center”/divdiv align=”center”=(ygxx。Fields。Item(”政治面貌”)。Value)%/td tddiv align=center”%=(ygxx。Fields.Item(婚姻状况”)。Value)/div/td tddiv align=”center”=(ygxx。Fields.Item(”联系电话
30、)。Value)%/div Repeat1_index=Repeat1_index+1 Repeat1_numRows=Repeat1_numRows-1 ygxx。MoveNext()Wend%通过权限限制控制查询范围的功能由SELECT语句实现.实现读取登录用户用工信息的具体代码如下,其中MMColParam是记录集中自建的参数,它主要传递用户登录页面缓存的用户信息:Dim ygxxDim ygxx_cmdDim ygxx_numRowsSet ygxx_cmd = Server。CreateObject (ADODB.Command)ygxx_cmd。ActiveConnection =
31、 MM_rsglxt_STRINGygxx_cmd。CommandText = ”SELECT FROM dbo。员工信息 WHERE 员工编号 = ? ygxx_cmd。Prepared = trueygxx_cmd。Parameters.Append ygxx_cmd.CreateParameter(param1, 5, 1, 1, ygxx_MMColParam) adDoubleSet ygxx = ygxx_cmd.Executeygxx_numRows = 0%Dim Repeat1_numRowsDim Repeat1_indexRepeat1_numRows = 10Repea
32、t1_index = 0ygxx_numRows = ygxx_numRows + Repeat1_numRows4。1。3 从数据库删除信息通过数据库DELETE语句删除网页记录集从相应的数据库表获得的数据.通过网页记录集删除名员工表中信息的代码如下: * Delete Record: construct a sql delete statement and execute itIf (CStr(Request(”MM_delete”)) = ”form2 And CStr(Request(MM_recordId”)) ”) Then If (Not MM_abortEdit) Then e
33、xecute the delete Set MM_editCmd = Server.CreateObject (”ADODB。Command) MM_editCmd。ActiveConnection = MM_rsglxt_STRING MM_editCmd。CommandText = ”DELETE FROM dbo。员工表 WHERE 员工编号 = ? MM_editCmd。Parameters。Append MM_editCmd.CreateParameter(”param1”, 5, 1, 1, Request.Form(”MM_recordId) N/A MM_editCmd。Exe
34、cute MM_editCmd。ActiveConnection.Close append the query string to the redirect URL Dim MM_editRedirectUrl MM_editRedirectUrl = ”ckygxx。asp” If (Request。QueryString ”) Then If (InStr(1, MM_editRedirectUrl, ”?, vbTextCompare) = 0) Then MM_editRedirectUrl = MM_editRedirectUrl & ?” Request。QueryString E
35、lse MM_editRedirectUrl = MM_editRedirectUrl &” Request。QueryString End If End If Response。Redirect(MM_editRedirectUrl) End IfEnd If%4.1。4 刷新网页,实时显示功能通过网页自动刷新,向数据库发送命令请求方式实现网页数据更新。具体代码如下:META HTTPEQUIV=”Refresh content=5”4。2 主要网页的最终效果(1) 主界面最终效果 (2) 添加员工信息网页的最终效果(3) 员工查看个人信息网页的最终效果:(4) 员工查看个人考勤信息网页的最
36、终效果:5心得体会在此次为期10周的数据库技术课程学习中,我感受到了知识全面、系统的重要性,感觉整个系统的设计过程就是一个逐步完善的过程,必须要不停地思考,不停地探索。刚开始的设计系统两天其实基本上毫无头绪,去图书馆去网上都查了资料,在脑海中先形成大致模块和思路。建立数据库的过程看似简单,实则不然。要考虑到实体间的逻辑关系和数据关系模式的完整性问题,努力使之达到第三范式;要针对各种功能实际,不断修改完善代码。然后就是网页界面的设计了,其中,数据源属性配置的过程中出现的问题是最多的,可能是平时学的知识不够牢固,在对数据源的select,update,delect属性进行配置的过程中,反反复复,不
37、能确定,最后,只得静下心来,一步一步一点一点的配置,修改,最后终于全部成功,在这个反复的过程当中已将这些今本知识印于脑海之中,巩固了平时所学,顿时觉得有了成就感,也感受到了数据库知识的强大功能和作用.虽然此学期学的关于数据库平台和网页设计平台应用的知识并不多,但是还是运用老师所讲的实用性很强的基本知识成功设计出了一个完整的系统实现的此次课程设计要求实现的功能,其实心里想要的实现的功能更多,但是所学知识有限,只能暂时这样,通过此次课程设计加深了我对数据库,实体逻辑关系的理解,加深了我对DreamWeaverCS6平台的了解,熟练了很多应用方法,更正了很多习惯性的错误使用方法,激起了我对SQL平台更加熟练使用和C语言的求知欲望,想尽快学习到更多的数据库设计方面的知识,设计出更加完善实用性更强的系统。参考文献1 邵超, 张斌等 数据库实用教程SQL Server 2008 。 北京:清华大学出版社,20092 Robert E.Walters, Michael Coles等 Accelerated SQL Server 2008。 任斌, 刘芳芳,译. 北京:人民邮电出版社, 2011。3 李睦芳等 Dreamweaver CS6+ASP动态网站开发从基础到实践北京:机械工业出版社, 20144 王珊 数据库系统概论M. 北京:高等教育出版社,2012。