【《上海S科技公司員工考勤管理系統(tǒng)的設計與實現(xiàn)》9400字】_第1頁
【《上海S科技公司員工考勤管理系統(tǒng)的設計與實現(xiàn)》9400字】_第2頁
【《上海S科技公司員工考勤管理系統(tǒng)的設計與實現(xiàn)》9400字】_第3頁
【《上海S科技公司員工考勤管理系統(tǒng)的設計與實現(xiàn)》9400字】_第4頁
【《上海S科技公司員工考勤管理系統(tǒng)的設計與實現(xiàn)》9400字】_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

V1緒論1.1課題背景隨著技術時代的到來,計算機科學技術得到了高速發(fā)展,企業(yè)開始越來越多地利用計算機解決實際問題。企業(yè)員工考勤信息管理是企業(yè)信息管理的重要部分。面對大量的企業(yè)考勤信息,采用人力處理將浪費大量的時間,人力和物力資源,以及降低了數(shù)據(jù)準確性。因此,開發(fā)一個界面友好,易于操作的企業(yè)員工考勤信息管理軟件進行自動化處理具有較大的現(xiàn)實意義。同時,企業(yè)考勤管理系統(tǒng)是具有代表性的應用系統(tǒng),它具有一些應用系統(tǒng)的特征,系統(tǒng)結構與現(xiàn)實生活緊密結合,具體直觀,開發(fā)應用簡單,不失一般性。1.2選題意義企業(yè)員工考勤管理系統(tǒng)是一個企業(yè)不可缺少的一部分,它的存在使得企業(yè)的管理人員對員工的考勤變得簡單方便。企業(yè)考勤管理系統(tǒng)可以為企業(yè)提供詳細的員工考勤的信息和快捷的管理查詢手段。企業(yè)考勤管理系統(tǒng)和傳統(tǒng)的人工方式管理員工的上下班等信息相比,后者的這種管理方式存在著許多缺點,諸如效率低,操作繁瑣,保密性差等,而且隨著時間的推移,會產生大量的文件和數(shù)據(jù),這給信息的搜索、更新和維護都帶來了不少困難。因此,開發(fā)一個企業(yè)考勤管理系統(tǒng)是很有必要的,具有其特有的技術意義和管理意義。1.3主要內容本課題來自于企業(yè)考勤管理的需求,本系統(tǒng)主要實現(xiàn)系統(tǒng)管理、部門管理、公告管理、員工管理、個人考勤、考勤管理等功能,充分利用計算機網絡技術,改變傳統(tǒng)的操作方式進行管理,實現(xiàn)了網絡化管理模式,提高企業(yè)對員工考勤的效率。本系統(tǒng)的開發(fā)要求采用MVC設計模式和B/S結構體系結構,首先對系統(tǒng)做需求分析,確定系統(tǒng)的使用人員,確定系統(tǒng)中數(shù)據(jù)流程,確定系統(tǒng)的功能模塊組成。然后根據(jù)需求分析設計出正確合理的數(shù)據(jù)庫邏輯結構,設計出E-R圖,再將它轉換成關系模型,對該模型進行優(yōu)化后在Mysql上實現(xiàn)。最后編寫程序,逐個實現(xiàn)每個模塊。2系統(tǒng)開發(fā)的相關技術和工具2.1JAVA語言Java是面向對象程序設計語言(以下簡稱Java語言)和Java平臺的總稱。首先,作為一種程序設計語言,它簡單、面向對象、不依賴于機器的結構、具有可移植性、魯棒性、安全性、并且提供了并發(fā)的機制、具有很高的性能。其次,它最大限度地利用了網絡,Java的小應用程序(applet)可在網絡上傳輸而不受CPU和環(huán)境的限制。另外,Java還提供了豐富的類庫,使程序設計者可以很方便地建立自己的系統(tǒng)。Java主要分三塊,j2se:java的基礎核心語言。j2me:java的微型模塊,專門針對內存小,沒有持續(xù)電源等小型設備。j2ee:java的企業(yè)模塊,專門針對企業(yè)數(shù)據(jù)庫服務器的連接維護。本系統(tǒng)主要使用j2ee,即Java企業(yè)級開發(fā)。2.2MySQL數(shù)據(jù)庫開發(fā)基于B/S結構的上海文思科技公司員工考勤管理系統(tǒng),需要存儲和處理大量的數(shù)據(jù),因此就需要選擇一個合適的數(shù)據(jù)庫來存儲和管理這些數(shù)據(jù)信息。MySQL是一個快速、多線程、多用戶的SQL數(shù)據(jù)庫服務器,其出現(xiàn)雖然只有短短的數(shù)年時間,但憑借著“開放源代碼”的東風,它從眾多的數(shù)據(jù)庫中脫穎而出。除了因為幾乎是免費的這點之外,支持正規(guī)的SQL查詢語言和采用多種數(shù)據(jù)類型,能對數(shù)據(jù)進行各種詳細的查詢等都是MySQL的優(yōu)點。上海文思科技公司員工考勤管理系統(tǒng)最終選擇了小而精的開源MySQL數(shù)據(jù)庫。MySQL安裝簡單,使用方便,性能足夠支持本系統(tǒng)的正常運行。2.3Tomcat服務器Tomcat服務器是一個免費的開放源代碼的Web應用服務器。Tomcat是Apache軟件基金會(ApacheSoftwareFoundation)的Jakarta項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn)。因為Tomcat技術先進、性能穩(wěn)定,而且免費,因而深受Java愛好者的喜愛并得到了部分軟件開發(fā)商的認可,成為目前比較流行的Web應用服務器。Tomcat很受廣大程序員的喜歡,因為它運行時占用的系統(tǒng)資源小,擴展性好。2.4MyEclipseMyEclipse企業(yè)級工作平臺(MyEclipseEnterpriseWorkbench,簡稱MyEclipse)是對EclipseIDE的擴展,在Eclipse的基礎上添加了許多實用性的插件,讓J2EE開發(fā)變得更方便,極大的提高了軟件開發(fā)的效率。應為它集成了很多J2EEd的開發(fā)環(huán)境,包括了完備的編碼、調試、測試和發(fā)布功能。支持HTML,JSP,Struts,CSS,JavaScript等多項功能。本系統(tǒng)選用了MyEclipse作為開發(fā)工具。3系統(tǒng)需求分析3.1系統(tǒng)功能分析企業(yè)考勤管理系統(tǒng)是一個企事業(yè)單位不可缺少的一部分,它的內容對于企業(yè)的決策者和管理者來說都是至關重要的,因此,企業(yè)考勤管理系統(tǒng)應該能夠為用戶提供充足人事管理的信息和快捷的管理查詢手段。本系統(tǒng)主要企業(yè)員工的工作考勤和對員工考勤的管理。本系統(tǒng)主要實現(xiàn)系統(tǒng)管理、部門管理、公告管理、員工管理、個人考勤、考勤管理等功能,充分利用計算機網絡技術,改變傳統(tǒng)的操作方式進行管理,實現(xiàn)了網絡化管理模式,提高企業(yè)對員工考勤的效率。1.用戶登錄:登錄系統(tǒng)的身份定為二種,一是管理員(企業(yè)領導),二是般普通員工,只有被授權的用戶才可以使用本系統(tǒng)的資源。2.系統(tǒng)管理:主要實現(xiàn)員工修改密碼、重新登錄和安全退出功能。3.員工管理:領導對員工信息的管理,包括新增員工信息的錄入、員工信息的查詢、修改和刪除的操作。4.部門管理:領導對本企業(yè)部門的設定,包括添加、查詢等功能。5.公告管理:領導對本系統(tǒng)中的所用子級用戶進行發(fā)布公告及編輯,員工可以查看到公告的信息內容。6.個人考勤:用戶登錄系統(tǒng)后,可以考勤即上、下班登記。7.請假管理:領導可以以員工的請假信息進行審批(準請假和不準請假)和員工到班的銷假、續(xù)假的管理。8.考勤管理:領導可以對員工的全部考勤信息進行匯總,生成考勤報表。3.2系統(tǒng)結構分析采用MVC設計模式,選擇MySQL作為后臺數(shù)據(jù)庫,選擇JAVA、JSP、JavaScript、Html作為應用程序開發(fā)工具,運用Tomcat服務器技術,整個系統(tǒng)完全基于Browser/Server模式進行設計。MVC設計模式是一個存在于服務器表達層的模型,它將后臺操作分開,減少彼此之間的影響,其中MVC是Model-View-Control的簡稱,即模型-視圖-控制器。在MVC模式中,系統(tǒng)使用者通過WEB瀏覽器向服務器提交的所有請求都會被控制層接收到并進行處理。接受到請求之后,控制器會根據(jù)信息判斷調用哪一個模型來進行處理從視圖層得到的信息。然后模型層根據(jù)從用戶那里得到的請求信息進行相應的業(yè)務邏輯處理,并向控制層返回處理后數(shù)據(jù)信息;最后控制層將從模型層得到的返回信息轉發(fā)給視圖層,并通過WEB瀏覽器呈現(xiàn)給用戶。示意圖見圖3-1。圖3-1MVC設計模式圖系統(tǒng)的建設關鍵在于其所使用的架構,而本系統(tǒng)是基于WEB的系統(tǒng),傳統(tǒng)的C/S(全稱:Client/Server)架構已經不能滿足大量用戶的訪問和操作,B/S(全稱:Browser/Server)基于瀏覽器的架構則是目前網絡系統(tǒng)應用的主流,它將大量的數(shù)據(jù)處理工作交給服務器端來處理,客戶端只用通過普通的IE瀏覽器即可訪問系統(tǒng),方便快捷而且利于系統(tǒng)的更新和維護。這種三層體系結構如圖3-2所示:圖3-2B/C示意圖3.3數(shù)據(jù)流圖本系統(tǒng)的數(shù)據(jù)流圖如圖3-3所示??记谛畔⒖记谛畔⒖记谟涗浐戏▎T工信息合法員工登錄信息員工信息企業(yè)管理錄入普通員工驗證考勤考勤管理查詢信息顯示圖3-3系統(tǒng)數(shù)據(jù)流圖4系統(tǒng)總體設計4.1系統(tǒng)流程圖現(xiàn)行系統(tǒng)流程圖是分析和描述現(xiàn)行系統(tǒng)業(yè)務的重要工具之一。其主要作用是:描述現(xiàn)行系統(tǒng)的業(yè)務情況以便與管理人員交流,它是系統(tǒng)設計的前提和保證。本系統(tǒng)流程描述:首先用戶登錄,登錄信息有效后系統(tǒng)根據(jù)登錄信息判斷登錄的身份,分為管理層和普通員工兩種身份,然后分別進入不同的資源模塊。具體如圖4-1所示。普通員工普通員工登錄信息無效退出用戶信息信息判斷查詢系統(tǒng)資源模塊考勤信息考勤管理查詢信息個人考勤身份判斷管理員(企業(yè)領導)圖4-1系統(tǒng)流程圖4.2系統(tǒng)功能模塊本系統(tǒng)總體上分成兩大功能模塊:管理層功能模塊和普通員工功能模塊。兩大功能模塊下具有不同的子模塊。管理層的功能模塊下包括:系統(tǒng)管理模塊、部門管理模塊、員工管理模塊、請假管理模塊、個人考勤模塊和考勤匯總管理模塊。具體模塊層次圖見圖4-1。員工功能模塊下包括:系統(tǒng)控制模塊、信息管理模塊、個人考勤模塊和請假管理模塊。具體模塊層次圖見圖4-2。管理層模塊管理層模塊系統(tǒng)管理部門管理員工管理請假管理個人考勤考勤管理權限管理安全退出部門管理入職管理離職管理個人管理請假管理銷假管理個人考勤記錄查詢考勤匯總記錄查詢圖4-2系統(tǒng)管理層功能模塊圖考勤登記考勤登記記錄查看系統(tǒng)管理個人考勤信息管理請假管理員工模塊密碼修改退出系統(tǒng)重新登錄查看公告通訊錄個人信息填寫假條假條查看圖4-3系統(tǒng)普通用戶功能模塊圖4.3系統(tǒng)數(shù)據(jù)庫設計數(shù)據(jù)庫技術是在文件系統(tǒng)的基礎上發(fā)展起來的一種高效的數(shù)據(jù)管理技術,它能保持系統(tǒng)數(shù)據(jù)的完整性,整體性和共享性。數(shù)據(jù)庫是有組織的,存儲在一定結構內的相關數(shù)據(jù)的集合。在數(shù)據(jù)庫系統(tǒng)中,提供了對數(shù)據(jù)的訪問機制,能有組織地存儲相關的數(shù)據(jù),具有合理的存儲方式,快速的查詢效率和最小的數(shù)據(jù)冗余等特性。另外數(shù)據(jù)的存儲和應用程序彼此獨立,不僅便于數(shù)據(jù)的管理與控制而且有利于應用程序的編寫與調試。數(shù)據(jù)庫類似于一個數(shù)據(jù)的大倉庫,能很好地實現(xiàn)數(shù)據(jù)共享,本身就具有數(shù)據(jù)的增,刪,改、查等功能,能維護數(shù)據(jù)的一致性。數(shù)據(jù)庫設計是系統(tǒng)設計的一個重要內容,其設計質量的好壞直接影響系統(tǒng)開發(fā)的成敗,系統(tǒng)的質量,系統(tǒng)效率及可維護性。4.3.1數(shù)據(jù)庫概念結構設計概念模型設計是本系統(tǒng)整個數(shù)據(jù)庫設計的關鍵,是各種數(shù)據(jù)模型的共同基礎。(1)員工實體中包括了員工編號、姓名、性別、電話、地址、出生日期、部門編號、權限。其E-R圖見圖4-4。員工員工出生日期權限所屬部門地址電話性別姓名編號圖4-4員工實體的E-R圖(2)公告實體中包括了標題、內容、作者、所屬部門、發(fā)布時間。其E-R圖見圖4-5。公告公告標題內容作者所屬部門發(fā)布時間圖4-5公告實體E-R圖(3)部門實體中包括了部門編號、部門名稱。其E-R圖見圖4-6。圖4-6部門實體E-R圖(4)個人考勤實體中包括了員工編號、日期、上班時間、下班時間、工作時間、遲到時間、早退時間、性質。其E-R圖見圖4-7。遲到時間遲到時間性質早退時間工作時間下班時間上班時間日期員工編號個人考勤圖4-7個人考勤實體的E-R圖(5)假條實體中包括了員工編號、假條種類、請假理由、開始時間、結束時間、請假天數(shù)、審批狀態(tài)、銷假狀態(tài)。其E-R圖見圖4-8。請假天數(shù)請假天數(shù)銷假狀態(tài)審批狀態(tài)結束時間開始時間請假理由假條種類員工編號假條圖4-8請假實體的E-R圖(6)考勤匯總實體中包括了員工編號、考勤時間、應到天數(shù)、請假天數(shù)、實到天數(shù)、遲到次數(shù)、早退次數(shù)、出勤率、考勤率。其E-R圖見圖4-9。圖4-9考勤匯總實體的E-R圖(7)各實體之間關系的E-R圖。見圖4-10。111m員工考勤記錄部門假條公告屬于填寫登記查看1n1mn圖4-10各實體之間的E-R圖4.3.2數(shù)據(jù)庫物理結構設計用Mysql建立eeams數(shù)據(jù)庫,并建立數(shù)據(jù)表??偣矂?chuàng)建了七張表,分別為:員工登錄信息表(loginInfo)、員工詳細信息表(employee)、公告表(notice)、部門表(departmen)、考勤表(attendance)、請假信息表(leave)、考勤匯總表(total)。下面為數(shù)據(jù)庫涉及到的部分相關數(shù)據(jù)表。表4-1員工登錄信息表(loginInfo)名稱字段名稱數(shù)據(jù)類型主鍵非空備注登錄帳號loginIdvarchar(6)yesyes登錄密碼pwdVarchar(6)noyes登錄狀態(tài)stateint(1)noyes0:管理人員1:普通員工

