天天看點

Java Web 開發進階案例之人事管理系統的完整實作 - demo例子集

Java Web 開發進階案例之人事管理系統的完整實作

本系統的主要任務是實作人事管理系統的系統化和自動化管理, 主要包括招聘入 職、到期離職和員工調動資訊管理等功能。具體完成的功能如下: 員工資訊管理:員工資訊查詢、員工入職登記,員工資訊更改、删除等 員工調動管理:員工調動登記、員工調動記錄查詢,員工調動資訊更改、删除等 銀行賬戶管理: 公司銀行賬戶管理:公司銀行賬戶登記和公司銀行賬戶資訊更改。 員工銀行賬戶管理:員工銀行賬戶登記、員工銀行賬戶更改和删除等 公司資訊管理: 職位類别管理:職位類别添加、職位類别資訊更改、删除等 部門資訊管理:部門類别添加、部門資訊更改、删除等 系統管理: 登入密碼修改子產品 管理者管理子產品:管理者添加、管理者資訊更改和管理者删除等 系統幫助:關于使用該系統的一些幫助文檔資訊。 MyEclipse 8.5 +java+jsp + servlet+ javabeans + tomcat

技術:Java+ jsp + servlet+ javabeans +sql+tomcat

概述

本系統的主要任務是實作人事管理系統的系統化和自動化管理, 主要包括招聘入 職、到期離職和員工調動資訊管理等功能。具體完成的功能如下: 員工資訊管理:員工資訊查詢、員工入職登記,員工資訊更改、删除等 員工調動管理:員工調動登記、員工調動記錄查詢,員工調動資訊更改、删除等 銀行賬戶管理: 公司銀行賬戶管理:公司銀行賬戶登記和公司銀行賬戶資訊更改。 員工銀行賬戶管理:員工銀行賬戶登記、員工銀行賬戶更改和删除等 公司資訊管理: 職位類别管理:職位類别添加、職位類别資訊更改、删除等 部門資訊管理:部門類别添加、部門資訊更改、删除等 系統管理: 登入密碼修改子產品 管理者管理子產品:管理者添加、管理者資訊更改和管理者删除等 系統幫助:關于使用該系統的一些幫助文檔資訊。 MyEclipse 8.5 +java+jsp + servlet+ javabeans + tomcat

詳細

代碼下載下傳:http://www.demodashi.com/demo/14725.html

一、概述

本系統的主要任務是實作人事管理系統的系統化和自動化管理, 主要包括招聘入

職、到期離職和員工調動資訊管理等功能。具體完成的功能如下:

員工資訊管理:員工資訊查詢、員工入職登記,員工資訊更改、删除等

員工調動管理:員工調動登記、員工調動記錄查詢,員工調動資訊更改、删除等

銀行賬戶管理:

公司銀行賬戶管理:公司銀行賬戶登記和公司銀行賬戶資訊更改。

員工銀行賬戶管理:員工銀行賬戶登記、員工銀行賬戶更改和删除等

公司資訊管理:

職位類别管理:職位類别添加、職位類别資訊更改、删除等

部門資訊管理:部門類别添加、部門資訊更改、删除等

系統管理:

登入密碼修改子產品

管理者管理子產品:管理者添加、管理者資訊更改和管理者删除等

系統幫助:關于使用該系統的一些幫助文檔資訊。

二、 開發平台與環境

本系統是 基于 B/S 平台的系統,利用 jsp + servlet+ javabeans 技術,基于 MVC 三層模式,

開發工具使用 MyEclipse 8.5 內建開發環境,資料庫管理工具 SQL Server 2005 等。

三、系統的分析、設計與實作

1 系統分析:

(1) 角色分析:由于該系統屬于典型的 MIS 管理系統,系統主要使用對象是管理者,分

為兩類普通管理者和系統管理者;普通管理者隻具有一般的檢視、查詢和檢索權限;

系統管理者除了普通管理者所具有的權限外,還有進階權限:對所有資訊做出更改,

删除等權限功能。

(2) 用例分析:根據用例分析所得到如下系統用例圖:

