劉永立,白地動(dòng)
(1.北京財(cái)貿(mào)職業(yè)學(xué)院 信息物流系,北京101101;2.北京財(cái)貿(mào)職業(yè)學(xué)院 教務(wù)處,北京 101101)
基于JAVA平臺(tái)的網(wǎng)上成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
劉永立1,白地動(dòng)2
(1.北京財(cái)貿(mào)職業(yè)學(xué)院 信息物流系,北京101101;2.北京財(cái)貿(mào)職業(yè)學(xué)院 教務(wù)處,北京 101101)
將成績(jī)管理由單機(jī)操作轉(zhuǎn)變?yōu)榫W(wǎng)絡(luò)操作在目前跨校區(qū)辦公情形下尤為必要。本文以一個(gè)實(shí)際項(xiàng)目為藍(lán)本,論述了構(gòu)建基于JAVA平臺(tái)的網(wǎng)上成績(jī)管理系統(tǒng)的設(shè)計(jì)方法與實(shí)現(xiàn)手段;為保證系統(tǒng)的穩(wěn)定運(yùn)行,給出了基于NETBEANS6.1開(kāi)發(fā)環(huán)境下數(shù)據(jù)庫(kù)連接池的配置方法。
NETBEANS JSF RichFaces框架 成績(jī)管理 數(shù)據(jù)庫(kù)連接池
目前,很多學(xué)校已實(shí)現(xiàn)跨校區(qū)辦公。借助網(wǎng)絡(luò)雖然可以迅速傳遞數(shù)據(jù),但是如何很好地保證數(shù)據(jù)的一致、及時(shí)更新和數(shù)據(jù)的充分共享,仍然是令教學(xué)管理人員很頭疼的一件事。在眾多教學(xué)數(shù)據(jù)中,學(xué)生的成績(jī)對(duì)于學(xué)生和教師都很重要。傳統(tǒng)的辦公環(huán)境下,任課教師提交成績(jī)單,成績(jī)管理員核對(duì)成績(jī)并進(jìn)行數(shù)據(jù)的整理和發(fā)布。這一方式帶來(lái)的主要問(wèn)題是:(1)成績(jī)管理員的壓力大、時(shí)間緊,容易出錯(cuò),成績(jī)發(fā)布也不及時(shí)。(2)各個(gè)校區(qū)間數(shù)據(jù)的格式不一致,在數(shù)據(jù)共享時(shí)還需要再次進(jìn)行數(shù)據(jù)的重新整理,無(wú)形中增加了工作量和出錯(cuò)的機(jī)率。因此,若能構(gòu)建基于B/S結(jié)構(gòu)的網(wǎng)上成績(jī)管理系統(tǒng),將傳統(tǒng)單機(jī)管理轉(zhuǎn)變?yōu)榫W(wǎng)絡(luò)管理,必將大大提高辦公效率,也能有效提升數(shù)據(jù)的準(zhǔn)確性、一致性。
本文以JAVA平臺(tái)為基礎(chǔ),以NETBEAN6.1為開(kāi)發(fā)工具,討論了網(wǎng)上成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方法。
系統(tǒng)的用戶分類(lèi)如下:數(shù)據(jù)庫(kù)管理員,課表管理員,考務(wù)管理員,成績(jī)管理員,任課教師,學(xué)生。用戶的權(quán)限和職責(zé)如下:
1.數(shù)據(jù)庫(kù)管理員:(1)數(shù)據(jù)庫(kù)的初始化,主要包括:系部數(shù)據(jù)、學(xué)期數(shù)據(jù)、教師數(shù)據(jù)、班級(jí)數(shù)據(jù)、學(xué)生數(shù)據(jù)的初始化;(2)管理用戶的權(quán)限。
2.課表管理員:將指定學(xué)期的排課結(jié)果導(dǎo)入數(shù)據(jù)庫(kù)。排課的原始數(shù)據(jù)一般是Excel表,為了能夠進(jìn)行微調(diào),該類(lèi)人員還要具備查詢(xún)和修改排課數(shù)據(jù)的權(quán)限,以便及時(shí)反映排課的變動(dòng)情況。
3.考務(wù)及成績(jī)管理員:設(shè)定指定班級(jí)、指定課程的考試時(shí)間;設(shè)定成績(jī)錄入的最晚日期;設(shè)定考生的考試狀態(tài)(正式考試、補(bǔ)考、緩考、曠考);將任課教師提交的成績(jī)單鎖定和解鎖;將成績(jī)數(shù)據(jù)導(dǎo)出為指定的Excel格式。
將成績(jī)單鎖定的目的是為了避免任課教師無(wú)休止地修改成績(jī);解鎖的目的是一旦發(fā)現(xiàn)錄入錯(cuò)誤(盡管此類(lèi)錯(cuò)誤發(fā)生的可能性很?。┍阌谌握n教師修改個(gè)別學(xué)生的成績(jī)。
4.任課教師:查看自己每個(gè)學(xué)期的任課班級(jí)和課程情況;設(shè)定自己所授課程的成績(jī)分值權(quán)值(平時(shí)成績(jī)、期末成績(jī)所占比重);錄入和修改學(xué)生成績(jī);查看學(xué)生成績(jī),生成成績(jī)分析報(bào)告;將指定班級(jí)、指定課程的成績(jī)單數(shù)據(jù)導(dǎo)出為Excel格式。
5.學(xué)生:查看自己所有課程的成績(jī)。
通過(guò)分析系統(tǒng)的需求,可知網(wǎng)上成績(jī)管理系統(tǒng)涉及的功能主要是:數(shù)據(jù)的導(dǎo)入/導(dǎo)出;數(shù)據(jù)的查詢(xún);數(shù)據(jù)的管理。具體來(lái)說(shuō),數(shù)據(jù)導(dǎo)入包括:教師數(shù)據(jù)導(dǎo)入,班級(jí)數(shù)據(jù)導(dǎo)入,學(xué)生數(shù)據(jù)導(dǎo)入,課表數(shù)據(jù)導(dǎo)入,成績(jī)數(shù)據(jù)導(dǎo)入;數(shù)據(jù)導(dǎo)出包括:成績(jī)數(shù)據(jù)導(dǎo)出;數(shù)據(jù)管理包括:課表數(shù)據(jù)管理、考務(wù)綜合管理、個(gè)人數(shù)據(jù)管理、成績(jī)權(quán)值分配、成績(jī)數(shù)據(jù)錄入;數(shù)據(jù)查詢(xún)包括:課表數(shù)據(jù)查詢(xún)、教師數(shù)據(jù)查詢(xún)、學(xué)生數(shù)據(jù)查詢(xún)、成績(jī)數(shù)據(jù)查詢(xún)。系統(tǒng)的主要功能模塊如圖1所示。
學(xué)期數(shù)據(jù)、系部數(shù)據(jù)相對(duì)固定且數(shù)據(jù)量很小,可以由數(shù)據(jù)庫(kù)管理員手動(dòng)輸入;班級(jí)數(shù)據(jù)、學(xué)生數(shù)據(jù)、教師數(shù)據(jù)、課表數(shù)據(jù)、成績(jī)數(shù)據(jù)等數(shù)據(jù)量大,因此系統(tǒng)提供了導(dǎo)入功能;為了便于用戶修改密碼,在數(shù)據(jù)管理模塊中提供“個(gè)人數(shù)據(jù)管理”功能;為便于學(xué)生和教師查詢(xún)數(shù)據(jù),系統(tǒng)提供主要數(shù)據(jù)的查詢(xún)功能;為便于教務(wù)人員和教師保存和分析數(shù)據(jù),系統(tǒng)提供成績(jī)數(shù)據(jù)的導(dǎo)出功能。
圖1中涉及的功能模塊是系統(tǒng)能夠提供給所有用戶的全部功能,所有功能以菜單的方式呈現(xiàn)給用戶,不同類(lèi)別的用戶登錄系統(tǒng)后,見(jiàn)到的功能菜單不同,能夠?qū)崿F(xiàn)的操作也不同。比如:任課教師登錄系統(tǒng)后,具備“數(shù)據(jù)查詢(xún)”、“成績(jī)數(shù)據(jù)導(dǎo)出”操作權(quán)限,也具備“成績(jī)權(quán)值分配”、“成績(jī)數(shù)據(jù)錄入”、“個(gè)人數(shù)據(jù)管理”、“成績(jī)數(shù)據(jù)導(dǎo)入”操作權(quán)限,但不具備其他操作權(quán)限。不同教師用戶只能針對(duì)自己所任的課程進(jìn)行成績(jī)數(shù)據(jù)錄入和成績(jī)權(quán)值分配操作。
本系統(tǒng)采用MySQL Server5.0數(shù)據(jù)庫(kù)軟件。數(shù)據(jù)庫(kù)名字為“score”,所有數(shù)據(jù)表及其字段在數(shù)據(jù)庫(kù)中定義時(shí)均采用英文。系統(tǒng)涉及的數(shù)據(jù)庫(kù)表及其字段如下:系部(ID,名稱(chēng)),教師(ID,姓名,性別,所在系部,角色),班級(jí)(ID,名稱(chēng),所在系部,班主任),學(xué)生(學(xué)號(hào),姓名,性別,班級(jí),角色),角色(ID,名稱(chēng)),學(xué)期(ID,學(xué)期名稱(chēng)),課程(ID,課程名稱(chēng)),課表(ID,學(xué)期,班級(jí),課程,教師,平時(shí)成績(jī)比重,實(shí)踐成績(jī)比重,期末成績(jī)比重),成績(jī)(ID,學(xué)期,學(xué)號(hào),課程,平時(shí)成績(jī),實(shí)踐成績(jī),期末成績(jī),總評(píng)成績(jī),狀態(tài)開(kāi)關(guān),開(kāi)考時(shí)間,最晚提交時(shí)間),成績(jī)分析(ID,學(xué)期,班級(jí),課程,不及格人數(shù),60-69人數(shù),70-84人數(shù),85-100人數(shù),參加考試人數(shù),及格率,良好率,平均成績(jī))。
數(shù)據(jù)表在數(shù)據(jù)庫(kù)“score”中的定義如表1所示。
表1 數(shù)據(jù)庫(kù)s c o r e中的數(shù)據(jù)表及其字段
score表中的switch字段是控制開(kāi)關(guān),用來(lái)設(shè)定是否可以錄入成績(jī)。表1中加下劃線的字段為主鍵。
各個(gè)數(shù)據(jù)表間有一定的關(guān)聯(lián)關(guān)系,比如:課表數(shù)據(jù)表timetable與其他數(shù)據(jù)表之間的關(guān)系如圖2所示。成績(jī)數(shù)據(jù)表定義如下(包括外鍵約束和索引定義):
限于篇幅,其他數(shù)據(jù)表的定義以及外鍵約束和索引的定義不再論述。
1.開(kāi)發(fā)工具的選擇
本系統(tǒng)開(kāi)發(fā)基于JAVA平臺(tái),需要按次序安裝以下軟件:jdk1.6,netbeans6.1,GlassFishV2,MySQL Server5.0。Netbeans6.1作為Web程序的開(kāi)發(fā)環(huán)境,不但內(nèi)嵌了GlassFish Web服務(wù)器,而且利用該IDE可以非常方便地連接MySQL Server數(shù)據(jù)庫(kù)。為了便于操作數(shù)據(jù)庫(kù),可以在安裝完MySQL Server5.0后,安裝Navicat8軟件,該軟件是一款不錯(cuò)的MySQL Server的客戶端工具軟件。
2.框架和庫(kù)文件
JSF是一個(gè)新的基于MVC模型的Web應(yīng)用框架技術(shù)。在概念和特征方面,尤其是組件方面,超過(guò)了著名的Struts框架。RichFaces是JBOSS公司開(kāi)發(fā)的Web應(yīng)用程序框架,它進(jìn)一步豐富了JSF框架,它為構(gòu)建 RIA(Rich Internet Applications)和支持 Ajax的 Web應(yīng)用程序提供了大量的JSF組件。
本系統(tǒng)基于RichFaces框架進(jìn)行開(kāi)發(fā),故此需要在netbeans6.1中添加RichFaces框架所需的相關(guān)jar文件。另外,由于在數(shù)據(jù)導(dǎo)入和導(dǎo)出過(guò)程中需要操作EXCEL文件,所以還需要jxl開(kāi)源組件。
系統(tǒng)所需的主要JAR文件如表2所示(所有文件都可從網(wǎng)上下載)。
表2 系統(tǒng)所需J A R文件列表
3.開(kāi)發(fā)環(huán)境的部署
(1)配置 web.xml和 faces-config.xml文件
由于系統(tǒng)基于JSF框架開(kāi)發(fā),故此需要配置web.xml文件faces-config.xml文件。在web.xml文件中主要進(jìn)行RichFaces過(guò)濾器和Faces Servlet的注冊(cè);在faces-config.xml文件中主要進(jìn)行JAVA BEAN的注冊(cè)。
以下是web.xml文件中RichFaces過(guò)濾器的注冊(cè)方法:(2)數(shù)據(jù)庫(kù)連接池
通過(guò)大量的實(shí)驗(yàn)測(cè)試后發(fā)現(xiàn):在系統(tǒng)訪問(wèn)人數(shù)增多以及進(jìn)行大量數(shù)據(jù)的導(dǎo)入/導(dǎo)出過(guò)程中,會(huì)占用較多的數(shù)據(jù)庫(kù)連接,若出現(xiàn)連接耗盡的情況,系統(tǒng)就會(huì)癱瘓。為有效避免此種情況的出現(xiàn),應(yīng)采用數(shù)據(jù)庫(kù)連接池(關(guān)于連接池在GLASSFISH服務(wù)器中的的定義方法請(qǐng)參閱相關(guān)文檔)。首先將數(shù)據(jù)庫(kù)連接池命名為:jdbc/mySqlDb,并在Web服務(wù)器中定義;然后在系統(tǒng)配置文件web.xml中添加如下內(nèi)容:
最后在JAVA BEAN中按照如下方法建立數(shù)據(jù)庫(kù)連接,連接池便可以使用了。
4.創(chuàng)建JSP
JSP(Java Server Page)頁(yè)面是用戶與系統(tǒng)交互的窗口。基本上,每個(gè)JSP頁(yè)面完成一個(gè)或幾個(gè)相關(guān)的功能模塊。比如,前面介紹的“成績(jī)數(shù)據(jù)導(dǎo)入”功能模塊、“成績(jī)數(shù)據(jù)錄入”功能模塊就可以分別由不同的JSP文件實(shí)現(xiàn),當(dāng)然還需要后臺(tái)BEAN的支持。下面就以“成績(jī)數(shù)據(jù)錄入”功能模塊的實(shí)現(xiàn)(editScore.jsp)為例,介紹JSP文件的創(chuàng)建方法,該JSP頁(yè)面的運(yùn)行效果如圖3所示。
(1)為了使頁(yè)面支持中文,以及使用RICH FACES和JSF框架中的標(biāo)簽,需要在JSP頁(yè)面頭部添加如下代碼:
(2)接著將UI控件添加在<a4j:form>標(biāo)簽內(nèi)部。本頁(yè)面要用到的 UI控件有:<h:commandButton>、<h:outputText>、<h:inputText>、<rich:dataTable>、<rich:column>、<a4j:support>,它們分別代表JSF命令按鈕、JSF文本輸出框、JSF文本輸入框、RICH FACES數(shù)據(jù)表格、RICH FACES表格列、ajax功能控件,其中 <a4j:support>標(biāo)簽的作用是給父標(biāo)簽添加ajax輔助功能。
比如,editScore.jsp頁(yè)面中“提交成績(jī)”按鈕可以按如下方式進(jìn)行定義:<h:commandButton tabindex="4"value="提交成績(jī)"onclick="if(!confirm('確認(rèn)提交么?'))return false" rendered="#{manageScore.editFlag}" action="#{manageScore.saveChanged}"/>。其中manageScore是用來(lái)進(jìn)行成績(jī)管理的后臺(tái)JAVA BEAN。
<rich:dataTable>是RICH FACES框架中功能強(qiáng)大的標(biāo)簽,用來(lái)顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù),該標(biāo)簽內(nèi)部可以嵌入<h:outputText>、<h:inputText>、<rich:column>等 標(biāo) 簽 。editScore.jsp頁(yè)面中成績(jī)記錄的顯示就用到了該標(biāo)簽。在使用<rich:dataTable>標(biāo)簽顯示數(shù)據(jù)時(shí),要注意設(shè)定好兩個(gè)重要屬性:binding、value。binding屬性的值是JAVA BEAN中UIDataTable類(lèi)型的變量;value屬性的值一般是JAVA BEAN 中 ArrayList(或 List)類(lèi)型的變量。
5.編寫(xiě) JAVA BEAN
雖然JSP頁(yè)面提供了交互的途徑,但是一切后臺(tái)操作最終都要由JAVA BEAN來(lái)完成。本系統(tǒng)中最主要的BEAN是數(shù)據(jù)庫(kù)操作BEAN(DbBean.java)和數(shù)據(jù)導(dǎo)入/導(dǎo)出 BEAN(ReadAndWrite.java)。 DbBean.java主要完成數(shù)據(jù)庫(kù)連接的創(chuàng)建,數(shù)據(jù)的查詢(xún)、插入、更新、刪除等常規(guī)數(shù)據(jù)庫(kù)操作;ReadAndWrite.java主要負(fù)責(zé)將EXCEL數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù),并將數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出為EXCEL格式的文件。同時(shí),系統(tǒng)還需要實(shí)體BEAN(每個(gè)數(shù)據(jù)庫(kù)表對(duì)應(yīng)一個(gè)實(shí)體BEAN)和其他輔助 BEAN(如用于成績(jī)管理的BEAN:ManageScore.java)的支持。 ManageScore.java 中的saveChanged方法與圖3中的“提交成績(jī)”按鈕對(duì)應(yīng),其代碼如下(有刪節(jié)):
6.系統(tǒng)發(fā)布
系統(tǒng)開(kāi)發(fā)完畢后,可以在NETBEANS6.1中右鍵單擊項(xiàng)目,將其打包生成.war文件,該war文件一般在項(xiàng)目所在路徑的dist子文件夾中。
隨后,啟動(dòng) MySQL Server5.0和 GlassFish,通過(guò)GlassFish管理員控制臺(tái),將生成的war文件部署到Web服務(wù)器即可,如圖4所示。
[1]David Geary,Cay Horstmann.Core Java-Server Faces[M].New Jersey USA:Addison Wesley publisher2004.
[2]http://www.netbeans.org.
[3]http://www.javaeye.com/.
[4]JBoss rich faces tutorial[DB/OL],http://www.mastertheboss.com/en/web-interfaces/124-jboss-RichFaces-tutorial.html.
[5]Andrei Cioroianu.Upload Files with JSF and MyFaces.http://www.onjava.com/pub/a/onjava/2005/07/13/jsfupload.html,2005.
[6]The Java EE5 Tutorial[DB/OL],http://java.sun.com/javaee/5/docs/tutorial/doc/index.html.
(編輯:楊馥紅)
G250.73
B
1673-8454(2010)01-0048-05