表4-2員工詳細信息表(employee)名稱字段名稱數(shù)據(jù)類型主鍵非空備注員工帳號loginIdVarchar(6)yesyes員工姓名namevarchar(10)noyes員工性別sexvarchar(4)noyes聯(lián)系電話phonelong(11)noyes戶口所在地addressVarchar(50)noyes出生日期birthdaydatenoyes所屬部門dep_novarchar(20)noyes外鍵權限stateint(1)noyes0:管理人員1:普通員工表4-3公告表(notice)名稱字段名稱數(shù)據(jù)類型主鍵非空備注記錄IDidintyesyes標題titlevarchar(40)noyes公告內容contentvarchar(200)noyes作者loginIdvarchar(10)noyes外鍵所屬部門dep_novarchar(20)noyes外鍵添加時間add_timedatetimenoyes表4-4部門表(departmen)名稱字段名稱數(shù)據(jù)類型主鍵非空備注部門編號dep_noVarchar(6)yesyes部門名稱depnamevarchar(20)noyes表4-5考勤表(attendance)名稱字段名稱數(shù)據(jù)類型主鍵非空備注記錄IDidInt(4)yesyes用戶IDloginIdvarchar(6)noyes外鍵日期datedatenoyesyyyy/mm/dd上班時間start_workdatetimenoyes24hh:mm:ss下班時間over_workdatetimenono24hh:mm:ss工作時間work_timedouble(4,2)nono單位小時遲到時間late_timedouble(4,2)nono單位小時早退時間early_timedouble(4,2)nono單位小時表4-6請假信息表(leave)名稱字段名稱數(shù)據(jù)類型主鍵非空備注假條IDidInt(4)yesyes員工編號loginIdVarchar(6)noyes外鍵假條的種類typeVarchar(20)noyes請假理由reasonVarchar(200)noyes請假開始時間Start_timedatenoyesyyyy/mm/dd請假結束時間Over_timedatenoyesyyyy/mm/dd請假天數(shù)Leave_daysDouble(4,2)noyes單位:天審批狀態(tài)stateInt(1)nono0:未審批1:準許-1:不準許銷假xstateintnono0未銷假1已銷假

