基于MVC模式的學(xué)生成績(jī)管理系統(tǒng)_第1頁(yè)
基于MVC模式的學(xué)生成績(jī)管理系統(tǒng)_第2頁(yè)
基于MVC模式的學(xué)生成績(jī)管理系統(tǒng)_第3頁(yè)
基于MVC模式的學(xué)生成績(jī)管理系統(tǒng)_第4頁(yè)
基于MVC模式的學(xué)生成績(jī)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目錄TOC o 1-5 h z HYPERLINK l bookmark2 o Current Document 第1章概述1 HYPERLINK l bookmark4 o Current Document 系統(tǒng)目的和意義1 HYPERLINK l bookmark6 o Current Document 系統(tǒng)開發(fā)環(huán)境1 HYPERLINK l bookmark8 o Current Document 系統(tǒng)開發(fā)模式及基本功能1 HYPERLINK l bookmark10 o Current Document 第2章系統(tǒng)設(shè)計(jì)3 HYPERLINK l bookmark12 o Current

2、 Document 系統(tǒng)的模塊劃分3 HYPERLINK l bookmark14 o Current Document 數(shù)據(jù)庫(kù)設(shè)計(jì)3 HYPERLINK l bookmark16 o Current Document 第3章系統(tǒng)的詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)6 HYPERLINK l bookmark18 o Current Document 3.1數(shù)據(jù)庫(kù)底層訪問類6 HYPERLINK l bookmark20 o Current Document 登錄模塊9 HYPERLINK l bookmark22 o Current Document 系統(tǒng)首頁(yè)面導(dǎo)航11 HYPERLINK l bookmark

3、24 o Current Document 學(xué)生信息管理12 HYPERLINK l bookmark26 o Current Document 課程信息管理19 HYPERLINK l bookmark34 o Current Document 學(xué)生成績(jī)管理20結(jié)論22 HYPERLINK l bookmark44 o Current Document 參考文獻(xiàn)23 第1章概述系統(tǒng)目的和意義本次課程設(shè)計(jì)的題目是“基于MVC模式的學(xué)生成績(jī)管理系統(tǒng)”的設(shè)計(jì)與實(shí)現(xiàn),該設(shè)計(jì)是對(duì)本學(xué)期前八周所學(xué)的JSP程序設(shè)計(jì)課程的鞏固和深入應(yīng)用,同時(shí)結(jié)合Java語(yǔ)言、JSP技術(shù)進(jìn)行Web程序設(shè)計(jì),利用前面學(xué)過的知識(shí)

4、來(lái)解決實(shí)際問題,鍛煉解決問題的能力和動(dòng)手編程的能力。鑒于近年來(lái),企業(yè)級(jí)應(yīng)用系統(tǒng)大多數(shù)都部署到Web服務(wù)器上,早期的Web應(yīng)用程序開發(fā)技術(shù),已經(jīng)不能很好的勝任這個(gè)任務(wù),因此該課題項(xiàng)目可以提高學(xué)生對(duì)未來(lái)企業(yè)的適應(yīng)性,更好的理解軟件工程的意義。系統(tǒng)開發(fā)環(huán)境1本系統(tǒng)采用Browser/Server體系結(jié)構(gòu)。2系統(tǒng)開發(fā)環(huán)境1)開發(fā)平臺(tái):MyEclipse5.5.1GA2)開發(fā)語(yǔ)言:JSP、Java3)數(shù)據(jù)庫(kù):MicrosoftSQLServer20053系統(tǒng)運(yùn)行環(huán)境客戶端:瀏覽器:IE6.0服務(wù)器端:數(shù)據(jù)庫(kù):MicrosoftSQLServer2005應(yīng)用程序系統(tǒng)系統(tǒng)開發(fā)模式及基本功能本系統(tǒng)是基于MVC

5、模式設(shè)計(jì)和開發(fā)的,MVC(Model-View-Controller)模式是一個(gè)應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成三層一一模型層、視圖層、控制層。MVC是一種軟件設(shè)計(jì)典范,用于組織代碼用一種業(yè)務(wù)邏輯和數(shù)據(jù)顯示分離的方法,這個(gè)方法的假設(shè)前提是如果業(yè)務(wù)邏輯被聚集到一個(gè)部件里面,而且界面和用戶圍繞數(shù)據(jù)的交互能被改進(jìn)和個(gè)性化定制而不需要重新編寫業(yè)務(wù)邏輯MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中?;贛VC模式的學(xué)生成績(jī)管理系統(tǒng)主要實(shí)現(xiàn)前臺(tái)和后臺(tái)兩部分功能設(shè)計(jì),其中前臺(tái)主要實(shí)現(xiàn)按照學(xué)生

