企业职工信息管理系统的设计与实现报告一.概述随着计算机技术、网络技术和信息技术的发展,越来越多地改善着现代人的观念。网络办公自动化系统是计算机技术和网络迅速发展的一个办公应用解决方案,它的主要目的是实现信息交流和信息共享,提供协同工作的手段,提高办公的效率,让人们从繁琐的有纸办公中解脱出来。现在我国的许多的机关单位的企业员工信息管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代,基于这种情况,我们实验小组研究开发了这套企业员工信息管理系统,希望这套系统能为小型公司的人事管理带来更多的方便。本软件基于B/S模式,Tomcat6,mysql5,J2EE5环境,利用MyEclipse完成J2EE的企业级技术开发,整合Hibernate3,struts2,spring三大框架完成的人事管理的系统.a)Hibernate完成数据库持久层的开发,使整个系统脱离了对底层数据库实现技术的依赖.b)struts2完成WEB层的开发,并利用其面向切面的拦截器技术完成权限验证等问题.c)Spring的IOC容器,利用其依赖注入,控制反转等特性,实现了业务逻辑层与WEB层的解耦,DAO,SERVICE,ACTION均通过spring管理其逻辑组件与相应的bean.二.需求分析1.功能需求:a)实现员工的注册与登陆,并具有权限的分级.b)新注册的员工并不安排在员工信息中,而是放入待审核一栏,等待管理员的审核,审核通过,分配其职位等信息,在此可以通过员工信息查询到该用户.c)具有对公司职位的管理功能,并且完成此功能需要管理员的权限.d)登陆的用户具有查询,浏览企业员工详细信息的权限,并且可以修改自己的详细信息一栏,如电话号码,登陆密码,年龄等权限,但不能修改自身的工作信息,如职位,状态,注册时间等.e)管理员可以审核提交注册申请的注册用户,可以修改比自己权限级别低的员工的工作信息,分配其职务,状态,并可删除相应用户的信息.f)可以通过员工姓名,职位,教育程度对员工进行模糊查询.2.模型图:a)数据库ER图b)用户操作模型图三.数据库逻辑设计1.数据库关系表2.基本表关系描述a)每个职员拥有个人信息表与工作信息表,其个人信息表与工作信息表是一对一关系,实现方式是利用hibernate的共享主键技术,即user_info的主键id并不是由数据库底层方式生成,而是依赖与work_info的主键id,其中work_info的主键由MySql的自动递增方式生成,每增加一名用户,先由数据库底层生成work_info的主键id,然后user_info根据已生成的work_info的id为自己的主键,实现了一对一关系,并在hibernate的支持下实现了级联更新与删除操作.b)每个员工的工作信息表与职位表是多对一关系,即工作信息表中position_id是position表的外键,一个职位可能存在多个员工.3.基本表源码a)user_info表CREATETABLE`user_info`(`id`int(11)NOTNULL,`login_name`varchar(20)DEFAULTNULL,`pass_word`varchar(20)DEFAULTNULL,`true_name`varchar(20)DEFAULTNULL,`sex`varchar(10)DEFAULTNULL,`tel_num`varchar(20)DEFAULTNULL,`age`int(3)DEFAULTNULL,`marriage`varchar(10)DEFAULTNULL,`educational`varchar(20)DEFAULTNULL,PRIMARYKEY(`id`))b)work_info表CREATETABLE`work_info`(`id`int(11)NOTNULLAUTO_INCREMENT,`position_id`int(11)DEFAULTNULL,`status`varchar(50)DEFAULTNULL,`create_time`datetimeDEFAULTNULL,`authority`int(3)DEFAULTNULL,PRIMARYKEY(`id`),KEY`position_id`(`position_id`),CONSTRAINT`work_info_ibfk_5`FOREIGNKEY(`position_id`)REFERENCES`position`(`id`)ONDELETESETNULLONUPDATESETNULL)c)position表CREATETABLE`position`(`id`int(11)NOTNULLAUTO_INCREMENT,`pos_name`varchar(50)DEFAULTNULL,PRIMARYKEY(`id`))四.软件功能设计1.软件功能图a)在菱形表示的区域中,表示执行改操作需要的权限.b)在白底矩形方框中,表示执行此操作的用户.c)在蓝底矩形方框中,表示此操作的名称.d)在椭圆形中,表示执行当前操作所用到的STRUTS2中的ACTION,ACTION中调用相应的业务逻辑完成各种功能.e)在圆角矩形方框中,表示渲染当前操作的JSP界面,并可在JSP中通过不同的链接调用不同的ACTION.该功能图在大体上表示了该人事管理系统的主要逻辑功能,其中一些小的跳转如在提交表单,权限效验时等等失败过程所执行的操作在考虑到图形的复杂性上并没有完全给出,但可以在源程序中看出详细的流程.2.详细设计JavaBean模块,该模块主要定义了各个主要的JavaBean,完成对各供需要信息的封装,便于业务逻辑的实现.包含四个标准的JavaBean和三个hibernate的数据库映射表文件.PageModel是一个分页模型,它封装了每个页面记录的数量,当前数据在数据库中总的数据条数,当前页码,下一页,上一页页码,以及当前页面封装的List类型的数据,用户JSP界面的迭代输出.//每个界面容纳记录数的上限privateintpageSize;//当前页码privateintnowPage;//总的页码privateinttotalPage;//上一页的页码privateintpreviousPage;//下一页的页码privateintnextPage;//封装此Bean的action名privateStringactionName;//当前页面的数据privateListUserInfouserList;publicPageModel(intnowPage,intpageSize,inttotalRecord,ListUserInfouserList){this.totalPage=(totalRecord+pageSize-1)/pageSize;this.nowPage=nowPage;this.pageSize=pageSize;this.userList=userList;//如果上一页比一小,则上一页还是一previousPage=(nowPage=1)?(1):(nowPage-1);//如果下一个的页码大于总页码,则下一个页码还是总页码数nextPage=(nowPage=totalPage)?(totalPage):(nowPage+1);}下面的三个bean,Position封装了职位信息并通过Position.hbm.xml完成与数据库的映射;UserInfo封装了员工个人信息并通过UserInfo.hbm.xml完成与数据库的映射;WorkInfo封装了工作信息并通过WorkInfo.hbm.xml完成与数据库的映射.publicclassUserInfo{//idprivateintid;//登陆名privateStringloginName;//真实姓名privateStringtrueName;//密码privateStringpassWord;//性别privateStringsex;//年龄privateintage;//电话号码privateStringtelNum;//婚姻privateStringmarriage;//学历privateStringeducational;//一对一映射的工作信息privateWorkInfoworkInfo;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetMarriage(){returnmarriage;}publicvoidsetMarriage(Stringmarriage){this.marriage=marriage;}publicStringgetEducational(){returneducational;}publicvoidsetEducational(Stringeducational){this.educational=educational;}publicWorkInfogetWorkInfo(){returnworkInfo;}publicvoidsetWorkInfo(WorkInfoworkInfo){this.workInfo=workInfo;}publicStringgetLoginName(){returnloginName;}publicvoidsetLoginName(StringloginName){this.loginName=loginName;}publicStringgetTrueName(){returntrueName;}publicvoidsetTrueName(StringtrueName){this.trueName=trueName;}publicStringgetPassWord(){returnpassWord;}publicvoidsetPassWord(StringpassWord){this.passWord=passWord;}publicStringgetSex(){returnsex;}publicvoidsetSex(Stringsex){this.sex=sex;}publicStringgetTelNum(){returntelNum;}publicvoidsetTelNum(StringtelNum){this.telNum=telNum;}publicUserInfo(){}publicUserInfo(intid,WorkInfoworkInfo){this.id=id;this.workInfo=workInfo;}}这里列出UserInfo的映射文件.hibernate-mappingclassname=com.personnelmanagement.bean.UserInfotable=user_infocatalog=personnel!—-由于与WorkInfo表是一一对应的,这里主键采用依赖WrokInfo主键的生成方式以实现一一对应--idname=idtype=java.lang.Integercolumnname=id/generatorclass=foreignparamname=propertyworkInfo/param/generator/idpropertyname=loginNametype=java.lang.Stringupdate=falsecolumnname=login_name//propertypropertyname=passWordtype=java.lang.Stringcolumnnam