




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!感谢阅读本文档,希望本文档能对您有所帮助!感谢阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!感谢阅读本文档,希望本文档能对您有所帮助!中北大学面向对象程序设计实训说明书
学院、系:软件学院专业软件工程学生班级13140xxx学生姓名学号:131401xxxx设计题目企业人事管理系统起迄日期:2015年6月29日-2015年7月10日指导教师:洪军
2015年7月8日实训任务书1.设计目的:进一步掌握面向对象程序设计的思想和方法,遵照软件工程中软件系统的开发流程,使用JAVA/JAVAWEB完成一个软件系统,在实践中提高分析问题、解决问题的能力,动手编程的能力和团队协作的能力。2.系统设计内容和要求(包括原始数据、技术参数、条件、设计要求等):设计内容:主要功能有:1、人事档案管理:户口状况、政治面貌、生理状况、合同管理等。2、考勤、加班、出差管理。3、人事变动:新进员工登记、员工离职登记、人事变更记录。4、考核奖惩。5、员工培训。6、系统维护:操作员管理、权限设置等。要求:基于B/S模式,并采用MVC架构,分层合理,最大限度的减少代码冗余。遵照软件工程规范,严格按照软件系统的开发流程(需求分析,概要设计,详细设计,编码实现,测试)进行。系统中的数据表设计应在数据库实训的基础上进一步规范合理、高效,尽量减少数据冗余。最终完成的软件系统应操作简捷,友好,方便,实用。3.设计工作任务及工作量的要求〔包括课程设计说明书(论文)、图纸、实物样品等〕:(1)根据设计内容和要求进行需求分析,分析出系统要解决的问题。(2)根据需求分析的内容进行概要设计和详细设计,并在小组中合理分工。(3)按格式要求,每人根据自己完成的工作写出实训说明书。
实训任务书4.自己承担的任务需求分析(主要)概要设计(参与)详细设计(参与)编码实现(部分)创建数据库和表DAOServletjsp页面html页面测试使用已经设计好的测试用例进行测试5.设计成果形式及要求:实训说明书
软件系统6.工作计划及进度:2015年6.29-7.30 需求分析7.1-7.2 概要设计和详细设计7.3-7.7 系统实现与测试7.8 撰写实训说明书7.9 验收答辩、成绩考核7.10上交实训报告一、需求分析1、引言需求规格说明书是需求分析的产物,它是软件系统生存期中软件定义阶段的最后一个步骤。作为整个软件开发过程的指南,它也是软件开发人员开发出符合用户要求的软件的基础。1.1编写目的软件需求说明书的编制目的是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解,使之成为整个开发工作的基础。本软件需求说明书的读者是系统开发人员或合同约定的人员。1.2背景说明(1)本系统的名称是:企业人事管理系统。(2)本系统能为其他的系统提供人事数据。1.3定义数据字典:关于数据的信息的集合,也即是对数据流图中包含的元素的定义的集合。2、任务概述2.1项目背景人事档案管理是现代企业人事资源管理中的重要内容,也是人力资源开发利用的基础性工作。人事档案管理在信息化之前,在人员进出、离退休、升迁、岗位变动、职称变动、学位变动,以及档案管理人员的变动等方面存在诸多不利于管理的地方,不适应现代的企业管理形势和人力资源开发利用的要求。开发人事档案管理系统使企业的人事档案管理工作实现了信息化、规范化,不仅使企业能够高效率完成人事管理的日常工作,还使企业深入开发利用人力资源成为可能。2.2用户的特点本产品面向的客户为企业的人事管理部门,其最终用户是企业人事部门的工作人员。部门有专职的人事数据录入人员,具有一定的计算机操作知识;系统的维护人员是企业的信息中心的信息维护员,对网络和数据库的操作比较熟悉;数据录入员负责人事数据的录入及日常更新,信息维护员负责人事数据的备份和其他管理工作。企业的人员调进与调出比较频繁。在企业竞争日趋激烈的情况下,企业越来越重视发掘蕴含在人事管理中的信息,并且利用这些信息为企业服务,提高企业的市场竞争力。目前企业人事部门信息化程度不高,管理人事信息的手段也比较原始,然而这种原始的信息管理形式已经无法适应日益增长的人事管理规模的需求,企业人事管理部门正缺乏此类系统,所以企业选择本产的可能性为高。三、需求规定企业人事管理系统的功能可以划分为如下几个部分:1、人事档案管理:户口状况、政治面貌、生理状况、合同管理等。2、考勤、加班、出差管理。3、人事变动:新进员工登记、员工离职登记、人事变更记录。4、考核奖惩。5、员工培训。6、系统维护:操作员管理、权限设置等。四、功能模块分解及各模块作用图4-1系统模块图登录管理:主要用于权限管理员工登录功能供员工个人使用,主要用于方便员工查看个人信息,一条完整的员工信息应该包含以下内容:员工信息{员工号,员工姓名,性别,年龄,学历,政治面貌,婚姻状况,生理状况}工作信息{员工号,参加工作时间,工作岗位}薪水{员工号,月工资,奖金}考勤状况{员工号,出勤率,迟到次数,早退次数}出差信息{员工号,出差开始日期,出差结束日期,支出补贴费用}加班信息{员工号,加班时间,加班补贴费用}说明:考勤情况主要由每月按时到岗率计算,如有迟到、早退现象作相应扣减。一条完整的合同信息应当包含以下内容:合同{员工号,合同号,合同签订日期,合同有效时间}合同有效时间按年计算B.人员管理:主要用于对员工的各项信息进行管理,以下所有操作供管理员使用。B1.员工信息管理:员工信息查询:该功能不同于员工权限的信息查询,员工只能查询自己的信息,而该功能能够查询出所有员工的信息。新进员工管理:当企业新进一名员工时,人事管理部门应当在员工数据库中对该员工进行增加信息的操作,录入员工的所有信息。退休/辞退员工管理:当企业辞退一名员工时,人事管理部门应当从它所服务的工作部门中删除该员工的工作名额,结算支付其工资、奖金;同时补充新的员工,代替它的工作。当企业中一名员工退休时,人事管理部门应当从员工信息中删除其所有信息。员工信息变动:当员工信息发生变动时,人事部门应当对变动信息做出享用更改,以保证数据的一致性。B.2员工培训管理参训员工信息管理:此项包括参训员工的信息如下:参训员工的信息{员工号,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩}培训机构信息管理:企业请培训机构为员工培训,企业应当存有培训机构的相关信息。一条完整的培训机构信息应当包括:培训机构{培训机构号,培训机构名}一个培训机构存在多名培训教师,一条完整的培训教师的信息如下培训教师{培训机构号,培训教师号,教师名,教师职称}培训效果管理:员工培训结束后,由其培训教师给出培训成绩,作为其培训效果的考核,录入参训员工培训成绩一栏。B.3考核奖惩管理企业在对员工的考核过程中要对员工实施奖惩机制,鼓励企业的工作风气积极向上一条奖惩信息应当包括:奖惩信息{员工号、奖惩性质、奖惩原因、处理办法}从它所服务的工作部门中删除该员工的工作名额,结算支付其工资、奖金;同时补充新的员工,代替它的工作。C数据流程图(1)员工信息查询数据流图图1-1员工信息查询数据流图(2)人员信息管理数据流图图1-2人员信息管理子系统数据流图(2)登录管理的数据流图图1-3登录管理数据流图(3)员工培训管理的数据流图图1-4员工培训管理数据流图五、数据字典数据项表5.1数据项编号数据项名数据项含义数据类型取值范围与其他数据项关系1员工号唯一标识一名员工的编号int长度为6有唯一性,是主属性2员工姓名员工的真实姓名varchar长度为103性别员工的性别varchar[男|女]4年龄员工的年龄smallint18…1005学历员工的学历varchar[专科|本科|研究生|博士|硕士]6政治面貌员工的政治思想水平varchar[群众|团员|中共党员]7婚姻状况员工的婚姻状况varchar[已婚|未婚]9生理状况员工的健康状况水平varchar[健康|不健康]9参加工作时间员工进入单位开始参加工作的时间date1975年…2015年10工作岗位员工主要负责的工作类型varchar由公司的具体情况确定11月工资每月需要支付给员工的工资float不小于012奖金员工的奖金float不小于013出勤率员工每月的出勤率(到岗率)float0…1,百分数14迟到次数员工的月迟到次数int不小于015早退次数员工的月早退次数int不小于016出差开始日期员工出差开始的日期date由具体时间确定17出差结束日期员工出差结束的日期date由具体时间确定18支出补贴费用员工出差单位给予应有的补贴float不小于019加班开始时间员工加班开始的时间varchar由具体时间确定20加班补贴费用员工加班应有的补贴浮点数类型不小于021合同号每份合同都有一个编号,用于唯一标示一份合同int长度为6有唯一性,是主属性22合同签订日期单位与员工签订合同,合同开始生效的日期date由具体时间确定23合同有效时间合同在一段时间内是有效的date由具体时间确定24培训机构号每个培训机构都有一个编号,用于唯一标示一份培训机构int长度为6有唯一性,是主属性25培训教师号每个培训教师都有一个编号,用于唯一标示一个培训教师int长度为6有唯一性,是主属性26培训开始时间员工培训开始的时间date由具体时间确定27培训结束时间员工培训结束的时间date由具体时间确定28培训成绩员工培训后的成果由培训成绩确定int0…10029培训机构名为员工培训的培训机构的名称varchar不超过15个字30教师名参与培训的教师的真实姓名varchar不超过5个字31教师职称参与培训的教师的职称varchar不超过5个字32奖惩性质是奖励还是处分varchar不超过4个字33奖惩原因奖励或处分员工的原因varchar不超过30个字34处理办法奖励或处分的具体措施varchar不超过40个字35登录密码用户登录密码varchar不超过10位数据结构表5.2数据结构编号数据结构名属性1员工员工号,员工姓名,性别,年龄,学历,政治面貌,婚姻状况,生理状况2工作信息员工号,参加工作时间,工作岗位3薪水员工号,月工资,奖金4考勤状况员工号,出勤率,迟到次数,早退次数5出差信息员工号,出差开始日期,出差结束日期,支出补贴费用6加班信息员工号,加班时间,加班补贴费用4合同员工号,合同号,合同签订日期,合同有效时间5参训员工员工号,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩6培训机构培训机构号,培训机构名7培训教师培训机构号,培训教师号,教师名,教师职称8奖惩信息员工号、奖惩性质、奖惩原因、处理办法9登录信息员工号,登录密码数据流表5.3数据流编号数据流名输入输出1员工基本信息招新员工员工信息2当前员工工作员工信息员工信息3员工新工作更新员工信息员工信息4辞退员工辞退员工员工信息5员工参加培训参加培训培训信息6培训机构参与培训参加培训培训信息7管理员信息查询查询管理员信息管理员信息8培训教师信息查询查询培训教师信息培训教师信息9员工奖惩信息查询查询奖惩信息信息奖惩信息二、概要设计本程序开发企业人事管理系统,经过可行性分析、详细调查以及多次讨论,确定了该系统由登录管理子系统、人员管理子系统、管理员权限管理子系统三个子系统组成。本过程结构设计过程采用自底向上的设计方法,即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构.下面给出各个子系统的分析及分E-R图的设计及对其进行的各项调整。2.1登录管理子系统本开发小组成员经过调查、信息流程分析、数据收集,并结合需求分析,明确了——2.1.1子系统的功能:员工登录:功能供员工个人使用,主要用于方便员工查看个人信息。根据要求分析给出的数据流图,参照数据字典中的详细描述,给出登录管理子系统的分E-R图:图2-1登陆管理子系统E-R图2.1.2对E-R图调整的准则:现实世界中的事物能作为属性对待的尽量作为属性对待;属性和实体的划分:属性中不具有需要描述的信息,即属性是不可分的数据项,不再包含其他信息。2.1.3实体属性定义:登录信息{员工号,登录密码}2.2人员管理子系统本开发小组成员经过调查、信息流程分析、数据收集,并结合需求分析,明确了——2.2.1子系统的功能:A.员工考勤:考勤情况主要由每月按时到岗率计算,如有迟到、早退现象作相应扣减。B.信息管理:对员工的出差、加班、薪水进行管理、统计。C.可以进行对新员工、旧员工以及辞退等员工的信息查询;D.拥有员工培训功能管理,具体由其培训教师给出培训成绩,作为其培训效果的考核,录入参训员工培训成绩一栏。E.可以对人员的奖惩功过进行统计处理,便于公司运作。根据要求分析给出的数据流图,参照数据字典中的详细描述,给出经理管理部门的分E-R图:图2-2人员管理子系统E-R图2.2.2实体属性定义:员工信息{员工号,员工姓名,性别,年龄,学历,政治面貌,婚姻状况,生理状况}工作信息{员工号,参加工作时间,工作岗位}薪水{员工号,月工资,奖金}考勤状况{员工号,出勤率,迟到次数,早退次数}出差信息{员工号,出差开始日期,出差结束日期,支出补贴费用}加班信息{员工号,加班时间,加班补贴费用}合同{员工号,合同号,合同签订日期,合同有效时间}参训员工的信息{员工号,员工姓名,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩}培训机构信息管理:企业请培训机构为员工培训,企业应当存有培训机构的相关信息。一条完整的培训机构信息应当包括:培训机构{培训机构号,培训机构名}一个培训机构存在多名培训教师,一条完整的培训教师的信息如下培训教师{培训教师号,教师名,教师职称}培训效果管理:员工培训结束后,由其培训教师给出培训成绩,作为其培训效果的考核,录入参训员工培训成绩一栏。企业在对员工的考核过程中要对员工实施奖惩机制,鼓励企业的工作风气积极向上一条奖惩信息应当包括:奖惩信息{员工号、奖惩性质(是奖还是惩)、奖惩原因、处理办法}对E-R图调整的准则:现实世界中的事物能作为属性对待的尽量作为属性对待;属性和实体的划分:属性中不具有需要描述的信息,即属性是不可分的数据项,不再包含其他信息。2.3视图集成以上便是三个子系统的分E-R图设计及其调整的整个过程,接着要做的就是将所有的分E-R图进行综合,合成一个系统的总E-R图.由于本系统比较简单,分E-R图规模也比较小,所以E-R图合成过程采用一次将三个子系统分E-R图集成总E-R图的方式.分两步进行:第一步:合并。解决各分E-R图之间的冲突,将各分E-R图合并起来生成初步E-R图。各分E-R图之间的冲突主要有三类:属性冲突:(1)属性域冲突,即属性值的类型、取值范围或取值集合不同。由于本系统较简单,所以并不存在这种冲突;(2)属性取值单位冲突。由于本系统较简单,不存在这类冲突;命名冲突:同名异义:由于本系统较简单,所以不存在这类冲突;异名同义:由于本系统较小,所以不存在这类冲突;结构冲突:同一对象在不同应用中具有不同的抽象:本系统在需求分析阶段原本存在这种冲突,考虑到后期的简化合并,我们在设计各个分E-R图就早先解决了这个问题,即将在任何一个分E-R图中作为实体出现的属性全部作为实体;同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同:由于本系统较简单,所以并不存在这种冲突;第二步:修改和重构。消除不必要的冗余,生成基本E-R图。由于本系统涵盖的内容比较少,基本不存在冗余的现象,所以初步E-R图就是基本E-R图,不必再进行调整。下面给出E-R图。总E-R图:员工信息{员工号,员工姓名,性别,年龄,学历,政治面貌,婚姻状况,生理状况}工作信息{员工号,参加工作时间,工作岗位}登录信息{员工号,登录密码}薪水{员工号,月工资,奖金}考勤状况{员工号,出勤率,迟到次数,早退次数}出差信息{员工号,出差开始日期,出差结束日期,支出补贴费用}加班信息{员工号,加班时间,加班补贴费用}合同{员工号,合同号,签订合同员工的员工号,合同签订日期,合同有效时间}参训员工的信息{员工号,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩}培训机构{培训机构号,培训机构名}培训教师{培训机构号,培训教师号,教师名,教师职称}奖惩信息{员工号、奖惩性质(是奖还是惩)、奖惩原因、处理办法}由于在分E-R图中已经画出了属性,总E-R图就不再画出每个实体的属性,而只给出实体和联系图2-3总E-R图三、详细设计3.1.与总E-R图对应的关系模式3.1.1、实体所对应的关系模式:员工信息{员工号,员工姓名,性别,年龄,学历,政治面貌,婚姻状况,生理状况}工作信息{员工号,参加工作时间,工作岗位}登录信息{员工号,登录密码}薪水{员工号,月工资,奖金}考勤状况{员工号,出勤率,迟到次数,早退次数}出差信息{员工号,出差开始日期,出差结束日期,支出补贴费用}加班信息{员工号,加班时间,加班补贴费用}合同{员工号,合同号,签订合同员工的员工号,合同签订日期,合同有效时间}参训员工的信息{员工号,员工姓名,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩}培训机构{培训机构号,培训机构名}培训教师{培训教师号,教师名,教师职称}奖惩信息{员工号、奖惩性质(是奖还是惩)、奖惩原因、处理办法}说明:1.下加横线部分表示关系的码2.以上关系的详细内容说明请参照概念结构设计中的具体内容3.上面的各个关系对概念结构设计中的相关内容了作了修改,主要加了各个实体中间的联系,尤其是一对多的联系,纳为属性。3.1.2、联系所对应的关系模式:1)、把管理员和人员之间的n:m的预约联系转化为相应的关系模式如下:管理(人员号、管理员号、管理内容、管理时间);2)、其他联系处理说明如下:工资和员工之间的1:1联系与员工关系合并;薪水和出差之间的1:1联系与薪水关系合并;薪水和考勤的1:1联系与薪水关系合并;薪水和加班之间的1:1联系与薪水关系合并;员工和工作之间的n:1联系与工作关系合并;员工和培训机构的n:1联系与培训机构关系合并;培训机构和培训教师的n:1联系与培训教师关系合并;培训教师和奖惩信息之间的1:1联系与奖惩信息关系合并;3.2.优化后的数据模型按照数据依赖对关系模式进行逐一分析,并进行极小化处理:员工信息{员工号,员工姓名,性别,年龄,学历,政治面貌,婚姻状况,生理状况};BCNF工作信息{员工号,参加工作时间,工作岗位};BCNF登录信息{员工号,登录密码};BCNF薪水{员工号,月工资,奖金};BCNF考勤状况{员工号,出勤率,迟到次数,早退次数};BCNF出差信息{员工号,出差开始日期,出差结束日期,支出补贴费用};BCNF加班信息{员工号,加班时间,加班补贴费用};BCNF合同{员工号,合同号,签订合同员工的员工号,合同签订日期,合同有效时间};BCNF参训员工的信息{员工号,员工姓名,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩};BCNF培训机构{培训机构号,培训机构名};BCNF培训教师{培训教师号,教师名,教师职称};BCNF奖惩信息{员工号、奖惩性质、奖惩原因、处理办法};BCNF四、编码实现数据库SQL代码的具体实现:/*1.创建数据库*/ createdatabaseHumanResourcesManagement;/*创建企业人事管理数据库*/ useHumanResourcesManagement;/*使用刚刚创建的数据库*//*2.创建企业人事管理系统所需的各个数据表并插入初始数据*//*2.1创建员工信息表员工信息{员工号,员工姓名,性别,年龄,学历,户口所在地,政治面貌,婚姻状况,生理状况}*/ createtableStaff( Snointprimarykey,/*员工号主码*/ Snamevarchar(10),/*员工姓名*/ Ssexvarchar(5),/*性别*/ Sagesmallint,/*年龄*/ Sedubackvarchar(7),/*学历(教育背景)*/ Spcvarchar(5),/*政治面貌*/ Smsvarchar(5),/*婚姻状况*/ Spsvarchar(7)/*生理状况*/ ); /*2.2创建员工工作信息表工作信息{员工号,参加工作时间,工作岗位}*/createtableWorkInfo( Snoint,/*员工号外码*/ Sworktimedate,/*参加工作时间*/ Sworkvarchar(20),/*工作岗位*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);/*2.3创建员工合同信息表合同{员工号,合同号,合同签订日期,合同有效时间}*/createtableAgreement( Snoint,/*员工号外码*/ anoint,/*合同号*/ startdatedate,/*合同签订日期*/ activetimesmallint,/*合同有效时间*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);/*2.4创建员工登录信息表登录信息{员工号,登录密码}*/createtableLogInfo( Snoint,/*员工号外码*/ Spassint,/*登录密码*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);/*2.5创建员工薪水信息表薪水{员工号,月工资,奖金}*/createtableSalary( Snoint,/*员工号外码*/ Ssalaryfloat,/*月工资*/ Scommitfloat,/*奖金*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade); /*2.6创建员工考勤状况信息表考勤状况{员工号,出勤率,迟到次数,早退次数}*/createtableSattendance( Snoint,/*员工号外码*/ Sattendratefloat,/*出勤率*/ Slatenumint,/*迟到次数*/ Searlynumint,/*早退次数*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade); /*2.7创建员工出差信息表出差信息{员工号,出差开始日期,出差结束日期,支出补贴费用}*/createtableSbussinesstrip( Snoint,/*员工号外码*/ bstartdatedate,/*出差开始日期*/ benddatedate,/*出差结束日期*/ subsidyfloat,/*支出补贴费用*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);/*2.8创建员工加班信息表加班信息{员工号,加班开始时间,加班结束时间,加班补贴费用}*/createtableSovertime( Snoint,/*员工号外码*/ odateDate,/*加班开始时间*/ subsidyfloat,/*加班补贴费用*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);/*2.9创建参训员工信息表参训员工的信息{员工号,培训机构号,培训教师号,培训开始时间,培训结束时间,培训成绩}*/createtableStrain( Snoint,/*员工号外码*/ tnoint,/*培训机构号*/ tecnoint,/*培训教师号*/ tstartdatedate,/*培训开始时间*/ tenddatedate,/*培训结束时间*/ tgradesmallint,/*培训成绩*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);/*2.10创建培训机构信息表培训机构{培训机构号,培训机构名}*/createtableTrainingAgency( tnointprimarykey,/*培训机构号主码*/ tnamevarchar(30)/*培训机构名*/);/*2.11创建培训教师信息表培训教师{培训机构号,培训教师号,教师名,教师职称}*/createtableTrainingTeacher( tnoint,/*培训机构号*/ tecnoint,/*培训教师号*/ tecnamevarchar(10),/*培训机构名*/ /*设置tno外键约束*/ foreignkey(tno)referencesTrainingAgency(tno)ondeletecascadeonupdatecascade);/*2.12创建培训教师信息表奖惩信息{员工号、奖惩性质(是奖还是惩)、奖惩原因、处理办法}*/createtableAwardsAndPunishments( Snoint,/*员工号外码*/ qualityvarchar(5),/*奖惩性质*/ reasonvarchar(60),/*奖惩原因*/ handlingvarchar(80),/*处理办法*/ /*设置Sno外键约束*/ foreignkey(Sno)referencesStaff(Sno)ondeletecascadeonupdatecascade);1.员工表DAO类:StaffDAO.javapackage企业人事管理系统MVC.Staff.dao;importjava.sql.*;importjava.util.*;import企业人事管理系统MVC.Staff.vo.Staff;publicclassStaffDAO{ privateConnectionconn=null; privatePreparedStatementpstmt=null; privateResultSetrs=null; publicStaffDAO(Connectionconn)throwsException{ this.conn=conn; } /**doCreate()方法 *作用:在数据库的Staff表中添加一条员工信息 *参数:staff为员工类型的对象,包含了该员工的所有待添加信息 *返回值:该方法执行完成后,返回一个布尔型变量,如果操作成功返回true,否则返回false **/ publicbooleandoCreate(Staffstaff)throwsException{ booleanflag=false; Stringsql="insertintoStaffvalues(?,?,?,?,?,?,?,?)"; this.pstmt=conn.prepareStatement(sql); pstmt.setInt(1,staff.getSno()); pstmt.setString(2,staff.getSname()); pstmt.setString(3,staff.getSsex()); pstmt.setByte(4,staff.getSage()); pstmt.setString(5,staff.getSeduback()); pstmt.setString(6,staff.getSpc()); pstmt.setString(7,staff.getSms()); pstmt.setString(8,staff.getSps()); if(pstmt.executeUpdate()>0){ flag=true; } this.pstmt.close(); returnflag; } /**doDelete()方法 *作用:在数据库的Staff表中删除一条员工信息,要删除的行由传入的参数确定 *参数:Sno为待删除员工的员工号 *返回值:该方法执行完成后,返回一个布尔型变量,如果操作成功返回true,否则返回false **/ publicbooleandoDelete(intSno)throwsException{ booleanflag=false; Stringsql="deletefromStaffwhereSno=?"; this.pstmt=conn.prepareStatement(sql); pstmt.setInt(1,Sno); if(pstmt.executeUpdate()>0){ flag=true; } this.pstmt.close(); returnflag; } /**doUpdate()方法 *作用:在数据库的Staff表中更新一条员工信息 *参数:staff为员工类型的对象,包含了该员工的所有待修改信息 *返回值:该方法执行完成后,返回一个布尔型变量,如果操作成功返回true,否则返回false **/ publicbooleandoUpdate(Staffstaff)throwsException{ booleanflag=false; Stringsql="updateStaffsetSno=?,Sname=?,Ssex=?,Sage=?,Seduback=?,spc=?,sms=?,sps=?whereSno=?"; this.pstmt=conn.prepareStatement(sql); pstmt.setInt(1,staff.getSno()); pstmt.setString(2,staff.getSname()); pstmt.setString(3,staff.getSsex()); pstmt.setByte(4,staff.getSage()); pstmt.setString(5,staff.getSeduback()); pstmt.setString(6,staff.getSpc()); pstmt.setString(7,staff.getSms()); pstmt.setString(8,staff.getSps()); pstmt.setInt(9,staff.getSno()); if(pstmt.executeUpdate()>0){ flag=true; } this.pstmt.close(); returnflag; } /**findAll()方法 *作用:查询数据库的Staff表中所有员工信息 *参数:staff为员工类型的对象,包含了该员工的所有待修改信息 *返回值:该方法执行完成后,返回一个Staff集合,里面包含所有的查询结果 **/ publicList<Staff>findAll()throwsException{ List<Staff>all=newArrayList<Staff>(); Staffstaff=null; Stringsql="selectSno,Sname,Ssex,Sage,Seduback,spc,sms,spsfromStaff"; this.pstmt=conn.prepareStatement(sql); rs=pstmt.executeQuery(); while(rs.next()){ staff=newStaff(); staff.setSno(rs.getInt(1)); staff.setSname(rs.getString(2)); staff.setSsex(rs.getString(3)); staff.setSage(rs.getByte(4)); staff.setSeduback(rs.getString(5)); staff.setSpc(rs.getString(6)); staff.setSms(rs.getString(7)); staff.setSps(rs.getString(8)); all.add(staff); } this.rs.close(); this.pstmt.close(); returnall; } /**findById(intSno)方法 *作用:查询数据库的Staff表中某一员工信息 *参数:staff为员工类型的对象,包含了该员工的所有待修改信息 *返回值:该方法执行完成后,返回一个布尔型变量,如果操作成功返回true,否则返回false **/ publicStafffindById(intSno)throwsException{ Staffstaff=null; Stringsql="selectSno,Sname,Ssex,Sage,Seduback,spc,sms,spsfromStaffwhereSno=?"; this.pstmt=conn.prepareStatement(sql); pstmt.setInt(1,Sno); rs=pstmt.executeQuery(); if(rs.next()){ staff=newStaff(); staff.setSno(rs.getInt(1)); staff.setSname(rs.getString(2)); staff.setSsex(rs.getString(3)); staff.setSage(rs.getByte(4)); staff.setSeduback(rs.getString(5)); staff.setSpc(rs.getString(6)); staff.setSms(rs.getString(7)); staff.setSps(rs.getString(8)); } this.rs.close(); this.pstmt.close(); returnstaff; }}Test类(测试):TestDAO.javapackage企业人事管理系统MVC.Staff.test;importjava.util.List;importjavassist.bytecode.Descriptor.Iterator;import企业人事管理系统MVC.Staff.dao.StaffDAO;import企业人事管理系统MVC.Staff.vo.Staff;import企业人事管理系统MVC.dbc.DatabaseConnection;publicclassTestDAO{ publicstaticvoidmain(String[]args){ //测试增加 Staffstaff=newStaff(); staff.setSno(10); staff.setSname("张静"); staff.setSsex("男"); staff.setSage((byte)19); staff.setSeduback("本科"); staff.setSpc("党员"); staff.setSms("未婚"); staff.setSps("健康"); try{ if(newStaffDAO(newDatabaseConnection().getConnection()).doCreate(staff)){ System.out.println("insertok"); } else{ System.out.println("inserterror"); } }catch(Exceptione){ e.printStackTrace(); } //测试更新 Staffstaff=newStaff(); staff.setSno(10); staff.setSname("张静"); staff.setSsex("女"); staff.setSage((byte)34); staff.setSeduback("研究生"); staff.setSpc("团员"); staff.setSms("已婚"); staff.setSps("不健康"); try{ if(newStaffDAO(newDatabaseConnection().getConnection()).doUpdate(staff)){ System.out.println("updateok"); } else{ System.out.println("updateerror"); } }catch(Exceptione){ e.printStackTrace(); } //测试查找 //按员工号查找 Staffstaff=null; try{ staff=newStaffDAO(newDatabaseConnection().getConnection()).findById(10); System.out.println(staff.getSno()); System.out.println(staff.getSname()); System.out.println(staff.getSage()); System.out.println(staff.getSsex()); System.out.println(staff.getSeduback()); System.out.println(staff.getSpc()); System.out.println(staff.getSms()); System.out.println(staff.getSps()); }catch(Exceptione){ e.printStackTrace(); } //查找所有 try{ List<Staff>all=newStaffDAO(newDatabaseConnection().getConnection()).findAll(); Staffstaff=null; inti=0; while(i<all.size()){ staff=all.get(i); System.out.print(staff.getSno()); System.out.print(staff.getSname()); System.out.print(staff.getSage()); System.out.print(staff.getSsex()); System.out.print(staff.getSeduback()); System.out.print(staff.getSpc()); System.out.print(staff.getSms()); System.out.println(staff.getSps()); i++; } }catch(Exceptione){ e.printStackTrace(); } //测试删除 try{ if(newStaffDAO(newDatabaseConnection().getConnection()).doDelete(10)){ System.out.println("deleteok"); } else{ System.out.println("deleteerror"); } }catch(Exceptione){ e.printStackTrace(); } }}Servlet:StaffServlet.javapackage企业人事管理系统MVC.Staff.Servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;import企业人事管理系统MVC.Staff.dao.StaffDAO;import企业人事管理系统MVC.Staff.vo.Staff;import企业人事管理系统MVC.dbc.DatabaseConnection;import企业人事管理系统MVC.pagebean.PaginationDisplayBean;publicclassStaffServletextendsHttpServlet{ /**员工信息增删改查(CRUD)Servlet *此Servlet专门负责处理用户增删改查的请求,调用相应的JavaBean完成操作 *StaffDAO类进行增删改查具体操作的执行 **/ publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ /**doGet(HttpServletRequestrequest,HttpServletResponseresponse)方法 *用于处理用户的Get请求,根据用户的要求执行相应的操作 **/ resp.setContentType("text/html"); req.setCharacterEncoding("GBK"); Stringpages="../errors.jsp";//默认让其跳转到错误的处理页 Stringstatus=req.getParameter("status");//接收操作的状态 if(!(status==null||"".equals(status))){ if("listbypage".equals(status)){ this.listByPage(req,resp); } if("insert".equals(status)){ this.insert(req,resp); } if("update".equals(status)){ this.update(req,resp); } if("delete".equals(status)){ this.delete(req,resp); } }else{//如果没有的话才执行此跳转 req.getRequestDispatcher(pages).forward(req,resp); } } publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ /**doPost(HttpServletRequestrequest,HttpServletResponseresponse)方法 *用于处理用户的Post请求,根据用户的要求执行相应的操作 *doPost()方法和doGet()方法做相同的操作,不再重复写代码了 **/ this.doGet(req,resp); } publicvoidlistByPage(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ /**listall(HttpServletRequestreq,HttpServletResponseresp)方法 *用于调用DAO完成查找所有部门信息的操作,若中间出现任何异常,都会抛出 **/ Stringpages="../errors.jsp";//默认让其跳转到错误的处理页 try{ StaffDAOsdao=newStaffDAO(newDatabaseConnection().getConnection()); PaginationDisplayBeanpb=newPaginationDisplayBean(); intcurrentPage=1; if(req.getParameter("currentPage0")!=null) currentPage=Integer.parseInt(req.getParameter("currentPage0")); pb.setParameters(sdao.getAllCount(),currentPage); req.setAttribute("record",sdao.findByPage(currentPage,pb.getPageSize())); req.setAttribute("pageCount",pb.getPageCount()); req.setAttribute("currentPage",pb.getCurrentPage()); req.setAttribute("firstPage",pb.getFirstPage()); req.setAttribute("previousPage",pb.getPreviousPage()); req.setAttribute("nextPage",pb.getNextPage()); req.setAttribute("lastPage",pb.getLastPage()); pages="staffQuery.jsp"; }catch(Exceptione){ System.out.println("执行查找过程中出现异常"); e.printStackTrace(); System.out.println(""); } req.getRequestDispatcher(pages).forward(req,resp); } publicvoidinsert(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ /**insert(HttpServletRequestreq,HttpServletResponseresp)方法 *用于调用DAO完成增加一条部门信息的操作,若中间出现任何异常,都会抛出 **/ Stringpages="../errors.jsp";//默认让其跳转到错误的处理页 try{ Staffstaff=newStaff(); staff.setSno(Integer.parseInt(req.getParameter("Sno"))); staff.setSname(req.getParameter("Sname")); staff.setSsex(req.getParameter("Ssex")); staff.setSage(Byte.parseByte(req.getParameter("Sage"))); staff.setSeduback(req.getParameter("Seduback")); staff.setSpc(req.getParameter("Spc")); staff.setSms(req.getParameter("Sms")); staff.setSps(req.getParameter("Sps")); if(newStaffDAO(newDatabaseConnection().getConnection()).doCreate(staff)){ req.setAttribute("msg","插入成功"); }else{ req.setAttribute("msg","插入失败"); } pages="staff_operate_do.jsp"; }catch(Exceptione){ System.out.println("执行插入过程中出现异常"); e.printStackTrace(); System.out.println(""); } req.getRequestDispatcher(pages).forward(req,resp); } publicvoiddelete(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ /**delete(HttpServletRequestreq,HttpServletResponseresp)方法 *用于调用DAO完成删除一条部门信息的操作,若中间出现任何异常,都会抛出 **/ Stringpages="../errors.jsp";//默认让其跳转到错误的处理页 try{ intSno=Integer.parseInt(req.getParameter("sno")); if(newStaffDAO(newDatabaseConnection().getConnection()).doDelete(Sno)){ req.setAttribute("msg","删除成功"); }else{ req.setAttribute("msg","删除失败"); } pages="staff_operate_do.jsp"; }catch(Exceptione){ System.out.println("执行删除过程中出现异常"); e.printStackTrace(); System.out.println(""); } req.getRequestDispatcher(pages).forward(req,resp); } publicvoidupdate(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ /**update(HttpServletRequestreq,HttpServletResponseresp)方法 *用于调用DAO完成查找所有部门信息的操作,若中间出现任何异常,都会抛出 **/ Stringpages="../errors.jsp";//默认让其跳转到错误的处理页 try{ Staffstaff=newStaff(); staff.setSno(Integer.parseInt(req.getParameter("Sno"))); staff.setSname(req.getParameter("Sname")); staff.setSsex(req.getParameter("Ssex")); staff.setSage(Byte.parseByte(req.getParameter("Sage"))); staff.setSeduback(req.getParameter("Sno")); staff.setSpc(req.getParameter("Spc")); staff.setSms(req.getParameter("Sms")); staff.setSps(req.getParameter("Sps")); if(newStaffDAO(newDatabaseConnection().getConnection()).doUpdate(staff)){ req.setAttribute("msg","更新成功"); }else{ req.setAttribute("msg","更新失败"); } pages="staff_operate_do.jsp"; }catch(Exceptione){ System.out.println("执行更新过程中出现异常"); e.printStackTrace(); System.out.println(""); } req.getRequestDispatcher(pages).forward(req,resp); }}2.员工登录信息表DAO类:LogInfoDAO.javapackage企业人事管理系统MVC.LogInfo.dao;importjava.sql.*;importjava.util.*;import企业人事管理系统MVC.LogInfo.vo.LogInfo;publicclassLogInfoDAO{ privateConnectionconn=null; privatePreparedStatementpstmt=null; privateResultSetrs=null; publicLogInfoDAO(Connectionconn)throwsException{ this.conn=conn; } publicbooleanfindLogin(LogInfolf)throwsException{ booleanflag=false; Stringsql="select*fromLogInfowhereSno=?andSpass=?"; this.pstmt=conn.prepareStatement(sql); pstmt.setInt(1,lf.getSno()); pstmt.setString(2,lf.getSpass()); rs=pstmt.executeQuery(); if(rs.next()){ flag=true; } this.rs.close(); this.pstmt.close(); returnflag; } publicStringfindName(LogInfolf)throwsException{ Stringname=""; Stringsql="selectSnamefromStaffwhereSno=?"; this.pstmt=conn.prepareStatement(sql); pstmt.setInt(1,lf.getSno()); rs=pstmt.executeQuery(); if(rs.next()){ name=rs.getString(1); } this.rs.close(); this.pstmt.close(); returnname; } publicList<LogInfo>findAll()throwsException{ List<LogInfo>all=newArrayList<LogInfo>(); Stringsql="select*fromLogInfo"; this.pstmt=conn.prepareStatement(sql); rs=pstmt.executeQuery(); LogInfolf=null; while(rs.next()){ lf=newLogInfo(); lf.setSno(rs.getInt(1)); lf.setSpass(rs.getString(2)); all.add(lf); } this.rs.close(); this.pstmt.close(); returnall; }}3.所有页面(JSP)3.1登陆验证页面check.jsp<%@pagecontentType="text/html"pageEncoding="GBK"%><%@pageimport="企业人事管理系统MVC.LogInfo.vo.*"%><%@pageimport="企业人事管理系统MVC.LogInfo.dao.*"%><%@pageimport="企业人事管理系统MVC.dbc.*"%><html><head><title>用户登录验证</title></head><body><center><% request.setCharacterEncoding("GBK");//乱码解决%> <h1>登陆程序</h1><hr><% Stringrand=(String)session.getAttribute("rand");//从session中取出验证码 Stringcode=request.getParameter("code"); if(!rand.equalsIgnoreCase(code)){%> <scriptlanguage="javascript"> alert("请输入正确的验证码!"); window.location="login.html"; </script><% }%><% Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); LogInfoli=newLogInfo(); li.setSno(Integer.parseInt(username)); li.setSpass(password); LogInfoDAOldao=newLogInfoDAO(newDatabaseConnection().getConnection());%><% if(ldao.findLogin(li)){ //现在已经登陆成功 System.out.println(ldao.findName(li)); session.setAttribute("name",ldao.findName(li)); //保存mid%> <jsp:forwardpage="main.html"/><% }else{%><scriptlanguage="javascript"> alert("登录失败!"); window.location="login.html";
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 噎食急救与应急预案
- 投资者心理金融理财师考试试题及答案
- 2025银行从业资格证考试重点试题及答案
- 2025年特许金融分析师考试实务指导试题及答案
- 提升自我的2025年国际金融理财师考试复习路径试题及答案
- 银行信用危机应对试题及答案
- 2025年银行从业资格证考试的挑战与试题与答案
- DB41∕T 1729-2018 饲料添加剂葡萄糖氧化酶活力的测定 分光光度法
- 网络编辑师证书备考提升方法试题及答案
- 银行信贷风险模型的运用探讨试题及答案
- 桩基及基坑支护工程技术施工方案(三篇)
- 司法考试2024年知识点背诵版-民法
- 2024年耐磨铸件项目规划申请报告样文
- 凝中国心铸中华魂铸牢中华民族共同体意识-小学民族团结爱国主题班会课件
- 重度哮喘诊断与处理中国专家共识(2024)解读
- 新能源汽车电控系统的新型传感器应用考核试卷
- 苏教版数学一年级下学期期中测试卷10套及但
- 2024年全国职业院校技能大赛高职组(法律实务赛项)考试题库(含答案)
- 全过程工程咨询管理服务方案投标方案(技术方案)
- 中铁十五局集团安全质量部管理制度大全
- 2024老年烧创伤创面MEEK植皮技术规范
评论
0/150
提交评论