6、信息、課程信息和成績(jī)信息進(jìn)行瀏覽和查詢功能,后臺(tái)主要實(shí)現(xiàn)學(xué)生信息管理、課程信息管理和學(xué)生成績(jī)管理功能。在學(xué)生成績(jī)管理模塊中,管理員可以查詢、瀏覽已提交成績(jī)與未提交成績(jī)的課程,對(duì)于相應(yīng)的課程,可以逐條刪除或批量刪除或修改已提交的成績(jī)信息,教師可以對(duì)未提交成績(jī)進(jìn)行成績(jī)錄入,學(xué)生只能夠查詢?yōu)g覽自己的已提交成績(jī)。所有的查詢?yōu)g覽功能均實(shí)現(xiàn)了分頁(yè)功能。第2章系統(tǒng)設(shè)計(jì)系統(tǒng)的模塊劃分學(xué)生成績(jī)管理系統(tǒng)可實(shí)現(xiàn)學(xué)生成績(jī)管理功能,管理員可以對(duì)學(xué)生信息和課程信息進(jìn)行查詢、增加、刪除、修改。教師可以對(duì)學(xué)生成績(jī)進(jìn)行錄入。學(xué)生可以對(duì)自己的成績(jī)進(jìn)行查詢。1、學(xué)生信息管理模塊管理員可以對(duì)學(xué)生的信息進(jìn)行查詢、增加、刪除、修改,可以

7、批量刪除。2、課程信息管理模塊管理員可以對(duì)課程的信息進(jìn)行查詢、增加、刪除、修改,可以批量刪除。3、學(xué)生成績(jī)管理模塊教師可以對(duì)成績(jī)信息進(jìn)行錄入。成績(jī)可批量增加。系統(tǒng)功能模塊圖如圖2-1所示。增加學(xué)生信息刪除學(xué)生信息修改學(xué)生信息查詢學(xué)生信息增加課程信息刪除課程信息修改課程信息查詢課程信息錄入學(xué)生成績(jī)查詢個(gè)人成績(jī)修改學(xué)生成績(jī)圖2-1系統(tǒng)功能模塊圖數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)管理系統(tǒng)是允許用戶在計(jì)算機(jī)上創(chuàng)建數(shù)據(jù)庫(kù),增加、修改、刪除、排序和檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),并使用數(shù)據(jù)庫(kù)中的數(shù)據(jù)創(chuàng)建表格和報(bào)表的軟件系統(tǒng)。數(shù)據(jù)庫(kù)的設(shè)計(jì)是整個(gè)系統(tǒng)成敗的一個(gè)重要環(huán)節(jié)。合理的數(shù)據(jù)庫(kù)設(shè)計(jì)能夠給系統(tǒng)帶來(lái)很好的效率。而且能夠使得各個(gè)功能模塊的設(shè)

8、計(jì)變得非常簡(jiǎn)單而且模塊間的關(guān)系特別明確本系統(tǒng)的數(shù)據(jù)庫(kù)是在SQLServer2005中創(chuàng)建的。經(jīng)過需求分析和初步設(shè)計(jì),學(xué)生成績(jī)管理系統(tǒng)數(shù)據(jù)庫(kù)部分主要包含5個(gè)表,分別是學(xué)生信息表、教師信息表、用戶信息表、課程信息表和成績(jī)信息表表的結(jié)構(gòu)、表字段的數(shù)據(jù)類型及相關(guān)說(shuō)明如下:1、學(xué)生信息表學(xué)生信息表包含了學(xué)生的學(xué)號(hào)、姓名、性別、出生年月、專業(yè)以及班級(jí)信息,表2-1所示是學(xué)生信息表結(jié)構(gòu)。表2-1學(xué)生信息表列名說(shuō)明數(shù)據(jù)類型約束studentld學(xué)號(hào)nchar(lO)主鍵studentName姓名nchar(lO)非空gender性別char(2)“男”或“女”birthday出生年月nchar(lO)depa

9、rtment院系nchar(lO)非空major專業(yè)nchar(lO)非空class班級(jí)nchar(lO)非空2、教師信息表教師信息表包含了教師的教工號(hào)、姓名、性別、出生年月、院系信息,表2-2所示是教師信息表結(jié)構(gòu)。表2-2教師信息表列名說(shuō)明數(shù)據(jù)類型約束teacherId教工號(hào)nchar(lO)主鍵teacherName姓名nchar(lO)非空gender性別char(2)“男”或“女”birthday出生年月nchar(lO)department院系nchar(lO)非空3、用戶信息表用戶信息表包含了用戶的用戶名、密碼及角色信息。表2-3所示是用戶信息表結(jié)構(gòu)。表2-3用戶信息表列名說(shuō)明數(shù)據(jù)

