🙊作者簡介:擁有多年開發工作經驗,分享技術代碼幫助學生學習,獨立完成自己的項目或者畢業設計。
- 代碼可以私聊博主獲取。🌹
- 贈送計算機畢業設計600個選題excel文件,幫助大學選題。
- 贈送開題報告模板,幫助書寫開題報告。
作者完整代碼目錄供你選擇:
- 《Springboot網站項目》400套
- 《ssm網站項目》800套
- 《小程序項目》300套
- 《App項目》500套
- 《python網站項目》600套
?感興趣大家可以點點關注收藏,后續更新更多項目資料。?
項目演示(需要演示視頻可以私信我)
??????????
摘 ?要
進入信息時代以來,很多數據都需要配套軟件協助處理,這樣可以解決傳統方式帶來的管理困擾。比如耗時長,成本高,維護數據困難,數據易丟失等缺點。本次使用數據庫工具MySQL和編程技術SSM開發的企業人事管理系統,可以實現目標用戶群需要的功能,包括考勤管理,獎懲管理,薪資管理,培訓管理,系統公告管理等功能。
總之,企業人事管理系統是基于計算機進行數據的處理,則可以短時間內批量完成數據的管理,就連基本的數據錄入,更改錯誤的數據,統計數據等操作要求都可以輕松完成,這樣的系統的運用可以減少很多繁瑣的工作量,讓數據的管理人員提升效率,節省數據處理投入的資金和時間。同時,企業人事管理系統本身就有配套的數據庫,用于保存系統的后臺數據,對于數據保存的容量則是傳統模式不能相比的,在數據安全性上,也有相應的加密技術提供保護,所以數據泄露和被人竊取都不是易事。
關鍵詞:企業人事管理系統;考勤;獎懲;薪資
第一章?緒論
1.1?研究背景
時代總是在進步的,自從進入了信息時代,面對大量的不同種類的數據,僅僅依靠有限的人力去處理,顯然是不行的,畢竟人工處理大量的數據會耗費較長時間,而且數據的錯誤率也會提升,另外,在對數據進行檢索時,也是一件既耗費體力,又耗費時間的事情。因此,引進當前的信息技術開發的系統去解決傳統管理模式帶來的各種困擾成為一種趨勢。本次打算開發企業人事管理系統,讓企業人事信息的管理完全依賴于計算機,包括錄入信息,維護信息等都在計算機上操作,簡單方便,在優化信息管理流程的基礎上,進一步實現信息管理的規范化和系統化。也讓企業人事信息的管理人員從之前的繁瑣工作中解脫出來,讓他們提升自身素質,提高自身管理能力,把企業人事管理系統的作用發揮到最大,從而產生更大的效益。
1.2 研究意義
企業人事管理系統的出現,可以解決傳統模式帶來的問題,比如傳統模式不能批量處理數據,處理效率低,耗時長,浪費大量人力和物力,數據易出錯等問題。企業人事管理系統是基于計算機進行數據的處理,則可以短時間內批量完成數據的管理,就連基本的數據錄入,更改錯誤的數據,統計數據等操作要求都可以輕松完成,這樣的系統的運用可以減少很多繁瑣的工作量,讓數據的管理人員提升效率,節省數據處理投入的資金和時間。同時,企業人事管理系統本身就有配套的數據庫,用于保存系統的后臺數據,對于數據保存的容量則是傳統模式不能相比的,在數據安全性上,也有相應的加密技術提供保護,所以數據泄露和被人竊取都不是易事。另外,企業人事管理系統對操作人員錄入的數據進行實時檢驗,可以及時反饋錯誤信息,使錄入數據的準確率得到提高,也充分保證了系統數據的可靠性。總之,企業人事管理系統值得信賴,可以完成數據的高效率處理工作。
1.3 研究內容
本文對企業人事管理系統的描述,將按照如下章節進行。
第一章:根據前期的調研,和對參考資料的分析總結,明確系統研究背景意義;
第二章:通過對當前開發技術的分析,選定開發本系統的開發語言和工具;
第三章:在用戶需求的基礎上,結合相似系統的功能,分析并確定本系統的功能,分析本系統開發可行性問題;
第四章:在第三章的基礎上,進一步細分系統功能,要設計出系統各個模塊的功能,同時,對配套數據庫進行設計;
第五章:在第四章基礎上,要運用編程技術,全面實現企業人事管理系統的功能;
第六章:檢測制作的企業人事管理系統功能是否運行正常,性能是否達標;
第二章 開發環境與技術
企業人事管理系統作為一款應用軟件,其開發是需要搭建的一定的編程環境,對使用的工具和技術都有相應要求,接下來就介紹本系統中運用到的工具和技術。
2.1 JSP技術
JSP技術是有一定的規則的,首先JSP里可以用Java語言寫在標記內,可以混合HTML語言以及XHTML語言代碼進行混合編輯,并且進行書寫Java語句或者用其他標簽,用標簽的話都需要用特殊的符號進行描述,編寫Java語言的代碼需要用特殊符號標記起來,用<%作為開始,中間書寫Java語句,以%>作為結束標簽,必須是有開頭和結尾的,不然會編譯出錯的,必須是成對出現也必須有閉合的。JSP可以處理表單數據,因為JSP也算是一種Servlet,也可以把數據提交給Servlet處理也是可以的。其實對用戶來講,實現動態數據的網頁就可以了,但是后臺也是需要對數據進行一些加工的,JSP技術正好也是可以做到數據加工的。JSP可以直接通過JDBC來操作數據庫,對數據進行頁面展示,也可以記錄用戶的訪問的信息和選擇信息等,并且可以使用JavaBean組件,還可以通過Session在不同的網頁上傳遞信息和共享相關的信息。動態網頁有很多規范和標準,比如CGI規范或者ISAPI規范這些。標準是固定的,但是JSP技術是比CGI規范更加強壯。比如JSP性能對比上超過CGI,更優秀,原因是因為可以在一個JSP文件里嵌入很多元素,如果元素一樣多的話,用CGI就變成了需要很多文件,而受制于硬盤讀寫效率的影響,用時少就是優秀,能耗少就是強勁。JSP是完整的應用平臺Java EE 中不可缺少的一部分。
2.2?MySQL數據庫??
自從學習了關系型數據庫的語法之后,也逐漸的了解了一些屬于關系型數據庫范疇的幾個常見的數據庫。比如Oracle數據庫和MySQL數據庫,以及Microsoft SQL Server數據庫和DB2數據庫這幾種。在這幾個關系型數據庫之中,對MySQL數據庫印象最好。首先MySQL數據庫有各種平臺的服務器版本,這樣就能實現跨平臺運行以及移植。其次,MySQL數據庫可以進行網絡連接,這樣可以對本地賬戶和應用程序賬戶進行有效的區分,這樣在數據庫的安全性上面也有很好的保證。再次,MySQL數據庫在中小數據量的運行效率上面比其他數據庫占用服務器資源最少,所以很多企業都選擇了MySQL數據庫作為首選。在開發上面,各種圖形界面管理工具也是層出不窮,并且還比較好用,從各個方面綜合考慮對比的情況下,選擇了MySQL數據庫作為應用程序所選的數據庫軟件。
2.3 Java語言
Java語言發展有25年多了,在互聯網行業經過這么多年的發展,還依然在市場的占有率上有半壁江山,依然受到很多程序員的喜愛,好多從業人員進行學習,隨著互聯網從業人員的增加,并沒有降低Java語言的江湖地位,算是一個常青藤。Java語言學習很簡單,當然這是針對于前輩C++來講的,C++語言相當的強悍。Java取消了很多C++特征,比如go to這些語句,還有取消了主文件,讓所有的文件都是類,類里都是數組和各種對象,還讓Java自己處理各種對象的引用和回收,讓開發人員只需要創建對象,使用對象,編輯代碼邏輯,不需要關注性能方面,讓數據的各種存儲交給Java自己處理,可以花更多的時間研究應用程序之間的關系,讓開發變得更專注,就像賽車的駕駛員一樣,只需要了解各種車輛的性能,并且進行操作,不需要研究轱轆如何制造,這樣讓程序開發更加的細化。
2.4 SSM框架
SSM框架是三個框架的合稱,分別是Spring框架和SpringMVC框架以及MyBatis框架。三個框架隨著時間的發展,越來越變成了當今Java語言的開發主流,幫助程序開發人員專注于業務邏輯以及配置相關操作,能自動生成的都支持自動生成,避免了很多耦合性出錯,通過控制反轉和依賴注入,讓程序開發變成配置文件開發,簡單明了,讓創建的Java對象都能通過自身來進行創建。面向切面的操作讓程序開發也變成了部門協同,公共事務都交給了SpringAOP來操作,讓程序開發變得更加專注。MyBatis越來越智能,可以用配置文件和SQL語句混合開發,可以像操作Java語言一樣操作數據庫。
第三章?系統分析
通常,對于系統的開發并不是一朝一夕就可以完成的,它需要經歷很多的步驟,其中系統分析就是其中的一個,接下來還會有系統的設計和實現,最后一個步驟是系統測試。
3.1可行性分析
一個系統能不能完成開發,以及該系統是否可以帶來收益等,都是需要提前分析的。而可行性研究就是分析這些問題,并得出結論,這個環節對項目是否開展起著重要作用。
3.1.1運行可行性分析
首先本系統的運行環境都是當前使用率比較高的軟件,通過網絡可以下載安裝,其次本系統對于運行設備的要求比較低,滿足4個G的內存的電腦都可以使用。而當下硬件設備的升級,幾乎大部分電腦都是內存8個G,所以運行設備也符合要求。最后,本系統不用于處理繁多的類似商業軟件的信息內容,占用的空間比較小。一般的電腦都可以運行。
3.1.2經濟可行性分析
任何一個項目在開發前,其在經濟上的可行性問題是值得研究的,本項目企業人事管理系統,其在數據的處理上要求比較簡單,并且其管理的數據量比較小,因此,該項目的開發周期并不會耽誤很長時間,項目的開發需要支出的費用也不高。加上該項目需要管理的數據量較少,對于性能條件一般的計算機都可以滿足項目的運行要求,從后期管理成本上來看,需要投入該項目的管理費用也不高。但是該項目一旦投入使用,會給使用者帶來一定的收益,也能節省信息管理成本,如此,這樣一個低成本投入,但能夠帶來大量收益的項目企業人事管理系統在經濟上是可行的。
3.1.3技術可行性分析
互聯網的發展非常迅速,跟互聯網掛鉤的程序也逐漸被廣泛關注,尤其是當下被大眾熟知的B/S結構的程序,加上SSM技術的發展與成熟,如今可以很快速的使用模塊化的代碼開發一個基于B/S結構的項目程序。
通過系統運行,經濟和技術上的可行性分析,對企業人事管理系統的開發確實具有必要性,讓管理的信息都計算機化,可以縮短在數據處理上消耗的時間,提高工作效率。
3.2系統流程分析
本系統在完成數據的處理時,其內部都設置了相應的處理流程,比如注冊時,數據的最終去向以及對每項數據的判斷等,這些都是提前進行了分析的,然后在編碼時,把這種判斷邏輯寫入了系統中。讓系統在面對同樣的事務處理需求時,執行對應的邏輯處理規則。
在本系統的數據庫中,所有用戶的資料都會單獨保存在一張數據表里面,也就意味著這張用戶數據表里面的用戶名和密碼都是可以進行本系統的登錄功能的,其登錄流程如下。用戶提交的登錄信息都是必填項,不能漏掉,數據格式和內容都要準確才可以進入功能操作區。
圖3.2?用戶登錄流程圖
本系統中保存的數據都是具有參考價值的,所以在錄入數據時,要確保數據的準確性,其錄入數據的流程見下圖。這些數據都是經過檢驗合格之后才會被數據庫保存。
圖3.3?信息添加流程圖
本系統中設置了修改密碼功能,修改密碼的流程見下圖。密碼修改成功之后,下次登錄系統就需要使用新密碼替換原來的密碼。
圖3.3修改密碼流程圖
3.3 系統性能分析
在進行系統分析期間,有一個很重要的環節,就是需要對系統的性能進行分析。可以說系統的性能跟系統的質量是成正比關系,也就是說系統性能也好,系統質量越可靠,系統性能不好,就代表著系統的質量不行,也就意味著系統在實際中的使用中,會出現中途崩潰,或者系統的數據容易泄露等風險。所以,提前進行系統性能的分析,就可以在系統設計實現中,避免出現上述風險問題。
描述系統性能的特征有可擴展性,易維護性,安全性等。
3.3.1系統安全性
一個系統是否安全,直接影響用戶的使用。系統安全體現在數據上的保密性。通常,很多系統都設置了登錄功能,或針對游客設置的注冊功能等,無論是登錄中需要使用的賬號密碼,還是用戶注冊產生的私密數據等都是系統中的寶貴資源,一旦數據泄露,一些非法人員就會從中謀取利益,或通過用戶注冊留下的電話騷擾用戶,給用戶帶來身心上的傷害。所以一般針對此類關鍵數據,通常會直接進行加密保存。讓數據始終保持安全狀態。
3.3.2系統可擴展性
面對當前用戶的使用需求設計的系統并不一定適用于未來。所以需要使用前瞻性的眼光來看待系統,提前預留好空間,方便在今后對系統進行升級,或者擴充系統功能。因此,系統需要具備可擴展性的特性。
3.3.3系統易維護性
系統在保持長時間使用中,難免會出現一些問題。所以在處理這些問題時,可能會對系統進行部分改動。而系統改動的難易程度就體現出系統是否具備易維護性,通常一個易于維護的系統,在面對系統改動時,將會很容易,而且也會節省時間和資金。
3.4系統功能分析
本系統的功能不會像市場上的商業程序一樣具備復雜的功能,其提供的功能只能滿足目標用戶的一般的系統內容瀏覽和簡單的信息處理功能。
本系統確定設置管理員權限,總經理權限,部門主管權限和員工權限。
設置的管理員功能可以見下圖用例圖。管理員管理所有權限的用戶資料,管理考勤,培訓,薪資,獎懲等資料。
圖3.4 管理員用例圖
設置的總經理功能可以見下圖用例圖。總經理管理部門主管和員工的考勤信息,獎懲與薪資信息等。
圖3.5 總經理用例圖
設置的部門主管功能可以見下圖用例圖。部門主管參與上下班打卡,管理員工的考勤和薪資以及獎懲信息。
圖3.6 部門主管用例圖
設置的員工功能可以見下圖用例圖。員工參與上下班打卡,查看自己的獎懲,薪資以及培訓信息。
圖37 員工用例
第四章?系統設計
設計時,通常把用戶需求作為對系統功能和數據庫的設計重點,殊不知,系統設計時,注重用戶體驗也是比較關鍵的設計內容。比如一個系統已經實現了用戶需要的功能,但是其界面布局比較混亂,同時界面中各個元素的搭配也不合理,這樣一旦訪問者訪問系統,在短時間內無法找到需要的信息,就容易產生視覺疲勞,直接影響用戶對系統的使用。所以,系統設計時,也需要關注用戶的使用體驗。由于用戶之間的差別,比如教育程度,職業,地區等因素的不同,用戶產生的行為也會存在差異,所以設計人員既要考慮用戶之間的行為差異,也要考慮他們之間的共性。在尊重用戶習慣的基礎上,進行頁面設計布局。達到用戶可以多次訪問系統的目的。
4.1布局設計原則
進行頁面的布局,就要劃分系統的各個模塊,然后根據這些模塊的重要程度進行布局,也需要關注用戶比較在意的關鍵信息,利用合理的布局方式,傳達出系統想要表達的信息內容,也讓用戶快速高效地獲取需要的信息。布局雖然是頁面設計的核心,但是也要講究頁面內容的協調性,統一性和均衡性。
布局設計也要考慮基本原則,接下來的內容就對此進行闡述。
第一點:參考系統需求,把系統的內容進行劃分,按照重要程度的不同進行布局,并把相似或相近的信息內容集中展示在同一個區域,讓訪問者可以更流暢的閱讀信息;
第二點:頁面中比較重要的區域是靠上靠左的位置,所以這部分區域應該放置系統中比較重要的模塊,畢竟這部分區域可以吸引用戶眼球,讓用戶進入頁面中,就可以發現需要的信息。對于一些次要的模塊,則可以放置在頁面中靠下和靠右的位置。如此設計安排,才可以發揮出頁面設計實用性的特點;
第三點:根據用戶習慣設計頁面,雖然大部分用戶具有操作上的共性特征,但他們之間還是存在區別,常見的影響用戶操作習慣的因素有:年齡,學歷,職業,性別等。所以設計時在考慮用戶的共性特征時,也需要盡量尊重用戶的不同習慣。
4.2功能模塊設計
下圖為管理員的功能設計,管理員管理所有權限的用戶資料,管理考勤,培訓,薪資,獎懲等資料。
圖4.1 管理員功能結構圖
下圖為總經理的功能設計,總經理管理部門主管和員工的考勤信息,獎懲與薪資信息等。
圖4.2 總經理功能結構圖
下圖為部門主管的功能設計,部門主管參與上下班打卡,管理員工的考勤和薪資以及獎懲信息。
圖4.3 部門主管功能結構圖
下圖為員工的功能設計,員工參與上下班打卡,查看自己的獎懲,薪資以及培訓信息。
圖4.4 員工功能結構圖
4.3數據庫設計
企業人事管理系統選用關系數據庫作為程序的后臺支持,之所以選擇關系數據庫主要還是因為它易于使用,而且也方便進行數據維護,尤其是提供強大的SQL查詢語言。還有就是關系數據庫采用的二維表模型,跟現實生活中的邏輯非常貼近,與網狀模型,層次模型相比較,可以發現還是關系模型更容易被接受。
4.3.1數據庫E-R圖
這部分內容需要根據用戶需求當中的數據信息,進行拆分,并仔細分析,要從這些數據中標識出E-R模型需要使用的數據,其中有實體,有實體具備的屬性,有基于實體間的關系。在獲取了這些數據之后,就可以使用認可度比較高的Visio工具來完成E-R模型的建模。建模期間,只要注意Visio工具中,繪制E-R模型的各個符號代表的含義,并能夠正確把實體,屬性還有關系等數據完整表示就可以了。使用這樣的方法可以節省數據庫設計的時間,而且還可以直觀表達設計的內容,以及它們之間存在的聯系。
(1)設計的員工用戶實體,其具備的屬性如下圖。
圖4.4?員工用戶實體屬性圖
(2)設計的考勤實體,其具備的屬性如下圖。
圖4.5?考勤實體屬性圖
(3)設計的獎懲實體,其具備的屬性如下圖。
圖4.6 獎懲實體屬性圖
- 設計的薪資實體,其具備的屬性如下圖。
圖4.7 薪資實體屬性圖
(8)設計的實體間關系如下圖。
圖4.8 實體間關系E-R圖
4.3.2 數據庫表結構
程序編碼基本都是參照設計的方案進行的,包括設計的數據庫也是對后面的編碼有著一定的影響。通常來說,數據庫就是保存數據,不管其設計得好壞,都不會喪失它本身的數據保存功能。設計數據庫的好壞,其區別在于,對數據存取的效率。設計比較好的數據庫,在數據查詢,存儲以及更新上,可以快速做出響應。設計不好的數據庫,很多時候不僅會延長數據的處理時間,還會容易出錯。因此,設計數據庫也是程序開發中很關鍵的環節。
針對本系統設計的數據庫,按照數據庫設計的原則,即設計數據庫的三大范式進行。各個數據表的結構都是根據E-R模型進行的物理轉化,對于一些細節問題,包括表的命名,字段的命名,字段類型和長度的設計等都比較規范化,這樣做的目的也是方便后期系統編程。
表4.1 考勤信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | int(11) | 否 | 主鍵 | |
yonghu_id | int(11) | 是 | NULL | 用戶 |
today | varchar(200) | 是 | NULL | 打卡日期 |
on_time | timestamp | 是 | NULL | 上班打卡時間 |
down_time | timestamp | 是 | NULL | 下班打卡時間 |
chuqin_types | int(11) | 是 | NULL | 打卡類型 |
overtimeNumber | int(11) | 是 | NULL | 加班時間(小時) |
create_time | timestamp | 是 | NULL | 創建時間 |
表4.2 培訓信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | int(11) | 否 | 主鍵 | |
yonghu_id | int(11) | 是 | NULL | 用戶 |
on_time | timestamp | 是 | NULL | 培訓開始時間 |
down_time | timestamp | 是 | NULL | 培訓結束時間 |
day_number | int(11) | 是 | NULL | 培訓天數 |
cultivate_content | varchar(200) | 是 | NULL | 培訓內容 |
create_time | timestamp | 是 | NULL | 創建時間 |
表4.3 獎懲信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | int(11) | 否 | 主鍵 | |
yonghu_id | int(11) | 是 | NULL | 用戶id |
jiangcheng_name | varchar(200) | 是 | NULL | 獎懲名稱 |
jiangcheng_types | int(11) | 是 | NULL | 獎懲類型 |
jiangcheng_content | varchar(200) | 是 | NULL | 獎懲詳情 |
insert_time | timestamp | 是 | NULL | 獎懲時間 |
create_time | timestamp | 是 | NULL | 創建時間 |
表4.4 管理員信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | bigint(20) | 否 | 主鍵 | |
username | varchar(100) | 否 | 用戶名 | |
password | varchar(100) | 否 | 密碼 | |
role | varchar(100) | 是 | 管理員 | 角色 |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 新增時間 |
表4.5 薪資信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | int(11) | 否 | 主鍵 | |
yonghu_id | int(11) | 是 | NULL | 用戶 |
month | varchar(200) | 是 | NULL | 月份 |
money | decimal(10,4) | 是 | NULL | 薪資 |
create_time | timestamp | 是 | NULL | 創建時間 |
表4.6 系統公告信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | bigint(20) | 否 | 主鍵 | |
addtime | timestamp | 否 | CURRENT_TIMESTAMP | 創建時間 |
biaoti | varchar(200) | 是 | NULL | 標題 |
leixing | varchar(200) | 是 | NULL | 類型 |
neirong | longtext | 是 | NULL | 內容 |
riqi | datetime | 是 | NULL | 日期 |
表4.7 用戶信息表
字段 | 類型 | 空 | 默認 | 注釋 |
id?(主鍵) | int(11) | 否 | 主鍵 | |
username | varchar(200) | 是 | NULL | 賬戶 |
password | varchar(200) | 是 | NULL | 密碼 |
yonghu_name | varchar(200) | 是 | NULL | 姓名 |
yonghu_phone | varchar(200) | 是 | NULL | 手機號 |
yonghu_id_number | varchar(200) | 是 | NULL | 身份證號 |
yonghu_photo | varchar(200) | 是 | NULL | 頭像 |
sex_types | int(11) | 是 | NULL | 性別 |
bumen_types | int(11) | 是 | NULL | 部門 |
role_types | int(11) | 是 | NULL | 權限 |
create_time | timestamp | 是 | NULL | 創建時間 |
第五章?系統實現
這部分工作主要由程序編制人員完成。通常在面對一個大型的系統時,這些程序編制人員就會明確分工,每個人都完成不同的功能模塊,在用代碼實現功能的基礎上,提前預留好接口,最后才將他們已完成的功能模塊通過接口進行組合。
5.1 管理員功能實現
5.1.1 用戶管理
管理用戶是管理員的功能。其運行效果圖如下。這里的用戶包括總經理,部門主管,員工,他們的資料都需要管理員來管理。
圖5.1?用戶管理頁面
5.1.2 考勤管理
管理考勤是管理員的功能。其運行效果圖如下。管理員查看所有人員的考勤打卡信息,包括上班打卡,下班打卡信息。
圖5.2 考勤管理頁面
5.1.3 培訓管理
管理培訓信息是管理員的功能。其運行效果圖如下。本模塊主要讓管理員查看所有人員的培訓信息。
圖5.3 培訓管理頁面
5.2 總經理功能實現
5.2.1 獎懲管理
管理獎懲信息是總經理的功能。其運行效果圖如下。總經理添加獎懲信息,查看部門主管和員工的獎懲信息。
圖5.4?獎懲管理頁面
5.2.2 薪資管理
管理薪資是總經理的功能。其運行效果圖如下。總經理添加薪資信息,查看部門主管和員工的每月薪資。
圖5.5?薪資管理頁面
5.3 部門主管功能實現
5.3.1 考勤管理
管理員工的考勤信息是部門主管的功能。其運行效果圖如下。部門主管可以參與上下班打卡,可以查看自己的考勤打卡信息。
圖5.6?考勤管理頁面
5.3.2 獎懲管理
管理員工的獎懲信息是部門主管的功能。其運行效果圖如下。部門主管能夠新增員工的獎懲信息,可以查看部門員工的獎懲信息。
圖5.7?獎懲管理頁面
5.3.3 系統公告管理
管理系統公告是部門主管的功能。其運行效果圖如下。部門主管可以發布系統公告,對系統公告信息進行修改,查看和刪除。
圖5.8?系統公告管理頁面
5.4 員工功能實現
5.4.1 培訓查看
查看培訓信息是員工的功能。其運行效果圖如下。員工可以在自己的后臺查詢培訓信息,查看屬于自己的培訓詳細信息。
圖5.9?培訓查看頁面
5.4.2 薪資查看
查看薪資是員工的功能。其運行效果圖如下。員工在當前頁面只能查詢薪資,查看自己的薪資明細。
圖5.10?薪資查看頁面
5.4.3 考勤管理
管理個人的考勤信息是員工的功能。其運行效果圖如下。員工參與上下班打卡,可以查詢考勤記錄信息。
圖5.11?考勤管理頁面
第六章?系統測試
面對制作完成的系統,接下來需要開展的工作是對其進行測試。這個環節需要利用各種方式,去發現目標系統中存在的問題,并及時分析和解決,讓目標系統最終可以被用戶驗收。
6.1 系統測試的實施
接下來進行的測試內容,包括確認測試和驗收測試等。
確認測試:這個環節的主要任務就是對制作的系統的有效性進行確認,所以它也有另外一個名字,就是有效性測試。測試人員通過復審目標系統的功能還有其運行環境的配置,來檢驗目標系統跟前面分析設計的用戶需求說明書是否匹配。
驗收測試:在實際中,通常需要開發員,質量保證人員以及系統面向的用戶參與到這個環節。讓用戶在系統的操作界面上通過設計的用例進行數據錄入,檢測系統的輸出結果。
回歸測試:主要用于測試變更的軟件。在保證改動的系統不會產生其他錯誤的情況下,對系統修改的部分進行正確性驗證。
6.2 系統測試用例
很多時候,需要對系統中的指定功能進行數據檢驗,檢驗不同數據的錄入,其產生的結果或反饋的信息跟預定的需求是否有差別。
6.2.1?登錄功能測試
作為企業人事管理系統的入門門檻,其登錄功能扮演著相當重要的作用,可以把非條件用戶置之門外保護系統安全,同時還能引導不同用戶進入不同的操作區。本系統的登錄功能測試表如下。每當有不同形式的數據進行錄入時,該系統會對每條數據進行判斷。準確錄入的數據才會讓訪問者登錄進入功能操作區。
測試內容 | 錄入的數據 | 預期結果 | 最終結果 |
輸入用戶表的賬號和密碼 | 賬號:user 密碼:user | 登錄成功 | 登錄成功 |
隨意輸入賬號和密碼 | 賬號:uuu 密碼:uuu | 提示信息錯誤 | 提示信息錯誤 |
輸入用戶表的賬號,密碼隨意輸入 | 賬號:user 密碼:uuu | 提示賬號密碼不匹配 | 提示賬號密碼不匹配 |
隨意輸入賬號,輸入用戶表的密碼 | 賬號:uuu 密碼:user | 提示賬號密碼不匹配 | 提示賬號密碼不匹配 |
6.2.2?添加部門功能測試
部門信息表里面存放了很多部門名稱信息,且這些部門名稱都不一致,管理員在登記部門信息時,如果登記了部門表里面的部門名稱,則不會成功添加部門,相反,管理員就可以成功添加部門。
表6.2 添加部門功能測試表
測試內容 | 錄入的數據 | 預期結果 | 最終結果 |
輸入部門表的部門名稱 | 部門名稱:財務部 | 操作失敗 | 操作失敗 |
輸入部門表沒有的部門名稱 | 部門名稱:行政部 | 操作成功 | 操作成功 |
6.3 測試的結果
在對企業人事管理系統進行測試后,發現本系統具有的統一界面和清楚的導航設計讓系統具備了易操作性的特點,在與用戶需求進行比較后,發現本系統具備的功能比較完善,在運行環境中可以正常使用,這里運行環境與本系統的生產環境相似。總之,企業人事管理系統測試合格。
結 ?論
為了完成企業人事管理系統的設計實現,我重新回顧了以往的專業知識,并重點學習了編程技術,其中有JAVA語言的學習,也學習了MySQL數據庫的運用,還有界面布局等方面的知識。有了這些知識的填充,并依靠導師的幫助,我才能夠獨立設計制作本系統。
系統在開發前,先要確定使用用戶是誰,以及確定程序的適用范圍等,如此才可以對系統定位。只有準確定位系統,才可以節省開發時間,并省去一些不必要的麻煩。系統的功能是對使用用戶進行調研獲取,當然,系統的功能也采取了歷來的一些相似系統的功能。而系統設計則是基于功能需求分析,這也是比較重要的環節,需要認真對待。因為此設計方案對后期的編碼起著重要的作用,不僅可以降低編碼期間的出錯率,還可以提高編碼速度,畢竟系統的實現部分,基本都是參照系統設計的方案進展的。當系統編碼完成,也會進行最后的測試環節,當開發的系統檢驗合格之后,系統開發才能夠結束。本系統的開發也是遵循這樣的流程,即分析功能,設計系統模塊,設計數據庫,實現系統功能,測試系統等。
本系統具有較完善的功能,使用者基本可以使用本系統去處理相關數據,而且系統可以較長時間進行工作。對于系統的操作,使用者也易于上手,畢竟本系統在設計時,就對頁面中的導航模塊進行重點設計,把頁面中的重點區域用來展示系統的導航功能,讓使用者進入系統界面,可以第一時間發現系統的導航,并使用系統的導航功能找到需要的內容。對于系統的安全性,本系統在保存用戶賬號密碼數據時,也是用當下流行的MD5加密技術來保障數據安全,也在系統的登錄模塊設置了安全驗證規則,引導符合條件的用戶進入系統指定頁面。
本系統具備一定的優勢的同時,它也會暴露出自身的缺陷,比如,本系統在編碼過程中,對使用的變量的命名不方便記憶,并且也不規范,代碼編寫也不規范,缺少關鍵代碼的注釋等,還有系統的目錄規劃不合理等問題。
?綜上所述,本系統還需要時間來完善,本人也需要加強技術知識的學習與實踐,在今后的工作中,我也需要注重個人能力的培養,及時吸收編程技術知識,然后運用先進成熟的技術去重構本系統,讓系統日益完善。
參考文獻
[1]吳亮.中小企業人事管理系統設計[J].科學技術創新,2020(31):73-74.
[2]崔靖奇,趙廣復.基于JAVA的中小企業人事管理系統的研究[J].電腦與電信,2019(08):28-30.
[3]王惠.基于JSP的企業人事管理系統的設計與實現[J].電腦知識與技術,2018,14(33):75-77.
[4]張明亮.JSP技術在互聯網軟件中的應用優勢研究[J].軟件工程,2019,22(10):19-21+6.
[5]趙曉丹.網頁開發中的JSP技術分析[J].南方農機,2019,50(20):247-248.
[6]宋麗娜.基于JSP的Web開發中文亂碼問題的研究與解決[J].電子技術,2015,42(11):5-7.
[7]汪君宇.基于JSP的Web應用軟件開發技術分析[J].科技創新與應用,2018(16):158-160.
[8]趙鋼.JSP Servlet+EJB的Web模式應用研究[J].電子設計工程,2016,21(13):47-49.
[9]秦超,潘猛,張鵬.處理MySQL的典型問題[J].網絡安全和信息化,2018(04):70-72.
[10]李仕偉,周坤,劉新蕊,李寶林.MySQL數據庫優化技術[J].信息與電腦(理論版),2016(12):173-174.
[11]張云健.計算機軟件Java編程特點及其技術應用[J].信息與電腦(理論版),2019(13):97-98.
[12]劉星淇.Java編程語言的特點與應用分析[J].通訊世界,2019,26(09):149-150.
[13]岳青玲.Java面向對象編程的三大特性[J].電子技術與軟件工程,2019(24):239-240.
[14]謝懿.計算機軟件JAVA編程特點及其技術分析[J].農家參謀,2020(01):166.
[15]喬嵐.基于MyBatis和Spring的JavaEE數據持久層的研究與應用[J].信息與電腦(理論版),2017(08):73-76.
[16]鄒紅霆.基于SSM框架的Web系統研究與應用[J].湖南理工學院學報(自然科學版),2017,30(01):39-43.
[17]于萬波.網站開發與應用案例教程[M].清華大學出版社,2015.
[18]Xuan Yin, Wei Zheng, Ming Zhang, Jing Zhang, G. Zhuang, T. Ding. A modularized operator interface framework for Tokamak based on MVC design pattern[J]. Fusion Engineering and Design, 2018.
[19]Oscar Rodriguez-Prieto,Francisco Ortin,Donna O’Shea. Efficient runtime aspect weaving for Java applications[J]. Information and Software Technology,2018,100.
致??謝
自從來到了這個校園,我覺得我改變了很多,我的性格也變得開朗,我的知識也得到了增長,還有我對社會的認知也得到了改變。因為,處于這個校園中,有來自五湖四海的同學們,我們都可以在一起學習,課后還可以互相攀談,感覺這樣的生活真的很有趣,還有校園的老師們,他們都具備較高的學歷,擁有豐富的專業知識,而且他們一直都很認真的教授我們知識。
到現在為止,我都不后悔來到這個學校,因為大學校園跟高中時所處的環境不一樣,大學校園的時間節點是碎片化的,可以根據自身情況綜合利用,可以用來學習知識,也可以用來去社會上實踐,增長社會見識,為畢業后的工作打下基礎等。然而,這一切都即將結束,因為畢業了就要離開校園,真正步入社會進行生活。
在這最后的時間里,我想對身邊的人表示感謝。首先是導師,他陪伴著我度過了畢業設計制作的這段時間,還提供給我各種幫助,其中有系統選題方面的建議,功能分析上的意見,編程技術的指導等,還時不時關懷我,讓我不要焦躁,設計制作的每個環節都督促我認真完成,遇到問題后,先嘗試自行解決,沒有思路時,導師就會幫助我,并提供解決問題的辦法。所以,我能上交項目程序,導師功不可沒。其次是班上的同學,雖然在這幾年的朝夕相處中,我們彼此互相關懷,遇到問題,相互幫助,這些同學豐富了我的校園生活。最后是校園的老師們,他們辛苦教學,傳授知識給我們,才讓我們能夠成長,我們也學到了本事,面對學習中或生活中的問題,我們也有能力去解決。
總之,面臨畢業,我希望我的老師們可以心想事成,班上的同學都能找到好工作,我的母校前景更輝煌
核心代碼展示
/*** 公告通知* 后端接口* @author * @email * @date 2021-03-09 11:33:59*/
@RestController
@RequestMapping("/news")
public class NewsController {@Autowiredprivate NewsService newsService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( NewsEntity news){EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();ew.allEq(MPUtil.allEQMapPre( news, "news")); return R.ok().put("data", newsService.selectListView(ew));}/*** 查詢*/@RequestMapping("/query")public R query(NewsEntity news){EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();ew.allEq(MPUtil.allEQMapPre( news, "news")); NewsView newsView = newsService.selectView(ew);return R.ok("查詢公告通知成功").put("data", newsView);}/*** 后端詳情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){NewsEntity news = newsService.selectById(id);return R.ok().put("data", news);}/*** 前端詳情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){NewsEntity news = newsService.selectById(id);return R.ok().put("data", news);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody NewsEntity news, HttpServletRequest request){news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(news);newsService.insert(news);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody NewsEntity news, HttpServletRequest request){news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(news);newsService.insert(news);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody NewsEntity news, HttpServletRequest request){//ValidatorUtils.validateEntity(news);newsService.updateById(news);//全部更新return R.ok();}/*** 刪除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){newsService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = newsService.selectCount(wrapper);return R.ok().put("count", count);}}