人事管理系統(tǒng)綜合設計報告.doc
《人事管理系統(tǒng)綜合設計報告.doc》由會員分享,可在線閱讀,更多相關《人事管理系統(tǒng)綜合設計報告.doc(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
綜合課程設計 題目: 人事管理系統(tǒng) 目錄 第1章 課題關鍵技術 2 1.1 B/S結構的數(shù)據(jù)訪問模式 2 1.2 MyEclipse 簡介 2 1.3 oracle數(shù)據(jù)庫簡介 3 1.4 開發(fā)技術簡介 3 第2章 系統(tǒng)需求分析 4 2.1 目標 4 2.2 一般性需求 4 2.3 功能簡介 4 2.4 可行性分析 5 2.5 軟硬件環(huán)境要求 6 第3章 系統(tǒng)總體設計 6 3.1 系統(tǒng)總體架構 7 3.2 功能模塊細分與設計 8 3.2.1 部門管理模塊 8 3.2.2 崗位管理模塊 9 3.2.3 員工入職管理模塊 10 3.2.4試用期員工管理模塊 10 3.2.5 部門調動管理模塊 11 3.2.6 崗位調動管理模塊 12 第4章 系統(tǒng)詳細設計 13 4.1 系統(tǒng)類設計 13 4.1.1 實體類設計 14 4.2 數(shù)據(jù)庫設計 25 4.2.1 數(shù)據(jù)庫模型設計 25 第5章 源代碼設計 27 5.1 對數(shù)據(jù)庫的操作的部分代碼 27 5.3 數(shù)據(jù)庫的更新操作 33 第6章 系統(tǒng)測試 41 6.1 黑盒測試和白盒測試 41 6.2 測試準則 42 6.3 白盒測試 42 第7章 結論 43 參考文獻 44 第1章 課題關鍵技術 1.1 B/S結構的數(shù)據(jù)訪問模式 B/S(Browser/Server)結構,即瀏覽器/服務器模式,當前在web數(shù)據(jù)庫開發(fā)中應用較廣泛的一種模式,它是隨著Internet技術的興起,從傳統(tǒng)的二層C/S(客戶機/服務器)模式發(fā)展起來的新的網(wǎng)絡結構模式,其本質是三層結構C/S模式。在這種結構下,用戶工作界面是通過WWW瀏覽器來實現(xiàn),極少部分事務邏輯在前端(Browser)實現(xiàn)。但是主要事務邏輯在服務器端(Server)實現(xiàn),形成所謂三層結構。這樣就大大簡化了客戶端電腦載荷,減輕了系統(tǒng)維護與升級的成本和工作量,降低了用戶的總體成本,如圖1-1所示。 圖1-1 三級結構組成 1.2 MyEclipse 簡介 本次系統(tǒng)開發(fā)所使用的前臺開發(fā)技術為Java,所使用的軟件為MyEclipse。Java是一種軟件技術,是一種由美國SUN計算機公司所研究而成的語言,是一種較為高級的編程語言。利用它可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以及應用程序服務器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、調試、測試和發(fā)布功能,能夠支持HTML,Struts,JSP,CSS,Javascript,SQL。同時,MyEclipse10.0為用戶提供了高效、便捷的操作環(huán)境和友好的可視化操作界面。 1.3 oracle數(shù)據(jù)庫簡介 Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數(shù)據(jù)庫管理系統(tǒng)。到目前仍在數(shù)據(jù)庫市場上占有主要份額。 ORACLE 數(shù)據(jù)庫系統(tǒng)是美國ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫為核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數(shù)據(jù)庫之一。比如SilverStream就是基于數(shù)據(jù)庫的一種中間件。ORACLE數(shù)據(jù)庫是目前世界上使用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),作為一個通用的數(shù)據(jù)庫系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個關系數(shù)據(jù)庫,它是一個完備關系的產品;作為分布式數(shù)據(jù)庫它實現(xiàn)了分布式處理功能。但它的所有知識,只要在一種機型上學習了ORACLE知識,便能在各種類型的機器上使用它。 1.4 開發(fā)技術簡介 JSP技術 JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術標準。 JSP技術是用JAVA語言作為腳本語言的,JSP網(wǎng)頁為整個服務器端的JAVA庫單元提供了一個接口來服務于HTTP的應用程序。 JSP技術有點類似ASP技術,它是在傳統(tǒng)的網(wǎng)頁HTML文件中插入Java程序段和JSP標記,從而形成JSP網(wǎng)頁。所有程序操作都在服務器端運行,網(wǎng)絡上傳送給客戶端的僅是得到的結果,與客戶端的瀏覽器無關,因此,JSP稱這Server-side Language。所以被許多人認為是未來最有發(fā)展前途的動態(tài)網(wǎng)站技術之一。 第2章 系統(tǒng)需求分析 2.1 目標 本系統(tǒng)的總體目標是搭建用人單位的人事信息管理平臺,不僅滿足目前的業(yè)務需要,還要滿足公司的未來的發(fā)展,而且要具備良好的擴展性,形成公司未來人力資源管理信息化平臺。 2.2 一般性需求 一、集中數(shù)據(jù)管理、分布式應用,實現(xiàn)信息的全面共享,為決策者提供最新的人力資源數(shù)據(jù)。 二、完全基于瀏覽器的操作模式,安裝簡單,操作方便,具有良好的系統(tǒng)擴展能力。 三、靈活的模塊需求設計。 2.3 功能簡介 本次課設的標題為人事管理系統(tǒng),完成的是其中的部門管理模塊,其基本功能的分析如下: 2.3.1 部門管理 部門管理主要實現(xiàn)了兩個模塊,一個是新建部門,這是一個必不可少的模塊,其他的操作均要根據(jù)部門的各種關聯(lián)來解決;一個是部門列表,在部門列表中可以根據(jù)不同的條件進行查詢,可以全部輸入,也可以部分輸入。在查詢出來的部門列表中,可以對部門進行操作,其操作有:修改-----對部門除了部門編號以外的信息進行修改,查詢------對部門下的員工進行查詢,刪除--------對部門進行刪除(其中若是該部門下有員工,則不能進行該操作)。 2.3.2 崗位管理 崗位管理下有三個模塊,分別是:新建崗位,在該模塊下,可以建立一個新的崗位,其中每一個崗位都屬于其中的一個部門。崗位列表,在該模塊下可對崗位進行查詢,其中可以輸入全部條件進行查詢,也可以輸入部分內容進行查詢,在該查詢中,有可以進行如下操作:修改------對部門信息進行修改;崗位下員工信息-------對該崗位下的員工進行查詢;刪除----讀崗位進行刪除。第三個模塊:崗位刪除-------輸入崗位編號,刪除該崗位。 2.3.3 員工入職管理 本模塊較為簡單。但也是相當重要的一塊。本模塊只有一個簡單的對個人數(shù)據(jù)進行插入 2.3.4 試用期員工管理 本模塊中,點擊試用期員工查詢,進入查詢頁面,可以通過員工編號、員工姓名、試用期狀態(tài)、所在部門、所在崗位、開始日期、結束日期進行查詢。進入查詢后,查詢出來的表中可以進行“操作”的操作,本操作可以更改員工的試用期狀態(tài);正常、延期、不錄用、轉正操作。員工轉正查詢中可以根據(jù)員工編號、員工姓名、所在部門、所在崗位、開始日期、以及結束日期進行查詢員工的轉正員工。 2.3.5 部門調動管理 部門調動模塊主要進行部門調動和已調動部門員工的查詢。部門調動中可以通過員工編號、員工名稱、部門編號、部門名稱進行查詢。查詢出信息后。選擇其中的單選按鈕,在點擊提交,進入了部門調動頁面,填入選項信息后可進行部門的調動??梢栽谝颜{動部門員工查詢中查詢出已經掉的部門的員工信息。 2.3.6 崗位調動管理 崗位調動管理中可以進行崗位調動、已調動員工崗位查詢兩個操作;在崗位調動中,可以通過部門編號、部門名稱、員工編號、員工姓名之中的任意選項進行查詢;查詢出結果后可以進行別的操作,點擊崗位調動,進入了崗位調動操作頁面,頁面填入信息后進行崗位調動。 崗位調動完后,通過在職員工查詢可以進行員工查詢。 2.3.7 員工離職管理 員工離職管理中主要有離職辦理,離職員工信息查詢兩個模塊,離職辦理中,可進行離職,離職后的員工可以在離職員工信息查詢中進行查詢。 2.4 可行性分析 人事管理系統(tǒng)進行有效的可行性分析??尚行苑治鍪鞘澜缟掀毡椴捎玫囊环N研究工程項目是否可行的科學技術。主要是在系統(tǒng)調查的基礎上,針對新系統(tǒng)的開發(fā)是否具備必要性和可能性的一種分析和研究,主要會從經濟、技術、社會的方面來進行分析和研究,以減少項目開發(fā)風險,避免人力、物力和財力的浪費。 新系統(tǒng)的目標確定后,就可以從以下三方面對能否實現(xiàn)新系統(tǒng)目標進行可行性分析: (1)技術可行性。根據(jù)新系統(tǒng)目標來衡量所需的技術是否具備,一般可從硬件、軟件的性能要求、環(huán)境條件、技術人員水平和數(shù)量等方面去考慮和分析,其中開發(fā)人員的技術力量應首先考慮能力與水平,并考慮近期內可以培養(yǎng)和發(fā)展的技術人員。 (2)運行可行性。本系統(tǒng)具有操作簡單。系統(tǒng)功能、顯示內容簡單明了。操作者不必具有較高的計算機專業(yè)知識,也不必進行專門培訓,只要經過短時間的操作就可以很快掌握并熟練使用。 2.5 軟硬件環(huán)境要求 軟件要求: l 版本控制:SVN-1.7.4 l 數(shù)據(jù)庫:oracle IDE:MyEclipse 10.0 系統(tǒng)平臺:win7 l 瀏覽器:IE瀏覽器 l JDK:1.6版本以上 l 中間件: Tomcat 6.0 硬件要求:CPU Intel586/50MHZ或更高、內存在512MB或更高。 第3章 系統(tǒng)總體設計 3.1 系統(tǒng)總體架構 系統(tǒng)采用 MVC3三層架構,在C層對用servlet實現(xiàn)對用戶的請求,再去調用service中DAO的借口實現(xiàn)對數(shù)據(jù)庫中的操作,數(shù)據(jù)庫是 oracle。 人事管理系統(tǒng) 登錄框 員工入職管理 崗位管理 部門管理 員工離職管理 崗位調動管理 部門調動管理 試用期員工管理 人事管理系統(tǒng)的整體結構、功能模塊 MVC 架構 即模型,視圖,控制器。 Model 實現(xiàn)系統(tǒng)的業(yè)務邏輯,表示企業(yè)數(shù)據(jù)和業(yè)務規(guī)則,通常對應著一些和數(shù)據(jù)庫表映射的實體類和實現(xiàn)業(yè)務邏輯的方法。 View 層只負責界面的展示,對jsp文檔。 Controller 層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當?shù)囊晥D以呈現(xiàn),同時它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。 MVC中所有的用戶請求都由 Controller 中的 Servlet 來處理,Servlet根據(jù)請求會從 View 層得到用戶的輸入,轉換為對應的 Model 對象,然后把 Model 對象寫入數(shù)據(jù)庫進行數(shù)據(jù)持久化。相反 Controller 也負責從數(shù)據(jù)庫中取出數(shù)據(jù),封轉成Model 對象,然后把Model 對象傳到 View 進行顯示。 由于 MVC 的分層,模塊之間的耦合性降低。視圖層和業(yè)務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業(yè)務流程或者業(yè)務規(guī)則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數(shù)據(jù)層和業(yè)務規(guī)則。 本系統(tǒng)是完全基于MVC三層架構完成。 3.2 功能模塊細分與設計 在這一部分,我們將各個子系統(tǒng)模塊進一步劃分子模塊,劃分的子模塊與各個模塊功能說明如下。 3.2.1 部門管理模塊 部門管理模塊主要包括新建部門、查詢部門。 如圖所示:部門管理 部門管理 查詢部門 新建部門 模塊主要功能如下: (1) 新建部門,新建一個部門。 (2) 查詢部門,查詢有哪些部門。 用戶 新建部門 部門列表 部門管理 3.2.2 崗位管理模塊 崗位管理模塊主要包括新建崗位、崗位列表、崗位刪除。 如圖 所示: 崗位管理 新建崗位 崗位列表 崗位刪除 崗位管理模塊用例 新建崗位 崗位列表 崗位管理 崗位刪除 模塊主要功能如下: (1)新建崗位,建立一個新的崗位。 (2)崗位列表,可以查詢出各個崗位。 (3)崗位刪除,刪除一個崗位。 3.2.3 員工入職管理模塊 員工入職用于錄入員工信息 模塊主要功能如下: (1) 錄入員工信息 3.2.4試用期員工管理模塊 試用期員工管理模塊主要用于對試用期員工的操作。如圖所示: 試用期員工管理 試用期員工查詢 轉正員工查詢 試用期員工管理模塊用例 試用期員工查詢 試用期管理 轉正員工查詢 模塊主要功能如下: (1) 試用期員工查詢,主要用于查看試用期的員工。 (2) 轉正員工查詢,主要用于查詢轉正的員工。 3.2.5 部門調動管理模塊 部門調動管理模塊主要進行部門調動和已調動部門員工查詢。如圖所示: 部門調動管理 已調動部門員工查詢 部門調動 部門調動管理用例 部門調動 部門調動 調動員工查詢 模塊主要功能如下: (1) 部門調動,對員工的部門進行更改。 (2) 已調動部門員工查詢,對已經調動部門的員工進行查詢。 3.2.6 崗位調動管理模塊 崗位調動管理 崗位調動管理主要進行崗位調動和已調動崗位員工查詢。 如圖 3-8所示 崗位調動 已調動崗位員工查詢 崗位調動模塊用例 崗位調動 崗位調動 已調動崗位的員工查詢 模塊主要功能如下: (1) 崗位調動,對員工進行崗位改變。 (2) 已調動員工查詢,對調動崗位的員工進行查詢。 第4章 系統(tǒng)詳細設計 詳細設計階段的任務就是把在總體設計階段提出的比較抽象概括的解決問題的方法具體化,也就是“應該怎樣具體地實現(xiàn)這個系統(tǒng)”。程序員可以根據(jù)詳細設計進行代碼的編寫。在本階段將包括系統(tǒng)的類設計和數(shù)據(jù)庫的設計,確定實現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結構。 4.1 系統(tǒng)類設計 系統(tǒng)的類設計是根據(jù)系統(tǒng)的用例圖和總體設計時對系統(tǒng)的分析,抽象出系統(tǒng)的實體類,由業(yè)務邏輯抽象出一些處理系統(tǒng)業(yè)務邏輯的類包括一些數(shù)據(jù)結構和算法類,并進行數(shù)據(jù)的持久化。程序員可以根據(jù)類圖進行編碼實現(xiàn)系統(tǒng)的功能。 4.1.1 實體類設計 根據(jù)前面的分析需要我們抽象出了系統(tǒng)的實體類,這些實體類都需要進行持久化,它們和數(shù)據(jù)庫中的表存在映射關系,為數(shù)據(jù)庫表的設計提供了依據(jù),實體類圖如圖 4-1 所示: 4.2 數(shù)據(jù)庫設計 4.2.1 數(shù)據(jù)庫模型設計 重要的部分數(shù)據(jù)庫表的建設 崗位表 (createdepartment) 屬性 類型 說明 deptno varchar(22) 部門編號在22以內,為主鍵 dname varchar(22) 部門名稱小于22位 dstyle varchar(22) 部門還是公司 phonenumber varchar(22) 電話號碼 builddate varchar(22) 建立日期 員工信息(checkin) 屬性 類型 說明 userid varchar(22) 員工編號 username varchar(22) 員工姓名 sex varchar(22) 性別 borndate varchar(22) 出生日期 idcard varchar(22) 編號 deptno varchar(22) 部門號 pid varchar(22) 崗位id edtrydate varchar(22) 入職日期 workdate varchar(22) 工作日期 type varchar(22) 類型 hirefrom varchar(22) 離職 yearbegin varchar(22) 開始 yearend varchar(22) 結束 politic varchar(22) 黨員還是其他 nation varchar(22) 出生地 hometown varchar(22) 家鄉(xiāng) email varchar(22) 電子郵件 height varchar(22) 身高 blood varchar(22) 血型 xuewei varchar(22) 學位 craduateschool varchar(22) 畢業(yè)學校 profession varchar(22) 教授 craduatetime varchar(22) 畢業(yè)時間 work varchar(22) 工作 workreday varchar(22) 工作日期 marriage varchar(22) 是否結婚 psm(崗位管理) 屬性 類型 pid varchar(22) pno varchar(22) pname varchar(22) pstyle varchar(22) pmax varchar(22) varchar(22) firetable(離職表) 屬性 類型 id Varchar2(33) name Varchar2(33) job Varchar2(33) jobtype Varchar2(33) part Varchar2(33) year Varchar2(33) prikey Varchar2(33) account(登錄表) 屬性 類型 username varchar(20) passwor varchar(20) 第5章 源代碼設計 在完成需求分析、總體設計、詳細設計的幾個步驟、完成系統(tǒng)類圖后接下來我們就可以編碼實現(xiàn)了。在編碼的階段發(fā)現(xiàn)當員工的字段較多的時候,當從頁面上傳值,從request去取這些值的時候會有很多的get和set語句。在M層的BO和層的DTO進行數(shù)據(jù)轉化的時候會出現(xiàn)很多類似的代碼,在對數(shù)據(jù)庫進行操作的時候也會出現(xiàn)這樣的情況。對此就啟發(fā)了我們是否能對此優(yōu)化。經過反復的思考,利用反射機制,將這些操作都得以實現(xiàn),提高代碼的重用度,讓程序看起來更加優(yōu)雅,也具有相當?shù)撵`活性。 5.1 對數(shù)據(jù)庫的操作的部分代碼 package com.psm.model.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; import com.psm.model.dept.bo.DeptBo; import com.psm.model.dept.bo.DeptCheckin; public class DeptDao { Connection conn; public DeptDao(Connection conn) { this.conn = conn; } public DeptDao(){} /** * 修改部門 */ public boolean alert(DeptBo user)throws SQLException { boolean flag = false; if(user.getDeptno()!=null && ""!=user.getDeptno()) { PreparedStatement ps = conn.prepareStatement("update createdepartment set dname = ? ,dstyle = ?,phonenumber = ? ,builddate = ? where deptno = ?"); ps.setString(1,user.getDname() ); ps.setString(2, user.getDstyle()); ps.setString(3, user.getPhoneNumber()); ps.setString(4, user.getBuilddate()); ps.setString(5, user.getDeptno()); ps.executeUpdate(); ps.close(); flag = true; }else { flag = false; } return flag; } /** * 刪除一個部門 */ public void deptdel(String deptno)throws SQLException { PreparedStatement ps = conn.prepareStatement("delete from createdepartment where deptno=? "); ps.setString(1, deptno); ps.executeUpdate(); ps.clearBatch(); } /** * 新建一個部門時向數(shù)據(jù)庫中插入一個新的部門 */ public void insert(DeptBo user)throws SQLException { PreparedStatement ps = conn.prepareStatement("insert into createdepartment values(?,?,?,?,?)"); ps.setString(1, user.getDeptno()); ps.setString(2,user.getDname() ); ps.setString(3, user.getDstyle()); ps.setString(4, user.getPhoneNumber()); ps.setString(5, user.getBuilddate()); int i=ps.executeUpdate(); ps.close(); } /** * 查詢一個部門的全部員工 */ public List inquiry(String deptno)throws SQLException { List list = new ArrayList(); System.out.println("33"); PreparedStatement ps = conn.prepareStatement("select userid,username,sex,deptno,type from checkin where deptno = ?"); ps.setString(1, deptno); ResultSet rs = ps.executeQuery(); while(rs.next()) { DeptCheckin dc = new DeptCheckin(); dc.setDeptno(rs.getString("deptno")); dc.setSex(rs.getString("sex")); dc.setType(rs.getString("type")); dc.setUserid(rs.getString("userid")); dc.setUsername(rs.getString("username")); list.add(dc); System.out.println("44"); } System.out.println(list); return list; } /** * * @param deptno * @return * @throws SQLException */ public List checkup(String deptno)throws SQLException { List list = new ArrayList(); PreparedStatement ps = conn.prepareStatement("select deptno,dname,dstyle,phoneNumber,builddate from createdepartment where deptno = ? "); ps.setString(1, deptno); ResultSet rs = ps.executeQuery(); while(rs.next()) { DeptBo usercreate = new DeptBo(); usercreate.setDeptno(rs.getString("deptno")); usercreate.setDname(rs.getString("dname")); usercreate.setPhoneNumber(rs.getString("phoneNumber")); usercreate.setDstyle(rs.getString("dstyle")); usercreate.setBuilddate(rs.getString("builddate")); list.add(usercreate); return list; } return null; } /** * 根據(jù) 編號 和 名稱 以及部門查找部門信息 */ public List lookup(HashMap has)throws SQLException { List list = new ArrayList(); String s = ""; Set keys = has.keySet(); Iterator it = keys.iterator(); System.out.println("ssssssssss lookup"); while(it.hasNext()) { String keyName = (String)it.next(); String value = (String)has.get(keyName); if(!value.equals("") && value!=null) { s=s+keyName+" = "+""+value+""+" "+"and "; System.out.println(s); } } s=s.substring(0,s.length()- 4); String sql = "select deptno,dname,dstyle,phoneNumber,builddate from createdepartment where " + s ; PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()) { DeptBo usercreate = new DeptBo(); usercreate.setDeptno(rs.getString("deptno")); usercreate.setDname(rs.getString("dname")); usercreate.setPhoneNumber(rs.getString("phoneNumber")); usercreate.setDstyle(rs.getString("dstyle")); usercreate.setBuilddate(rs.getString("builddate")); list.add(usercreate); } return list; } } service的核心代碼 public boolean registerSuccess(String uname, String upass, String uemail, String image) { boolean flag=false; Session session=sessionFactory.openSession(); Transaction tx=session.beginTransaction(); User user=new User(); user.setUname(uname); user.setUpass(upass); user.setUemail(uemail); user.setImage(image); Serializable seria=session.save(user); if (seria!=null) { flag=true; } tx.commit(); session.close(); return flag; } 5.3 數(shù)據(jù)庫的更新操作 package com.psm.model.dept.service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import com.psm.ctrl.dept.dto.DeptCheckinDto; import com.psm.ctrl.dept.dto.DeptDto; import com.psm.model.dao.DeptDao; import com.psm.model.dept.bo.DeptBo; import com.psm.model.dept.bo.DeptCheckin; public class DepartmentService { private DeptDao userdao; private Connection conn; /** * 進行數(shù)據(jù)庫連接 */ public DepartmentService() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch (ClassNotFoundException e) { e.printStackTrace(); } try { conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger"); } catch (SQLException e) { e.printStackTrace(); } userdao = new DeptDao(conn); } /** * 刪除部門 */ public boolean delservice(String deptno) { System.out.println("2"); boolean flag = false; List list; try { list = userdao.inquiry(deptno); if( list.size()==0) { try { System.out.println("3"); conn.setAutoCommit(false); userdao.deptdel(deptno); conn.commit(); flag = true; } catch (SQLException e) { e.printStackTrace(); } }else { try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); } flag = false; } } catch (SQLException e1) { e1.printStackTrace(); } return flag; } /** * 查詢部門員工 */ public List inquiryemploy(String deptno) { List list = new ArrayList(); try { List li = userdao.inquiry(deptno); if(null!=li && !li.isEmpty()) { Iterator it = li.iterator(); while(it.hasNext()) { DeptCheckinDto dpdto = new DeptCheckinDto(); DeptCheckin bo = (DeptCheckin) it.next(); dpdto.setDeptno(bo.getDeptno()); dpdto.setSex(bo.getSex()); dpdto.setType(bo.getType()); dpdto.setUserid(bo.getUserid()); dpdto.setUsername(bo.getUsername()); list.add(dpdto); System.out.println(list); } } } catch (SQLException e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return list; } /** * 判斷是否已經存在了一個部門 */ public boolean checkdp(DeptDto dto) { //List list1 = new ArrayList(); String number = dto.getDeptno(); try { List list = userdao.checkup(number); if(null==list || list.isEmpty()) { } } catch (SQLException e) { e.printStackTrace(); } return true; } /** * 修改部門 */ public boolean alertinfo(DeptDto userdto) { boolean flaga =true; DeptBo ucreate = new DeptBo(); ucreate.setDeptno(userdto.getDeptno()); ucreate.setDname(userdto.getDname()); ucreate.setDstyle(userdto.getDstyle()); ucreate.setPhoneNumber(userdto.getPhoneNumber()); ucreate.setBuilddate(userdto.getBuilddate()); try { boolean b = userdao.alert(ucreate); conn.setAutoCommit(false); if(b == true) { conn.commit(); flaga = true; }else { flaga = false; conn.rollback(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } System.out.println("5"); return flaga; } /** * 創(chuàng)建一個新部門 */ public boolean insertInto(DeptDto userdto) { boolean flaga =false; DeptBo ucreate = new DeptBo(); ucreate.setDeptno(userdto.getDeptno()); ucreate.setDname(userdto.getDname()); ucreate.setDstyle(userdto.getDstyle()); ucreate.setPhoneNumber(userdto.getPhoneNumber()); ucreate.setBuilddate(userdto.getBuilddate()); try { boolean flag =checkdp(userdto); if(flag==true) { conn.setAutoCommit(false); userdao.insert(ucreate); conn.commit(); flaga = true; }else { flaga = false; } } catch (SQLException e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } }finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return flaga; } private boolean check(DeptDto userdto) { // TODO Auto-generated method stub return false; } /** * 取得查詢信息 */ public List getPartment(HashMap has) { List listdto = new ArrayList(); List listdao = null ; System.out.println("&&&&&&&&&7777"); try { listdao = (List)userdao.lookup(has); if(null!=listdao && !listdao.isEmpty()) { Iterator it = listdao.iterator(); while(it.hasNext()) { DeptDto ucdto = new DeptDto(); DeptBo udao = (DeptBo)it.next(); ucdto.setDeptno(udao.getDeptno()); ucdto.setDname(udao.getDname()); ucdto.setPhoneNumber(udao.getPhoneNumber()); ucdto.setDstyle(udao.getDstyle()); ucdto.setBuilddate(udao.getBuilddate()); listdto.add(ucdto); } } } catch (SQLException e) { e.printStackTrace(); }finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } //return listReturn; return listdto; } } 第6章 系統(tǒng)測試 測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行軟件的過程,成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤。系統(tǒng)在發(fā)布之前要經過嚴格的測試過程,QA 要對軟件的功能、性能等方面進行全面的測試,測試人員不僅要發(fā)現(xiàn) bug 而且要確保發(fā)現(xiàn)的 bug 被正確修復。開發(fā)人員要寫單元測試,保證自己寫的每一個方法都是正確的,還要測試代碼的覆蓋率保證測試用例能夠覆蓋盡可能多的路徑和代碼。 測試是為了保證軟件的質量,軟件質量需要由開發(fā)人員和測試人員共同保障,測試在軟件生命周期中扮演者非常重要的角色,測試介入的越早越好,最好從需求階段就開始介入,這就是通常所說的雙 V 模型,小的系統(tǒng)自己測試一下就行了,但是大的項目必須經過嚴格的測試過程才能發(fā)布,這樣軟件的質量才能得到保障,項目才能夠取得成功。 6.1 黑盒測試和白盒測試 對于軟件測試而言,黑盒測試法把程序看成一個黑盒子,完全不考慮程序的內部結構和處理過程。也就是說,黑盒測試是在程序接口進行的測試,它只檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用,程序是否能適當?shù)亟邮蛰斎霐?shù)據(jù)產生正確的輸出信息,并且保持外部信息的完整性。黑盒測試又成為功能測試。與黑盒測試法相反,白盒測試法的前提是可以把程序看成裝在一個透明的白盒子里,也就是完全了解程序的結構和處理過程。白盒測試又稱結構測試。 6.2 測試準則 為了能設計出有效的測試方案,軟件工程師必須充分理解并正確運用指導軟件測試的基本準則。主要的測試準則如下: 1. 所有的測試都應該能追溯到用戶需求; 2. 應該在測試開始之前的相當長時間就制定出測試計- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 人事管理系統(tǒng) 綜合 設計 報告
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經上傳用戶書面授權,請勿作他用。
相關資源
更多
正為您匹配相似的精品文檔
相關搜索
鏈接地址:http://m.kudomayuko.com/p-9094799.html