2 系統設計:

2.1 資料庫設計:

根據系統的分析與設計,如下設計資料庫的資料表和資料結構:

2.1.1 邏輯表設計:

管理者表: id,登入名,登入密碼,管理者類型号

管理者類型表: id,管理者類型号,管理者類型

員工基本資訊表: id,員工編号,姓名,性别,出生日期,職位,部門,工資,入職時

間,身份證号

職位類别表: id,崗位編号,崗位名稱,崗位工資

部門資訊表: id,部門編号,部門名稱,部門職能,部門上司

職位設定表: id,部門編号,崗位編号)

員工調動表: id,職工編号,原職位,調任職位,原部門編号,調任部門編号,性質,備

公司基本資訊表: id,公司名稱,公司性質,法人代表,公司位址,電話,郵箱:

公司銀行賬戶表: id,銀行賬号,銀行賬戶類型,開戶行,備注:

員工銀行賬戶表: id,員工編号,銀行賬号,銀行賬戶,開戶行,備注:

2.1.2 資料字典設計:

資料字典:

管理者表(admins)

字段 類型 備注
id Int 主鍵,自增
aName Nvarchar(20) 管理者登入名
aPwd Nvarchar(20) 管理者登陸密碼
aTypeId Int 管理者類型号

管理者類型表(admintype)

字段 類型 備注
id Int 主鍵,自增
aTypeId Nvarchar(20) 管理者類型
aTypeName Nvarchar(20) 管理者類型名稱

員工基本資訊表(staff)

字段 類型 備注
id Int 主鍵,自增
sId Nvarchar(14) 員工編号
sName Nvarchar(20) 員工姓名
sSex Nvarchar(2) 員工性别
sBirthday Datetime 出生日期
sPost Nvarchar(20) 職位,崗位
sDepartment Nvarchar(20) 部門
sSalary Int 工資
sEntry Datetime 入職時間
sIdentityId Nvarchar(20) 身份證号

職位類别表(postcategory)

字段 類型 備注
id Int 主鍵,自增
pId Nvarchar(20) 職位編号
pName Nvarchar(20) 職位名稱
pSalary int 職位工資

部門資訊表(department)

字段 類型 備注
id Int 主鍵,自增
dId Nvarchar(20) 部門編号
dName Nvarchar(20) 部門名稱
dFunction Text 部門職能
dLeader Nvarchar(20) 部門上司(經理)

職位設定表(postsetting)

字段 類型 備注
id Int 主鍵,自增
pId Nvarchar(20) 職位編号
dId Nvarchar(20) 部門編号

員工調動表(staffchange)

字段 類型 備注
id Int 主鍵,自增
sId Nvarchar(10) 員工編号
pIdOld Nvarchar(20) 原職位編号
pIdNew Nvarchar(20) 調任職位編号
dIdOld Nvarchar(20) 原部門編号
dIdNew Nvarchar(20) 調任部門編号
sNature Nvarchar(20) 性質(長期或短期)
sRemark Text 備注

公司基本資訊表(company)

字段 類型 備注
id Int 主鍵
cName Nvarchar(50) 公司名稱
cNature Nvarchar(20) 公司性質
cLegalPerson Nvarchar(20) 法人代表
cAddress Nvarchar(100) 公司位址
cTel Nvarchar(20) 電話
cEmail Nvarchar(40) 郵箱

公司銀行賬戶表(companybank)

字段 類型 備注
id Int 主鍵
bId Nvarchar(30) 銀行賬号
cBankType Nvarchar(20) 銀行賬戶類型
cBankName Nvarchar(60) 開戶行
cRemark Text 備注

員工銀行賬戶表(staffbank)

字段 類型 備注
id Int 主鍵,自增
sId Nvarchar(20) 員工編号
bId Nvarchar(30) 銀行賬号
cBankType Nvarchar(20) 銀行賬戶類型
cBankName Nvarchar(60) 開戶行
cRemark Text 備注

2.2 系統設計思想

(1)系統界面設計

由于該系統是個典型的 MIS 管理系統,本系統采用架構頁面設計模式。常用

的頭部和尾巴設計成單獨子產品,提高開發效率,提高子產品重用性,友善系統更新。

(2)系統架構模式

本系統采用的是基于 Web 的 Java EE MVC 三層架構模式。

三層架構模式的原理圖如下:

而将 MVC 三層模式應用于 Java EE 中,就是基于 JSP+Servlet+javabeans,其中, JSP 是視圖,

servlet 是控制器,而 javabeans 則是模型。原理圖如下:

3 系統實作:

(1)公用子產品:

Commons Dbutils jar 包:該包是 apache 開發的一個用來常用操作的工具包。

位元組編碼過濾功能:該子產品是使用過濾器技術對所有 servlet 編碼設定進行過濾,主要用來解

決 jsp 中漢字問題。核心代碼如下:

public class CharacterEncodingFilter implements Filter {
private FilterConfig config ;
private String encoding="ISO-8859-1";
public void destroy() {
// TODO Auto-generated method stub
config = null;
}
public void doFilter(ServletRequest request, ServletResponse
response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config = config;
String s = config.getInitParameter("encoding");
if(s!=null){
encoding = s;
}
}
}      

Tomcat 資料庫連接配接池技術:本系統采用 tomcat 資料池技術,便于資料庫的配置和通路。 具

體配置是在 tomcat 安裝目錄下的 conf 檔案下的 context.xml 檔案中添加如下代碼:

<Resource name="jdbc/permanageds"
auth="Container"
type="javax.sql.DataSource"
maxActive = "100"
maxIdle="30"
maxWait="10000"
username="sa"
password="caizhiming"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=permanage"
/>      

SQL 資料庫操作工具類:該類主要用來處理與資料庫相關的操作,核心代碼如下:

