JavaWeb課設——人力資源管理系統


碼雲地址:https://gitee.com/kssj-jyw-zy/text

一、實驗選題

1.1實驗內容

本次課程設計內容為基於JavaWeb的人力資源管理系統。主要的工作如下:

①管理員用戶的登錄。

②實現管理企業的員工信息。

③實現管理企業的部門信息。

④實現企業的應聘信息的管理功能。

⑤實現企業員工培訓的一系列相關信息的管理。

⑥實現企業獎懲信息的管理。

⑦實現員工薪酬信息的管理。

⑧實現管理員賬戶信息的管理。

⑨實現安全退出系統 

1.2相關技術及工具

主要工具Java+Tomcat8.5+Mysql8.0.18。

開發平台是Ecplise。

主要運用了JSP+JavaBean+Servlet模式進行開發,還運用到了Ajax網頁開發技術、Jquery庫、DataTable插件、layui前端UI框架。

Ajax:Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創建交互式、快速動態網頁應用的網頁開發技術,無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。運用Ajax主要是考慮完成一些數據庫操作時不需要刷新整個網頁即可更新表格中顯示的內容,它具有更好的交互性。

Jquery:JQuery是一個快速、簡潔的JavaScript框架,一個優秀的JavaScript代碼庫。運用Jqeury主要是因為用到的Ajax、DataTable、layui等和JavaScript的地方需要它來支持,簡化了JavaScript代碼的編寫。

DataTable:Datatable是一款Jquery表格插件。它是一個高度靈活的工具,可以將任何HTML表格添加高級的交互功能,如分頁、即時搜索和排序。運用DataTable主要是為了方便的顯示和操作數據庫中的數據,當初在搜索表格插件的時候先看到的是Bootstrap Table,后來經過了解后選擇了感覺更適合本項目的DataTable,雖然剛開始學習的時候感覺無從入手,但在學會之后發現還是很方便的,功能十分強大。

layui:layui(諧音:類UI) 是一款采用自身模塊規范編寫的前端 UI 框架,遵循原生 HTML/CSS/JS 的書寫與組織形式,門檻極低,拿來即用。最先用到的是layui下的模塊layer,它是一個web彈層組件,因為在考慮修改和插入數據時,感覺點擊按鈕后跳轉到一個新的頁面過於繁瑣,所以考慮可不可以用彈窗來做,后來經過查詢看到了十分簡潔的layer,試着用了下,發現效果很不錯。后來接着用了layui下的一些樣式和laydate等模塊優化系統的頁面細節和操作細節。

 

二、總體設計(含背景知識或基本原理與算法、或模塊介紹、設
計步驟等)

2.1需求概述

  • 對企業人力資源管理的基本信息進行管理。
  • 管理企業的員工信息(即人事管理功能)。
  • 實現為個人提供網絡工作平台的功能。
  • 實現企業的應聘信息的管理功能。
  • 實現企業員工培訓的一系列相關信息的管理。
  • 員工薪酬信息管理。
  • 系統用戶信息的管理。

 

 

 

 

               圖2.1系統角色與用例分析模型

 

2.2系統業務流程分析

1)用戶輸入賬號、密碼后登錄到管理界面。

2)單擊“部門管理”導航按鈕,對部門信息進行添加、查詢及刪除操作。

3)單擊“員工管理”導航按鈕,對員工信息進行添加、修改、查詢及刪除操作。

4)單擊“招聘管理”導航按鈕,對招聘人信息進行添加、查詢、刪除及錄用操作。

5)單擊“培訓管理”導航按鈕,對培訓信息進行添加、查詢及刪除操作。

6)單擊“獎懲管理”導航按鈕,對獎懲信息進行添加、查詢及刪除操作。

7)單擊“薪資管理”導航按鈕,對薪資信息進行添加、查詢及刪除操作。

8)單擊“系統管理”導航按鈕,對管理員信息進行添加、查詢、刪除操作。

9)單擊“用戶修改”按鈕,對當前用戶密碼進行修改操作。

10)單擊“安全退出”按鈕,退出當前操作系統。

2.3功能分析及系統模塊設計

   管理員通過輸入正確的賬戶和密碼可以登入系統。進入首頁后可在首頁添加所有記錄。然后可以分別通過導航欄進入相應模塊進行數據操作,包括數據的刪除,修改,查詢,還有可以對數據進行排序。系統的功能總的可以分為下圖的這些模塊,主要是用戶登錄驗證和各模塊的增刪查改還有各種模塊所有記錄的排序,還有一些在不同表之間實現的操作,如在招聘表中的信息可經過錄用進入員工表。

 

 

 

                      圖2.2模塊功能圖

 

