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