10、類型約束userName用戶名nchar(lO)主鍵password密碼nchar(10)非空actor角色nchar(10)非空4、課程信息表課程信息表包含了課程的課程號(hào)、課程名、開課時(shí)間、學(xué)分、考試性質(zhì)、開課專業(yè)及任課教師信息。表2-4所示是課程信息表結(jié)構(gòu)。表2-4課程信息表列名說(shuō)明數(shù)據(jù)類型約束courseld課程號(hào)nchar(lO)主鍵courseName課程名nchar(lO)非空startTime開課時(shí)間nchar(lO)非空credit學(xué)分nchar(lO)非空character考試性質(zhì)nchar(lO)非空major開課專業(yè)nchar(lO)非空teacherId任課教師ncha

11、r(lO)非空5、成績(jī)信息表成績(jī)信息表包含了學(xué)生成績(jī)的學(xué)號(hào)、課程號(hào)、任課教師號(hào)、開課時(shí)間、及成績(jī)信息。表2-5所示是課程信息表結(jié)構(gòu)。表2-5成績(jī)信息表列名說(shuō)明數(shù)據(jù)類型約束studentld學(xué)號(hào)nchar(lO)主鍵courseId課程號(hào)nchar(lO)主鍵teacherId任課教師號(hào)nchar(10)非空startTime開課時(shí)間nchar(10)非空Grade成績(jī)nchar(10)非空以上就是學(xué)生成績(jī)管理系統(tǒng)所需的數(shù)據(jù)表,按照這些表結(jié)構(gòu)設(shè)計(jì),在MicrosoftSQLServer2005中創(chuàng)建數(shù)據(jù)庫(kù)GradeManage,并創(chuàng)建相應(yīng)的表。第3章系統(tǒng)的詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)數(shù)據(jù)庫(kù)底層訪問類本系統(tǒng)的設(shè)

12、計(jì)使用基于Servlet的MVC架構(gòu)模式,將系統(tǒng)的各個(gè)功能的實(shí)現(xiàn)過程嚴(yán)格的劃分為視圖(View)、控制(Controller)、模型(Model),其中View負(fù)責(zé)界面的顯示,Controller負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和響應(yīng),Model負(fù)責(zé)邏輯業(yè)務(wù)對(duì)象實(shí)體和業(yè)務(wù)實(shí)體。由于本系統(tǒng)是一種信息管理系統(tǒng),在這三層之下,還要建立數(shù)據(jù)庫(kù)訪問層,該層完成數(shù)據(jù)庫(kù)的連接、SQL語(yǔ)句的具體執(zhí)行等操作。這一層由MVC模式中的Model層里的業(yè)務(wù)實(shí)體進(jìn)行調(diào)用,從而完成邏輯業(yè)務(wù)的信息維護(hù)操作。3.1.1JDBC數(shù)據(jù)庫(kù)訪問技術(shù)JDBC(JavaDataBaseConnectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句

13、的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問,它由一組用Java語(yǔ)言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫(kù)開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開發(fā)人員能夠用純JavaAPI編寫數(shù)據(jù)庫(kù)應(yīng)用程序。有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語(yǔ)句就是一件很容易的事。換言之,有了JDBCAPI,就不必為訪問Sybase數(shù)據(jù)庫(kù)專門寫一個(gè)程序,為訪問Oracle數(shù)據(jù)庫(kù)又專門寫一個(gè)程序,或?yàn)樵L問Informix數(shù)據(jù)庫(kù)又編寫另一個(gè)程序等等,程序員只需用JDBCAPI寫一個(gè)程序就夠了,它可向相應(yīng)數(shù)據(jù)庫(kù)發(fā)送SQL調(diào)用。同時(shí),將Java語(yǔ)言和JDBC結(jié)合起來(lái)使程序員不必為不同

14、的平臺(tái)編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺(tái)上運(yùn)行,這也是Java語(yǔ)言“編寫一次,處處運(yùn)行”的優(yōu)勢(shì)。Java數(shù)據(jù)庫(kù)連接(JDBC)由一組用Java編程語(yǔ)言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫(kù)開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純JavaAPI來(lái)編寫數(shù)據(jù)庫(kù)應(yīng)用程序。然而各個(gè)開發(fā)商的接口并不完全相同,所以開發(fā)環(huán)境的變化會(huì)帶來(lái)一定的配置變化。本文主要集合了不同數(shù)據(jù)庫(kù)的連接方式。SQLSERVER連接方式:第一步:新建類DBManager.java第二步:導(dǎo)包操作第三步:編寫類代碼publicclassDBManager1、定義變量2、獲取連接方法getConnectio