2.4系統架構設計

      整個系統以這個架構進行搭建,用戶按照這個順序實現數據操作。

 

 

                           圖2.3 項目架構圖

 

四、詳細設計(含主要的數據結構、程序流程圖、關鍵代碼等)

3.1數據庫設計

1)概念結構設計

                        圖3.1 數據庫的ER

2)物理結構設計

表結構設計

                                                                        員工表

id:員工號 name:員工姓名 sex:性別 department:部門號 job:職務 education:學歷  date:入職時間

 

 

                                                                       部門表

 

id:部門號 name:部門名 date:創建時間 count:部門人數 remark:備注           

        

                                                                       招聘表

 

id:編號 name:姓名 sex:性別 job:工作 education:學歷 experience:工作經驗

 

 

                                                                        獎懲表

 

id:編號 subject:獎懲主題 type:獎懲類型 money:獎懲金額 date:獎懲時間 name:獎懲人員

             

                                                                      培訓表

id:編號 name:培訓人 subject:培訓主題 date:培訓時間 place:培訓地點

 

 

                                                                     薪酬表

 

 

id:員工編號 name:員工姓名 date:當前月份 money:基本工資 etc_money1:加班費 etc_money2:工齡費  etc_money3:考勤費 etc_money4:曠工費 etc_money5:保險費 total:實發工資

 

                                                                  管理員賬戶表

id:序號 account:賬號 password:密碼

 

3.2系統子模塊流程設計

 

 

     圖3.3前端模塊的所有文件                                                                  圖3.4后端模塊的所有文件 

 

 以上為所有的代碼模塊,還有配置servletweb.xmlWEB-INF下。總體上管理員用戶在JSP頁面上通過Js交互將數據用ajaxJson的格式傳輸到對應的servletdoGet方法,doGet方法中定義了一個action對象,存儲操作類型,以switch case的模式獲取前端傳來的action參數,從而在Servlet中調用相應的Dao函數,與數據庫進行連接操作,操作完成后返回數據操作結果,將相應的結果存儲進Json對象中,用out對象輸出Json數據通過ajax到前端。前端獲得相應的數據后動態更新網頁部分內容,完成一次完整的操作。

(1) 算法描述

      以下已招聘模塊為例,用到的文件為Dbutil.java、RecruitDao.java、Recruit.java、RecruitServlet、recruit.js、recruitPage.jsp.

① 管理員用戶在前台瀏覽器操作rectuitPage.jsp,通過在rectuit.js中的ajax將相應的數據和操作類型action傳輸到RecruitServlet中。

② Recruit的doGet方法中通過switch case識別action操作類型,轉到對應的處理方法中。

③ 處理方法中實例化RecruitDao對象並調用DBUtil.java提供的方法連接和操作數據庫。

④ 返回的數據放入json格式的對象中,然后通過ajax將輸送到recruitPage.jsp

(2) 關鍵類說明

RecruitDao.java:封裝了關於招聘表在數據庫中增刪改查的方法,可實例化對象后調用方法。

Recruit.java:一個JavaBean類,用於封裝招聘表中的數據。

RecruitServlet.java:接收前台發送的操作指令,負責處理招聘表中需要進行的所有操作,同時也是在此調用Dao里面的方法。

DBUtil.java:封裝了獲取數據庫連接和釋放數據庫連接的方法,可用類名加方法名直接調用。

recruit.js:在此調用DataTable表格插件,設置DataTable屬性實現分頁排序等功能,同時用ajax傳遞數據顯示在表格上,調用layer彈窗組件優化用戶體驗。

recruitPage.jsp:招聘信息操作界面。

login.jsp:用戶登錄界面。

mainPage.jsp:首頁,由所有表的添加構成。

其他的模塊的頁面都與上述相差不大,各模塊大多都由這幾個關鍵文件構成。

 

