获取项目源文件,学习交流联系Q:1415736481,可指导毕设,课设
在现代化的教育技术模式下,计算机已经广泛应用于企业的人事管理,给传统的人事管理方式带来了重大的革命。如何有效进行人事管理是摆在我们面前的一个新的课题。
本文在研究目前各个企业人事管理情况的基础上,从企业的实际需求出发,采用当前较为流行的B/S(浏览器/服务器)结构和JSP动态网页开发技术,基于Windows2000 Server操作系统和Sql数据库,设计并实现了一个功能较为完善的小型企业管理系统。通过对系统进行一系列的需求分析、设计、编码、测试等工作,使系统实现了对企业员工信息的查看,添加,修改,删除,以及搜索的功能。重点对系统设计过程作了相应描述,同时也对系统需要改进的地方做了总结。
本系统经过测试,运行效果稳定,操作方便、快捷。适用于一般企业的人事管理要求。
关键字:JSP;人事管理;Sql数据库;
目 录
第一章 绪 论
1.1 引 言
现在网络的发展已呈现商业化、全民化、全球化的趋势。未来企业成功的关键的依靠企业人力资源,人才之争已经成为市场竞争中的核心内容之一,以人为本成为企业立足和发展的根本。有效力管理企业的人力资源,为企业提供强有力的储备力量,使之成为企业发展的主动力。通过人力资源的有效管理,掌握最新的、准确的企业人力资源信息,并对其进行复杂的统计与分析,从而充分发挥每个员工的潜能,为企业创造更大的价值。
1.2 概 述
本系统使用MS SQL Server 、Tomcat为服务器。Tomcat是开源软件,可以从网上免费得到其正式的发行版本,而MS SQL Server 是当前使用得最广泛的数据库,其性能,安全性等方面都有很好的保证。Tomcat虽然是开源软件,但许多大型网站也因其稳定的性能和出色的性能而选择它作为专业的JSP容器[3]。由此组成的整个系统的底层框架,既能节省开支,配置过程也相对简单。
使用面向对象技术,将各个角色(一般用户,图书管理员,系统管理员)封装成类,这样能帮助程序员更直观地去理解整个业务流程,将重点放在业务逻辑的处理上,降低了开发难度,这样也便于将来的扩展[2]。
本系统的一些亮点:
(1)逻辑层实现时使用事务(Transaction)保证数据的完整性。
(2)服务器端采用数据库,事务逻辑,用户界面相互独立的结构,各个模块自身扩充方便,且互相之间耦合度非常低,对逻辑层稍做扩充就可以实现一个功能更完善的系统。
总体来说,本系统是基于JSP的设计方案,使用表示层,逻辑层和数据层三层模式[2]。使用B/S模式,使用MS SQL Server作为数据库, Tomcat作为JSP容器。数据库层使用JDBC与底层数据库进行交互,逻辑层封装在Javabean类中,表示层由JSP实现。
1.3 JSP概述
JSP技术是由Servlet技术发展起来的,自从有了JSP后,在Java服务器端编程中普遍采用的就是JSP,而不是Servlet。因为JSP在编写表示页面时远远比Servlet简单,并且不需要手工编译,目前Servlet主要用于做视图控制器,处理后台应用等。由于JSP构建在Servlet上。所以它有Servlet所有强大的功能[3]。
JSP基于强大的Java语言,具有良好的伸缩性,与Java Enterprise API紧密地集成在一起,在网络数据库应用开发领域具有得天独厚的优势,基于Java平台构建网络程序已经被越来越多的人认为是未来最有发展前途的技术[3]。
从JSP这几年的发展来看,JSP已经获得了巨大的成功,它通过和EJB等J2EE组件进行集成,可以编写出处理具有大的伸缩性,高负载的企业级应用。JSP技术在多个方面加速了动态Web页面的开发。
通过分析和总结,列出了以下几点说明JSP的特点。
(1)绝大多数JSP页面依赖于可重用的,跨平台的组件来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使用这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。
(2)JSP能提供所有的Servlets功能
与Servlet相比,JSP能提供所有的Servlets功能,它比用Println书写和修改HTML更加方便。此外,您可以更明确地进行分工,Web页面设计人员编写HTML,只需要留出空间让Servlets程序员插入动态部分即可。
(3)一次编写,随处运行
作为Java平台的一部分,JSP拥有Java编程语言“一次编写,随处运行”的特点[3]。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,但并不影响当前的应用。
(4)Java中连接数据库的技术是JDBC
很多数据库系统带有JDBC驱动程序,Java程序通过JDBC驱动程序与数据库相连,执行查询,提取数据等操作。Sun公司还开发了JDBC-ODBC Bridge,用此技术Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序[5],所以Java程序能够访问如Oracle,Sybase,MS SQL Server和MS Access等类型的数据库[4]。
(5)JSP的平台适应性更广
这是JSP与ASP的优越之处。几乎所有的平台都支持Java,JSP+Beans,它们可以在任何平台下通行无阻。Windows NT下的IIS通过一个插件就能支持JSP,例如JRUN或者ServletExec,著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在Windows NT,UNIX和Linux上,因此JSP有更广泛的运行平台[2]。
第二章 系统运行必要的环境
本章主要介绍JSP开发环境的搭建。介绍JSP对运行环境的要求。讲述J2EE开发和运行环境的安装配置,并且介绍当今流行的JSP运行环境的安装和配置,以及集成开发环境的设置以及数据库的安装和配置
2.1 JSP运行环境
2.1.1硬件环境
由于Java具有跨平台的特点,所以只要能够安装JDK,就能在此安装JSP服务器和。JSP服务器和能够运行在目前绝大多数的操作系统上,目前在普通用户中用到的系统绝大多数为Windows系列。具体到本系统的硬件环境为:
硬件平台:
CPU:AMD双核;
内存:512MB
2.1.2软件环境
浏览器要支持HTML元素的表达,WEB服务器为Apache Tomcat 系列,开发工具为MyEclipse。
2.2 安装和配置JDK
JDK中包含了Java开发中必需的工具和Java程序运行环境(JRE)。可以从SUN公司网站http://java.sun.com免费下载。
JDK的安装特别简单,和安装应用程序软件没什么区别,不过JDK的安装路径一定要设好,方便以后环境变量的设置。
安装好JDK后,还需要在环境变量中进行对应的配置。 主要进行以下配置:
(1)设置JAVA_HOME环境变量
(2)设置CLASSPATH环境变量
JAVA_HOME表示Java安装目录,其他的应用程序如果需要使用Java运行环境,首先获得JAVA_HOME变量的信息,然后确定执行的路径。
2.2 安装Tomcat
Tomcat的安装包可以从sun公司的网站获得。下载完后点击安装,完毕后再地址栏输入http://localhost:8080/如果安装成功的话就会出现一只可爱的小猫。这里要说的是,本系统的web程序都是在Tomcat的webapps文件夹的目录下存放如图2-1所示。
图2-1 Tomcat的文件结构
第三章 系统分析与设计
3.1 需求分析
通过调查,根据人事管理的基本需求,要求系统需要完成以下功能;
详细的企业的员工信息管理;
企业员工奖惩信息管理;
企业员工人员调动信息管理;
企业员工考勤管理;
设置企业员工薪酬管理;
人才招聘管理及企业人才库管理功能;
企业员工培训管理;
提供系统用户管理功能。
本系统只实现详细企业的员工信息管理、企业员工奖惩信息管理、企业员工人员调动信息管理和系统用户管理功能四个功能。
3.2 可行性分析
3.2.1 经济性
通过网络化的员工信息管理,大大的提高了企业人才的利用率,使之为企业创造了更大价值。人才利用率的提高,增强了企业的核心竟争力,全面提升了企业的管理能力,从而企业适应了信息时代的网络化管理要求,。
3.2.2 技术性
通过网络化管理,加强和员工信息管理的方便性,准备确性。使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容.生成的内容的逻辑被封装在标识和JavaBeans组件中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面而不影响内容的生成。很多的OS中都带有JDBC驱动程序,Java就通过JDBC与数据库连接,执行查询,提取数据等操作.Sun公司还提供了JDBC-ODBC的桥连方式,因此Java也可以访问带有ODBC驱动的数据库,目前大多数数据库系统都带有ODBC驱动,所以Java能访问诸如Oracle,Sybase,MS SQL Server 和PostgresSQL等类型的数据库[5]。
3.2.3 操作可行性
对于用户来说,本系统只要求使用者掌握一定的上网经验,经过仔细设计和测试之后的系统具有操作简单,方便灵活等优点,足可以满足各种用户的不同需求,同时也方便了企业的内部管理。管理人员及用户一定会在短时间内掌握并熟练使用。只要动一动鼠标键盘就可以达到想要的结果。
3.2.4 系统结构可行性分析
本系统采用B/S模式。
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。其具有以下特点:维护和升级方式简单,成本降低,选择更多,只要安装了浏览器就可以了。
3.3 总体设计
3.3.1项目规划
人事管理系统由人员信息管理、人员调动信息管理、系统用户管理等几个部分组成,规划系统功能模块如下:
人员信息管理模块:主要功能是对员工基本信息等进行管理。
人员调动信息模块:主要是对员工调动信息进行管理。
系统用户管理模块:主要功能是管理员密码修改功能的管理。
3.3.2 设计目标
本系统主要用于对员工进行管理。通过员工信息的各种信息的管理来提高的竞争力。为。具体实现目标如下:
实现对员工信息进行全面管理的功能。
系统用户信息的管理;企业员工人员调动信息管理;
系统最大限度地实现了易安装性、易维护性和易操作性。
系统运行稳定、安全可靠。
3.3.3系统功能结构图
企业人事 管理系统 |
登录模块 |
主页面模块 |
人员档案模块块 |
奖惩管理模块 |
管理人员档案 |
添加人员档案 |
查询人员档案 |
人员调动模块 |
管理奖惩记录 |
添加奖惩记录 |
添加人员调动 |
管理人员调动 |
图3-1人事管理系统功能结构图
第四章 系统功能的实现
4.1模块功能介绍
- 登录模块
此模块实现用户进入系统管理前的验证操作,只有输入正确的用户名和密码才能进入系统 ,进行各种操作。
- 人员档案模块
此模块实现对企业所有员工的档案进行管理,并且根据需要,可以对某个员工的档案进行修改、删除和查询。
- 人员调动模块
本模块提供了管理企业人员调动信息管理的功能,可以根据需要,对某条调动记录进行修改和删除。
同上相应的模块可以实现相应的功能。
- 奖惩管理模块
本模块提供了记录奖惩类别,内容,原因等奖惩信息的管理。可以根据需要添加奖惩详细信息、删除奖惩详细信息、修改奖惩详细信息。
4.2数据库的设计实现
4.2.1 数据库的需求分析
·员工基本信息表: 主要用于保存员工信息
·奖惩管理信息表: 主要用于保存奖惩信息
·人事调动管理信息表: 主要用于保存内部人员调动信息
·系统用户管理表: 主要用于保存用户信息
4.2.2 数据库表的设计
本系统数据库有以下几张表组成:
表4-1员工基本信息表(employee)
名称 |
字段名 |
类型 |
长度 |
主键 |
非空 |
员工编号 |
EmployeeID |
varchar |
6 |
yes |
yes |
姓名 |
UserName |
varchar |
20 |
no |
yes |
性别 |
Sex |
varchar |
10 |
no |
yes |
部门 |
Branch |
varchar |
40 |
no |
yes |
出生日期 |
Birthday |
date |
—— |
no |
yes |
籍贯 |
NativePlace |
varchar |
20 |
no |
yes |
婚姻 |
Marriage |
varchar |
20 |
no |
yes |
身份证号 |
IdentityID |
varchar |
18 |
no |
yes |
政汉面貌 |
Politics |
varchar |
20 |
no |
yes |
民族 |
Folk |
varchar |
20 |
no |
yes |
学历 |
Education |
varchar |
20 |
no |
no |
专业 |
Department |
varchar |
40 |
no |
no |
毕业时间 |
GraduateDate |
date |
—— |
no |
no |
毕业院校 |
University |
varchar |
40 |
no |
no |
公积金账号 |
AccumulateID |
varchar |
20 |
no |
yes |
行政级别 |
AdministrationLevel |
varchar |
20 |
no |
yes |
职务 |
Duty |
varchar |
40 |
no |
yes |
职称 |
Position |
varchar |
20 |
no |
yes |
外语语种 |
ForeignLanguage |
varchar |
20 |
no |
no |
外语等级 |
FLLevel |
varchar |
20 |
no |
no |
计算机等级 |
ComputerLevel |
varchar |
20 |
no |
no |
家庭电话 |
Phone |
varchar |
20 |
no |
no |
手机号码 |
MobilePhone |
varchar |
11 |
no |
no |
家庭住址 |
Address |
varchar |
50 |
no |
no |
在职情况 |
Incumbency |
varchar |
20 |
no |
yes |
用式形式 |
IncumbencyType |
varchar |
20 |
no |
yes |
个人简历 |
Resume |
varchar |
400 |
no |
no |
表4-2 奖惩管理信息表(rpmanage)
名称 |
字段名 |
类型 |
长度 |
主键 |
非空 |
记录编号 |
RewardNO |
int |
—— |
yes |
yes |
员工编号 |
EmployeeID |
varchar |
6 |
no |
yes |
职称 |
Position |
varchar |
20 |
no |
yes |
奖/惩 |
RewardPunish |
varchar |
10 |
no |
yes |
奖惩内容 |
Rewardcontent |
varchar |
50 |
no |
yes |
原因 |
Reason |
varchar |
100 |
no |
yes |
批准部门 |
Branch |
varchar |
40 |
no |
yes |
审核人 |
HandleName |
varchar |
20 |
no |
yes |
开始时间 |
StartDate |
date |
—— |
no |
yes |
撤销时间 |
CancelDate |
date |
—— |
no |
no |
撤销原因 |
CancelReason |
varchar |
100 |
no |
no |
备注 |
Remark |
varchar |
400 |
no |
no |
表4-3 系统用户管理表(users)
名称 |
字段名 |
类型 |
长度 |
主键 |
非空 |
用户名 |
UserName |
varchar |
16 |
yes |
yes |
密码 |
Password |
varchar |
16 |
no |
yes |
表4-4 人事调动管理信息表(translate)
名称 |
字段名 |
类型 |
长度 |
主键 |
非空 |
记录编号 |
TranslateNO |
int |
—— |
yes |
yes |
员工编号 |
EmployeeID |
varchar |
6 |
no |
yes |
调动时间 |
TranslateDate |
date |
—— |
no |
yes |
前部门 |
PriorBranch |
varchar |
40 |
no |
yes |
现部门 |
NextBranch |
varchar |
40 |
no |
yes |
前职务 |
PriorDuty |
varchar |
40 |
no |
yes |
现职务 |
NextDuty |
varchar |
40 |
no |
yes |
经办人 |
HandleName |
varchar |
20 |
no |
yes |
备注 |
Remark |
varchar |
400 |
no |
no |
①员工基本信息表(employee),是用来记录每一名员工的基本信息的,如受教育的情况;
②系统用户管理表(users),是用来存放系统管理员的信息的,如用户名,密码;
③奖惩管理信息表(rpmanage),记录获奖/惩罚的人员的情况;
④人事调动管理信息表(translate),记录人员的调动信息;
4.2.3 数据库的联结与访问
数据库连接和访问主要由类DBConnect负责,用户使用此类进行连接和访问数据库[1],其实现代码摘录如下:
①构造数据库的连接和访问类
public DBConnect() throws Exception {
init();
stmt = conn.createStatement();
}
public DBConnect(int resultSetType, int resultSetConcurrency)
throws Exception {
init();
stmt = conn.createStatement(resultSetType, resultSetConcurrency);
}
②预编译SQL语句
public DBConnect(String sql) throws Exception {
init();
this.prepareStatement(sql);
}
public DBConnect(String sql, int resultSetType, int resultSetConcurrency)
throws Exception {
init();
this.prepareStatement(sql, resultSetType, resultSetConcurrency);
}
③查询语句如下://sql为查询语句
rs = stmt.executeQuery(sql);
④插入、更新语句如下:
stmt.executeUpdate(sql);
4.3模块功能的实现
4.3.1 登录模块
登录检查 |
操作界面 |
数据库 |
登录界面 |
退出界面 |
登录失败
用户登录 通过验证
读 写
图4-1登录控制结构图
实现该功能的文件有:
login.jsp,ChkLogin.jsp,这两个文件实现了登录模块的功能,其中login.jsp通过request.getParameter()方法来获取输入的用户名和用户密的值,并交由ChkLogin.jsp页面处理,ChkLogin.jsp通过一系列的JSP方法,函数(如response.sendRedirect()方法,)组成业务逻辑来判断所获取的数据是否合法,进而决定是否允许来访者登录系统。
4.3.2 人员档案模块
人员档案是人事管理系统的基本数据资料,是员工管理系统的基本功能,其提供的功能有:添加人员档案,修改人员档案,删除人员档案和查询人员档案。其模块结构如下图4-2所示:
人员档案模块 |
查询人员档案 |
管理人员档案 |
添加人员档案 |
模块主页面 |
Employee.jsp |
EmployeeLeft.jsp |
AddEmployeeStep2.jsp |
AddEmployeeStep1.jsp |
ManageEmployeeStep1.jsp |
ManageEmployeeStep2.jsp |
ModifyEmployeeStep1.jsp |
ModifyEmployeeStep2.jsp |
DelEmployeeStep1.jsp |
SearchEmployeeStep1.jsp |
SearchEmployeeStep2.jsp |
ViewEmployeeStep1.jsp |
图4-2人员档案模块结构图 |
本模块包含的JSP文档及其功能如下: Employee.jsp功能与index.jsp类似, EmployeeLeft.jsp用于显示本模块网页的功能链接.
AddEmployeeStep1.jsp主要用于提供用户输入人员档案信息的界面, AddEmployeeStep2.jsp则用于提交信息并连接数据库和修改数据库.
ManageEmployeeStep1.jsp主要用于显示人员管理的条件查询页面, ManageEmployeeStep2.jsp则用于操作数据库并显示查询结果列表, 单击列表中的“修改”则进入ModifyEmployeeStep1.jsp页面,此页面提供修改人员信息功能,单击修改按钮后,刚进入ModifyEmployeeStep2.jsp向数据库中写入信息,如果更新成功刚显示“修改人员档案成功”,否则显示“修改人员档案失败!”并将错误显示在页面中。如果单击删除链接,刚进入DelEmployeeStep1.jsp页面,实现删除操作。
|
SearchEmployeeStep1.jsp页面,主要用于查询人员档案,在管理人员档案操作中,既使用其来进行数据库查询,SearchEmployeeStep2.jsp则用于显示查询结果列表,由于员工信息较多,因此只选取部分显示,如需查看详细信息,则可单击员工编号,进入ViewEmployeeStep1.jsp页面,该文件用于显示员工的详细信息以及其余模块的信息,如奖惩情况和调动情况。
还要说的是关于javabean的,Employee.java定义了类Employee,用来封装与人员档案相关的方法,如增加、修改、删除、查询等,其定义的关键方法有:Add()用于添加人员档案,Modify()用于修改人员档案,Delete(String _EmployeeID)用于删除人员档案,ListAll()用于列出所有人员档案,Search()用于查询人员档案.
4.3.3 奖惩管理模块
奖惩管理模块主要用于记录企业员工的奖惩情况,其主要提供的功能有添加奖惩记录和修改奖惩记录。
奖惩管理模块的结构如下图4-3所示:
奖惩管理模块 |
模块主页面 |
添加奖惩记录 |
管理奖惩记录 |
Reward.jsp |
RewardLeft.jsp |
DelRewardStep1.jsp |
AddRewardStep1.jsp |
AddRewardStep2.jsp |
ManageRewardStep1.jsp |
ModifyRewardStep1.jsp |
ModifyRewardStep2.jsp |
ViewRewardStep1.jsp |
|
图4-3奖惩管理模块结构图
本模块主要包含页面关系如图4-3的结构图所示,其中Reward.jsp功能与index.jsp作用相似,RewardLeft.jsp作用是提供了本模块的功能链接,如添加奖惩记录,管理奖惩记录和退出系统。
添加奖惩记录主要由AddRewardStep1.jsp和AddRewardStep2.jsp两个文件组成,其中前者提供了添加记录的界面,后者用于调用JavaBean中的Reward中的Add()方法,向数据库传递填写的信息,更新数据库。
管理奖惩记录主要由ManageRewardStep1.jsp、ManageRewardStep2.jsp、ModifyRewardStep1.jsp、ModifyRewardStep2.jsp、ViewRewardStep1.jsp和DelRewardStep1.jsp 五个文件组成,其中ManageReward
Step1.jsp用于显示管理奖惩记录界面,当单击图中的修改链接后,则进入ModifyReward
Step1.jsp页面,当点击修改按钮时刚进入ModifyRewardStep2.jsp页面,用于和数据库进行交互,修改数据库中的记录,并返回修改结果。如点击删除链接,刚进入DelRewardStep1.jsp页面,系统会提示是否确认删除操作,单击确定后则进行删除操作,并返回删除结果;如点击员工编号,则可进入ViewRewardStep1.jsp页面,显示该员工的详细奖惩信息。
相应的对于该模块的javabean要说明的是:eward.java中定义了类Reward,用来封装与奖惩管理有关的功能方法,比如添加,修改,删除,查看奖惩记录等,其定义的各方法及其功能描述如下:FindByNO(),该方法主要用于实现根据记录号查找奖惩信息,用于整体查询;Add(),主要用于实现奖惩记录的添加操作;Modify(),主要实现奖惩信息的修改操作;Delete()实现删除操作;SearchByID()通过员工编号进行查询操作,主要用于一般查询。ListAll( ),主要用于列出查询结果。
4.3.4 奖惩管理模块
人员调动管理模块主要用于记录企业员工的人员调动情况,其主要提供的功能有添加人员调动记录和修改人员调动记录。人员调动管理模块的结构如下图4-4所示:
人员调动管理模块 |
模块主页面 |
添加人员调动 |
管理人员调动 |
Translate.jsp |
TranslateLeft.jsp |
DelTranslateStep1.jsp |
AddTranslateStep1.jsp |
AddTranslateStep2.jsp |
ManageTranslateStep1.jsp |
ModifyTranslateStep1.jsp |
ModifyTranslateStep2.jsp |
ViewTranslateStep1.jsp |
|
图4-4 人员调动管理模块结构图
本模块主要包含页面关系如图4-4的结构图所示,其中Translate.jsp功能与index.jsp作用相似,TranslateLeft.jsp作用是提供了本模块的功能链接,如添加人员调动记录,管理人员调动记录和退出系统。
添加人员调动记录主要由AddTranslateStep1.jsp和AddTranslateStep2.jsp两个文件组成,其中前者提供了添加记录的界面,后者用于调用JavaBean中的Translate中的Add()方法,向数据库传递填写的信息,更新数据库。
管理人员调动记录主要由ManageTranslateStep1.jsp、ManageTranslateStep2.jsp、
ModifyTranslateStep1.jsp、ModifyTranslateStep2.jsp、ViewTranslateStep1.jsp和DelTranslateStep1.jsp 五个文件组成,其中ManageTranslateStep1.jsp用于显示管理人员调动记录界面如图22所示,当单击图中的修改链接后,则进入ModifyTranslateStep1.jsp页面,该页面表单和图17类似,当点击修改按钮时刚进入ModifyTranslateStep2.jsp页面,用于和数据库进行交互,修改数据库中的记录,并返回修改结果。如点击删除链接,刚进入DelTranslateStep1.jsp页面,系统会提示是否确认删除操作,单击确定后则进行删除操作,并返回删除结果;如点击员工编号,则可进入ViewTranslateStep1.jsp页面,显示该员工的详细人员调动信息。
还要说明一下javabean的作用,Translate.java中定义了类Translate,用来封装与人员调动管理有关的功能方法,比如添加,修改,删除,查看人员调动记录等,其定义的各方法及其功能描述如下:
FindByNO(),该方法主要用于实现根据记录号查找人员调动信息,用于整体查询;Add(),主要用于实现人员调动记录的添加操作;Modify(),主要实现人员调动信息的修改操作;Delete()实现删除操作;SearchByID()通过员工编号进行查询操作,主要用于一般查询。ListAll( ),主要用于列出查询结果。
第五章 系统演示
本章主要是介绍本系统的操作过程,多以图的形式展现。
5.1系统功能的实现效果
待系统的文件目录部署好后,启动Tomcat,在地址栏输入http://localhost:8080/hrms/login.jsp 进入登陆界面如图5-1所示。
图5-1登陆界面如图
输入正确的用户名,密码后就会进入系统的主页面,如图5-2所示:
图5-2主页面
该页面相当于一个操作平台,你可以选择要进行的操作,并进入相关的操作界面,假如我们选择了人员档案这一项那你就会进入如图5-3所示页面,
图5-3人员档案页面
你可以通过点击按纽来完成相应的操作,比如你点了添加人员按扭,如下图5-4所示:
图5-4添加人员档案页面
在此页面上你可以添加人员的档案。
本系统的其他功能就不在一一的演示了。相信本系统的可视化操作方式会给您的事业提供帮助。
第六章 技术难点和系统测试
6.1 技术难点
6.1.1 中文乱码问题
开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确实现中文的display和数据库的存储是最基本的要求。由于浏览器中的参数传递是按字节传送,因此英文和数字不会有任何的问题,而中文汉字则由两个字节组成,因此导致了中文无法正常显示。本次实验中碰到了许多JSP和数据库中的中文显示问题,以及JSP网页的中文显示问题,本人经过上网搜索了好多种中文问题解决方案,但有些并不能解决本次实验所碰到的问题,经过多次测试,现将本系统中文显示问题解决方案列出如下:
(1)在首页将此句<%@page contentType=”text/html;charset=gb2312″%>包含进去,但是经过测试,许多公用模块无法正常显示中文,如Header.jsp和Footer.jsp,以及各模块主页也无法正常显示汉字,如将此句包含到显示乱码的页面中,则系统编译错误,显示如下错误:
|
org.apache.jasper.JasperException: /Header.jsp(0,0) Page directive: can’t have multiple occurrences of contentType。所以经过多次试验,把将此句包含进文件可以正常显示的文件则保留此句,不能正常显示的则采用方法(2)
(2)在页首包含此句<%@page pageEncoding=”GB2312″%>,经过测试,使用此句后,无法正常显示的页面,能够正常显示中文了。
(3)针对JSP与数据库之间的中文转化问题,本系统采取的方法是在每次传参数的前面都进行编码转换如:String username = new String(request.getParameter(“username”).getBytes(“ISO8859_1″),”GBK”);
6.1.2 安全性问题
将项目发布到互联网上后,有些用户不是点击超链接打开网站的某个页面,而是在地址栏中直接写,而后进入,试图避开身份验证,处于对安全性的考虑,本项目在用户登陆后才能进入的页面中,加入了如下的一行判断,如果用户非法进入,则自动跳转到登录界面:
<%@ include file=”../ “%> 其中Check.jsp中的代码如下:
<% if((String)session.getValue(“IsLogin”)!=”true”)
{
String loginmsg=”loginfirst”;
response.sendRedirect(“../login.jsp?loginmsg=”+loginmsg);
}%>
6.1.3 JavaScript的实现
为使本系统使用过程中更人性化,本系统中加入了一些JavaScript 代码,例如日历的实现,介于本人水平有限,系统中使用的较难的JavaScript代码一部分摘自互联网,其他的是参考其他书中所介绍的案例。
6.2 系统测试
在完成了程序的编写工作后,接下来将进行软件的测试,这里说的软件,并不单单是指程序本身,还包括其他方面.测试和开发一样,也是一项技术性很强的工作,有着很多的技巧. 软件测试是软件质量保证的主要活动之一,因此,测试的质量直接影响软件的质量.
软件测试就是在软件投入运行前,对软件的需求分析,设计规格说明和编码的最终复审,是保证软件质量的关键步骤.如果要给软件测试下定义,可以这样将,软件测试是为了发现错误而执行程序的过程.
测试的目的在于将软件设计时设计者与程序开发者之间理解不一致的地方,功能与需求不一致的地方,不符合逻辑思维的情况都反映给质量控制部门,由质量控制部门调配需求部门统一作出一个明确解答,再由开发人员进行修改和补充.
测试的目标是以最少的时间和人力找出软件中潜在的各种错误和缺陷.
6.2.1界面测试
界面测试是测试过程中比较简单直观的一种测试方法,只要细心地按界面要求核对就行了.
6.2.2需求测试
针对需求测试,是测试中很重要的一个环节.因为需求是在软件设计,开发乃至软件测试中重要的依据.要针对需求测试,首先就要对项目的需求和业务有一定的了解.这些需求很多时候是在实现增,删,查,改这些基本功能之上,针对项目和相关业务所作的一些逻辑上的控制.这就要求程序员在设计和编码的时候要去充分理解考虑需求.
性能测试在软件的质量保证中起着重要的作用..通常我们把性能指标全部归结到硬件,操作系统和开发环境上,而忽略了代码本身性能上的考虑.性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性.
第七章 总结
经过几个星期来的努力,终于完成了本课程设计.从当初领到题目到最后一个功能模块的完成,经历了无数次的错误->修改代码->重启服务器->运行的过程,感觉到平时学的知识是多么的浅薄,书到用时方恨少,现在是体验的真真切切。由于对JSP和Tomcat以及Eclipse的使用不熟悉,所以本次实验只选取的原计划中的几个模块进行编写代码实现。设计过程中,许多问题由于对程序语言的不熟悉,参考了大量的JSP书籍。但通过本次实验,我也感受到了开源的方便,遇到什么问题,上网一查,就知道该怎么弄了,以前做个课程设计都是怕别人和我的一样,不愿意给别人看,现在知道了程序弄不出来是多么的着急,学习都是相互的,互相研究才能共同进步的。
通过本次实验,对数据库的WEB应用有了一定深度的了解,提高了自身对数据库语言的进一步熟悉。也培养了独立思考问题和自学能力的锻炼,使我意识到必须努力学习才能才工作中体现自己的价值,适应社会的需要。
致谢
首先衷心感谢耿超老师在整个毕业课题设计期间给予作者无微不至的关怀和细心的指导。在设计过程中指导老师为我们提出了许多宝贵的意见和建议,谨向耿超老师表示深深的谢意。
衷心感谢所有关心、帮助过本人的师长、朋友和同学们,使本人在大学的求学经历更加美好,终生难忘。
由于本人学识有限,加之时间仓促,文中不免有错误和待改,
不足之处,真诚欢迎各位师长、同学提出宝贵意见。
参考文献
[1] 《数据库系统概论》(第三版)/萨师煊 王珊编著 ,高等教育出版社.
[2] 《JSP实用编程实例集锦》/马文刚、谢乐建、管知时,清华大学出版社.
[3] 《JSP数据库编程指南》/布霍恩·赖特著 赵明昌译,北京希望电子出版社.
[4] Herbert著.张玉清等译.Java2参考大全[M].北京:清华大学出版社.
[5] 微软公司著,高国连,李国华译.SQL Server 2000使用Transact-SQL进行数据库查询[M].北京:北京希望电子出版社.
[6] 汪晓平等编著.精通Java网络编程[M].北京:清华大学出版社.
[7] 林上杰,林康司著.JSP2.0技术手册[M].西安:电子工业出版社.
[8] 微软公司著,高国连,李国华译.SQL Server 2000使用Transact-SQL进行数据库查[M].
[9] 汪孝宜等著.JSP数据库开发实例精粹[M].北京:电子工业出版社.
[10] 微软公司著,高国连,李国华译.SQL Server 2000使用Transact-SQL进行数据库查[M].
北京:北京希望电子出版社.
附录一 开题报告
毕业设计(论文)开题报告书
课题名称: 基于JSP 的人事管理系统
学生姓名: 祝胜宣
专业班级: 计算机科学与技术专业06专接本(一)班
指导教师: 耿超
1、本课题的研究意义 现在我国的一些企业对于员工信息的处理还停留在纸介质或半自动(由电脑处理一部分数据,由人工处理一部分数据)的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。软件作为一项有力的工具,只能当此种工具,与我们的实践相结合起来的时候,才具有重大的社会价值及使用价值。因此根据企业目前实际的人事管理情况开发一套人事管理系统是十分必要的。 |
2、本课题的基本内容 本系统设计的主要目标是对现代人事管理信息进行整合,按照人们长久以来的人事管理程进行定义,使它们分别对应不同的子系统,从而将整个管理的过程数字化,再应用工作流引擎对管理流程中的数据流向进行自动控制,使人事专员只需专注于人员信息的处理,员工也只需将自己的资料交给人事专员,其它的工作是由计算机自动完成。基于这些需求分析,我设计了本系统。 |
3、本课题技术路线、重点难点 本系统是基于JSP的设计方案,使用 SQL Server 2000作为数据库,利用Eclipse作为开发环境。使用JDBC与数据库进行交互,表示层由JSP实现。 重点:数据库的设计,B/S模式的应用。 难点:开发环境的配置应用,jsp方法的设计方法不熟悉。 |
4.论文提纲 摘要:在论文目录前面简要讲述论文产生的背景,所解决的问题,所用的开发技术。 第一章 绪论 第二章 系统运行的必要环境 第三章 系统分析与设计思想 第四章 系统的实现与详细设计 第五章 设计总结 致谢 参考文献 附录一 开题报告 附录二 任务书 附录三 设计实现的具体内容
|
指导教师意见:
指导教师:
年 月 日 |
毕业设计(论文)指导小组审查意见:
毕业设计(论文)指导小组组长:
年 月 日 |
附录二 任务书
邢台学院信息科学与技术系毕业设计任务书
题 目 |
基于JSP的人事管理系统 |
|||||||
学号 |
姓名 |
性别 |
年级·专业 |
联系电话 |
||||
2006433161 |
祝胜宣 |
男 |
06级专接本(1)班计算机科学与技术 |
15930052452 |
||||
指导教师 |
职称 |
专业 |
联系电话 |
|||||
耿超 |
讲师 |
计算机应用技术 |
0319-7300948 |
|||||
课题来源与意义 |
课题来源:基于目前社会上人事管理系统繁琐,所以我选择JSP人事系统的开发与设计系统。 意 义:①Java语言程序设计是计算机系的专业课程,本课题开发便于学生更好的学习本课程,对本课程的教学有着重要的实际意义。②本课题要求毕业生必须掌握软件工程、Java、数据库设计等各方面的专业知识,在本课题的开发过程中可以锻炼并提高毕业生编程能力。使毕业生在分析问题、解决问题、共同协作等各方面的能力得到提高。 |
|||||||
课题的主要任务与目标 |
任务: ①查阅、学习基于JSP、数据库程序设计的计算机技术文献资料。②对相关资料进行分析、归类及汇总。③选择适当的项目进行实践。 目标: ①完成某项特定应用技术的综述、分析,定一篇12000字左右的论文。 ②用相应的技术实现各项目。 |
|||||||
进度计划 |
第7学期第16周:下达任务书。 第7学期第17周:完成开题报告、撰写读书笔记(5000字) 第8学期第1-3周:进行系统设计、实现。 第8学期第4周:设计报告或论文的撰写,中英文翻译(2000字) 第8学期第5周:提交毕业设计报告,并按要求修订。 第8学期第6周:提出答辩申请。 |
|||||||
课题成果形式 |
论文+设计 |
指导小组 意见 |
|
领导 小组 意见 |
|
|||
此表一式三份,系存档一份,指导教师一份,学生一份
附录三 设计实现的具体内容
数据库连接:
一 DBConnect.java
package hrms.database;
import java.sql.*;
import hrms.database.DBConnectionManager;
public class DBConnect {
private Connection conn = null;
private Statement stmt = null;
private PreparedStatement prepstmt = null;
private DBConnectionManager dcm = null;
void init() {
dcm = DBConnectionManager.getInstance();
conn = dcm.getConnection(“sqlserver”);
}
public DBConnect() throws Exception {
init();
stmt = conn.createStatement();
}
public DBConnect(int resultSetType, int resultSetConcurrency)
throws Exception {
init();
stmt = conn.createStatement(resultSetType, resultSetConcurrency);
}
public DBConnect(String sql) throws Exception {
init();
this.prepareStatement(sql);
}
public DBConnect(String sql, int resultSetType, int resultSetConcurrency)
throws Exception {
init();
this.prepareStatement(sql, resultSetType, resultSetConcurrency);
}
public Connection getConnection() {
return conn;
}
public void prepareStatement(String sql) throws SQLException {
prepstmt = conn.prepareStatement(sql);
}
public void prepareStatement(String sql, int resultSetType,
int resultSetConcurrency) throws SQLException {
prepstmt = conn.prepareStatement(sql, resultSetType,
resultSetConcurrency);
}
public void setString(int index, String value) throws SQLException {
prepstmt.setString(index, value);
}
public void setInt(int index, int value) throws SQLException {
prepstmt.setInt(index, value);
}
public void setBoolean(int index, boolean value) throws SQLException {
prepstmt.setBoolean(index, value);
}
public void setDate(int index, Date value) throws SQLException {
prepstmt.setDate(index, value);
}
public void setTimestamp(int index, Timestamp value) throws SQLException {
prepstmt.setTimestamp(index, value);
}
public void setLong(int index, long value) throws SQLException {
prepstmt.setLong(index, value);
}
public void setFloat(int index, float value) throws SQLException {
prepstmt.setFloat(index, value);
}
public void setBytes(int index, byte[] value) throws SQLException {
prepstmt.setBytes(index, value);
}
public void clearParameters() throws SQLException {
prepstmt.clearParameters();
prepstmt = null;
}
public PreparedStatement getPreparedStatement() {
return prepstmt;
}
public Statement getStatement() {
return stmt;
}
public ResultSet executeQuery(String sql) throws SQLException {
if (stmt != null) {
return stmt.executeQuery(sql);
} else
return null;
}
public ResultSet executeQuery() throws SQLException {
if (prepstmt != null) {
return prepstmt.executeQuery();
} else
return null;
}
public void executeUpdate(String sql) throws SQLException {
if (stmt != null)
stmt.executeUpdate(sql);
}
public void executeUpdate() throws SQLException {
if (prepstmt != null)
prepstmt.executeUpdate();
}
public void close() throws Exception {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (prepstmt != null) {
prepstmt.close();
prepstmt = null;
}
if (conn != null) {
dcm.freeConnection(“sqlserver”, conn);
}
}
}
二DBConnectionManager.java
package hrms.database;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
public class DBConnectionManager {
static private DBConnectionManager instance; // 唯一实例
static private int clients;
private Vector drivers = new Vector();
private Hashtable pools = new Hashtable();
private void log(String msg) {
System.out.println(new Date() + “: ” + msg);
}
static synchronized public DBConnectionManager getInstance() {
if (instance == null) {
instance = new DBConnectionManager();
}
clients++;
return instance;
}
private DBConnectionManager() {
init();
}
public void freeConnection(String name, Connection con) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
pool.freeConnection(con);
}
}
public Connection getConnection(String name) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
return pool.getConnection();
}
return null;
}
public Connection getConnection(String name, long time) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
return pool.getConnection(time);
}
return null;
}
public synchronized void release() {
// 等待直到最后一个客户程序调用
if (–clients != 0) {
return;
}
Enumeration allPools = pools.elements();
while (allPools.hasMoreElements()) {
DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();
pool.release();
}
Enumeration allDrivers = drivers.elements();
while (allDrivers.hasMoreElements()) {
Driver driver = (Driver) allDrivers.nextElement();
try {
DriverManager.deregisterDriver(driver);
log(“撤销JDBC驱动程序 ” + driver.getClass().getName() + “的注册”);
} catch (SQLException e) {
log(“无法撤销下列JDBC驱动程序的注册: ” + driver.getClass().getName());
}
}
}
private void createPools(Properties props) {
Enumeration propNames = props.propertyNames();
while (propNames.hasMoreElements()) {
String name = (String) propNames.nextElement();
if (name.endsWith(“.url”))
{
String poolName = “sqlserver”;
String url = props.getProperty(poolName + “.url”);
if (url == null)
{
log(“没有为连接池” + poolName + “指定URL”);
continue;
}
String user = props.getProperty(poolName + “.user”);
String password = props.getProperty(poolName + “.password”);
String maxconn = props.getProperty(poolName + “.maxconn”, “0”);
int max;
try {
max = Integer.valueOf(maxconn).intValue();
} catch (NumberFormatException e) {
log(“错误的最大连接数限制: ” + maxconn + ” .连接池: ” + poolName);
max = 0;
}
DBConnectionPool pool = new DBConnectionPool(poolName, url,
user, password, max);
pools.put(poolName, pool);
log(“成功创建连接池” + poolName);
}
}
}
private void init() {
InputStream is = getClass().getResourceAsStream(“/hrms.txt”);
Properties dbProps = new Properties();
try {
dbProps.load(is);
} catch (Exception e) {
log(“不能读取属性文件.请确保db.properties在CLASSPATH指定的路径中”);
return;
}
loadDrivers(dbProps);
createPools(dbProps);
}
private void loadDrivers(Properties props) {
String driverClasses = props.getProperty(“driver”);
StringTokenizer st = new StringTokenizer(driverClasses);
while (st.hasMoreElements()) {
String driverClassName = st.nextToken().trim();
try {
Driver driver = (Driver) Class.forName(driverClassName)
.newInstance();
DriverManager.registerDriver(driver);
drivers.addElement(driver);
log(“成功注册JDBC驱动程序” + driverClassName);
} catch (Exception e) {
log(“无法注册JDBC驱动程序: ” + driverClassName + “, 错误: ” + e);
}
}
}
class DBConnectionPool {
private int userCount;
private Vector freeConnections = new Vector();
private int maxConn;
private String name;
private String password;
private String URL;
private String user;
public DBConnectionPool(String name, String URL, String user,
String password, int maxConn) {
this.name = name;
this.URL = URL;
this.user = user;
this.password = password;
this.maxConn = maxConn;
}
public synchronized void freeConnection(Connection con) {
// 将指定连接加入到向量末尾
freeConnections.addElement(con);
userCount–;
notifyAll();
}
public synchronized Connection getConnection() {
Connection con = null;
if (freeConnections.size() > 0) {
// 获取向量中第一个可用连接
con = (Connection) freeConnections.firstElement();
freeConnections.removeElementAt(0);
try {
if (con.isClosed()) {
log(“从连接池” + name + “删除一个无效连接”);
// 递归调用自己,尝试再次获取可用连接
con = getConnection();
}
} catch (SQLException e) {
log(“从连接池” + name + “删除一个无效连接”);
// 递归调用自己,尝试再次获取可用连接
con = getConnection();
}
} else if (maxConn == 0 || userCount < maxConn) {
con = newConnection();
}
if (con != null) {
userCount++;
}
return con;
}
public synchronized Connection getConnection(long timeout) {
long startTime = new Date().getTime();
Connection con;
while ((con = getConnection()) == null) {
try {
wait(timeout);
} catch (InterruptedException e) {
}
if ((new Date().getTime() – startTime) >= timeout) {
// wait()返回的原因是超时
return null;
}
}
return con;
}
public synchronized void release() {
Enumeration allConnections = freeConnections.elements();
while (allConnections.hasMoreElements()) {
Connection con = (Connection) allConnections.nextElement();
try {
con.close();
log(“关闭连接池” + name + “中的一个连接”);
} catch (SQLException e) {
log(“无法关闭连接池” + name + “中的连接”);
}
}
freeConnections.removeAllElements();
}
private Connection newConnection() {
Connection con = null;
try {
if (user == null) {
con = DriverManager.getConnection(URL);
} else {
con = DriverManager.getConnection(URL, user, password);
}
log(“连接池” + name + “创建一个新的连接”);
} catch (SQLException e) {
log(“无法创建下列URL的连接: ” + URL);
return null;
}
return con;
}
}
}
设置连接属性的hrms.txt内容
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
sqlserver.url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=hrms
sqlserver.user=sa
sqlserver.password=””
sqlserver.maxconn=2000
数据库操作
Translate.java
package hrms.action;
import hrms.database.DBConnect;
import hrms.util.*;
import java.sql.*;
import java.util.*;
import hrms.util.*;
public class Translate {
publicStringEmployeeID, PriorBranch,NextBranch,PriorDuty,NextDuty,HandleName,Remark;
public java.sql.Date TranslateDate;
public int TranslateNO;
public Translate() {
};
public String getEmployeeID() {
return EmployeeID;
}
public void setEmployeeID(String s) {
this.EmployeeID = s;
}
public String getPriorBranch() {
return PriorBranch;
}
public void setPriorBranch(String s) {
this.PriorBranch = s;
}
public String getNextBranch() {
return NextBranch;
}
public void setNextBranch(String s) {
this.NextBranch = s;
}
public String getPriorDuty() {
return PriorDuty;
}
public void setPriorDuty(String s) {
this.PriorDuty = s;
}
public String getNextDuty() {
return NextDuty;
}
public void setNextDuty(String s) {
this.NextDuty = s;
}
public String getHandleName() {
return HandleName;
}
public void setHandleName(String s) {
this.HandleName = s;
}
public String getRemark() {
return Remark;
}
public void setRemark(String s) {
this.Remark = s;
}
public void setTranslateNO(int i) {
this.TranslateNO = i;
}
public String getTranslateNO() {
return DataConvert.IntToStr(TranslateNO);
}
public String getTranslateDate() {
if (this.TranslateDate != null)
return DataConvert.sqlDateToStr(TranslateDate);
else
return “”;
}
public void setTranslateDate(String str) {
if (str != null)
this.TranslateDate = DataConvert.StrTosqlDate(str);
else
this.TranslateDate = null;
}
public static Translate FindByNO(String _TranslateNO) {
DBConnect dbc = null;
Translate translate = new Translate();
try {
dbc = new DBConnect();
dbc.prepareStatement(“SELECT * FROM translate WHERE TranslateNO=?”);
dbc.setString(1, _TranslateNO);
ResultSet rs = dbc.executeQuery();
if (rs.next()) {
translate.setTranslateNO(rs.getInt(“TranslateNO”));
translate.setEmployeeID(rs.getString(“EmployeeID”));
translate.setTranslateDate(rs.getString(“TranslateDate”));
translate.setPriorBranch(rs.getString(“PriorBranch”));
translate.setNextBranch(rs.getString(“NextBranch”));
translate.setPriorDuty(rs.getString(“PriorDuty”));
translate.setNextDuty(rs.getString(“NextDuty”));
translate.setHandleName(rs.getString(“HandleName”));
translate.setRemark(rs.getString(“Remark”));
} else {
translate = null;
}
} catch (Exception e) {
System.err.println(e);
} finally {
try {
dbc.close();
} catch (Exception e) {
e.printStackTrace();
translate = null;
}
}
return translate;
}
public static String Add(String _EmployeeID, String _TranslateDate,
String _PriorBranch, String _NextBranch, String _PriorDuty,
String _NextDuty,String _HandleName,String _Remark) {
DBConnect dbc = null;
try {
dbc = new DBConnect();
dbc.prepareStatement(“INSERT INTO Translate EmployeeID,TranslateDate,PriorBranch,NextBranch,”
+ “PriorDuty,NextDuty,HandleName,Remark) VALUES (?,?,?,?,?,?,?,?)”);
dbc.setString(1, _EmployeeID);
dbc.setDate(2, DataConvert.StrTosqlDate(_TranslateDate));
dbc.setString(3, _PriorBranch);
dbc.setString(4, _NextBranch);
dbc.setString(5, _PriorDuty);
dbc.setString(6, _NextDuty);
dbc.setString(7, _HandleName);
dbc.setString(8, _Remark);
dbc.executeUpdate();
dbc.close();
return “1”;
} catch (Exception e) {
System.err.println(e);
return e.toString();
}
}
public static String Modify(String _TranslateNO,String _EmployeeID, String _TranslateDate,
String _PriorBranch, String _NextBranch, String _PriorDuty,
String _NextDuty,String _HandleName,String _Remark) {
DBConnect dbc = null;
try {
dbc = new DBConnect();
dbc.prepareStatement(“UPDATE translate SET EmployeeID=?,TranslateDate=?,PriorBranch=?,NextBranch=?,”
+ “PriorDuty=?,NextDuty=?,HandleName=?,Remark=? WHERE TranslateNO=?”);
dbc.setString(1, _EmployeeID);
dbc.setDate(2, DataConvert.StrTosqlDate(_TranslateDate));
dbc.setString(3, _PriorBranch);
dbc.setString(4, _NextBranch);
dbc.setString(5, _PriorDuty);
dbc.setString(6, _NextDuty);
dbc.setString(7, _HandleName);
dbc.setString(8, _Remark);
dbc.setInt(9, DataConvert.StrToInt(_TranslateNO));
dbc.executeUpdate();
dbc.close();
return “1”;
} catch (Exception e) {
e.printStackTrace();
return e.toString();
}
}
public static String Delete(String _TranslateNO) {
try {
DBConnect dbc = new DBConnect();
dbc.prepareStatement(“DELETE FROM translate WHERE TranslateNO=?”);
dbc.setInt(1, DataConvert.StrToInt(_TranslateNO));
dbc.executeUpdate();
dbc.close();
return “1”;
} catch (Exception e) {
e.printStackTrace();
return e.toString();
}
}
public static Vector SearchByID(String _EmployeeID) {
DBConnect dbc = null;
Vector TranslateVector = new Vector();
try {
dbc = new DBConnect();
dbc
.prepareStatement(“SELECT * FROM translate WHERE EmployeeID=? ORDER BY TranslateDate ASC”);
dbc.setString(1, _EmployeeID);
ResultSet rs = dbc.executeQuery();
while (rs.next()) {
Translate translate = new Translate();
translate.setTranslateNO(rs.getInt(“TranslateNO”));
translate.setEmployeeID(rs.getString(“EmployeeID”));
translate.setTranslateDate(rs.getString(“TranslateDate”));
translate.setPriorBranch(rs.getString(“PriorBranch”));
translate.setNextBranch(rs.getString(“NextBranch”));
translate.setPriorDuty(rs.getString(“PriorDuty”));
translate.setNextDuty(rs.getString(“NextDuty”));
translate.setHandleName(rs.getString(“HandleName”));
translate.setRemark(rs.getString(“Remark”));
TranslateVector.add(translate);
}
} catch (Exception e) {
System.err.println(e);
} finally {
try {
dbc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return TranslateVector;
}
public static Vector ListAll() {
DBConnect dbc = null;
Vector TranslateVector = new Vector();
String strSQL = “SELECT * FROM translate ORDER BY EmployeeID,TranslateDate ASC”;
try {
dbc = new DBConnect();
dbc.prepareStatement(strSQL);
ResultSet rs = dbc.executeQuery();
while (rs.next()) {
Translate translate = new Translate();
translate.setTranslateNO(rs.getInt(“TranslateNO”));
translate.setEmployeeID(rs.getString(“EmployeeID”));
translate.setTranslateDate(rs.getString(“TranslateDate”));
translate.setPriorBranch(rs.getString(“PriorBranch”));
translate.setNextBranch(rs.getString(“NextBranch”));
translate.setPriorDuty(rs.getString(“PriorDuty”));
translate.setNextDuty(rs.getString(“NextDuty”));
translate.setHandleName(rs.getString(“HandleName”));
translate.setRemark(rs.getString(“Remark”));
TranslateVector.add(translate);
}
} catch (Exception e) {
System.err.println(e);
} finally {
try {
dbc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return TranslateVector;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34327.html