人事管理系統(tǒng)綜合設(shè)計報告.doc
《人事管理系統(tǒng)綜合設(shè)計報告.doc》由會員分享,可在線閱讀,更多相關(guān)《人事管理系統(tǒng)綜合設(shè)計報告.doc(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
綜合課程設(shè)計 題目: 人事管理系統(tǒng) 目錄 第1章 課題關(guān)鍵技術(shù) 2 1.1 B/S結(jié)構(gòu)的數(shù)據(jù)訪問模式 2 1.2 MyEclipse 簡介 2 1.3 oracle數(shù)據(jù)庫簡介 3 1.4 開發(fā)技術(shù)簡介 3 第2章 系統(tǒng)需求分析 4 2.1 目標(biāo) 4 2.2 一般性需求 4 2.3 功能簡介 4 2.4 可行性分析 5 2.5 軟硬件環(huán)境要求 6 第3章 系統(tǒng)總體設(shè)計 6 3.1 系統(tǒng)總體架構(gòu) 7 3.2 功能模塊細(xì)分與設(shè)計 8 3.2.1 部門管理模塊 8 3.2.2 崗位管理模塊 9 3.2.3 員工入職管理模塊 10 3.2.4試用期員工管理模塊 10 3.2.5 部門調(diào)動管理模塊 11 3.2.6 崗位調(diào)動管理模塊 12 第4章 系統(tǒng)詳細(xì)設(shè)計 13 4.1 系統(tǒng)類設(shè)計 13 4.1.1 實體類設(shè)計 14 4.2 數(shù)據(jù)庫設(shè)計 25 4.2.1 數(shù)據(jù)庫模型設(shè)計 25 第5章 源代碼設(shè)計 27 5.1 對數(shù)據(jù)庫的操作的部分代碼 27 5.3 數(shù)據(jù)庫的更新操作 33 第6章 系統(tǒng)測試 41 6.1 黑盒測試和白盒測試 41 6.2 測試準(zhǔn)則 42 6.3 白盒測試 42 第7章 結(jié)論 43 參考文獻(xiàn) 44 第1章 課題關(guān)鍵技術(shù) 1.1 B/S結(jié)構(gòu)的數(shù)據(jù)訪問模式 B/S(Browser/Server)結(jié)構(gòu),即瀏覽器/服務(wù)器模式,當(dāng)前在web數(shù)據(jù)庫開發(fā)中應(yīng)用較廣泛的一種模式,它是隨著Internet技術(shù)的興起,從傳統(tǒng)的二層C/S(客戶機/服務(wù)器)模式發(fā)展起來的新的網(wǎng)絡(luò)結(jié)構(gòu)模式,其本質(zhì)是三層結(jié)構(gòu)C/S模式。在這種結(jié)構(gòu)下,用戶工作界面是通過WWW瀏覽器來實現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實現(xiàn)。但是主要事務(wù)邏輯在服務(wù)器端(Server)實現(xiàn),形成所謂三層結(jié)構(gòu)。這樣就大大簡化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級的成本和工作量,降低了用戶的總體成本,如圖1-1所示。 圖1-1 三級結(jié)構(gòu)組成 1.2 MyEclipse 簡介 本次系統(tǒng)開發(fā)所使用的前臺開發(fā)技術(shù)為Java,所使用的軟件為MyEclipse。Java是一種軟件技術(shù),是一種由美國SUN計算機公司所研究而成的語言,是一種較為高級的編程語言。利用它可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,能夠支持HTML,Struts,JSP,CSS,Javascript,SQL。同時,MyEclipse10.0為用戶提供了高效、便捷的操作環(huán)境和友好的可視化操作界面。 1.3 oracle數(shù)據(jù)庫簡介 Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng)。到目前仍在數(shù)據(jù)庫市場上占有主要份額。 ORACLE 數(shù)據(jù)庫系統(tǒng)是美國ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一。比如SilverStream就是基于數(shù)據(jù)庫的一種中間件。ORACLE數(shù)據(jù)庫是目前世界上使用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),作為一個通用的數(shù)據(jù)庫系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個關(guān)系數(shù)據(jù)庫,它是一個完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫它實現(xiàn)了分布式處理功能。但它的所有知識,只要在一種機型上學(xué)習(xí)了ORACLE知識,便能在各種類型的機器上使用它。 1.4 開發(fā)技術(shù)簡介 JSP技術(shù) JSP(Java Server Pages)是由Sun Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。 JSP技術(shù)是用JAVA語言作為腳本語言的,JSP網(wǎng)頁為整個服務(wù)器端的JAVA庫單元提供了一個接口來服務(wù)于HTTP的應(yīng)用程序。 JSP技術(shù)有點類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁HTML文件中插入Java程序段和JSP標(biāo)記,從而形成JSP網(wǎng)頁。所有程序操作都在服務(wù)器端運行,網(wǎng)絡(luò)上傳送給客戶端的僅是得到的結(jié)果,與客戶端的瀏覽器無關(guān),因此,JSP稱這Server-side Language。所以被許多人認(rèn)為是未來最有發(fā)展前途的動態(tài)網(wǎng)站技術(shù)之一。 第2章 系統(tǒng)需求分析 2.1 目標(biāo) 本系統(tǒng)的總體目標(biāo)是搭建用人單位的人事信息管理平臺,不僅滿足目前的業(yè)務(wù)需要,還要滿足公司的未來的發(fā)展,而且要具備良好的擴展性,形成公司未來人力資源管理信息化平臺。 2.2 一般性需求 一、集中數(shù)據(jù)管理、分布式應(yīng)用,實現(xiàn)信息的全面共享,為決策者提供最新的人力資源數(shù)據(jù)。 二、完全基于瀏覽器的操作模式,安裝簡單,操作方便,具有良好的系統(tǒng)擴展能力。 三、靈活的模塊需求設(shè)計。 2.3 功能簡介 本次課設(shè)的標(biāo)題為人事管理系統(tǒng),完成的是其中的部門管理模塊,其基本功能的分析如下: 2.3.1 部門管理 部門管理主要實現(xiàn)了兩個模塊,一個是新建部門,這是一個必不可少的模塊,其他的操作均要根據(jù)部門的各種關(guān)聯(lián)來解決;一個是部門列表,在部門列表中可以根據(jù)不同的條件進(jìn)行查詢,可以全部輸入,也可以部分輸入。在查詢出來的部門列表中,可以對部門進(jìn)行操作,其操作有:修改-----對部門除了部門編號以外的信息進(jìn)行修改,查詢------對部門下的員工進(jìn)行查詢,刪除--------對部門進(jìn)行刪除(其中若是該部門下有員工,則不能進(jìn)行該操作)。 2.3.2 崗位管理 崗位管理下有三個模塊,分別是:新建崗位,在該模塊下,可以建立一個新的崗位,其中每一個崗位都屬于其中的一個部門。崗位列表,在該模塊下可對崗位進(jìn)行查詢,其中可以輸入全部條件進(jìn)行查詢,也可以輸入部分內(nèi)容進(jìn)行查詢,在該查詢中,有可以進(jìn)行如下操作:修改------對部門信息進(jìn)行修改;崗位下員工信息-------對該崗位下的員工進(jìn)行查詢;刪除----讀崗位進(jìn)行刪除。第三個模塊:崗位刪除-------輸入崗位編號,刪除該崗位。 2.3.3 員工入職管理 本模塊較為簡單。但也是相當(dāng)重要的一塊。本模塊只有一個簡單的對個人數(shù)據(jù)進(jìn)行插入 2.3.4 試用期員工管理 本模塊中,點擊試用期員工查詢,進(jìn)入查詢頁面,可以通過員工編號、員工姓名、試用期狀態(tài)、所在部門、所在崗位、開始日期、結(jié)束日期進(jìn)行查詢。進(jìn)入查詢后,查詢出來的表中可以進(jìn)行“操作”的操作,本操作可以更改員工的試用期狀態(tài);正常、延期、不錄用、轉(zhuǎn)正操作。員工轉(zhuǎn)正查詢中可以根據(jù)員工編號、員工姓名、所在部門、所在崗位、開始日期、以及結(jié)束日期進(jìn)行查詢員工的轉(zhuǎn)正員工。 2.3.5 部門調(diào)動管理 部門調(diào)動模塊主要進(jìn)行部門調(diào)動和已調(diào)動部門員工的查詢。部門調(diào)動中可以通過員工編號、員工名稱、部門編號、部門名稱進(jìn)行查詢。查詢出信息后。選擇其中的單選按鈕,在點擊提交,進(jìn)入了部門調(diào)動頁面,填入選項信息后可進(jìn)行部門的調(diào)動??梢栽谝颜{(diào)動部門員工查詢中查詢出已經(jīng)掉的部門的員工信息。 2.3.6 崗位調(diào)動管理 崗位調(diào)動管理中可以進(jìn)行崗位調(diào)動、已調(diào)動員工崗位查詢兩個操作;在崗位調(diào)動中,可以通過部門編號、部門名稱、員工編號、員工姓名之中的任意選項進(jìn)行查詢;查詢出結(jié)果后可以進(jìn)行別的操作,點擊崗位調(diào)動,進(jìn)入了崗位調(diào)動操作頁面,頁面填入信息后進(jìn)行崗位調(diào)動。 崗位調(diào)動完后,通過在職員工查詢可以進(jìn)行員工查詢。 2.3.7 員工離職管理 員工離職管理中主要有離職辦理,離職員工信息查詢兩個模塊,離職辦理中,可進(jìn)行離職,離職后的員工可以在離職員工信息查詢中進(jìn)行查詢。 2.4 可行性分析 人事管理系統(tǒng)進(jìn)行有效的可行性分析??尚行苑治鍪鞘澜缟掀毡椴捎玫囊环N研究工程項目是否可行的科學(xué)技術(shù)。主要是在系統(tǒng)調(diào)查的基礎(chǔ)上,針對新系統(tǒng)的開發(fā)是否具備必要性和可能性的一種分析和研究,主要會從經(jīng)濟、技術(shù)、社會的方面來進(jìn)行分析和研究,以減少項目開發(fā)風(fēng)險,避免人力、物力和財力的浪費。 新系統(tǒng)的目標(biāo)確定后,就可以從以下三方面對能否實現(xiàn)新系統(tǒng)目標(biāo)進(jìn)行可行性分析: (1)技術(shù)可行性。根據(jù)新系統(tǒng)目標(biāo)來衡量所需的技術(shù)是否具備,一般可從硬件、軟件的性能要求、環(huán)境條件、技術(shù)人員水平和數(shù)量等方面去考慮和分析,其中開發(fā)人員的技術(shù)力量應(yīng)首先考慮能力與水平,并考慮近期內(nèi)可以培養(yǎng)和發(fā)展的技術(shù)人員。 (2)運行可行性。本系統(tǒng)具有操作簡單。系統(tǒng)功能、顯示內(nèi)容簡單明了。操作者不必具有較高的計算機專業(yè)知識,也不必進(jìn)行專門培訓(xùn),只要經(jīng)過短時間的操作就可以很快掌握并熟練使用。 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或更高、內(nèi)存在512MB或更高。 第3章 系統(tǒng)總體設(shè)計 3.1 系統(tǒng)總體架構(gòu) 系統(tǒng)采用 MVC3三層架構(gòu),在C層對用servlet實現(xiàn)對用戶的請求,再去調(diào)用service中DAO的借口實現(xiàn)對數(shù)據(jù)庫中的操作,數(shù)據(jù)庫是 oracle。 人事管理系統(tǒng) 登錄框 員工入職管理 崗位管理 部門管理 員工離職管理 崗位調(diào)動管理 部門調(diào)動管理 試用期員工管理 人事管理系統(tǒng)的整體結(jié)構(gòu)、功能模塊 MVC 架構(gòu) 即模型,視圖,控制器。 Model 實現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯,表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則,通常對應(yīng)著一些和數(shù)據(jù)庫表映射的實體類和實現(xiàn)業(yè)務(wù)邏輯的方法。 View 層只負(fù)責(zé)界面的展示,對jsp文檔。 Controller 層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以呈現(xiàn),同時它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。 MVC中所有的用戶請求都由 Controller 中的 Servlet 來處理,Servlet根據(jù)請求會從 View 層得到用戶的輸入,轉(zhuǎn)換為對應(yīng)的 Model 對象,然后把 Model 對象寫入數(shù)據(jù)庫進(jìn)行數(shù)據(jù)持久化。相反 Controller 也負(fù)責(zé)從數(shù)據(jù)庫中取出數(shù)據(jù),封轉(zhuǎn)成Model 對象,然后把Model 對象傳到 View 進(jìn)行顯示。 由于 MVC 的分層,模塊之間的耦合性降低。視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。 本系統(tǒng)是完全基于MVC三層架構(gòu)完成。 3.2 功能模塊細(xì)分與設(shè)計 在這一部分,我們將各個子系統(tǒng)模塊進(jìn)一步劃分子模塊,劃分的子模塊與各個模塊功能說明如下。 3.2.1 部門管理模塊 部門管理模塊主要包括新建部門、查詢部門。 如圖所示:部門管理 部門管理 查詢部門 新建部門 模塊主要功能如下: (1) 新建部門,新建一個部門。 (2) 查詢部門,查詢有哪些部門。 用戶 新建部門 部門列表 部門管理 3.2.2 崗位管理模塊 崗位管理模塊主要包括新建崗位、崗位列表、崗位刪除。 如圖 所示: 崗位管理 新建崗位 崗位列表 崗位刪除 崗位管理模塊用例 新建崗位 崗位列表 崗位管理 崗位刪除 模塊主要功能如下: (1)新建崗位,建立一個新的崗位。 (2)崗位列表,可以查詢出各個崗位。 (3)崗位刪除,刪除一個崗位。 3.2.3 員工入職管理模塊 員工入職用于錄入員工信息 模塊主要功能如下: (1) 錄入員工信息 3.2.4試用期員工管理模塊 試用期員工管理模塊主要用于對試用期員工的操作。如圖所示: 試用期員工管理 試用期員工查詢 轉(zhuǎn)正員工查詢 試用期員工管理模塊用例 試用期員工查詢 試用期管理 轉(zhuǎn)正員工查詢 模塊主要功能如下: (1) 試用期員工查詢,主要用于查看試用期的員工。 (2) 轉(zhuǎn)正員工查詢,主要用于查詢轉(zhuǎn)正的員工。 3.2.5 部門調(diào)動管理模塊 部門調(diào)動管理模塊主要進(jìn)行部門調(diào)動和已調(diào)動部門員工查詢。如圖所示: 部門調(diào)動管理 已調(diào)動部門員工查詢 部門調(diào)動 部門調(diào)動管理用例 部門調(diào)動 部門調(diào)動 調(diào)動員工查詢 模塊主要功能如下: (1) 部門調(diào)動,對員工的部門進(jìn)行更改。 (2) 已調(diào)動部門員工查詢,對已經(jīng)調(diào)動部門的員工進(jìn)行查詢。 3.2.6 崗位調(diào)動管理模塊 崗位調(diào)動管理 崗位調(diào)動管理主要進(jìn)行崗位調(diào)動和已調(diào)動崗位員工查詢。 如圖 3-8所示 崗位調(diào)動 已調(diào)動崗位員工查詢 崗位調(diào)動模塊用例 崗位調(diào)動 崗位調(diào)動 已調(diào)動崗位的員工查詢 模塊主要功能如下: (1) 崗位調(diào)動,對員工進(jìn)行崗位改變。 (2) 已調(diào)動員工查詢,對調(diào)動崗位的員工進(jìn)行查詢。 第4章 系統(tǒng)詳細(xì)設(shè)計 詳細(xì)設(shè)計階段的任務(wù)就是把在總體設(shè)計階段提出的比較抽象概括的解決問題的方法具體化,也就是“應(yīng)該怎樣具體地實現(xiàn)這個系統(tǒng)”。程序員可以根據(jù)詳細(xì)設(shè)計進(jìn)行代碼的編寫。在本階段將包括系統(tǒng)的類設(shè)計和數(shù)據(jù)庫的設(shè)計,確定實現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。 4.1 系統(tǒng)類設(shè)計 系統(tǒng)的類設(shè)計是根據(jù)系統(tǒng)的用例圖和總體設(shè)計時對系統(tǒng)的分析,抽象出系統(tǒng)的實體類,由業(yè)務(wù)邏輯抽象出一些處理系統(tǒng)業(yè)務(wù)邏輯的類包括一些數(shù)據(jù)結(jié)構(gòu)和算法類,并進(jìn)行數(shù)據(jù)的持久化。程序員可以根據(jù)類圖進(jìn)行編碼實現(xiàn)系統(tǒng)的功能。 4.1.1 實體類設(shè)計 根據(jù)前面的分析需要我們抽象出了系統(tǒng)的實體類,這些實體類都需要進(jìn)行持久化,它們和數(shù)據(jù)庫中的表存在映射關(guān)系,為數(shù)據(jù)庫表的設(shè)計提供了依據(jù),實體類圖如圖 4-1 所示: 4.2 數(shù)據(jù)庫設(shè)計 4.2.1 數(shù)據(jù)庫模型設(shè)計 重要的部分?jǐn)?shù)據(jù)庫表的建設(shè) 崗位表 (createdepartment) 屬性 類型 說明 deptno varchar(22) 部門編號在22以內(nèi),為主鍵 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) 結(jié)束 politic varchar(22) 黨員還是其他 nation varchar(22) 出生地 hometown varchar(22) 家鄉(xiāng) email varchar(22) 電子郵件 height varchar(22) 身高 blood varchar(22) 血型 xuewei varchar(22) 學(xué)位 craduateschool varchar(22) 畢業(yè)學(xué)校 profession varchar(22) 教授 craduatetime varchar(22) 畢業(yè)時間 work varchar(22) 工作 workreday varchar(22) 工作日期 marriage varchar(22) 是否結(jié)婚 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章 源代碼設(shè)計 在完成需求分析、總體設(shè)計、詳細(xì)設(shè)計的幾個步驟、完成系統(tǒng)類圖后接下來我們就可以編碼實現(xiàn)了。在編碼的階段發(fā)現(xiàn)當(dāng)員工的字段較多的時候,當(dāng)從頁面上傳值,從request去取這些值的時候會有很多的get和set語句。在M層的BO和層的DTO進(jìn)行數(shù)據(jù)轉(zhuǎn)化的時候會出現(xiàn)很多類似的代碼,在對數(shù)據(jù)庫進(jìn)行操作的時候也會出現(xiàn)這樣的情況。對此就啟發(fā)了我們是否能對此優(yōu)化。經(jīng)過反復(fù)的思考,利用反射機制,將這些操作都得以實現(xiàn),提高代碼的重用度,讓程序看起來更加優(yōu)雅,也具有相當(dāng)?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; /** * 進(jìn)行數(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; } /** * 判斷是否已經(jīng)存在了一個部門 */ 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ā)布之前要經(jīng)過嚴(yán)格的測試過程,QA 要對軟件的功能、性能等方面進(jìn)行全面的測試,測試人員不僅要發(fā)現(xiàn) bug 而且要確保發(fā)現(xiàn)的 bug 被正確修復(fù)。開發(fā)人員要寫單元測試,保證自己寫的每一個方法都是正確的,還要測試代碼的覆蓋率保證測試用例能夠覆蓋盡可能多的路徑和代碼。 測試是為了保證軟件的質(zhì)量,軟件質(zhì)量需要由開發(fā)人員和測試人員共同保障,測試在軟件生命周期中扮演者非常重要的角色,測試介入的越早越好,最好從需求階段就開始介入,這就是通常所說的雙 V 模型,小的系統(tǒng)自己測試一下就行了,但是大的項目必須經(jīng)過嚴(yán)格的測試過程才能發(fā)布,這樣軟件的質(zhì)量才能得到保障,項目才能夠取得成功。 6.1 黑盒測試和白盒測試 對于軟件測試而言,黑盒測試法把程序看成一個黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。也就是說,黑盒測試是在程序接口進(jìn)行的測試,它只檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)產(chǎn)生正確的輸出信息,并且保持外部信息的完整性。黑盒測試又成為功能測試。與黑盒測試法相反,白盒測試法的前提是可以把程序看成裝在一個透明的白盒子里,也就是完全了解程序的結(jié)構(gòu)和處理過程。白盒測試又稱結(jié)構(gòu)測試。 6.2 測試準(zhǔn)則 為了能設(shè)計出有效的測試方案,軟件工程師必須充分理解并正確運用指導(dǎo)軟件測試的基本準(zhǔn)則。主要的測試準(zhǔn)則如下: 1. 所有的測試都應(yīng)該能追溯到用戶需求; 2. 應(yīng)該在測試開始之前的相當(dāng)長時間就制定出測試計- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 人事管理系統(tǒng) 綜合 設(shè)計 報告
鏈接地址:http://www.820124.com/p-9094799.html