軟件工程課程設(shè)計(jì)工資管理系統(tǒng).doc
1 前言課程設(shè)計(jì)是對學(xué)生的一種全面綜合訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的、必不可少的一個(gè)教學(xué)環(huán)節(jié)。通常,課程設(shè)計(jì)中的問題比平時(shí)的習(xí)題復(fù)雜得多,也更接近實(shí)際。課程設(shè)計(jì)著眼于原理與應(yīng)用的結(jié)合點(diǎn),使學(xué)生學(xué)會如何把書上學(xué)到的知識用于解決實(shí)際問題,培養(yǎng)軟件工作所需要的動手能力。另一方面,使書上的知識變活,起到深化理解和靈活應(yīng)用教學(xué)內(nèi)容的目的。平時(shí)的習(xí)題局限于一個(gè)和二個(gè)知識點(diǎn),而課程設(shè)計(jì)題是軟件設(shè)計(jì)的綜合訓(xùn)練,包括問題分析,總體結(jié)構(gòu)設(shè)計(jì),用戶界面設(shè)計(jì)、程序設(shè)計(jì)、基本技能和技巧,以及一整套軟件工作規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng)。我們這組選的課題是工資管理系統(tǒng)的設(shè)計(jì)與開發(fā)。從接到任務(wù)書開始,我們首先完成了系統(tǒng)的需求分析與概要設(shè)計(jì),在完成這些任務(wù)時(shí),我們深感理論與實(shí)踐的結(jié)合的是需要一個(gè)過程。從個(gè)人分工到整個(gè)系統(tǒng)分析,從設(shè)計(jì)到測試之所以能順利完成是和大家的努力分不開的。雖然還有一些不足之處,但是我們還是從中獲益不少。下面簡要介紹一下我們課題組的分工,我們這組的分工其實(shí)借鑒了Shari Lawrence Pfleeger 和Joanne M.Atlee 合著的 SOFTWARE ENGINEERING Theory and Practice (高等教育出版社第三版影印版)中的一些理論,這些知識可以參考此書的第25頁中關(guān)于“開發(fā)團(tuán)隊(duì)的角色分工”一節(jié)。根據(jù)分工的細(xì)化和部分重疊原則,我們組的具體分如下: (1)項(xiàng)目管理 : 王培 (2)需求分析 : 鐘耀明、賀純 (3)概要設(shè)計(jì) : 賀純、趙亦嫻 (4)詳細(xì)設(shè)計(jì) : 趙亦嫻、王培、鐘耀明、楊安、陳華、賀純 (5)程序編碼 : 王培、陳華 (6)系統(tǒng)測試 : 陳華、楊安 我的主要任務(wù)是概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)2需求分析2.1 任務(wù)概述 現(xiàn)代企業(yè)基本上都引進(jìn)了計(jì)算機(jī)軟件對公司業(yè)務(wù)進(jìn)行管理,這樣做有很多優(yōu)點(diǎn),一是提高了工作的效率,同時(shí)也減少了手工操作的錯(cuò)誤以及人員的開支。本課題開發(fā)的工資管理系統(tǒng)正是基于這樣的目的實(shí)現(xiàn)的,系統(tǒng)完成的主要功能是對員工工資的管理,同時(shí)還包括對員工信息、部門信息以及附屬于員工、部門的職稱和職務(wù)信息的管理。系統(tǒng)主要采用事務(wù)型數(shù)據(jù)庫設(shè)計(jì),但對于員工工資的信息,系統(tǒng)能夠保留其相應(yīng)的歷史記錄,包括員工的請假信息,出差信息以及工資結(jié)算信息等。本系統(tǒng)面向員工和管理人員同時(shí)開放,普通用戶可以進(jìn)行查詢以及對個(gè)人相關(guān)信息的修改等操作,管理賬戶則擁有系統(tǒng)的全部功能。系統(tǒng)不允許非經(jīng)認(rèn)證通過的用戶使用系統(tǒng)。系統(tǒng)采用JAVA語言開發(fā),系統(tǒng)的數(shù)據(jù)使用ORACLE數(shù)據(jù)庫進(jìn)行管理。2. 功能需求分析(1)系統(tǒng)能夠維護(hù)員工的基本信息,部門、職務(wù)、職稱以及工資記錄等信息。(2)系統(tǒng)應(yīng)該能記錄員工的每一個(gè)職稱信息,并授予相應(yīng)的職稱,系統(tǒng)在計(jì)算員工工資的時(shí)候選取職稱對應(yīng)的最高職稱津貼。(3)工資表應(yīng)當(dāng)由系統(tǒng)自動生成。系統(tǒng)負(fù)責(zé)員工的工資表以及員工工資的歷史記錄及記錄員工的請假信息和出差信息等意外情況。(4)系統(tǒng)可以給管理員提供權(quán)限增加刪除修改系統(tǒng)用戶以及其它實(shí)體信息,系統(tǒng)的部分權(quán)限不能下放給普通用戶以保證系統(tǒng)的安全性以及數(shù)據(jù)的正確性。2.3 外部接口需求分析系統(tǒng)人機(jī)交互界面為半屏幕大小,采用上下左右居中方式顯示,系統(tǒng)分辯率默認(rèn)設(shè)置為1280*800,實(shí)際的界面大小由具體的屏幕決定。主界面包括標(biāo)題欄,菜單欄,快捷工作區(qū),幫助信息區(qū)(默認(rèn)是隱藏的)。每一個(gè)菜單對應(yīng)一個(gè)鍵盤快捷鍵區(qū)。2.4 性能需求分析系統(tǒng)在主頻1.5GHZ,內(nèi)存512MB,總線頻率667MHZ的硬件平臺上運(yùn)行時(shí),系統(tǒng)的響應(yīng)時(shí)間、更新處理時(shí)間、數(shù)據(jù)轉(zhuǎn)換與傳輸時(shí)間、運(yùn)行時(shí)間均能達(dá)到毫秒級。系統(tǒng)支持用戶并發(fā)操作,事務(wù)采用可串行化隔離級別,防止在讀寫過程中產(chǎn)生的丟失修改、讀臟數(shù)據(jù)、不可重復(fù)讀等一系列由并發(fā)操作帶來的不一致問題。系統(tǒng)的運(yùn)行主存控制在1024KB以內(nèi),響應(yīng)時(shí)間控制在1000ms以內(nèi),系統(tǒng)對數(shù)據(jù)的存儲空間取決于數(shù)據(jù)庫系統(tǒng)表空間的約束限制。2.5 軟件屬性需求分析系統(tǒng)必須保證所有操作結(jié)果以及存儲數(shù)據(jù)的正確性,對于用戶的非法操作,系統(tǒng)必須能夠提出告警信息,對于用戶的錯(cuò)誤操作,系統(tǒng)能夠提供錯(cuò)誤信息以及錯(cuò)誤源。在數(shù)據(jù)庫操作上的異常,系統(tǒng)也應(yīng)捕捉到并提供界面化的提示信息,對于可能會產(chǎn)生錯(cuò)誤的操作,應(yīng)當(dāng)能夠防范。另外系統(tǒng)必須提供一定的安全保密性,一些保密信息只針對特定的用戶提供。它人員無法訪問。軟件必須為中文操作界面,并且所有的中文功能菜單項(xiàng)描述須與其實(shí)際對應(yīng)的功能相一致,不能存在功能不足或者功能不對的情況,軟件采用面向?qū)ο蠹夹g(shù)架構(gòu),遵循代碼編寫規(guī)范,提供適當(dāng)?shù)拇a注釋,盡可能地采用可復(fù)用技術(shù),提高軟件的可維護(hù)性。概要設(shè)計(jì)3.1 系統(tǒng)設(shè)計(jì)總體思想當(dāng)工資管理系統(tǒng)處理的事務(wù)主要有工資管理,員工信息管理,部門信息管理,職務(wù)信息管理,職稱信息管理。職務(wù)和職稱以及部門信息管理主要服務(wù)于工資管理和員工信息管理,系統(tǒng)接收的輸入項(xiàng)目有員工信息,部門信息,職務(wù)信息,職稱信息,請假信息,出差信息等。系統(tǒng)能夠接受用戶的請求,顯示相應(yīng)的查詢信息,增加、刪除、修改相應(yīng)的合法的信息。圖3.1.1 工資管理系統(tǒng)HIPO圖圖3.1.1是工資管理系統(tǒng)的HIPO圖,上圖主要說明了系統(tǒng)的各個(gè)主要功能以及各功能模塊之間的層次關(guān)系。上圖的基本框架也是整個(gè)系統(tǒng)界面的基要框架。系統(tǒng)的人機(jī)交互采用圖形化用戶界面,考慮到系統(tǒng)的平臺無關(guān)性,系統(tǒng)由JAVA語言實(shí)現(xiàn),系統(tǒng)的界面元素也是采用了JAVA的JFC圖形類庫。系統(tǒng)可以在安裝了JAVA運(yùn)行環(huán)境的平臺上運(yùn)行。系統(tǒng)從登錄界面開始,要求驗(yàn)證用戶信息,用戶通過驗(yàn)證后,進(jìn)入系統(tǒng)主界面。主界面提供了一個(gè)菜單框架,可以通過各個(gè)菜單類的一個(gè)實(shí)例來加載菜單,這一步不是由主界面完成的,而是由所需要被加載的類完成的,但需要主界面類去生成這些菜單英的實(shí)例。系統(tǒng)加載的功能主要包括系統(tǒng)管理,用戶管理,工資管理,部門管理,職務(wù)管理,職稱管理以及適當(dāng)?shù)膸椭畔?。系統(tǒng)管理主要向用戶提供用戶更改密碼的操作以及退出程序的功能。用戶管理允許管理員新建一個(gè)員工信息,比如當(dāng)公司新增加了一個(gè)員工時(shí),系統(tǒng)為該員工生成相應(yīng)的工資關(guān)系,但新建這個(gè)員工的信息則是第一環(huán)節(jié),當(dāng)然如果公司離任了一名員工時(shí),此員工與公司的工資關(guān)系已解除,則沒有必要保留該員工的信息,系統(tǒng)應(yīng)向管理員提供刪除該員工的功能,同時(shí)刪除與該員工相關(guān)的所有其它信息。公司所在的員工可能有部分具有相應(yīng)的職稱,考慮到職稱的種類繁多,系統(tǒng)只添加本公司員工所擁有的職稱的一個(gè)集合,而不考慮外界的因素,因此系統(tǒng)提供了增加、刪除、修改、查詢等對職稱的相關(guān)操作。例如,當(dāng)公司一員工拿到高級職稱后,管理員首選應(yīng)該查看系統(tǒng)是否記錄了相應(yīng)職稱的信息,如果有,則直接將該職稱信息添加到員工信息中去,如果沒有,則應(yīng)當(dāng)先增加這一職稱信息,再執(zhí)行上述操作。另外在刪除一個(gè)職稱的時(shí)候,系統(tǒng)要求必須沒有員工擁有此職稱,否則系統(tǒng)不能刪除,如果確實(shí)要刪除,則只能先刪除擁有此職稱的所有員工或者撤銷擁有此職稱的所有員工的此職稱。3.2 系統(tǒng)功能模塊設(shè)計(jì)圖3.2.1 系統(tǒng)功能模塊設(shè)計(jì)3.3 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì) 通過對工資管理系統(tǒng)的數(shù)據(jù)分析并根據(jù)業(yè)務(wù)之間的聯(lián)系,我們可以得出與系統(tǒng)相關(guān)的實(shí)體有:員工、部門、職務(wù)、職稱、請假信息、出差信息、工資。工資管理系統(tǒng)的數(shù)據(jù)據(jù)庫管理模式用語義描述如下:(1) 每一個(gè)員工只能屬于一個(gè)部門,擔(dān)任一個(gè)職務(wù),但是可以擁有多個(gè)職稱.(2) 每個(gè)部門可以有多名員工,有不同的職務(wù).(3) 每個(gè)職務(wù)可以由多名員工擔(dān)任,可以在相同的部門,也可以在不同的部門.(4) 每個(gè)職稱可以授予不同的員工.(5) 每個(gè)員工每個(gè)月都會有一份工資記錄,并且會有一份歷史工資記錄.(6) 員工每個(gè)月可以請假多次或者出差多次.但是要扣除相應(yīng)的工資或者獲得相應(yīng)的補(bǔ)助.每個(gè)員工都有一分歷史請假記錄和歷史出差記錄。綜合上述語義,可以得出系統(tǒng)的ER圖如圖3.3.1所示:3.3.1 工資管理系統(tǒng)ER圖根據(jù)實(shí)體之間的聯(lián)系,以及分析實(shí)體的屬性,得出了工資管理系統(tǒng)中各個(gè)實(shí)體的屬性,相關(guān)屬性列表見表3.3.1。表3.3.1 工資管理模型的相關(guān)屬性列表實(shí)體或聯(lián)系屬性員工員工編號、姓名、性別、部門號、職務(wù)部門部門編號、名稱、人數(shù)、電話職務(wù)職務(wù)編號、名稱、基本工資職稱職稱編號、名稱、職稱津貼出差信息出差編號、員工編號、天數(shù)、出差年份、出差月份、出差補(bǔ)助員工職稱信息員工編號、職稱編號請假信息請假編號、員工編號、天數(shù)、年、月、扣除工資、請假原由工資工資編號、員工編號、工資所屬年月、基本工資、扣除工資、出差補(bǔ)助、崗位工資、職稱津貼、工資總額說明:加粗部分為主鍵,加底線部分為外鍵 圖3.3.2 實(shí)體及其相關(guān)屬性圖詳細(xì)設(shè)計(jì)4.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)4.1.1 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)Employee員工信息表字段名數(shù)據(jù)類型約束名稱說明empnonumber(6)主鍵員工編號enamevarchar2(20)not null員工姓名sexvarchar2(4)not null性別deptnonumber(6)外鍵department(deptno)部門編號dutynonumber(6)外鍵duty(dutyno)職務(wù)編號Department-部門信息表字段名數(shù)據(jù)類型約束名稱說明deptnonumber(6)主鍵部門編號deptnamevarchar2(20)not null部門名empnumnumber部門人數(shù)telnumber電話Duty-職務(wù)信息表字段名數(shù)據(jù)類型約束名稱說明dutynonumber(6)主鍵職務(wù)編號dutynamevarchar(20)not null職務(wù)名dutypaynumberdefault(0), check(dutypay>=0)職務(wù)基本工資Title-職稱信息表字段名數(shù)據(jù)類型約束名稱說明titlenonumber(6)主鍵職稱編號titlenamevarchar2(20)not null職稱名titlepaynumberdefault(0), check(titlepay>=0)職稱津貼TitledEmployee-員工職稱聯(lián)系表字段名數(shù)據(jù)類型約束名稱說明empnonumber(6)組合主鍵, 外鍵employee(empno)員工編號titlenonumber(6)職稱編號yearnumber(4)年記錄職稱授予時(shí)間monthnumberbetween 1 and 12月Leave-員工請假信息表字段名數(shù)據(jù)類型約束名稱說明leavenonumber(6)主鍵請假編號empnonumber(6)外鍵employee(empno)請假員工leavedaysnumbernot null請假天數(shù)leaveyearnumber(4)not null請假年份leavemonthnumbernot null請假月份deductionnumbernot null扣除工資reasonvarchar(60)請假原因BusinessTravel-出差信息表字段名數(shù)據(jù)類型約束名稱說明travelnonumber(6)primary key出差編號empnonumber(6)外鍵employee(empno)員工編號traveldaysnumbernot null出差天數(shù)travelyearnumber(4)not null出差年份travelmonthnumbernot null出差月份travelpaynumbernot null出差補(bǔ)助Reward-獎勵信息表字段名數(shù)據(jù)類型約束名稱說明rewardnonumber(6)primary key獎勵編號empnonumber(6)外鍵employee(empno)員工編號rewardyearnumber(4)not null獎勵年份rewardmonthnumbernot null獎勵月份rewardpaynumber獎勵金額reasonvarchar(60)獎勵原由Penalty-罰金信息表字段名數(shù)據(jù)類型約束名稱說明penaltynonumber(6)primary key罰金編號empnonumber(6)外鍵employee(empno)員工編號penaltyyearnumber(4)not null罰金年份penaltmonthnumbernot null罰金月份penaltynumnumber罰金額度reasonvarchar(60)罰金原由Salary-職工工資信息表字段名數(shù)據(jù)類型約束名稱說明salnonumber(6)primary key工資編號empnonumber(6)外鍵employee(empno)員工編號payyearnumber(4)工資年份paymonthnumberbetween 1 and 12工資月份basepaynumber基本工資deductionnumber請假扣除金額travelpaynumber出差補(bǔ)助dutypaynumber職務(wù)工資titlepaynumber職稱津貼rewardpaynumber獎勵金額penaltynumnumber罰金totalpaynumber工資總額4.1.2 程序數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(1)ADT DepartmentBean數(shù)據(jù)對象:D=deptNo,deptName,empNum,tel|deptNo,empNumt和tel均為整數(shù),deptName為字符串?dāng)?shù)據(jù)關(guān)系:R1=<deptNo,deptName,tel>|deptNo為部門編號,deptName為部門號,tel為部門電話R2=<deptNo,empNum>|deptNo為部門編號,empNum為部門人數(shù)基本操作:setDeptNo(int no):設(shè)置部門的部門號為no.getDeptNo ():返回部門的部門號。setDeptName(String name):設(shè)置部門的部門名為name.getDeptName():返回部門的部門號.setEmpNum(int num):設(shè)置部門的員工人數(shù)為num.getEmpNum():返回部門的人數(shù).setTel(int telephone):設(shè)置部門的電話號碼為telephone.getTel():返回部門的電話號碼。ADT DepartmentBean (2)ADT Jdbc 數(shù)據(jù)對象:D=dbUrl,theUser,thePsw,c,stmt,rs|dbUrl提供數(shù)據(jù)庫對象,theUser,thePsw指定用戶名和密碼,c與數(shù)據(jù)庫建立一個(gè)連接,stmt聲明一條SQL語句,rs保存執(zhí)行SQL語句的結(jié)果集. 數(shù)據(jù)關(guān)系:R1<theUser,thePsw>:用戶登陸的驗(yàn)證信息用戶名和密碼.R2<stmt,rs>:rs為語句stmt執(zhí)行的結(jié)果集. 基本操作:Jdbc():加載數(shù)據(jù)庫驅(qū)動,建立數(shù)據(jù)庫連接.executeUpdate(String sql):執(zhí)行SQL更新語句,成功返回TRUE,失敗則返回FALSE.executeQuery(String sql):執(zhí)行SQL查詢語句,返回結(jié)果集rs.close():關(guān)閉與數(shù)據(jù)庫的連接.ADT Jdbc4.2 模塊功能詳細(xì)設(shè)計(jì)4.2.1 部門信息刪除模塊設(shè)計(jì)(1)類圖設(shè)計(jì)圖4.2.1.1 部門信息刪除模塊類圖以下對部分類的屬性和方法的說明:DepartmentMenu類:屬性名稱屬性類型屬性說明deptMenuJMenu頂層菜單項(xiàng)deptInqueryItemJMenuItem部門信息查詢菜單項(xiàng)deptDeleteItemJMenuItem部門信息刪除菜單項(xiàng)deptUpdateItemJMenuItem部門信息更新菜單項(xiàng)UserUserBean用戶業(yè)務(wù)類說明: 當(dāng)點(diǎn)擊各菜單項(xiàng)時(shí),會彈出相應(yīng)的操作界面。DepartmentDelete類:方法名稱返回值類型功能說明isDeptExist()boolean判斷輸入的部門號是否存在isDeptEmpty()boolean判斷輸入的部門號是否為空executeDelete()void執(zhí)行刪除操作ShowAction 類:該類為內(nèi)部類,是將各功能集成到系統(tǒng)的框架之中.ShowAction類的構(gòu)造函數(shù)提供了一個(gè)命名菜單項(xiàng)的方法,主要功能引入了DepartMentDelete這個(gè)類到系統(tǒng)中。通過監(jiān)聽器ShowAction執(zhí)行actionPerformed()方法,系統(tǒng)就應(yīng)該可以產(chǎn)生期望的動作。(2)界面設(shè)計(jì)圖4.2.1.2 界面設(shè)計(jì)界面設(shè)計(jì)說明:該文本框?yàn)閱涡形谋究?,可以輸入要刪除的部門號,當(dāng)系統(tǒng)監(jiān)聽到文本框中選項(xiàng)被確定,將會自動地將該部門信息從數(shù)據(jù)庫中刪除。(3)核心代碼public class DepartmentDeleteprivate static final long serialVersionUID = -8537661840347605772L;public DepartmentDelete() executeDelete();private boolean isDeptExist(int deptno)ResultSet rs; Jdbc conn=null;boolean flag = false;try conn = new Jdbc();rs = conn.executeQuery("select deptno from department "); while(rs.next() if( deptno = rs.getInt("deptno") flag = true; break; catch (InstantiationException e1) e1.printStackTrace(); catch (IllegalAccessException e1) e1.printStackTrace(); catch (ClassNotFoundException e1) e1.printStackTrace(); catch (SQLException e1) e1.printStackTrace(); return flag;public boolean isDeptEmpty(int deptno)ResultSet rs; Jdbc conn=null;boolean flag = false;try conn = new Jdbc();rs = conn.executeQuery("select count(*) from employee where deptno="+deptno); while(rs.next() if( rs.getInt(1) = 0) flag = true; break; catch (InstantiationException e1) e1.printStackTrace(); catch (IllegalAccessException e1) e1.printStackTrace(); catch (ClassNotFoundException e1) e1.printStackTrace(); catch (SQLException e1) e1.printStackTrace(); return flag;private void executeDelete() String deptnoStr = JOptionPane.showInputDialog(null,"請輸入待刪除部門編號!"); int deptno=0; boolean flag =true; try deptno = Integer.parseInt(deptnoStr); catch(Exception e) flag=false; if( isDeptExist(deptno) = true ) if( isDeptEmpty(deptno) = false ) JOptionPane.showMessageDialog(null,"部門中有員工存在,無法刪除!"); else Jdbc conn = null; int res=0; try conn = new Jdbc();PreparedStatement pstmt = conn.c.prepareStatement("delete from department where deptno=?");pstmt.setInt(1, deptno);res = pstmt.executeUpdate();if( res !=0 ) JOptionPane.showMessageDialog(null, "成功刪除部門"+deptno);else JOptionPane.showMessageDialog(null, "刪除失敗"); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); else if(flag) JOptionPane.showMessageDialog(null, "您輸入的部門號不存在!"); /executeDelete4.2.2 部門信息增加模塊設(shè)計(jì)(1)類圖設(shè)計(jì)根據(jù)系統(tǒng)的需求,我們需要使得系統(tǒng)能夠通過圖形化的界面來增添一個(gè)部門,并將輸入的部門信息長久得保存在數(shù)據(jù)庫文件中,為此我們需要一個(gè)從界面類到與數(shù)據(jù)庫連接的底層類的一系列類的組合來實(shí)現(xiàn)這樣的需要. 圖4.2.1.2所示的類圖就是一個(gè)增加新員工的實(shí)現(xiàn)過程,DepartmentAdd類是一個(gè)繼承自javax.swing.JFrame類的界面類,它提供了一個(gè)供錄入員工信息的操作界面,所有錄入的信息,則通過DepartmentBean類生成一個(gè)實(shí)例對象來保存,departmentAdd類的構(gòu)造函數(shù)負(fù)責(zé)調(diào)用createAddInterface()私有方法來構(gòu)造出界面,以及初始化各控件中的數(shù)值,如generateDeptNo()是生成部門編號,部編號并不能由用戶或者管理員確定,而是由系統(tǒng)查詢數(shù)據(jù)庫后,遵循唯一性原則生成出來的編號.這樣做不僅避免用戶管理編號的繁瑣性,而且也增強(qiáng)了系統(tǒng)的安全性.圖4.2.2.1 部門信息的增加功能模塊類圖以下部分類的屬性和方法的說明:DepartmentMenu類:屬性名稱屬性類型屬性說明deptMenuJMenu頂層菜單項(xiàng)deptInqueryItemJMenuItem部門信息查詢菜單項(xiàng)deptDeleteItemJMenuItem部門信息刪除菜單項(xiàng)deptUpdateItemJMenuItem部門信息更新菜單項(xiàng)UserUserBean參數(shù)傳遞說明: 當(dāng)點(diǎn)擊各菜單項(xiàng)時(shí),會彈出相應(yīng)的操作界面。Load Department方法是用來加載Departmentmenu類 。DepartmentAdd類:屬性名稱屬性類型屬性說明deptNoTextJTextFied部門編號輸入文本框deptNameTextJtextFied部門名稱輸入文本框deptTelTextJTextFied部門電話輸入文本框confirmButtonJButton確定按鈕cancelButtonJButton取消按鈕deptDepartmentBean參數(shù)傳遞DepartmentAdd類:方法名稱返回值類型功能說明DepartmentAdd()void是Departmentadd類的構(gòu)造函數(shù)InitDeptInfo()void初始化部門信息genertateDeptNo()void產(chǎn)生部門編號CreateAddInterface()void創(chuàng)建增加信息界面StoreDepartment()void將新的信息保存到數(shù)據(jù)庫中ShowAction 類:該類為內(nèi)部類,是將各功能集成到系統(tǒng)的框中.ShowAction類的構(gòu)造函數(shù)提供了一個(gè)命名菜單項(xiàng)的方法,主要功能是引入DepartMentDelete這個(gè)類到系統(tǒng)中。通過監(jiān)聽器ShowActionactionPerformed()方法,系統(tǒng)就應(yīng)該可以產(chǎn)生期望的動作。監(jiān)聽器ConfirmAction和CancelAction這兩個(gè)監(jiān)聽器實(shí)現(xiàn)的均是java.awt.event.ActionListener接口,系統(tǒng)通過監(jiān)聽器響應(yīng)用戶的保存或者取消操作,調(diào)用數(shù)據(jù)庫類Jdbc來執(zhí)行SQL存儲語句實(shí)現(xiàn)與數(shù)據(jù)庫的連接以及對數(shù)據(jù)庫的增加信息操作。(2)界面設(shè)計(jì)圖4.2.2.2 增加部門信息界面界面說明:以上文本框都是單行文本框,可以輸入部門編號,部門名稱,部門電話,當(dāng)系統(tǒng)監(jiān)聽到文本框中的內(nèi)容被確定,將會新的部門信息保存到數(shù)據(jù)庫中。(3)核心代碼 public class DepartmentAdd extends JFrame this.setTitle("Add a new Department!"); this.setSize(WIDTH,HEIGHT); this.setLayout(null); this.setResizable(false); v Dimension scr=Toolkit.getDefaultToolkit().getScreenSize(); Dimension frm=this.getSize(); this.setLocation(int)(scr.getWidth()-frm.getWidth()/2, (int)(scr.getHeight()-frm.getHeight()/2-50); createAddInterface(); generateDeptNo(); initDeptInfo();private void initDeptInfo() dept.setDeptName("某部門"); dept.setTel(1000000); dept.setEmpNum(0);private void generateDeptNo() ResultSet rs; Jdbc conn=null;int no = 102001;try conn = new Jdbc();rs = conn.executeQuery("select deptno from department order by deptno"); while(rs.next() if( no = rs.getInt("deptno") +no; else break; dept.setDeptNo(no); deptNoText.setText("" + no); catch (InstantiationException e1) e1.printStackTrace(); catch (IllegalAccessException e1) e1.printStackTrace(); catch (ClassNotFoundException e1) e1.printStackTrace(); catch (SQLException e1) e1.printStackTrace(); private void createAddInterface()Container contentPane = getContentPane(); JLabel label1 = new JLabel("部門編號:"); JPanel panel1 = new JPanel(); deptNoText = new JTextField(10); deptNoText.setEditable(false); panel1.add(label1); panel1.add(deptNoText); JLabel label2 = new JLabel("部門名稱"); JPanel panel2 = new JPanel(); deptNameText = new JTextField(10); panel2.add(label2); panel2.add(deptNameText); JLabel label3 = new JLabel("部門電話"); JPanel panel3 = new JPanel(); deptTelText = new JTextField(10); panel3.add(label3); panel3.add(deptTelText); confirmButton = new JButton("保存"); cancelButton = new JButton("重置"); JPanel panel4 = new JPanel(); panel4.add(confirmButton); panel4.add(cancelButton); confirmButton.addActionListener(new ConfirmAction(); cancelButton.addActionListener(new CancelAction(); panel1.setSize(WIDTH,50); panel1.setLocation(0, 0); panel2.setSize(WIDTH,50); panel2.setLocation(0,50); panel3.setSize(WIDTH,50); panel3.setLocation(0,100); panel4.setSize(WIDTH,50); panel4.setLocation(0,150); contentPane.add(panel1); contentPane.add(panel2); contentPane.add(panel3); contentPane.add(panel4); private void storeDepartment()int rs; Jdbc conn = null; try conn = new Jdbc();PreparedStatement pstmt = conn.c.prepareStatement("insert into department values(?,?,?,?)");pstmt.setInt(1, dept.getDeptNo();pstmt.setString(2, dept.getDeptName();pstmt.setInt(3, dept.getEmpNum();pstmt.setInt(4, dept.getTel(); rs = pstmt.executeUpdate(); if( rs !=0 ) JOptionPane.showMessageDialog(null, "保存成功"); this.dispose(); else JOptionPane.showMessageDialog(null, "保存失敗"); this.dispose(); 5 測試5.1 部門信息刪除和增加模塊測試 模塊采用黑盒測試策略,設(shè)計(jì)測試用例實(shí)例如下:表5.1.1測試用例序號輸入數(shù)據(jù)預(yù)期結(jié)果1從文本框中輸入一個(gè)要刪除的部門號(102005)正常刪除2從文本框中輸入一個(gè)要刪除的部門號(102007)異常刪除3在各文本框中輸入相應(yīng)的內(nèi)容并保存正常添加4在部門編號文本框中輸入數(shù)字并保存異常添加 測試結(jié)果如下: 圖5.1.1測試用例1輸入 圖5.1.2測試用例1結(jié)果 圖5.1.3測試用例2輸入 圖5.1.4 測試用例2輸出結(jié)果 圖5.1.5測試用例3輸入 圖5.1.6測試用例4輸出結(jié)果 圖5.1.5測試用例4輸入 圖5.1.5測試用例4輸出結(jié)果 測試結(jié)論:該模塊功能基本正常,能夠接受合法的輸入,并能產(chǎn)生相應(yīng)的輸出結(jié)果,對于非法的輸入,系統(tǒng)采取的策略時(shí)忽略非法請求,直到用戶輸入正確的合法的數(shù)據(jù)才給以響應(yīng)并產(chǎn)生正常的輸出.6課程設(shè)計(jì)的總結(jié)與體會這次課程設(shè)計(jì)中我負(fù)責(zé)的是概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)這兩個(gè)模塊。概要設(shè)計(jì)中包括:系統(tǒng)設(shè)計(jì)總體思想,系統(tǒng)功能模塊設(shè)計(jì),系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)。其中系統(tǒng)設(shè)計(jì)總體思想主要說明了該系統(tǒng)是主要處理的事務(wù)以及系統(tǒng)的各個(gè)主要功能以及各功能模塊之間的層次關(guān)系。系統(tǒng)功能模塊主要說明了該系統(tǒng)是的實(shí)現(xiàn)各操作的流程。系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)則主要說明了各業(yè)務(wù)之間的聯(lián)系,以及各個(gè)實(shí)體之間的聯(lián)系。詳細(xì)設(shè)計(jì)這個(gè)模塊中包括:數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),程序數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),模塊功能詳細(xì)設(shè)計(jì)。數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)則主要定義了該系統(tǒng)所需的表格結(jié)構(gòu)。程序數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)則定義了該系統(tǒng)所用到的數(shù)據(jù)結(jié)構(gòu)。模塊功能詳細(xì)設(shè)計(jì)則主要用來實(shí)現(xiàn)各功能的模塊。在這個(gè)模塊中我們通過類圖來實(shí)現(xiàn)各類之間的調(diào)用關(guān)系,設(shè)計(jì)好操作界面,編寫好實(shí)現(xiàn)部分模塊的功能。而詳細(xì)設(shè)計(jì)這個(gè)模中,我主要的工作是負(fù)責(zé)部門管理這個(gè)模塊功能的設(shè)計(jì)。在這個(gè)模塊中,我為部門管理增加了兩個(gè)功能:一個(gè)部門信息的增加,另一個(gè)是部門信息的刪除。這兩個(gè)操作主要是通過菜單操作實(shí)現(xiàn)的。如要刪除某個(gè)部門信息則在部門菜單上選擇刪除菜單項(xiàng),在彈會的對話框中輸入要刪除的部門號再單擊確定即可實(shí)現(xiàn)刪除操作。通過次課程設(shè)計(jì)使我明白了合作的重要性,分工明確,培養(yǎng)了我良好的團(tuán)隊(duì)合作精神。同時(shí)我也掌握了軟件開發(fā)的具體流程以及開發(fā)方式。參考文獻(xiàn)1任勝兵、邢琳軟件工程M北京:北京郵電大學(xué)出版社2006:762442Shari Lawrence Pfleeger 、Joanne M.Atlee.軟件工程理論與實(shí)踐(第三版影印版).北京:高等教育出版社2008.5:141209,337-362.3閻菲.Java程序設(shè)計(jì)教程.北京:中國水利水電出版社.2004:154-233.4Harvey M.Deitel Paul J.Deitel.Java程序設(shè)計(jì)教程.北京:機(jī)械工業(yè)出版社.2006.1.5孫風(fēng)棟 等.Oracle數(shù)據(jù)庫基礎(chǔ)教程.北京:電子工業(yè)出社.2008.6:276-358.致謝在這里我要特別感謝我們的指導(dǎo)老師姚老師和組長王培同學(xué),謝謝他們不厭其煩的幫助我。