3.3關系技術設計及實現(這里只展現招聘模塊的實現

 recruitPage.jsp(這是招聘管理界面)

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 
 4 <!DOCTYPE html>
 5 <html>
 6     <head>
 7         <meta charset="utf-8" />
 8         <title>人力資源管理系統主頁</title>
 9         <link rel="stylesheet" media="screen" href="${pageContext.request.contextPath}/css/login.css">
10         <link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.css">
11         <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/table.css">
12         <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/layui/css/layui.css">
13        
14     </head>
15     <body>
16         <!-- particles.js con tainer -->
17         <div id="particles-js" style="display: flex;align-items: center;justify-content: center">
18             <canvas class="particles-js-canvas-el" style="width: 100%; height: 100%;" width="472" height="625"></canvas>
19         </div>
20         <!-- 以上為背景 -->
21         <!-- 以下為導航欄 -->
22         <div id="nav">
23         <p>人力資源管理系統</p>
24             <ul>
25                  <li><a href="mainPage.jsp">首頁</a></li>
26                 <li><a href="departmentPage.jsp" >部門管理</a></li>
27                 <li><a href="personPage.jsp" >員工管理</a></li>
28                 <li><a href="recruitPage.jsp">招聘管理</a></li>
29                 <li><a href="cultivatePage.jsp" >培訓管理</a></li>
30                 <li><a href="rewardPage.jsp">獎懲管理</a></li>
31                 <li><a href="salaryPage.jsp" >薪酬管理</a></li>
32                 <li><a href="addAccountPage.jsp">系統管理</a></li>
33             </ul>
34             <div id="exit">
35             <a id="xiu" href="changeAccountPage.jsp">修改賬戶&nbsp;&nbsp;&nbsp;</a>
36             <a href="login.jsp">安全退出</a>
37             </div>
38         </div>
39         <!-- 以上為導航欄 -->
40         <div id="content">
41         <!--內容在這里加 -->
42         <!-- 設置顯示數據的表格-->
43         <table id="recruitTable" class="dataTable" >
44     <thead>
45         <tr>
46             <th width="10%">編號</th>
47             <th width="15%">姓名</th>
48             <th width="10%">性別</th>
49             <th width="20%">應聘職務</th>
50             <th width="15%">學歷</th>
51             <th width="10%">工作經驗</th>
52             <th width="30%">操作<th>     
53         </tr>
54     </thead>
55     <tbody>
56 
57      </tbody>
58     </table>
59         </div>
60         <!-- scripts -->
61         <script src="${pageContext.request.contextPath}/js/login.js"></script>
62         <script src="${pageContext.request.contextPath}/js/loginApp.js"></script>
63        <script src="https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
64 <script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
65 <script src="${pageContext.request.contextPath}/js/recruit.js"></script>
66 <script src="${pageContext.request.contextPath}/layer/layer.js"></script>
67 <script src="${pageContext.request.contextPath}/laydate/laydate.js"></script>
68         <script>
69             function changeImg() {
70                 let pic = document.getElementById('picture');
71                 console.log(pic.src)
72                 if (pic.getAttribute("src", 2) == "img/check.png") {
73                     pic.src = "img/checked.png"
74                 } else {
75                     pic.src = "img/check.png"
76                 }
77             }
78 
79 //以下實現導航欄高亮
80 var urlstr = location.href;
81   //alert(urlstr);
82   var urlstatus=false;
83   $("#nav a").each(function () {
84     if ((urlstr + '/').indexOf($(this).attr('href')) > -1&&$(this).attr('href')!='') {
85       $(this).addClass('cur'); urlstatus = true;
86     } else {
87       $(this).removeClass('cur');
88     }
89   });
90   if (!urlstatus) {$("#nav a").eq(0).addClass('cur'); }
91   </script>
92     </body>
93 </html>

recruit.js(這里設置表格內的數據傳遞和一些按鈕的作用)

 

  1 /*
  2 * @Author: Marte
  3 * @Date:   2020-06-06 16:49:52
  4 * @Last Modified by:   Marte
  5 * @Last Modified time: 2020-06-06 22:16:54
  6 */
  7 /*招聘表*/
  8 //$(function(){
  9 
 10 
 11 //$(function() {
 12 $('#recruitTable').DataTable({
 13     "processing": true,//數據加載時顯示進度條
 14     "serverSide": false,//啟用服務端分頁,我這里使用的是前端分頁,所以直接禁止
 15     "searching": true,//是否啟用搜索功能
 16     "ajax": {
 17      url:"RecruitServlet?action=select_all",//ajax傳輸數據的地址,action是操作類型
 18      type:"Get",   
 19   },
 20     columns: [//以下為招聘表的數據,要與后台的數據名對應
 21        {"data":"id"},
 22        {"data":"name"},
 23        {"data":"sex"},
 24        {"data":"job"},
 25        {"data":"education"},
 26        {"data":"experience"},
 27        {"data": "null","render":function (data, type, full, meta) {//這里是行內刪除、修改、錄用按鈕
 28            var content="<td> <div>";
 29            content+="<button type='button' onclick='fnDelete(this)' class='layui-btn layui-btn-sm layui-btn-danger'><i class='layui-icon'>&#xe640;</i>刪除</button>" ;
 30            content+="<button type='button' onclick='fnUpdate(this)' class='layui-btn layui-btn-sm'><i class='layui-icon'>&#xe642;</i>修改</button>";
 31            content+="<button type='button' onclick='fnAddPerson(this)' id='isRecruit' class='layui-btn layui-btn-sm layui-btn-normal'><i class='layui-icon'>&#xe654;</i>錄用</button>";
 32            content+="</div></td>";
 33            return content;    
 34        }},
 35 
 36      ],
 37      "fixedHeader": true,//固定表頭
 38      "iDisplayLength" :10, //一頁顯示的記錄數  
 39      destroy: true,
 40      autoWidth: false, //禁用自動調整列寬
 41      "ordering": true,//排序
 42      "lengthMenu":true,//顯示記錄信息的
 43       "info": true, //分頁信息提示等等
 44       "paging": true,//是否分頁
 45       "pagingType":   "full_numbers",//分頁按鈕有首頁、上一頁、下一頁、尾頁、頁碼
 46       "bLengthChange": false, //開關,是否顯示每頁顯示多少條數據的下拉框
 47       "oLanguage":{  //將英文信息轉換未中文
 48                 "sProcessing": "處理中...",
 49                 "sLengthMenu": "顯示 _MENU_ 項結果",
 50                 "sZeroRecords": "沒有匹配結果",
 51                 "sInfo": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
 52                 "sInfoEmpty": "顯示第 0 至 0 項結果,共 0 項",
 53                 "sInfoFiltered": "(由 _MAX_ 項結果過濾)",
 54                 "sInfoPostFix": "",
 55                 "sSearch": "搜索:",
 56                 "sUrl": "",
 57                 "sEmptyTable": "表中數據為空",
 58                 "sLoadingRecords": "載入中...",
 59                 "sInfoThousands": ",",
 60                 "oPaginate": {
 61                 "sFirst": "  首頁  ",
 62                 "sPrevious": "  上一頁  ",
 63                 "sNext": "   下一頁  ",
 64                 "sLast": "  末頁  "
 65                 }
 66         }
 67 
 68 });
 69 //});
 70 /*刪除功能*/
 71 function fnDelete(obj){//行內按鈕點擊事件綁定的函數
 72     layer.confirm('確認刪除?', {icon: 3, title:'提示',anim: 0}, function(){
 73         //以下為點擊確認實現的內容
 74         //layer.confirm(content, options, yes, cancel)
 75         var id = $(obj).parents("tr").children().eq(0).html();//獲取該行的id值
 76         $.ajax({
 77             url:"RecruitServlet?action=delete",
 78             type: "post",
 79             data:{id:id},//此處為傳輸給后台的data數據格式
 80             success: function(data){
 81                 layer.alert(data,{icon:6});//使用layer彈窗
 82                 $('#recruitTable').DataTable().ajax.reload();//重新繪制表格    
 83             }
 84         });
 85     });
 86 }//以下還有修改功能等
 87 
 88 /*修改功能*/
 89 function fnUpdate(obj){
 90     var id = $(obj).parents("tr").children().eq(0).html();//獲取該行的id值
 91     var name=$(obj).parents("tr").children().eq(1).html();//獲取該行的name值
 92     var sex=$(obj).parents("tr").children().eq(2).html();//獲取該行的sex值
 93     var job=$(obj).parents("tr").children().eq(3).html();//獲取該行的job值
 94     var education=$(obj).parents("tr").children().eq(4).html();//獲取該行的education值
 95     var experience=$(obj).parents("tr").children().eq(5).html();//獲取該行的experience值
 96     layer.open({
 97         tpye:1,
 98         area:['300px','500px'],
 99         btn:['確定','取消'],
100         yes:function(index, layero){
101             var cid=$("#cid").val();
102             var cname=$("#cname").val();
103             var csex=$("#csex").val();
104             var cjob=$("#cjob").val();
105             var ceducation=$("#ceducation").val();
106             var cexperience=$("#cexperience").val();
107             $.ajax({
108                 url:"RecruitServlet?action=update",
109                 type: "post",
110                 data:{id:cid,name:cname,sex:csex,job:cjob,education:ceducation,experience:cexperience},//此處為傳輸給后台的data數據格式
111                 success: function(data){
112                     layer.alert(data,{icon:6});
113                     $('#recruitTable').DataTable().ajax.reload();//重新繪制表格    
114                 }
115             });  
116             layer.close(index);
117         }
118     ,btn2: function(index, layero){
119         //按鈕【取消】的回調
120        layer.close(index);
121       },
122       content: '<form class="layui-form-item">'+'編號:  ' + '<input type="text" name="" id="cid" readonly="readonly" class="layui-input" />' + '姓名:   '
123       + '<input type="text" name="" id="cname" class="layui-input" />' + '性別:  '
124       + '<select name="" id="csex" class="cselect" >' 
125       +'<option value="男">男</option>'
126       +'<option value="女">女</option>'
127       +'</select>'
128       +'工作:  '
129       + '<input type="text" name="" id="cjob" class="layui-input" />'+'學歷:  '
130       + '<input type="text" name="" id="ceducation" class="layui-input" />'+'工作經驗:'
131       + '<input type="text" name="" id="cexperience" class="layui-input" />'+'</form>'
132     
133     });
134      $("#cid").val(id);
135      $("#cname").val(name);
136      $("#csex").val(sex);
137      $("#cjob").val(job);
138      $("#ceducation").val(education);
139      $("#cexperience").val(experience);
140     
141 }
142 function rdelete(obj){//實現錄用后自動刪除
143     
144         var id = $(obj).parents("tr").children().eq(0).html();//獲取該行的id值
145         $.ajax({
146             url:"RecruitServlet?action=delete",
147             type: "post",
148             data:{id:id},//此處為傳輸給后台的data數據格式
149             success: function(data){
150                 $('#recruitTable').DataTable().ajax.reload();//重新繪制表格    
151             }
152         });
153 }
154 function fnAddPerson(obj){
155     var name=$(obj).parents("tr").children().eq(1).html();//獲取該行的name值
156     var sex=$(obj).parents("tr").children().eq(2).html();//獲取該行的sex值
157     var job=$(obj).parents("tr").children().eq(3).html();//獲取該行的job值
158     var education=$(obj).parents("tr").children().eq(4).html();//獲取該行的education值
159     layer.open({
160         tpye:1,
161         area:['350px','500px'],
162         btn:['確定','取消'],
163         yes:function(index, layero){
164             var cname=$("#cname").val();
165             var csex=$("#csex").val();
166             var cdepartment=$("#cdepartment").val();
167             var cjob=$("#cjob").val();
168             var ceducation=$("#ceducation").val();
169             var cdate=$("#cdate").val();
170             $.ajax({
171                 url:"person_servlet?action=add",
172                 type: "post",
173                 data:{name:cname,sex:csex,department:cdepartment,job:cjob,education:ceducation,date:cdate},//此處為傳輸給后台的data數據格式
174                 success: function(data){
175                     layer.alert(data,{icon:6});
176                     rdelete(obj);
177                 }
178             });
179             layer.close(index);
180         }
181     ,btn2: function(index, layero){
182         //按鈕【取消】的回調
183        layer.close(index);
184       },
185       content:  '姓名:   '
186       + '<input type="text" name="" id="cname" class="layui-input"/>' + '性別:  '
187       + '<input type="text" name="" id="csex" class="layui-input"/>' + '部門號:  '
188       + '<input type="text" name="" id="cdepartment" class="layui-input"/>'+'職務:  '
189       + '<input type="text" name="" id="cjob" class="layui-input"/>'+'學歷:'
190       + '<input type="text" name="" id="ceducation" class="layui-input"/>'+'入職時間:'
191       + '<input type="text" name="" id="cdate" class="layui-input"/>'
192     
193     });
194      $("#cname").val(name);
195      $("#csex").val(sex);
196      $("#cjob").val(job);
197      $("#ceducation").val(education);
198      laydate.render({
199          elem: '#cdate'
200          });
201 }

 

RecruitServlet.java(接收前台傳來的數據和操作類型,並設定返回數據)

 

  1 package com.servlet;
  2 
  3 import java.io.IOException;
  4 import java.io.PrintWriter;
  5 
  6 import javax.servlet.ServletException;
  7 import javax.servlet.annotation.WebServlet;
  8 import javax.servlet.http.HttpServlet;
  9 import javax.servlet.http.HttpServletRequest;
 10 import javax.servlet.http.HttpServletResponse;
 11 
 12 import java.util.ArrayList;
 13 import java.util.Map;
 14 
 15 import com.alibaba.fastjson.JSON;
 16 import com.alibaba.fastjson.JSONArray;
 17 import com.alibaba.fastjson.JSONObject;
 18 
 19 
 20 import  com.util.DbUtil;
 21 import com.javabean.Recruit;
 22 import com.dao.DepartmentDao;
 23 import com.dao.PersonDao;
 24 import com.dao.RecruitDao;
 25 
 26 /**
 27  * Servlet implementation class RecruitServlet
 28  */
 29 @WebServlet("/RecruitServlet")
 30 public class RecruitServlet extends HttpServlet {
 31     private static final long serialVersionUID = 1L;
 32     private String action;//存儲操作描述
 33        
 34     /**
 35      * @see HttpServlet#HttpServlet()
 36      */
 37     public RecruitServlet() {
 38         super();
 39         // TODO Auto-generated constructor stub
 40     }
 41 
 42     /**
 43      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 44      */
 45     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 46         // TODO Auto-generated method stub
 47         request.setCharacterEncoding("utf-8");
 48         action = request.getParameter("action");
 49         switch(action) {//根據用戶傳過來的操作選擇下列操作,增刪查改 
 50         case "select_all":
 51             select_all(request,response);break;//轉到本頁面的select_all函數
 52         case "delete":
 53             delete(request,response);break;//轉到本頁面的delete函數
 54         case "update":
 55             update(request,response);break;//轉到本頁面的update函數
 56         case "add":
 57             add(request,response);break;
 58             
 59         }
 60         
 61     }
 62 
 63     /**
 64      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 65      */
 66     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 67         // TODO Auto-generated method stub
 68         doGet(request, response);
 69     }
 70     
 71     protected void select_all(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 72         response.setContentType("text/html;charset=utf-8");//返回的格式和編碼方式
 73         PrintWriter out = response.getWriter();//實例化out對象
 74         //接收dataTables發過來的數據 
 75         String draw="1";        
 76         RecruitDao recruitDao=new RecruitDao();//實例化操作對象
 77         JSONArray recruitJsonArray=new JSONArray();//實例化一個json數組
 78         ArrayList<Recruit> results=recruitDao.select_all();//獲取查詢所有的結果放入數組中
 79         if(results!=null)
 80         {
 81             recruitJsonArray=JSONArray.parseArray(JSON.toJSONString(results));    //將數組轉化為JSON數組
 82         }
 83         JSONObject obj=new JSONObject();//實例化一個json對象
 84         int recordsTotal=recruitJsonArray.size();//獲取記錄數
 85         obj.put("draw", draw);//返回給datatable接收的必要數據,瀏覽器cache的編號,遞增不可重復
 86         obj.put("recordsTotal",recordsTotal);//返回給datatable接收的必要數據,總記錄數
 87         obj.put("recordsFiltered",recordsTotal);//返回給datatable接收的必要數據,過濾的總記錄數
 88         obj.put("data", recruitJsonArray);//返回的表中顯示的數據
 89         out.println(obj);//返回整個json對象
 90         System.out.println(recruitJsonArray);
 91         out.close();
 92     }
 93     
 94     protected void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 95         response.setContentType("text/html;charset=utf-8");
 96         String id=request.getParameter("id");//獲取從ajax傳來的數據,id值
 97         System.out.print(id+"測試id值");
 98         RecruitDao recruitDao=new RecruitDao();//實例化招聘操作對象
 99         int flag=recruitDao.delete_recruit(id);//調用刪除方法
