课 程 设 计
课程名称 题目名称 专业班级 学生姓名 学 号 指导教师
二○一○年十二月二十八日
目录
大型数据库 人力资源管理系统
XXXXX
XXXXXXXXFX
XXXXXXXX
XXXXXX
摘要........................................................................................................................... - 3 - 第一章 绪论............................................................................................................. - 4 -
1.1问题的提出.................................................................................................. - 4 - 1.2 解决的方法................................................................................................. - 4 - 1.3 人力资源管理系统概述............................................................................. - 5 -
1.3.1 人力资源管理系统的发展............................................................... - 5 - 1.3.1 人力资源管理系统的特点............................................................. - 7 - 1.4开发工具的介绍.......................................................................................... - 8 - 第二章 人力资源管理系统分析与设计............................................................... - 11 -
2.1 人力资源管理系统功能分析................................................................... - 11 - 2.2 人力资源管理系统模块设计................................................................... - 14 - 第三章 人力资源管理系统功能实现................................................................. - 18 -
3.1 登录界面................................................................................................... - 18 - 3.2 主界面设计............................................................................................... - 22 - 3.3 职工管理窗口设计................................................................................... - 24 - 3.4 考勤系统设计窗口................................................................................... - 28 - 3.5工资管理设计界面.................................................................................... - 33 - 第四章 总结..................................................................................................... - 38 - 参考文献................................................................................................................. - 39 -
- 2 -
摘要
企业在激烈的市场竞争环境下求得生存,就必须有效地利用人才、时间、信息结合的优势。因此,如何使企业及时掌握本企业人才的各种信息、第一时间处理好随时变化的人力资源管理问题,建立一套符合企业实际的人力资源管理系统就显得尤为重要,而我们所开发研究的企业人力资源管理系统,能帮助企业准确地进行各种数据的输入、更新、计算、汇总、结算、发放等分析统计工作,从而实现了企业人力资源管理的系统化、规范化、自动化。
随着经济水平的发展,知识经济时代给企业人力信息管理提出了更高的要求,除了以往的工资利用计算机软件excel可以管理外,公司更希望能够对以往的各种的人事信息,考勤信息,工作评价信息,工资信息等统一管理起来。高效的、准确的人事管理,不仅能促进员工不断提高自身素质、提高工作积极性。从而提高员工工作质量和效率。
对企业而言,人力资源是企业最宝贵的资源,也是企业的“生命线”。实行电子化的系统管理,可以让人力资源管理人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作,人力资源管理信息系统的实现可以减轻比较繁琐的手工信息管理。
因此能够开发出一个实用,准确的人力资源管理系统对于企业来说是重中之重!
关键词:企业管理、人力资源、信息技术
- 3 -
第一章 绪论
1.1问题的提出
随着公司逐年的发展,公司的人力资源管理等事务纷繁芜杂,但大体上这些
事务可包括以下几个方面的内容:人事基本信息管理,员工的业务档案管理、员工的工作评价管理、员工的考勤管理、员工的工资管理等。以上各项中的每一个部分都有该方面的管理明细,以员工的基本信息管理为例,包含的明细有:员工编号、姓名、性别、部门、民族、出生年月、政治面貌、家庭住址、联系电话、毕业学校、学历等。若用人工的方法来管理这些数据,不但会造成人力、物力、财力上的浪费,而且因为要处理的信息量过大不容易进行统计和分析。依靠传统的手工管理越来越跟不上公司的发展需要,为了精简人员,提高办事效率和节约公司运营成本,特别需要改变以前单纯依赖人工管理的模式。
1.2 解决的方法
开发一个更实用更可靠的人力资源管理系统。具体方法如下:管理一个公司的整个系统的运行,包括员工基本信息,员工工资管理,员工的考勤情况,部门信息,岗位信息等。然后设置不同的用户,给予不同的权限,以进行不同的操作。 1、 先创建一个菜单,让用户选择是对哪一类对象进行操作。
2、 确定好对哪一类对象进行操作后,程序又创建一个菜单让用户选择对此类对象进行如何操作。操作包括:输入记录、显示记录、修改记录和删除记录。 3、 输入记录时提示用户输入每一条记录的各个字段,输入的每一条记录都要保存到文件如(a:\\\\example.dat)下。注意一条记录相当于一个对象。输入的工号不能重复,输入的数据字段作有效性检测。
4、 显示记录时,先提示用户输入要显示哪一个记录号的记录,如记录号在不超出范围则显示要访问的记,否则告诉用户记录号超出范围。
5、 修改记录时,先要求用户输入要修改的记录关键字内容,如学生的关键字段学号、员工的关键字段是工号。输入好关键字后进行查找所要修改的记录,
- 4 -
找到了重新输入该记录的数据成员内容,否则告诉用户找不到此记录。 6、 删除记录时,先要求用户输入要修改的记录关键字内容,)输入好关键字后进行查找所要删除的记录,找到了把它删除掉,否则告诉用户找不到此记录。提示:删除的方法先创造一个临时的文件(a:\\\\example.tmp),一条一条记录查找过去,把非要删除的记录一条一条写到临时文件下,然后把临时文件复制到a:\\\\example.dat下。
1.3 人力资源管理系统概述
人力资源管理系统是典型的管理信息系统,采用计算机管理企业的人力资源管理是当前不可缺少的一种管理手段。其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强,数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。 本系统着眼于人力资源管理制度的业务实际,经过实际的需求分析,采用功能强大的C#做为开发工具、SQL Server 2000做为数据库开发出来的系统。 本人力资源管理系统可管理职工基本信息的记录,进行修改,增加,查询,删除一些功能.并可以进行工资的修改,增加,查询,删除.还可对员工的考勤情况进行管理,主要用于电脑成员员工对公司人力资源的统一管理,同时方便统计部分数据。
1.3.1 人力资源管理系统的发展
一个企业在市场中的竞争优势集中表现为以下两点:一、企业是否具有在人才市场中具有能优势的人才;二、企业所具有的人才是否具有合适的环境。所以现在的成功企业一般关注以下两个方面,一是积极寻找合适的人才,并向办法留住人才,还有一个就是营造企业的内部环境,一面促进人才的成长,一面又有利于人才脱颖而出。这两个方面,也许后者更重要,所以现在企业最流行的莫过于重组与再造,而且所有的管理活动都可以通过计算机和网络完成,比如生产管理系统、物流管理系统、财务管理系统、客户管理系统等等。所有的管理系统都是
- 5 -
为了加快企业应变能力和业务处理能力,但所有这些的实现又以企业的员工为基础,所以人力资源管理者,如果还想成为CEO的战略伙伴,就必须要改变自己的工作模式,加快自身对企业内外环境、企业目标,以及其他直线部门的需要和变化的响应,并提高工作质量。要想实现对这种快速变化的环境和需求的快速相应,我们就必须能够尽早获得和传输需求信息或变化的信息,必须更快的处理这种信息,并更快地做出相应的处理,以满足或处理这种变化。所以人力资源管理系统,也就成为了越来越多企业的选择不得已,也是必然的选择。
人力资源管理系统有其自身的发展历程,而现在国内大量涌现的人力资源管理系统,有国外的,也有国产的,总的说来是良莠不齐。为了让企业在选择人力资源系统时自己先有个了解,我们吧人力资源管理系统发展的四个阶段: 1、薪资计算系统时代 ,即人力资源管理系统的发展历史可以追溯到20世纪60年代末期。由于当时计算机技术已经进入实用阶段,同时企业的规模也越来越大,用手工来计算和发放薪资既费时费力又非常容易出差错,为了解决这个问题,第一代的人力资源管理系统,其实就是薪资管理系统应运而生。当时由于技术条件和需求的限制,用户非常少,而且那种系统充其量也只不过是一种自动计算薪资的工具。
2、薪资/人事管理系统时代 ,即第二代的人力资源管理系统出现于20世纪70年代末。随着计算机技术的飞速发展,无论是计算机的普及性,还是计算机系统工具和数据库技术的发展第二代薪资管理系统基本上解决了第一代系统的主要问题,开始纪录员工的其他基本信息包括薪资的历史数据,此外,它的报表生成和薪资数据分析功能也都有了较大的改善。这个时代的的管理系统以薪资处理为主,并兼具了一部分人事信息管理的功能。
3、人力资源管理系统时代 ,即人力资源管理系统的第一次革命性变革出现在20世纪90年代初。由于企业管理理论,特别是人力资源理论的发展,使人们认识到人力资源在企业发展和企业竞争优势中的关键性作用,另外随着IT技术的发展,把一些人力资源管理理念和理论应用到企业管理中也变为可能。这一阶段企业最关注的时员工的绩效考评和管理系统,以及培训管理系统。第三代人力资源管理系统的特点是从人力资源管理的角度出发,用集中的数据库将几乎所有
- 6 -
与人力资源相关的数据(如薪资福利、招聘、个人职业生涯的设计、培训、职位管理、绩效管理、岗位描述、个人信息和历史资料)统一管理起来,形成了集成的信息源。友好的用户界面,强有力的报表生成工具、分析工具和信息的共享使得人力资源管理人员得以摆脱繁重的日常工作,集中精力从战略的角度来考虑企业人力资源规划和政策。 4、E人力资源管理系统或EHRMS时代 ,即人力资源管理信息系统的第二次革命性变革出现在20世纪90年代末和21世纪初。由于internet和intranet技术的普及,以及人力资源管理理论的进一步发展,学习与发展成为企业与员工个人的永远的主题,而IT技术为这一主题给出的答案就是E-LEARNING。为了快速响应企业内部和外部的各种要求与变化,WEB使人力资源部门与企业的内部员工和外部世界之间的距离成为0,这就是人力资源管理系统的E话。E化HRMS除了具有人力资源管理系统的所有特征外,还可以实现员工或潜在员工和企业人力资源管理者互动和零距离。
1.3.1 人力资源管理系统的特点
人力资源管理系统有以下五个特点。1.和企业内部其它系统兼容性;2.集团化管理模式即纯互联网结构;3.完全按企业需求灵活定制性;4.无纸化办公即改善企业“白纸黑字”的办公流程; 5.根据企业所有管理权限分布式控制系统。而这些特点给企业也带来了不很大的利益。企业无需考虑购买这套人力资源管理系统后与自身的其他管理系统和将来购买的先进系统互不兼容、数据无法交换的问题。企业更加不必担心将来需要重新更换系统所带来的资金重投入、员工及管理人员多次培训的忧患。无论公司现在机构多么庞大,还是由现今的中小企业发展到大型集团,这套系统都可以为自己管理的游刃有余,并且公司再怎么扩大都无需投入额外成本。在系统管理和升级方面更是轻松自如,因为系统只需要在企业服务器上安装一次,其他客户端电脑无需安装任何额外程序(当然需要我们企业上网必备的IE浏览器),升级管理轻松在一台服务器上搞定,这样我们企业分支机构无任扩展到世界任何地方都不必担心升级管理的痛苦。.现今企业管理个性化很融,各家有各家高招,针对于现在企业发展趋势,必须要一套适合企业现今管理模式而且能定制未来发展模式的人力资源管理系统,也就是说我们需要
- 7 -
的软件应该是可以随着公司的调整和改变做出相应的调整和改变的灵活系统。这样就能减少公司二次开发的成本,并且能充分的满足、贴切公司的需求,进而节约不必要的开支。无纸化办公、异地共同办公,无论你在哪里都可以登陆这套人力资源管理系统实现你在企业中的角色,就想你在坐在办公室一样完成这套工作流程,大大提高了工作效率。这也是对管理制度的一种体现,体现了“管理在前,执行在后”的先进理念。随着企业管理理念的提高,企业内的职位、岗位划分越来越细致,针对这种发展的趋势,我们选择人力资源管理软件的时候必须考虑到系统中权限控制是否适合公司各个岗位的问题。权限分配必须分别对应于企业中不同的部门和不同的人,根据不同的管理人员而下放相应的权限。这样才能给企业带来管理的安全和信息的保密。另外,在分布式权限控制系统中职位与权限相结合,不因人的流动而造成职责的空缺。并且,既可以统一管理,又明确分工。合理的下放职权,亦可减轻各岗位的工作负担。
1.4开发工具的介绍
这次课程设计我们用的是Microsoft Visual Studio 2008作为开发工具,并且用的编程语言是C#。在连接数据库时我们运用了Microsoft Visual Studio 2008中自带的linq to sql 。下面的内容分别介绍了这三个方面。
Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2005一次及时、全面的升级。VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了ASP.NET AJAX 1.0,包含ASP.NET AJAX项目模板,它还可以高效开发Office应用和Mobile应用。
Visual Studio 是一套完整的开发工具集,用于生成 ASP.NET Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C++、Visual C# 和 Visual J# 全都使用相同的集成开发环境 (IDE),利用此 IDE 可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用
- 8 -
了 .NET Framework 的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。
LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。
LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于 LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能。其建立于公共语言类型系统中的基于SQL的模式定义的集成之上,当保持关系型模型表达能力和对底层存储的直接查询评测的性能时,这个集成在关系型数据之上提供强类型。 C sharp(又被简称为“C#”)是微软公司在二OOO年六月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。 C#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点。C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说structs),它还增加了自己新的特点(比方说源代码版本定义). 类:C#中类的申明与Java很相似.这是合理的因为经验告诉我们Java模型工作得很好.Java的关键字import已经被替换成using,它起到了同样的作用.一个类开 - 9 - 始执行的起点是静态方法Main().C#拥有比C,C++或者Java更广泛的数据类型.这些类型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一样,所有这些类型都有一个固定的大小.又象C和C++一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个16位的Unicode字符.C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字. - 10 - 第二章 人力资源管理系统分析与设计 2.1 人力资源管理系统功能分析 在系统中需用到的表结构有: 表2-1 职员基本信息表 列名 职员编号 姓名 性别 出生日期 年龄 籍贯 民族 文化程度 毕业学校 健康状况 婚姻状况 身份证号码 家庭电话 办公电话 手机 电子邮件 部门编号 备注 所在岗位 类型 varchar varchar varchar int int varchar varchar char char varchar varchar varchar varchar varchar varchar varchar varchar varchar char 长度 30 20 2 8 4 50 20 50 100 50 10 18 50 50 50 50 20 100 10 表2-2 岗位表 列名 岗位编号 岗位名称 部门编号 工资 是否为空 否 是 是 是 是 是 是 是 是 是 是 类型 char char char decimal 长度 3 10 3 13 - 11 - 是否为空 表2-3 月工资统计表 列名 日期 职员编号 部门编号 岗位编号 基本工资 职务工资 应发金额合计 房租 水电费 请假扣除 考勤扣除 住房公积金 医疗保险 养老保险 应扣金额合计 工资合计 发放否 月份 序号 类型 int varchar char char decimal decimal decimal decimal decimal decimal decimal decimal decimal decimal decimal decimal char int int 长度 4 30 3 3 9 13 13 13 13 13 13 13 13 13 13 13 10 4 4 表2-4 用户清单 列名 职员编号 类型 密码 类型 char Varchar char 长度 30 8 10 表2-5 签到表 列名 员工编号 部门编号 签到时间 类型 考勤扣除 - 12 - 是否为空 是否为空 类型 char char datetime char int 长度 8 3 8 8 4 是否为空 表2-6 签离表 员工编号 部门编号 签离世间 类型 考勤扣除 char char Datetime Char int 8 3 8 8 4 表2-7 职工调动表 职工编号 姓名 调动日期 调动前部门 调动后部门 调动前职称 调动后职称 调动原因 char char int char char char char text 30 10 4 10 10 10 10 16 表2-8 请假表 序号 职员编号 开始时间 结束时间 天数 请假扣除 备注 int varchar datetime datetime int decimal varchar 4 30 8 8 4 13 50 表2-9 部门表 部门编号 部门名称 管理人 部门人数 char char char int 3 10 8 4 - 13 - 实体关系图: 图2-1实体关系图 数据流图(DFD): 图2-2数据流图(DFD) 2.2 人力资源管理系统模块设计 本系统由员工信息管理子系统,工资管理子系统,考勤考核管理子系统组成,今后还可以根据发展需要添加相关系统。 - 14 - 1.员工信息管理子系统 (1)员工信息查询 员工成功登录人力资源管理系统,输入相关信息条件,进行员工信息查询。员工对于自己的相关基本信息进行查看,以及相关人员查看员工的信息。在这个业务流程中,有两个直接与系统交互的用户:系统管理员,员工。 (2)员工信息修改 人力资源管理部门等相关人员根据情况对员工信息进行修改更新与维护,员工自身对于自己的信息的更正等。整个流程如图所示: 图2-3 员工信息修改 (3)新员工信息添加 当公司招聘进新的员工时,需要将新员工的信息存进系统中。其流程如图所示: 图2.4新员工信息添加 这个业务流程中涉及的业务实体同上面信息修改。其系统直接交互用户也包括系统管理员,员工,人力资源部门人员,在上面的业务活动的基础上,人力资源部门人员涉及的业务活动添加了添加员工信息 - 15 - (4)离职员工信息删除 公司员工因为某种原因离职的时候,就需要从系统中将该员工的信息删除。整个业务流程如图所示: 图2-5离职员工信息删除 2.工资管理系统 (1)员工奖励/惩罚管理 当某个员工获取奖励时,将员工相关信息以及其获得的奖励情况存入系统中。月底时对所有奖励表进行统计得出员工月奖励情况表。整个业务流程如图所示: 图2-6员工奖励/惩罚管理 (2)员工绩效考核 从员工考勤考核部门将所有员工整月的情况报表,奖励情况表以及惩罚信息表从系统中查询获取,然后根据考核条例评定出个员工的考核表。整个业务流程 - 16 - 如图所示: 图2-7员工绩效考核 (3)当月员工工资管理 月底根据员工信息表中员工工资情况以及绩效考核表中各员工考核情况得出员工月实际工资,存入系统中。流程如图所示: 图2-8当月员工工资管理 3.考勤子系统 (1)考勤信息记录 公司采用相关电子设备对员工每天的上班情况进行记录,而考勤部门的人员需要将这些信息分类存入天考勤信息登记表中。流程如图所示: 图2.9考勤信息记录 - 17 - 4.月考勤信息统计 月底时,将各员工整月考勤情况,请假情况以及加班信息汇总得到月考勤信息表,该业务流程如图所示: 图2-10月考勤信息统计 这些业务流程涉及到的业务实体以及他们之间的关系如图所示: 图2-11 业务流程图 第三章 人力资源管理系统功能实现 3.1 登录界面 设计思路:登陆界面(如图3-2)的校验和很多人不一样,我是先进行用户名,密码以及用户类型的校验以后。登陆界面中的用户类型下拉菜单是事先设定好的,管理员和普通职工可以进行的职权不一样,这样设计对于管理员的安全性有了很大的提高。在没有管理员的用户类型时,是不能登陆管理员界面的。 - 18 - 流程图: 判断类输入职判断密判断型是否 工 号 密 正确 职工 正确 码是否 错误 正确 和职工码并且正确 号是号对应。 选择用否存 户类型 在 登陆成功,并且把用户的类型和id好传递到主窗 错误 提示,并且清除文本框和下拉菜单中的文字,让用户从新输入信息。 图3-1登陆流程图 登陆验证(先验证用户名和密码,再验证用户类型) private void button1_Click(object sender, EventArgs e) { if (userid.Text.Trim().Length == 0 || usersort.Text.Trim().Length == 0 || password.Text.Trim().Length == 0) //如果用户没有把信息填写完整,则会弹出提示对话框如图3-1 { MessageBox.Show(\"请完善信息!\"); userid.Text = null; password.Text = null; usersort.Text = null; return; } else { 用户清单 user_id = new 用户清单(); try { user_id = my_datacontext.用户清单.Single(id => id.职员编号 == this.userid.Text.Trim()); - 19 - } catch (Exception) //得不到后台数据库的用户清单名单,则会返回错误,如图3-2 { MessageBox.Show(\"职工号不存在!\", \"警告\"); return; } if (user_id != null) { if (user_id.密码.ToString().Trim() == this.password.Text.Trim()) //这里得不到后台数据库的数据,没办法进行比较 { if (user_id.类型.Trim() == this.usersort.SelectedItem.ToString()) { this.Visible = false; MainForm main = new MainForm(userid.Text.ToString(), usersort.Text.ToString()); //把登陆界面得到的职工编号和用户类型传递到主窗口 main.Show(); } else { MessageBox.Show(\"类型不正确!\"); userid.Text = null; password.Text = null; usersort.Text = null; return; } } else { MessageBox.Show(\"密码不正确!\"); - 20 - userid.Text = null; password.Text = null; usersort.Text = null; return; } } else { MessageBox.Show(\"该用户不存在!\"); userid.Text = null; password.Text = null; usersort.Text = null; return; } } } - 21 - 登陆界面如图所示: 图3-2 登陆界面 3-3 登陆界面提醒 3.2 主界面设计 主界面的设计有一共有五个操作:系统管理,人事管理,工资管理,考勤管理,请假管理。但是对于管理员和普通职工操作是不同的,作为管理员,可以对公司上下所有人的信息进行增删改查,但是作为公司的普通职工,他只可以看到自己的所有信息,而且不可以进行更改。虽然在主界面上没有什么区别,但在不同职权跳转后看到的窗体时不一样的。 系统管理:操作时先判断用户的类型,若是管理员则能对系统中的用户进行添加和删除,对整个系统起到维护的作用。普通员工只能经过此项进行更改密码。人事管理:公司所有员工的信息都可以经过这个查清楚。管理员可以注销或者添加职工信息,如若公司的员工有变动,则要进行信息的录入或者删除。工资管理:工资和员工的岗位和考情情况联系的较紧密,在显示员工工资信息的时候有些是 - 22 - 事先已经确定的了,如:请假扣除、考勤扣除等。 考勤管理:每个员工到公司后就会进行签到,这是与公司的刷卡系统相联系,这里只用按钮来代替。员工离开公司时也同样进行签离。管理员可以对员工的记录进行查询。查询的方式可以按员工号或者按部门查询,这样可以方便管理员对员工进行统计等。 请假管理:管理员可以对员工的请假信息进行录入修改和删除,当然也可以查询,分为按员工编号查询和按时间查询。 图3-4主窗体 主窗体的代码主要判断用户的类型进行判断,并且有一部分进行参数的传递(由于篇幅的问题,以下只用一个代表)。 private void 修改密码ToolStripMenuItem_Click(object sender, EventArgs e) { if (this.m_Sort == \"普通职工\")//如果用户的类型为普通员工,则会只看到自己的信息。 { user1 users1 = new user1(m_ID ,m_Sort);//传递登陆界面传过来的id号和用户类型,对以后的查找有一定的用处。 users1.MdiParent = this; users1.Show(); } else - 23 - { user users = new user(m_ID, m_Sort); users.MdiParent = this; users.Show(); } } 3.3 职工管理窗口设计 管理员能够进行增删改查的操作。查询职工信息可以按照职工号查询、按部门查询和按岗位查询的三种方式,可以方便管理员进行查询。添加、删除和更新职工信息如图所示。 流程图如下: 添加职工信息:如图 判 断 管 完整 判断该 不存在 输 入 的 存在 理员是信息是职工编否把用否符合号是否户的信 不完整 存在 存在 条件 不符合 息填写完整。 进行提示。 向数据库中插入数据。 图3-5 添加职工信息流图 更新职工信息: 文本框中显示 管理员输 入 要 更 存在 正确 后台数据库的新职工的编不 员工信息后进 不正确 行更改。 号,确保此员工已经不存在 存在。 若是数据更改的正确,可以向数据库提交更新 进行相应提示。 - 24 - 图3-6 更新信息流图 图3-7 查询员工信息 图3-8职工调动信息 - 25 - 图3-9添加员工信息 当用户为普通职工时,只可以看到自身的信息,并且不可以进行修改,如若有错,则可联系管理员进行更改。 图 3-10普通职工信息 按部门编号查询代码如下(添加、删除和更新与添加用户类似,此处不再累赘写出): private void button1_Click(object sender, EventArgs e) { if (this.textBox1.Text.Trim().Length == 0 || this.comboBox1.Text.Trim ().Length == 0 || this.comboBox2.Text.Trim ().Length ==0)//填完整职工的信息才可以进行相应查询 { MessageBox.Show(\"请完善信息!\", \"警告\"); - 26 - return; } else { try { IQueryable conselect = from 职员基本信息表 in m_DataContex.职员基本信息表 where 职员基本信息表.部门编号.ToString().Trim() == this.comboBox1.SelectedItem.ToString().Trim() && 职员基本信息表.职员编号.ToString().Trim() == this.textBox1.Text.ToString().Trim() && 职员基本信息表.所在岗位.ToString().Trim() == this.comboBox2.SelectedItem.ToString().Trim() select 职员基本信息表;//用参数值传递数据库中得到的信息 this.dataGridView1.DataSource = conselect;//把查到的信息放到显示框中去 } catch (Exception) { MessageBox.Show(\"此员工不存在!\", \"警告\");//填入信息不正确 return; } } - 27 - 3.4 考勤系统设计窗口 管理员登陆到此窗口进行自己的登陆和职工的考勤信息查询,流程图如下: 部门号和得到系统时间与输入的输入职职工职 工工号和 填写完整 号 存在 号 是 公司规定时间相对应 否相互对比较,判断签到是否存部门 应 类型 在 号。 不完整 不存在 不对应 图3-11 考勤信息流程图 进行提示,引导用户将信息填写完整。 向数据库中更新信息,并且进行相应提示 签到成功,提示如图3-12 图 3-12签到成功 查询签到记录(签离相同),查询结果如图3-13 - 28 - 图 3-13考勤查询 private void checkin1_Click(object sender, EventArgs e) { if (this.textBox_number1.Text.Trim().Length == 0 || this.comboBox2.Text.ToString().Trim().Length == 0) { MessageBox.Show(\"请完善信息!\",\"警告\"); return; } else { try { 职员基本信息表 checkemp = new 职员基本信息表(); checkemp = my_datacontext.职员基本信息表.Single(a => (a.职员编号 == this.textBox_number1.Text.ToString().Trim() this.comboBox2.SelectedItem.ToString().Trim())); if (checkemp != null) { 签到表 checkin = new 签到表(); && a. 部 门 编 号 == - 29 - checkin.员工编号 = this.textBox_number1.Text.ToString().Trim(); checkin.部门编号 = this.comboBox2.SelectedItem.ToString().Trim(); System.DateTime checktime = DateTime.Now; checkin.签到时间 = DateTime.Now; if (checktime.Hour < 8)//得到的系统时间和规定时间相比较后判断签到类型 { checkin.类型 = \"按时\"; checkin.考勤扣除 = 0; } else if (8 < checktime.Hour & checktime.Hour < 10) { checkin.类型 = \"迟到\"; checkin.考勤扣除 = 20; } else if (10 < checktime.Hour & checktime.Hour < 17) { checkin.类型 = \"缺勤\"; checkin.考勤扣除 = 50; } my_datacontext.签到表.InsertOnSubmit(checkin); my_datacontext.SubmitChanges(); MessageBox.Show(\"添加成功!\"); this.textBox_number1.Text = null; this.comboBox2.SelectedItem = null; } } catch (Exception) { MessageBox.Show(\"信息不正确!\",\"警告\");//签到不成功,进行提示 return; - 30 - } } } 管理员在判断员工签离时候,应该把考勤扣除算出来,代码如下: private void checkout_Click(object sender, EventArgs e) { if (this.textBox_number3.Text.Trim().Length == 0 || this.comboBox3.Text.ToString().Trim().Length == 0) { MessageBox.Show(\"请完善信息!\",\"警告\"); return; } else { try { 职员基本信息表 checkemp = new 职员基本信息表(); checkemp = my_datacontext.职员基本信息表.Single(a => (a.职员编号 == this.textBox_number3.Text.ToString().Trim() this.comboBox3.SelectedItem.ToString().Trim())); if (checkemp != null) { 签到表 checkin = new 签到表();签离表 checkout = new 签离表(); checkout.员工编号 = this.textBox_number3.Text.Trim(); checkout.部门编号 = this.comboBox3.SelectedItem.ToString().Trim(); System.DateTime checktime = DateTime.Now;//得到系统时间 checkout.签离时间 = DateTime.Now; if (checktime.Hour < 17) { checkout.类型 = \"早退\";checkout.考勤扣除 = 20; } - 31 - && a. 部 门 编 号 == else if (17 < checktime.Hour) { checkout.类型 = \"加班\"; checkout.考勤扣除 = -5 * (checkout.签离时间.Hour - 17);//自动算出考勤扣除的费用以便结算工资时使用 } my_datacontext.签离表.InsertOnSubmit(checkout); my_datacontext.SubmitChanges(); MessageBox.Show(\"签离成功!\"); this.textBox_number3.Text = null; } } catch (Exception) { MessageBox.Show(\"信息不正确!\", \"警告\"); return; } } - 32 - 3.5工资管理设计界面 管理员可对公司上下所有的员工的工资信息进行增删改查,而一部分工资已由系统自定,顾添加时不可显示。如图3-14所示 图 3-14 添加员工信息 代码如下: private void button17_Click(object sender, EventArgs e) { if (this.textBox17.Text.Trim().Length == 0 || this.comboBox7.Text.Trim().Length == 0 || this.comboBox8.Text.Trim().Length == 0) { MessageBox.Show(\"职员编号、部门编号、岗位编号是必填项!\");//确保用户输入正确信息 } else { 月工资统计表 Form2 = new 月工资统计表(); 请假表 form1 = new 请假表(); 签到表 form2 = new 签到表(); - 33 - 签离表 form3 = new 签离表(); 职员基本信息表 emp2 = new 职员基本信息表(); try { 职员基本信息表 select3 = salary_datacontext.职员基本信息表.Single(a => (a.部门编号 == this.comboBox7.SelectedItem .ToString ().Trim() )&& (a.职员编号 == this.textBox17.Text.Trim())); if (select3 != null)//判断是否存在此员工的信息 { Form2.部门编号 = this.comboBox7.SelectedItem.ToString().Trim(); Form2.职员编号 = this.textBox17.Text.ToString().Trim(); Form2.岗位编号 = this.comboBox8.SelectedItem.ToString().Trim(); if (this.textBox7.Text.Trim().Length == 0) { Form2.房租 = decimal.Parse(\"0\");//因为数据库中存放的是decimal类型的,添加空不会提示错误。 } else { Form2.房租 = decimal.Parse(this.textBox7.Text.Trim()); } Form2.工资合计 = (Form2.应发金额合计) - (Form2.应扣金额合计); if (this.textBox4.Text.Trim().Length == 0) { Form2.基本工资 = decimal.Parse(\"0\"); } else { Form2.基本工资 = decimal.Parse(this.textBox4.Text.Trim()); } - 34 - Form2.考勤扣除 = form2.考勤扣除 + form3.考勤扣除; Form2.请假扣除 = form1.请假扣除; if (this.textBox9.Text.Trim().Length == 0) { Form2.水电费 = decimal.Parse(\"0\"); } else { Form2.水电费 = decimal.Parse(this.textBox9.Text.Trim()); } if (this.textBox13.Text.Trim().Length == 0) { Form2.养老保险 = decimal.Parse(\"0\"); } else { Form2.养老保险 = decimal.Parse(this.textBox13.Text.Trim()); } if (this.textBox11.Text.Trim().Length == 0) { Form2.医疗保险 = decimal.Parse(\"0\"); } else { Form2.医疗保险 = decimal.Parse(this.textBox11.Text.Trim()); } Form2.应发金额合计 = (Form2.基本工资) + (Form2.职务工资);//合计工资应该为基本工资加上职务工资 Form2.应扣金额合计 = (Form2.房租) + (Form2.水电费) + (Form2.养老保险) + (Form2.医疗保险) + (Form2.住房公积金) + (Form2.考勤扣除) + (Form2.请假扣除); - 35 - 岗位表 select4 = salary_datacontext.岗位表.Single(a => a.岗位编号 == this.comboBox8.SelectedItem.ToString().Trim()); Form2.职务工资 = select4.工资; if (this.textBox12.Text.Trim().Length == 0) { Form2.住房公积金 = decimal.Parse(\"0\"); } else { Form2.住房公积金 = decimal.Parse(this.textBox12.Text.Trim()); } if (this.comboBox3.SelectedText.ToString().Trim().Length == 0) { Form2.发放否 = \"否\";//如若没有输入是否发放,则系统自动添加为“否” } else { Form2.发放否 = this.comboBox3.SelectedItem.ToString().Trim(); } if (this.textBox16.Text.Trim().Length == 0) { Form2.日期 = null; } else { Form2.日期 = int.Parse(this.textBox16.Text.ToString().Trim()); } if (this.comboBox4.SelectedText.ToString().Trim().Length == 0) { Form2.月份 = null; - 36 - } else { Form2.月份 = int.Parse(this.comboBox4.SelectedItem.ToString().Trim()); } salary_datacontext.月工资统计表.InsertOnSubmit(Form2); salary_datacontext.SubmitChanges(); MessageBox.Show(\"添加成功!\"); this.textBox17.Text = null; this.comboBox8.Text = null; this.comboBox7.Text = null; this.textBox16.Text = null; this.comboBox1.Text = null; this.comboBox2.Text = null; } } catch (Exception) { MessageBox.Show(\"不存在此职员,请填入正确的信息!\", \"警告\"); return; } } } - 37 - 第四章 总结 在这次课程设计中,我们是三个人一个组,原先接到题目时,我们在一起讨论接下来怎么做的问题,结果我们建数据库都花了不少时间。本来老师是让我们用三层架构来做的,可后来在进行的过程中,我们发现着实有点难,不知从何下手。因为要运用到C#的有关知识,怎样将C#与后台数据库连接起来以及对于C#等的语句怎样使用都是一开始有待解决的问题。由于C#我们还没有正式开课,所以对于它的编程情况我们都是一头雾水。在老师布置这个任务的时候,我们所有人都目瞪口呆,认为完全不可能完成。但经过近半个学期的奋战,我们成功了! 也许是青年人的不认输心态,促使我在接到作业之后马上到图书馆借有关C#的书籍。刚拿到手,我们在心里对自己说,这就是我这半个学期的任务了。 在刚着手时,真是不知该如何开始,不过在我们的指导老师戚老师的指导下,我们倒是摸到了一点头绪,就这样我们便开始了奋战。 从未接触过C#,完全靠我们自学,开始我觉得我们都学过C语言了,再重新开始学另外一门语言,应该不是很难。对自己有很大的信心。可随着进度的发展,才发现想做好这个课程设计不是易事。过程中我遇到了很多的难题,比如像是怎样用C#的知识来实现各模块的功能以及如何实现各部分的参照完整性。期间我查过相关书籍,可还是不能全搞明白,最后是在指导老师的悉心解释下解决了问题。而且后来经过老师的帮助,我们换了方法来连接数据库,即用linq来做,这样就容易多了。我们直接用linq连接到数据库,简单易行。而且省去了很多写连接数据库的代码的时间,使我们有充分的时间去做接下来的工作。 开始时,三个人想到我们做的是人力资源管理系统,可我们对这方面的知识知道的并不多,于是那段时间还花了不少时间来熟悉这方面的东西。于是建数据库,添加数据,都花了不少时间。半个学期下来,我们完成了任务,看着自己的作品,我们都会心的笑了。在整个课程设计过程中,如果没有老师悉心的指导和我们几个人的一起讨论,是很难完成任务的。所以在这里我要感谢我们的指导老师,戚老师。谢谢你在我们遇到困难时帮我们及时解决了问题,你的指导与帮助让我们受益非浅。 - 38 - 参考文献 数据库技术与应用(SQL Server) 刘卫国 严晖 主编 清华大学出版社 C#和.NET 3.0第一步 周礼 编著 清华大学出版社 《Visual C#2005+SQL Server 2005数据库开发与实例》 王永皎 廖建军 编著 清华大学出版社 - 39 -
因篇幅问题不能全部显示,请点此查看更多更全内容