版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 本科畢業(yè)設(shè)計(jì)(論文)</p><p><b> ?。ǘ?屆)</b></p><p> 基于Hibernate的工資管理系統(tǒng)開(kāi)發(fā)</p><p> 所在學(xué)院 </p><p> 專(zhuān)業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù) <
2、;/p><p> 學(xué)生姓名 學(xué)號(hào) </p><p> 指導(dǎo)教師 職稱(chēng) </p><p> 完成日期 年 月 </p><p> 摘要:工資管理在各個(gè)組織中的作用日益突出,工資管理主要包括職工管理、工資設(shè)定、工資
3、修改、考勤管理等若干部分,這些信息數(shù)據(jù)量巨大、關(guān)系復(fù)雜,如若通過(guò)工資管理軟件進(jìn)行計(jì)算機(jī)自動(dòng)化管理,將會(huì)大大提高財(cái)務(wù)部門(mén)的辦公效率,從而做出正確的人力資源配置。本文首先概括介紹了Java技術(shù),接著對(duì)Hibernate技術(shù)進(jìn)行了較為詳細(xì)的研究,并嚴(yán)格按照軟件工程的流程和思想對(duì)系統(tǒng)做了詳盡的需求分析,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于Hibernate的工資管理系統(tǒng),最后對(duì)實(shí)現(xiàn)的系統(tǒng)的功能進(jìn)行了功能測(cè)試。論文根據(jù)軟件工程方法從系統(tǒng)需求分析、數(shù)據(jù)庫(kù)設(shè)計(jì)、系統(tǒng)
4、設(shè)計(jì)、系統(tǒng)功能和代碼幾個(gè)方面來(lái)敘述工資管理軟件的開(kāi)發(fā)過(guò)程。</p><p> 關(guān)鍵詞:Java;Hibernate;工資管理系統(tǒng);功能測(cè)試;</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技術(shù)可行性3</p><p> 1.2.2管理可行性3</p><p> 1.2.3經(jīng)濟(jì)可行性3</p><p> 1.3國(guó)內(nèi)外研究現(xiàn)狀分析3</p>
9、<p> 1.4論文的實(shí)踐基礎(chǔ)4</p><p> 1.5本文主要工作4</p><p> 2 相關(guān)的技術(shù)和工具的簡(jiǎn)介5</p><p> 2.1 關(guān)系映射簡(jiǎn)介5</p><p> 2.2.1 ORM模式5</p><p> 2.2.2 ORM實(shí)現(xiàn)原理5</p>
10、<p> 2.2 Hibernate簡(jiǎn)介6</p><p> 2.3 Hibernate原理6</p><p> 2.4 系統(tǒng)開(kāi)發(fā)工具簡(jiǎn)介7</p><p> 2.4.1 tomcat簡(jiǎn)介7</p><p> 2.4.2 Eclipse簡(jiǎn)介7</p><p> 2.5數(shù)據(jù)庫(kù)簡(jiǎn)介8&
11、lt;/p><p> 2.5.1數(shù)據(jù)的規(guī)范化8</p><p> 2.5.2數(shù)據(jù)庫(kù)的完整性設(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 編寫(xiě)Hibernate的配置文件24</p><p> 3.4 實(shí)體類(lèi)和映射文件24</p><p> 3.5 針對(duì)非功能性需求的解決方案26</p><p><b> 3.6 小結(jié)26</b>&l
13、t;/p><p> 4 數(shù)據(jù)庫(kù)設(shè)計(jì)錯(cuò)誤!未定義書(shū)簽。</p><p> 4.1數(shù)據(jù)庫(kù)的概念設(shè)計(jì)錯(cuò)誤!未定義書(shū)簽。</p><p> 4.2工資管理系統(tǒng)數(shù)據(jù)庫(kù)表概覽錯(cuò)誤!未定義書(shū)簽。</p><p> 開(kāi)發(fā)總結(jié)及心得體會(huì)錯(cuò)誤!未定義書(shū)簽。</p><p><b> 參考文獻(xiàn)27</b>
14、;</p><p> 致謝錯(cuò)誤!未定義書(shū)簽。</p><p><b> 1 緒論</b></p><p> 1.1課題研究背景及意義</p><p> 市場(chǎng)經(jīng)濟(jì)條件下,技術(shù)的競(jìng)爭(zhēng)、市場(chǎng)的競(jìng)爭(zhēng)、服務(wù)的競(jìng)爭(zhēng)歸根結(jié)底還是人才的競(jìng)爭(zhēng)。當(dāng)今社會(huì),在“以人為本”觀念的熏陶下,人事管理在各個(gè)單位中的作用日益突出,而工資管理又
15、是人事管理的一個(gè)最重要的模塊。工資管理是一個(gè)單位日常工作中不可或缺的重要部分,它對(duì)于本單位的決策者和管理者來(lái)說(shuō)都至關(guān)重要。飛速發(fā)展的技術(shù)變革和創(chuàng)新,以及新競(jìng)爭(zhēng)環(huán)境的出現(xiàn),使得越來(lái)越多的單位通過(guò)構(gòu)筑自身的人事競(jìng)爭(zhēng)力來(lái)維持生存并促進(jìn)持續(xù)發(fā)展。而人員的復(fù)雜性卻使得工資管理成為難題[1]。</p><p> 工資信息的一大顯著特點(diǎn)就是數(shù)據(jù)量大、關(guān)系復(fù)雜。用傳統(tǒng)人工的方式管理文件檔案,效率低、保密性差,查找、更新、維護(hù)也
16、特別困難。以往的財(cái)務(wù)工作者由于缺乏適當(dāng)?shù)能浖o其工作帶來(lái)了諸多不便。隨著科學(xué)技術(shù)的不斷發(fā)展和計(jì)算機(jī)科學(xué)的日益成熟,人事工作者急切希望能夠?qū)⒐べY管理中大部分繁瑣的工作交給計(jì)算機(jī)處理,從而減輕人工的壓力并提高工作效率。工資管理系統(tǒng)應(yīng)運(yùn)而生,而計(jì)算機(jī)的普及更加快了工資管理系統(tǒng)的產(chǎn)生技術(shù)的不斷發(fā)展。</p><p> 工資管理系統(tǒng)是一個(gè)典型的信息管理系統(tǒng)(MIS),本課題來(lái)源于某事業(yè)單位對(duì)工資檔案管理的個(gè)性化需求,開(kāi)發(fā)
17、此系統(tǒng)的目的是為了提高該單位的工資管理效率,實(shí)現(xiàn)工資管理的自動(dòng)化和信息化。工資管理系統(tǒng)使用計(jì)算機(jī)對(duì)人事檔案信息進(jìn)行管理,檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低廉等優(yōu)點(diǎn)是手工管理所無(wú)法比擬的。工資管理系統(tǒng)功能全面、操作簡(jiǎn)便,能夠快速地為員工建立電子檔案,而且便于修改、保存和查詢(xún),實(shí)現(xiàn)了無(wú)紙化存檔,能夠?yàn)槭褂谜吖?jié)省大量資金和空間。工資管理系統(tǒng)利用計(jì)算機(jī)進(jìn)行信息控制和數(shù)據(jù)處理,不僅提高了工作效率,而且還大大的提高了其
18、安全性[1]。</p><p> 在工資管理系統(tǒng)的開(kāi)發(fā)過(guò)程中,項(xiàng)目涉及到的用戶(hù)和數(shù)據(jù)較多,因此用到的表也較多且與表之間還存在著復(fù)雜的映射關(guān)系,若采用傳統(tǒng)的JDBC(JavaDataBaseConneetivityStandard),要編寫(xiě)的代碼將會(huì)相當(dāng)復(fù)雜,日后的維護(hù)量也將會(huì)直線上升,而且不利于調(diào)試,也很難實(shí)現(xiàn)代碼的復(fù)用。于是這就需要有一種更方便、更通用的方案來(lái)解決需求的變動(dòng)所帶來(lái)的代碼重用和產(chǎn)品維護(hù)問(wèn)題,也需
19、要一種更方便的實(shí)現(xiàn)數(shù)據(jù)持久層的框架以及實(shí)現(xiàn)這種框架需要的工具。而當(dāng)前比較流行的Hibernate數(shù)據(jù)持久層框架可以很好的滿(mǎn)足這種要求[2]。</p><p> Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝。有了它,Java程序員便可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。同時(shí),Hibernate是一個(gè)功能強(qiáng)大、高性能、相當(dāng)流行的對(duì)象關(guān)系 映射工具,它推動(dòng)了基于普
20、通Java對(duì)象模型、用于映射底層數(shù)據(jù)結(jié)構(gòu)的持久對(duì)象的開(kāi)發(fā),且能夠提供高級(jí)數(shù)據(jù)查詢(xún)和檢索服</p><p><b> 務(wù)[2]。</b></p><p> Hibernate框架完全基于對(duì)象關(guān)系模型,使開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中省去了很多繁瑣的工作,可以將精力集中到業(yè)務(wù)問(wèn)題的實(shí)現(xiàn)上。不論開(kāi)發(fā)者使用何種應(yīng)用開(kāi)發(fā)策略(自項(xiàng)向下,從域模型開(kāi)始或者自底向上,從一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)模式開(kāi)
21、始),使用Hibernate和適當(dāng)?shù)墓ぞ邔?huì)減少大量的開(kāi)發(fā)時(shí)間[4]。</p><p> 在手工編碼的持久性系統(tǒng)中,關(guān)系表示和對(duì)象模型之間存在一種不可避免的緊張。改變一個(gè)幾乎總是包含改變其它的,并且一種表示設(shè)計(jì)經(jīng)常需要妥協(xié)來(lái)適應(yīng)其它的存在?;贖ibernate的代碼編寫(xiě)相對(duì)較少,這使得對(duì)系統(tǒng)操作的理解更容易。在有時(shí)間限制的項(xiàng)目中,手工編碼的持久層通常只允許開(kāi)發(fā)者利用一點(diǎn)時(shí)間做一些優(yōu)化,而Hibernate允許
22、開(kāi)發(fā)者在全部的時(shí)間內(nèi)做更多的優(yōu)化。因此,使用Hibernate開(kāi)發(fā)者可以花更多的時(shí)間手工優(yōu)化一些其余的瓶頸。</p><p> 此外,Hibernate還具有以下優(yōu)點(diǎn):1.Hibernate使用Java反射機(jī)制而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性;2.Hibernate是個(gè)輕量級(jí)框架,因此它的性能非常好,映射的靈活性也很出色;3.它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。</p><
23、p> 基于Hibernate的這些優(yōu)點(diǎn)和該單位要求開(kāi)發(fā)時(shí)間盡量短以盡早使用該系統(tǒng)的需求,筆者著手開(kāi)發(fā)基于Hibernate的實(shí)用型人事檔案管理系統(tǒng)。開(kāi)發(fā)這樣一個(gè)工資管理系統(tǒng)具有很強(qiáng)的現(xiàn)實(shí)意義:</p><p> 1.大幅度提高工作效率和工作質(zhì)量,使該單位的人事管理者從繁重瑣碎的人事管理工作中解脫出來(lái)</p><p> 2.通過(guò)計(jì)算機(jī)對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理代替手工統(tǒng)計(jì)工作,將在很大程度
24、上減少數(shù)據(jù)統(tǒng)計(jì)的工作量,并且能使數(shù)據(jù)統(tǒng)計(jì)過(guò)程中的錯(cuò)漏減少到最低程度。</p><p> 3.大大節(jié)約工資管理方面的成本,從而使該單位獲得更好的社會(huì)效益和經(jīng)濟(jì)效益。</p><p> 4.使該單位的工資管理工作更加規(guī)范、高效,在一定程度上加快了該單位的管理信息化進(jìn)程。</p><p> 1.2工資管理系統(tǒng)的可行性分析</p><p>
25、工資管理系統(tǒng)使得職工工資檔案查詢(xún)、調(diào)用的速度加快,同時(shí)也使得精確分析大量員工的工資、出勤、信息成為可能,從而實(shí)現(xiàn)工資管理的標(biāo)準(zhǔn)化、科學(xué)化、信息化。因此建立工資管理系統(tǒng),使工資管理自動(dòng)化,提高信息處理的速度和準(zhǔn)確性十分必要。</p><p> 以下幾個(gè)方面的調(diào)查分析可知開(kāi)發(fā)此工資管理系統(tǒng)的各種條件已經(jīng)具備,開(kāi)發(fā)此工資管理系統(tǒng)必要且可行。</p><p> 1.2.1技術(shù)可行性</p
26、><p> 該人事管理系統(tǒng)雖然在組織關(guān)系上存在著較大的復(fù)雜性、繁瑣性,但是從整個(gè)系統(tǒng)的技術(shù)構(gòu)成上來(lái)看,它屬于一個(gè)基于數(shù)據(jù)庫(kù)應(yīng)用的系統(tǒng),其基本操作是對(duì)己存在的數(shù)據(jù)庫(kù)信息進(jìn)行添加、刪除、查找、編輯等。使用此系統(tǒng)的事業(yè)單位屬于小型事業(yè)單位,總?cè)藬?shù)才50多人,若對(duì)全部員工的人事信息建立數(shù)據(jù)庫(kù)的話,規(guī)模算不上龐大,且開(kāi)發(fā)此工資管理系統(tǒng)得到了人事處領(lǐng)導(dǎo)的大力支持和重視,對(duì)新系統(tǒng)的開(kāi)發(fā)提供了大量完整的正確的原始檔案數(shù)據(jù),因此,就
27、單純的數(shù)據(jù)庫(kù)應(yīng)用來(lái)看,不存在太大的技術(shù)問(wèn)題。而Hibernate是Java開(kāi)源項(xiàng)目,擁有豐富的參考文檔與實(shí)例。因此,Hibernate相關(guān)技術(shù)的獲取和應(yīng)用也不存在太大的問(wèn)題。</p><p> 1.2.2管理可行性</p><p> 項(xiàng)目組在系統(tǒng)開(kāi)發(fā)時(shí)充分注意了可操作性和易用性,現(xiàn)有員工通過(guò)簡(jiǎn)單培訓(xùn)或閱讀操作手冊(cè)完全能掌握系統(tǒng)并能方便地使用系統(tǒng)。隨著時(shí)代的發(fā)展和計(jì)算機(jī)的普及,該單位人員
28、的素質(zhì)己逐步提高,不管是對(duì)于電腦系統(tǒng)的基本操作還是對(duì)于系統(tǒng)的維護(hù)都有了一定的基礎(chǔ)。同時(shí)該單位還可以配置專(zhuān)業(yè)的電腦維護(hù)人員來(lái)維護(hù)電腦,不必?fù)?dān)心電腦故障問(wèn)題。</p><p> 1.2.3經(jīng)濟(jì)可行性</p><p> 該單位財(cái)務(wù)處、人事處用于此工資管理系統(tǒng)開(kāi)發(fā)的預(yù)算完全可滿(mǎn)足設(shè)備投入和人力投入,系統(tǒng)投入使用后將會(huì)極大地提高管理者的工作效率和工作質(zhì)量,大大節(jié)約該單位工資管理的成本,從而將獲得
29、很好的社會(huì)效益和經(jīng)濟(jì)效益。</p><p> 1.3國(guó)內(nèi)外研究現(xiàn)狀分析</p><p> 工資管理系統(tǒng)此前已有許多解決方案,所用技術(shù)也是越來(lái)越先進(jìn)。較早的工資管理系統(tǒng)主要采用Foxbase、FoxPro、VB等數(shù)據(jù)庫(kù)開(kāi)發(fā)工具,系統(tǒng)開(kāi)發(fā)環(huán)境也是數(shù)據(jù)庫(kù)內(nèi)置的開(kāi)發(fā)工具。其特點(diǎn)是單機(jī)單用戶(hù)方式,開(kāi)發(fā)簡(jiǎn)單,能充分利用數(shù)據(jù)庫(kù)的特性。其缺點(diǎn)是:開(kāi)發(fā)出的系統(tǒng)依賴(lài)性很強(qiáng),運(yùn)行必須依托數(shù)據(jù)庫(kù)環(huán)境;不容易升
30、級(jí)與擴(kuò)展;無(wú)法實(shí)現(xiàn)數(shù)據(jù)的共享與并行操作;代碼重用性差。而后出現(xiàn)了基于傳統(tǒng)的C/S模式下采用面向?qū)ο蟮拈_(kāi)發(fā)工具開(kāi)發(fā)的一系列工資管理軟件。采用可視化的面向?qū)ο蟮拈_(kāi)發(fā)工具PowerBuilder7.0進(jìn)行系統(tǒng)程序設(shè)計(jì);缺點(diǎn)是客戶(hù)端由于擔(dān)當(dāng)了過(guò)多的角色而顯得臃腫和服務(wù)器端負(fù)擔(dān)過(guò)重,而且系統(tǒng)的安裝和部署也比較麻煩,難于升級(jí)或改進(jìn),不具有很強(qiáng)的可伸展性。隨著Internet技術(shù)、面向?qū)ο蠹夹g(shù)和分布式計(jì)算相互融合,傳統(tǒng)的C/S兩層體系結(jié)構(gòu)已經(jīng)不能適應(yīng)
31、當(dāng)今大型應(yīng)用系統(tǒng)的發(fā)展要求,因此,多層分布式體系結(jié)構(gòu)應(yīng)運(yùn)而生,這些系統(tǒng)一般是采用B/S(Browser/Server)結(jié)構(gòu)來(lái)開(kāi)發(fā)。值得注意的是,以上所提到的B/S結(jié)構(gòu)的工資管理系統(tǒng)的研究都是適用于大型應(yīng)用系統(tǒng),其開(kāi)發(fā)成本之高和開(kāi)發(fā)周期之長(zhǎng)是小型單位所不能忍受的,</p><p> 1.4論文的實(shí)踐基礎(chǔ)</p><p> 本論文是結(jié)合某事業(yè)單位的工資管理系統(tǒng)項(xiàng)目的開(kāi)發(fā)設(shè)計(jì)而進(jìn)行的,作者本
32、人從項(xiàng)目的開(kāi)始階段就參與了進(jìn)來(lái),在開(kāi)發(fā)的過(guò)程中不斷學(xué)習(xí)和實(shí)踐,經(jīng)過(guò)了將近一年的磨練,對(duì)筆者負(fù)責(zé)的需求、設(shè)計(jì)、測(cè)試階段都積累了一定的經(jīng)驗(yàn),:并對(duì)后面的設(shè)計(jì)開(kāi)發(fā)以及論文的撰寫(xiě)創(chuàng)造了有利條件。</p><p><b> 1.5本文主要工作</b></p><p> 為某事業(yè)單位開(kāi)發(fā)的工資管理系統(tǒng)采用了安全性較高的C/S架構(gòu),系統(tǒng)前臺(tái)采用了html技術(shù)實(shí)現(xiàn)用戶(hù)界面,后臺(tái)數(shù)
33、據(jù)庫(kù)采用了MYSQL,對(duì)于數(shù)據(jù)持久化操作采用了Hibernate框架技術(shù)。我所做的工作是首先對(duì)html技術(shù)做了簡(jiǎn)要介紹,主要分析了html的優(yōu)點(diǎn)和選用Swing開(kāi)發(fā)工資管理系統(tǒng)的原因,接著對(duì)在ORM(Object-Relation Mapping)思想指導(dǎo)下的ORM框架Hibernate進(jìn)行了較為細(xì)致的研究,并嚴(yán)格按照軟件工程的流程和思想對(duì)系統(tǒng)部分功能做了詳盡的需求分析和設(shè)計(jì),最后對(duì)實(shí)現(xiàn)的系統(tǒng)的部分功能進(jìn)行了功能測(cè)試以驗(yàn)證功能是否實(shí)現(xiàn)以
34、及是否能夠滿(mǎn)足實(shí)際需要。我的工作重點(diǎn)是用html和Hibernate兩個(gè)主流工具實(shí)現(xiàn)工資管理系統(tǒng)的設(shè)計(jì)。</p><p> 2 相關(guān)的技術(shù)和工具的簡(jiǎn)介</p><p> 2.1 關(guān)系映射簡(jiǎn)介</p><p> 對(duì)象關(guān)系映射ORM(Object-Relation Mapping)是為了解決面向?qū)ο蟮拈_(kāi)發(fā)與關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)之間的沖突而提出來(lái)的[15]。本章主
35、要闡述了ORM技術(shù),并對(duì)在ORM思想指導(dǎo)下的ORM框架Hibernate 進(jìn)行了較為細(xì)致的研究。</p><p> 2.2.1 ORM模式</p><p> 在研究對(duì)象關(guān)系映射的模式時(shí),通常采用如下的對(duì)應(yīng)關(guān)系將對(duì)象與數(shù)據(jù)表進(jìn)行關(guān)聯(lián):</p><p><b> 屬性一一列</b></p><p><b>
36、 類(lèi)/實(shí)例一一表/行</b></p><p><b> 關(guān)系一一外鍵</b></p><p> 根據(jù)抽象對(duì)象與關(guān)系數(shù)據(jù)庫(kù)的特性,在以下幾個(gè)方面實(shí)現(xiàn):</p><p> (1)從類(lèi)屬性到數(shù)據(jù)表列的映射。類(lèi)屬性和表列并非一一對(duì)應(yīng)。一個(gè)類(lèi)屬性可對(duì)多個(gè)實(shí)體表的字段。所以,在設(shè)置主鍵時(shí),一般會(huì)采用無(wú)業(yè)務(wù)意義的字段對(duì)象標(biāo)識(shí)符作為各個(gè)實(shí)體
37、表的主鍵,也作為類(lèi)與數(shù)據(jù)庫(kù)映射時(shí)的對(duì)象的惟一標(biāo)識(shí)。</p><p> (2)從類(lèi)到數(shù)據(jù)表的映射。當(dāng)不同層次的父類(lèi)和子類(lèi)映射到數(shù)據(jù)表時(shí),應(yīng)該根據(jù)實(shí)際的系統(tǒng)設(shè)計(jì)結(jié)果,權(quán)衡采用怎樣的映射策略。這種映射主要是指繼承映射,可以采用的映射策略主要分為以下3種:1個(gè)類(lèi)繼承樹(shù)1個(gè)表、1個(gè)具體類(lèi)1個(gè)表和l類(lèi)l表。</p><p> (3)類(lèi)間關(guān)系映射為鍵值。這是映射的難點(diǎn)。主要是體現(xiàn)類(lèi)關(guān)系中的關(guān)聯(lián)和聚集
38、。</p><p> 2.2.2 ORM實(shí)現(xiàn)原理</p><p> ?。?)ORM具體實(shí)現(xiàn)方式</p><p> ORM的實(shí)現(xiàn)技術(shù)一般有兩種:一是利用反射機(jī)制,在運(yùn)行時(shí)自動(dòng)產(chǎn)生SQL語(yǔ)句,執(zhí)行ORM的操作。二是通過(guò)ORM工具,生成代碼,把其代碼加到項(xiàng)目中。這種方法缺點(diǎn)是生成了大量的代碼,不便于修改和閱讀。</p><p> ?。?) 關(guān)
39、聯(lián)表的處理</p><p> 對(duì)于有外鍵關(guān)系的表,對(duì)應(yīng)的實(shí)體層就是有參照關(guān)系的類(lèi),這是0RM實(shí)現(xiàn)的一個(gè)難點(diǎn)。</p><p> ?。?) 唯一標(biāo)識(shí)的處理</p><p> 數(shù)據(jù)表中的一個(gè)主鍵,唯一標(biāo)識(shí)一條數(shù)據(jù)記錄。那么,在對(duì)應(yīng)的實(shí)體類(lèi)中,就使用這個(gè)主鍵作為判斷兩個(gè)類(lèi)是否相等的唯一標(biāo)識(shí)。主鍵的選擇一般用沒(méi)有含義的主鍵。</p><p>
40、(4)SQL語(yǔ)句的生成</p><p> ORM的結(jié)果就是把類(lèi)的操作最后轉(zhuǎn)變成Insert,Update,Delete,Select等語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)操作。因此開(kāi)發(fā)ORM工具時(shí)需要有一個(gè)生成SQL語(yǔ)句的方法。有了這個(gè)方法以后,就可以節(jié)省下寫(xiě)SQL的時(shí)間了。</p><p> 2.2 Hibernate簡(jiǎn)介</p><p> Hibernate是一種Java語(yǔ)言
41、下的對(duì)象/關(guān)系映射解決方案。它是使用GNU寬通用公共許可證發(fā)行的自由、開(kāi)源的軟件。它為面向?qū)ο蟮念I(lǐng)域模型到傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的映射,提供了一個(gè)使用方便的框架。它的設(shè)計(jì)目標(biāo)是將軟件開(kāi)發(fā)人員從大量相同的數(shù)據(jù)持久層相關(guān)編程工作中解放出來(lái)。</p><p> Hibernate不僅負(fù)責(zé)從Java類(lèi)到數(shù)據(jù)庫(kù)表的映射(包括從Java數(shù)據(jù)類(lèi)型到SOL數(shù)據(jù)類(lèi)型的映射),還提供了面向?qū)ο蟮臄?shù)據(jù)查詢(xún)檢索機(jī)制,從而極大地縮短了手動(dòng)處
42、理SOL和JDBC上的開(kāi)發(fā)時(shí)間。另外,Hibernate可以利用代理模式來(lái)簡(jiǎn)化載入類(lèi)的過(guò)程,這將大大減少利用HQL(Hibernate Query Language)從數(shù)據(jù)庫(kù)提取數(shù)據(jù)的代碼編寫(xiě)量,從而節(jié)約開(kāi)發(fā)時(shí)間和開(kāi)發(fā)成本。通過(guò)使Hibernate開(kāi)發(fā)者可以輕松解決在使用傳統(tǒng)的CMP以及JDBC和DAO(DataAccessObject)技術(shù)開(kāi)發(fā)持久層時(shí)遇到的困難,使生產(chǎn)力得到極大的提升。</p><p> 選
43、擇Hibernate的原因及其應(yīng)用優(yōu)勢(shì):</p><p> Hibernate是Java開(kāi)源項(xiàng)目,其底層代碼對(duì)用戶(hù)開(kāi)放,這樣用戶(hù)可以在需要的時(shí)候修改其源代碼,對(duì)其進(jìn)行功能的定制或者拓展,并且擁有豐富的參考文檔與實(shí)例。</p><p> Hibernate具有一支活躍的社區(qū)開(kāi)發(fā)隊(duì)伍,這使其長(zhǎng)期發(fā)展有了穩(wěn)定的保證。</p><p> Hibernate使用方便,既
44、適用于桌面程序開(kāi)發(fā),也可以引入到企業(yè)級(jí)應(yīng)用開(kāi)發(fā)中。</p><p> 由于Hibernate對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,如果有需要,用戶(hù)可Hibernate,直接訪問(wèn)JDBC API。Hibernate的Transaction實(shí)際上就是底層的JDBC Transaction的封裝,這樣大大簡(jiǎn)化了數(shù)據(jù)持久層的開(kāi)發(fā)與調(diào)試,減輕了程序員的負(fù)擔(dān)。</p><p><b> 具有
45、可擴(kuò)展性。</b></p><p> 使用方便,容易上手。</p><p> Hibernate可以和多種Web服務(wù)器、應(yīng)用服務(wù)器良好集成,并且支持幾乎所有流行的數(shù)據(jù)庫(kù)服務(wù)器。</p><p> 2.3 Hibernate原理</p><p> Hibernate技術(shù)本質(zhì)上是一個(gè)提供數(shù)據(jù)庫(kù)服務(wù)的中間件。圖3-i顯示了Hi
46、bernate的工作原理。Hibernate在構(gòu)建Java應(yīng)用中的作用是:應(yīng)用程序通過(guò)Hibernate對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),對(duì)持久層操作,而Hibernate自身通過(guò)properties配置文件和XMLMapping映射文件將類(lèi)型映射到數(shù)據(jù)庫(kù)的記錄。從而Application應(yīng)用可以通過(guò)起著應(yīng)用與數(shù)據(jù)庫(kù)之間的橋梁作用的持久化對(duì)象直接訪問(wèn)數(shù)據(jù)庫(kù),而不是必須使用JDBC和SOL進(jìn)行數(shù)據(jù)的操作。</p><p> Hi
47、bernate具有很大的靈活性,提供了好幾種不同的運(yùn)行方式。在輕型體系中,應(yīng)用程序提供JDBC連接,并且自行管理事務(wù),這種方式使用了Hibernate的一個(gè)最小子集;在全面解決體系中,對(duì)于應(yīng)用程序來(lái)說(shuō),所有底層的JDBC/JTAAPI都被抽象了,Hibernate會(huì)照管所有的細(xì)節(jié)。</p><p> 2.4 系統(tǒng)開(kāi)發(fā)工具簡(jiǎn)介</p><p> 2.4.1 tomcat簡(jiǎn)介</p&
48、gt;<p> 自從JSP發(fā)布之后,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開(kāi)發(fā)以后,開(kāi)始考慮在SUN的JSWDK基礎(chǔ)上開(kāi)發(fā)一個(gè)可以直接提供Web服務(wù)的JSP服務(wù)器,當(dāng)然同時(shí)也支持Servlet, 這樣Tomcat就誕生了。Tomcat是jakarta項(xiàng)目中的一個(gè)重要的子項(xiàng)目,其被JavaWorld雜志的編輯選為2001年度最具創(chuàng)新的java產(chǎn)品,同時(shí)它又是sun公司官方推薦的ser
49、vlet和jsp容器,因此其越來(lái)越多的受到軟件公司和開(kāi)發(fā)人員的喜愛(ài)。servlet和jsp的最新規(guī)范都可以在tomcat的新版本中得到實(shí)現(xiàn)。其次,Tomcat是完全免費(fèi)的軟件,任何人都可以從互聯(lián)網(wǎng)上自由地下載。</p><p> 2.4.2 Eclipse簡(jiǎn)介</p><p> Eclipse 是一個(gè)開(kāi)放源代碼的、基于 Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù)
50、,用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具(Java Development Tools,JDT)。 Eclipse 還包括插件開(kāi)發(fā)環(huán)境(Plug-in Development Environment,PDE),這個(gè)組件主要針對(duì)希望擴(kuò)展 Eclipse 的軟件開(kāi)發(fā)人員,因?yàn)樗试S他們構(gòu)建與 Eclipse 環(huán)境無(wú)縫集成的工具。</p><p> E
51、clipse 最初由OTI和IBM兩家公司的IDE產(chǎn)品開(kāi)發(fā)組創(chuàng)建,起始于1999年4月。IBM提供了最初的Eclipse代碼基礎(chǔ),包括Platform、JDT 和PDE。目前由IBM牽頭,圍繞著Eclipse項(xiàng)目已經(jīng)發(fā)展成為了一個(gè)龐大的Eclipse聯(lián)盟,有150多家軟件公司參與到Eclipse項(xiàng)目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一個(gè)開(kāi)發(fā)源碼項(xiàng)目,它其實(shí)是
52、Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其開(kāi)放源碼,任何人都可以免費(fèi)得到,并可以在此基礎(chǔ)上開(kāi)發(fā)各自的插件,因此越來(lái)越受人們關(guān)注。近期還有包括Oracle在內(nèi)的許多大公司也紛紛加入了該項(xiàng)目,并宣稱(chēng)Eclipse將來(lái)能成為可進(jìn)行任何語(yǔ)言開(kāi)發(fā)的IDE集大成者,使用者只需下載各種語(yǔ)言的插件即可。</p><p> Eclipse是著名的跨平臺(tái)的自
53、由集成開(kāi)發(fā)環(huán)境(IDE)。最初主要用來(lái)Java語(yǔ)言開(kāi)發(fā),但是目前亦有人通過(guò)插件使其作為其他計(jì)算機(jī)語(yǔ)言比如C++和Python的開(kāi)發(fā)工具。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得Eclipse擁有其他功能相對(duì)固定的IDE軟件很難具有的靈活性。許多軟件開(kāi)發(fā)商以Eclipse為框架開(kāi)發(fā)自己的IDE。</p><p><b> 2.5數(shù)據(jù)庫(kù)簡(jiǎn)介</b></p>&
54、lt;p> 在開(kāi)發(fā)工資管理系統(tǒng)時(shí),對(duì)數(shù)據(jù)庫(kù)的操作肯定是必不可少的,而數(shù)據(jù)庫(kù)的設(shè)計(jì)優(yōu)秀與否,將會(huì)直接影響到軟件的開(kāi)發(fā)進(jìn)度和性能,對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)于是就顯得非常重要和關(guān)鍵。數(shù)據(jù)庫(kù)的設(shè)計(jì)應(yīng)當(dāng)根據(jù)程序的需求及其功能制定,如果在開(kāi)發(fā)軟件之前不能很好地設(shè)計(jì)數(shù)據(jù)庫(kù)的話,會(huì)導(dǎo)致在開(kāi)發(fā)過(guò)程中反復(fù)修改數(shù)據(jù)庫(kù),到時(shí)勢(shì)必嚴(yán)重影響開(kāi)發(fā)進(jìn)度[14]。</p><p> 在服務(wù)器端,筆者采用了MYSQL。</p><
55、;p> MySQL是一個(gè)真正的多用戶(hù)、多線程SQL數(shù)據(jù)可服務(wù)器。SQL是世界上最流行的和標(biāo)準(zhǔn)化的數(shù)據(jù)庫(kù)語(yǔ)言。MySQL是以一個(gè)客戶(hù)機(jī)/服務(wù)器結(jié)構(gòu)實(shí)現(xiàn)的,是有一個(gè)服務(wù)器守護(hù)程序mysqld和很多不同的客戶(hù)程序和庫(kù)組成的。</p><p> SQL是一種標(biāo)準(zhǔn)化語(yǔ)言,它使得存儲(chǔ)、更新和存取信息更容易。如果您想用SQL語(yǔ)言為一個(gè)網(wǎng)站檢索產(chǎn)品信息及存儲(chǔ)顧客信息,那么,MySQL能夠以足夠快的速度和靈活來(lái)允許您存儲(chǔ)
56、紀(jì)錄文件和圖像。</p><p> 盡管MySQL還在不斷的開(kāi)發(fā)中,但它已經(jīng)提供了一個(gè)豐富的和極其有用的功能集。</p><p> 2.5.1數(shù)據(jù)的規(guī)范化</p><p> 之所以對(duì)數(shù)據(jù)庫(kù)進(jìn)行規(guī)范化是為了防止數(shù)據(jù)冗余,如果冗余數(shù)據(jù)較多的話,極易導(dǎo)致在處理插入、刪除和更新數(shù)據(jù)操作時(shí)的異常,這是因?yàn)橐粋€(gè)值可能存儲(chǔ)在多個(gè)位置上,這樣就會(huì)增加數(shù)據(jù)更改時(shí)發(fā)生異常的概率。
57、還有,由于需要較多的語(yǔ)句維護(hù)多個(gè)位置的相同值,特別是在一個(gè)表中存儲(chǔ)大量相同且重復(fù)的信息的時(shí)候,很有可能會(huì)造成系統(tǒng)性能的下降。因此我們需要數(shù)據(jù)庫(kù)設(shè)計(jì)的三大范式來(lái)達(dá)到規(guī)范化的目的[14]:</p><p> 第一范式(1NF):第一范式規(guī)定當(dāng)且僅當(dāng)表中所有的字段不可分割時(shí),才會(huì)符合第一范式。例如一個(gè)電子商務(wù)的程序,如果在“商品名”字段中同時(shí)包含產(chǎn)地信息,則認(rèn)為此字段違反了原子性的要求,解決的方式是將產(chǎn)地分離到一個(gè)單
58、獨(dú)的字段中。</p><p> 第二范式(2NF):第二范式在符合第一范式的基礎(chǔ)上,規(guī)定每一個(gè)非主鍵字段都可用主鍵表示,但不強(qiáng)制只使用主鍵表示,第二范式允許字段的傳遞依賴(lài),這種情況下,一個(gè)字段可被多個(gè)其他字段標(biāo)識(shí)。</p><p> 第三范式(3NF):第三范式是在符合第二范式的基礎(chǔ)上,規(guī)定每一個(gè)非主鍵字段有且只有主鍵可唯一標(biāo)識(shí)時(shí),才符合第三范式。通常擁有多個(gè)組合鍵的表會(huì)不符合第三范式
59、。在設(shè)計(jì)表結(jié)構(gòu)時(shí),最好應(yīng)符合第三范式,但若一個(gè)表在符合第三范式的基礎(chǔ)上有較多的表鏈接時(shí),比如超過(guò)4個(gè)表鏈接時(shí)很有可能會(huì)影響到性能,這時(shí)我們就可以考慮保持較少的冗余數(shù)據(jù)。進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),我們應(yīng)當(dāng)在規(guī)范化和性能之間尋求一個(gè)最佳平衡點(diǎn)。</p><p> 2.5.2數(shù)據(jù)庫(kù)的完整性設(shè)計(jì)</p><p> 良好的數(shù)據(jù)庫(kù)設(shè)計(jì)是數(shù)據(jù)庫(kù)應(yīng)用程序成功的基礎(chǔ),在數(shù)據(jù)庫(kù)服務(wù)器上實(shí)現(xiàn)數(shù)據(jù)完整性,有利于數(shù)據(jù)維
60、護(hù)和更新。MYSQL提供了如下機(jī)制來(lái)保證數(shù)據(jù)的完整性[14]:</p><p> 參照完整性:關(guān)系數(shù)據(jù)庫(kù)的參照完整性是指每個(gè)表的每一行都能夠被唯一地標(biāo)識(shí)。SQL Server通過(guò)主鍵(Primary Key)來(lái)確保這種唯一性。一個(gè)表只允許擁有一個(gè)主鍵,在定義一個(gè)表時(shí),可指定某個(gè)列或某些列的組合作為主鍵,通常定義一個(gè)具有唯一性的編號(hào)作為主鍵。MYSQL通過(guò)外鍵(Foreign Key)約束實(shí)現(xiàn)表之間的邏輯關(guān)系。&
61、lt;/p><p> 默認(rèn)值:默認(rèn)值是指插入數(shù)值時(shí)在用戶(hù)沒(méi)有提供明確數(shù)值時(shí),由數(shù)據(jù)庫(kù)插入的預(yù)先指定的值。</p><p> 約束和規(guī)則:約束和規(guī)則用于檢查某列的值是否在某一特定范圍內(nèi),或匹配特定的條件等。其中約束最為靈活,在定義列時(shí),可以很方便地定義約束,并且可以針對(duì)多個(gè)列定義。在約束中,可以使用系統(tǒng)函數(shù)返回的值,并且可參照表中其他的列值。當(dāng)在列中保存值時(shí),SQL Server參照為此列建
62、立的所有約束和規(guī)則,只有符合所有約束的值才會(huì)被正常保存。</p><p> 觸發(fā)器:觸發(fā)器與約束類(lèi)似。當(dāng)觸發(fā)器與某些列關(guān)聯(lián)時(shí),每當(dāng)更改數(shù)據(jù),MYSQL將會(huì)自動(dòng)執(zhí)行觸發(fā)器。觸發(fā)器可以說(shuō)是一種特殊的存儲(chǔ)過(guò)程,觸發(fā)器中可使用Transact.SQL包含的函數(shù)和語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行精確限制。</p><p> 事務(wù)處理:事務(wù)處理可以把多個(gè)SQL命令作為一個(gè)處理單元看待,發(fā)出COMMIT命令后,所有更
63、新才會(huì)被應(yīng)用。而當(dāng)出現(xiàn)錯(cuò)誤時(shí),所有的操作將會(huì)回滾,這樣可保證數(shù)據(jù)庫(kù)的一致性和可恢復(fù)性。在一個(gè)事務(wù)中,所有的操作要么執(zhí)行,要么全部終止。</p><p><b> 3 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p> 3.1數(shù)據(jù)庫(kù)的概念設(shè)計(jì)</p><p> 在開(kāi)發(fā)工資管理系統(tǒng)時(shí),對(duì)數(shù)據(jù)庫(kù)的操作肯定是必不可少的,而數(shù)據(jù)庫(kù)的設(shè)計(jì)優(yōu)秀與否,將會(huì)直接影響到軟
64、件的開(kāi)發(fā)進(jìn)度和性能,對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)于是就顯得非常重要和關(guān)鍵。數(shù)據(jù)庫(kù)的設(shè)計(jì)應(yīng)當(dāng)根據(jù)程序的需求及其功能制定,如果在開(kāi)發(fā)軟件之前不能很好地設(shè)計(jì)數(shù)據(jù)庫(kù)的話,會(huì)導(dǎo)致在開(kāi)發(fā)過(guò)程中反復(fù)修改數(shù)據(jù)庫(kù),到時(shí)勢(shì)必嚴(yán)重影響開(kāi)發(fā)進(jìn)度。</p><p> 數(shù)據(jù)庫(kù)設(shè)計(jì)是通過(guò)系統(tǒng)的整體需求而制定的,工資管理系統(tǒng)的需求主要包括對(duì)人事檔案的管理和對(duì)人事考勤的管理,考勤和績(jī)效的信息將體現(xiàn)到待遇統(tǒng)計(jì)中。</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ù)庫(kù)表概覽</p><p> 由于數(shù)據(jù)庫(kù)表很多,筆者只列出以下主要數(shù)據(jù)庫(kù)表:</p><p> 表1 jiaban 加班信息表:</p>
66、;<p> 表2 kqinfo考勤管理表:</p><p> 4 系統(tǒng)功能概況和核心代碼</p><p> 4.1 系統(tǒng)的主要功能 </p><p> 工資管理系統(tǒng),是為了滿(mǎn)足單位或企業(yè)在工資管理工作上的具體需求而設(shè)計(jì)開(kāi)發(fā)的管理信息系統(tǒng),主要目的是為了方便其在工資發(fā)放和工資管理上的工作任務(wù),實(shí)現(xiàn)工資管理的標(biāo)準(zhǔn)化、科學(xué)化、信息化。</p&
67、gt;<p> 在出現(xiàn)工資管理系統(tǒng)之前,財(cái)務(wù)管理人員一般都是通過(guò)人工管理檔案的方式來(lái)完成工資管理和發(fā)放,這種原始方式不但費(fèi)時(shí)又費(fèi)力而且效率低、保密性差,對(duì)員工信息進(jìn)行查找、更新、維護(hù)比較困難。工資管理系統(tǒng)出現(xiàn)后,使用計(jì)算機(jī)對(duì)職工檔案信息進(jìn)行管理使得工資查詢(xún)、調(diào)用的速度加快,也使得精確分析大量員工的工資情況、工作時(shí)間、出勤情況等成為可能。因此,工資管理系統(tǒng)在當(dāng)今社會(huì)得到了廣泛的應(yīng)用。</p><p>
68、; 企業(yè)工資管理系統(tǒng)的主要任務(wù)是用計(jì)算機(jī)對(duì)各種工資信息進(jìn)行日常的管理,如查詢(xún)、修改、增加、刪除以及存儲(chǔ)等,迅速準(zhǔn)確地完成各種工資信息的統(tǒng)計(jì)計(jì)算和匯總工作,快速打印出工資報(bào)表,針對(duì)系統(tǒng)服務(wù)對(duì)象的具體要求,設(shè)計(jì)了企業(yè)工資管理系統(tǒng)。企業(yè)工資管理系統(tǒng)主要有以下幾大功能:</p><p> ?。?)對(duì)單位人員的變動(dòng)進(jìn)行處理。一個(gè)單位的職工不會(huì)是一成不變的,總是在不斷的變化:有調(diào)出、有調(diào)入、也有職工在本單位內(nèi)部調(diào)動(dòng)。因此,
69、設(shè)計(jì)系統(tǒng)是應(yīng)考慮到這些情況。</p><p> (2)對(duì)職工的工資進(jìn)行計(jì)算、修改??梢詫?duì)職工的工資檔案進(jìn)行個(gè)別、部分和批量修改,同時(shí),能對(duì)各職工的工資進(jìn)行計(jì)算,即計(jì)算應(yīng)發(fā)金額、應(yīng)扣金額及實(shí)發(fā)金額等。</p><p> ?。?)查詢(xún)統(tǒng)計(jì)功能。要求即可以單項(xiàng)查詢(xún),比如查看某個(gè)職工的工資情況等;也可以多項(xiàng)查詢(xún),比如某部門(mén)工資數(shù)在某一范圍的職工的工資情況等。</p><p&g
70、t; (4)對(duì)員工的出勤情況進(jìn)行統(tǒng)計(jì),查詢(xún)。出勤情況包括加班和缺勤信息等。</p><p> 通過(guò)對(duì)這兩類(lèi)用戶(hù)的功能需求分析、角色分析,形成了系統(tǒng)的功能設(shè)計(jì)。系統(tǒng)需要擁有的功能有:管理登陸、工資管理、考勤管理、工資匯總。系統(tǒng)功能結(jié)構(gòu)圖如下圖:</p><p><b> 圖 3 功能結(jié)構(gòu)</b></p><p> 4.1.1 登陸模塊&l
71、t;/p><p> ◆用戶(hù)通過(guò)登錄窗體輸入用戶(hù)名和密碼,為了系統(tǒng)的安全性,不允許用戶(hù)名和密碼為空。</p><p> ◆驗(yàn)證用戶(hù)名和密碼是否正確。</p><p> ◆用戶(hù)在登錄后被分配了相應(yīng)權(quán)限許可范圍。</p><p> ◆用戶(hù)可以選擇管理員的部門(mén)。</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> ◆人事管理員可以登陸人事管理模塊對(duì)員工的基本信息進(jìn)行添加、修改等操作。</p><p>
87、 ◆管理員可以在人事管理模塊中可以對(duì)員工的出勤情況進(jìn)行操作。</p><p><b> 人事管理界面:</b></p><p> 圖5 人事管理首頁(yè)</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> 財(cái)務(wù)部可以在工資管理模塊對(duì)員工的工資情況進(jìn)行操作。部分界面如下:</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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于hibernate的工資管理系統(tǒng)開(kāi)發(fā)【畢業(yè)設(shè)計(jì)】
- 基于hibernate的工資管理系統(tǒng)開(kāi)發(fā)【開(kāi)題報(bào)告】
- 基于hiberate的工資管理系統(tǒng)開(kāi)發(fā)【文獻(xiàn)綜述】
- 民航訂票系統(tǒng)開(kāi)發(fā)【開(kāi)題報(bào)告+文獻(xiàn)綜述+畢業(yè)設(shè)計(jì)】
- 基于internet的網(wǎng)絡(luò)考試系統(tǒng)開(kāi)發(fā)【開(kāi)題報(bào)告+文獻(xiàn)綜述+畢業(yè)設(shè)計(jì)】
- 工資管理系統(tǒng)畢業(yè)設(shè)計(jì)---vfp工資管理系統(tǒng)
- 旅行社內(nèi)部管理系統(tǒng)開(kāi)發(fā)【開(kāi)題報(bào)告+文獻(xiàn)綜述+畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)----工資管理系統(tǒng)
- 網(wǎng)上寵物店綜合系統(tǒng)開(kāi)發(fā)【開(kāi)題報(bào)告+文獻(xiàn)綜述+畢業(yè)設(shè)計(jì)】
- 工資管理系統(tǒng)信息系統(tǒng)開(kāi)發(fā)課程設(shè)計(jì)報(bào)告
- 工資管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 工資管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 企業(yè)工資管理系統(tǒng)設(shè)計(jì)開(kāi)題報(bào)告
- 畢業(yè)設(shè)計(jì)---企業(yè)工資管理系統(tǒng)
- 工資管理系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 小型工資管理系統(tǒng)畢業(yè)設(shè)計(jì)
- 基于web的車(chē)輛管理系統(tǒng)【開(kāi)題報(bào)告+文獻(xiàn)綜述+畢業(yè)設(shè)計(jì)】
- 開(kāi)題報(bào)告---基于vb的企業(yè)工資管理系統(tǒng)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---企業(yè)工資管理系統(tǒng)設(shè)計(jì)
- 職工工資管理系統(tǒng)畢業(yè)設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論