100         String info = null;//返回信息
101         PrintWriter out =  response.getWriter();
102         if(flag == 1){
103             info = "成功刪除編號為"+id+"的記錄!";
104         }else{
105             info = "錯誤:刪除記錄失敗!";
106         }        
107         JSONObject obj=new JSONObject();//返回的是json格式的數據
108         obj.put("success",info);//所以要把info放入json對象中
109         out.println(info);
110         out.flush();
111         out.close();    
112     }
113     protected void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
114         response.setContentType("text/html;charset=utf-8");
115         String id=request.getParameter("id");
116         String name=request.getParameter("name");
117         String sex=request.getParameter("sex");
118         String job=request.getParameter("job");
119         String education=request.getParameter("education");
120         String experience=request.getParameter("experience");
121         System.out.print("id:"+id);
122         System.out.print("name:"+name);
123         System.out.print("sex:"+sex);
124         System.out.print("job:"+job);
125         System.out.print("education:"+education);
126         System.out.print("experience"+experience);
127         RecruitDao recruitDao=new RecruitDao();
128     
129         String info = null;
130         PrintWriter out =  response.getWriter();
131         if(name.length()!=0&&sex.length()!=0&&job.length()!=0&&education.length()!=0&&experience.length()!=0) {
132             int flag=recruitDao.update_recruit(id,name,sex,job,education,experience);
133             if(flag == 1){
134                 info = "修改成功";
135             }else{
136                 info = "修改失敗,請重新輸入並檢查數據";
137             }    
138             }
139             else
140             {
141                 info="你輸入的數據存在錯誤,請重新輸入";
142             }        
143         JSONObject obj=new JSONObject();
144         obj.put("success",info);
145         out.println(info);
146         out.flush();
147         out.close();    
148     }
149     protected void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
150         response.setContentType("text/html;charset=utf-8");
151         String name=request.getParameter("name");
152         String sex=request.getParameter("sex");
153         String job=request.getParameter("job");
154         String education=request.getParameter("education");
155         String experience=request.getParameter("experience");
156         
157         System.out.print("name:"+name);
158         System.out.print("sex:"+sex);
159         System.out.print("job:"+job);
160         System.out.print("education:"+education);
161         
162         RecruitDao recruitDao=new RecruitDao();
163         
164         String info = null;
165         PrintWriter out =  response.getWriter();
166         if(name.length()!=0&&sex.length()!=0&&job.length()!=0&&education.length()!=0&&experience.length()!=0) {
167             int flag=recruitDao.add(name,sex,job,education,experience);
168             if(flag == 1){
169                 info = "添加成功";
170             }else{
171                 info = "添加失敗,請重新輸入並檢查數據";
172             }    
173             }
174             else
175             {
176                 info="你輸入的數據存在錯誤,請重新輸入";
177             }    
178         JSONObject obj=new JSONObject();
179         obj.put("success",info);
180         out.println(info);
181         out.flush();
182         out.close();    
183     }
184     
185     
186 }

 

 RecruitDao.java(這是封裝了增刪查改的類)

 

  1 package com.dao;
  2 import java.sql.Connection;
  3 import java.sql.PreparedStatement;
  4 
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.util.ArrayList;
  8 
  9 import  com.util.DbUtil;
 10 import com.javabean.Recruit;
 11 
 12 public class RecruitDao {
 13     public ArrayList<Recruit> select_all() {//這是全查
 14         Connection conn=DbUtil.getConnection();//通過類名+方法名調用數據庫連接(這是一個靜態方法)
 15         String sql="select * from recuit;";//SQL語句
 16         ArrayList<Recruit> results=new ArrayList<Recruit>();//創建招聘管理的數據模型數組
 17         try {
 18           PreparedStatement ps=(PreparedStatement) conn.prepareStatement(sql);//執行sql
 19           ResultSet rs = ps.executeQuery();//返回結果集
 20           while(rs.next())
 21           {
 22               Recruit temp=new Recruit();
 23               temp.setId(rs.getInt("id"));//數據庫獲取的數據存入javabean模型中
 24               temp.setName(rs.getString("name"));
 25               temp.setSex(rs.getString("sex"));
 26               temp.setJob(rs.getString("job"));
 27               temp.setEducation(rs.getString("education"));
 28               temp.setExperience(rs.getString("experience"));
 29               results.add(temp);     //將數據放入Recruit對象構成的數組
 30           }     
 31           //關閉資源
 32           rs.close();
 33           ps.close();   
 34         } catch (SQLException e) {
 35             e.printStackTrace();
 36             System.out.println("數據庫連接異常"+sql);
 37         } finally {
 38             System.out.println(sql);
 39             DbUtil.closeConnection(conn);
 40         }
 41         return results;    
 42     }  //以下還有刪除、修改、添加
 43     public int delete_recruit(String id) {
 44         //刪除,成功返回1,失敗返回0;
 45         Connection con=DbUtil.getConnection();//實例化con,調用靜態方法連接數據庫
 46         int flag=0;//判斷更改成功與否的標志
 47         String sql="delete from recuit where id=?";//刪除的sql語句
 48         try {
 49             PreparedStatement ps=(PreparedStatement) con.prepareStatement(sql);
 50             ps.setString(1, id);
 51             flag=ps.executeUpdate();//成功執行返回1
 52             ps.close();
 53         }catch(SQLException e) {
 54             e.printStackTrace();
 55         }finally {
 56             DbUtil.closeConnection(con);//關閉數據庫連接
 57             if(flag==1)
 58                 System.out.println("刪除成功");
 59             else
 60             {
 61                 System.out.println("刪除失敗");
 62             }
 63         }
 64         return flag;
 65     }
 66     public int update_recruit(String id,String name,String sex,String job,String education,String experience) {
 67         //修改,成功返回1,失敗返回0;
 68         Connection con=DbUtil.getConnection();//實例化con,調用靜態方法連接數據庫
 69         int flag=0;//判斷更改成功與否的標志
 70         String sql="update recuit set name= ?,sex= ?,job= ? ,education=?,experience=? where id= ?;";//更新的sql語句
 71         try {
 72             PreparedStatement ps=(PreparedStatement) con.prepareStatement(sql);
 73             ps.setString(1, name);
 74             ps.setString(2, sex);
 75             ps.setString(3, job);
 76             ps.setString(4, education);
 77             ps.setString(5, experience);
 78             ps.setString(6, id);
 79             flag=ps.executeUpdate();//成功執行返回1
 80             ps.close();
 81         }catch(SQLException e) {
 82             e.printStackTrace();
 83         }finally {
 84             DbUtil.closeConnection(con);//關閉數據庫連接
 85             if(flag==1)
 86                 System.out.println("更新成功");
 87             else
 88             {
 89                 System.out.println("更新失敗");
 90             }
 91         }
 92         return flag;
 93     }
 94     public int add(String name,String sex,String job,String education,String experience) {
 95         //更改密碼,成功返回1,失敗返回0;
 96         Connection con=DbUtil.getConnection();//實例化con,調用靜態方法連接數據庫
 97         int flag=0;//判斷更改成功與否的標志
 98         String sql="insert into recuit(name,sex,job,education,experience) values(?,?,?,?,?);";//更新的sql語句
 99         try {
100             PreparedStatement ps=(PreparedStatement) con.prepareStatement(sql);
101             ps.setString(1, name);
102             ps.setString(2, sex);
103             ps.setString(3, job);
104             ps.setString(4, education);
105             ps.setString(5, experience);
106                 
107             flag=ps.executeUpdate();//成功執行返回1
108             ps.close();
109         }catch(SQLException e) {
110             e.printStackTrace();
111         }finally {
112             DbUtil.closeConnection(con);//關閉數據庫連接
113             if(flag==1)
114                 System.out.println("添加成功");
115             else
116             {
117                 System.out.println("添加失敗");
118             }
119         }
120         return flag;
121     }
122     
123 }

 