15、n3、執(zhí)行查詢方法executeQuery或更新方法executeUpdate4、釋放資源的方法releaseSource然后把sqljdbc.jar導(dǎo)入到項(xiàng)目文件下的WEB-INF下的lib文件夾中。添加DBManager公共類首先創(chuàng)建包nepu.tools,在該包下創(chuàng)建名為DBManager的類,該類得職責(zé)用于提供訪問、操作數(shù)據(jù)庫(kù)的公共方法。添加公共類的方法和步驟如下:在工程中的包名上點(diǎn)右鍵,選擇【New】-【Class】菜單項(xiàng),將彈出【NewJavaClass】對(duì)話框,保留默認(rèn)的選擇,在Name文本框中輸入DBManager,點(diǎn)擊Finsih按鈕。編寫公共方法3.1.2小節(jié)為項(xiàng)目添加了一

16、個(gè)DBManager類,該類用于存放連接、操作數(shù)據(jù)庫(kù)的公共方法,本小節(jié)介紹如何編寫這些公共方法。首先為DBManager類聲明幾個(gè)公共變量,其中conn為數(shù)據(jù)庫(kù)連接對(duì)象,stmt用于發(fā)送SQL語(yǔ)句、接收SQL的執(zhí)行結(jié)果,rs為執(zhí)行查詢語(yǔ)句得到的結(jié)果集,uri表示要連接的數(shù)據(jù)庫(kù)的路徑,根據(jù)數(shù)據(jù)庫(kù)不同變化,user為登錄數(shù)據(jù)庫(kù)的用戶名,password為登錄數(shù)據(jù)庫(kù)的密碼。該類的變量聲明代碼如下:privateStringuri=jdbc:sqlserver:/localhost:1433;DatabaseName=GradeManage;privateStringuser=sa;privateSt

17、ringpassword=123456;privateConnectionconn=null;privateStatementstmt=null;privateResultSetrs=null;1、數(shù)據(jù)庫(kù)連接方法getConnection()該方法首先要在程序中加載驅(qū)動(dòng),Class是包java.lang中的一個(gè)類,該類調(diào)用靜態(tài)方法forName可以加載驅(qū)動(dòng),該方法拋ClassNotFoundException異常,因此需要捕獲異常。DriverManager類用于處理驅(qū)動(dòng)的調(diào)入并且對(duì)產(chǎn)生新的數(shù)據(jù)庫(kù)連接,使用DriverManager類的方法getConnection創(chuàng)建連接對(duì)象,參數(shù)依次為前面

18、定義好的三個(gè)變量uri、user和password,變量conn獲取了數(shù)據(jù)庫(kù)連接對(duì)象。getConnection方法的關(guān)鍵代碼如下:publicConnectiongetConnection()tryClass.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);conn=DriverManager.getConnection(uri,user,password);if(conn!=null)System.out.println(數(shù)據(jù)庫(kù)鏈接獲取成功);catch(ClassNotFoundExceptione)System.out.pri

19、ntln(”驅(qū)動(dòng)程序加載異常);catch(SQLExceptione)System.out.println(”獲取連接異常);e.printStackTrace();/打印堆棧跟蹤returnconn;2、數(shù)據(jù)庫(kù)查詢方法executeQuery()該方法首先要調(diào)用Connection對(duì)象的createStatement方法,用來(lái)實(shí)例化Statement對(duì)象,然后用這個(gè)對(duì)象執(zhí)行SQL查詢語(yǔ)句,結(jié)果返回為ResultSet型的結(jié)果集,該方法拋SQLException異常。executeQuery方法的關(guān)鍵代碼如下:publicResultSetexecuteQuery(Stringsql)try

20、stmt=conn.createStatement();rs=stmt.executeQuery(sql);catch(SQLExceptione)System.out.println(SQL執(zhí)行錯(cuò)誤);e.printStackTrace();/打印堆棧跟蹤returnrs;3、數(shù)據(jù)庫(kù)增刪改的操作方法executeUpdate()該方法首先要聲明一個(gè)整形變量count,用來(lái)記錄執(zhí)行更新操作后影響數(shù)據(jù)庫(kù)的條數(shù),然后調(diào)用Connection對(duì)象的createStatement方法,用來(lái)實(shí)例化Statement對(duì)象,然后用這個(gè)對(duì)象執(zhí)行SQL更新語(yǔ)句,可以是修改語(yǔ)句、刪除語(yǔ)句或者插入語(yǔ)句,結(jié)果返回為i

21、nt型的數(shù)字,表示數(shù)據(jù)庫(kù)中受影響的行數(shù),該方法拋SQLException異常。executeUpdate方法的關(guān)鍵代碼如下:publicintexecuteUpdate(Stringsql)intcount=0;trystmt=conn.createStatement();count=stmt.executeUpdate(sql);catch(SQLExceptione)System.out.println(SQL執(zhí)行錯(cuò)誤);e.printStackTrace();/打印堆棧跟蹤returncount;登錄模塊登錄是每一個(gè)成功項(xiàng)目中不可缺少的模塊,好的登錄模塊可以保證系統(tǒng)的可靠性和安全性。本節(jié)

