版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)</p><p><b> ?。ǘ?屆)</b></p><p> 基于Hibernate的工資管理系統(tǒng)開發(fā)</p><p> 所在學院 </p><p> 專業(yè)班級 計算機科學與技術 <
2、;/p><p> 學生姓名 學號 </p><p> 指導教師 職稱 </p><p> 完成日期 年 月 </p><p> 摘要:工資管理在各個組織中的作用日益突出,工資管理主要包括職工管理、工資設定、工資
3、修改、考勤管理等若干部分,這些信息數(shù)據(jù)量巨大、關系復雜,如若通過工資管理軟件進行計算機自動化管理,將會大大提高財務部門的辦公效率,從而做出正確的人力資源配置。本文首先概括介紹了Java技術,接著對Hibernate技術進行了較為詳細的研究,并嚴格按照軟件工程的流程和思想對系統(tǒng)做了詳盡的需求分析,設計并實現(xiàn)了一個基于Hibernate的工資管理系統(tǒng),最后對實現(xiàn)的系統(tǒng)的功能進行了功能測試。論文根據(jù)軟件工程方法從系統(tǒng)需求分析、數(shù)據(jù)庫設計、系統(tǒng)
4、設計、系統(tǒng)功能和代碼幾個方面來敘述工資管理軟件的開發(fā)過程。</p><p> 關鍵詞:Java;Hibernate;工資管理系統(tǒng);功能測試;</p><p> Salary management system development base on Hibernate</p><p> Abstract: Salary management in each o
5、rganization's role is increasingly prominent.Salary management includes staff management wage setting, wage changes, some part of the attendance management.This information is huge and complex.If they are managed by
6、salary management system software of computerized management,work efficiency of personnel manage department will be improved greatly and manpower resource will be arranged correctly.Firstly an overview of Java is introdu
7、ced, Secondly a more detail</p><p> Key words: Java;Hibernate;Salary management system;Functional test;</p><p><b> 目 錄</b></p><p><b> 1 緒論1</b></p>
8、;<p> 1.1課題研究背景及意義1</p><p> 1.2工資管理系統(tǒng)的可行性分析2</p><p> 1.2.1技術可行性3</p><p> 1.2.2管理可行性3</p><p> 1.2.3經(jīng)濟可行性3</p><p> 1.3國內(nèi)外研究現(xiàn)狀分析3</p>
9、<p> 1.4論文的實踐基礎4</p><p> 1.5本文主要工作4</p><p> 2 相關的技術和工具的簡介5</p><p> 2.1 關系映射簡介5</p><p> 2.2.1 ORM模式5</p><p> 2.2.2 ORM實現(xiàn)原理5</p>
10、<p> 2.2 Hibernate簡介6</p><p> 2.3 Hibernate原理6</p><p> 2.4 系統(tǒng)開發(fā)工具簡介7</p><p> 2.4.1 tomcat簡介7</p><p> 2.4.2 Eclipse簡介7</p><p> 2.5數(shù)據(jù)庫簡介8&
11、lt;/p><p> 2.5.1數(shù)據(jù)的規(guī)范化8</p><p> 2.5.2數(shù)據(jù)庫的完整性設計9</p><p> 3 系統(tǒng)功能概況和核心代碼12</p><p> 3.1 系統(tǒng)的主要功能12</p><p> 3.1.1 登陸模塊13</p><p> 3.1.2人事管理模塊
12、16</p><p> 3.1.3工資管理模塊20</p><p> 3.2 編寫Hibernate的配置文件24</p><p> 3.4 實體類和映射文件24</p><p> 3.5 針對非功能性需求的解決方案26</p><p><b> 3.6 小結26</b>&l
13、t;/p><p> 4 數(shù)據(jù)庫設計錯誤!未定義書簽。</p><p> 4.1數(shù)據(jù)庫的概念設計錯誤!未定義書簽。</p><p> 4.2工資管理系統(tǒng)數(shù)據(jù)庫表概覽錯誤!未定義書簽。</p><p> 開發(fā)總結及心得體會錯誤!未定義書簽。</p><p><b> 參考文獻27</b>
14、;</p><p> 致謝錯誤!未定義書簽。</p><p><b> 1 緒論</b></p><p> 1.1課題研究背景及意義</p><p> 市場經(jīng)濟條件下,技術的競爭、市場的競爭、服務的競爭歸根結底還是人才的競爭。當今社會,在“以人為本”觀念的熏陶下,人事管理在各個單位中的作用日益突出,而工資管理又
15、是人事管理的一個最重要的模塊。工資管理是一個單位日常工作中不可或缺的重要部分,它對于本單位的決策者和管理者來說都至關重要。飛速發(fā)展的技術變革和創(chuàng)新,以及新競爭環(huán)境的出現(xiàn),使得越來越多的單位通過構筑自身的人事競爭力來維持生存并促進持續(xù)發(fā)展。而人員的復雜性卻使得工資管理成為難題[1]。</p><p> 工資信息的一大顯著特點就是數(shù)據(jù)量大、關系復雜。用傳統(tǒng)人工的方式管理文件檔案,效率低、保密性差,查找、更新、維護也
16、特別困難。以往的財務工作者由于缺乏適當?shù)能浖o其工作帶來了諸多不便。隨著科學技術的不斷發(fā)展和計算機科學的日益成熟,人事工作者急切希望能夠?qū)⒐べY管理中大部分繁瑣的工作交給計算機處理,從而減輕人工的壓力并提高工作效率。工資管理系統(tǒng)應運而生,而計算機的普及更加快了工資管理系統(tǒng)的產(chǎn)生技術的不斷發(fā)展。</p><p> 工資管理系統(tǒng)是一個典型的信息管理系統(tǒng)(MIS),本課題來源于某事業(yè)單位對工資檔案管理的個性化需求,開發(fā)
17、此系統(tǒng)的目的是為了提高該單位的工資管理效率,實現(xiàn)工資管理的自動化和信息化。工資管理系統(tǒng)使用計算機對人事檔案信息進行管理,檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低廉等優(yōu)點是手工管理所無法比擬的。工資管理系統(tǒng)功能全面、操作簡便,能夠快速地為員工建立電子檔案,而且便于修改、保存和查詢,實現(xiàn)了無紙化存檔,能夠為使用者節(jié)省大量資金和空間。工資管理系統(tǒng)利用計算機進行信息控制和數(shù)據(jù)處理,不僅提高了工作效率,而且還大大的提高了其
18、安全性[1]。</p><p> 在工資管理系統(tǒng)的開發(fā)過程中,項目涉及到的用戶和數(shù)據(jù)較多,因此用到的表也較多且與表之間還存在著復雜的映射關系,若采用傳統(tǒng)的JDBC(JavaDataBaseConneetivityStandard),要編寫的代碼將會相當復雜,日后的維護量也將會直線上升,而且不利于調(diào)試,也很難實現(xiàn)代碼的復用。于是這就需要有一種更方便、更通用的方案來解決需求的變動所帶來的代碼重用和產(chǎn)品維護問題,也需
19、要一種更方便的實現(xiàn)數(shù)據(jù)持久層的框架以及實現(xiàn)這種框架需要的工具。而當前比較流行的Hibernate數(shù)據(jù)持久層框架可以很好的滿足這種要求[2]。</p><p> Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝。有了它,Java程序員便可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。同時,Hibernate是一個功能強大、高性能、相當流行的對象關系 映射工具,它推動了基于普
20、通Java對象模型、用于映射底層數(shù)據(jù)結構的持久對象的開發(fā),且能夠提供高級數(shù)據(jù)查詢和檢索服</p><p><b> 務[2]。</b></p><p> Hibernate框架完全基于對象關系模型,使開發(fā)者在開發(fā)過程中省去了很多繁瑣的工作,可以將精力集中到業(yè)務問題的實現(xiàn)上。不論開發(fā)者使用何種應用開發(fā)策略(自項向下,從域模型開始或者自底向上,從一個現(xiàn)有的數(shù)據(jù)庫模式開
21、始),使用Hibernate和適當?shù)墓ぞ邔p少大量的開發(fā)時間[4]。</p><p> 在手工編碼的持久性系統(tǒng)中,關系表示和對象模型之間存在一種不可避免的緊張。改變一個幾乎總是包含改變其它的,并且一種表示設計經(jīng)常需要妥協(xié)來適應其它的存在?;贖ibernate的代碼編寫相對較少,這使得對系統(tǒng)操作的理解更容易。在有時間限制的項目中,手工編碼的持久層通常只允許開發(fā)者利用一點時間做一些優(yōu)化,而Hibernate允許
22、開發(fā)者在全部的時間內(nèi)做更多的優(yōu)化。因此,使用Hibernate開發(fā)者可以花更多的時間手工優(yōu)化一些其余的瓶頸。</p><p> 此外,Hibernate還具有以下優(yōu)點:1.Hibernate使用Java反射機制而不是字節(jié)碼增強程序來實現(xiàn)透明性;2.Hibernate是個輕量級框架,因此它的性能非常好,映射的靈活性也很出色;3.它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。</p><
23、p> 基于Hibernate的這些優(yōu)點和該單位要求開發(fā)時間盡量短以盡早使用該系統(tǒng)的需求,筆者著手開發(fā)基于Hibernate的實用型人事檔案管理系統(tǒng)。開發(fā)這樣一個工資管理系統(tǒng)具有很強的現(xiàn)實意義:</p><p> 1.大幅度提高工作效率和工作質(zhì)量,使該單位的人事管理者從繁重瑣碎的人事管理工作中解脫出來</p><p> 2.通過計算機對數(shù)據(jù)庫進行管理代替手工統(tǒng)計工作,將在很大程度
24、上減少數(shù)據(jù)統(tǒng)計的工作量,并且能使數(shù)據(jù)統(tǒng)計過程中的錯漏減少到最低程度。</p><p> 3.大大節(jié)約工資管理方面的成本,從而使該單位獲得更好的社會效益和經(jīng)濟效益。</p><p> 4.使該單位的工資管理工作更加規(guī)范、高效,在一定程度上加快了該單位的管理信息化進程。</p><p> 1.2工資管理系統(tǒng)的可行性分析</p><p>
25、工資管理系統(tǒng)使得職工工資檔案查詢、調(diào)用的速度加快,同時也使得精確分析大量員工的工資、出勤、信息成為可能,從而實現(xiàn)工資管理的標準化、科學化、信息化。因此建立工資管理系統(tǒng),使工資管理自動化,提高信息處理的速度和準確性十分必要。</p><p> 以下幾個方面的調(diào)查分析可知開發(fā)此工資管理系統(tǒng)的各種條件已經(jīng)具備,開發(fā)此工資管理系統(tǒng)必要且可行。</p><p> 1.2.1技術可行性</p
26、><p> 該人事管理系統(tǒng)雖然在組織關系上存在著較大的復雜性、繁瑣性,但是從整個系統(tǒng)的技術構成上來看,它屬于一個基于數(shù)據(jù)庫應用的系統(tǒng),其基本操作是對己存在的數(shù)據(jù)庫信息進行添加、刪除、查找、編輯等。使用此系統(tǒng)的事業(yè)單位屬于小型事業(yè)單位,總?cè)藬?shù)才50多人,若對全部員工的人事信息建立數(shù)據(jù)庫的話,規(guī)模算不上龐大,且開發(fā)此工資管理系統(tǒng)得到了人事處領導的大力支持和重視,對新系統(tǒng)的開發(fā)提供了大量完整的正確的原始檔案數(shù)據(jù),因此,就
27、單純的數(shù)據(jù)庫應用來看,不存在太大的技術問題。而Hibernate是Java開源項目,擁有豐富的參考文檔與實例。因此,Hibernate相關技術的獲取和應用也不存在太大的問題。</p><p> 1.2.2管理可行性</p><p> 項目組在系統(tǒng)開發(fā)時充分注意了可操作性和易用性,現(xiàn)有員工通過簡單培訓或閱讀操作手冊完全能掌握系統(tǒng)并能方便地使用系統(tǒng)。隨著時代的發(fā)展和計算機的普及,該單位人員
28、的素質(zhì)己逐步提高,不管是對于電腦系統(tǒng)的基本操作還是對于系統(tǒng)的維護都有了一定的基礎。同時該單位還可以配置專業(yè)的電腦維護人員來維護電腦,不必擔心電腦故障問題。</p><p> 1.2.3經(jīng)濟可行性</p><p> 該單位財務處、人事處用于此工資管理系統(tǒng)開發(fā)的預算完全可滿足設備投入和人力投入,系統(tǒng)投入使用后將會極大地提高管理者的工作效率和工作質(zhì)量,大大節(jié)約該單位工資管理的成本,從而將獲得
29、很好的社會效益和經(jīng)濟效益。</p><p> 1.3國內(nèi)外研究現(xiàn)狀分析</p><p> 工資管理系統(tǒng)此前已有許多解決方案,所用技術也是越來越先進。較早的工資管理系統(tǒng)主要采用Foxbase、FoxPro、VB等數(shù)據(jù)庫開發(fā)工具,系統(tǒng)開發(fā)環(huán)境也是數(shù)據(jù)庫內(nèi)置的開發(fā)工具。其特點是單機單用戶方式,開發(fā)簡單,能充分利用數(shù)據(jù)庫的特性。其缺點是:開發(fā)出的系統(tǒng)依賴性很強,運行必須依托數(shù)據(jù)庫環(huán)境;不容易升
30、級與擴展;無法實現(xiàn)數(shù)據(jù)的共享與并行操作;代碼重用性差。而后出現(xiàn)了基于傳統(tǒng)的C/S模式下采用面向?qū)ο蟮拈_發(fā)工具開發(fā)的一系列工資管理軟件。采用可視化的面向?qū)ο蟮拈_發(fā)工具PowerBuilder7.0進行系統(tǒng)程序設計;缺點是客戶端由于擔當了過多的角色而顯得臃腫和服務器端負擔過重,而且系統(tǒng)的安裝和部署也比較麻煩,難于升級或改進,不具有很強的可伸展性。隨著Internet技術、面向?qū)ο蠹夹g和分布式計算相互融合,傳統(tǒng)的C/S兩層體系結構已經(jīng)不能適應
31、當今大型應用系統(tǒng)的發(fā)展要求,因此,多層分布式體系結構應運而生,這些系統(tǒng)一般是采用B/S(Browser/Server)結構來開發(fā)。值得注意的是,以上所提到的B/S結構的工資管理系統(tǒng)的研究都是適用于大型應用系統(tǒng),其開發(fā)成本之高和開發(fā)周期之長是小型單位所不能忍受的,</p><p> 1.4論文的實踐基礎</p><p> 本論文是結合某事業(yè)單位的工資管理系統(tǒng)項目的開發(fā)設計而進行的,作者本
32、人從項目的開始階段就參與了進來,在開發(fā)的過程中不斷學習和實踐,經(jīng)過了將近一年的磨練,對筆者負責的需求、設計、測試階段都積累了一定的經(jīng)驗,:并對后面的設計開發(fā)以及論文的撰寫創(chuàng)造了有利條件。</p><p><b> 1.5本文主要工作</b></p><p> 為某事業(yè)單位開發(fā)的工資管理系統(tǒng)采用了安全性較高的C/S架構,系統(tǒng)前臺采用了html技術實現(xiàn)用戶界面,后臺數(shù)
33、據(jù)庫采用了MYSQL,對于數(shù)據(jù)持久化操作采用了Hibernate框架技術。我所做的工作是首先對html技術做了簡要介紹,主要分析了html的優(yōu)點和選用Swing開發(fā)工資管理系統(tǒng)的原因,接著對在ORM(Object-Relation Mapping)思想指導下的ORM框架Hibernate進行了較為細致的研究,并嚴格按照軟件工程的流程和思想對系統(tǒng)部分功能做了詳盡的需求分析和設計,最后對實現(xiàn)的系統(tǒng)的部分功能進行了功能測試以驗證功能是否實現(xiàn)以
34、及是否能夠滿足實際需要。我的工作重點是用html和Hibernate兩個主流工具實現(xiàn)工資管理系統(tǒng)的設計。</p><p> 2 相關的技術和工具的簡介</p><p> 2.1 關系映射簡介</p><p> 對象關系映射ORM(Object-Relation Mapping)是為了解決面向?qū)ο蟮拈_發(fā)與關系型數(shù)據(jù)庫的數(shù)據(jù)訪問之間的沖突而提出來的[15]。本章主
35、要闡述了ORM技術,并對在ORM思想指導下的ORM框架Hibernate 進行了較為細致的研究。</p><p> 2.2.1 ORM模式</p><p> 在研究對象關系映射的模式時,通常采用如下的對應關系將對象與數(shù)據(jù)表進行關聯(lián):</p><p><b> 屬性一一列</b></p><p><b>
36、 類/實例一一表/行</b></p><p><b> 關系一一外鍵</b></p><p> 根據(jù)抽象對象與關系數(shù)據(jù)庫的特性,在以下幾個方面實現(xiàn):</p><p> (1)從類屬性到數(shù)據(jù)表列的映射。類屬性和表列并非一一對應。一個類屬性可對多個實體表的字段。所以,在設置主鍵時,一般會采用無業(yè)務意義的字段對象標識符作為各個實體
37、表的主鍵,也作為類與數(shù)據(jù)庫映射時的對象的惟一標識。</p><p> (2)從類到數(shù)據(jù)表的映射。當不同層次的父類和子類映射到數(shù)據(jù)表時,應該根據(jù)實際的系統(tǒng)設計結果,權衡采用怎樣的映射策略。這種映射主要是指繼承映射,可以采用的映射策略主要分為以下3種:1個類繼承樹1個表、1個具體類1個表和l類l表。</p><p> (3)類間關系映射為鍵值。這是映射的難點。主要是體現(xiàn)類關系中的關聯(lián)和聚集
38、。</p><p> 2.2.2 ORM實現(xiàn)原理</p><p> ?。?)ORM具體實現(xiàn)方式</p><p> ORM的實現(xiàn)技術一般有兩種:一是利用反射機制,在運行時自動產(chǎn)生SQL語句,執(zhí)行ORM的操作。二是通過ORM工具,生成代碼,把其代碼加到項目中。這種方法缺點是生成了大量的代碼,不便于修改和閱讀。</p><p> (2) 關
39、聯(lián)表的處理</p><p> 對于有外鍵關系的表,對應的實體層就是有參照關系的類,這是0RM實現(xiàn)的一個難點。</p><p> ?。?) 唯一標識的處理</p><p> 數(shù)據(jù)表中的一個主鍵,唯一標識一條數(shù)據(jù)記錄。那么,在對應的實體類中,就使用這個主鍵作為判斷兩個類是否相等的唯一標識。主鍵的選擇一般用沒有含義的主鍵。</p><p>
40、(4)SQL語句的生成</p><p> ORM的結果就是把類的操作最后轉(zhuǎn)變成Insert,Update,Delete,Select等語句進行數(shù)據(jù)庫操作。因此開發(fā)ORM工具時需要有一個生成SQL語句的方法。有了這個方法以后,就可以節(jié)省下寫SQL的時間了。</p><p> 2.2 Hibernate簡介</p><p> Hibernate是一種Java語言
41、下的對象/關系映射解決方案。它是使用GNU寬通用公共許可證發(fā)行的自由、開源的軟件。它為面向?qū)ο蟮念I域模型到傳統(tǒng)的關系型數(shù)據(jù)庫的映射,提供了一個使用方便的框架。它的設計目標是將軟件開發(fā)人員從大量相同的數(shù)據(jù)持久層相關編程工作中解放出來。</p><p> Hibernate不僅負責從Java類到數(shù)據(jù)庫表的映射(包括從Java數(shù)據(jù)類型到SOL數(shù)據(jù)類型的映射),還提供了面向?qū)ο蟮臄?shù)據(jù)查詢檢索機制,從而極大地縮短了手動處
42、理SOL和JDBC上的開發(fā)時間。另外,Hibernate可以利用代理模式來簡化載入類的過程,這將大大減少利用HQL(Hibernate Query Language)從數(shù)據(jù)庫提取數(shù)據(jù)的代碼編寫量,從而節(jié)約開發(fā)時間和開發(fā)成本。通過使Hibernate開發(fā)者可以輕松解決在使用傳統(tǒng)的CMP以及JDBC和DAO(DataAccessObject)技術開發(fā)持久層時遇到的困難,使生產(chǎn)力得到極大的提升。</p><p> 選
43、擇Hibernate的原因及其應用優(yōu)勢:</p><p> Hibernate是Java開源項目,其底層代碼對用戶開放,這樣用戶可以在需要的時候修改其源代碼,對其進行功能的定制或者拓展,并且擁有豐富的參考文檔與實例。</p><p> Hibernate具有一支活躍的社區(qū)開發(fā)隊伍,這使其長期發(fā)展有了穩(wěn)定的保證。</p><p> Hibernate使用方便,既
44、適用于桌面程序開發(fā),也可以引入到企業(yè)級應用開發(fā)中。</p><p> 由于Hibernate對JDBC進行了輕量級的對象封裝,如果有需要,用戶可Hibernate,直接訪問JDBC API。Hibernate的Transaction實際上就是底層的JDBC Transaction的封裝,這樣大大簡化了數(shù)據(jù)持久層的開發(fā)與調(diào)試,減輕了程序員的負擔。</p><p><b> 具有
45、可擴展性。</b></p><p> 使用方便,容易上手。</p><p> Hibernate可以和多種Web服務器、應用服務器良好集成,并且支持幾乎所有流行的數(shù)據(jù)庫服務器。</p><p> 2.3 Hibernate原理</p><p> Hibernate技術本質(zhì)上是一個提供數(shù)據(jù)庫服務的中間件。圖3-i顯示了Hi
46、bernate的工作原理。Hibernate在構建Java應用中的作用是:應用程序通過Hibernate對數(shù)據(jù)庫進行訪問,對持久層操作,而Hibernate自身通過properties配置文件和XMLMapping映射文件將類型映射到數(shù)據(jù)庫的記錄。從而Application應用可以通過起著應用與數(shù)據(jù)庫之間的橋梁作用的持久化對象直接訪問數(shù)據(jù)庫,而不是必須使用JDBC和SOL進行數(shù)據(jù)的操作。</p><p> Hi
47、bernate具有很大的靈活性,提供了好幾種不同的運行方式。在輕型體系中,應用程序提供JDBC連接,并且自行管理事務,這種方式使用了Hibernate的一個最小子集;在全面解決體系中,對于應用程序來說,所有底層的JDBC/JTAAPI都被抽象了,Hibernate會照管所有的細節(jié)。</p><p> 2.4 系統(tǒng)開發(fā)工具簡介</p><p> 2.4.1 tomcat簡介</p&
48、gt;<p> 自從JSP發(fā)布之后,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發(fā)以后,開始考慮在SUN的JSWDK基礎上開發(fā)一個可以直接提供Web服務的JSP服務器,當然同時也支持Servlet, 這樣Tomcat就誕生了。Tomcat是jakarta項目中的一個重要的子項目,其被JavaWorld雜志的編輯選為2001年度最具創(chuàng)新的java產(chǎn)品,同時它又是sun公司官方推薦的ser
49、vlet和jsp容器,因此其越來越多的受到軟件公司和開發(fā)人員的喜愛。servlet和jsp的最新規(guī)范都可以在tomcat的新版本中得到實現(xiàn)。其次,Tomcat是完全免費的軟件,任何人都可以從互聯(lián)網(wǎng)上自由地下載。</p><p> 2.4.2 Eclipse簡介</p><p> Eclipse 是一個開放源代碼的、基于 Java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務
50、,用于通過插件組件構建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。 Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發(fā)人員,因為它允許他們構建與 Eclipse 環(huán)境無縫集成的工具。</p><p> E
51、clipse 最初由OTI和IBM兩家公司的IDE產(chǎn)品開發(fā)組創(chuàng)建,起始于1999年4月。IBM提供了最初的Eclipse代碼基礎,包括Platform、JDT 和PDE。目前由IBM牽頭,圍繞著Eclipse項目已經(jīng)發(fā)展成為了一個龐大的Eclipse聯(lián)盟,有150多家軟件公司參與到Eclipse項目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一個開發(fā)源碼項目,它其實是
52、Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其開放源碼,任何人都可以免費得到,并可以在此基礎上開發(fā)各自的插件,因此越來越受人們關注。近期還有包括Oracle在內(nèi)的許多大公司也紛紛加入了該項目,并宣稱Eclipse將來能成為可進行任何語言開發(fā)的IDE集大成者,使用者只需下載各種語言的插件即可。</p><p> Eclipse是著名的跨平臺的自
53、由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),但是目前亦有人通過插件使其作為其他計算機語言比如C++和Python的開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。</p><p><b> 2.5數(shù)據(jù)庫簡介</b></p>&
54、lt;p> 在開發(fā)工資管理系統(tǒng)時,對數(shù)據(jù)庫的操作肯定是必不可少的,而數(shù)據(jù)庫的設計優(yōu)秀與否,將會直接影響到軟件的開發(fā)進度和性能,對數(shù)據(jù)庫的設計于是就顯得非常重要和關鍵。數(shù)據(jù)庫的設計應當根據(jù)程序的需求及其功能制定,如果在開發(fā)軟件之前不能很好地設計數(shù)據(jù)庫的話,會導致在開發(fā)過程中反復修改數(shù)據(jù)庫,到時勢必嚴重影響開發(fā)進度[14]。</p><p> 在服務器端,筆者采用了MYSQL。</p><
55、;p> MySQL是一個真正的多用戶、多線程SQL數(shù)據(jù)可服務器。SQL是世界上最流行的和標準化的數(shù)據(jù)庫語言。MySQL是以一個客戶機/服務器結構實現(xiàn)的,是有一個服務器守護程序mysqld和很多不同的客戶程序和庫組成的。</p><p> SQL是一種標準化語言,它使得存儲、更新和存取信息更容易。如果您想用SQL語言為一個網(wǎng)站檢索產(chǎn)品信息及存儲顧客信息,那么,MySQL能夠以足夠快的速度和靈活來允許您存儲
56、紀錄文件和圖像。</p><p> 盡管MySQL還在不斷的開發(fā)中,但它已經(jīng)提供了一個豐富的和極其有用的功能集。</p><p> 2.5.1數(shù)據(jù)的規(guī)范化</p><p> 之所以對數(shù)據(jù)庫進行規(guī)范化是為了防止數(shù)據(jù)冗余,如果冗余數(shù)據(jù)較多的話,極易導致在處理插入、刪除和更新數(shù)據(jù)操作時的異常,這是因為一個值可能存儲在多個位置上,這樣就會增加數(shù)據(jù)更改時發(fā)生異常的概率。
57、還有,由于需要較多的語句維護多個位置的相同值,特別是在一個表中存儲大量相同且重復的信息的時候,很有可能會造成系統(tǒng)性能的下降。因此我們需要數(shù)據(jù)庫設計的三大范式來達到規(guī)范化的目的[14]:</p><p> 第一范式(1NF):第一范式規(guī)定當且僅當表中所有的字段不可分割時,才會符合第一范式。例如一個電子商務的程序,如果在“商品名”字段中同時包含產(chǎn)地信息,則認為此字段違反了原子性的要求,解決的方式是將產(chǎn)地分離到一個單
58、獨的字段中。</p><p> 第二范式(2NF):第二范式在符合第一范式的基礎上,規(guī)定每一個非主鍵字段都可用主鍵表示,但不強制只使用主鍵表示,第二范式允許字段的傳遞依賴,這種情況下,一個字段可被多個其他字段標識。</p><p> 第三范式(3NF):第三范式是在符合第二范式的基礎上,規(guī)定每一個非主鍵字段有且只有主鍵可唯一標識時,才符合第三范式。通常擁有多個組合鍵的表會不符合第三范式
59、。在設計表結構時,最好應符合第三范式,但若一個表在符合第三范式的基礎上有較多的表鏈接時,比如超過4個表鏈接時很有可能會影響到性能,這時我們就可以考慮保持較少的冗余數(shù)據(jù)。進行數(shù)據(jù)庫設計時,我們應當在規(guī)范化和性能之間尋求一個最佳平衡點。</p><p> 2.5.2數(shù)據(jù)庫的完整性設計</p><p> 良好的數(shù)據(jù)庫設計是數(shù)據(jù)庫應用程序成功的基礎,在數(shù)據(jù)庫服務器上實現(xiàn)數(shù)據(jù)完整性,有利于數(shù)據(jù)維
60、護和更新。MYSQL提供了如下機制來保證數(shù)據(jù)的完整性[14]:</p><p> 參照完整性:關系數(shù)據(jù)庫的參照完整性是指每個表的每一行都能夠被唯一地標識。SQL Server通過主鍵(Primary Key)來確保這種唯一性。一個表只允許擁有一個主鍵,在定義一個表時,可指定某個列或某些列的組合作為主鍵,通常定義一個具有唯一性的編號作為主鍵。MYSQL通過外鍵(Foreign Key)約束實現(xiàn)表之間的邏輯關系。&
61、lt;/p><p> 默認值:默認值是指插入數(shù)值時在用戶沒有提供明確數(shù)值時,由數(shù)據(jù)庫插入的預先指定的值。</p><p> 約束和規(guī)則:約束和規(guī)則用于檢查某列的值是否在某一特定范圍內(nèi),或匹配特定的條件等。其中約束最為靈活,在定義列時,可以很方便地定義約束,并且可以針對多個列定義。在約束中,可以使用系統(tǒng)函數(shù)返回的值,并且可參照表中其他的列值。當在列中保存值時,SQL Server參照為此列建
62、立的所有約束和規(guī)則,只有符合所有約束的值才會被正常保存。</p><p> 觸發(fā)器:觸發(fā)器與約束類似。當觸發(fā)器與某些列關聯(lián)時,每當更改數(shù)據(jù),MYSQL將會自動執(zhí)行觸發(fā)器。觸發(fā)器可以說是一種特殊的存儲過程,觸發(fā)器中可使用Transact.SQL包含的函數(shù)和語句對數(shù)據(jù)進行精確限制。</p><p> 事務處理:事務處理可以把多個SQL命令作為一個處理單元看待,發(fā)出COMMIT命令后,所有更
63、新才會被應用。而當出現(xiàn)錯誤時,所有的操作將會回滾,這樣可保證數(shù)據(jù)庫的一致性和可恢復性。在一個事務中,所有的操作要么執(zhí)行,要么全部終止。</p><p><b> 3 數(shù)據(jù)庫設計</b></p><p> 3.1數(shù)據(jù)庫的概念設計</p><p> 在開發(fā)工資管理系統(tǒng)時,對數(shù)據(jù)庫的操作肯定是必不可少的,而數(shù)據(jù)庫的設計優(yōu)秀與否,將會直接影響到軟
64、件的開發(fā)進度和性能,對數(shù)據(jù)庫的設計于是就顯得非常重要和關鍵。數(shù)據(jù)庫的設計應當根據(jù)程序的需求及其功能制定,如果在開發(fā)軟件之前不能很好地設計數(shù)據(jù)庫的話,會導致在開發(fā)過程中反復修改數(shù)據(jù)庫,到時勢必嚴重影響開發(fā)進度。</p><p> 數(shù)據(jù)庫設計是通過系統(tǒng)的整體需求而制定的,工資管理系統(tǒng)的需求主要包括對人事檔案的管理和對人事考勤的管理,考勤和績效的信息將體現(xiàn)到待遇統(tǒng)計中。</p><p> 以
65、下為系統(tǒng)主要信息表的E-R圖:</p><p> 圖1 工資管理E-R圖</p><p> 圖2 員工管理E-R 圖</p><p> 3.2工資管理系統(tǒng)數(shù)據(jù)庫表概覽</p><p> 由于數(shù)據(jù)庫表很多,筆者只列出以下主要數(shù)據(jù)庫表:</p><p> 表1 jiaban 加班信息表:</p>
66、;<p> 表2 kqinfo考勤管理表:</p><p> 4 系統(tǒng)功能概況和核心代碼</p><p> 4.1 系統(tǒng)的主要功能 </p><p> 工資管理系統(tǒng),是為了滿足單位或企業(yè)在工資管理工作上的具體需求而設計開發(fā)的管理信息系統(tǒng),主要目的是為了方便其在工資發(fā)放和工資管理上的工作任務,實現(xiàn)工資管理的標準化、科學化、信息化。</p&
67、gt;<p> 在出現(xiàn)工資管理系統(tǒng)之前,財務管理人員一般都是通過人工管理檔案的方式來完成工資管理和發(fā)放,這種原始方式不但費時又費力而且效率低、保密性差,對員工信息進行查找、更新、維護比較困難。工資管理系統(tǒng)出現(xiàn)后,使用計算機對職工檔案信息進行管理使得工資查詢、調(diào)用的速度加快,也使得精確分析大量員工的工資情況、工作時間、出勤情況等成為可能。因此,工資管理系統(tǒng)在當今社會得到了廣泛的應用。</p><p>
68、; 企業(yè)工資管理系統(tǒng)的主要任務是用計算機對各種工資信息進行日常的管理,如查詢、修改、增加、刪除以及存儲等,迅速準確地完成各種工資信息的統(tǒng)計計算和匯總工作,快速打印出工資報表,針對系統(tǒng)服務對象的具體要求,設計了企業(yè)工資管理系統(tǒng)。企業(yè)工資管理系統(tǒng)主要有以下幾大功能:</p><p> ?。?)對單位人員的變動進行處理。一個單位的職工不會是一成不變的,總是在不斷的變化:有調(diào)出、有調(diào)入、也有職工在本單位內(nèi)部調(diào)動。因此,
69、設計系統(tǒng)是應考慮到這些情況。</p><p> ?。?)對職工的工資進行計算、修改??梢詫β毠さ墓べY檔案進行個別、部分和批量修改,同時,能對各職工的工資進行計算,即計算應發(fā)金額、應扣金額及實發(fā)金額等。</p><p> ?。?)查詢統(tǒng)計功能。要求即可以單項查詢,比如查看某個職工的工資情況等;也可以多項查詢,比如某部門工資數(shù)在某一范圍的職工的工資情況等。</p><p&g
70、t; (4)對員工的出勤情況進行統(tǒng)計,查詢。出勤情況包括加班和缺勤信息等。</p><p> 通過對這兩類用戶的功能需求分析、角色分析,形成了系統(tǒng)的功能設計。系統(tǒng)需要擁有的功能有:管理登陸、工資管理、考勤管理、工資匯總。系統(tǒng)功能結構圖如下圖:</p><p><b> 圖 3 功能結構</b></p><p> 4.1.1 登陸模塊&l
71、t;/p><p> ◆用戶通過登錄窗體輸入用戶名和密碼,為了系統(tǒng)的安全性,不允許用戶名和密碼為空。</p><p> ◆驗證用戶名和密碼是否正確。</p><p> ◆用戶在登錄后被分配了相應權限許可范圍。</p><p> ◆用戶可以選擇管理員的部門。</p><p><b> 登陸界面截圖:<
72、/b></p><p><b> 圖 4 登陸界面</b></p><p> 登陸模塊的核心代碼:</p><p> public ActionForward login(ActionMapping mapping, ActionForm form,</p><p> HttpServletRequest
73、request, HttpServletResponse response) {</p><p> AdminForm adminForm = (AdminForm) form;</p><p> String checkcode=adminForm.getAdmincheckcode();</p><p> String ccheck=(String)req
74、uest.getSession().getAttribute("ccode");</p><p> if(ccheck.equals(checkcode)){</p><p> String adminname=adminForm.getAdminname();</p><p> String adminpwd=adminForm.getA
75、dminpwd();</p><p> int status=adminForm.getStatus();</p><p> boolean flag=false;</p><p><b> try {</b></p><p> flag=DAOFactory.getGongziDAO().queryadmin(
76、adminname, adminpwd,status);</p><p> if(flag==true&&status==1){</p><p> request.getSession().setAttribute("status", status);</p><p> return mapping.findForward(
77、"loginrenshisuccess");</p><p><b> }</b></p><p> if(flag==true&&status==2){</p><p> request.getSession().setAttribute("status", status)
78、;</p><p> return mapping.findForward("logincaiwusuccess");</p><p><b> }</b></p><p> if(flag==true&&status==3){</p><p> request.get
79、Session().setAttribute("status", status);</p><p> return mapping.findForward("loginweihusuccess");</p><p><b> } </b></p><p><b> else{</
80、b></p><p> ActionMessages errors= new ActionMessages();</p><p> errors.add("adminnameoradminpwd",new ActionMessage("adminnameoradminpwd.error"));</p><p> s
81、uper.saveErrors(request, errors);</p><p> return mapping.findForward("loginfailure");</p><p><b> }</b></p><p> }catch (Exception e) {</p><p>
82、// TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> return mapping.getInputForward();</p><p><b> }</b></p><p><b> }else{</b
83、></p><p> ActionMessages errors= new ActionMessages();</p><p> errors.add("ckeckcode",new ActionMessage("ckeckcode.error"));</p><p> super.saveErrors(reque
84、st, errors);</p><p> return mapping.findForward("loginfailure");</p><p><b> }</b></p><p><b> }</b></p><p> public ActionForward lo
85、gout(ActionMapping mapping, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response) {</p><p> request.getSession().removeAttribute("adminname");</p>
86、<p> return mapping.findForward("logoutdo");</p><p><b> }</b></p><p> 4.1.2人事管理模塊</p><p> ◆人事管理員可以登陸人事管理模塊對員工的基本信息進行添加、修改等操作。</p><p>
87、 ◆管理員可以在人事管理模塊中可以對員工的出勤情況進行操作。</p><p><b> 人事管理界面:</b></p><p> 圖5 人事管理首頁</p><p><b> 圖6 員工添加</b></p><p><b> 圖 7 考勤添加</b></p&
88、gt;<p> 人事管理模塊的部分代碼:</p><p> public ActionForward insert(ActionMapping mapping, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response) {</p><p>
89、; KqForm kqForm = (KqForm) form;</p><p> Kqinfo kqinfo=new Kqinfo();</p><p> kqinfo.setQqkcje(5);</p><p> kqinfo.setYgid(Integer.parseInt(kqForm.getYgid()));</p><p>
90、; kqinfo.setYgname(kqForm.getYgname());</p><p> kqinfo.setYear(Integer.parseInt(kqForm.getYear()));</p><p> kqinfo.setKqmonth(Integer.parseInt(kqForm.getKqmonth()));</p><p> kqi
91、nfo.setQqts(Integer.parseInt(kqForm.getQqts()));</p><p> kqinfo.setKqzkouchu(Integer.parseInt(kqForm.getQqts())*5);</p><p> kqinfo.setQqkcje(5);</p><p><b> try {</b>&
92、lt;/p><p> DAOFactory.getKqDAO().insert(kqinfo);</p><p> return mapping.findForward("success");</p><p> } catch (Exception e) {</p><p> e.printStackTrace();&
93、lt;/p><p> return mapping.getInputForward();</p><p><b> }</b></p><p><b> }</b></p><p> public ActionForward queryallkqByname(ActionMapping mapp
94、ing, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response) {</p><p> List all = null;</p><p> int currentpage = 1;</p><p> int linesize
95、 = 4;</p><p> int allRecorders = 0;</p><p><b> try {</b></p><p> int ygid=Integer.parseInt(request.getParameter("ygid"));</p><p> if (!(reques
96、t.getParameter("cp") == null || "".equals(request</p><p> .getParameter("cp")))) {</p><p> currentpage = Integer.parseInt(request.getParameter("cp"));&l
97、t;/p><p><b> }</b></p><p> allRecorders = DAOFactory.getKqDAO().queryCountByname(ygid);</p><p> all = DAOFactory.getKqDAO().queryByname(ygid, currentpage, linesize);<
98、/p><p> Kqinfo kqinfo = new Kqinfo();</p><p> for(int i=0;i<all.size();i++){</p><p> kqinfo=(Kqinfo)all.get(0);</p><p> System.out.print(kqinfo.getYgname());</p&
99、gt;<p><b> }</b></p><p> request.setAttribute("currentPage", new Integer(currentpage));</p><p> request.setAttribute("lineSize", new Integer(linesize));
100、</p><p> request.setAttribute("allRecorders", new Integer(allRecorders));</p><p> if(all.size()>0){</p><p> request.setAttribute("all", all);</p>&l
101、t;p><b> }else{</b></p><p> request.setAttribute("flag", "flag");</p><p> request.setAttribute("currentPage", 0);</p><p><b> }&
102、lt;/b></p><p> request.setAttribute("jspUrl", "kq.do");</p><p> request.setAttribute("method", "queryallkqByname");</p><p> request.set
103、Attribute("flagname", "ygid");</p><p> request.setAttribute("flagvalue", ygid);</p><p> return mapping.findForward("querybynamedo");</p><p>
104、; } catch (NumberFormatException e) {</p><p> e.printStackTrace();</p><p> return mapping.getInputForward();</p><p> } catch (Exception e) {</p><p> e.printStackTr
105、ace();</p><p> return mapping.getInputForward();</p><p><b> }</b></p><p><b> }</b></p><p> public ActionForward queryallkq(ActionMapping map
106、ping, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response) {</p><p> List all = null;</p><p> int currentpage = 1;</p><p> int linesiz
107、e = 4;</p><p> int allRecorders = 0;</p><p><b> try {</b></p><p> if (!(request.getParameter("cp") == null || "".equals(request</p><p&g
108、t; .getParameter("cp")))) {</p><p> currentpage = Integer.parseInt(request.getParameter("cp"));</p><p><b> }</b></p><p> allRecorders = DAOFactor
109、y.getKqDAO().queryallCount();</p><p> all = DAOFactory.getKqDAO().queryall(currentpage, linesize);</p><p> request.setAttribute("currentPage", new Integer(currentpage));</p>&
110、lt;p> request.setAttribute("lineSize", new Integer(linesize));</p><p> request.setAttribute("allRecorders", new Integer(allRecorders));</p><p> if(all.size()>0){<
111、/p><p> request.setAttribute("all", all);</p><p><b> }else{</b></p><p> request.setAttribute("flag", "flag");</p><p> request
112、.setAttribute("currentPage", 0);</p><p><b> }</b></p><p> request.setAttribute("jspUrl", "kq.do");</p><p> request.setAttribute("me
113、thod", "queryallkq");</p><p> return mapping.findForward("queryallkqdo");</p><p> } catch (NumberFormatException e) {</p><p> e.printStackTrace();</p&
114、gt;<p> return mapping.getInputForward();</p><p> } catch (Exception e) {</p><p> e.printStackTrace();</p><p> return mapping.getInputForward();</p><p><b
115、> }</b></p><p><b> }</b></p><p> 4.1.3工資管理模塊</p><p> 財務部可以在工資管理模塊對員工的工資情況進行操作。部分界面如下:</p><p> 圖8 工資管理操作界面</p><p><b> 圖 9 工
116、資信息</b></p><p> 工資管理模塊的部分代碼:</p><p> public ActionForward insert(ActionMapping mapping, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response) {
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于hibernate的工資管理系統(tǒng)開發(fā)【畢業(yè)設計】
- 基于hibernate的工資管理系統(tǒng)開發(fā)【開題報告】
- 基于hiberate的工資管理系統(tǒng)開發(fā)【文獻綜述】
- 民航訂票系統(tǒng)開發(fā)【開題報告+文獻綜述+畢業(yè)設計】
- 基于internet的網(wǎng)絡考試系統(tǒng)開發(fā)【開題報告+文獻綜述+畢業(yè)設計】
- 工資管理系統(tǒng)畢業(yè)設計---vfp工資管理系統(tǒng)
- 旅行社內(nèi)部管理系統(tǒng)開發(fā)【開題報告+文獻綜述+畢業(yè)設計】
- 畢業(yè)設計----工資管理系統(tǒng)
- 網(wǎng)上寵物店綜合系統(tǒng)開發(fā)【開題報告+文獻綜述+畢業(yè)設計】
- 工資管理系統(tǒng)信息系統(tǒng)開發(fā)課程設計報告
- 工資管理系統(tǒng)畢業(yè)設計
- 工資管理系統(tǒng)畢業(yè)設計
- 企業(yè)工資管理系統(tǒng)設計開題報告
- 畢業(yè)設計---企業(yè)工資管理系統(tǒng)
- 工資管理系統(tǒng)畢業(yè)設計論文
- 小型工資管理系統(tǒng)畢業(yè)設計
- 基于web的車輛管理系統(tǒng)【開題報告+文獻綜述+畢業(yè)設計】
- 開題報告---基于vb的企業(yè)工資管理系統(tǒng)設計
- 畢業(yè)設計---企業(yè)工資管理系統(tǒng)設計
- 職工工資管理系統(tǒng)畢業(yè)設計報告
評論
0/150
提交評論