目录
摘要:随着社会的发展和科技的进步,信息技术的应用已经渗透到各个领域,尤其我国自改革开发
以来经济迅猛发展,企业数量和规模也不断迅速的壮大。传统的考勤管理方法已经无法满足企业的需求。从而设计了考勤管理系统以便能高效,便捷的处理管理职工考勤信息。该系统采用B/S架构和ASP.Net技术;以C#作为开发语言在Dreamweaver中开发;采用Access2003作为数据库;以IIS服务器和Microsoft.Net Framwork 2.0组件组成的环境进行测试。
该系统主要分为职工考勤、后台管理两大模块。通过输入职工编号和密码后点击按钮进行考勤;管理
员进入后台后可以添加、删除和修改职工、部门信息;管理员月底可以对每个员工的请假情况进行添加并且可以根据公司考勤制度对系统进行设定。
关键字:ASP.NET;C#;Access;考勤; 考勤管理系统
1.绪论
考勤,顾名思义,就是考查出勤,也是就通过某种方式来获得员工或者某些团体、个人在某个特定的场所及特定的时间段内的出勤情况,包括上下班,迟到,早退,病假,休息,工作时间,加班情况等等,通过对以前阶段,本阶段内出勤情况的研究,以进行以后阶段的统筹,安排等。
在过去我们的考勤工作都是人工完成的,甚至是手工签到这其中存在许多问题。
- 手工签到浪费时间,效率低下。
- 长期大量的手工签到浪费纸张等资源日积月累开销大。
- 手工签到若没有完善的监督机制极易被钻空子,职工可以代签甚至负责监督人员
可利用职权胡作非为,缺乏公正公平透明的特性。
而现在,计算机已经成为我们学习和工作的得力助手,我们的生活也越来越离不开它。用计算机来进行考勤的管理也成为现代化企业运作必不可少的一部分。
且改用电子考勤后一次性投入即可永久使用,可以长期有序的保存海量的数据,查询调用非常方便。相较签到考勤大大降低了人为不公正的可能性更加客观公平透明。且电子考勤员工只需刷卡或扫描、点击按钮即可完成速率高是传统考勤无法比拟的。尤其在较大规模的公司这点尤为重要。电子考勤系统通用性强,复用率高,各个公司可根据自己的实际情况进行设置。
该系统采用C#做脚本语言,以Access开发数据库,主要目标是完成签到刷卡、签出刷卡、请假考核、考勤查询等工作。
其中使用的C# (读做"C sharp")是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
2.系统开发环境
2.1 系统开发理论依据
该系统采用ASP.Net技术及B/S架构。目前web编程使用最广泛的是PHP、Jsp与ASP.Net。
在使用率上目前为止php的使用率最高(尤其在国外国内使用较多的是JSP)而ASP.NET最低,但这要考虑到它们的问世时间;最早的动态网页语言是php,最早是96年吧,java是98,jsp兴起于2002年左右,.net是微软为了对抗sun的java的产品。c#是仿java的语言,和java的最大的区别就是用了很多微软的控件,它问世于2004年。所以不能单以使用率来判定它们的前景。
ASP.NET具有很大的优势:
(1)因为ASP.NET是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上(笔者到现在为止只知道它只能用在Windows 2000 Server上)。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.NET的Web应用中。ASP.NET同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript.将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.NET。
(2)简单易学
ASP.NET是运行一些很平常的任务如表单的提交客户端的身份验证、分布系统和网站配置变得非常简单。例如ASP.NET页面构架允许你建立你自己的用户分界面,使其不同于常见的VB-Like界面。另外,通用语言简化开发使把代码结合成软件变得非常简单。
(3)高效可管理性
ASP.NET使用一种字符基础的,分级的配置系统,使你服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为"Zero Local Administration"的哲学观念使ASP.NET的基于应用的开发更加具体,和快捷。一个ASP.NET的应用程序在一台服务器系统的安装只需要简单的拷贝一些必须得文件,不需要系统的重新启动,一切就是这么简单。多处理器环境的可靠性 ASP.NET已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大的提高运行速度。
ASP.NET 是一个已编译的、基于 .NET 的环境,把基于通用语言的程序在服务器上运行。将程序在服务器端首次运行时进行编译,比ASP即时解释程序速度上要快很多。而且是可以用任何与 .NET 兼容的语言(包括 Visual Basic .NET、C# 和 JScript .NET.)创作应用程序。
(5)另外,任何 ASP.NET 应用程序都可以使用整个 .NET Framework.开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
ASP.NET 可以无缝地与 WYSIWYG HTML 编辑器和其他编程工具(包括 Microsoft Visual Studio .NET)一起工作。这不仅使得 Web 开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到 Web 页的 GUI 和完全集成的调试支持。
当创建ASP.NET 应用程序时,开发人员可以使用Web窗体或 XML Web services,或以他们认为合适的任何方式进行组合。每个功能都能得到同一结构的支持,使您能够使用身份验证方案,缓存经常使用的数据,或者对应用程序的配置进行自定义。
2.1.1ASP.NET概述
⑴ASP.NET基本含义和特点
ASP 是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。 指 Active Server Pages(动态服务器页面) ,运行于 IIS 之中的程序 。
ASP.net不仅仅是 Active Server Page (ASP) 的下一个版本,而且是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.net提供许多比现在的Web开发模式强大的优势。
ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。
(2)ASP.net的三层架构
三层结构包含:表示层(USL),业务逻辑层(BLL),数据访问层(DAL)
①数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不
是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
②业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
③表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
(3)ASP.net的优点
ASP的主要优点大概可以归纳如下:
①可管理性:使用基于文本的、分级的配置系统,简化了将设置应用于服务器环境和Web应用程序的工作。因为配置信息是存储为纯文本的,因此可以在没有本地管理工具的帮助下应用新的设置。配置文件的任何变化都可以自动检测到并应用于应用程序。
②安全:为Web应用程序提供了默认的授权和身份验证方案。开发人员可以根据应用程序的需要很容易地添加、删除或替换这些方案。
③易于部署:通过简单地将必要的文件复制到服务器上,应用程序即可以部署到该服务器上。不需要重新启动服务器,甚至在部署或替换运行的已编译代码时也不需要重新启动。
④增强的性能:是运行在服务器上的已编译代码。与传统的ActiveServerPages(ASP)不同,能利用早期绑定、实时(JIT)编译、本机和全新的缓存服务来提高性能。
⑤灵活的输出缓存:根据应用程序的需要,可以缓存页数据、页的一部分或整个页。缓存的项目可以依赖于缓存中的文件或其他项目,或者可以根据过期策略进行刷新。
⑥国际化:在内部使用Unicode以表示请求和响应数据。可以为每台计算机、每个目录和每页配置国际化设置。
⑦移动设备支持:支持任何设备上的任何浏览器。开发人员使用与用于传统的桌面浏览器相同的编程技术来处理新的移动设备。
⑧扩展性和可用性:被设计成可扩展的、具有特别专有的功能来提高群集的、多处理器环境的性能。此外,Internet信息服务(IIS)和运行时密切监视和管理进程,以便在一个进程出现异常时,可在该位置创建新的进程使应用程序继续处理请求。
⑨跟踪和调试:提供了跟踪服务,该服务可在应用程序级别和页面级别调试过程中启用。可以选择查看页面的信息,或者使用应用程序级别的跟踪查看工具查看信息。在开发和应用程序处于生产状态时,支持使用.NETFramework调试工具进行本地和远程调试。当应用程序处于生产状态时,跟踪语句能够留在产品代码中而不会影响性能。
⑩与.NETFramework集成:因为是.NETFramework的一部分,整个平台的功能和灵活性对Web应用程序都是可用的。也可从Web上流畅地访问.NET类库以及消息和数据访问解决方案。是独立于语言之外的,所以开发人员能选择最适于应用程序的语言。另外,公共语言运行库的互用性还保存了基于COM开发的现有投资。
2.1.2 SQL介绍
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create,以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。
2.1.3 B/S结构介绍
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过www浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员, 从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。
2.2 系统开发环境
2.2.1 系统软件环境
本系统采用的软件工具环境有:
- Windows XP3
- Adobe Dreamweaver CS3
- Microsoft Access 2003
- IIS 5.1V
- Microsoft .Net Framwork 2.0
- Inertnet Explorer 8.0
- Photoshop 9.0
2.2.2 开发工具简介
(1) Adobe Dreamweaver CS3简介
Adobe Dreamweaver CS3 是 建立 Web 站点和应用程序的专业工具。 它将可视布局工具、应用程序开发功能和代码编辑支持组合为一个功能强大的工具,使每个级别的开发人员和设计人员都可利用它快速创建界面吸引人并且基于标准的站点和应用程序。 从对基于 CSS 的设计提供领先的支持到手动编码功能,Dreamweaver 在一个集成和高效的环境中为专业人员提供了所需的工具。 开发人员可以将其选择的服务器技术与 Dreamweaver 配合使用,建立将用户连接到数据库、Web 服务和旧式系统的强大 Internet 应用程序。
(2)Access简介
Access 是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS),是Office系列应用软件之一。它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。
(3) Photoshop 9.0简介
Photoshop 9.0是Adobe公司旗下最为出名的图像处理软件之一,集图像扫描、编辑修改、图像制作、广告创意,图像输入与输出于一体的图形图像处理软件,深受广大平面设计人员和电脑美术爱好者的喜爱。
2.2.3测试工具
该系统开发过程中需首先安装IIS 5.0以上版本服务器和.NET Framwork 2.0组件以及IE浏览器后才能进行本地测试。
3.系统设计
3.1设计要求
设计出的考勤管理系统要界面友好方便用户使用,要实现如下功能:
●职工考勤
职工上下班时在“员工编号”下拉菜单中选择或输入自己的编号,“员工姓名”文本框中将级联显示该员工的姓名,核对无误后,员工可在“密码”框中输入密码之后点击“上班”或“下班”按钮完成考勤。考勤时同一个人不允许在设定时间内连续多次考勤。
●后台管理
管理员点击“后台登陆”链接进入后台登陆页面,输入正确的用户名和密码后即可进入后台管理页面。
●添加职工
在后台管理中点选“添加员工”按钮即可进入添加员工信息页面在其中添加员工信息。
●职工基本信息
在后台管理中点选“员工基本信息”按钮即可进入员工基本信息查询页面以查看员工的基本信息并可以修改或删除员工信息。
●考勤制度设置
在后台管理中点选“考勤制度设置”按钮即可进入考勤制度设置页面,该页面中可以根据各个公司实际的考勤制度设置上下班时间、几点以后未到算迟到、几点以后未到算旷工、每周从周几开始工作到周几休息、请假的类别等。
●职工请假情况添加
在后台管理中点选“员工事假设置”按钮即可进入员工事假设置页面,该页面中管理员根据员工的请假条等对员工的请假情况进行录入。
●职工考勤信息
在后台管理中点选“员工考勤信息”按钮即可进入员工考勤信息查询页面,该页面中管理员输入所要查询的员工编号和所要查询的年份和月份后点击“确定”即可查看该员工该月的考勤信息。
●添加部门
在后台管理中点选“添加部门”按钮即可进入添加部门页面,该页面中管理员可以根据本公司的实际情况添加部门类别。
●添加管理员
在后台管理中点选“添加管理员”按钮即可进入添加管理员页面,该页面中管理员可以点击“修改系统管理员”按钮进入相应页面修改系统管理员的密码和用户名或者添加新的管理员
3.2系统功能设计
根据系统功能的要求,要实现员工考勤信息录入、后台管理,因此将考勤管理系统分为3个大的模块:员工考勤、后台管理、及职工留言(如图3-1所示)。
图3-1系统功能结构图
3.3设计思想
3.3.1Browser/Server结构
考勤管理系统的特点是采用Browser/Server(B/S)结构(如图3-2),实现员工信息的在线添加、查找、删除等功能。这种系统的优势在于系统简单、功能强大、扩展能力良好。
Client/Server(C/S)模式与Browser/Server模式是现在比较流行的两种数据库应用模式。单独应用哪一种模式都将受其自身弱点的限制。Client/Server(C/S)模式主要是在以局域网为基础的环境下展开应用的,它受到地域的限制。而Browser/Server模式通过Internet进行通信,可以不受地域的限制,但是它不能够进行联机事务处理,并且在处理大量数据的情况下,速度较慢。从目前的开发技术来看,Browser端作为信息收集源,特别是大量数据录入工作还不能完全取代Client端的用户界面。在这方面,Client端的各种开发工具的功能更加强大也更加灵活。
图3-2 B/S结构的考勤管理系统应用原理示意图
3.3.2三层结构的概念
Browser/Server的多层结构的应用正是在对C/S结构的总结基础上产生的,并且也已经扩展到了B/S应用开发领域,即将应用划分为3层(可以有更多层,但3层最常见):用户界面层、逻辑层、数据库层;
●用户界面层负责处理用户的输入和向用户的输出,但并不负责解释其含义(处于效率的考虑,它可能在向上传输用户输入前进行合法的验证),这一层通常用前端工具(VB、Visual C++、ASP等)开发,本系统用ASP开发。
●逻辑层是上下两层的纽带,它建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端,这一层通常以动态链接库的形式存在并注册到服务器的注册表中,它与客户端通信的接口符合某一种特定的组件标准,可以用任何支持这种标准的工具开发。
●数据库层负责实际的数据存储和检索。
B/S结构开发还具有另外的一个重要的优势,即面向对象编程的特性——“封状性”。在客户端需要进行某项与数据库之间的访问和操作的地方,只需要调用一个函数,至于这个函数如何编写,如何与数据库打交道,以至访问的是何种数据库都与其无关;在中间层DLL中实现这个函数,如果用户对具体操作的要求发生改变,只需要修改这个函数就可以了,只要此函数的入口参数和返回内容不变,在客户端不需要作任何改动。而这一点在开发大型应用时尤其有用。
4.数据库设计与实现
4.1 数据库E-R图
4.1.1
通过对考勤管理系统功能设计的要求以及功能模块的划分,从而确定了考勤管理系统各个组成部分的数据项。建立Usermessage表、考勤信息表、Admin表、部门表。它们之间的关系如图3-3所示:
图4 -1实体关系图
4.1.2各实体E-R图:
如图3-4为职工实体E-R图;
如图3-5为考勤信息实体E-R图;
如图3-6为部门实体E-R图;
如图3-7为管理员实体E-R图;
图4-2职工实体E-R图
图4-3 考勤信息实体E-R图
图3-6部门实体E-R图
图4-4管理员实体E-R图
4.2数据库表设计
- 员工信息表 :Usermessage表
用于存储员工的信息,在员工考勤页面中输入的员工编号、级联显示的用户名、密码和员工基本信息页面中显示的所有信息都是从该表提取,而添加员工页面可向该表添加数据。
表4-1 Usermessage表
字段名称 | 数据类型 | 说明 |
id | 数字 | 员工编号(主键) |
name | 文本 | 员工姓名 |
sex | 文本 | 员工性别 |
age | 文本 | 员工年龄 |
bm | 文本 | 员工部门 |
zw | 文本 | 员工职位 |
Phone | 文本 | 员工电话 |
kzdate | 文本 | 开资日期 |
jzdate | 文本 | 就职日期 |
Lzrq | 日期/时间 | 离职日期 |
Memo | 备注 | 备注 |
Password | 文本 | 用户密码 |
(2)考勤信息表:kaoqin
用于存储考勤的信息,职工考勤页面中职工点击按钮的考勤信息及员工事假添加页面中由管理员添加的请假等信息将全部输入该表,而考勤信息查询中的信息则是从该表提出。
表4-2 kaoqin表
字段名称 | 数据类型 | 说明 |
id | 数字 | 员工编号(主键) |
name | 文本 | 员工姓名 |
Kqdate | 日期/时间 | 考勤日期(主键) |
dgdate | 日期/时间 | 到岗时间 |
lgdate | 日期/时间 | 离岗时间 |
cd | 数字 | 迟到次数 |
zt | 数字 | 早退次数 |
bj | 数字 | 病假天数 |
sj | 数字 | 事假次数 |
kj | 数字 | 旷工次数 |
year | 数字 | 考勤年份 |
mon | 数字 | 考勤月份 |
用于存储管理员的信息,管理员登陆及修改管理员信息和添加管理员全部都是对该表进行的操作表4 -3admin表
字段名称 | 数据类型 | 说明 |
adminId | 数字 | 管理员编号(主键) |
adminPwd | 文本 | 管理员密码 |
adminName | 文本 | 用户名 |
(4)部门表:bumen
用于存储部门的信息,添加部门时即是对该表添加数据。
表4-4 bumen表
字段名称 | 数据类型 | 说明 |
bId | 数字 | 部门编号 |
bname | 文本 | 部门名称 |
5.详细设计及编码
5.1后台服务器配置
本系统使用了支持WINDOWS XP的IIS作为系统服务器,如IIS5.1,添加它很简单,只需要打开”控制面板”里面的“添加/删除程序”选项,然后选择“添加/删除Windows组件”,最后选中弹出对话框的“Internet信息服务(IIS)选项”,如图5-1所示,按照系统提示进行安装即可。
图5-1IIS安装
5.2页面设置及详细代码
5.2.1员工考勤页面(login.aspx和login.aspx.cs):
员工在“员工编号”下拉列表中选择自己的编号“员工姓名”即可级联显示员工姓名,员工输入正确密码后即可点击“上班”按钮进行考勤,下班时再点击下班按钮即可;系统设定某一时间内各人只有第一次点击生效再点则为非法操作。如图5-3和图5-2所示
图5-2 职工考勤页面
图5-3职工考勤页面
* 其前台显示login.aspx主要代码如下:
①员工编号文本框:
<asp:dropdownlist id="ddId" runat="server" AutoPostBack="True" Width="153" tabIndex="1">
<asp:ListItem Value="--请选择自己的编号--">--请选择自己的编号--</asp:ListItem>
②员工姓名文本框:
</asp:dropdownlist>
<asp:textbox id="txtName" runat="server" Width="153px" Enabled="False" tabIndex="2">
</asp:textbox>
③员工密码文本框:
<asp:textbox id="txtPwd" runat="server" Width="153px" TextMode="Password" tabIndex="3”>
</asp:textbox>
④“上班”按钮:
<asp:Button id="btnShangBan" runat="server" Font-Bold="True" BorderStyle="Groove" Text="上班">
</asp:Button>
⑤“下班”按钮:
<asp:button id="btnXiaBan" runat="server" Text="下班" BorderStyle="Groove" Font-Bold="True" tabIndex="7">
</asp:button>
* 其后台控制login.aspx.cs代码主要为:
当点击用户编号下拉菜单时执行此方法以级联显示姓名
private void ddId_SelectedIndexChanged(object sender, System.EventArgs e)
{
string id,selSql,name="";
id=ddId.SelectedItem.Text;
selSql="select name from usermessage where id='"+id+"'";
con.Open();
com=new OleDbCommand(selSql,con);
reader=com.ExecuteReader();
while(reader.Read())
{
name=reader.GetString(0);
}
reader.Close();
com.Dispose();
con.Close();
txtName.Text=name;
5.2.2后台登陆页面
点击后台“管理”出现如下界面,输入用户名和密码后点击“确定”即可进入后台管理选择如图5-4;
图5-4后台管理登录页面
在图6中点击“考勤管理”即可进入管理页面再点击“添加管理员”即出现下图:
* 其前台显示页面adminEight.aspx主要代码如下:
<asp:DataGrid id="data" AutoGenerateColumns="False" style="Z-INDEX: 111; LEFT: 288px; POSITION: absolute; TOP: 248px" runat="server" BorderStyle="None" Width="304px" BorderColor="#E7E7FF" BorderWidth="1px" BackColor="White" CellPadding="3"GridLines="Horizontal"AllowPaging="True"PageSize="5" DataKeyField="adminId">
<SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C">
</SelectedItemStyle>
<AlternatingItemStyle BackColor="#F7F7F7">
</AlternatingItemStyle>
<ItemStyle ForeColor="#4A3C8C" BackColor="#E7E7FF">
</ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#4A3C8C">
</HeaderStyle>
<FooterStyle ForeColor="#4A3C8C" BackColor="#B5C7DE">
</FooterStyle><Columns>
<asp:BoundColumn DataField="adminId" HeaderText="管理员编号">
</asp:BoundColumn>
<asp:BoundColumn DataField="adminName" HeaderText="管理员姓名">
</asp:BoundColumn>
<asp:ButtonColumn Text="删除" CommandName="Delete">
</asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF" Mode="NumericPages">
</PagerStyle>
</asp:DataGrid>
* 其后台控制页面adminEight.aspx.cs主要代码:
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
data.CurrentPageIndex=e.NewPageIndex;
bind();
}
private void Button1_Click(object sender, System.EventArgs e)
{
if(txtCode.Text.Trim().Equals(""))
{
info.Text="管理员编号不能为空!";
}
else if(txtPwd.Text.Trim().Equals(""))
{
info.Text="管理员密码不能为空!";
}
else if(txtPwd.Text.Length<6)
{
info.Text="管理员密码不能小于6位!";
}
else if(txtName.Text.Trim().Equals(""))
{
info.Text="管理员姓名不能为空!";
}
else
{
info.Text="";
string sql2,sql3;
int count=0;
sql2="select adminId from admin where adminId='"+txtCode.Text.Trim()+"'";
con.Open();
com=new System.Data.OleDb.OleDbCommand(sql2,con);
reader=com.ExecuteReader();
while(reader.Read())
{
count++;
}
reader.Close();
com.Dispose();
con.Close();
if(count==0)
{
sql3="insert into admin values('"+txtCode.Text.Trim()+"','"+txtPwd.Text.Trim()+"','"+txtName.Text.Trim()+"')";
con.Open();
com=new System.Data.OleDb.OleDbCommand(sql3,con);
com.ExecuteNonQuery();
com.Dispose();
con.Close();
txtCode.Text="";
txtPwd.Text="";
txtName.Text="";
bind();
}
else
{
info.Text="你添加的管理员编号已存在!";
}
con.Close();}}
5.2.3职工请假添置
每个月月底管理员可根据职工交上的请假条对其请假情况进行设置如图5-5所示
图5-5职工事假添置页面
5.2.4考勤制度设置
根据各个公司的不同情况管理员可以对其考勤制度进行设定如每周工作几天,每天上下班时间及迟到和旷工时间的设置等如图5-6所示
5-6考勤制度设置页面
点击“添加部门”即可添加相应部门编号和名称如图5-7所示:
图5-7部门添加页面
* 其前台显示页面adminFive.aspx主要代码:
<asp:Button id="btnReturn" style="Z-INDEX: 109; LEFT: 456px; POSITION: absolute; TOP: 304px"runat="server" Text="返回" BorderStyle="Groove" Font-Bold="True">
</asp:Button>
<asp:TextBox id="txtOldPwd" style="Z-INDEX: 108; LEFT: 400px; POSITION: absolute; TOP: 160px" runat="server" TextMode="Password">
</asp:TextBox>
<asp:TextBox id="txtNewPwd" style="Z-INDEX: 107; LEFT: 400px; POSITION: absolute; TOP: 192px" runat="server" TextMode="Password">
</asp:TextBox>
<asp:TextBox id="txtOkPwd" style="Z-INDEX: 106; LEFT: 400px; POSITION: absolute; TOP: 224px" runat="server" TextMode="Password">
</asp:TextBox>
<asp:TextBox id="txtName" style="Z-INDEX: 105; LEFT: 400px; POSITION: absolute; TOP: 256px" runat="server" Width="144px">
</asp:TextBox>
<asp:Label id="labName" style="Z-INDEX: 104; LEFT: 304px; POSITION: absolute; TOP: 256px" runat="server"> 管理员名称:</asp:Label>
<asp:Label id="labOkPwd" style="Z-INDEX: 103; LEFT: 320px; POSITION: absolute; TOP: 224px" runat="server"> 密码确认:</asp:Label>
<asp:Label id="labNewPwd" style="Z-INDEX: 102; LEFT: 336px; POSITION: absolute; TOP: 192px" runat="server"> 新密码:</asp:Label>
点击“员工考勤信息”进入员工考勤信息查询页面如下填入编号所需查阅时间点击“查询”如图5-8:
图5-8职工考勤信息查询页面
* 其后台控制页面adminFour.aspx.cs代码如下:
private void btnQuery_Click(object sender, System.EventArgs e)
{
string strId,strYear,strMon,strSql;
strId=ddId.SelectedItem.Text.Trim().ToString();
strYear=ddYear.SelectedItem.Text.Trim().ToString();
strMon=ddMon.SelectedItem.Text.Trim().ToString();
if(strId.Equals(""))
{
info.Text="请选择员工编号!";
}
else
{
if(strYear.Equals(""))
{
info.Text="请选择查询年份!";
}
else
{
if(strMon.Equals(""))
{
info.Text="请选择查询月份!";
}
else
{
string strCd,strZt,strSj,strBj,strKg;
int cdCount=0,ztCount=0,sjCount=0,bjCount=0,kgCount=0;
strCd="select id from kaoqin where id='"+strId+"' and cd='迟到' and year='"+strYear+"' and mon='"+strMon+"'";
strZt="select id from kaoqin where id='"+strId+"' and zt='早退' and year='"+strYear+"' and mon='"+strMon+"'";
strSj="select id from kaoqin where id='"+strId+"' and sj='事假' and year='"+strYear+"' and mon='"+strMon+"'";
strBj="select id from kaoqin where id='"+strId+"' and bj='病假' and year='"+strYear+"' and mon='"+strMon+"'";
strKg="select id from kaoqin where id='"+strId+"' and kg='旷工' and year='"+strYear+"' and mon='"+strMon+"'";
con.Open();
5.2.7添加员工信息页面
点击“添加员工”即出现如下所示页面,添加员工信息后再点击“员工基本信息”即可查阅员工的详细信息如图:5-9、5-10所示:
图5-9职工信息添加页面
图5-10职工信息查询页面
* 添加员工前台显示页面adminTwo.aspx代码如下:
<asp:label id="labId" style="Z-INDEX: 101; LEFT: 280px; POSITION: absolute; TOP: 48px" runat="server"Width="80px">员工编号:</asp:label>
<asp:Button id="Button1" style="Z-INDEX: 137; LEFT: 464px; POSITION: absolute; TOP: 368px" runat="server"Text="清空" BorderStyle="Groove">
</asp:Button>
<asp:textbox id="pwd" style="Z-INDEX: 136; LEFT: 376px; POSITION: absolute; TOP: 80px" tabIndex="2"runat="server">
</asp:textbox>
<asp:label id="txtPwd" style="Z-INDEX: 135; LEFT: 280px; POSITION: absolute; TOP: 80px" runat="server">员工密码:
</asp:label>
<asp:label id="labTitle" style="Z-INDEX: 134; LEFT: 328px; POSITION: absolute; TOP: 8px" runat="server" Width="288px" Font-Size="X-Large" Height="40px" Font-Bold="True">
添加员工信息
</asp:label>
<asp:label id="info" style="Z-INDEX: 133; LEFT: 672px; POSITION: absolute; TOP: 48px" runat="server" Width="252px" Font-Bold="True" ForeColor="Red">
</asp:label>
<asp:regularexpressionvalidator id="RegularExpressionValidator2" style="Z-INDEX: 132; LEFT: 688px; POSITION: absolute; TOP: 280px" runat="server" Width="162px" ValidationExpression="\d+" ControlToValidate="txtPhone" ErrorMessage="不符合电话号码格式!">
</asp:regularexpressionvalidator>
<asp:rangevalidator id="RangeValidator1" style="Z-INDEX: 131; LEFT: 536px; POSITION: absolute; TOP: 176px"runat="server" ControlToValidate="txtAge" ErrorMessage="年龄必须在
18-55周岁!" MinimumValue="18" MaximumValue="55">
</asp:rangevalidator>
<asp:dropdownlist id="ddSex" style="Z-INDEX: 130; LEFT: 376px; POSITION: absolute; TOP: 144px" tabIndex="4"runat="server" Width="80px">
<asp:ListItem Value="男" Selected="True">男</asp:ListItem>
<asp:ListItem Value="女">女</asp:ListItem>
</asp:dropdownlist>
<asp:button id="btnSubmit" style="Z-INDEX: 129; LEFT: 368px; POSITION: absolute; TOP: 512px" tabIndex="11" runat="server" Font-Bold="True" BorderStyle="Ridge" Text="提交>
</asp:button>
<asp:button id="btnCancle" style="Z-INDEX: 128; LEFT: 456px; POSITION: absolute; TOP: 512px" tabIndex="12" runat="server" Font-Bold="True" BorderStyle="Ridge" Text="重置>
</asp:button>
<asp:button id="btnKz" style="Z-INDEX: 127; LEFT: 504px; POSITION: absolute; TOP: 304px" runat="server"
Font-Bold="True" Text="..." BorderStyle="Groove">
</asp:button>
<asp:button id="btnJz" style="Z-INDEX: 126; LEFT: 504px; POSITION: absolute; TOP: 336px" runat="server" Font-Bold="True" Text="..." BorderStyle="Groove">
</asp:button>
<asp:button id="btnLz" style="Z-INDEX: 125; LEFT: 504px; POSITION: absolute; TOP: 368px" runat="server" Font-Bold="True" Text="..." BorderStyle="Groove">
</asp:button>
<asp:calendar id="dateLz" style="Z-INDEX: 124; LEFT: 528px; POSITION: absolute; TOP: 336px" runat="server" Width="160px" Height="174px" Visible="False">
</asp:calendar>
<asp:calendar id="dateKz" style="Z-INDEX: 123; LEFT: 528px; POSITION: absolute; TOP: 272px" runat="server" Width="160px" Height="188px" Visible="False">
</asp:calendar>
<asp:calendar id="dateJz" style="Z-INDEX: 122; LEFT: 528px; POSITION: absolute; TOP: 304px" runat="server" Width="160px" Height="158px" Visible="False">
</asp:calendar>
<asp:dropdownlist id="ddBm" style="Z-INDEX: 121; LEFT: 376px; POSITION: absolute; TOP: 208px" tabIndex="6" runat="server" Width="152px">
<asp:ListItem>
</asp:ListItem>
</asp:dropdownlist>
<asp:textbox id="txtMemo" style="Z-INDEX: 120; LEFT: 376px; POSITION: absolute; TOP: 392px" tabIndex="10" runat="server" Width="153px" Height="110px" MaxLength="200" TextMode="MultiLine">
</asp:textbox>
<asp:textbox id="txtLz" style="Z-INDEX: 119; LEFT: 376px; POSITION: absolute; TOP: 368px" runat="server" Width="88px" ReadOnly="True">
</asp:textbox>
<asp:textbox id="txtJz" style="Z-INDEX: 118; LEFT: 376px; POSITION: absolute; TOP: 336px" runat="server" Width="128px" ReadOnly="True">
</asp:textbox>
<asp:textbox id="txtKz" style="Z-INDEX: 117; LEFT: 376px; POSITION: absolute; TOP: 304px" runat="server"Width="128px" ReadOnly="True">
</asp:textbox>
<asp:textbox id="txtId" style="Z-INDEX: 116; LEFT: 376px; POSITION: absolute; TOP: 48px" runat="server"tabIndex="1">
</asp:textbox>
<asp:textbox id="txtName" style="Z-INDEX: 115; LEFT: 376px; POSITION: absolute; TOP: 112px" tabIndex="3"runat="server" MaxLength="8">
</asp:textbox>
<asp:textbox id="txtAge" style="Z-INDEX: 114; LEFT: 376px; POSITION: absolute; TOP: 176px" tabIndex="5"runat="server" MaxLength="3">
</asp:textbox>
<asp:textbox id="txtZw" style="Z-INDEX: 113; LEFT: 376px; POSITION: absolute; TOP: 240px" tabIndex="7" runat="server">
</asp:textbox>
<asp:textbox id="txtPhone" style="Z-INDEX: 112; LEFT: 376px; POSITION: absolute; TOP: 272px"tabIndex="8" runat="server">
</asp:textbox>
<asp:label id="labMemo" style="Z-INDEX: 111; LEFT: 312px; POSITION: absolute; TOP: 400px" runat="server">备注:</asp:label>
<asp:label id="labLz" style="Z-INDEX: 110; LEFT: 280px; POSITION: absolute; TOP: 368px" runat="server">离职日期:</asp:label>
<asp:label id="labJz" style="Z-INDEX: 109; LEFT: 280px; POSITION: absolute; TOP: 336px" runat="server">就职日期:</asp:label>
<asp:label id="labKz" style="Z-INDEX: 108; LEFT: 280px; POSITION: absolute; TOP: 304px" runat="server">开资日期:</asp:label>
<asp:label id="labPhone" style="Z-INDEX: 107; LEFT: 280px; POSITION: absolute; TOP: 272px" runat="server">联系电话:</asp:label>
<asp:label id="labZw" style="Z-INDEX: 106; LEFT: 280px; POSITION: absolute; TOP: 240px" runat="server">就任职位:</asp:label>
<asp:label id="labBm" style="Z-INDEX: 105; LEFT: 280px; POSITION: absolute; TOP: 208px" runat="server">所属部门:</asp:label>
<asp:label id="labAge" style="Z-INDEX: 104; LEFT: 280px; POSITION: absolute; TOP: 176px" runat="server">员工年龄:
</asp:label>
<asp:label id="labSex" style="Z-INDEX: 103; LEFT: 280px; POSITION: absolute; TOP: 144px" runat="server" Width="88px">员工性别:
</asp:label>
<asp:label id="labName" style="Z-INDEX: 102; LEFT: 280px; POSITION: absolute; TOP: 112px" runat="server"Width="80px">员工姓名:
</asp:label>
* 添加员工后台控制页面adminTwo.aspx.cs代码如下:
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.btnSubmit.Click += new System.EventHandler(this.btnSubmit_Click);
this.btnCancle.Click += new System.EventHandler(this.btnCancle_Click);
this.btnKz.Click += new System.EventHandler(this.btnKz_Click);
this.btnJz.Click += new System.EventHandler(this.btnJz_Click);
this.btnLz.Click += new System.EventHandler(this.btnLz_Click);
this.dateLz.SelectionChanged+=new System.EventHandler(this.dateLz_SelectionChanged);
this.dateKz.SelectionChanged+=new System.EventHandler(this.dateKz_SelectionChanged);
this.dateJz.SelectionChanged+=new System.EventHandler(this.dateJz_SelectionChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
* 其前台页面adminThree.aspx主要代码如下:
<asp:DataGrid id="data" AutoGenerateColumns="False" style="Z-INDEX: 101; LEFT: 168px; POSITION: absolute; TOP: 72px" runat="server" Width="792px" AllowPaging="True" BorderStyle="None" BorderColor="#E7E7FF" BorderWidth="1px" BackColor="White"CellPadding="3" GridLines="Horizontal" DataKeyField="id">
<SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C">
</SelectedItemStyle>
<AlternatingItemStyle BackColor="#F7F7F7">
</AlternatingItemStyle>
<ItemStyle ForeColor="#4A3C8C" BackColor="#E7E7FF">
</ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#4A3C8C">
</HeaderStyle>
<FooterStyle ForeColor="#4A3C8C" BackColor="#B5C7DE">
</FooterStyle>
<Columns>
<asp:BoundColumn DataField="id" HeaderText="编号">
</asp:BoundColumn>
<asp:BoundColumn DataField="name" HeaderText="姓名">
</asp:BoundColumn>
<asp:BoundColumn DataField="sex" HeaderText="性别">
</asp:BoundColumn>
<asp:BoundColumn DataField="age" HeaderText="年龄">
</asp:BoundColumn>
<asp:BoundColumn DataField="bm" HeaderText="所属部门">
</asp:BoundColumn>
<asp:BoundColumn DataField="zw" HeaderText="职位">
</asp:BoundColumn>
<asp:BoundColumn DataField="phone" HeaderText="联系电话">
</asp:BoundColumn>
<asp:BoundColumn DataField="password" HeaderText="密码">
</asp:BoundColumn>
<asp:ButtonColumn Text="删除" HeaderText="操作" CommandName="Delete">
</asp:Buttonolumn>
<asp:ButtonColumn Text="查看" HeaderText="详细信息" CommandName="Edit">
</asp:ButtonColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF" Mode="NumericPages">
</PagerStyle>
</asp:DataGrid>
* 其后台控制页面adminThree.aspx.cs代码如下:
public class adminThird : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid data;
protected System.Data.DataSet ds;
protected System.Data.OleDb.OleDbConnection con;
protected System.Data.OleDb.OleDbCommand com;
protected System.Data.OleDb.OleDbDataAdapter da;
* 加载页面时执行此方法:
private void Page_Load(object sender, System.EventArgs e)
{
if(System.Convert.ToString(Session["admin"]).Equals(""))
{
Response.Redirect("admin.aspx");
}
else
{
string strcon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("message.mdb")+";User Id=admin;Password=;";
con=new OleDbConnection(strcon);
if(!IsPostBack)
{
bind();
}
}
}
6.总结:
经过数个月的努力,考勤管理系统已经基本设计完成,下面对系统做一个总结。
考勤管理系统预期解决考勤业务中的问题,通过减少HR部门的工作量从而提高工作质量,提高工作效率,减少不必要的人力劳动。以刷卡考勤取代签字考勤,从而确保考勤数据的准确性,共享性,透明性。实现高效、快捷、准确的管理目标;并完成签到刷卡、签出刷卡、请假考核、作业考核、生成考勤报表、考勤查询等功能。但是由于缺少硬件的支持所以以鼠标点击替代了刷卡。
另外有一个未能解决的问题是在管理员录入时间信息时日期控件的编写存在问题,第一次输入某一日期后第二次未能重置必须输入与第一次不同的日期,给管理员带来很大的麻烦。
在设计时,由于时间和能力有限还有部分的功能没有实现,希望系统能在以后得以实现。系统中有不足之处,还请各位老师指正。
7.致谢
在校的学习生活即将结束,在此,我要感谢所有曾经教导过我的老师和关心过我的同学,他们在我成长过程中给予了我很大的帮助,。
在完成毕业设计的过程中我学到了很多新知识,个人能力有了很大的提高。开始时在设计中经常遇到种种问题,此时不但给予我很多的鼓励,而且在设计上提出了很多的建议和善意的批评。因此,本次顺利完成毕业设计首先要感谢指导老师的细心指导,她帮助解决了设计中的疑难和困惑,为我完成设计提供了极大的帮助。在这个学期中,我随时都能与他取得联系询问相关问题,并能得到耐心的解答。不过由于我的知识水平有限,系统中有不足之处,还请各位老师包涵、指正!
参考文献:
【1】《ASP.Net完全入门》 (科学出版社)
【2】《ASP.NET程序设计基础》 (清华大学山版社,林煌章编著)
【3】《ASP.NET与VB.NET从入门到精通》 (电子工业出版社;(美)Jone,A.R.著)
【4】 《ASP_NET 2_0数据库开发实例精粹》 (电子工业出版社)
【5】 《ASP.NET 2.0网站开发实例教程》 (人民邮电出版社,龚赤兵编著)
【6】 《Microsoft SQL Server 2000 数据库编程》(北京希望电子出版社)