ssm基于Java的微小企业人事管理系统的设计与实现毕业设计源码231012
ssm微小企業人事管理系統的設計與實現
摘?要
科技進步的飛速發展引起人們日常生活的巨大變化,電子信息技術的飛速發展使得電子信息技術的各個領域的應用水平得到普及和應用。信息時代的到來已成為不可阻擋的時尚潮流,人類發展的歷史正進入一個新時代。在現實運用中,應用軟件的工作規則和開發步驟,采用Java技術微小企業人事管理系統。
本設計主要實現集人性化、高效率、便捷等優點于一身的微小企業人事管理系統,完成 首頁、用戶管理、部門管理、員工請假管理、薪資管理、通知公告管理、招聘信息管理等功能模塊。系統通過瀏覽器與服務器進行通信,實現數據的交互與變更。本系統通過科學的管理方式、便捷的服務提高了工作效率,減少了數據存儲上的錯誤和遺漏。微小企業人事管理系統使用Java語言,采用基于 MVC模式的SSM技術進行開發,使用 MyEclipse 2017 CI 10 編譯器編寫,數據方面主要采用的是微軟的MySQL關系型數據庫來作為數據存儲媒介,配合前臺HTML+CSS 技術完成系統的開發。
關鍵詞:微小企業人事管理系統;Java語言;關系型數據庫;數據存儲
Design and Implementation of ssm Micro-enterprise Personnel Management System
Abstract
The rapid development of science and technology has caused great changes in people's daily life. The rapid development of electronic information technology has popularized and applied the application level of electronic information technology in various fields. The arrival of the information age has become an irresistible fashion trend, and the history of human development is entering a new era. In practical application, the working rules and development steps of the application software are adopted, and the micro enterprise personnel management system based on Java technology is adopted.
This design mainly realizes the micro-enterprise personnel management system with the advantages of humanization, high efficiency and convenience, and completes the function modules such as home page, user management, department management, employee leave management, salary management, notice management and recruitment information management. The system communicates with the server through the browser to realize the interaction and change of data. This system improves work efficiency and reduces errors and omissions in data storage through scientific management and convenient service. Micro-enterprise personnel management system uses Java language, uses SSM technology based on MVC pattern to develop, and uses MyEclipse 2017 CI 10 compiler to write. In data aspect, it mainly uses Microsoft's MySQL relational database as data storage medium, and cooperates with front-end HTML+CSS technology to complete the system development.
Key words:?Micro enterprise personnel management system; Java language; Relational database; Data storage
目 ?錄
第1章 緒論
1.1?研究背景與意義
1.2?開發現狀
1.3?本文的組織結構
第2章 相關技術介紹
2.1?ssm框架介紹
2.2 MVVM模式介紹
2.3 B/S體系結構介紹
2.4 B/S體系工作原理
2.5 Vue.js 主要功能 5
2.6?JavaScript 運行模式 6
第3章 系統分析 7
3.1?可行性分析 7
3.1.1?技術可行性分析 7
3.1.2?經濟可行性分析 7
3.1.3?操作可行性分析 7
3.2?功能需求分析 7
3.3?非功能需求分析 9
3.4?數據流程分析 9
第4章 系統設計
4.1?系統架構設計
4.2?系統功能結構
4.3?功能模塊設計
4.4?數據庫設計
4.4.1?概念模型
4.4.2?關系模型
4.4.3?數據表
第5章 系統實現
5.1?登錄模塊的實現
5.2?用戶子系統模塊的實現 20
5.2.1?用戶首頁模塊 20
5.2.2?考勤簽到模塊 21
5.2.3?招聘信息模塊
5.2.4?薪資管理模塊
5.2.5?員工請假模塊
5.3?管理員子系統模塊的實現 27
5.3.1?個人資料管理模塊 27
5.3.2?員工管理模塊
5.3.3?招聘信息管理模塊
5.3.4?部門管理模塊
第6章 系統測試 39
6.1?測試目的
6.2?測試過程 39
6.3?測試結果
第7章 總結與展望
參考文獻
致謝
信息作為生產力最活躍的因素,很早就在人類經濟生活中發揮著不可替代的作用,但把信息納入企業經營管理系統中的高效處理和應用是在計算機發明以后的50年代末。人事管理系統就是把分散的企業單位的職工信息實行統一,集中,規范的收集管理,建立分類編號管理,電腦存儲查詢以及防火,防潮,防蛀防盜等現代化,專業化的管理系統,為企事業單位和職工解除后顧之憂。企業人事管理系統為企事業單位提供信息咨詢,信息檢索,信息寸取等服務。人事管理系統基本上能夠滿足現代企業人事管理系統使用表格對各種信息分門別類,組成企業人事管理系統,可以方便地查詢,查閱,修改,交流和重復使用。
企業人事管理是企業管理的一個重要內容,隨著時代的進步,企業也逐漸變得龐大起來。如何管理好企業內部員工的信息,成為企業管理中的一個大的問題。在這種情況下,一個可以規范化,自動化的企業人事管理系統就顯的非常必要。
人事管理系統的革命性變革出現在20世紀90年代末。由于市場競爭的需要,如何吸引和留住人才,激發員工的創造性、工作責任感和工作熱情已成為關系企業興衰的重要因素,人才已經成為企業最重要的資產之一。
目前國內的人事管理系統的開發技術已經非常成熟,主要原因在于人事管理系統本身具有業務清晰、數據處理規范等許多優點,為其信息化提供了必要的優越條件,加上近十年計算機技術的飛躍發展,人事管理系統在國內基本上已經進入了普及應用的階段。國內目前已有多種通用的人事管理系統軟件供應用單位選擇使用,而且還有多種人事管理系統開發通用工具供用戶開發自己的人事管理系統擇用。應該說,人事管理系統的開發與應用在國內已經進入了成熟階段。
目前國內的人事管理信息系統的特點:面向網絡,采用大型、通用性好的數據庫機制;堅持標準化、規范化原則,提供靈活構庫機制;提供強大的基礎信息管理功能,如員工管理、部門管理、考勤管理、權限管理、薪資管理,為各項人事業務的職能化管理提供有效、準確的基礎數據支持;提供靈活、易操作的業務管理功能,實現人事業務職能化管理與基礎信息管理的有效結合;提供用于輸入的列表、模板組件和用于輸出的報表組件,使系統直觀,操作性好;為保證人事信息的機密性,提供安全的用戶權限管理機制;為更好地實現層與層之問的數據傳遞,提供點到點、報盤、郵件等多種傳輸方式,有效地實現指標代碼、數據結構、人事與編制信息綜合網絡管理、模 板、報表表樣及數據的發送接收。
在國外,與我國的人事管理信息系統相對應的是人力資源管理系統(HRMS,Human Resources Management System),該系統本身與其相應的計算機信息應用技術均非常成熟。國外幾乎所有發達國家均建立了自己的人力資源管理系統,這個系統是全國性的,覆蓋了全國的人力資源管理。國外公司的人事部一般均建立了計算機信息系統,負責公司內部的人力資源。國外一些發達國家的企事業單位非常注重自身人力資源管理與決策支持系統的開發應用。尤其是一些跨國公司,更是不惜巨大的投資開發相應的人力資源管理與決策支持系統。人力資源管理與決策支持系統在跨國公司中,既不是一個普通的人事部,也不是一個福利部門,而是圍繞提高工作效率而設立的由多種信息、數據和活動形成的一個開放性系統。微軟的人事流動管理與決策支持系統就是其中一例。微軟于1997年開發了一個由6大模塊組成的人事管理與決策支持系統HeadlTrax,用于處理員工的招聘、晉升、調動或部門內的變動。該系統使微軟任何級別的經理都能夠迅速根據外界環境的變化調整部門結構及人事安排;使人力資源部門可以使用這個電子工具進行人力資源管理的趨勢分析;采用了數字授權技術,使得經理能夠把任何類型的人事申請的批準職責下放給其他人,從而提供了靈活性,又不會使過程復雜化,較好地滿足了公司對人力資源管理的要求。
第一章是緒論,本文章的開頭部分,對本題目的研究背景和研究意義等一些做文字性的描述。
第二章研究了微小企業人事管理系統的所采用的開發技術和開發工具。
第三章是系統分析部分,包括系統總體需求描述、功能性角度分析系統需求、非功能性等各個方面分析系統是否可以實現。
第四章是系統設計部分,本文章的重要部分,提供了系統架構的詳細設計和一些主要功能模塊的設計說明。
第五章是系統的具體實現,介紹系統的各個模塊的具體實現。
第六章在前幾章的基礎上對系統進行測試和運行。
最后對系統進行了認真的總結,以此對未來有一個新的展望。
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內容)。常作為數據源較簡單的web項目的框架。
Spring
Spring就像是整個項目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數去調用實體類的構造方法來實例化對象。也可以稱之為項目中的粘合劑。
Spring的核心思想是IoC(控制反轉),即不再需要程序員去顯式地`new`一個對象,而是讓Spring框架幫你來完成這一切。
SpringMVC
SpringMVC在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前臺這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執行的操作。SpringMVC相當于SSH框架中struts。
??mybatis
mybatis是對jdbc的封裝,它讓數據庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的sql語句映射。在每次與數據庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執行sql命令。
頁面發送請求給控制器,控制器調用業務層處理邏輯,邏輯層向持久層發送請求,持久層與數據庫交互,后將結果返回給業務層,業務層將處理邏輯發送給控制器,控制器再調用視圖展現數據。
MVVM是Model-View-ViewModel的簡寫。它本質上就是MVC 的改進版。MVVM 就是將其中的View 的狀態和行為抽象化,讓我們將視圖 UI 和業務邏輯分開。當然這些事 ViewModel 已經幫我們做了,它可以取出 Model 的數據同時幫忙處理 View 中由于需要展示內容而涉及的業務邏輯。微軟的WPF帶來了新的技術體驗,如Silverlight、音頻、視頻、3D、動畫……,這導致了軟件UI層更加細節化、可定制化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足于原有MVP框架并且把WPF的新特性糅合進去,以應對客戶日益復雜的需求變化。
B/S結構(Browser/Server,瀏覽器/服務器模式),是WEB興起后的一種網絡結構模式,WEB瀏覽器是客戶端最主要的應用軟件。這種模式統一了客戶端,將系統功能實現的核心部分集中到服務器上,簡化了系統的開發、維護和使用。客戶機上只要安裝一個瀏覽器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服務器安裝SQL Server、Oracle、MYSQL等數據庫。瀏覽器通過Web Server同數據庫進行數據交互。?
B/S架構采取瀏覽器請求,服務器響應的工作模式。
用戶可以通過瀏覽器去訪問Internet上由Web服務器產生的文本、數據、圖片、動畫、視頻點播和聲音等信息;
而每一個Web服務器又可以通過各種方式與數據庫服務器連接,大量的數據實際存放在數據庫服務器中;
從Web服務器上下載程序到本地來執行,在下載過程中若遇到與數據庫有關的指令,由Web服務器交給數據庫服務器來解釋執行,并返回給Web服務器,Web服務器又返回給用戶。在這種結構中,將許許多多的網連接到一塊,形成一個巨大的網,即全球網。而各個企業可以在此結構的基礎上建立自己的Internet。
在 B/S 模式中,用戶是通過瀏覽器針對許多分布于網絡上的服務器進行請求訪問的,瀏覽器的請求通過服務器進行處理,并將處理結果以及相應的信息返回給瀏覽器,其他的數據加工、請求全部都是由Web Server完成的。通過該框架結構以及植入于操作系統內部的瀏覽器,該結構已經成為了當今軟件應用的主流結構模式。
Vue.js是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue采用自底向上增量開發的設計。Vue 的核心庫只關注視圖層,并且非常容易學習,非常容易與其它庫或已有項目整合。另一方面,Vue 完全有能力驅動采用單文件組件和Vue生態系統支持的庫開發的復雜單頁應用。
Vue.js 的目標是通過盡可能簡單的 API 實現響應的數據綁定和組合的視圖組件。
Vue.js 自身不是一個全能框架——它只聚焦于視圖層。因此它非常容易學習,非常容易與其它庫或已有項目整合。另一方面,在與相關工具和支持庫一起使用時,Vue.js 也能驅動復雜的單頁應用。
JavaScript是一種屬于網絡的高級腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。
是一種解釋性腳本語言(代碼不進行預編譯)。
主要用來向HTML(標準通用標記語言下的一個應用)頁面添加交互行為。
可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。
跨平臺特性,在絕大多數瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
?JavaScript腳本語言同其他語言一樣,有它自身的基本數據類型,表達式和算術運算符及程序的基本程序框架。JavaScript提供了四種基本的數據類型和兩種特殊數據類型用來處理數據和文字。而變量提供存放信息的地方,表達式則可以完成較復雜的信息處理。
本次設計基于B/S 模式下,運用Java、JSP技術采用的是MySQL數據庫和Myeclipse實現,總體的可行性共分為以下三個方面。
所謂的技術可行性就是在限定時間,前期擬定的功能能否被滿足。在開發設計上是否會遇上解決不了的問題。做完的項目能否被很好地應用,如果存在缺點在后期的維護上是否存在很大的難度。在對這個系統評估后,認定已存在的技術能達成目標。用JSP技術來實現動態的頁面,嵌入低依賴性的設計模式,靈活的數據庫,配合穩定的服務器,整個系統的運行效率大大提升。由此可見,在技術層面達成目標不是非非之想。
在項目上使用的工具大部分都是是當下流行開源免費的,所以在開發前期,開發時用于項目的經費將會大大降低,不會讓開發該軟件在項目啟動期受到經費的影響,所以經濟上還是可行的。盡量用最少的花費去滿足用戶的需求。省下經費用于人工費,以及設備費用。將在無紙化,高效率的道路上越走越遠。
本系統實現功能的操作很簡單,普通電腦的常見配置就可以運行本軟件,并且只要粗通電腦使用的基本常識就可以流暢的使用本軟件。電腦具備連接互聯網的能力,并且可以正常訪問系統,并不需要操作者有什么高超的能力,只需了解業務流程,并且按照專業知識進行正確操作即可,所以微小企業人事管理系統具備操作可行性。
在系統開發設計前,應該對功能做初步設想,清楚這個管理系統有什么板塊,每個板塊有什么功能,整體的設計是否滿足使用者的需求,接著對所開發的系統功能進行的詳細分析總結,從而設計出完整的系統并將其實現。用戶和開發人員的交流分析,使其達到最佳理解程度,使系統功能達到最佳。
員工用例圖如下所示。
?
圖3-1 員工用例圖
管理員用例圖如下所示。
?
圖3-2 管理員用例圖
微小企業人事管理系統在對需求做解析后,整個系統主要分為兩個部分:管理員和員工,每個模塊下的分支功能不一樣。對功能做出如下說明:
員工模塊:
賬號登錄認證。
管理個人資料信息,修改可修改的信息項。
提交員工請假申請、打卡,同時查看歷史已提交的請假申請、打卡記錄。
員工考勤查詢,同時查看歷史已考勤的記錄。
員工薪資查詢,同時查看歷史已薪資的記錄。
管理員模塊:
維護員工,審核員工的賬號,可以凍結員工的登錄權限,或者刪除員工賬號。
薪資管理:登入之后,員工可查看薪資信息,管理員可對薪資進行管理;?
發布招聘信息,并可以銷毀某個招聘,更新招聘數據,模糊搜索招聘數據等。
管理員工考勤數據。
維護員工工資數據。
查看員工提交的請假申請、打卡數據,管理員有權利維護它。
系統非功能需求有非常多,比如性能需求、可承載最大用戶數、穩定性、易用性需求等。本系統分析時考慮到易用性需求,因為系統是給人使用的,所以必須充分從用戶的角度出發,考慮用戶體驗,使系統易理解易上手易操作。
一層數據流程圖包括了登錄、用戶功能和檢索維護等模塊,在登錄模塊使用到的數據存儲有用戶賬戶文檔,用戶功能模塊需要的存儲是用戶各功能模塊數據文檔,檢索維護是使用以上這些數據文檔通過關鍵詞進行檢索。
系統的一層數據流圖如下圖所示。
?
圖3-2系統數據流圖(一層)
二層數據流程是對一層數據流層圖中填寫登錄信息、用戶功能的細化。即:填寫登錄信息細化為填制信息、后臺審核,用戶功能細化為、用戶管理、部門管理、考勤簽到、員工請假、薪資管理、通知公告、招聘信息管理等操作。
系統的二層數據流圖如下圖所示。
?
圖3-4系統數據流圖(二層)
目前B/S體系的系統主要的數據訪問方式是:通過瀏覽器頁面用戶可以進入系統,系統可以自動對用戶向服務器發送的請求進行處理,處理請求是在系統后臺中進行的,用戶在瀏覽器頁面上進行相應操作,就能夠看到服務端傳遞的處理結果。微小企業人事管理系統主要分為視圖-模型-控制三層架構設計。在視圖層中,主要是操作在服務器端向客戶端反饋并顯示的數據,在模型層中,主要處理相關的業務邏輯、數據整合等,最后的控制層它介于視圖和模型之間,主要是調整兩層之間的關系,最終落實數據的傳遞。
系統架構圖如下圖所示。
?
圖4-1系統架構圖
系統設計的目的是分析系統包括的所有功能結構,為開發人員設計開發和實現系統做好準備工作。經過前期的需求調查、分析和整理之后,確定的總體需求主要包括多個模塊,分別是:部門管理、員工管理、招聘信息管理、通知公告管理、薪資管理、員工請假管理、考勤簽到管理。系統整體角色分為二個部分,一是員工、二是管理員。權限分布也是很明顯,員工是在除去瀏覽信息之外還具有查詢和管理自己賬戶信息、通知公告查詢、薪資查詢、員工請假、考勤簽到查詢等權限;管理員是最高權限擁有者。
系統功能結構圖如下圖所示。
?
圖4-2系統功能結構圖
員工考勤簽到模塊
員工存在考勤簽到關系,關系為一對多,根據員工編號來將員工數據傳入到考勤簽到數據中,操作人為員工,然后生成考勤簽到列表,員工查看個人歷史考勤簽到列表,可以進行數據銷毀。
員工維護模塊
操作人來錄入員工數據,點擊員工錄入按鈕,依次填寫要錄入的員工數據,點擊提交按鈕,將數據提交至數據庫,然后刷新員工數據頁面,每條數據右邊有刪除和編輯按鈕,來完成相應的刪除和更新功能。
員工薪資模塊
員工存在薪資關系,關系為一對多,根據員工編號來將員工數據傳入到工資數據中,操作人為員工,然后生成工資列表,員工查看個人歷史工資列表,可以進行數據銷毀。
招聘信息維護模塊
管理員點擊招聘信息管理菜單,點擊招聘信息添加子菜單,添加招聘信息數據,填寫應聘崗位、應聘人姓名、性別、聯系電話、學歷、畢業院校、簡歷、應聘日期成功后,招聘信息數據頁面刷新,新數據成功載入頁面。
員工請假維護模塊
根據員工請假申請、員工提交請假申請、打卡數據,在個人后臺便可以查看到歷史提交的請假申請,管理員來維護請假申請,審批確認已存在的請假申請。
通知公告信息管理模塊
用戶登錄系統后,可在公告板進行發表建議,管理員在后臺可以查看或搜索公告信息,同時可回復或刪除公告信息。
對于一個要開發的系統來說,E-R圖可以讓別人能更快更輕松的了解此系統的事務及它們之間的關系。根據系統分析階段所得出的結論確定了在微小企業人事管理系統中存在著多個實體分別是用考勤簽到、員工、薪資、員工請假、招聘信息、部門管理。
系統總體ER圖如下圖所示。
?
圖4-4系統總體ER圖
管理員(管理員id、用戶名、密碼、權限)
員工管理(員工管理id、工號、員工姓名、部門、審核狀態)
部門管理(部門管理id、部門、負責人、聯系電話、成立日期、部門人數)
招聘信息(招聘信息id、應聘方式、招聘職位、部門、人數、學歷要求、職位要求)
考勤簽到(考勤簽到id、工號、部門、考勤類型、簽到照片)
薪資管理(薪資管理id、工號、發薪月份、基本工資、加班費、補貼、獎金、考勤扣款、五險一金、實發工資)
員工請假(員工請假、工號、部門、請假類型、請假天數、開始時間、結束時間、請假原因、審核狀態、審核回復)
通知公告(通知公告、標題、相關附件、發布人、內容)
數據庫邏輯結構就是將E-R圖在數據庫中用具體的字段進行描述。用字段和數據類型描述來使對象特征實體化,最后形成具有一定邏輯關系的數據庫表結構。微小企業人事管理系統所需要的部分數據結構表如下表所示。
salary_management表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| salary_management_id | int | 11 | 是 | 是 | 薪資管理ID |
| job_number | int | 11 | 否 | 否 | 工號 |
| salary_month | varchar | 64 | 否 | 否 | 發薪月份 |
| base_pay | int | 11 | 否 | 否 | 基本工資 |
| overtime_pay | int | 11 | 否 | 否 | 加班費 |
| subsidy | int | 11 | 否 | 否 | 補貼 |
| bonus | int | 11 | 否 | 否 | 獎金 |
| attendance_deduction | int | 11 | 否 | 否 | 考勤扣款 |
| five_insurances_and_one_fund | int | 11 | 否 | 否 | 五險一金 |
| net_salary | varchar | 64 | 否 | 否 | 實發工資 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
recruitment_information表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| recruitment_information_id | int | 11 | 是 | 是 | 招聘信息ID |
| department | varchar | 64 | 否 | 否 | 部門 |
| recruitment_position | varchar | 64 | 否 | 否 | 招聘職位 |
| number_of_people | varchar | 64 | 否 | 否 | 人數 |
| application_method_ | text | 0 | 否 | 否 | 應聘方式 |
| educational_requirements | text | 0 | 否 | 否 | 學歷要求 |
| job_requirements | text | 0 | 否 | 否 | 職位要求 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
notice_announcement表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| notice_announcement_id | int | 11 | 是 | 是 | 通知公告ID |
| title | varchar | 64 | 否 | 否 | 標題 |
| relevant_attachments | varchar | 255 | 否 | 否 | 相關附件 |
| publisher | varchar | 64 | 否 | 否 | 發布人 |
| content | text | 0 | 否 | 否 | 內容 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
employee_management表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| employee_management_id | int | 11 | 是 | 是 | 員工管理ID |
| job_number | varchar | 64 | 是 | 否 | 工號 |
| employee_name | varchar | 64 | 否 | 否 | 員工姓名 |
| department | varchar | 64 | 否 | 否 | 部門 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
employee_leave表:?
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| employee_leave_id | int | 11 | 是 | 是 | 員工請假ID |
| job_number | int | 11 | 否 | 否 | 工號 |
| department | varchar | 64 | 否 | 否 | 部門 |
| leave_type | varchar | 64 | 否 | 否 | 請假類型 |
| leave_days | varchar | 64 | 否 | 否 | 請假天數 |
| start_time | datetime | 0 | 否 | 否 | 開始時間 |
| end_time | datetime | 0 | 否 | 否 | 結束時間 |
| reason_for_leave | text | 0 | 否 | 否 | 請假原因 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| examine_reply | varchar | 255 | 否 | 否 | 審核回復 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
department_management表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| department_management_id | int | 11 | 是 | 是 | 部門管理ID |
| department | varchar | 64 | 否 | 否 | 部門 |
| person_in_charge | varchar | 64 | 否 | 否 | 負責人 |
| contact_number | varchar | 64 | 否 | 否 | 聯系電話 |
| date_of_incorporation | date | 0 | 否 | 否 | 成立日期 |
| number_of_departments | int | 11 | 否 | 否 | 部門人數 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
attendance_check_in表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| attendance_check_in_id | int | 11 | 是 | 是 | 考勤簽到ID |
| job_number | int | 11 | 否 | 否 | 工號 |
| department | varchar | 64 | 否 | 否 | 部門 |
| attendance_type | varchar | 64 | 否 | 否 | 考勤類型 |
| check_in_photos | varchar | 255 | 否 | 否 | 簽到照片 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
系統的登錄窗口是用戶的入口,用戶只有在登錄成功后才可以進入訪問。通過在登錄提交表單,后臺處理判斷是否為合法用戶,進行頁面跳轉,進入系統中去。
登錄合法性判斷過程:用戶輸入賬號和密碼后,系統首先確定輸入輸入數據合法性,然后在login.jsp頁面發送登錄請求,調用src下的mainctrl類的dopost方法來驗證。
用戶登錄模塊的IPO如下所示:
輸入:用戶名和密碼。
處理:
1)檢測用戶輸入的賬號、密碼是否正確及在數據庫已對應存在。
2)從數據庫中提取記錄,并儲存在本地的session中(timeout默認=30min)。
3)根據用戶名,將其顯示在系統首頁上。
輸出:是否成功的信息。
登錄流程圖如下所示。
?
圖5-1登錄流程圖
系統登錄界面如下所示。
?
圖5-2系統登錄界面
用戶登錄的邏輯代碼如下。
/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}else{
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態,不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲Token到數據庫
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token", accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000, "賬號或密碼不正確");
????????}
}
????public String select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
系統呈現出一種簡潔大方的首頁:界面簡約、鱗次櫛比,用戶能輕車熟路的使用。出于對系統使用群體廣泛的顧慮,應有良好性能的后臺。
如下圖所示為系統的首頁界面。
?
圖5-3系統首頁界面
其中載入前臺頁面的主要代碼如下。
package com.project.demo.constant;
/**
?*/
public class FindConfig {
????public static String PAGE = "page";
????public static String SIZE = "size";
????public static String LIKE = "like";
????public static String ORDER_BY = "orderby";
????public static String FIELD = "field";
????public static String GROUP_BY = "groupby";
????public static String MIN_ = "_min";
????public static String MAX_ = "_max";
}
考勤簽到過程中,首先使用getmap(id,"xinxi"),通過員工ID得到考勤簽到數據,將員工數據賦值給員工考勤簽到,調用CommDAO的insert方法將考勤數據插入考勤表中,最后查看個人歷史員工考勤簽到記錄,可以銷毀歷史考勤數據。
考勤簽到流程圖如下所示。
?
圖5-4考勤簽到流程圖
考勤簽到界面如圖所示。
?
圖5-5考勤簽到界面
考勤簽到管理界面如圖所示。
?
圖5-6考勤簽到管理界面
考勤簽到添加關鍵代碼如下所示。
@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????service.insert(service.readBody(request.getReader()));
????????return success(1);
????}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
招聘信息過程中,首先使用getmap(id,"xinxi"),通過招聘ID得到信息數據,將招聘信息數據賦值給招聘信息,調用CommDAO的insert方法將招聘數據插入考勤表中,最后查看個人歷史招聘信息記錄,可以銷毀歷史招聘數據。
招聘信息流程圖如下所示。
?
圖5-7招聘信息流程圖
招聘信息管理界面如圖所示。
?
圖5-8招聘信息管理界面
招聘信息關鍵代碼如下所示。
@RequestMapping("/get_obj")
????public Map<String, Object> obj(HttpServletRequest request) {
????????List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
????????if (resultList.size() > 0) {
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("obj",resultList.get(0));
????????????return success(jsonObject);
????????} else {
????????????return success(null);
????????}
}
薪資管理過程中,首先使用getmap(id,"xinxi"),通過員工ID得到員工數據,將員工數據賦值給薪資管理,調用CommDAO的insert方法將工資數據插入工資表中,最后查看個人歷史薪資管理記錄,可以銷毀歷史工資數據。
薪資管理流程圖如下所示。
?
圖5-9薪資管理流程圖
薪資管理界面如圖所示。
?
圖5-10薪資管理界面
薪資管理界面如圖所示。
?
圖5-11薪資管理界面
薪資管理關鍵代碼如下所示。
@PostMapping("/set")
@Transactional
????public Map<String, Object> set(HttpServletRequest request) throws IOException {
????????service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
????????return success(1);
}
用戶提交員工請假,可以進行新增、查看、修改以及刪除等相應的請假申請管理操作。當點擊"新增請假申請、打卡"的按鈕時,在請假申請、添加界面進行詳細信息的添加操作。當點擊"查看請假申請、打卡"超級鏈接時,會顯示所選的請假申請的信息,然后點擊"返回"再返回到其主頁面。
員工請假界面如圖所示。
?
圖5-12員工請假界面
員工請假管理界面如圖所示。
?
圖5-13員請假管理界面
員工請假添加關鍵代碼如下所示。
@RequestMapping(value = "/del")
????@Transactional
????public Map<String, Object> del(HttpServletRequest request) {
????????service.delete(service.readQuery(request), service.readConfig(request));
????????return success(1);
}
用戶點擊登錄填寫賬號信息登錄后,會切換內容為“某某用戶歡迎您”和歷史訂單,并給出注銷鏈接。當用戶登錄成功后會將個人信息保存在session作用域中,點擊自己的用戶名時,會跳轉到個人詳細信息頁面,由后臺通過Freemarker取出session作用域中的用戶信息進行動態渲染,例如,郵箱、電話號碼、用戶名等等。同時頁面上會顯示修改個人信息和修改密碼的按鈕,這時客戶可以修改自己的登錄密碼以保障賬號的安全性,防止被人竊取賬號,通過UserController.java的updatePassword()實現,同時也可以根據自己的個人信息是否變動做出相應的修改,通過updateUserInfo()實現。
密碼修改流程圖如下所示。
?
圖5-14密碼修改流程圖
個人信息界面圖如下所示。
?
圖5-15個人信息界面圖
修改密碼界面如下所示。
?
圖5-15修改密碼界面圖
密碼修改關鍵代碼如下所示。
public String encryption(String plainText) {
????????String re_md5 = new String();
????????try {
????????????MessageDigest md = MessageDigest.getInstance("MD5");
????????????md.update(plainText.getBytes());
????????????byte b[] = md.digest();
????????????int i;
????????????StringBuffer buf = new StringBuffer("");
????????????for (int offset = 0; offset < b.length; offset++) {
????????????????i = b[offset];
????????????????if (i < 0)
????????????????????i += 256;
????????????????if (i < 16)
????????????????????buf.append("0");
????????????????buf.append(Integer.toHexString(i));
????????????}
????????????re_md5 = buf.toString();
????????} catch (Exception e) {
????????????e.printStackTrace();
????????}
????????return re_md5;
}
添加員工信息時,輸入必填字段后,表現層的YuangongController接受傳過來的員工信息參數,再調用YuangongController類的addYuangong方法,經過YuangongService業務層到YuangongMapper持久層的處理,完成對整個添加員工信息的操作。addYuangong方法也和用戶管理中的addUser方法類似,同時做添加和修改工作。
修改員工信息時,選擇需要修改的員工進行修改,調用YuangongController控制器的editYuangong方法,拿到該員工原本的信息并顯示到頁面,管理員再對需要修改的員工信息字段進行修改,完成后調用addYuangong方法,調用業務層的updateByKey方法,更新數據庫的員工信息表的數據。
員工管理流程圖如下所示。
?
圖5-16員工管理流程圖
員工添加界面如下圖所示。
?
圖5-17員工添加界面
員工查詢界面如下圖所示。
?
圖5-18員工查詢界面
員工信息添加關鍵代碼如下所示。
/**
?* 用戶組:用于用戶前端身份和鑒權(UserGroup)表實體類
?*
?* @author xxx
?*@since 202X-XX-XX
?*/
@TableName("user_group")
@Data
@EqualsAndHashCode(callSuper = false)
public class UserGroup implements Serializable {
????private static final long serialVersionUID = 968356951391304707L;
????/**
?????* 用戶組ID:[0,8388607]
?????*/
????@TableId(value = "group_id", type = IdType.AUTO)
????private Integer groupId;
????/**
?????* 顯示順序:[0,1000]
?????*/
????@TableField(value = "display")
????private Integer display;
????/**
?????* 名稱:[0,16]
?????*/
????@TableField(value = "name")
????private String name;
????/**
?????* 描述:[0,255]描述該用戶組的特點或權限范圍
?????*/
????@TableField(value = "description")
????private String description;
????/**
?????* 來源表:
?????*/
????@TableField(value = "source_table")
????private String sourceTable;
????/**
?????* 來源字段:
?????*/
????@TableField(value = "source_field")
????private String sourceField;
????/**
?????* 注冊位置:
?????*/
????@TableField(value = "register")
????private String register;
????/**
?????* 創建時間:
?????*/
????@TableField(value = "create_time")
????private Timestamp createTime;
????/**
?????* 更新時間:
?????*/
????@TableField(value = "update_time")
????private Timestamp updateTime;
}
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權限
?????*/
????@TableField(value = "user_group")
private String userGroup;
/**
?* 用戶組:用于用戶前端身份和鑒權(UserGroup)表控制層
?*
?*/
@RestController
@RequestMapping("user_group")
public class UserGroupController extends BaseController<UserGroup, UserGroupService> {
????/**
?????* 服務對象
?????*/
????@Autowired
????public UserGroupController(UserGroupService service) {
????????setService(service);
????}
}
刪除招聘信息時,選擇需要刪除的招聘信息進行刪除,把主鍵的uId傳到ZhaopingController控制器,再調用控制器的deleteZhaoping方法,數據經過ZhaopingService業務層解析和處理,請求ZhaopingMapper持久層調用deleteByPrimaryKey方法操作數據庫將招聘數據從數據庫中刪除。
查找招聘信息時,輸入需要查找的招聘名,調用getData方法獲取所有數據并且進行分頁,把獲取到的所有數據顯示到視圖上,這時候只需要用腳本方法便能快速查找,不涉及對數據庫操作。
招聘信息管理流程圖如下所示。
?
圖5-19招聘信息管理流程圖
招聘信息添加界面如下圖所示。
?
圖5-20招聘信息添加界面
招聘信息查詢界面如下圖所示。
?
圖5-21招聘信息查詢界面
招聘信息添加關鍵代碼如下所示。
Connection conn = this.getConn();
try {
Statement st = conn.createStatement();
????ResultSet rs = st.executeQuery("select * from "+tablename);
????ResultSetMetaData rsmd = rs.getMetaData();
????????????int i = rsmd.getColumnCount();
???? for(int j=1;j<=i;j++)
???? {
???? if(rsmd.getColumnName(j).equals("id"))continue;
if(rsmd.getColumnName(j).equals("ID"))continue;
if(rsmd.getColumnName(j).equals("iD"))continue;
if(rsmd.getColumnName(j).equals("Id"))continue;
???? typemap.put(rsmd.getColumnName(j)+"---", rsmd.getColumnTypeName(j));
???? collist.add(rsmd.getColumnName(j));
???? ???? sql+=rsmd.getColumnName(j)+",";
???? }
???? sql = sql.substring(0,sql.length()-1);
????sql+=") values(";
????rs.close();
????st.close();
} catch (SQLException e) {
e.printStackTrace();
}
用戶選擇部門添加部門管理記錄,用戶在yuangong_list查看員工,點擊部門,跳轉至peixun_add.jsp,添加部門則將添加的部門信息記錄數據封裝在HashMap中,然后調用CommDAO的insert方法將部門管理內容插入記錄表中。
部門管理流程圖如下所示。
?
圖5-22部門管理流程圖
部門管理界面如下圖所示。
?
圖5-23部門管理界面
在對該系統進行完詳細設計和編碼之后,就要對微小企業人事管理系統的程序進行測試,檢測程序是否運行無誤,反復進行測試和修改,使之最后成為完整的軟件,滿足用戶的需求,實現預期的功能。
在軟件的測試過程中,通常測試人員需要針對不同的功能模塊設計多種測試用例。通過測試用例能夠及時發現代碼業務邏輯上是否與真實的業務邏輯相對應,及時發現代碼上或邏輯上的缺陷,以此來來完善系統,提高軟件產品的質量,使軟件具有良好的用戶體驗。
登錄測試用例表如下所示。
表6-1登錄測試用例
| 測試性能 | 用戶或操作員登錄系統 | ||
| 用例目的 | 測試用戶或操作員登錄系統時功能是否正常 | ||
| 前提條件 | 進入用戶登錄頁面或操作員登錄頁面 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 各項信息不予填寫,直接點擊登陸按鈕 | 不允許登錄,提示填寫賬號相關信息 | 一致 | |
| 填寫錯誤的登錄名或密碼后點擊登錄系統 | 提示用戶名或密碼錯誤,要求重新填寫進行登錄 | 一致 | |
| 填寫與驗證碼信息不一致的信息 | 系統顯示出提示信息,表明驗證碼錯誤,要求重新填寫 | 一致 | |
考勤簽到測試用例表如下所示。
表6-2考勤簽到測試用例
| 測試性能 | 用戶進行考勤簽到的操作 | ||
| 用例目的 | 測試用戶進行考勤簽到操作時,該功能是否正常 | ||
| 前提條件 | 用戶進入員工詳情頁,該員工能夠被考勤 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 對著某員工點擊“考勤”按鈕 | 界面跳轉至考勤界面 | 一致 | |
| 在考勤界面,輸入必填項,點擊“提交”按鈕 | 提示“考勤成功”,并返回上一級界面 | 一致 | |
| 在考勤界面,填寫考勤表單的時候未輸入完整,點擊“提交”按鈕 | 提示“考勤失敗” | 一致 | |
員工管理測試用例表如下所示。
表6-3員工管理測試用例
| 測試性能 | 員工相關信息管理功能 | ||
| 用例目的 | 測試系統操作者對員工相關信息進行管理的功能是否正常 | ||
| 前提條件 | 登錄系統進入相關管理頁面 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 進入員工管理界面,點擊“錄入”按鈕,填寫所有必填項,點擊提交 | 提示“錄入成功”,并返回查詢界面 | 一致 | |
| 進入員工管理界面,點擊“錄入”按鈕,未填寫一個或者多個必填項,點擊提交 | 提示“錄入失敗”,請填寫必填項 | 一致 | |
| 進入員工管理界面,選擇要修改的一條數據,點擊該條數據后面的“修改”按鈕? | 節目跳轉至修改界面 | 一致 | |
| 在修改界面,修改可修改項后,點擊“提交”按鈕 | 提示“修改成功”,并返回查詢界面 | 一致 | |
| 進入員工管理界面,點擊某條數據后面的刪除按鈕 | 提示“是否要刪除該數據”,如果用戶點擊“確定”按鈕,則成功刪除該條數據,并提示“刪除成功”,之后返回查詢界面 | 一致 | |
經過對此系統的測試,得出該系統足以滿足用戶日常需求,在功能項目和操作等方面也能滿足操作員對于其他用戶的管理。但是,還有很多功能有待添加,這個系統僅能滿足大部分的需求,還需要對此系統的功能更進一步的完善,這樣使用起來才能更加的完美。
通過微小企業人事管理系統的開發,本人鞏固了之前學過的知識,如今將平時所學到的知識融合在設計中,在設計過程中,做了很多的準備,首先,在數據庫系統的設計過程中,尤其是在數據庫的工作原理、工作特點,對其深刻的討論,與此同時,對于小型站點來說,最好服務器的選擇,其次,利用所學的知識點分析所做的系統,并在此基礎上設計。
目前本系統已經上線,正在試運行階段,用戶反饋良好,基本完成用戶所需,試運行過程中沒有出現阻斷性問題,有一些不足和小問題也及時予以修正,系統上線后,為了保證數據的安全性,對系統進行了備份操作,系統備份是每兩個月備份一次,數據庫備份為每周備份一次,系統部署在租賃的云平臺服務器中。
本次系統上線成功后,得到了用戶的高度認可,但是在功能上和性能上還需做進一步的研究處理,使其有更高的性能和更好的用戶體驗。
系統在以后的升級過程中,需要解決一系列用戶所提出的問題,例如打印過程中如何避免瀏覽器的兼容性問題,大量用戶訪問時,如何保持較高的響應速度,在系統今后的升級過程中將著重解決這些安全性問題。
參考文獻
[1]王曉欣.企業人事管理中員工激勵機制的構建[J].人才資源開發,2021(24):75-76.
[2]吳亮.中小企業人事管理系統設計[J].科學技術創新,2020(31):73-74.
[3]劉蓉,丁旭.現代企業人事管理信息系統的設計與實現[J].黃河.黃土.黃種人,2020(17):36-37.
[4] Technology; Ivano-Frankivsk National Technical University of Oil and Gas Researchers Report Research in Technology (Digitalization As A Factor of Development of Enterprise Personnel)[J]. Journal of Technology,2020:
[5]段修亮,趙霞.小型企業人事管理系統的設計與實現[J].科技風,2020(01):76.
[6]張天武.面向國有企業領導班子人事管理系統的設計與實現[J].企業科技與發展,2020(12):85-86.
[7]曹智. 基于SSM框架的企業人事管理考勤系統的設計與實現[D].電子科技大學,2020.
[8]許騰. 基于WEB的企業人事管理系統設計與實現[D].石家莊鐵道大學,2019.
[9]王惠.基于JSP的企業人事管理系統的設計與實現[J].電腦知識與技術,2019,14(33):75-77.
[10]許天旸.企業人事管理系統設計與實現[J].電子世界,2019(11):177+179.
[11]張平,程婷,趙明松,陸龍妹.中小企業人事管理系統設計與開發[J].科技創新與生產力,2019(04):96-98.
[12]尚展壘,宋文軍. Oracle數據庫管理與開發[M].人民郵電出版社:, 201904.329.
[13]Aliya Z. Gafiyatullina,Adeliya V. Pavlova,Maria V. Vesloguzova,Rayaz K. Takhaviev,Ilana B. Kashirina,Svetlana I. Ashmarina. Structure and Development of the Intellectual Potential of the Industrial Enterprise Personnel[J]. Review of European Studies,2019,7(1):
[14]陸雛. 企業人事檔案管理軟件的開發[C]//源于實踐 服務全局——蘭臺工作縱橫.,2018:270-273.
[15]于法鳴, 企業勞動人事管理系統軟件. 北京市,勞動和社會保障部勞動科學研究所,2018-01-01.
致謝
伴隨著設計的完成,大學生涯也隨之即將結束。大學期間是我最珍惜的時光,大學時光中學會了很多,也成長了很多,這段時光中每一段回憶都刻在腦海中。感謝一起學習,一起成長同學們,和成長過程悉心教導的老師們,非常感激有你們的陪伴。
首先感謝我的指導老師,設計的完成離不開老師的一系列指導。在畢業設計的完成過程中,老師給出了很多中肯的建議,正是由于老師一絲不茍的工作態度,我的設計才能順利的完成。
最后,感謝在大學生涯中每一位教導我的老師,是你們教給了我豐富的知識,更教會了我遇到問題時,如何去應對并解決。謝謝你們的幫助與支持。
免費領取本源代碼,請關注點贊+私信
總結
以上是生活随笔為你收集整理的ssm基于Java的微小企业人事管理系统的设计与实现毕业设计源码231012的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享5个常用的CMD命令。
- 下一篇: Windows cmd关机重启命令