DbUtil.java(數據庫連接類)

 1 package com.util;
 2 import java.sql.Connection;
 3 import java.sql.DriverManager;
 4 import java.sql.Statement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 
 8 //這是定義連接數據庫的類
 9 public class DbUtil {
10        public static Connection getConnection() {
11         //定義靜態方法,可直接通過類名.方法名使用連接數據庫方法
12         Connection con=null;
13            final String JDBC_Driver="com.mysql.cj.jdbc.Driver";//mysql8.0以上的驅動名,8.0以下去掉cj
14            final String DB_URL="jdbc:mysql://localhost:3306/manage?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
15            //jdbc:mysql://url/數據庫名---useSSL指是否使用SSL安全驗證,serverTimezone指定服務器上的時區
16            try {
17            Class.forName(JDBC_Driver);//注冊驅動名
18            con=DriverManager.getConnection(DB_URL,"root","123456");//連接數據庫
19            }catch(ClassNotFoundException e) {
20                //數據庫驅動類異常處理
21                System.out.println("Sorry,can`t find the Driver!");
22                e.printStackTrace();
23            }catch(SQLException e) {
24                //數據庫連接失敗異常處理
25                 System.out.println("Sorry,數據庫連接異常");
26                e.printStackTrace();
27            }catch(Exception e) {
28                e.printStackTrace();
29            }
30            finally {
31                System.out.println("數據庫連接成功");
32            }  
33            return con;  
34        }
35        
36        public static void closeConnection(Connection con) {
37       //定義靜態方法,可通過類名.方法名直接釋放資源   
38            if(con!=null)
39            {
40                try {
41                   con.close();
42                }catch(SQLException e) {
43                   e.printStackTrace();
44                }           
45            }          
46        }
47            
48                       
49 }
50     