表4-7考勤匯總表(total)名稱字段名稱數(shù)據(jù)類型主鍵非空備注用戶IDloginIdVarchar(6)yesno外鍵考勤時間dateVarchar(8)yesnoyyyy-mm應到天數(shù)word_dayDouble(4,2)nono單位:天請假天數(shù)leave_daydouble(4,2)nono單位:天實到天數(shù)real_daydouble(4,2)nono單位:天遲到次數(shù)lateint(2)nono早退次數(shù)earlyInt(2)nono出勤率ratedouble(4,2)nono考勤率rate_adouble(4,2)nono5系統(tǒng)詳細設計和實現(xiàn)5.1指導思想系統(tǒng)功能設計本著從用戶角度出發(fā)的原則,要求實用,且符合用戶提出的合理需求。系統(tǒng)設計在不違反系統(tǒng)整體性的基礎上,可根據(jù)用戶的需求進行二次開發(fā),不斷完善系統(tǒng)功能,便于系統(tǒng)的不斷升級。5.2功能模塊設計與實現(xiàn)企業(yè)考勤管理系統(tǒng)分為登錄管理、系統(tǒng)管理、員工管理、部門管理、公告管理、請假管理、個人考勤、考勤管理等模塊。各模塊的具體功能劃分如下:5.2.1登錄模塊進入考勤管理系統(tǒng)首先需要登錄,本系統(tǒng)分為兩種登錄身份,分別為:管理層和普通員工。不同的身份登錄成功進入不同的主頁面。登錄頁面見圖5-1。圖5-1系統(tǒng)登錄頁面管理層登錄成功主頁面見圖5-2。圖5-2管理層主頁普通員工登錄成功主頁面見圖5-3。圖5-3普通員工主頁關鍵代碼:if(loginInfo!=null){ ActionContextcontext=ActionContext.getContext(); Mapsession=(Map)context.get("session"); session.put("loginId",loginInfo.getLoginId()); session.put("pwd",loginInfo.getPwd()); if(loginInfo.getState()==1){ return"common";//普通員工登錄 }else{ return"admin";//管理層(領導)登錄 } }else{ this.addFieldError("loginError","用戶名或密碼錯誤!"); returnINPUT;//登錄失敗 }5.5.2系統(tǒng)管理模塊系統(tǒng)管理模塊包括修改密碼、重新登錄和安全退出功能。修改密碼:本系統(tǒng)用戶登錄的初始密碼為888888,系統(tǒng)使用者可以修改登錄密碼。修改之前系統(tǒng)將會驗證原始密碼是否正確。見圖5-4。圖5-4修改密碼頁面重新登錄:點擊重新登錄,系統(tǒng)將調到登錄界面,見圖5-5。圖5-5重新登錄安全退出:系統(tǒng)將自動關閉,即關閉當前瀏覽器頁面,見圖5-6。圖5-6安全退出5.5.3員工管理模塊員工管理模塊包括入職管理、離職管理和個人信息管理三大子模塊。具體包括錄入員工信息、查詢員工信息、修改員工信息、刪除員工信息、個人信息查看等功能。查詢員工信息:點擊之后頁面將分頁顯示所有員工信息,還可以多條件具體查詢,按員工編號、姓名、部門等條件查詢。有點條件可以模糊查詢如按姓名查詢,見圖5-7。圖5-7員工信息查詢頁面關鍵代碼:Stringwhere="where1=1"; if(employee==null){ }else{ if(!employee.getLoginId().isEmpty()){ where+="andloginId="+"'"+employee.getLoginId()+"'"; } if(!employee.getName().isEmpty()){ where+="andnamelike"+"'%"+employee.getName()+"%'"; } if(!employee.getDepartment().isEmpty()){ where+="anddepartment="+"'"+employee.getDepartment()+"'"; } if(!(employee.getState()==-1)){ where+="andstate="+employee.getState(); } } Stringsql="select*fromemployee"+where;5.5.4部門管理模塊部門管理模塊是管理層對本企業(yè)部門設置的管理包括新增、查詢、修改和刪除部門等功能,見圖5-8。圖5-8部門管理頁面5.5.5公告管理模塊公告管理模塊是領導對本系統(tǒng)中的所用子級用戶進行發(fā)布公告。管理層可以發(fā)布和刪除公告。普通員工只可以查看公告,見圖5-9,5-10。圖5-9發(fā)布公告頁面圖5-10查看公告頁面關鍵代碼:前臺頁面attendRecord.jsp:<trbgcolor="#4D4D4D"> <tdclass="out">序號</td> <tdclass="out">標題</td> <%--<td>內容</td>--%> <tdclass="out">作者</td> <tdclass="out">所屬部門</td> <tdclass="out">作成日時</td> <tdclass="out">操作</td></tr><s:iteratorvalue="noticeList"var="notice"status="st"><tr><tdclass="in"><s:propertyvalue="#notice.id"/></td> <tdclass="in"><ahref="javascript:toUpdate('notice!SearchNoticeById?notice.id=<s:propertyvalue="#notice.id"/>')"> <s:propertyvalue="#notice.title"/> </a> </td> <%--<td><s:propertyvalue="#notice.content"/></td>--%> <tdclass="in"><s:propertyvalue="#notice.writer"/></td> <tdclass="in"><s:propertyvalue="#notice.depname"/></td> <tdclass="in"> <s:datename="#notice.add_time"format="yyyy-MM-dd"/></td> <tdclass="in"><ahref="javascript:toDel('notice!DeleteNotice?notice.id=<s:propertyvalue="#notice.id"/>')">刪除</a></td></tr></s:iterator>后臺AttendAction.java://判斷是否已經登記過 if(attendanceService.SearchByExample(attendance.getLoginId(),attendance.getDate())){ this.addFieldError("error","您已經登記過!"); attendance=attendanceService.Search(attendance.GetLoginId(),attendance.getDate()); returnINPUT; } //判斷是否遲到(遲到的時間) if(!attendance.getStart_work().isEmpty()){ Stringh=(attendance.getStart_work()).substring(0,2); Stringm=(attendance.getStart_work()).substring(3,5); if(Integer.parseInt(h)<9){//九點之前簽到 attendance.setLate_time(0.0); }elseif(Integer.parseInt(m)<=5&&Integer.parseInt(h)<10){//九點零五分之前到 attendance.setLate_time(0.0); }else{//遲到 //四舍五入保留兩位小數(shù) attendance.setLate_time((Double.parseDouble(h)-9)+Math.round(Double.parseDouble(m)/60*100)/100.0); } } //登記 if(attendanceService.AddStartRecord(attendance)){ attendance=attendanceService.Search(attendance.getLoginId(),attendance.getDate()); returnSUCCESS; }5.5.6請假管理模塊請假管理模塊是對企業(yè)員工請假申請和銷假的管理。員工請假首先需要填寫假條,然后提交等待領導的審批。員工查看假條狀態(tài),審批通過方可休假。員工回到公司需要銷假,確認具體請假的天數(shù)和日期,分別見圖5-11,5-12,5-13,5-14。圖5-11填寫假條頁面圖5-12查看假條狀態(tài)頁面圖5-13領導審批假條頁面圖5-14銷假確認頁面5.5.7個人考勤模塊個人考勤模塊主要實現(xiàn)員工每天的上班登記、下班登記和記錄查看。員工到班需要點擊上班登記,下班之前需要點擊下班登記。上班登記:記錄員工的上班時間、是否遲到等信息,見圖5-15。圖5-15上班登記頁面下班登記:記錄員工的下班時間,是否早退和計算出當天的工作時間,見圖5-16。圖5-16下班登記頁面關鍵代碼:<tr><tdalign="center"><imgalt="上班登記"height="50"width="50"src="<%=basePath%>/images/on.jpg"onclick="doAction('attendance!AddStartRecord?attendance.loginId=${loginId}&attendance.start_work=<%=time%>&attendance.date=<%=date%>');"><br>上班登記</td><tdalign="center"><imgalt="下班登記"height="50"width="50" src="<%=basePath%>/images/off.jpg" onclick="doAction1('attendance!AddOverRecord?attendance.loginId=${loginId}&attendance.over_work=<%=time%>&attendance.date=<%=date%>&attendance.start_work=${attendance.start_work}');"> <br>下班登記</td></tr>記錄查看:查看員工個人考勤的歷史記錄,見圖5-17。圖5-17歷史記錄查看頁面5.5.8考勤管理模塊考勤管理模塊是企業(yè)領導對企業(yè)員工個人考勤的匯總管理。主要實現(xiàn)當月考勤報表的生成和對員工和部門的考勤匯總,分別見圖5-18,5-19,5-20。圖5-18考勤報表生成頁面圖5-19員工考勤匯總頁面圖5-20部門考勤匯總頁面6系統(tǒng)測試6.1系統(tǒng)測試的目的和意義系統(tǒng)測試的目的是發(fā)現(xiàn)編程過程中存在的問題和系統(tǒng)使用不合理的操作。成功的測試可以找到很容易忽略的或者極難發(fā)現(xiàn)的錯誤。進行系統(tǒng)測試就是希望在系統(tǒng)正式使用前盡可能多的發(fā)現(xiàn)系統(tǒng)存在的問題,并尋找解決的方案,不斷的修改,最終得到比較完善的系統(tǒng)。6.2測試在完成本系統(tǒng)之后,我對本系統(tǒng)進行了一些簡單的測試。測試的主要內容包括數(shù)據(jù)錄入驗證(是否為制定的類型)、查詢測試、數(shù)據(jù)重復驗證等。6.2.1數(shù)據(jù)錄入驗證數(shù)據(jù)錄入驗證測試確保數(shù)據(jù)庫插入數(shù)據(jù)的合法性,非法的數(shù)據(jù)錄會讓系統(tǒng)發(fā)生異常,影響系統(tǒng)正常運行。因此數(shù)據(jù)驗證是非常必要的。非空驗證測試:輸入:員工編號=A0010,員工姓名:空輸出:見圖6-1。圖6-1非空驗證測試數(shù)值型數(shù)據(jù)錄入測試:輸入:本月天數(shù)=a(天數(shù)應為整數(shù)類型)輸出:見圖6-2圖6-2數(shù)值類型驗證測試6.2.2查詢測試本系統(tǒng)的查詢支持多條件查詢,特定的查詢條件可以模糊查詢。以員工信息查詢?yōu)槔郎y試如下:多條件查詢:輸入:員工編號=空;員工姓名=空;所屬部門=研發(fā)部;員工權限=普通員輸出:見圖6-3圖6-3多條件查詢測試模糊查詢輸入:員工編號=空;員工姓名=三;所屬部門=不限;員工權限=不限輸出:見圖6-4圖6-4模糊查詢測試6.2.3重復數(shù)據(jù)測試有的數(shù)據(jù)是唯一的,不能重復出現(xiàn)的,比如員工編號。在錄入新增員工信息時,員工的編號是不能重復的。輸入:員工編號=A0001輸出:見圖6-5圖6-5重復數(shù)據(jù)測試結論通過本系統(tǒng)為期四個月的設計,我付出了許多,當然也從這個過程中學到了很多,不論是分析問題的能力還是技術方面都得到了提升。當然在系統(tǒng)設計的過程中,我也遇到了很多的困難。我也感到很郁悶,不過既然決定認真去完成這個系統(tǒng),我只有靜下心來分析問題出在哪里,然后尋找解決的方法。通過上網查找資料和請教他人但,我最終還是把問題一個一個的解決了?,F(xiàn)在回頭看看,我心里還是很開心,應為從這個過程中,我獲得了成就感。在技術方面,我通過這個設計無論是對Java語言、Mysql或是SQL語言我都有了質的提高。但是在技術的過程中,我也是遇到了一些實戰(zhàn)的問題,而這些問題就成了我的絆腳石,我通過查看參考書和網上的解決辦法也解決了一部分,比如說,分頁的問題,通過查閱資料,和不斷的嘗試最終還被我是解決了?,F(xiàn)在我終于把這個系統(tǒng)做好了。其實也是有一種很好的成就感,不管最終結果怎樣,至少我已經收獲了過程。參考文獻[1]孫衛(wèi)琴.Tomcat與JavaWeb開發(fā)技術詳解[M].電子工業(yè)出版社,2009.[2]祝定澤,張海,黃建昌.MySQL核心內幕[M].北京:清華大學出版社,2010.[3]王毅.JSP程序開發(fā)范例寶典[M].人民郵電出版社,2007.[4]程志艷,張亮,馬建紅.JSP實用簡明教程[M].清華大學出版社,2005.[5]陳丹丹.JavaWeb典型模塊與項目實戰(zhàn)大全[M].電子工業(yè)出版社,2012.[6]李斌,孫巖,王康壽,鄭尚魁.教學網站設計.學科建設[J].遠程教育,2005.[7]于海霞,王家騏.基于Struts的WEB框架設計與應用[J].電腦知識與技術,2010.[8]耿偉,劉振海,孫磊.Struts2框架技術的研究與分析[J].電腦知識與技術,2008.[9]孫良軍.HTML+CSS+JavaScript網頁設計與布局實用教程[M].北京:清華大學出版社,2011.[10]勞鳳丹.基于WEB的高校公房管理系統(tǒng)的設計與實現(xiàn)[M].清華大學出版社,2012.[11]王征.JavaScript網頁特效實例大全[M].北京:清華大學出版社,2006.[12]陳雄華.精通MyEclipse[M].北京:電子工業(yè)出版社,2009.[13]陸凌牛.HTML+CSS網頁設計指南[M].機械工業(yè)出版社,2011.[14]閆建強.Web服務開發(fā)學習實錄[M].清華大學出版社,2011.[15]張芳芳.CSSWeb開發(fā)學習實錄[M].清華大學出版社,2011.附錄附錄1工程的配置文件web.xml:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list><!--注冊中文亂碼過濾器--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>cn.hdj.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--struts2核心過濾器--> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>Struts的配置文件struts.xml:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd"><struts> <constantname="struts.il8n.encoding"value="UTF-8"></constant> <packagename="user"extends="struts-default"namespace="/"> <actionname="login"class="cn.hdj.action.LoginAction"> <resultname="admin">/index.jsp</result> <resultname="common">/index_1.jsp</result> <resultname="input">/login.jsp</result> <resultname="update_success">/message/successed.jsp</result> <resultname="update_failed">/users/updatePassword.jsp</result> </action> <actionname="employee"class="cn.hdj.action.EmployeeAction"> <resultname="success">/message/successed.jsp</result> <resultname="error">/message/error.jsp</result> <resultname="input">/users/addEmployee.jsp</result> <resultname="idcheck">/users/addEmployee.jsp</result> <resultname="show">/users/searchEmployee.jsp</result> <resultname="update">/users/updateEmployee.jsp</result> <resultname="oneself">/users/showOneselfInfo.jsp</result> <resultname="telBook">/users/telBook.jsp</result> </action> <actionname="dep"class="cn.hdj.action.DepAction"> <resultname="success">/message/ok.jsp</result> <resultname="error">/message/error.jsp</result> <resultname="input">/admin/addDep.jsp</result> <resultname="show">/admin/searchDep.jsp</result> <resultname="toShow">/users/showDep.jsp</result> <resultname="showDep">/users/addEmployee.jsp</result> <resultname="update">/admin/updateDep.jsp</result> </action> <actionname="notice"class="cn.hdj.action.NoticeAction"> <resultname="success">/message/successed.jsp</result> <resultname="error">/message/error.jsp</result> <resultname="input">/notice/addNotice.jsp</result> <resultname="show">/notice/searchNotice.jsp</result> <resultname="showOne">/notice/notice.jsp</result> <resultname="toShow">/notice/showNotice.jsp</result> </action> <actionname="leave"class="cn.hdj.action.LeaveAction"> <resultname="success">/message/ok.jsp</result> <resultname="error">/message/error.jsp</result> <resultname="input">/leave/addLeave.jsp</result> <resultname="show">/leave/searchLeave.jsp</result> <resultname="showAll">/leave/searchAllLeave.jsp</result> <resultname="over">/leave/overLeave.jsp</result> <resultname="approve">/leave/approve.jsp</result> <resultname="update">/leave/overLeavePre.jsp</result> </action> <actionname="attendance"class="cn.hdj.action.AttendanceAction"> <resultname="success">/attend/attendRecord.jsp</result> <resultname="ok">/attend/attendRecord.jsp</result> <resultname="error">/message/error.jsp</result> <resultname="input">/attend/attendRecord.jsp</result> <resultname="history">/attend/historyRecord.jsp</result> <resultname="historyAll">/attend/historyRecord_all.jsp</result> </action> <actionname="total"class="cn.hdj.action.TotalAction"> <resultname="success">/admin/createTotal.jsp</result> <resultname="toShow">/admin/searchTotal.jsp</result> <resultname="depTotal">/admin/searchDepTotal.jsp</result> </action> </package></struts>數(shù)據(jù)庫配置文件c3p0-config.xml:<?xmlversion="1.0"encoding="UTF-8"?><c3p0-config><!--默認配置,在ComboPooledDataSource()構造方法中不寫任何東西--> <default-config> <!--配置數(shù)據(jù)庫的連接信息--> <propertyname="jdbcUrl">jdbc:oracle:thin:@3:1521:orcl</property> <propertyname="user">scott</property> <propertyname="password">tiger</property> <propertyname="driverClass">oracle.jdbc.driver.OracleDriver</property> <!--初始化數(shù)據(jù)庫連接池的大小--> <propertyname="initialPoolSize">10</property> <propertyname="maxIdleTime">30</property> <!--配置最大的連接池數(shù)量--> <propertyname="maxPoolSize">20</property> <propertyname="minPoolSize">2</property> <propertyname="maxStatements">200</property> <user-overridesuser="test-user"> <propertyname="maxPoolSize">10</property> <propertyname="minPoolSize">1</property> <propertyname="maxStatements">0</property> </user-overrides> </default-config><!--Thisappismassive!--> <!--name為mysql的配置,在ComboPooledDataSource()構造方法中寫上"mysql"--> <named-configname="mysql"> <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/eeams?useUnicode=true&characterEncoding=utf-8</property> <propertyname="user">root</property> <propertyname="password">www2335506</property> <propertyname="driverClass">com.mysql.jdbc.Driver</property> <!--初始化數(shù)據(jù)庫連接池的大小--> <propertyname="initialPoolSize">10</property> <propertyname="maxIdleTime">30</property> <!--配置最大的連接池數(shù)量--> <propertyname="maxPoolSize">20</property> <propertyname="minPoolSize">2</property> <propertyname="maxStatements">200</property> </named-config></c3p0-config>附錄2考勤登記關鍵代碼:Jsp:<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="s"uri="/struts-tags"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%java.text.SimpleDateFormatformatter=newjava.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss");java.util.DatecurrentTime=newjava.util.Date();//得到當前系統(tǒng)時間Stringstr_date=formatter.format(currentTime);//將日期時間格式化Stringstr_date2=currentTime.toString();//將Date型日期時間轉換成字符串形式Stringdate=str_date.substring(0,10);Stringtime=str_date.substring(11,19);%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>"><title>MyJSP'attendRecord.jsp'startingpage</title> <metahttp-equiv="pragma"content="no-cache"> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0"> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description"content="Thisismypage"> <linkrel="stylesheet"type="../css/common.css"href="styles.css"> <SCRIPTtype="text/javascript">functiondoAction(url){ document.forms[0].method="post"; document.forms[0].action=url; document.forms[0].submit();}functiondoAction1(url){if(confirm("確定現(xiàn)在下班?")){document.forms[0].method="post"; document.forms[0].action=url; document.forms[0].submit();}} </SCRIPT></head><body><FONTcolor="red"><s:fielderrorfieldName="error"></s:fielderror></FONT><center><formaction="attendance!AddStartRecord"name="form1"method="post"><tablewidth="100%"border="1"bordercolor="#D1EEEE"cellspacing="0"><tr><tdalign="center"><imgalt="上班登記"height="50"width="50"src="<%=basePath%>/images/on.jpg"onclick="doAction('attendance!AddStartRecord?attendance.loginId=${loginId}&attendance.start_work=<%=time%>&attendance.date=<%=date%>');"><br>上班登記</td><tdalign="center"><imgalt="下班登記"height="50"width="50"src="<%=basePath%>/images/off.jpg"onclick="doAction1('attendance!AddOverRecord?attendance.loginId=${loginId}&attendance.over_work=<%=time%>&attendance.date=<%=date%>&attendance.start_work=${attendance.start_work}');"> <br>下班登記</td></tr><trbgcolor="#DEDEDE"><tdcolspan="2"align="center"><b>今天的考情記錄</b></td></tr></table><divstyle="border-color:red;border-style:none"id="showTable"><tablewidth="100%"border="1"bordercolor="#D1EEEE"cellspacing="0"><trbgcolor="#DEDEDE"> <td>用戶姓名</td> <td>上班時間</td> <td>下班時間</td> <td>工作時長(h)</td> <td>遲到時間(h)</td> <td>早退時間(h)</td> <td>工作性質</td></tr><trheight="100"><td>${}</td> <td>${attendance.start_work}</td> <td>${attendance.over_work}</td> <td>${attendance.work_time}</td> <td>${attendance.late_time}</td> <td>${attendance.early_time}</td> <s:iftest="%{attendance.state==0}"> <td><fontcolor="red">工作時間不足8小時</font></td> </s:if> <s:else> <s:iftest="%{#attendance.state==1}"> <td><fontcolor="green">正常班</font></td> </s:if> <s:elseiftest="%{#attendance.state==2}"> <td><fontcolor="blue">加班</font></td> </s:elseif> </s:else></tr></table></div></form></center></body></html>Action:/***@author胡大景*2013-3-21*@version*/packagecn.hdj.action;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.List;importmon.BeansFactory;importmon.Paging;importcn.hdj.model.Attendance;importcn.hdj.model.Employee;importcn.hdj.service.AttendanceService;importcn.hdj.service.EmployeeService;importcom.opensymphony.xwork2.ActionSupport;/***個人考勤**/publicclassAttendanceActionextendsActionSupport{ /** * */ privatestaticfinallongserialVersionUID=1L; privateAttendanceattendance; privateEmployeeemployee; privateList<Attendance>attendanceList; privateStringyears; privateStringmonths; privateStringdays; privateStringcur_page; privateStringtoolBar; AttendanceServiceattendanceService=(AttendanceService)BeansFactory.getBean("attendanceService"); EmployeeServiceemployeeService=(EmployeeService)BeansFactory.getBean("employeeService"); //上班登記 publicStringAddStartRecord(){ employee=employeeService.searchEmployeeByLoginId(attendance.getLoginId()); //判斷是否已經登記過 if(attendanceService.SearchByExample(attendance.getLoginId(),attendance.getDate())){ this.addFieldError("error","您已經登記過!"); attendance=attendanceService.Search(attendance.getLoginId(),attendance.getDate()); returnINPUT; } //判斷是否遲到(遲到的時間) if(!attendance.getStart_work().isEmpty()){ Stringh=(attendance.getStart_work()).substring(0,2); Stringm=(attendance.getStart_work()).substring(3,5); if(Integer.parseInt(h)<9){//九點之前簽到 attendance.setLate_time(0.0); }elseif(Integer.parseInt(m)<=5&&Integer.parseInt(h)<10){//九點零五分之前到 attendance.setLate_time(0.0); }else{//遲到 //四舍五入保留兩位小數(shù) attendance.setLate_time((Double.parseDouble(h)-9)+Math.round(Double.parseDouble(m)/60*100)/100.0); } } //登記 if(attendanceService.AddStartRecord(attendance)){ attendance=attendanceService.Search(attendance.getLoginId(),attendance.getDate()); returnSUCCESS; } returnERROR; } //下班登記 publicStringAddOverRecord(){ employee=employeeService.searchEmployeeByLoginId(attendance.getLoginId()); //判斷是否已經登記過 if(!attendanceService.SearchByExample(attendance.getLoginId(),attendance.getDate())){ this.addFieldError("error","您尚未進行上班登記操作!"); returnINPUT; } Stringover=attendance.getOver_work().substring(0,2); AttendanceattendanceTemp=attendanceService.Search(attendance.getLoginId(),attendance.getDate()); Stringstart=attendanceTemp.getStart_work().substring(0,2); if(Integer.parseInt(over)-Integer.parseInt(start)>9){ attendance.setState(2);//加班 }elseif(Integer.parseInt(over)-Integer.parseInt(start)>8){ attendance.setState(1);//正常班 }else{ attendance.setState(0); } attendance.setWork_time(getWork_time(attendanceTemp.getStart_work(),attendance.getOver_work())); //判斷是否早退(早退的時間) if(!attendance.getOver_work().isEmpty()){ Stringh=(attendance.getOver_work()).substring(0,2); Stringm=(attendance.getOver_work()).substring(3,5); if(Integer.parseInt(h)>=18){//十八點之后下班 attendance.setEarly_time(0.0); }elseif(Integer.parseInt(m)>=45&&Integer.parseInt(h)>=17){//十七點四十五之后下班 attendance.setEarly_time(0.0); }else{//早退 //四舍五入保留兩位小數(shù) attendance.setEarly_time((18-Double.parseDouble(h))-Math.round(Double.parseDouble(m)/60*100)/100.0); } } //登記 if(attendanceService.AddOverRecord(attendance)){ attendance=attendanceService.Search(attendance.getLoginId(),attendance.getDate()); returnSUCCESS; } returnERROR; } //歷史記錄(all) publicStringHistoryRecordAll(){ Stringdate=years; if(!months.equals("00")){ date+="-"+months; if(days!=""){ if(days.length()==1){ date+="-0"+days; }else{ date+="-"+days; } } } attendanceList=attendanceService.SearchByLoginId(attendance.getLoginId(),date); /

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論