• 1.54 MB
  • 2022-04-22 13:45:46 发布

小型企业考勤管理系统 毕业论文.doc

  • 49页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'小型企业考勤管理系统毕业论文目录摘要IAbstractII第1章绪论11.1选题背景11.2选题意义11.3研究内容11.4国内外发展动态21.5设计的指导思想3第2章系统分析42.1可行性研究42.1.1技术可行性42.1.2经济可行性研究52.1.3运行、操作可行性52.1.4法律可行性52.1.5方案可行性52.2需求分析62.2.1需求获取62.2.2功能需求62.3数据库分析102.3.1数据库需求分析112.3.2数据库概念结构设计112.4开发方案比较12第3章系统设计与实现143.1总体功能框图143.2类图163.2.1部门管理类图163.2.2次数类图173.2.3打卡类图173.2.4警告类图183.3数据库的设计183.4人机界面设计213.4.1登录页面21II 3.4.2用户注册页面223.4.3系统主页面223.4.4员工管理页面243.4.5部门管理页面253.4.6罚金审核页面253.4.7打卡页面263.4.8考勤记录页面273.4.9员工考勤记录页面283.4.10警告页面30第四章测试324.1系统测试的定位324.2白盒测试334.3黑盒测试354.4系统测试结论35结论36致谢37参考文献38附录39II 第1章绪论1.1选题背景企业考勤管理系统是一个企事业单位不可缺少的一部分,它的内容对于企业的决策者和管理者来说都是至关重要的,因此,企业考勤管理系统应该能够为用户提供充足人事管理的信息和快捷的管理查询手段,但一直以来人们使用传统的人工方式管理员工的上下班等信息,这种管理方式存在着许多缺点,诸如效率低,保密性差等,而且时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。作为计算机应用的一部分,使用计算机对企业考勤信息进行管理,具有着人工管理无法比拟的优点,它检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,可减少更多的人力物力,这些都能够极大地提高企业的考勤管理效率,也是企业考勤管理科学化、正规化,与世界接轨的重要条件。因此,开发一个企业考勤管理系统是很有必要的,具有其特有的技术意义和管理意义。同时,企业管理系统对我来说是一个可以了解到的问题,我对此也有非常浓厚的兴趣,在技术上等各个方面我也能够得以实现,所以我选择了《小型企业考勤管理系统的设计与实现》。1.2选题意义随着计算机技术的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。同时,以计算机为基础的各种软件也渐渐走入规模不同的各种企业单位中。企业在对竞争日趋强烈的现代社会在不断提高自身产品质量的同时,对员工的要求也逐渐提高,考勤管理也就成为了一个大众化的课题。企业考勤管理系统是为了解决员工考勤管理的而设计的,目的是建立一个能够初步实现企业考勤管理系统的智能化管理,提高考勤管理效率,工作人员能够在各个岗位上的工作状态得到及时的反馈,而系统所需的工作人员的数量少,效率高。同时《小型企业考勤管理系统的设计与实现》选择也使不成熟的我有一个很好的提高。1.3研究内容47 本系统从节约企业的人力、财力、物力的角度出发,采用B/S模式的架构方式,开发了基于Struts和Hibernate框架的企业考勤管理系统,充分体现了B/S模式架构的优势,使企业管理员工更加高效化、智能化。本系统操作界面简单,无需安装任何客户端,通过浏览器直接可访问系统,使员工考勤和管理更加简单化、高效化,员工可以随时查询自己的考勤记录,使员工的更好的了解自己的工作出勤情况,提高了员工的工作积极性。同时在外观和数据管理上应使用就有统一有好的操作界面,完全可靠的数据管理,以保证系统的易用性和可靠性,还有在设计上使其具有规范、完善的基础信息设置,以方便对基础信息进行全面的管理。本文通过Struts+Hibernate+Spring、extjs技术完成以上功能,已达到方便用户使用的目的,本系统适合中小型企业。1.4国内外发展动态随着计算机技术的诞生和发展,企业考勤管理系统的发展过程大体分为三个阶段:为了把企业考勤管理人员从大量的体力劳动中解脱出来,提高工作效率,20世纪60年代末期,第一代的企业考勤管理系统应运而生。利用计算机超强的计算能力和速度,大量的重复计算效率得到极大提高,并且计算机的计算准确性避免手工作业方式难以避免的错误和误差,使薪资的大规模集中处理成为可能。但是由于计算机的发展处于一个初级阶段和应用水平,计算机技术未得到普及应用,系统技术条件受到限制。并且系统功能不完善,主要提供薪资的自动计算功能,数据分析和决策功能有待增加。随着计算机技术普及和飞速发展,20世纪70年代末企业考勤管理系统发展到第二代。特别是数据库技术发展,为企业考勤管理系统的开发和应用提供了强有力的技术保障。与第一代系统相比,第二代企业考勤管理系统在技术上解决了主要缺陷,功能上也得到较大的改善,但是系统实用方面仍然存在不足,主要是一种通用性软件,专业性方面比较欠缺,系统还需进一步完善和充实。20世纪90年代末,随着市场竞争的加剧,企业考勤管理工作得到企业领导层的高度重视,人事管理已成为关系企业兴衰的重要因素,人才已经成为企业最重要的软资产,社会或企业急待通过应用企业考勤管理系统提高人事考勤管理水平,第三代人事考勤管理系统应运而生。同时计算机技术进一步发展和应用普及,数据库技术、网络技术,使得第三代企业考勤管理系统技术上更加成熟和先进。功能方面覆盖比较全面,能够满足需求,功能如薪资福利、招聘、培训、专勤管理、统计报表及绩效管理等。使用方面更加实用和方便,企业考勤管理人员终于可以摆脱大量重复而繁重的日常工作,集中精力从事企业考勤管理的专业工作。针对企业考勤管理业务,各行各业均对人事管理研究和系统开发,如南航E-H47 人力资源系统流程及提醒管理剖析,铸造企业人事考勤管理的研究,矿山人事考勤管理的新探索,油藏经营人事考勤管理,学习型组织与人事考勤管理关系初探,大型科技企业人事管理开发与管理工作的探讨。同时国内外不少软件公司推出各类型的人事考勤管理系统商品化软件,如国外的AnyManPower和I—HRMS;国内较著名的软件有金蝶人事考勤管理系统、甲骨文人事考勤管理系统、和佳人事考勤管理系统、国臣B/S人事考勤管理系统和鼎丰人事考勤管理系统2005XP等。这些系统在技术上比较先进。1.5设计的指导思想开发这个系统的目的就是为小型企业人事管理部门提高工作效率,实现企业人事信息管理的系统化,规范化和自动化。据此,系统最终实现的主要功能如下:1.严格设置考勤管理每个环节的操作者的权限,权限分配控制操作简洁。2.员工可以随时的登录系统查看自己的出勤情况。3.请假申请和审批可按设定好的权限实现网上分级审批,并可按各级审批天数不同自动流转。4.非正常出勤(迟到、早退、旷工)分析准确,分类查询方便。5.提供员工自助功能,方便员工查询个人考勤记录,以及提交请假和加班单,及时了解领导审批意见。因此本系统采用JAVA编程语言,使用Mysql数据库保存数据信息,可以随时备份数据信息。47 第2章系统分析2.1可行性研究可行性研究是编制设计任务书的重要依据,也是进行初步设计和工程建设管理工作中的重要环节。可行性研究不仅对拟议中的项目进行系统分析和全面论证,判断项目是否可行,值得投资,要进行反复比较,寻求最佳建设方案,避免项目方案的多变造成的人力、物力、财力的巨大浪费和时间的延误。对技术、经济、财务、商业以至环境保护、法律等多个方面都要进行分析和论证。2.1.1技术可行性在开发本平台中所用到的开发工具就是是知名的java项目开发工具MyEclipse。MyEclipse企业级工作平台是对EclipseIDE的一种扩展,利用MyEclipse,我们可以在数据库和J2EE的开发、发布,以及在应用程序服务器的整合当中极大地提高系统的工作效率。MyEclipse是一个功能非常丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,SQL,Hibernate。简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。数据库使用的是MySQL开源数据库。MySQL的特性:使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。支持AIX、FreeBSD、HP-UX、MacOS、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统。为多种编程语言提供API。这些编程语言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。支持多线程充分利用CPU资源。优化的SQL查询算法,有效地提高查询速度。既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。提供TCP/IP、ODBC和JDBC等多种数据库连接途径。提供用于管理、检查、优化数据库操作的管理工具。可以处理拥有上千万条记录的大型数据库。由于MySQL是开放源码软件,因此可以大大降低总体成本。Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache47 服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。S.S.H框架是J2EE应用中struts2+spring+hibernate三大免费开源框架的结合使用,它可以看成工具,也是中间件。他是用来提高我们的开发效率,提高我们软件产品的可维护性、可扩展性乃至敏捷性的。他们里面有很多优秀的设计理念及模式应用。比如,struts属于MVC框架,关键是要了解MVC的概念及大致原理;而hibernate属于ORM系统,属于持久层的解决方案,同样需要对ORM的概念及原理有一个总体的了解。而spring属于应用程序框架,其核心是IOC容器以及AOP,Spring中还集成了很多适用东西,比如对JDBC的封装、自己的MVC、对动态语言的简洁访问等。2.1.2经济可行性研究本系统通过网络化的人事考勤管理系统,提高了企业的人事考勤工作效率。考勤工作效率的提高,既节省了企业的时间成本人员成本又提高了企业的管理能力,使企业适应了时代的网络化管理要求。由于本系统是在在学习与实践基础上开发完成的,开发使用的软件大部分为开源软件,不受过多限制。2.1.3运行、操作可行性本系统界面统一规范,操作简单,提示信息功能完整,用户只要经过简单的培训即可上手。关于操作系统等要求都比较低,不存在问题。2.1.4法律可行性本系统的开发属于个人测试作品,不涉及商业利益,因此不会触犯其他软件开发公司权益和国家的法律法规。2.1.5方案可行性本系统基于B/S三层结构的MVC模式开发,使用S.S.H框架来增加系统的开发速度。S.S.H框架是J2EE应用中struts2+spring+hibernate三大免费开源框架,在网上都可以直接下载使用,利用了他们的优点互补,巧妙的结合起来构建了一个企业考勤管理系统。同时,通过使用Myeclipse等开发工具能够有效的加快开发速度和效率,大大减少开发人员的手工编写代码的工作量。所以此方案是可行的。47 2.2需求分析关于本考勤系统需要解决的方向列举公司的一些管理制度1.考勤范围:公司在册员工;特殊原因员工不考勤须总经理批准2.考勤方法:考勤工作由人事部经理负责,3.考勤时间:早:9:00前晚:18:00后4.考勤规定:员工必须自觉遵守劳动纪律,不迟到、不早退。迟到早退者罚款处理,由部门经理审核。5.请假、外出:员工请假外出需得到部门经理审批。2.2.1需求获取1.运行环境硬件平台:CUP:P4 1.8GHz内存:512MB以上软件平台:操作系统:WindowsXP/2000/Windows7数据库:Mysql开发工具包:MyEclipse浏览器:IE5.0或以上版本,推荐使用IE6.02.界面需求界面美观,操作简单,提示信息功能完整。3.输入输出模式需求(1)输入模式以文字、下拉菜单、单选框;(2)输出模式为表格。4.用户角色需求系统使用者多是非计算机行业人员,因此系统应面向大众,界面简单,使用便捷。2.2.2功能需求本系统主要分管理员、部门负责人和普通用户三部分。管理员包括部门管理、员工管理和用户罚金审核的功能。部门负责人包括打卡、考勤管理、警告管理、罚金管理和员工考勤管理。普通用户包括打卡、考勤查询、警告管理和罚金管理。如图2-1所示。47 图2-1系统整体用例图本系统主要模块及功能如下:1.管理员模块:部门管理、员工管理和用户罚金审核的功能。如图2-2所示。图2-2管理员模块用例图2.部门负责人模块:包括打卡、考勤管理、部门员工考勤管理、警告管理、罚金管理。如图2-3所示。3.普通用户模块:包括打卡、考勤查询、警告管理和罚金管理。如图2-4所示。4.员工考勤管理模块:部门负责人可以在此模块中查看到本部门所有员工的考勤情况,并对员工提交的申诉做审核,以及审核罚金,发起警告等功能。如图2-5所示。47 图2-3部门负责人模块用例图2-4普通用户模块用例图图2-5部门员工考勤管理模块用例图47 5.考勤管理模块:部门负责人和普通员工模块可在此模块中查看自己的考勤记录,可以进行备注申诉以及提交审核。如图2-6所示。图2-6考勤管理模块用例图6.打卡模块:部门负责人以及普通员工都可在此模块中打卡,一天两次,第一次早9:00之前视为正常上班,第二次晚18:00之后视为正常下班,不满足条件的视为迟到或早退。如图2-7所示图2-7打卡模块用例图7.员工管理模块:管理员可在此模块中查看修改删除员工所在部门信息以及指定部门负责人。如图2-8所示。图2-8员工管理模块用例图47 8.罚金管理模块:部门负责人和普通员工都可在此模块中查看到自己的处罚金和审核状态,管理员可通过此模块进行罚金审核以及修改罚金。如图2-9所示。图2-9罚金管理模块9.警告模块:部门负责人可对部门内普通员工发起警告,而且都可在此模块中查看到对自己的警告,此模块等同于公告模块。如图2-10所示。图2-10警告模块用例图2.3数据库分析数据库是存储在计算机存储设备上,结构化的相关数据集合。既包含数据本身,又包含相关失误之间的联系。面向多种应用,可被多个用户多个应用程序共享。数据库管理系统是为数据库的建立、使用和维护而配置的软件系统,位于用户与操作系统之间的数据管理软件。数据库系统是只运行了数据库原理系统的计算机系统,能够对大量的动态数据进行有组织的存储与管理,提供各种应用支持。数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。47 2.3.1数据库需求分析数据库是对数据的有效组织和管理,是实现管理信息系统的中心环节。有效的数据组织取决于数据库的设计,而有效的数据管理则依赖于数据库管理系统(DBMS)的选择。在进行数据库设计时要注意以下原则:数据库系统在逻辑上应有层次结构,数据自下而上逐层归纳、汇总。数据库结构必须规范化,必须保证数据的正确性和完整性。必须保证对数据的安全性,对故障应有预防能力、保护能力和恢复能力以及对数据库的保密能力。2.3.2数据库概念结构设计数据库概念结构设计阶段的目标是通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。概念结构的设计方法有两种: (1)集中式模式设计法:这种方法是根据需求由一个统一机构或人员设计一个综合的全局模式。这种方法简单方便,适用于小型或不复杂的系统设计,由于该方法很难描述复杂的语义关联,而不适于大型的或复杂的系统设计。(2)视图集成设计法:这种方法是将一个系统分解成若干个子系统,首先对每一个子系统进行模式设计,建立各个局部视图,然后将这些局部视图进行集成,最终形成整个系统的全局模式。概念模型设计的典型方法是用E-R图方法,即用实体-联系模型表示。E-R方法是用E-R图来描述显示世界,E-R图包含三个基本成分:实体、联系、属性。它直观易懂,能够比较准确地反映现实世界的信息联系,从概念上表示一个数据库的信息组织情况。概念模型用于信息世界的建模,是现实世界到机器世界的一个中间层次,是数据库设计的有力工具,是数据库设计人员和用户之间进行交流的语言。概念模型的基本要求:较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识,简单、清晰、易于用户理解。概念模型的特点是:(1)真实、充分的反映现实世界,包括事物和事物之间的联系;(2)易于理解,可以用于和不熟悉计算机的用户交换意见;(3)易于修改和扩充;(4)易于向数据模型转换。本系统E-R图如图2-12所示。47 部门管理员员工管理审核罚金管理管理打卡查询查询警告打卡记录历史考勤本月考勤查询打卡查询查询普通用户部门负责人管理图2-12企业考勤管理系统E-R模型图2.4开发方案比较通常体系结构包括两种模式:一种是传统的基于C/S(Client/Sever)的模式,即客户机与服务器模式;另外一种是新型的基于B/S(Browser/Server)的模式,这种模式下客户端是标准的浏览器,服务器为标准的WEB服务器。C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。47 B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。47 第3章系统设计与实现3.1总体功能框图本系统主要分管理员、部门负责人和普通用户三部分。总功能图如图3-1所示。系统管理员部门负责人普通用户部门管理员工管理用户罚金审核打卡本月考勤管理历史考勤管理警告管理罚金管理员工管理打卡考勤查询警告管理罚金管理员工考勤管理员工考勤审核员工警告管理员工考勤查询图3-1系统功能框图管理员权限模块:管理员权限模块主要实现部门管理、员工管理和用户罚金审核等功能。管理员的功能图如图2所示。管理员部门管理员工管理罚金审核图3-2管理员功能图47 部门负责人权限模块:部门负责人权限主要实现打卡、本月考勤管理、历史考勤管理、警告管理、罚金管理和员工管理的功能。部门负责人的功能图如图3-3所示。部门负责人打卡本月考勤管理历史考勤管理警告管理罚金管理员工管理员工考勤管理员工考勤审核员工警告管理员工考勤查询图3-3部门负责人的功能图普通用户权限模块:普通用户权限主要实现打卡、考勤查询、警告管理和罚金管理的功能。普通用户的功能图如图3-4所示。普通用户打卡考勤查询警告管理罚金管理图3-4普通用户的功能图3.2类图类图由许多(静态)说明性的模型元素(组成。类图可以组织在(并且属于)包中,仅显示特定包中的相关内容。它是最常用UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计,是最基本的元素是类或者接口。没有类是单独存在的,他们通常和别的类协作,创造比单独工作更大的语义。47 因此,除了捕获系统的词汇以外,还要将注意力集中到这些类是如何在一起工作的。使用类图就可以表达这种协作关系。然后确定此系统的建模机制。机制代表了部分你建模的系统的一些功能和行为,这些功能和行为是一组类、接口和其他事物相互作用的结果。3.2.1部门管理类图图3-5部门管理类图User类负责存储用户的基本数据,包括用户的用户名、密码等;ManagrAction操作管理类,本系统所有操作都需要通过此类完成;Bumen类负责存储部门信息以及部门的增删修改;3.2.2次数类图图3-6Cishu类图47 Cishu类有记录调用操作次数等作用;3.2.3打卡类图图3-7打卡类图Daka类用户记录员工的用户名信息、考勤时间、系统提示;Time类存储的正常早中晚上下班的时间信息;3.2.4警告类图图3-8警告类图47 Jinggao类记录员工的警告信息;3.3数据库的设计浏览器Web服务器数据库系统按通用的B/S(浏览器、服务器)模式进行设计。图3-9B/S设计图数据库是一个单位或是一个应用领域的通用数据处理系统,它存储的是属于企业和事业部门、团体和个人的有关数据的集合。数据库中的数据是从全局观点出发建立的,按一定的数据模型进行组织、描述和存储。其结构基于数据间的自然联系,从而可提供一切必要的存取路径,且数据不再针对某一应用,而是面向全组织,具有整体的结构化特征。数据库的特点:1.数据结构化数据库系统实现了整体数据的结构化,这是数据库的最主要的特征之一。这里所说的“整体”结构化,是指在数据库中的数据不再仅针对某个应用,而是面向全组织;不仅数据内部是结构化,而且整体式结构化,数据之间有联系。2.数据的共享性高,冗余度低,易扩充因为数据是面向整体的,所以数据可以被多个用户、多个应用程序共享使用,可以大大减少数据冗余,节约存储空间,避免数据之间的不相容性与不一致性。3.数据独立性高数据独立性包括数据的物理独立性和逻辑独立性。物理独立性是指数据在磁盘上的数据库中如何存储是由DBMS管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样一来当数据的物理存储结构改变时,用户的程序不用改变。逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程序也可以不改变。数据与程序的独立,把数据的定义从程序中分离出去,加上存取数据的由DBMS负责提供,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。4.数据由DBMS统一管理和控制数据库的共享是并发的(concurrency)共享,即多个用户可以同时存取数据库中的数据,甚至可以同时存取数据库中的同一个数据。 系统的定义数据库主要包含5张表:部门表,次数表,打卡表,警告表,47 用户表。表3-1部门表名称类型空备注idbigint(20)no主键bumenlockint(11)no部门是否删除的标志namevarchar(255)yes部门名表3-2次数表名称类型空备注idbigint(20)no主键chidaoint(11)no迟到fajindoubleyes罚金shenhevarchar(255)yes审核weidakaint(11)no未打卡yuefenvarchar(255)yes月份zaotuiint(11)no早退zhengchangshangbanint(11)no正常上班zhengchangxiabanint(11)no正常下班useridbigint(20)yes关联的用户,外键表3-3打卡表名称类型空备注idbigint(20)no主键dakatimevarchar(255)yes打卡时间infotextyes打卡的信息qiandoubleyes罚金resulevarchar(255)yes打卡的结果shenhevarchar(255)yes审核内容statusvarchar(255)yes审核状态useridbigint(20)yes关联的用户,外键表3-4警告表名称类型空备注idbigint(20)no主键contenttextyes警告的内容createtimedatetimeyes添加的时间userfromidbigint(20)yes发起警告的用户usertoidbigint(20)yes收到警告的用户47 表3-5用户表名称类型空备注idbigint(20)no主键createtimedatetimeyes注册时间passwordvarchar(255)yes密码roleint(11)no用户权限truenamevarchar(255)yes真实姓名uuserlockint(11)no用户是否删除的标志usernamevarchar(255)yes用户名bumenidbigint(20)yes关联的部门IDbumen2idbigint(20)yes是否是部门经理的ID3.4人机界面设计界面设计是人与机器之间传递和交换信息的媒介,FaceUI称包括硬件界面和软件界面,是计算机科学与心理学、设计艺术学、认知科学和人机工程学的交叉研究领域。近年来,随着信息技术与计算机技术的迅速发展,网络技术的突飞猛进,人机界面设计和开发已成为国际计算机界和设计界最为活跃的研究方向。界面设计的原则:1.简易性:界面的简洁是要让用户便于使用、便于了解、并能减少用户发生错误选择的可能性。2.用户语言:界面中要使用能反应用户本身的语言,而不是游戏设计者的语言。3.记忆负担最小化:人脑不是电脑,在设计界面时必须要考虑人类大脑处理信息的限度。人类的短期记忆极不稳定、有限,24小时内存在25%的遗忘率。所以对用户来说,浏览信息要比记忆更容易。4.一致性:是每一个优秀界面都具备的特点。界面的结构必须清晰且一致,风格必须与游戏内容相一致。5.清楚:在视觉效果上便于理解和使用。6.用户的熟悉程度:用户可通过已掌握的知识来使用界面,但不应超出一般常识。7.从用户的观点考虑:想用户所想,做用户所做。用户总是按照他们自己的方法理解和使用。通过比较两个不同世界(真实与虚拟)的事物,完成更好的设计。如:书籍对比竹简。8.排列:一个有序的界面能让用户轻松的使用。9.安全性:用户能自由的作出选择,且所有选择都是可逆的。在用户作出危险的选择时有信息介入系统的提示。47 10.灵活性:简单来说就是要让用户方便的使用,但不同于上述。即互动多重性,不局限于单一的工具(包括鼠标、键盘或手柄)。11.人性化:高效率和用户满意度是人性化的体现。应具备专家级和初级玩家系统,即用户可依据自己的习惯定制界面,并能保存设置。3.4.1登录页面用户必须有相应的用户名和用户密码才能进入系统。登录分为两种情况:成功和失败。当用户的用户名和密码错误时登录失败,当用户的用户名和密码正确时登录成功。图3-10登录界面3.4.2用户注册页面用户可通过此页面进行注册并选择自己所在的部门,非常简单易操作。图3-11注册界面47 3.4.3系统主页面在主页面中,当用户点击菜单的某一按钮,就会显示出其按钮下的全部功能按钮,点击功能按钮时将显示其功能界面,支持多个显示页面添加和切换,使用这个网页布局的好处可以使程序的布局更加的有条里,功能和显示划分的非常明确,使用户方便的查询各个信息,避免重复的点击菜单显示。本系统分管理员登录、部门负责人登录、以及员工登录,所以系统主页面也有三种。图3-12管理员主页面图3-13部门负责人主页面47 图3-14普通员工主页面3.4.4员工管理页面员工管理页面中,有删除用户、指定部门、指定部门经理三个功能,用户需选中所要操作的人再进行想要实现的功能。图3-15员工管理页面47 3.4.5部门管理页面部门管理页面中,可实现添加部门、删除部门、修改部门的功能图3-16部门管理页面3.4.6罚金审核页面罚金审核页面中,管理员可以对员工的罚款情况进行审核以及修改罚金。当审核通过时,将无权再修改罚金。图3-17罚金审核页面47 图3-18修改罚金页面3.4.7打卡页面打卡页面中,打卡按钮,每天可以打卡两次,第一次早9点前为正常上班,晚18点后为正常下班,不满足条件为迟到/早退,没有打卡为打卡不完整。图3-19打卡页面47 图3-20打卡确认页面3.4.8考勤记录页面部门负责人和普通用户可以在考勤记录页面总查看自己的本月考勤记录与历史考勤记录,同时此页面中可以添加备注信息并提交审核,等同于请假的功能。图3-21考勤记录页面47 图3-22申诉备注页面3.4.9员工考勤记录页面员工考勤记录页面分为本月员工考勤管理、本月员工考勤审核、本月员工考勤排行、历史员工考勤管理、历史员工考勤排行、警告管理6部分。本月员工考勤管理页面可以查看本部门员工的本月考勤记录;本月员工考勤审核页面可以审核部门员工提交的备注申请;本月考勤排行页面可以进行本月员工考勤排行,有多种排序方式,并且在此页面中可以对部门员工进行警告;历史月员工考勤管理页面可以查看部门员工的历史考勤记录;历史月员工考勤排行页面可以对部门员工的历史考勤进行排行同时也拥有多种排序方式;警告管理页面中,可查看到部门内的所有警告信息。图3-23本月员工考勤管理页面47 图3-24本月员工考勤审核页面图3-25本月员工考勤排行页面图3-26历史月员工考勤管理页面47 图3-27历史月员工考勤排行页面图3-28警告管理页面3.4.10警告页面警告页面中,员工可查看到部门负责人对自己的全部警告信息。47 图3-29警告页面47 第四章测试软件测试是发现软件中错误和缺陷的主要手段。在一般情况下,软件测试过程与整个软件开发过程基本上是平行进行的。当然,测试计划应该在需求分析阶段就已经开始制定了。随后的工作则会伴随着软件开发的过程逐步展开。软件测试是发现并指出软件系统缺陷的过程。缺陷在开发和维护的任何阶段都有可能发生,并由此产生一个或多个“漏洞”,包括错误、误解和冗余,有时甚至会误导开发者。测试包括寻找缺陷,但不包括跟踪漏洞及修复,即测试不包括调试和修复。软件测试是软件工程过程的一个重要阶段,是在软件投入运行前,对软件需求分析、设计和编码各阶段产品的最终检验,是为了保证软件开发产品的正确性、完全性和一致性,从而检测软件错误、修正软件错误的过程。软件开发的目的是开放出实现用户需求的高质量、高性能的软件产品,软件测试以检查软件产品内容和功能特性为核心,是软件质量保证的关键步骤,也是成功实现软件开发目标的重要保障。4.1系统测试的定位按照软件工程的思想,在本系统交付使用前,我对该软件系统的所有功能模块进行了详细的测试,测试的目的在于:寻找问题,纠正错误,提高系统技术能力,使系统早日投入运行。测试的参加人员除技术人员外还包括用户,最终由用户对每个模块提出问题或批示。本次测试分别采用软件工程中的白盒测试和黑盒测试。白盒测试是一种验证技术,即我们是否在正确的构造一个系统;黑盒测试是一种确认测试,即我们是否在构造一个正确的系统。通过本次系统测试,希望发现的主要错误可以分为以下几类。1.语法错误语法错误是经常碰到的错误,它是由不正确的脚本语法导致。例如:命令拼写错误或传递始函数的参数不正确都将产生错误。语法错误可能导致脚本不能运行。2.运行时错误运行时错误是脚本在执行过程中脚本指令试图执行不可能的动作而导致的。必须纠正导致运行时的错误,这样才能使脚本在运行时不被中断。3.逻辑错误逻辑错误通常可能是在潜在的和难以预测的。如果有因键入错误或程47 序逻辑流程错误引起的逻辑错误,脚本可能会成功运行,但产生的结果却是错误的。4.2白盒测试第一阶段测试采用白盒测试。白盒测试是一种测试用例设计方法,全面了解程序内部逻辑结构、对所有逻辑路径进行测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。白盒测试的目的是通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。测试用例:1.打卡流程图:开始打卡第一次打卡18:00后后9:00前输出:已打卡,正常上班输出:迟到输出:已打卡,正常下班输出:早退结束YesNoYesNoYes第二次打卡图4-1 打卡流程图2.根据流程图我们可以确定环形复杂性度量V(G):V(G)=E-N+2=12-10+2=4V(G)=4个(区域)V(G).=P+1=10+1=1147 10123456789图4-2 登录流程图3.确定基本路径集合:路径1:1——2——3——4——6——11路径2:1——2——3——4——5——11路径3:1——2——7——9——11路径4:1——2——7——8——114.路径1的测试用例:第二次打卡,时间为18:00之前期望结果:早退路径2的测试用例:第二次打卡,时间为18:00之后期望结果:已打卡,正常下班路径3的测试用例:第1次打卡,时间为9:00之后期望结果:迟到路径4的测试用例:第一次打卡,时间为9:00前期望结果:已打卡,正常上班通过以上几步测试,所得结果均与设计要求符合,也就是说测试结果准确无误。4.3黑盒测试第二阶段测试采用黑盒测试。黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。黑盒测试法注重于测试软件的功能需求,采用黑盒测试我们可以发现的错误包括47 功能不正确或遗漏;界面错误;输入和输出错误;数据库访问错误;性能错误;初始化和终止错误等。测试用例:1.用户登录测试(正确输入)表4-1用户登录测试(正确输入)表输入期望输出实际输出用户名:admin密码:111111登录成功,显示主页登录成功,显示主页2.用户登录测试(无该用户)表4-2用户登录测试(无该用户)表输入期望输出实际输出用户名:07密码:1员工号或密码错误员工号或密码错误3.用户登录测试(密码错误)表4-3用户登录测试(密码错误)表输入期望输出实际输出用户名:01密码:111111员工号或密码错误员工号或密码错误4.4系统测试结论在系统测试中,难免发现问题,但是即时的进行了修正。总体上,本次系统的设计与开发基本实现了最初的信息管理需求,达到了需求分析中的功能要求,实现了小型企业考勤管理系统,个人来讲比较满意。47 第五章结论回顾大学阶段的学习、研究和实践,论文的主要研究工作和结论如下:1.分析和研究了人事考勤管理系统的发展,根据原有考勤管理系统的缺失,以及当前人事考勤管理现状,论证了对人事考勤数据进行分析和统计的必要性,提出研发人事考勤数据分析和应用系统的迫切性。2.针对公司的人事考勤管理业务现状不足和功能需求,依据人事管理理论、思想和方法,按照软件工程思想,完成了人事考勤管理系统的调研和分析,需求分析、功能设计和数据库设计。3.根据当前已有的人事考勤管理的基础数据,对开发的人事考勤数据分析与应用系统进行了实例验证,应用效果较好。通过大学阶段的学习研究,论文就此完成,但依然任重道远,尚有许多研究工作有待进一步深入学习和实践,这里择其要者简要讨论如下:1.随着科技进步,人力资源管理理论也不断发展和更新,先进的管理模式和技术不断支撑着人力资源管理理论发展和科技探新,因此,要加强人力资源理论学习,指导实践研究。2.由于作者研究水平的不足和技术条件限制,系统某些功能还不够完善,有待于进一步的研究与探索。从一开始设计系统的整体结构到局部的功能实现,代码的编写,运行的纠错直至系统的测试完成,我都不断和我的指导老师进行交流和沟通,认真听取指导老师的意见和建议,这给我很大的帮助。在系统开发过程中,我深切体会到软件开发工具对程序开发人员的影响,各种开发工具之间的兼容性也是十分重要的。开发此软件采用了S.S.H,它是用来提高我们的开发效率,提高我们软件产品的可维护性、可扩展性乃至敏捷性的,这为我提供了很多的方便。现在我所要做的便是尽我最大的努力让开发成果更接近完美。在这段软件开发的时间里,我更加认识了自己,对自己的优缺点有了更多的认识,只要有面对困难的勇气,再加上更多的努力,正确解决问题的方法,就能够度过一个个难关,达到一个更高的高度,就会有勇气去创造自己的未来。47 致谢本论文的研究和撰写工作都是在我的导师姜卓的精心指导和悉心关怀下完成的。在半年多的学习生活中,姜老师和计算机学院的老师们不仅教给我知识和学问,更多的是言传身教地教会我正确对待学术研究,切忌浮躁,急功近利。姜老师和计算机学院的老师们严谨的治学之风、求实的科学态度、对学生的无比关爱之情深深地感动了我。值此论文完成之际,我谨此向我的导师姜老师和计算机学院的老师们致以诚挚的敬意,并对半年多的精心培养和悉心关怀表示中心的感谢!在半年多的学习生活和研究工作中,我得到了计算机学院许多领导、老师、同学和师兄弟们的关心和帮助,使我不仅学到了知识,掌握了本领,而且感受到了大家庭的温暖和融洽。在此向他们表示由衷的感谢!当然,还应特别感谢在百忙之中为我评阅论文和参加论文答辩的老师们!另外,还需要感谢我的家人,谢谢他们对我学业的大力支持!感谢参考文献的作者们对我创作论文的帮助!感谢的人很多,感谢的话千言万语,在此一并向所有曾经关心、帮助和支持我的老师、同学们及所有参考文献的作者们表示真心的感谢!47 参考文献[1]冯燕奎.JSP实用案例教程[M].清华大学出版社,2004.[2]王家华.软件工程[M].东北大学出版社2001年3月303页.[3]王宜贵.软件工程[M].北京:机械工业出版社,2002.[4]孙卫琴.精通struts[M].电子工业出版社2004.[5]孙卫琴.精通hibernate[M].电子工业出版社2005.[6]张洪斌.java2高级程序设计[M].中科多媒体出版社2001.[7]林信良.spring2.0技术手册[M].电子工业出版社2006.[8]耿祥义.JSP基础编程[M].清华大学出版社,2004.[9]徐建波.Web设计原理于编程技术[M].中南大学出版社,2005.[10]孙鑫.JavaWeb开发详解[M].电子工业出版社,2006.[11]林上杰.JSP2.0技术手册[M].电子工业出版社,2004.[12]萨师煊.数据库系统概论(第三版)[M].北京:高等教育出版社,1998.[13]蔡剑.JavaWeb应用开发:J2EE和Tomcat[M].北京:清华大学出版社,2004.[14]南兆旭.中小企业管理:员工异动与考勤管理[M].香港:香港西迪商务出版公司,1997.[15]伏秋平.姚渺波应用VPN技术延伸校园网覆盖范围[J].计算机时代,2007.[16]张欣.网络管理技术发展研究[J].电信技术研究,2005.[17]薛明杰.基于指纹模板的考勤系统设计与实现[J].计算机应用研究,2005.[18]孙晖.基于指纹识别的通用型网络考勤系[J].计算机工程,2002.[19]PaulC·Jorgensen,韩柯译.软件测试[M].机械工业出版社,2002.[20]WattsS·Humphrey.软件过程管理[M].清华大学出版社(影印版),2002.[21]MicrosoftCorporation.Windows2000培训教程[M].人民邮电出版社,2000.[22]潘大庆.基于VPN技术的教育城域网络设计与实现[J].微计算机信息,2006.[23]周天星.澜基于VPN技术EDI探讨[J].京工商大学学报,2004.[24]周泽.基于VPN和XML的IEDI解决方案[J].交通与计算机,2002.47 附录1.hibernate配置文件DBPoolproxool.xmlorg.hibernate.connection.ProxoolConnectionProvidertruetrueorg.hibernate.dialect.MySQLDialectthreadupdate这是Hibernate的配置文件,在该文件中proxool.xml首先加载了连接池的一个配置,就是加载了数据库的连接信息,truetrue表示控制台打印SQL语句,并格式化SQL语句org.hibernate.dialect.MySQLDialect47 表示当前数据库的语言是MYSQL都表示当前数据库建立起来的表和类之间的映射关系,比如表示User类和t_user表之间的建立起来的对应关系,其他也都类似2.struts配置文件index.jsplogin.jsp${url}${url}这是struts的配置文件,该文件的作用主要起到来自JSP的请求的跳转分配的作用.该struts配置文件是个总的配置文件。3.spring配置文件Spring在本项目中主要用到了IOC的功能,就是把对象实例化本段代码是把DAO实例化的代码,通过spring的IOC模式本段代码是把ManageAction实例化的代码,原理也是spring的IOC模式。4.ManageAction代码:publicclassManageActionextendsActionSupport{privatestaticfinallongserialVersionUID=-4304509122548259589L;privateUserDaouserDao;privateStringurl="./";publicUserDaogetUserDao(){returnuserDao;}publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;47 }publicStringgetUrl(){returnurl;}publicvoidsetUrl(Stringurl){this.url=url;}privateCishuDaocishuDao;publicCishuDaogetCishuDao(){returncishuDao;}publicvoidsetCishuDao(CishuDaocishuDao){this.cishuDao=cishuDao;}//入口程序publicStringindex(){HttpServletRequestrequest=ServletActionContext.getRequest();if(request.getSession().getAttribute("user")==null){return"success2";}else{return"success1";}}//用户登录操作publicStringlogin()throwsIOException{HttpServletRequestrequest=ServletActionContext.getRequest();Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");Useruser=userDao.selectBean("whereusername=""+username+""andpassword=""+password+""anduserlock=0");if(user!=null){HttpSessionsession=request.getSession();session.setAttribute("user",user);this.setUrl("index");return"redirect";}else{HttpServletResponseresponse=ServletActionContext.getResponse();47 response.setCharacterEncoding("gbk");response.getWriter().print("alert("员工号或者密码错误");window.location.href="index";");}returnnull;}//用户退出操作publicStringloginout(){HttpServletRequestrequest=ServletActionContext.getRequest();HttpSessionsession=request.getSession();session.removeAttribute("user");this.setUrl("login.jsp");returnSUCCESS;}//跳转到修改密码页面publicStringchangepwd(){this.setUrl("user/user.jsp");returnSUCCESS;}//修改密码操作publicvoidchangepwd2()throwsIOException{HttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresponse=ServletActionContext.getResponse();response.setCharacterEncoding("utf-8");PrintWriterout=response.getWriter();HttpSessionsession=request.getSession();Useru=(User)session.getAttribute("user");Stringpassword1=request.getParameter("password1");Stringpassword2=request.getParameter("password2");Stringpassword3=request.getParameter("password3");Userbean=userDao.selectBean("whereusername=""+u.getUsername()+""andpassword=""+password1+""");if(!password2.equals(password3)){47 out.print(Util.tiaozhuan2("两次输入密码不一致","index",""));out.flush();out.close();}elseif(bean!=null){bean.setPassword(password2);userDao.updateBean(bean);out.print(Util.tiaozhuan2("操作成功","index",""));out.flush();out.close();}else{out.print(Util.tiaozhuan2("原密码错误","index",""));out.flush();out.close();}}//跳转到用户注册页面publicStringregister(){HttpServletRequestrequest=ServletActionContext.getRequest();request.setAttribute("list",bumenDao.selectBeanList(0,9999,"wherebumenlock=0"));this.setUrl("user/register2.jsp");returnSUCCESS;}//用户注册操作publicvoidregister2()throwsIOException{HttpServletRequestrequest=ServletActionContext.getRequest();Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");Stringtruename=request.getParameter("truename");Stringbumen=request.getParameter("bumen");Userbean=userDao.selectBean("whereusername=""+username+""anduserlock=0");if(bean==null){bean=newUser();bean.setCreatetime(newDate());bean.setPassword(password);bean.setRole(1);bean.setBumen(bumenDao.selectBean("whereid="+bumen));47 bean.setTruename(truename);bean.setUsername(username);userDao.insertBean(bean);HttpServletResponseresponse=ServletActionContext.getResponse();response.setCharacterEncoding("gbk");response.getWriter().print("alert("注册成功");window.location.href="index";");}else{HttpServletResponseresponse=ServletActionContext.getResponse();response.setCharacterEncoding("gbk");response.getWriter().print("alert("该用户已经注册,请不要重复注册");window.location.href="method!register";");}}privateDakaDaodakaDao;publicDakaDaogetDakaDao(){returndakaDao;}publicvoidsetDakaDao(DakaDaodakaDao){this.dakaDao=dakaDao;}//用户打卡列表publicStringdakalist(){HttpServletRequestrequest=ServletActionContext.getRequest();intcurrentpage=1;intpagesize=20;if(request.getParameter("pageNum")!=null){currentpage=47 Integer.parseInt(request.getParameter("pageNum"));pagesize=Integer.parseInt(request.getParameter("numPerPage"));}HttpSessionsession=request.getSession();Useru=(User)session.getAttribute("user");Stringwhere="whereuser.id="+u.getId()+"orderbydakatimedesc";Stringwhere2="whereuser.id="+u.getId();inttotal=dakaDao.selectBeanCount(where2);request.setAttribute("list",dakaDao.selectBeanList((currentpage-1)*pagesize,pagesize,where));request.setAttribute("totalCount",total);request.setAttribute("ps",pagesize);request.setAttribute("pn",currentpage);request.setAttribute("url","method!dakalist");this.setUrl("daka/dakalist.jsp");returnSUCCESS;}//跳转到用户打卡页面publicStringdakaadd(){this.setUrl("daka/dakaadd.jsp");returnSUCCESS;}//用户打卡操作publicvoiddakaadd2()throwsIOException{HttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresp=ServletActionContext.getResponse();Stringtime=request.getParameter("time");resp.setCharacterEncoding("utf-8");HttpSessionsession=request.getSession();Useru=(User)session.getAttribute("user");/*Dakabean=dakaDao.selectBean("wheredakatimelike"%"+time.substring(0,10)+"%"anduser.id="+u.getId());*/Listlist=dakaDao.selectBeanList(0,99,"wheredakatimelike"%"+time.substring(0,10)+"%"anduser.id="+u.getId());47 if(list.size()==0){Dakabean=newDaka();bean.setDakatime(time);//time.substring(11,18);if((Time.bijiao(Time.SHANGBANTIME,time.substring(11,19)))){bean.setStatus("已打卡,迟到");bean.setQian(Time.CHUFA);this.addcishu(Util.getTime3(),u,3,Time.CHUFA);}else{bean.setStatus("已打卡,正常上班");this.addcishu(Util.getTime3(),u,1,0);}bean.setUser(u);dakaDao.insertBean(bean);PrintWriterout=resp.getWriter();out.print(Util.tiaozhuan("操作成功","method!dakalist","dakalist"));out.flush();out.close();}elseif(list.size()==1){Dakabean=newDaka();bean.setDakatime(time);//time.substring(11,18);if((Time.bijiao(time.substring(11,19),Time.XIABANTIME))){bean.setStatus("已打卡,早退");bean.setQian(Time.CHUFA);this.addcishu(Util.getTime3(),u,4,Time.CHUFA);}else{bean.setStatus("已打卡,正常下班");this.addcishu(Util.getTime3(),u,2,0);}bean.setUser(u);dakaDao.insertBean(bean);PrintWriterout=resp.getWriter();out.print(Util.tiaozhuan("操作成功","method!dakalist",47 "dakalist"));out.flush();out.close();}else{PrintWriterout=resp.getWriter();out.print(Util.tiaozhuan("您今天已经成功打卡两次","method!dakalist","dakalist"));out.flush();out.close();}}47'