五、實驗結果與功能展示

 

①登錄功能:

 

    用戶在登錄頁面可以輸入賬戶密碼進行登錄。

 

 

 

②首頁:

首先歡迎登錄的管理員,然后管理員可根據需求實現各表的插入。

通過彈窗實現插入數據的輸入,同時插入數據有着限制,如果輸入空值或不符合數據格式的值,將會報錯並要求重新輸入。

 

 

 

 

③招聘管理

點擊招聘管理后轉到招聘管理頁面,自動查詢所有數據,然后可以實現所有字段的排序和搜索功能,最底下還有分頁按鈕,可在操作列進行數據的刪除,修改。還有招聘的錄用功能,即把改人員添加到員工表中,並實現了添加后自動在招聘表中刪除記錄。

 

 

④薪酬管理

點擊薪酬管理后跳轉至薪酬管理頁面,自動查詢所有數據,同樣有排序、搜索、分頁功能。還有數據的刪除、修改,同時實現了輸入基本工資和其他工資后自動計算實發工資。

 

 

⑤修改賬戶

點擊后跳轉至修改賬戶頁面,賬戶文本框通過session自動獲取管理員賬戶,然后需要輸入舊密碼,並輸入兩次新密碼,點擊保存后彈出確認修改彈窗,點擊確定后,如果數據正確,彈出修改成功。

 

其他模塊就不一一展示了。

以上為持續了兩周的web課程設計項目6.1-6.12,做個總結。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM