本系列校训
互相伤害互相卷,玩命学习要你管,天生我才必有用,我命由我不由天!
毕业论文不怕难,毕业设计来铺垫!打磨技术精心写,拿证之后尽开颜!
毕设的技术铺垫
语言选择 | 收录专辑链接 | 卷的程度 |
---|---|---|
C | 张雪峰推荐选择了计算机专业之后-在大学期间卷起来-【大学生活篇】 | ★★★✫✰ |
JAVA | 黑马B站视频JAVA部分的知识范围、学习步骤详解 | ★★★★★ |
JAVAWEB | 黑马B站视频JAVAWEB部分的知识范围、学习步骤详解 | ★★★★★ |
SpringBoot | SpringBoot知识范围-学习步骤【JSB系列之000】 | ★★★★★ |
微信小程序 | 详细解析黑马微信小程序视频–【思维导图知识范围】 | ★★★✰✰ |
python | 详细解析python视频选择–【思维导图知识范围】 | ★★✫✰✰ |
php | PHP要怎么学–【思维导图知识范围】 | ★★★✫✰ |
环境及工具:
本系列环境
环境 | win11 |
---|---|
工具 | idea 2018 |
jdk | 1.8 |
数据库 | mysql5.5 |
maven | 无 |
项目导入方式 | 打开目录 |
数据库前端工具 | navicat |
效果图
项目说明
不会配置的,或者导入项目报错的,参见《IDEA如何配置JAVAWEB项目》
本系统是一个BS系统,使用了servlet技术,特色技术:frame, 仿文件夹菜单,treemenu的JS脚本,
特别适合JAVAWEB的课程设计/毕业设计
环境 | win11 |
---|---|
框架 | JAVAWEB/servlet/ |
前后端分离 | 否 |
数据库 | mysql5.5 |
maven | 无 |
项目导入方式 | 打开目录 |
数据库前端工具 | navicat |
系统分析
可行性分析
2.1.1 技术可行性
根据企业提出的系统功能、性能及实现系统的各种约束条件,根据新系统目标来衡量所需的技术是否具备。本系统是一个数据库管理和查询的系统,现有的技术已经较为成熟,硬件、软件的性能要求,环境条件等各项条件良好,估计利用现有技术条件应该可以达到该系统的功能目标。同时,考虑到给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发的。
因此,人力资源管理系统具有技术可行性。
2.1.2 经济可行性
根据公司有其管理系统可知,企业具有信息化的处理设施,并且拥有支持本系统的应用平台。因此无需再投入资金购买其他设施。
系统的开发基于本人对程序开发的实践学习而来,软件开发过程投入的成本不高,企业几乎无需资金投入,因此开发经费完全可以接受。
系统开发成功后将大大提高公司职员信息管理这方面工作的效率,减少成本,使企业管理走向正规化,信息化。这是企业发展强大的必经之路。
因此,人力资源管理系统也具有经济可行性。
2.1.3 社会可行性
本系统的社会可行性主要从法律因素、用户使用可行性两方面进行研究。
(1)法律因素
本系统是根据职员信息管理的实际工作情况开发研制的,是通过大量的调研得出的,系统的软件设计是在独立的环境下完成的,无可供抄袭的软件产品。
(2)用户使用可行性
本系统对用户的要求,除了需要具备使用电脑的能力外,并不需要特别的技术能力。了解到目前大多数公司有相关专业的大学生具备使用管理系统的能力,所以在投入使用前,无需对所有人员进行培训。这样既减少投入成本又简化了操作环节。
因此,人力资源管理系统具有社会可行性。
2.2 需求分析
2.2.1 需求分析的任务
需求分析的任务是对要解决的问题进行详细分析,弄清楚问题的要求,通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原手工处理的工作概况,明确用户的各种要求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户的如下需求:
(1)信息要求:指用户需要从数据库中获得信息的内容。由信息要求可以导出数据要求,即用户希望从数据库中获取什么数据,并由此决定在数据库中存储哪些数据。
(2)处理要求:指用户要进行哪些操作,要完成哪些处理功能。明确用户对数据有什么样的处理要求,从而确定数据之间的相互关系。
(3)安全性要求:由于公司人员较多,因此对系统进行操作的人员也较多。为了使职员信息管理工作安全、有效地完成,对系统的安全性就有较高的要求。所以系统要有较好的权限管理,保证系统的稳定安全。
(4)完整性要求:确定用户的最终需求是一件很困难的事情,这是因为一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么、不能做什么,因此往往不能准确的表达自己的需求,所提出的需求往往不断地变化。另一方面,设计人员缺少用户的专业知识,不能理解用户的真正需求,甚至误解用户的需求。因此在需求分析阶段要求用户的广泛参与,设计人员也要去熟悉客户的业务工作,并且不断深入地与用户进行交流,才能逐步确定用户的实际需求。
2.2.2 系统需求
为了保证公司人力资源管理系统符合用户的需求,必须全方位认真了解现有职员信息管理工作的过程,确保系统投入使用后,测评工作可以保质保量完成。通过对公司的实地观察、跟班作业、与公司领导及普通员工的面谈以及询问等的形式,确定本系统必须满足以下要求:
(1)采用结构化的分析方法进行面向数据流的分析。主要有分层数据流程图和数据字典组成,帮助更好理解系统功能。
(2)系统需要高度的安全保障。由于公司人员较多,因此对系统进行操作的人员也较多。为了使信息管理工作安全、有效地完成,系统要有较好的权限管理,保证系统的稳定安全。
(3)系统需具有良好的人机界面。由于公司职员多数是四十岁以上的中年员工,对计算机不是特别的熟悉,所以要求系统一定要有人性化的界面,操作要易于进行,确保用户在未了解过多的操作方法的情况下就可以熟练使用系统。
(4)系统需要具备易用性。由于系统的投入使用是要简化传统的手工操作,提高工作效率,所以系统的使用要快捷方便,系统需具有相关提示,用户不需要特别训练,只需通过简单的操作就可完成相关操作。
(5)系统需具有的功能有员工信息管理功能、月度考核管理功能、绩效考核管理功能、薪酬福利管理功能、调查项目管理功能。
总体设计
JAVAWEB是很多的地方还有着很强的生命力,在高校的课程里也有着不小的作用 ,并不代表着功能比springBoot 差,只能说是框架更复杂。
系统设计总体思想
用户根据自己的用户名和密码进行登录,如果输入的用户名或者密码错误,系统都会自动给出提示框提示登录错误。如果登录成功,根据不同用户的操作权限,登录到页面时有不同的功能。以管理员身份登录的用户可以对密码进行修改、增加或删除系统管理员、对员工信息进行管理并可为新增加的员工分配普通员工的账号和密码、对绩效考核进行管理、对薪酬福利进行管理、对调查项目进行管理、管理员工年月度考核信息。而以普通员工身份登录的用户则只可以查看自己的薪酬、查看自己的考核信息、参与公司的调查。
(1)系统采用B/S模式
B/S(Browser/Server)模式即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、速度快、效果优。
(2)系统采用三层结构开发模式
三层结构通常是指数据访问层、业务逻辑层和表示层,各层之间相互依赖。三层结构是基于模块化程序设计的思想,为实现分解应用程序的需求而形成的一种标准模式的模块划分方法。三层结构的优点在于不必为了业务逻辑上的微小变化修改整个程序,只需要修改业务逻辑层的一个函数或者一个过程;增强了代码的可重用性;便于不同层次的开发人员之间的合作,只要遵循一定的接口标准就可以进行并行开发了。
(3)功能实用、操作简单、易于维护和管理模式简洁
系统应保证数据可靠、完整,安装调试方便,系统与环境的适应性、可调整性与系统的稳定性相结合。在设计系统界面时力求简洁明了且带有必要的操作提示,以方便用户使用。
(4)数据的可靠性、易维护性和安全性
较好的服务器产品、大型数据库的使用,为数据的可靠性提供了良好的保证。数据库结构的合理设计以及MySQL方便的应用,在很大程度上解决了对数据维护、整理和处理的难题,又能方便查询数据来源。本系统是基于B/S方式的应用系统,在安全性方面有更高的要求,应该从系统设计和用户权限管理等方面保证系统的数据安全。
(5)友好的用户界面及操作的灵活性
系统界面设计友好,功能尽可能细化和分离,采用模块化设计,数据库结构中尽量提高数据的独立性。这些措施的采用,使得本系统具有了较强的可操纵性,无需计算机专业人员即可使用,减少了人员培训过程及开销;系统具有了较强的可扩展性,可根据实际情况和管理的需要对系统进行扩充;系统具有了较强的可塑性,可根据管理方式或不同企业的管理特点对系统进行必要的修改,以适应各种变革带来的不同的需要。
JavaScrip语言
Javascript是基于对象的脚本语言,主要是基于客户端运行的,用户点击带有Javascript的网页,网页里的Javascript就传到浏览器,由浏览器对此作处理。它的代码可以直接嵌入到HTML命令中,最大特点是可以方便操纵网站上的元素,并与Web浏览器交互,同时JavaScrip可以捕捉用户操作并作出反映。
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常常用来给HTML网页添加动态功能,比如响应用户的各种操作。JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。在HTML基础上,使用Javascript可以开发交互式Web网页。Javascript的出现使得网页和用户之间实现了一种实时的、动态的关系,使网页中包含更多 的活跃元素和更加精彩的内容。在本系统中很多地方使用了javascript技术,比如说,检验用户输入数据的有效性,是否重复,是否为空等等。
JSP技术
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Servlet一样,是在服务器端执行的,通常返回给客户端就是一个HTML文本,因此客户端只要有浏览器能浏览。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。JSP技术的优点:
(1)运行方便,编写好之后,不用做任何修改就可在系统上运行。
(2)具有强大的适应性,支持多平台并且可以再任意环境中进行部署。
(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。
(4)多样化和功能强大的开发工具支持。Java已经有了许多非常优秀的开发工具,并且其中许多已经可以顺利的运行于多种平台之下
(5)支持服务器端的组件。web应用首先需要强大的服务器端的组件来支持,开发人员必须需要利用其他的工具设计来实现复杂功能的组件并供web页面调用,来增强系统性能。JSP可以使用非常成熟的JAVA BEANS 组件来实现比较复杂商务功能。
MVC模式
为了满足系统对先进性、安全性、跨平台性、可扩展性、可移植性、分布式等方面的要求,系统总体架构设计采用先进的基于java的B/S的三层体系结构。MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)[9]。 MVC模式目的就是为了实现Web系统的职能的分工。Model层实现系统中业务的逻辑,通常可以用JavaBean或EJB来实现。 View层用于用户交互,通常用JSP来实现。 Controller层是Model与View之间的沟通桥梁,它可以直接分派用户请求并且选择合适的视图以用于显示,同时它也可以解释用户输入并将它们映射为模型层可执行的操作。Web浏览技术已经广泛地应用于Internet,并被广大用户接受和使用。Web技术是随http和html一起出现的。Web服务器利用http传递html文件,Web浏览器使用http检索html文件。Web服务器一旦检索到信息,Web浏览器就会以静态和交互(如文本、图像)方式显示各种对象。在电子商务业务进行过程中,需要在各种贸易角色之间浏览和交换各种信息,此时就要使用Web浏览技术。 这种模型使系统结构更加清楚,分工更加明确,有利于整个系统后期的维护和升级。
MVC(Model View Controller)模型(model)-视图(view)-控制器(controller)MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC 的目的是将同一个程序可以使用不同的表现形式M和V的实现代码分离,。比如一批统计数据分别用柱状图、饼图来表示。C存在的目是确保M和V的同步,一旦M改变,V应该同步更新。模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到广泛的使用 ColdFusion 和 PHP 的开发者的喜爱。模型-视图-控制器模式是一个有用的模型,它的好处很多。
三层体系结构由浏览器、web服务器和数据库组成,并结合HTML语言、jsp、JavaScript脚本语言、Ajax、ODBC等技术,后台的数据库采用微软的SQL Server 2005,系统一般的MVC模型如图1-1所示。
如图1-1可知,用户界面层是用户和整个系统的接口,客户端只需安装通用的浏览器即可建立与本系统的连接。业务逻辑层负责处理用户输入的信息,或将这些信息发送给数据库层进行保存,或调用数据库层中的函数再次读出这些数据。数据访问层是整个体系的最底层,它主要实现与数据库交互,即完成数据库的增删改查功能,MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。分层概念视图,模型,控制器。
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和像HTML,XML/XSL,WML等一些标识语言和Web services。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。MVC模型还可以实现软件工程的高内聚,低耦合的终极目标。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器接受用户的输入并调用模型和视图去完成用户需求。所以当单击网页中的超链接或者发送表单时,控制器本身其实并不输出任何东西也不做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求自己本身并不参与业务逻辑处理,然后再确定用哪个视图来显示返回的数据。
MVC的优点:
1)低耦合性
2)可适用性
3)较低成本
4)快速部署
5)可维护性
系统设计概述
系统采用MVC设计模式,层次分明,View层主要由JSP技术实现,一个模块三个JSP页面,相互跳转。Control层由Servlet进行控制,处理请求,得到提交的数据,调用Model封装的函数,Model则是封装了对数据库的操作,逻辑清晰,实现前台页面效果的技术是jQuery,例如按钮切换,判断输入密码是否一致。jQuery是优秀的前端框架,开发小型系统的首选,易操作。所以,本系统具有很高的执行效率,为用户提供一个方便快捷的管理平台。
在服务器端,系统使用JDBC中间件访问数据库,数据库服务器定义了本系统所需要的事务逻辑和数据逻辑。本系统使用JSP技术作为表现手段,服务器采用Tomcat 8.0作为JSP引擎,系统业务逻辑由JavaBean 组件完成,使用JDBC 驱动程序访问数据库。由于系统测试需要成熟的数据库支持,因此系统采用mysql数据库作为数据库服务器。
系统设计是在系统分析基础上通过抽象得到具体的过程,同时,还考虑到系统所实现的环境和主客观条件。
系统设计阶段主要目的是将系统分析阶段所提出的反映用户信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理方案。
这一阶段的主要任务就是从管理信息系统的总体目标出发,根据系统分析阶段对系统逻辑功能的需求,考虑到经济、技术和环境等方面的条件,可以确定系统的总体结构和系统组成部分的方案,合理选择计算机和通信设备,提出系统的实施计划,确保系统总体目标的实现。
系统设计工作的特点:
1)在系统设计的阶段,大量的工作还是技术性的。
2)允许用户对已提出信息的需求做非原则性修改或着补充。
3)用户在操作使用环境等方面的要求也要在系统设计阶段加以说明并在系统的技术方案中得到反映,因此系统设计人员必须同管理环境打交道。
4)系统设计的环境是管理环境和技术环境的结合,是系统设计工作的重要特点也是整个系统成功的一个必不可缺的环节。
系统设计原则
1) 易用性原则:方便上网客户浏览和操作,最大限度地减轻后台管理人员的负担,做到部分业务的自动化处理,提供良好的用户体验。
2) 阶段开发原则:系统框架和数据结构全面设计,具体功能实现分阶段进行。
3) 业务规范化原则:在系统设计的同时,也为将来的业务流程制定了较为完善的规范,具有较强的实际操作性,也给整个系统带来安全性。
4) 可扩展性原则:系统设计要考虑到业务未来发展的需要,要尽可能设计得简明,各个功能模块间的耦合度小,便于系统的扩展。如果存在旧有的数据库系统,则需要充分考虑兼容性,比如说浏览器的兼容。
5) 业务完整性原则:对于业务进行中的特殊情况能够做出及时、正确的响应,保证业务数据的完整性,减少数据的误读。
系统采用三层结构开发模式
三层结构通常是指数据访问层、业务逻辑层和表示层,各层之间相互依赖。三层结构是基于模块化程序设计的思想,为实现分解应用程序的需求而形成的一种标准模式的模块划分方法。三层结构的优点在于不必为了业务逻辑上的微小变化修改整个程序,只需要修改业务逻辑层的一个函数或者一个过程;增强了代码的可重用性;便于不同层次的开发人员之间的合作,只要遵循一定的接口标准就可以进行并行开发了。
(3)功能实用、操作简单、易于维护和管理模式简洁
系统应保证数据可靠、完整,安装调试方便,系统与环境的适应性、可调整性与系统的稳定性相结合。在设计系统界面时力求简洁明了且带有必要的操作提示,以方便用户使用。
(4)数据的可靠性、易维护性和安全性
较好的服务器产品、大型数据库的使用,为数据的可靠性提供了良好的保证。数据库结构的合理设计以及MySQL方便的应用,在很大程度上解决了对数据维护、整理和处理的难题,又能方便查询数据来源。本系统是基于B/S方式的应用系统,在安全性方面有更高的要求,应该从系统设计和用户权限管理等方面保证系统的数据安全。
(5)友好的用户界面及操作的灵活性
系统界面设计友好,功能尽可能细化和分离,采用模块化设计,数据库结构中尽量提高数据的独立性。这些措施的采用,使得本系统具有了较强的可操纵性,无需计算机专业人员即可使用,减少了人员培训过程及开销;系统具有了较强的可扩展性,可根据实际情况和管理的需要对系统进行扩充;系统具有了较强的可塑性,可根据管理方式或不同企业的管理特点对系统进行必要的修改,以适应各种变革带来的不同的需要。
系统功能模块
人力资源管理管理系统普通员工具有系统属性查询、我的薪酬查询功能、我的月度考核查询、参与公司的调查,普通员工功能结构图如图3-3所示。
以管理员身份登录的用户可以查看系统属性、对密码进行修改、增加或删除系统管理员、对员工信息进行管理并可为新增加的员工分配普通员工的账号和密码、对绩效考核进行管理、对薪酬福利进行管理、对调查项目进行管理、录入员工年月度考核信息。
,其功能结构图如图3-4所示。
数据库结构设计
采用JDBC连接数据库的方式
核心代码部分
文件编码问题。如果有乱码请设置项目编码
项目文件目录如下:
关键核心代码:
应用软件的核心代码是指这个程序最关键部分的代码。例如WinRAR,它的核心代码就是压缩算法部分,而诸如用户界面、操作系统移植等部分就无足轻重了。
商城类的核心代码是指业务层的代码,比如你商城的核心代码就是:商品、购物车、创建订单、支付这些代码就是核心代码。
package com.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import com.dao.DB;
import com.orm.TAdmin;
import com.orm.Yuangong;
public class loginService
{
public String login(String userName,String userPw,int userType, HttpSession session)
{
System.out.println("userType"+userType);
try
{
Thread.sleep(700);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
String result="no";
if(userType==0)//系统管理员登陆
{
String sql="select * from t_admin where userName=? and userPw=?";
Object[] params={userName,userPw};
DB mydb=new DB();
mydb.doPstm(sql, params);
try
{
ResultSet rs=mydb.getRs();
boolean mark=(rs==null||!rs.next()?false:true);
if(mark==false)
{
result="no";
}
else
{
result="yes";
TAdmin admin=new TAdmin();
admin.setUserId(rs.getInt("userId"));
admin.setUserName(rs.getString("userName"));
admin.setUserPw(rs.getString("userPw"));
// WebContext ctx = WebContextFactory.get();
// HttpSession session=ctx.getSession();
session.setAttribute("userType", 0);
session.setAttribute("admin", admin);
}
rs.close();
}
catch (SQLException e)
{
System.out.println("登录失败!");
e.printStackTrace();
}
finally
{
mydb.closed();
}
}
if(userType==1)//员工登陆
{
System.out.println("ddddddddddd");
String sql="select * from t_yuangong where del='no' and loginName=? and loginPw=?";
Object[] params={userName,userPw};
DB mydb=new DB();
mydb.doPstm(sql, params);
try
{
ResultSet rs=mydb.getRs();
boolean mark=(rs==null||!rs.next()?false:true);
if(mark==false)
{
result="no";
}
else
{
result="yes";
Yuangong yuangong=new Yuangong();
yuangong.setId(rs.getInt("id"));
yuangong.setName(rs.getString("name"));
yuangong.setSex(rs.getString("sex"));
yuangong.setAge(rs.getString("age"));
yuangong.setTel(rs.getString("tel"));
yuangong.setAddress(rs.getString("address"));
yuangong.setZhiwei(rs.getString("zhiwei"));
yuangong.setQuanxian(rs.getInt("quanxian"));
yuangong.setLoginName(rs.getString("loginName"));
yuangong.setLoginPw(rs.getString("loginPw"));
// WebContext ctx = WebContextFactory.get();
// HttpSession session=ctx.getSession();
session.setAttribute("userType", 1);
session.setAttribute("yuangong", yuangong);
}
rs.close();
}
catch (SQLException e)
{
System.out.println("登录失败!");
e.printStackTrace();
}
finally
{
mydb.closed();
}
}
if(userType==2)
{
}
return result;
}
public String adminPwEdit(String userPwNew)//修改个人密码
{
System.out.println("DDDD");
try
{
Thread.sleep(700);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
WebContext ctx = WebContextFactory.get(); //创建一个可以获取session的实例ctx
//WebContext是DWR中获取request,session等的辅助类。
HttpSession session=ctx.getSession();
TAdmin admin=(TAdmin)session.getAttribute("admin");
String sql="update t_admin set userPw=? where userId=?";
Object[] params={userPwNew,admin.getUserId()};
DB mydb=new DB();
mydb.doPstm(sql, params);
return "yes";
}
public List yuangongSelect()
{
List yuangongList=new ArrayList();
String sql="select * from t_yuangong where del='no'";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql, params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
Yuangong yuangong=new Yuangong();
yuangong.setId(rs.getInt("id"));
yuangong.setName(rs.getString("name"));
yuangongList.add(yuangong);
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
return yuangongList;
}
}
前端页面的部分
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<style type="text/css">
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color: #1D3647;
}
.login_top_bg {background-image: url(<%=path %>/img/login-top-bg.gif);background-repeat: repeat-x;}
.body {
background-color: #EEF2FB;
left: 0px;
top: 0px;
right: 0px;
bottom: 0px;
}
.login-buttom-bg {
background-image: url(<%=path %>/img/login-buttom-bg.gif);
background-repeat: repeat-x;
}
.login-buttom-txt {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
color: #ABCAD3;
text-decoration: none;
line-height: 20px;
}
.login_txt {
font-family: Arial, Helvetica, sans-serif;
font-size: 13px;
line-height: 25px;
color: white;
}
.Submit {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #629DAE;
text-decoration: none;
background-image: url(<%=path %>/img/Submit_bg.gif);
background-repeat: repeat-x;
}
.login_bg {
background-image: url(<%=path %>/img/login_bg.jpg);
background-repeat: repeat-x;
}
.login_bg2 {
background-image: url(<%=path %>/img/login-content-bg.gif);
background-repeat: no-repeat;
background-position: right;
}
.admin_txt {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #FFFFFF;
text-decoration: none;
height: 38px;
width: 100%;
position: 固定;
line-height: 38px;
}
.login_txt_bt {
font-family: Arial, Helvetica, sans-serif;
font-size: 25px;
line-height: 25px;
color: #666666;
font-weight: bold;
}
.admin_topbg {
background-image: url(<%=path %>/img/top-right.gif);
background-repeat: repeat-x;
}
.txt_bt {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
font-weight: bold;
color: #000000;
text-decoration: none;
}
.left_topbg {
background-image: url(<%=path %>/img/content-bg.gif);
background-repeat: repeat-x;
}
.admin_toptxt {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #4A8091;
height: 18px;
width: 100%;
overflow: hidden;
position: 固定;
}
.left_bt {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
font-weight: bold;
color: #395a7b;
}
.left_bt2 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
font-weight: bold;
color: #333333;
}
.titlebt {
font-size: 12px;
line-height: 26px;
font-weight: bold;
color: #000000;
background-image: url(<%=path %>/img/top_bt.jpg);
background-repeat: no-repeat;
display: block;
text-indent: 15px;
padding-top: 5px;
}
.left_txt {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
color: #666666;
}
.left_txt2 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
color: #000000;
}
.nowtable {
background-color: #e1e5ee;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-top-color: #bfc4ca;
border-right-color: #bfc4ca;
border-bottom-color: #bfc4ca;
border-left-color: #bfc4ca;
}
.left_txt3 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
color: #003366;
text-decoration: none;
}
.left_ts {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
font-weight: bold;
color: #FF6600;
}
.line_table {
border: 1px solid #CCCCCC;
}
.sec1 {
CURSOR: hand;
COLOR: #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
border: 1px solid #B5D0D9;
background-image: url(<%=path %>/img/right_smbg.jpg);
background-repeat: repeat-x;
}
.sec2 {
FONT-WEIGHT: bold;
CURSOR: hand;
COLOR: #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 25px;
background-color: #e2e7ed;
border: 1px solid #e2e7ed;
}
.main_tab {
COLOR: #000000;
BACKGROUND-COLOR: #e2e7ed;
border: 1px solid #e2e7ed;
}
.MM a {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 26px;
color: #666666;
background-image: url(<%=path %>/img/menu_bg.gif);
background-repeat: no-repeat;
list-style-type: none;
list-style-image: none;
}
a:link {
font-size: 12px;
line-height: 25px;
color: #333333;
text-decoration: none;
}
a:hover {
font-size: 12px;
line-height: 25px;
color: #666666;
text-decoration: none;
}
a:visited {
font-size: 12px;
line-height: 25px;
color: #333333;
text-decoration: none;
}
.MM a:link {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 26px;
color: #666666;
background-image: url(<%=path %>/img/menu_bg.gif);
background-repeat: no-repeat;
list-style-type: none;
list-style-image: none;
}
</style>
<script type='text/javascript' src='<%=path %>/dwr/interface/loginService.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path %>/dwr/util.js'></script>
<script language="javascript">
function check1()
{
if(document.ThisForm.userName.value=="")
{
alert("请输入用户名");
document.ThisForm.userName.focus();
return false;
}
if(document.ThisForm.userPw.value=="")
{
alert("请输入密码");
document.ThisForm.userPw.focus();
return false;
}
if(document.ThisForm.userType.value=="-1")
{
alert("请选择登陆身份");
document.ThisForm.userType.focus();
return false;
}
document.getElementById("indicator").style.display="block";
document.ThisForm.submit();
}
function callback(data)
{
document.getElementById("indicator").style.display="none";
if(data=="no")
{
alert("用户名或密码错误");
}
if(data=="yes")
{
alert("通过验证,系统登录成功");
window.location.href="<%=path %>/loginSuccess.jsp";
}
}
</script>
</head>
<body>
<table width="100%" height="166" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="42" valign="top">
<table width="100%" height="42" border="0" cellpadding="0" cellspacing="0" class="login_top_bg">
<tr>
<td width="1%" height="21"> </td>
<td height="42"> </td>
<td width="17%"> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top">
<table width="100%" height="532" border="0" cellpadding="0" cellspacing="0" class="login_bg">
<tr>
<td width="49%" align="right"><table width="91%" height="532" border="0" cellpadding="0" cellspacing="0" class="login_bg2">
<tr>
<td height="138" valign="top"><table width="89%" height="427" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="149"> </td>
</tr>
<tr>
<td height="80" align="right" valign="top"></td>
</tr>
<tr>
<td height="198" align="right" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="35%"> </td>
<td height="25" colspan="2" class="left_txt"></td>
</tr>
<tr>
<td> </td>
<td height="25" colspan="2" class="left_txt"></td>
</tr>
<tr>
<td> </td>
<td height="25" colspan="2" class="left_txt"></td>
</tr>
<tr>
<td> </td>
<td width="30%" height="40"></td>
<td width="35%"></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table></td>
<td width="1%" > </td>
<td width="50%" valign="bottom"><table width="100%" height="59" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="4%"> </td>
<td width="96%" height="38"><span class="login_txt_bt">人力资源管理系统</span></td>
</tr>
<tr>
<td> </td>
<td height="21"><table cellSpacing="0" cellPadding="0" width="100%" border="0" id="table211" height="328">
<tr>
<td height="164" colspan="2" align="middle">
<FORM name="ThisForm" action="<%=path %>/adminLogin.action" method=post>
<table cellSpacing="0" cellPadding="0" width="100%" border="0" height="143" id="table212">
<tr>
<td width="13%" height="38" class="top_hui_text"><span class="login_txt">账号: </span></td>
<td height="38" colspan="2" class="top_hui_text"><input type="text" name="userName" style="width: 140px;"></td>
</tr>
<tr>
<td width="13%" height="35" class="top_hui_text"><span class="login_txt">密码: </span></td>
<td height="35" colspan="2" class="top_hui_text"><input type="password" name="userPw" style="width: 140px;">
</tr>
<tr>
<td width="13%" height="35" ><span class="login_txt">身份:</span></td>
<td height="35" colspan="2" class="top_hui_text">
<select class="INPUT_text" name="userType" style="width: 140px;">
<option value="-1">请选择</option>
<option value="0">管理员</option>
<option value="1">员 工</option>
</select>
</td>
</tr>
<tr>
<td height="35" > </td>
<td width="70%" height="35" >
<input name="button" type="button" id="Submit" value="登 陆" onClick="check1()">
<img id="indicator" src="<%=path %>/img/loading.gif" style="display:none"/>
<input name="cs" type="reset" class="button" id="cs" value="重 置">
</td>
<td width="30%"></td>
</tr>
</table>
<br>
</form></td>
</tr>
<tr>
<td width="433" height="164" align="right" valign="bottom"></td>
<td width="57" align="right" valign="bottom"> </td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
主页代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<FRAMESET id=index border=0 frameSpacing=0 rows=120,* frameBorder=no>
<FRAME id=topFrame name=topFrame src="<%=path %>/admin/top.jsp" noResize scrolling=no>
<FRAMESET border=0 frameSpacing=0 frameBorder=no cols=20%,*>
<FRAME id=leftFrame name=leftFrame src="<%=path %>/admin/left.jsp" noResize scrolling=no>
<FRAME id=mainFrame name=mainFrame src="<%=path %>/admin/right.jsp" noResize scrolling=no>
</FRAMESET>
</FRAMESET>
<noframes></noframes>
</html>
左侧菜单使用了tree.js
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page isELIgnored="false" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<STYLE type=text/css>
{
FONT-SIZE: 12px
}
#menuTree A {
COLOR: #566984; TEXT-DECORATION: none
}
</STYLE>
<SCRIPT src="<%=path%>/js/TreeNode.js" type=text/javascript></SCRIPT>
<SCRIPT src="<%=path%>/js/Tree.js" type=text/javascript></SCRIPT>
</head>
<BODY style="BACKGROUND-POSITION-Y: -120px; BACKGROUND-REPEAT: repeat-x" topmargin="5">
<TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%">
<TR>
<TD width=10 height=29>
<IMG src="<%=path %>/img/bg_left_tl.gif">
</TD>
<TD
style="FONT-SIZE: 18px; BACKGROUND-IMAGE: url(<%=path %>/img/bg_left_tc.gif); COLOR: white; FONT-FAMILY: system">
Main Menu
</TD>
<TD width=10>
<IMG src="<%=path %>/img/bg_left_tr.gif">
</TD>
</TR>
<TR>
<TD style="BACKGROUND-IMAGE: url(<%=path %>/img/bg_left_ls.gif)"></TD>
<TD id=menuTree
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; HEIGHT: 100%; BACKGROUND-COLOR: white"
vAlign=top></TD>
<TD style="BACKGROUND-IMAGE: url(<%=path %>/img/bg_left_rs.gif)"></TD>
</TR>
</TABLE>
<SCRIPT type=text/javascript>
var tree = null;
var root = new TreeNode('系统菜单');
<c:if test="${sessionScope.userType==0}">
var fun2 = new TreeNode('修改个人密码');
var fun21 = new TreeNode('修改个人密码', '<%=path %>/admin/userinfo/userPw.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
fun2.add(fun21);
root.add(fun2);
var fun4 = new TreeNode('员工信息管理');
var fun41 = new TreeNode('员工信息管理', '<%=path %>/yuangong?type=yuangongMana', 'tree_node.gif', null, 'tree_node.gif', null);
var fun42 = new TreeNode('员工信息添加', '<%=path %>/admin/yuangong/yuangongAdd.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
var fun43 = new TreeNode('员工信息查询', '<%=path %>/admin/yuangong/yuangongSearch.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
fun4.add(fun41);
fun4.add(fun42);
fun4.add(fun43);
root.add(fun4);
var fun5 = new TreeNode('绩效考核管理');
var fun51 = new TreeNode('绩效考核管理', '<%=path %>/jixiao?type=jixiaoMana', 'tree_node.gif', null, 'tree_node.gif', null);
var fun52 = new TreeNode('绩效考核添加', '<%=path %>/admin/jixiao/jixiaoAdd.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
fun5.add(fun51);
fun5.add(fun52);
root.add(fun5);
var fun6 = new TreeNode('薪酬福利管理');
var fun61 = new TreeNode('薪酬福利管理', '<%=path %>/xinchou?type=xinchouMana', 'tree_node.gif', null, 'tree_node.gif', null);
var fun62 = new TreeNode('薪酬福利添加', '<%=path %>/admin/xinchou/xinchouAdd.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
fun6.add(fun61);
fun6.add(fun62);
root.add(fun6);
var fun7 = new TreeNode('调查项目管理');
var fun71 = new TreeNode('调查项目管理', '<%=path %>/diaocha?type=diaochaMana', 'tree_node.gif', null, 'tree_node.gif', null);
var fun72 = new TreeNode('调查项目添加', '<%=path %>/admin/diaocha/diaochaAdd.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
fun7.add(fun71);
fun7.add(fun72);
root.add(fun7);
var fun8 = new TreeNode('月度考核管理');
var fun81 = new TreeNode('月度考核管理', '<%=path %>/yuedukaohe?type=yuedukaoheMana', 'tree_node.gif', null, 'tree_node.gif', null);
var fun82 = new TreeNode('月度考核添加', '<%=path %>/admin/yuedukaohe/yuedukaoheAdd.jsp', 'tree_node.gif', null, 'tree_node.gif', null);
fun8.add(fun81);
fun8.add(fun82);
root.add(fun8);
</c:if>
<c:if test="${sessionScope.userType==1}">
var fun100 = new TreeNode('我的薪酬查询');
var fun1001 = new TreeNode('我的薪酬查询', '<%=path %>/xinchou?type=xinchouMy&yuangongId=${sessionScope.yuangong.id}', 'tree_node.gif', null, 'tree_node.gif', null);
fun100.add(fun1001);
root.add(fun100);
var fun7 = new TreeNode('参与公司调查');
var fun71 = new TreeNode('参与公司调查', '<%=path %>/diaocha?type=diaochaAll', 'tree_node.gif', null, 'tree_node.gif', null);
fun7.add(fun71);
root.add(fun7);
var fun8 = new TreeNode('我的月度考核');
var fun81 = new TreeNode('我的月度考核', '<%=path %>/yuedukaohe?type=yuedukaoheMana_yuangong&yuangong_id=${sessionScope.yuangong.id}', 'tree_node.gif', null, 'tree_node.gif', null);
fun8.add(fun81);
root.add(fun8);
</c:if>
tree = new Tree(root);
tree.show('menuTree')
</SCRIPT>
</BODY>
</html>
界面(系统实现)
登陆帐号: a/a
论文参考
《基于jsp的企业员工信息管理系统的设计与实现–【毕业论文】
https://blog.csdn.net/dearmite/article/details/132053836
配套资源
基于jsp的人力资源管理系统的设计与实现–源代码–【课程设计】
https://download.csdn.net/download/dearmite/88209105
去掉DWR包的版本,(修改密码功能不好使)
基于jsp的人力资源管理系统的设计与实现-源代码无DRW包
https://download.csdn.net/download/dearmite/88209116