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