




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
./《Java程序設計》課程設計報告書課題名稱基于Java的教師檔案管理系統的設計姓名學號學院專業指導教師2016年6月28日一、設計任務及要求:1.采用B/S模式進行開發,其優點是后臺與前臺處理層次分明,而且符合眾多已經習慣網頁方式的用戶。2.采用面向對象的開發與設計理念。運用面向對象技術的前提是對整體系統的高度和準確抽象,通過它可以保證系統良好的框架,進而帶來產品較強的穩定性和運行效率。3.采用模塊化設計。模塊化設計要求將整個系統劃分成基于小的模塊,有利于代碼的重載,簡化設計和實現過程。4.簡單方便的系統界面。設計簡單友好的系統界面,方便用戶較快的適應系統的操作。5.速度優先原則。由于此工具最重要的評測標準就是速度,因此在設計過程中,具體過程盡量做到資源占用少,速度快。6.設計既要突出重點,又要細致周到。要符合設計需求,在有可能改進的地方進行擴充,使系統更適應用戶的需要。指導教師簽名:年月日二、指導教師評語:指導教師簽名:年月日三、成績驗收蓋章年月日基于Java的教師檔案管理系統系統設計譚維雋1設計目的長久以來,教職工的管理工作大多數都采用的是傳統的手工方式來記錄相關信息,這種管理方式存在很多缺點,比如說,教職工信息、工資信息的錄入,查詢,更新,分析都要完全依賴管理人員的手工記錄和人工分析,人工記錄是相當麻煩的。為滿足需求,決定采用各種編程語言JSP開發了基于B/S架構的教師檔案管理系統,教師檔案管理系統是涉及信息科學、數據計算和計算機技術的復雜的人機交互系統。通過這些系統,可以對教職工和管理進行智能化管理,有效地記錄并查詢教職工的各項情況,為管理者提供了諸多方便。2設計的主要容和要求2.1數據庫的邏輯結構設計我們知道,數據庫概念模型獨立于任何特定的數據庫管理系統,因此,需要根據具體使用的數據庫管理系統的特點進行轉換。即轉化為按計算機觀點處理的邏輯關系模型,E-R模型向關系數據庫模型轉換應遵循下列原則:*每一個實體要轉換成一個關系*所有的主鍵必須定義非空〔NOTNULL*對于二元聯系應按照一對多、弱對實、一對一、多對多等聯系來定義外鍵。根據E-R模型,教師檔案管理系統建立了以下邏輯數據結構,下面是各數據表的詳細說明。〔1教師信息表主要是記錄了教師的基本信息。表結構如表2.1所示。表2.1教師信息表<t_jaoshi>列名數據類型長度允許空是否主鍵說明idint4否是IDgonghaovarchar50否否教師號xingmingvarchar50否否xingbievarchar50否否性別nianlingvarchar20否否年齡shengrivarchar20否否出生日期gongzuovarchar50否否工作時間zhuanyevarchar50否否專業zhaopianvarchar50否否照片beizhuvarchar50否否備注信息<2>工資信息表主要是記錄了教職工工資的基本信息。表結構如表2.2所示。表2.2工資信息表<t_gongzi>列名數據類型長度允許空是否主鍵說明idint4否是IDjsidvarchar50否否教師IDriqivarchar50否否工資月份gongzivarchar50否否工資數jiangjinvarchar20否否獎金<3>管理員信息表主要記錄的管理員的賬號信息,包括用戶名和密碼,表結構如表2.3所示。表2.3管理員信息表<t_admin>列名數據類型長度允許空是否主鍵說明userIdint4否是編號userNamevarchar50否否用戶名userPwvarchar50否否密碼2.2數據庫的連接原理采用JDBC連接數據庫的方式,只需在工程中導入對應數據庫的jar包,就可以方便的對數據庫進行連接,在程序中,用Class.forName<>方法來加載驅動程序,在用DriverManager的getConnection〔方法就可以創建一個數據庫連接。程序采用的是DAO模式來操作數據庫,DAO<DataAccessObject,數據訪問對象>,是Java編程中的一種經典模式,已被廣泛應用,也是J2EE架構中持久層框架的基礎知識,基于分層次式的軟件架構來實現對數據庫的訪問操作。DAO模式的主要思想就是從抽象數據源獲取與操縱數據的方法。抽象數據的含義就是編寫應用程序的程序員不必關心數據庫的物理位置,已經是何種數據庫,只需使用封裝數據庫中表示記錄的數據對象即可。其思想如圖2.4所示:封裝使用封裝使用DataSourceDataAccessObjectBusinessObjectDataSourceDataAccessObjectBusinessObject創建/使用獲取/修改創建/使用獲取/修改DataTransferObjectDataTransferObject圖2.4DAO模式類圖圖中BussinessObject是業務對象,是使用DAO模式的客戶端;DataTransferObject數據傳輸對象,在應用程序不同層次之間傳輸對象,在一個分布式應用程序中,通常可以提高整理的性能;DataObjectAcces數據輸入/輸出對象封裝了對數據源的一些基本操作;DataSource指的是數據源??梢詮膱D中看出,DAO模式分離了業務邏輯和數據羅即將,是的編寫的軟件具有良好的層次式體系結構。本系統為了方便數據庫的操作,主要使用DBContent的對象來接一個數據庫〔建立一個類DBContent,代碼如代碼1。2.3系統功能實現在管理信息系統的生命周期中,僅過了需求分析、系統設計等階段之后,便開始了系統實施階段。在系統分析和設計階段,系統開發工作主要是集中在邏輯、功能和技術設計上,系統實施階段要繼承此前面各個階段的工作成果,將技術設計轉化為物理實現,因此系統實施的成果是系統分析和設計階段的結晶。2.3.1系統登陸頁1.描述:為了保證系統的安全性,要先使用本系統必須先登陸到系統中。2.在登陸頁面輸入用戶名和密碼以,選擇登陸身份后,點擊提交按鈕,跳轉到登陸的service中,在該service中會對用戶名,密碼,驗證碼進行判斷,并根據相應的用戶角色進入對應的頁面,代碼如代碼2。2.3.2系統主頁面1.描述:管理員主頁面:左方頁面展示了管理員可操作的七大功能,進入相關的管理頁面可以到子菜單,并且高亮顯示,每個管理模塊下面都有相應的子菜單。2.在每個jsp頁面將會對相關用戶進行攔截操作,這樣可以提高安全性,防止用戶不經過登陸頁面而進入任何子菜單頁面,如代碼3:2.3.3教職工信息管理〔1教職工錄入1.描述:管理員輸入教職工相關正確信息后點擊錄入按鈕,如果是沒有輸入完整的信息,都會給出相應的錯誤提示,不能錄入成功。輸入數據都通過form表單中定義的方法onsubmit="returncheckForm<>"來檢查,checkForm<>函數中是各種的校驗輸入數據的方式。2.流程圖如下圖4所示:〔2教職工管理1.描述:管理員點擊左側的菜單"教職工管理",頁面跳轉到做教職工界面,調用后臺的servlet類查詢所有教職工的信息。2.教職工管理關鍵代碼如代碼4:2.3.4工資信息管理〔1工資錄入1.描述:在此頁面主要是輸入工資數、獎金等信息,然后選擇教職工,所有信息都不能夠為空,是否為空也是通過form表單中的onsubmit="returncheckForm<>來檢查?!?工資信息管理1.描述:管理員點擊左側的菜單"工資管理",頁面跳轉到工資管理界面,調用后臺的gongziServlet類查詢出所有的工資信息,并把這些信息封轉到數據集合List中,綁定到request對象,然后頁面跳轉到相應的jsp,顯示出來。2.工資管理關鍵代碼代碼5:〔3修改個人密碼1.描述:輸入用戶名和用戶的原有密碼,輸入新密碼以后點擊修改按鈕即可修改密碼成功?!?安全退出系統1.描述:點此按鈕回到系統的主頁面。2.關鍵代碼如代碼6。3整體設計方案4流程圖設計登陸系統登陸系統管理員錄入教職工信息管理員錄入教職工信息系統驗證教職工信息錄入成功結束通過未通過圖4教職工錄入流程圖5程序設計代碼1:publicDBContent<>{ StringCLASSFORNAME=".SqlServer.jdbc.Driver";//連接數據庫的驅動 Stringurl="jdbc:SqlServer://localhost:3306/jzggl"; Stringuser="root";//連接數據庫的用戶名 Stringpassword="root";//連接數據庫的密碼 try{ Class.forName<CLASSFORNAME>; con=DriverManager.getConnection<url,user,password>;//加載數據庫的驅動 stmt=con.createStatement<ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE>; } catch<Exceptionex>{ ex.printStackTrace<>; } } 代碼2publicStringlogin<StringuserName,StringuserPw,intuserType>{ try { Thread.sleep<700>; }catch<InterruptedExceptione> { //TODOAuto-generatedcatchblock e.printStackTrace<>; } Stringresult="no"; if<userType==0>//系統管理員登陸 { Stringsql="fromTAdminwhereuserName=?anduserPw=?"; Object[]con={userName,userPw}; ListadminList=adminDAO.getHibernateTemplate<>.find<sql,con>; if<adminList.size<>==0> { result="no"; } else { WebContextctx=WebContextFactory.get<>; HttpSessionsession=ctx.getSession<>; TAdminadmin=<TAdmin>adminList.get<0>; session.setAttribute<"userType",0>; session.setAttribute<"admin",admin>; result="yes"; } } if<userType==1> { } if<userType==2> { } returnresult; }代碼3if<session.getAttribute<"user">==null>{out.print<"<script>alert<'請先登錄!'>;window.open<'../index.jsp','_self'></script>">; }代碼4publicvoidjihuayuanAdd<HttpServletRequestreq,HttpServletResponseres>publicvoidjiaoshiDel<HttpServletRequestreq,HttpServletResponseres> { intid=Integer.parseInt<req.getParameter<"id">>; Stringdel="yes"; Stringsql="updatet_jiaoshisetdel=?whereid=?"; Object[]params={del,id}; DBmydb=newDB<>; mydb.doPstm<sql,params>; mydb.closed<>; req.setAttribute<"message","教師信息刪除成功!">; req.setAttribute<"path","jiaoshi?type=jiaoshiMana">;StringtargetURL="/common/success.jsp"; dispatch<targetURL,req,res>; } publicvoidjiaoshiUpd<HttpServletRequestreq,HttpServletResponseres> { intid=Integer.parseInt<req.getParameter<"id">>; Stringgonghao=req.getParameter<"gonghao">; Stringxingming=req.getParameter<"xingming">; Stringxingbie=req.getParameter<"xingbie">; Stringnianling=req.getParameter<"nianling">; Stringshengri=req.getParameter<"shengri">; Stringgongzuo=req.getParameter<"gongzuo">; Stringzhuanye=req.getParameter<"zhuanye">; Stringzhaopian=req.getParameter<"zhaopian">; Stringbeizhu=req.getParameter<"beizhu">; Stringsql="updatet_jiaoshisetgonghao=?,xingming=?,xingbie=?,nianling=?,shengri=?,gongzuo=?,zhuanye=?,zhaopian=?,beizhu=?whereid=?"; Object[]params={gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,id}; DBmydb=newDB<>; mydb.doPstm<sql,params>; mydb.closed<>; req.setAttribute<"message","教師信息修改成功!">; req.setAttribute<"path","jiaoshi?type=jiaoshiMana">;StringtargetURL="/common/success.jsp"; dispatch<targetURL,req,res>; } publicvoidjiaoshiAdd<HttpServletRequestreq,HttpServletResponseres> { Stringgonghao=req.getParameter<"gonghao">; Stringxingming=req.getParameter<"xingming">; Stringxingbie=req.getParameter<"xingbie">; Stringnianling=req.getParameter<"nianling">; Stringshengri=req.getParameter<"shengri">; Stringgongzuo=req.getParameter<"gongzuo">; Stringzhuanye=req.getParameter<"zhuanye">; Stringzhaopian=req.getParameter<"zhaopian">; Stringbeizhu=req.getParameter<"beizhu">; Stringdel="no"; Stringsql="insertintot_jiaoshi<gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,del>"+ "values<?,?,?,?,?,?,?,?,?,?>"; Object[]params={gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,del}; DBmydb=newDB<>; mydb.doPstm<sql,params>; mydb.closed<>; req.setAttribute<"message","教師信息添加成功!">; req.setAttribute<"path","jiaoshi?type=jiaoshiMana">;StringtargetURL="/common/success.jsp"; dispatch<targetURL,req,res>; } publicvoidjiaoshiMana<HttpServletRequestreq,HttpServletResponseres>throwsServletException,IOException { ListjiaoshiList=newArrayList<>; Stringsql="select*fromt_jiaoshiwheredel='no'"; Object[]params={}; DBmydb=newDB<>; try { mydb.doPstm<sql,params>; ResultSetrs=mydb.getRs<>; while<rs.next<>> { TJiaoshijiaoshi=newTJiaoshi<>; jiaoshi.setId<rs.getInt<"id">>; jiaoshi.setGonghao<rs.getString<"gonghao">>; jiaoshi.setXingming<rs.getString<"xingming">>; jiaoshi.setXingbie<rs.getString<"xingbie">>; jiaoshi.setNianling<rs.getString<"nianling">>; jiaoshi.setShengri<rs.getString<"shengri">>; jiaoshi.setGongzuo<rs.getString<"gongzuo">>; jiaoshi.setZhuanye<rs.getString<"zhuanye">>; jiaoshi.setZhaopian<rs.getString<"zhaopian">>; jiaoshi.setBeizhu<rs.getString<"beizhu">>; jiaoshiList.add<jiaoshi>; } rs.close<>; } catch<Exceptione> { e.printStackTrace<>; } mydb.closed<>; req.setAttribute<"jiaoshiList",jiaoshiList>; req.getRequestDispatcher<"admin/jiaoshi/jiaoshiMana.jsp">.forward<req,res>; }代碼5publicvoidgongziAdd<HttpServletRequestreq,HttpServletResponseres>{ intjsid=Integer.parseInt<req.getParameter<"jsid">>; Stringriqi=req.getParameter<"riqi">; Stringgongzi=req.getParameter<"gongzi">; Stringjiangjin=req.getParameter<"jiangjin">; Stringsql="insertintot_gongzi<jsid,riqi,gongzi,jiangjin>values<?,?,?,?>"; Object[]params={jsid,riqi,gongzi,jiangjin}; DBmydb=newDB<>; mydb.doPstm<sql,params>; mydb.closed<>; req.setAttribute<"message","教師工資添加成功">; req.setAttribute<"path","gongzi?type=gongziMana">;StringtargetURL="/common/success.jsp"; dispatch<targetURL,req,res>; } publicvoidjsList<HttpServletRequestreq,HttpServletResponseres>throwsServletException,IOException { ListjiaoshiList=newArrayList<>; Stringsql="select*fromt_jiaoshiwheredel='no'"; Object[]params={}; DBmydb=newDB<>; try { mydb.doPstm<sql,params>; ResultSetrs=mydb.getRs<>; while<rs.next<>> { TJiaoshijiaoshi=newTJiaoshi<>; jiaoshi.setId<rs.getInt<"id">>; jiaoshi.setGonghao<rs.getString<"gonghao">>; jiaoshi.setXingming<rs.getString<"xingming">>; jiaoshi.setXingbie<rs.getString<"xingbie">>; jiaoshi.setNianling<rs.getString<"nianling">>; jiaoshi.setShengri<rs.getString<"shengri">>; jiaoshi.setGongzuo<rs.getString<"gongzuo">>; jiaoshi.setZhuanye<rs.getString<"zhuanye">>; jiaoshi.setZhaopian<rs.getString<"zhaopian">>; jiaoshi.setBeizhu<rs.getString<"beizhu">>; jiaoshiList.add<jiaoshi>; } rs.close<>; } catch<Exceptione> { e.printStackTrace<>; } mydb.closed<>; req.setAttribute<"jiaoshiList",jiaoshiList>; req.getRequestDispatcher<"admin/gongzi/jsList.jsp">.forward<req,res>; } publicvoidtoAddGz<HttpServletRequestreq,HttpServletResponseres>throwsServletException,IOException { TJiaoshijiaoshi=newTJiaoshi<>; intjsid=Integer.parseInt<req.getParameter<"jsid">>; Stringsql="select*fromt_jiaoshiwhereid=?"; Object[]params={jsid}; DBmydb=newDB<>; try { mydb.doPstm<sql,params>; ResultSetrs=mydb.getRs<>; while<rs.next<>> { jiaoshi.setId<rs.getInt<"id">>; jiaoshi.setGonghao<rs.getString<"gonghao">>; jiaoshi.setXingming<rs.getString<"xingming">>; jiaoshi.setXingbie<rs.getString<"xingbie">>; jiaoshi.setNianling<rs.getString<"nianling">>; jiaoshi.setShengri<rs.getString<"shengri">>; jiaoshi.setGongzuo<rs.getString<"gongzuo">>; jiaoshi.setZhuanye<rs.getString<"zhuanye">>; jiaoshi.setZhaopian<rs.getString<"zhaopian">>; jiaoshi.setBeizhu<rs.getString<"beizhu">>; } rs.close<>; } catch<Exceptione> { e.printStackTrace<>; } mydb.closed<>; GregorianCalendargc=newGregorianCalendar<>; StringstrDate=DateUtils.formatDate2Str<gc.getTime<>,"yyyy-MM">; req.setAttribute<"strDate",strDate>; req.setAttribute<"jiaoshi",jiaoshi>; req.getRequestDispatcher<"admin/gongzi/gzAdd.jsp">.forward<req,res>; } publicvoidgongziMana<HttpServletRequestreq,HttpServletResponseres>throwsServletException,IOException { ListgongziList=newArrayList<>; Stringriqi=req.getParameter<"riqi">==null?"":req.getParameter<"riqi">; Stringsql="selecttb.xingming,ta.*fromt_gongzita,t_jiaoshitbwhereta.jsid=tb.id"; if<!<"".equals<riqi>>>{ sql+="andta.riqi='"+riqi+"'"; } Object[]params={}; DBmydb=newDB<>; try { mydb.doPstm<sql,params>; ResultSetrs=mydb.getRs<>; while<rs.next<>> { TGongzigongzi=newTGongzi<>; gongzi.setId<rs.getInt<"id">>; gongzi.setJsxm<rs.getString<"xingming">>; gongzi.setRiqi<rs.getString<"riqi">>; gongzi.setGongzi<rs.getString<"gongzi">>; gongzi.setJiangjin<rs.getString<"jiangjin">>; gongziList.add<gongzi>; } rs.close<>; } catch<Exceptione> { e.printStackTrace<>; } mydb.closed<>; req.setAttribute<"riqi",riqi>; req.setAttribute<"gongziList",gongziList>; req.getRequestDispatcher<"admin/gongzi/gongziMana.jsp">.forward<req,res>; }代碼6主要是通過javascript語句來實現,item_word[8][4]="退出系統";item_link[8][4]="javascript:window.open<'../index.jsp','_self'>";代碼76系統測試6.1系統測試目的與意義系統測試是管理信息系統開發周期中一個十分重要而漫長的的階段。其重要性體現在他是保證系統質量與可靠性的最后關口,是對整個系統開發過程包括系統分析、系統設計和系統實現的最終審查。系統測試的任務是盡可能徹底的檢查出程序中的錯誤,提高軟件系統的可靠性,其目的是檢驗系統"做得怎樣"。這這階段又可以分為三個步驟:模塊測試,測試每個模塊的程序是否正確;組裝測試,測試模塊之間的接口是否正確;確認測試,測試整個軟件系統是否滿足用戶功能和性能的要求。測試發現問題之后要經過調試找出錯誤原因和位置,然后進行改正。是基于系統整體需求說明書的黑盒測試,應覆蓋系統隨偶聯合的部件,系統測試是正對整個產品系統進行的測試,目的是驗證系統是否滿足了需求規格的定義,找出需求規格不符合或與之矛盾的地方。6.2主頁面的登錄模塊測試測試流程:1.打開系統首頁,輸入錯誤的登錄信息2.登錄3.輸入正確的登錄信息4.登錄5.測試結果模塊名稱測試用例預期結果實際結果是否通過登錄模塊用戶名:null密碼:null彈出錯誤提示,請輸入用戶名登陸失敗,提示請輸入用戶名通過登錄模塊用戶名:m1密碼:null彈出錯誤提示,請輸入密碼失敗,提示輸入密碼通過登錄模塊用戶名:m1密碼:1彈出錯誤提示,用戶名或者密碼錯誤登陸失敗,提示用戶名或者密碼錯誤通過7設計總結本次課程設計將我大學所學的軟件工程理論知識用到了具體的實踐中去,深化了理論知識,同時也鍛煉了動手實踐能力。在這段日子里,我查閱了許多有關教師檔案管理信息系統的資料,翻閱了許多JSP的書籍,結合自己的經驗,詳細調查了教職工管理的工作容與細節,開發設計了這個教師檔案管理系統,雖然企業每個學期都會有相應課程的課程設計和實訓來作為動手練習訓練,不過在本次畢業設計具體的實踐的時候還是遇到了很多小問題,比如說在jsp頁面將輸入框設為不可用是添加屬性re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年審計實務試題及答案
- 2023年中國能建部分所屬企業領導人員招聘(競聘)筆試參考題庫附帶答案詳解
- 白酒釀造過程中的工藝傳承與創新考核試卷
- 紙張油墨吸收性考核試卷
- 皮革護理的文化價值傳播與推廣考核試卷
- 2024年微生物檢驗技師考試指導及試題及答案
- 棉花倉儲員工職業素養培訓考核試卷
- 糧油市場渠道開發與維護策略考核試卷
- 相機拍攝模式創新與應用考核試卷
- 2024年項目管理軟技能的重要性試題及答案
- 混凝土樓蓋課程設計講解
- 3-1-立體表面上點的投影
- (正式版)QB∕T 2761-2024 室內空氣凈化產品凈化效果測定方法
- GB/T 44193-2024全國一體化政務服務平臺一網通辦基本要求
- NB-T+31045-2013風電場運行指標與評價導則
- 北京市海淀區2023-2024學年八年級下學期期末物理試卷
- 《無人機測繪技能訓練模塊》課件-模塊8:像片控制點測量
- JBT 14732-2024《中碳和中碳合金鋼滾珠絲杠熱處理技術要求》
- 固體氧化物燃料電池陰極的絲網印刷制備及其性能評價的研究
- 制定偵破方案教案設計
- 機動車檢測站內審報告(依據補充技術要求)
評論
0/150
提交評論