22、首先嚴(yán)格按照MVC架構(gòu)模式為學(xué)生成績(jī)管理系統(tǒng)制作了一個(gè)簡(jiǎn)單的登錄模塊,登錄成功后,應(yīng)當(dāng)進(jìn)入該系統(tǒng)的管理系統(tǒng),因此本節(jié)還詳細(xì)介紹了主窗體的設(shè)計(jì)。按照MVC模式進(jìn)行構(gòu)建登錄功能的開發(fā),對(duì)該模塊的文件構(gòu)建說(shuō)明如下Model層:在nepu.model包中添加用戶的實(shí)體Javabean,類名為User。在nepu.DAO中添加業(yè)務(wù)Javabean,類名為UserDAO。其中User類包含2個(gè)屬性,分別是姓名和密碼,同時(shí)在該類中添加屬性的set、get方法,User類的屬性定義部分代碼如下:publicclassUserprivateStringuserName=;/用戶名privateStringpas

23、sword=;/密碼Ctroller層:在nepu.servlet中添加類UserServlet,該servlet主要負(fù)責(zé)參數(shù)的接收以及用戶相關(guān)操作的流程控制,例如,用戶登錄功能。View層:在Webroot/Admin文件夾下添加名為login.jsp的JSP文件。View層構(gòu)建首先在MyEclipse的項(xiàng)目的WebRoot目錄中建立admin文件夾,在其下建立JSP頁(yè)面,在該頁(yè)面中編寫表單代碼,其中注意表單的action屬性為該表單信息提交的服務(wù)端URL地址,method屬性為提交方式。在這里由于是按照MVC模式,將信息提交給Servlet,因此method必須post。同時(shí)為避免復(fù)雜的U

24、RL的路徑邏輯關(guān)系,統(tǒng)一使用絕對(duì)路徑。圖3-1登錄界面設(shè)計(jì)Model層構(gòu)建在業(yè)務(wù)Javabean類UserDAO中建立方法login(),該方法的主要功能是判斷用戶是否存在,并且密碼是否正確,該方法需要接收由servlet傳遞過來(lái)2個(gè)參數(shù),一個(gè)是用戶名userName,另一個(gè)是密碼password,調(diào)用DBManger數(shù)據(jù)庫(kù)底層操作類的executeQuery()方法實(shí)現(xiàn)sql查詢,sql語(yǔ)句如下:Stringsql=select*fromtb_userwhereuserName=+userName+andpassword=+password+;執(zhí)行該sql語(yǔ)句后,將返回一個(gè)結(jié)果集Result

25、Set,判斷該結(jié)果集中的記錄的條數(shù),并使用變量rowCount記錄,如果rowCount的值大于0,則表示用戶存在,登錄成功,返回一個(gè)布爾類型的值true,否則返回false。獲取結(jié)果集后方法的核心代碼如下:ResultSetrs=dbManager.executeQuery(sql);trywhile(rs.next()rowCount+;if(rowCount0)flag=true;Controller層構(gòu)建在UserServlet添加方法Login(),在該方法中完成登錄的邏輯判斷。首先需要通過方法request.getParameter()來(lái)接收由Login.jsp頁(yè)面?zhèn)鬟f過來(lái)的參數(shù)u

26、serName和password,在進(jìn)行必要的參數(shù)轉(zhuǎn)碼或合法性判定后調(diào)用Model層的業(yè)務(wù)javaBeanUserDAO的登錄方法實(shí)現(xiàn)登錄判定,登錄成功后需要注意將用戶名用session進(jìn)行存儲(chǔ),這樣,在用戶多次請(qǐng)求和響應(yīng)之后都可以由session中取出用戶名展示或判斷用戶是否登錄。最后,在servlet中使用response.sendRedirect()方法跳轉(zhuǎn)到管理后臺(tái)的首頁(yè)面。UserServelt中的Login()方法關(guān)鍵代碼如下:Stringname=request.getParameter(userName);Stringpassword=request.getParameter(

27、password);UserDAOuserDAO=newUserDAO();if(userDAO.login(name,password)HttpSessionsession=request.getSession();session.setAttribute(userName,userName);response.sendRedirect(admin/AdminIndex.jsp);3.3系統(tǒng)首頁(yè)面導(dǎo)航整個(gè)學(xué)生成績(jī)管理系統(tǒng)的界面設(shè)計(jì)是左側(cè)導(dǎo)航的結(jié)構(gòu),如圖3-2所示,系統(tǒng)幾乎所有的jsp頁(yè)面都具有大致類似的頁(yè)面結(jié)構(gòu)和風(fēng)格,例如,相同的頁(yè)面頭部、左側(cè)導(dǎo)航和頁(yè)腳,因此,為了頁(yè)面編碼的方便和代碼的可重

28、用性,系統(tǒng)設(shè)計(jì)了一些公用的頁(yè)面文件,主要包括AdminEnd.jsp、AdminTop.jsp、AdminLeft.jsp,其他的頁(yè)面如后臺(tái)管理的首頁(yè)面AdminIndex.jsp則直接通過include指令標(biāo)記將AdminEnd.jsp、AdminTop.jsp、AdminLeft.jsp包含到自身頁(yè)面的相應(yīng)位置即可,這樣,編碼工作將主要集中在左側(cè)導(dǎo)航AdminLeft.jsp和AdminIndex.jsp頁(yè)面。其他新增的功能頁(yè)面的設(shè)計(jì)思路類似,在這里就不再贅述了。AdminIndex.jsp界面的瀏覽效果如圖3-2所示:短船jT轂叮眥.學(xué)生俑凰:*汨:沖匸且All匚叩艸jghrmri-Hl

29、20L:不北石醮學(xué)軼怦爭(zhēng)民圖3-2后臺(tái)管理首頁(yè)面瀏覽效果3.4學(xué)生信息管理本節(jié)首先嚴(yán)格按照MVC架構(gòu)模式制作了一個(gè)學(xué)生信息管理模塊。按照MVC模式進(jìn)行構(gòu)建登錄功能的開發(fā),對(duì)該模塊的文件構(gòu)建說(shuō)明如下(1)Model層:在nepu.model包中添加用戶的實(shí)體Javabean,類名為Student。在nepu.DAO中添加業(yè)務(wù)Javabean,類名為StudentDAO。其中Student類包含7個(gè)屬性,分別是ID、姓名、性別、生日、院系、專業(yè)和班級(jí),同時(shí)在該類中添加屬性的set、get方法,Student類的屬性定義部分代碼如下:publicclassStudentprivateStringst

30、udentId=;學(xué)生IDprivateStringstudentName=;學(xué)生姓名privateStringgender=;學(xué)生性別privateStringbirthday;學(xué)生牛日privateStringdepartment;學(xué)生院系privateStringmajor=;學(xué)生專業(yè)privateStringstudentClass=;學(xué)生班級(jí)(2)Ctroller層:在nepu.servlet中添加類StudentServlet,該servlet主要負(fù)責(zé)學(xué)生信息管理。(3)View層:在Webroot/Admin文件夾下添加名為AddStudent.jsp、StudentList.j

31、sp、UpdateStudent.jsp三個(gè)JSP頁(yè)面。3.4.1增加學(xué)生信息1、View層構(gòu)建用于添加學(xué)生信息的AddStudent.jsp設(shè)計(jì)如圖3-3所示,輸入學(xué)生編號(hào),姓名,性別,生日,所在院系、專業(yè)和班級(jí)。點(diǎn)擊提交按鈕,即可完成學(xué)生信息的添加。紅1C-Fi中泌怙SIS圖3-3學(xué)生信息添加頁(yè)面瀏覽效果2、Model層構(gòu)建在業(yè)務(wù)Javabean的StudentDAO中添加方法addStudent(),該方法能夠根據(jù)傳來(lái)的參數(shù)生成sql語(yǔ)句,借助DBManager類來(lái)進(jìn)行實(shí)現(xiàn)添加功能,此sql語(yǔ)句是插入有表單提交的學(xué)生的基本信息,sql語(yǔ)句為:Stringsql=insertintostu

32、dentvalues(+student.getStudentId()+,+student.getStudentName()+,+student.getGender()+,+student.getBirthday()+,+student.getDepartment()+,+student.getMajor()+,+student.getStudentClass()+);實(shí)例化db來(lái)執(zhí)行executeUpdate(sql)方法。執(zhí)行sql語(yǔ)句。DBManagerdb=newDBManager();intcount=db.executeUpdate(sql);if(count0)flag=true;

33、db.releaseSource();returnflag;3、Controller層構(gòu)建在StudentServlet中,負(fù)責(zé)學(xué)生信息的添加與維護(hù)。為StudentServlet添加方法doAddStudent(),在該方法中完成學(xué)生信息的添加。該方法的代碼主要是接收參數(shù),包括學(xué)生編號(hào),姓名,性別,生日,所在院系、專業(yè)和班級(jí)。StringstudentId=request.getParameter(studentId);StringstudentName=request.getParameter(studentName);studentName=newString(studentName.g

34、etBytes(ISO-8859-1),GB2312);Stringgender=request.getParameter(gender);gender=newString(gender.getBytes(ISO-8859-1),GB2312);Stringyear=request.getParameter(year);Stringmonth=request.getParameter(month);Stringbirthday=year+month;Stringdepartment=request.getParameter(department);department=newString(de

35、partment.getBytes(ISO-8859-1),GB2312);System.out.println(addstudentdepartment=+department);Stringmajor=request.getParameter(major);major=newString(major.getBytes(ISO-8859-1),GB2312);System.out.println(addstudentmajor=+major);StringstudentClass=request.getParameter(studentClass);studentClass=newStrin

36、g(studentClass.getBytes(ISO-8859-1),GB2312);實(shí)例化StudentDAO,來(lái)執(zhí)行addStudent()方法,進(jìn)行添加學(xué)生的信息,并判斷及處理各種添加異常。最后將信息封裝,代碼如下:tryintstudentId2=Integer.parseInt(studentId);student.setStudentId(studentId);student.setStudentName(studentName);student.setGender(gender);student.setBirthday(birthday);student.setDepartme

37、nt(department);student.setMajor(major);student.setStudentClass(studentClass);StudentDAOstudentDAO=newStudentDAO();if(studentName.equals()request.setAttribute(message,姓名不能為空!);RequestDispatcherrd=request.getRequestDispatcher(Admin/AddStudent.jsp);rd.forward(request,response);elseif(department.equals(

38、)request.setAttribute(message,請(qǐng)選擇院系!);RequestDispatcherrd=request.getRequestDispatcher(Admin/AddStudent.jsp);rd.forward(request,response);elseif(studentDAO.addStudent(student)request.setAttribute(message,添加學(xué)生成功!);this.doQueryStudent(request,response);elserequest.setAttribute(message,添加失?。W(xué)生學(xué)號(hào)已存在!);R

39、equestDispatcherrd=request.getRequestDispatcher(Admin/AddStudent.jsp);rd.forward(request,response);catch(Exceptione)request.setAttribute(message,學(xué)號(hào)必須為數(shù)字!);傳參并跳轉(zhuǎn)頁(yè)面,代碼如下:RequestDispatcherrd=request.getRequestDispatcher(Admin/AddStudent.jsp);rd.forward(request,response);3.4.2修改學(xué)生信息1、View層構(gòu)建用于修改學(xué)生信息的Upd

40、ateStudent.jsp設(shè)計(jì)如圖3-4所示,更改學(xué)生編號(hào),姓名,性別,生日,所在院系、專業(yè)和班級(jí)。點(diǎn)擊修改按鈕,即可完成學(xué)生信息的修改。I+-IU:|:畑i箕眾加JSi盲息學(xué)號(hào)DD1瑋可修茂王三H別.If-T?L19JOL1390巧年P(guān)b月聊腰糸.W=:幣-舷澤v_-諂近悻Vaf飯JEflIlf*All“pFLishWrai-uvi-12DJ2油人學(xué)駐啓學(xué)院圖3-4學(xué)生信息修改頁(yè)面瀏覽效果2、Model層構(gòu)建在業(yè)務(wù)Javabean的StudentDAO中添加方法updateStudentByld(),該方法能夠根據(jù)傳來(lái)的參數(shù)生成sql語(yǔ)句,借助DBManager類來(lái)進(jìn)行實(shí)現(xiàn)修改功能,此sq

41、l語(yǔ)句是修改數(shù)據(jù)庫(kù)中兩個(gè)表的學(xué)生的基本信息,sql語(yǔ)句為:Stringsql=updatestudentsetstudentName=+student.getStudentName()+,gender=+student.getGender()+,birthday=+student.getBirthday()+,department=+student.getDepartment()+,major=+student.getMajor()+,studentClass=+student.getStudentClass()+wherestudentId=+studentId+;Stringsql1=up

42、dategradesetstudentName=+student.getStudentName()+wherestudentId=+studentId+;實(shí)例化db來(lái)執(zhí)行executeUpdate(sql)方法。執(zhí)行sql語(yǔ)句。DBManagerdb=newDBManager();intcount=db.executeUpdate(sql);db.executeUpdate(sql1);if(count0)flag=true;db.releaseSource();returnflag;3、Controller層構(gòu)建在StudentServlet中,負(fù)責(zé)學(xué)生信息的添加與維護(hù)。為StudentSe

43、rvlet添加方法doUpdateStudent(),在該方法中完成學(xué)生信息的修改。該方法的代碼主要是接收參數(shù),包括學(xué)生編號(hào),姓名,性別,生日,所在院系、專業(yè)和班級(jí)。StringstudentId=request.getParameter(studentId);StringstudentName=request.getParameter(studentName);studentName=newString(studentName.getBytes(ISO-8859-1),GB2312);Stringgender=request.getParameter(gender);gender=newSt

44、ring(gender.getBytes(ISO-8859-1),GB2312);Stringyear=request.getParameter(year);Stringmonth=request.getParameter(month);Stringbirthday=year+month;Stringdepartment=request.getParameter(department);department=newString(department.getBytes(ISO-8859-1),GB2312);Stringmajor=request.getParameter(major);majo

45、r=newString(major.getBytes(ISO-8859-1),GB2312);StringstudentClass=request.getParameter(studentClass);studentClass=newString(studentClass.getBytes(ISO-8859-1),GB2312);實(shí)例化model中的Student,并實(shí)例化StudentDAO,來(lái)執(zhí)行updateStudentByld()方法,進(jìn)行修改學(xué)生的信息,并判斷及處理各種修改異常。代碼如下:Studentstudent=newStudent();student.setStudentNa

46、me(studentName);student.setGender(gender);student.setBirthday(birthday);student.setDepartment(department);student.setMajor(major);student.setStudentClass(studentClass);StudentDAOstudentDAO=newStudentDAO();if(studentName.equals()request.setAttribute(message,姓名不能為空!);this.doShowUpdateStudent(request,r

47、esponse);elseif(department.equals()request.setAttribute(message,請(qǐng)選擇院系!);this.doShowUpdateStudent(request,response);判斷修改結(jié)果,并跳轉(zhuǎn)頁(yè)面。代碼如下:elseif(studentDAO.updateStudentById(student,studentld)request.setAttribute(message,修改成功!);this.doQueryStudent(request,response);elserequest.setAttribute(message,修改失?。?

48、;this.doQueryStudent(request,response);3.4.3瀏覽學(xué)生信息1、View層構(gòu)建用于瀏覽學(xué)生信息的StudentList.jsp設(shè)計(jì)如圖3-5所示,展示學(xué)生編號(hào),姓名,性別,生日,所在院系、專業(yè)、班級(jí)和修改刪除按鈕。宇土忙息它程L.Si點(diǎn)耳學(xué)生信息瀏覽*汀B學(xué)生歯軾音饉詵樣號(hào)fl別出忖JrCCL王男L991DJ狀怦工程斑:rDCG張蟲Lasini計(jì)業(yè)51與伯慮掛腿子世息拜學(xué)與技豐除用rW3LOQDDJ計(jì)豆機(jī)與ra.&.K討且Bl科竽與低除廠COflL99201城件報(bào)辦工程Jl.:-JWr;|姑|DCS男L9930I計(jì)矍機(jī)與信息拽如網(wǎng)瓏:首更上一帀下一頁(yè)本帀

49、黑L頁(yè)F共Z頁(yè)AllCowfLiditszw皿車北右曲大辮件學(xué)陳圖3-4學(xué)生信息瀏覽頁(yè)面瀏覽效果2、Model層構(gòu)建在業(yè)務(wù)Javabean的StudentDAO中添加方法queryStudent(),該方法能夠根據(jù)傳來(lái)的參數(shù)生成sql語(yǔ)句,借助DBManager類來(lái)進(jìn)行實(shí)現(xiàn)查詢所有學(xué)生功能,此sql語(yǔ)句是查詢數(shù)據(jù)庫(kù)中學(xué)生的基本信息,該模塊包含分頁(yè)功能,關(guān)鍵代碼是分頁(yè)。首先建立ArrayList類型的studentList,代碼如下:ArrayListstudentList=newArrayList();求出首頁(yè)和尾頁(yè)的數(shù)字,pageN和pageSize是傳遞過來(lái)的參數(shù),目的是求出首頁(yè)和尾頁(yè),代

50、碼如下:intbeginNum=pageSize*(pageN-1)+1;l8intendNum=pageSize*pageN;sql語(yǔ)句為:Stringsql=SELECT*FROM(SELECT*,num=row_number()over(orderbystudentId)fromstudent)twherenumBETWEEN+beginNum+AND+endNum;實(shí)例化db來(lái)執(zhí)行executeQuery(sq1)方法。DBManagerdb=newDBManager();Resu1tSetrs=db.executeQuery(sq1);判斷rs.next中是否有內(nèi)容,如果有實(shí)例化St

51、udent,并取出基本信息,并放入實(shí)例化后的teacher中,代碼如下:whi1e(rs.next()Studentstudent=newStudent();student.setStudentId(rs.getString(1);student.setStudentName(rs.getString(2);student.setGender(rs.getString(3);student.setBirthday(rs.getString(4);student.setDepartment(rs.getString(5);student.setMajor(rs.getString(6);student.setStudentC1ass(rs.getString(7);把整個(gè)student中的信息放入studentList中,再進(jìn)行循環(huán)添加,直到rs中沒有內(nèi)容為止,最后釋放數(shù)據(jù)庫(kù)資源,返回studentList,代碼如下:studentList.add(student);catch(SQLExceptione)e.printStackTrace();db.re1easeSource();returnstudentList;3、Controo1er層構(gòu)建StudentServle

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論