public class SqlDbUtil {
private String dataSourceName;
private DataSource ds;
public SqlDbUtil() {
// TODO Auto-generated constructor stub
}
public SqlDbUtil(String dataSourceName){
this.dataSourceName = dataSourceName;
}
public void setDataSourceName(String dataSourceName) {
this.dataSourceName = dataSourceName;
}
public void setDs(DataSource ds) {
this.ds = ds;
}
//初始化資料源
public void init(){
try {
Context initContext = new InitialContext();
this.ds = (DataSource)initContext.lookup(dataSourceName);
initContext.close();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//更新資料庫語句,結果傳回int類型
public int update(String sql,String[] params){
QueryRunner qr = new QueryRunner(ds);
int result = 0;
try {
if(params!=null)
result = qr.update(sql, params);
else {
result = qr.update(sql);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
//更新資料庫語句,結果傳回為Object類型,建立javabeans類型時用
public Object query(String sql,String[] params,ResultSetHandler
rsh){
QueryRunner qr = new QueryRunner(ds);
Object results = null;
try {
results=qr.query(sql, params, rsh);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return results;
}
}      

字元串工具類: 該類主要用類處理一些字元串相關操作等所用到的工具方法,相關核心代碼

如下:

public class StringUtil {
//驗證字元串是否為空
public static boolean validateNull(String s){
if(s==null || s.length()==0)
return true;
else {
return false;
}
}
//改變空字元串
public static String changeNull(String source,String target){
if(source==null || source.length()==0 ||
source.equalsIgnoreCase("null"))
return target;
else {
return source;
}
}
//過濾 html标記符
public static String filterHtml(String s){
if(s==null)
return null;
if(s.length()==0)
return s;
s.replaceAll("&", "&");
s.replaceAll("<", "<");
s.replaceAll(">", ">");
s.replaceAll(" ", " ");
s.replaceAll("\'", "\';");
s.replaceAll("\"", """);
s.replaceAll("\n", "<br/>");
return s;
}
}      

(2) 系統登入子產品實作: 該子產品是系統的使用入口,通過該入口進入系統。 登入驗證采用

Session 驗證機制。

核心代碼如下:

String path =request.getContextPath();
request.setCharacterEncoding("utf-8");
int typeId = 1;
String name = request.getParameter("name").trim();
String pwd = request.getParameter("pwd");
String type = request.getParameter("type");
if(type.equalsIgnoreCase("普通管理者"))
typeId = 0;
String strCmd ="select * from admins where aName=\'"+name+"\' and
aPwd=\'"+pwd+"\' and aTypeId=\'"+typeId+"\' ";
SqlDbUtil dbUtil = new
SqlDbUtil("java:/comp/env/jdbc/permanageds");
dbUtil.init();
List list = (List)dbUtil.query(strCmd, null, new
BeanListHandler(Admins.class));
if(list.size()!=0){
HttpSession session = request.getSession();
Admins ad = (Admins)list.get(0);
session.setAttribute("aId", ad.getId());
session.setAttribute("name", name);
session.setAttribute("type", type);
response.sendRedirect(path+"/index.jsp");
}
else {
response.sendRedirect(path+"/login.jsp");
request.setAttribute("msg", "使用者名或密碼錯誤,請重新登入!");
}      

登入界面如下:

(3) 員工資訊管理子產品實作

該子產品主要有員工資訊查詢、入職登記以及修改删除等。

員工資訊查詢主要是通過搜尋檢索查詢員工的資訊,查詢結果分頁形式顯示出來,

具體核心代碼如下:

String text = "%"+request.getParameter("search").trim()+"%";
String type = request.getParameter("type").trim();
SqlDbUtil dbUtil = new
SqlDbUtil("java:/comp/env/jdbc/permanageds");
dbUtil.init();
//每頁顯示記錄數
int PageSize =8;
int StartRow = 0; //開始顯示記錄的編号
int PageNo = 0;//需要顯示的頁數
int CounterStart = 0;//每頁頁碼的初始值
int CounterEnd = 0;//顯示頁碼的最大值
int RecordCount = 0;//總記錄數;
int MaxPage = 0;//總頁數
int PrevStart = 0;//前一頁
int NextPage = 0;//下一頁
int LastRec = 0;
//int LastStartRecord = 0;//最後一頁開始顯示記錄的編号
//擷取需要顯示的頁數,由使用者送出
if (request.getParameter("page") == null) { //如果為空,則表示第1
頁
if (StartRow == 0) {
PageNo = StartRow + 1; //設定為1
}
} else {
PageNo = Integer.parseInt(request.getParameter("page")); //
獲得使用者送出的頁數
StartRow = (PageNo - 1) * PageSize; //獲得開始顯示的記錄編号
}
//因為顯示頁碼的數量是動态變化的,假如總共有一百頁,則不可能同時顯示100個鍊
接。而是根據目前的頁數顯示
//一定數量的頁面連結
//設定顯示頁碼的初始值!!
if (PageNo % PageSize == 0) {
CounterStart = PageNo - (PageSize - 1);
} else {
CounterStart = PageNo - (PageNo % PageSize) + 1;
}
CounterEnd = CounterStart + (PageSize - 1);
String strSql1 = null;
if(type.equals("sId"))
strSql1 = "select * from staff where sId like \'"+text+"\'";
if(type.equals("sName"))
strSql1 = "select * from staff where sName like \'" +text+ "\'";
if(text.isEmpty())
strSql1 = "select * from staff ";
List list = (List) dbUtil.query(strSql1, null, new
BeanListHandler(Staff.class));
RecordCount = list.size();
//取特定頁數的資料
String strColumn = " * ";
String strTable = " staff ";
String strSort = " id desc ";
String PKID = "id";
String strSql2 = "";
String strWhere = "where " + type +" like "+ "\'"+text+"\'" ;
String START_ID = Integer.toString((PageNo - 1) * PageSize + 1);
String END_ID = Integer.toString(PageNo * PageSize);
strSql2 = " SELECT " + strColumn
+ " FROM (SELECT ROW_NUMBER() OVER(ORDER BY " + strSort
+ ") AS rownum," + strColumn + " FROM " + strTable
+ " WITH(NOLOCK) " + strWhere
+ ") AS D WHERE rownum BETWEEN " + START_ID + " AND "
+ END_ID + " ORDER BY " + strSort;
//擷取總頁數
MaxPage = RecordCount % PageSize;
if (RecordCount % PageSize == 0) {
MaxPage = RecordCount / PageSize;
}
else {
MaxPage = RecordCount / PageSize + 1;
}
List list2 = (List) dbUtil.query(strSql2, null, new
BeanListHandler(Staff.class));
request.setAttribute("staff", list2);
request.setAttribute("PageSize", PageSize);
request.setAttribute("StartRow", StartRow);
request.setAttribute("PageNo", PageNo);
request.setAttribute("CounterStart", CounterStart);
request.setAttribute("CounterEnd", CounterEnd);
request.setAttribute("RecordCount", RecordCount);
request.setAttribute("MaxPage", MaxPage);
request.setAttribute("PrevStart", PrevStart);
request.setAttribute("NextPage", NextPage);
request.setAttribute("LastRec", LastRec);
request.getRequestDispatcher("/staff/staffsearch.jsp").forward(re
quest, response);      

系統主界面如下:

入職登記是登記新入職員工資訊,具體核心代碼如下:

String path = request.getContextPath();
int result = 0;
String sId = null;
String sName = request.getParameter("sName").trim();
String sSex = request.getParameter("sSex").trim();
String
birth=request.getParameter("birthyear")+"-"+request.getParameter("bir
thmon");
birth+="-"+request.getParameter("birthday");
String job =
request.getParameter("jobyear")+"-"+request.getParameter("jobmon");
job += "-"+request.getParameter("jobday");
Date birthDate =null;
Date jobDate = null;
Date sIdDate=null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2=new SimpleDateFormat("yyyyMMddHHmmss");
try {
birthDate = sdf.parse(birth);
jobDate = sdf.parse(job);
sId = sdf2.format(new java.util.Date());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String pId = request.getParameter("sPost").trim();// 擷取的是職位
對應的職位編号
String sSalary = request.getParameter("sSalary").trim();
String sIdentityId =
request.getParameter("sIdentityId").trim();
SqlDbUtil db = new SqlDbUtil("java:/comp/env/jdbc/permanageds");
db.init();
String strCmd2 = "select * from postsetting where pId =\'" + pId
+ "\'";
List list2 = (List) db.query(strCmd2, null, new
BeanListHandler(Postsetting.class));
Postsetting ps = (Postsetting) list2.get(0);
String dId = ps.getdId();
String strCmd4 = "select * from postcategory where pId =\'" + pId
+ "\'";
List list4 = (List) db.query(strCmd4, null, new
BeanListHandler(Postcategory.class));
Postcategory pc = (Postcategory) list4.get(0);
String sPost =pc.getpName();
String strCmd3 = "select * from department where dId =\'" + dId +
"\'";
List list3 = (List) db.query(strCmd3, null, new
BeanListHandler(Department.class));
Department dt = (Department) list3.get(0);
String sDepartment = dt.getdName();// 擷取到職位所隸屬的部門名稱
String strCmd = "insert into staff
(sId,sName,sSex,sBirthday,sPost,sDepartment,sSalary,sEntry,sIdentityI
d) values(?,?,?,?,?,?,?,?,?)";
String[] params = { sId, sName, sSex, sdf.format(birthDate),
sPost,sDepartment, sSalary, sdf.format(jobDate), sIdentityId };
for(int i=0;i<100000;i++){
result = db.update(strCmd, params);
}
if (result == 0) {
String message = "對不起,内容更新失敗,請重新更新! <br/>";
request.getRequestDispatcher("/company/addpostcategory.jsp")
.forward(request, response);
} else {
response.sendRedirect(path + "/servlet/manageStaff");
}      

員工資訊管理主要是負責員工資訊的修改和删除功能。

資訊修改的核心代碼如下:

String path = request.getContextPath();
int result = 0;
request.setCharacterEncoding("utf-8");
String sName = request.getParameter("sName").trim();
String sSex = request.getParameter("sSex").trim();
String
birth=request.getParameter("birthyear")+"-"+request.getParameter("bir
thmon");
birth+="-"+request.getParameter("birthday");
String job =
request.getParameter("jobyear")+"-"+request.getParameter("jobmon");
job += "-"+request.getParameter("jobday");
Date birthDate =null;
Date jobDate = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
try {
birthDate = sdf.parse(birth);
jobDate = sdf.parse(job);
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String sId = request.getParameter("sId").trim();
String pId = request.getParameter("sPost").trim();// 擷取的是職位
對應的職位編号
String sSalary = request.getParameter("sSalary").trim();
String sIdentityId =
request.getParameter("sIdentityId").trim();
SqlDbUtil db = new SqlDbUtil("java:/comp/env/jdbc/permanageds");
db.init();
String strCmd2 = "select * from postsetting where pId =\'" + pId
+ "\'";
List list2 = (List) db.query(strCmd2, null, new
BeanListHandler(Postsetting.class));
Postsetting ps = (Postsetting) list2.get(0);
String dId = ps.getdId();
String strCmd4 = "select * from postcategory where pId =\'" + pId
+ "\'";
List list4 = (List) db.query(strCmd4, null, new
BeanListHandler(Postcategory.class));
Postcategory pc = (Postcategory) list4.get(0);
String sPost =pc.getpName();
String strCmd3 = "select * from department where dId =\'" + dId +
"\'";
List list3 = (List) db.query(strCmd3, null, new
BeanListHandler(Department.class));
Department dt = (Department) list3.get(0);
String sDepartment = dt.getdName();// 擷取到職位所隸屬的部門名稱
String strCmd="update staff set sName=?, sSex=?, sBirthday=?,
sPost=?, sDepartment=?, sSalary=?, sEntry=?, sIdentityId=? where
sId=\'"+sId+"\'";
String[] params = { sName, sSex, sdf.format(birthDate),
sPost,sDepartment, sSalary, sdf.format(jobDate), sIdentityId };
result = db.update(strCmd, params);
if (result == 0) {
String message = "對不起,内容更新失敗,請重新更新! <br/>";
request.getRequestDispatcher("/staff/addstaff.jsp")
.forward(request, response);
} else {
response.sendRedirect(path + "/servlet/manageStaff");
//request.getRequestDispatcher("/servlet/manageStaff").forward(re
quest, response);
}      

删除功能的核心代碼如下:

String path = request.getContextPath();
int result = 0;
request.setCharacterEncoding("utf-8");
String sId = request.getParameter("sId").toString();
//String strCmd = "delete from where id=\'"+id+"\'";
String strCmd = "delete from staff where sId=\'"+sId+"\'";
SqlDbUtil dbUtil = new
SqlDbUtil("java:/comp/env/jdbc/permanageds");
dbUtil.init();
result = dbUtil.update(strCmd, null);
if(result > 0)
response.sendRedirect(path+"/servlet/manageStaff");      

(4) 員工調動資訊管理子產品實作

該子產品主要是實作員工調動資訊的管理,主要包括員工調動資訊登記,更改和删除,

相關核心代碼與員工資訊管理類似,詳見源代碼。 實作界面如下:

(5) 銀行賬戶資訊子產品實作

該子產品主要是實作公司銀行和員工工資賬戶的管理,主要包括公司銀行賬戶的建立、

檢視和修改以及員工工資賬戶的登記、修改和删除等功能,相關核心代碼與員工信

息管理類似, 在此不累贅, 詳見源代碼。 實作界面如下:

(6) 公司資訊管理子產品實作

該子產品主要是實作公司相關資訊的管理,主要包括公司基本資訊的檢視和更新、公

司部門資訊管理以及公司職位類别管理, 該子產品的相關核心代碼實作與員工資訊管

理類似, 在此不累贅, 詳見源代碼。

(7) 系統管理子產品實作

該子產品主要是實作系統管理者的管理,主要包括管理者添加、更新和删除等功能,

相關核心代碼與上面的類似,在此不累贅,詳見源代碼。 實作界面如下:

四、項目代碼目錄結構圖

代碼下載下傳:http://www.demodashi.com/demo/14725.html

注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權