版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于j2ee的試卷庫(kù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)理工學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè) 050308008指導(dǎo)教師 副教授 【摘要】試卷庫(kù)管理系統(tǒng)是基于為泉州師范學(xué)院提供便捷而優(yōu)質(zhì)的試卷庫(kù)管理的背景而進(jìn)行開(kāi)發(fā)的。本系統(tǒng)采用b/s開(kāi)發(fā)模式,遵循j2ee規(guī)范,結(jié)合當(dāng)今流行的框架組合struts、hibernate、spring進(jìn)行項(xiàng)目開(kāi)發(fā)。該系統(tǒng)用戶界面精美,性能穩(wěn)定,為本校的試卷管理工作提供一個(gè)良好的解決方案,減輕工作人員負(fù)擔(dān)?;赽/s結(jié)構(gòu)的web服務(wù),實(shí)現(xiàn)客戶端零維護(hù),基于網(wǎng)絡(luò),信息共享性好?!娟P(guān)鍵詞】ajax、j2ee、struts、spring、hibernate、jacob目 錄引言4第一章系統(tǒng)綜述4
2、1.1系統(tǒng)簡(jiǎn)介41.2系統(tǒng)架構(gòu)41.3 系統(tǒng)目標(biāo)5第二章系統(tǒng)設(shè)計(jì)52.1 需求分析52.1.1 主要問(wèn)題52.1.2 基本功能62.1.3系統(tǒng)用例62.2 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)72.3 系統(tǒng)訪問(wèn)權(quán)限控制82.4 開(kāi)發(fā)環(huán)境9第三章系統(tǒng)實(shí)現(xiàn)93.1 系統(tǒng)界面93.2 系統(tǒng)中文亂碼的解決方案123.3 整合struts、spring、hibernate框架133.3.1 struts整合spring143.3.3 hibernate整合spring163.3.3 web系統(tǒng)加載spring163.4 上傳試卷到數(shù)據(jù)庫(kù)163.5 批量安排課程183.6 系統(tǒng)定時(shí)更新試卷193.7 抽卷算法設(shè)計(jì)與實(shí)現(xiàn)203.
3、8 jacob操作word文檔243.9 批量打印試卷263.10基于角色的訪問(wèn)權(quán)限控制27第四章系統(tǒng)部署284.1 部署環(huán)境284.2 系統(tǒng)部署284.3 注意事項(xiàng)30第五章總結(jié)30致謝31參考文獻(xiàn)31引 言近年來(lái)隨著學(xué)校的不斷發(fā)展擴(kuò)招,各級(jí)學(xué)院的專(zhuān)業(yè)和生源不斷發(fā)生變化,造成學(xué)校的試卷管理工作很繁瑣,如果沒(méi)有相應(yīng)的系統(tǒng),而僅僅以傳統(tǒng)的方式進(jìn)行管理,不但效率低下,而且往往得不到很好的效果。同時(shí)也給教師增加了額外的負(fù)擔(dān),不能實(shí)現(xiàn)試卷的重復(fù)利用。而在計(jì)算機(jī)普及的今天,人人都明白優(yōu)秀的管理離不開(kāi)計(jì)算機(jī)的支持,教育也不外如此?;趈2ee的試卷庫(kù)管理系統(tǒng)就是針對(duì)此需求而開(kāi)發(fā)的,這套系統(tǒng)可以使工作人員輕
4、松有條理的完成試卷管理的工作,而且其性能也十分穩(wěn)定,實(shí)現(xiàn)了高校試卷管理自動(dòng)化。第一章 系統(tǒng)綜述1.1 系統(tǒng)簡(jiǎn)介選擇j2ee構(gòu)建信息化平臺(tái)是一種長(zhǎng)遠(yuǎn)的規(guī)劃,對(duì)于信息化而言這是一個(gè)不斷整合的過(guò)程,在未來(lái)的日子里可能會(huì)有不同的平臺(tái)、不同系統(tǒng)的異構(gòu)系統(tǒng)需要整合,j2ee應(yīng)用提供的跨平臺(tái)性、開(kāi)放性及各種遠(yuǎn)程訪問(wèn)的技術(shù),為異構(gòu)系統(tǒng)的良好整合提供了保證。而輕量級(jí)j2ee應(yīng)用是對(duì)經(jīng)典j2ee應(yīng)用的簡(jiǎn)化,在保留經(jīng)典j2ee應(yīng)用的架構(gòu)、良好的可擴(kuò)展性、可維護(hù)性的基礎(chǔ)上,簡(jiǎn)化了j2ee應(yīng)用的開(kāi)發(fā),降低了j2ee應(yīng)用的部署成本。本系統(tǒng)是建立在互聯(lián)網(wǎng)基礎(chǔ)上的應(yīng)用系統(tǒng)??蛻舳酥恍枰粋€(gè)有瀏覽器的終端就可以使本校的試卷庫(kù)管
5、理不受地域和時(shí)間的限制,是基于輕量級(jí)j2ee框架進(jìn)行開(kāi)發(fā)的一套b/s系統(tǒng)。系統(tǒng)主要流程:1、安排課程:管理員導(dǎo)入excel表格批量安排每學(xué)期的課程。2、上傳試卷:教師根據(jù)專(zhuān)業(yè)和課程添加試卷,等待試卷被管理員審核。3、審核試卷:管理員審核教師上傳的試卷,只有審核通過(guò)的試卷才能參與每一門(mén)課程的抽卷,每份試卷都有一個(gè)相應(yīng)的抽卷參與系數(shù)。4、手動(dòng)抽卷:管理員可以對(duì)每學(xué)期的課程進(jìn)行抽卷以作為期末試卷,手動(dòng)抽卷程序中可以先手動(dòng)修改每份試卷的參與系數(shù)大小,然后再根據(jù)參與系數(shù)的大小從已經(jīng)審核通過(guò)的試卷中進(jìn)行抽卷,系數(shù)大的試卷被抽到的概率比較大,反之則比較小。5、自動(dòng)抽卷:管理員可以對(duì)每學(xué)期的課程進(jìn)行自動(dòng)抽卷,
6、試卷參與系數(shù)大小取默認(rèn)值。6、重新抽卷:管理員查看已經(jīng)被抽取的試卷的歷史記錄,不滿意則可以重新抽卷。7、批量打印試卷:打印員查詢(xún)已經(jīng)抽卷完畢的課程,然后批量打印該課程的試卷。8、自動(dòng)打包試卷:管理員根據(jù)學(xué)年、學(xué)期、學(xué)院打包下載期末試卷,然后送往教務(wù)科存檔。1.2 系統(tǒng)架構(gòu)表示層struts-mvcstrutsaction、actionform、jsp 、struts-config.xml業(yè)務(wù)層spring事務(wù)transactionshibernate session管理業(yè)務(wù)邏輯類(lèi)business services持久層datasource連接池sql語(yǔ)句hibernate serviceshi
7、bernatemysqldomain model business objects數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)daoservicesql圖1.1系統(tǒng)架構(gòu)圖l 表示層:管理用戶的請(qǐng)求,做出相應(yīng)的響應(yīng)提供一個(gè)控制器,委派調(diào)用業(yè)務(wù)邏輯和其它上層處理異常,拋給struts action,為顯示提供一個(gè)模型;l 業(yè)務(wù)層:一個(gè)典型web應(yīng)用的中間部分是業(yè)務(wù)層或者服務(wù)層,這層容易與程序代碼緊密偶合而使用spring可以很好的解偶;l 持久層:利用hibernate 為java提供的or持久化機(jī)制和查詢(xún)服務(wù),其對(duì)象是基于pojo和java collections;l 域模型層:hibernate允許你將數(shù)據(jù)庫(kù)中的信息存入由
8、實(shí)際需求中的業(yè)務(wù)組成的對(duì)象,也可以將對(duì)象中的信息存入數(shù)據(jù)庫(kù)中;l 數(shù)據(jù)庫(kù):在本系統(tǒng)中采用mysql作為數(shù)據(jù)存儲(chǔ)服務(wù)器。1.3 系統(tǒng)目標(biāo)基于b/s模式的試卷庫(kù)管理系統(tǒng)可以使用戶在網(wǎng)上隨時(shí)對(duì)試卷庫(kù)進(jìn)行管理。管理員能在網(wǎng)上對(duì)本校的試卷庫(kù)和各部門(mén)信息進(jìn)行管理,無(wú)時(shí)間和地域限制。教師可以及時(shí)添加試卷作為期末考試抽卷使用。打印員可以輕松地批量打印試卷。本項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn),可以實(shí)現(xiàn)自動(dòng)化管理試卷庫(kù)。希望它能夠在本校的試卷管理中發(fā)揮高效、便捷的作用,把老師、管理人員從繁重的工作中解放出來(lái)。第二章 系統(tǒng)設(shè)計(jì)2.1 需求分析2.1.1 主要問(wèn)題(1)用戶身份級(jí)別要求即根據(jù)身份的不同對(duì)系統(tǒng)的使用權(quán)限有所不同。從權(quán)限
9、大小大致可以分為:管理員、教師、打印員。系統(tǒng)提供靈活的角色設(shè)定和權(quán)限的分配功能。l 管理員:是權(quán)限最大的管理員,擁有本系統(tǒng)的所有權(quán)限,主要負(fù)責(zé)管理學(xué)院、專(zhuān)業(yè)、班級(jí)、課程以及用戶,具有審核試卷的權(quán)限,可以針對(duì)課程進(jìn)行抽卷操作等。l 教師:查詢(xún)課程表信息,選擇專(zhuān)業(yè)和課程添加試卷,并可以對(duì)自己的試卷進(jìn)行管理。l 打印員:主要負(fù)責(zé)打印試卷,其中批量打印試卷對(duì)此項(xiàng)工作非常重要。(2)上傳試卷要求在高??荚囍?,試卷的保密性是必須的,在普通的文件上傳下載中,通常是把試卷直接放在服務(wù)器目錄下面,這樣導(dǎo)致試卷泄露率會(huì)比較大。為了更好的實(shí)現(xiàn)對(duì)試卷的保密措施,要求將試卷word文檔直接轉(zhuǎn)換成二進(jìn)制流存入mysql數(shù)
10、據(jù)庫(kù)的blob字段中,這樣就確保了只有獲取了系統(tǒng)的相應(yīng)權(quán)限后才能對(duì)試卷進(jìn)行查看。(3)抽取試卷算法要求抽卷算法對(duì)于如何合理的在一套試卷庫(kù)中抽取試卷,在以往的考試中,都是從a、b、c三份試卷中隨機(jī)抽取一份作為期末考試用。現(xiàn)在為了實(shí)現(xiàn)試卷的重用性,往年的試卷也可以參與抽卷,這樣就有多份試卷參與抽卷,需要設(shè)計(jì)一個(gè)算法按每份試卷的概率大小進(jìn)行抽卷。(4)系統(tǒng)定時(shí)更改試卷參與系數(shù)在抽卷過(guò)程中,如果某份試卷被抽到作為考試用,則把該份試卷的參與系數(shù)設(shè)置成最小。但是為了更好的確保試卷的重用性,確保在以后的抽卷過(guò)程中,也能夠抽到它,要求系統(tǒng)定時(shí)增加每份試卷的參與系數(shù)大小,這樣就確保了試卷庫(kù)中每份試卷的重用性。2
11、.1.2 基本功能我們主要構(gòu)建一個(gè)基于b/s模式的試卷庫(kù)管理系統(tǒng),為本校的試卷庫(kù)管理提供一個(gè)良好的解決方案。系統(tǒng)的主要功能包括:(1)根據(jù)登錄者的身份提供不同的服務(wù)。(2)教師:管理個(gè)人信息、添加試卷及管理個(gè)人試卷、查詢(xún)用戶、查詢(xún)課程;(3)打印員:管理個(gè)人信息、查詢(xún)用戶、查詢(xún)課程、打印試卷管理(批量打印);(4)管理員: 管理個(gè)人信息、專(zhuān)業(yè)配置、班級(jí)配置、課程配置、審核試卷、查看試卷、刪除試卷、手動(dòng)抽卷、自動(dòng)抽卷、管理用戶、打包下載試卷。2.1.3系統(tǒng)用例圖1.2 系統(tǒng)用例圖2.2 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)該系統(tǒng)使用mysql數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名稱(chēng)是sjgl,以下是各個(gè)數(shù)據(jù)表的結(jié)構(gòu)表及說(shuō)明。(1) 教師信
12、息表(teacher),用來(lái)記錄各系統(tǒng)用戶的基本信息。其中字段teaid為教師信息表的關(guān)鍵字,系統(tǒng)就是使用teaid來(lái)區(qū)分判斷用戶權(quán)限的。表2-1 teacher結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1教師工號(hào)teaidvarchar12yy2密碼teapwdvarchar32y3姓名teanamevarchar20y4性別teasexvarchar12y5學(xué)院teainsvarchar30y6專(zhuān)業(yè)teadeptvarchar30y7郵箱teaemailvarchar50y8電話teaphonevarchar20y9職稱(chēng)teatitlevarchar20y10用戶級(jí)別tealevel
13、varchar30y(2) 學(xué)院表(ins),用來(lái)記錄各二級(jí)學(xué)院編號(hào)和名稱(chēng)。表2-2 ins結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1學(xué)院編號(hào)ins_codevarchar12yy2學(xué)院名稱(chēng)ins_namevarchar50y(3) 專(zhuān)業(yè)表(dept),用來(lái)記錄各二級(jí)學(xué)院隸屬專(zhuān)業(yè)的編號(hào)和名稱(chēng)。表2-3 dept結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1專(zhuān)業(yè)編號(hào)dept_codevarchar12yy2專(zhuān)業(yè)名稱(chēng)dept_namevarchar50y3學(xué)院編號(hào)ins_codevarchar12yins.ins_code(4) 班級(jí)表(classgrade),用來(lái)記錄各專(zhuān)業(yè)隸屬班級(jí)的
14、編號(hào)和名稱(chēng)以及班級(jí)人數(shù)。表2-4 classgrade結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1班級(jí)編號(hào)class_codevarchar12yy2班級(jí)名稱(chēng)class_namevarchar50y3專(zhuān)業(yè)編號(hào)dept_codevarchar12ydept.dept_code4班級(jí)人數(shù)classpersonint11y默認(rèn)為0(5) 課程信息表(course),記錄各個(gè)專(zhuān)業(yè)所有課程信息。表2-5 course結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1課程編號(hào)course_codevarchar12yy2課程名稱(chēng)course_namevarchar50y3所屬專(zhuān)業(yè)dept_codev
15、archar12ydept.dept_code4考核方式exammethodvarchar10y5選課屬性propertyvarchar4y6抽卷標(biāo)志remarkvarchar8y(6) 課程表(classcourse),記錄詳細(xì)的課程表信息,包括班級(jí)、課程、學(xué)年、學(xué)期等等信息。表2-6 classcourse結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1編號(hào)idint11yy自動(dòng)增一2課程編號(hào)course_codevarchar12ycourse.course_code3班級(jí)編號(hào)class_codevarchar12yclassgrade.class_code4學(xué)年yearvarchar
16、8y5學(xué)期termvarchar4y6上課人數(shù)papercountint11y7抽卷標(biāo)志remarkvarchar12n8打印標(biāo)志remark2varchar12n9試卷內(nèi)容papercontentlongblobn10試卷名稱(chēng)papernamevarchar100n11抽卷歷史historytextn(7) 試卷表(paper),記錄試卷詳細(xì)信息,包括學(xué)院、專(zhuān)業(yè)、課程、上傳時(shí)間、指導(dǎo)老師等等。表2-7 paper結(jié)構(gòu)序號(hào)字段含義字段名類(lèi)型寬度是否非空關(guān)鍵字備注1編號(hào)idint11yy自動(dòng)增一2學(xué)院paperinsvarchar50y3專(zhuān)業(yè)paperdeptvarchar50y4課程paper
17、coursevarchar50y5試卷套數(shù)papernumint11y6上傳時(shí)間papertimevarchar30y7試卷內(nèi)容papercontentlongbloby8指導(dǎo)老師paperteavarchar20y9審核標(biāo)志remarkvarchar8y10參與系數(shù)factordouble4,2y11抽卷歷史historytextn12審核意見(jiàn)remarkideatextn2.3 系統(tǒng)訪問(wèn)權(quán)限控制系統(tǒng)根據(jù)用戶權(quán)限進(jìn)入不同的管理后臺(tái),權(quán)限控制圖詳細(xì)描述了這個(gè)過(guò)程。圖1.3 權(quán)限控制圖2.4 開(kāi)發(fā)環(huán)境¨ jdk版本:1.5.0_04¨ j2ee容器:tomcat 5.0.28
18、¨ 數(shù)據(jù)庫(kù):mysql 5.1.23¨ 系統(tǒng):windows xp profession¨ 開(kāi)發(fā)工具:eclipse 3.2.1、myeclipse 5.1、dreamweaver8.0、fireworks8.0¨ 本系統(tǒng)使用的框架版本:struts1.2、spring2.0、hibernate3.0第三章 系統(tǒng)實(shí)現(xiàn)3.1 系統(tǒng)界面圖3.1 系統(tǒng)登錄界面圖3.2 管理員界面圖3.3 管理員打包下載試卷圖3.4 管理員手動(dòng)抽卷圖3.5 教師查詢(xún)個(gè)人試卷圖3.6 打印員批量打印試卷3.2 系統(tǒng)中文亂碼的解決方案java的內(nèi)核和class文件是基于unicod
19、e的,這使java程序具有良好的跨平臺(tái)性,但也帶來(lái)了一些中文亂碼問(wèn)題的麻煩。主要有兩方面,java和jsp文件本身編譯時(shí)產(chǎn)生的亂碼問(wèn)題和java程序于其他媒介交互產(chǎn)生的亂碼問(wèn)題。首先java(包括jsp)源文件中很可能包含有中文,而java和jsp源文件的保存方式是基于字節(jié)流的,如果java和jsp編譯成class文件過(guò)程中,使用的編碼方式與源文件的編碼不一致,就會(huì)出現(xiàn)亂碼。對(duì)于jsp:在文件頭加上<% page contenttype="text/html;charset=gbk"%>就能解決亂碼問(wèn)題。對(duì)于交互產(chǎn)生的亂碼問(wèn)題(例如:表單提取過(guò)程中的亂碼),解決
20、步驟如下:1、對(duì)于servlet應(yīng)該加上:response.setcharacterencoding("gbk");2、為系統(tǒng)添加一個(gè)過(guò)濾器(encodingfilter)代碼如下:public class encodingfilter implements filter private string charset = null;public void destroy() public void dofilter(servletrequest req, servletresponse resp,filterchain chain) throws ioexception,
21、servletexception req.setcharacterencoding(this.charset);chain.dofilter(req, resp);public void init(filterconfig arg0) throws servletexception this.charset = arg0.getinitparameter("charset");3、在web.xml中做如下設(shè)置:<filter><filter-name>encoding</filter-name><filter-class>qz
22、tc.paper.filter.encodingfilter</filter-class><init-param><param-name>charset</param-name><param-value>gbk</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern>&
23、lt;/filter-mapping>4、對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)設(shè)置(mysql)¨ 修改mysql數(shù)據(jù)庫(kù)的my.ini配置文件中client下的設(shè):default-character-set=gbk¨ 在建表的時(shí)候設(shè)置:engine=innodb default charset=gbk3.3 整合struts、spring、hibernate框架3.3.1 struts整合spring1、在struts配置文件struts-config.xml中主要配置:¨ 配置actionform bean¨ 配置全局轉(zhuǎn)發(fā)關(guān)系¨ 配置action映射
24、68; 配置消息資源¨ 配置validator插件<?xml version="1.0" encoding="utf-8"?><!doctype struts-config public "-/apache software foundation/dtd struts configuration 1.2/en" "/dtds/struts-config_1_2.dtd"><struts-config><data-sou
25、rces /><!- 配置formbean -><form-beans><form-bean name="indexform"type="qztc.paper.struts.form.indexform" /> 略</form-beans><global-exceptions /><global-forwards /><!- 配置action -><action-mappings><action attribute="indexform&
26、quot; input="/index.jsp"name="indexform" parameter="action" path="/index" scope="request"type="qztc.paper.struts.action.indexaction"><forward name="printerindex" path="/printer/main.jsp"></forward><forw
27、ard name="adminindex" path="/admin/main.jsp"></forward><forward name="teacherindex" path="/teacher/main.jsp"></forward><forward name="reg_success" path="/reg_success.jsp"></forward></action>略</actio
28、n-mappings><!-用spring中的delegatingrequestprocessor覆蓋struts中的requestprocessor -> <controllerprocessorclass="org.springframework.web.struts.delegatingrequestprocessor"></controller><!- 配置消息源 -><message-resourcesparameter="qztc.paper.struts.applicationresourc
29、es" /><!-配置struts自動(dòng)驗(yàn)證框架validator插件-><plug-in classname="org.apache.struts.validator.validatorplugin"><set-property property="pathnames"value="/web-inf/validator-rules.xml, /web-inf/validation.xml" /></plug-in><!- 使用 spring 的 contextloa
30、derplugin 將struts集成進(jìn)spring -><plug-inclassname="org.springframework.web.struts.contextloaderplugin"><set-property property="contextconfiglocation"value="/web-inf/applicationcontext.xml" /></plug-in></struts-config>2、在spring中注冊(cè)動(dòng)作(applicationcon
31、text.xml)<?xml version="1.0" encoding="utf-8"?><!doctype beans public "-/spring/dtd bean/en" "/dtd/spring-beans.dtd"><!-首頁(yè)登陸驗(yàn)證 -><bean name="/index" class="qztc.paper.struts.action.indexaction&qu
32、ot;><property name="indexdao"><ref bean="indexdaoimpl" /></property></bean><!-詳細(xì)配置參考源代碼-></beans>3.3.2 hibernate整合spring1、配置數(shù)據(jù)源<bean id="datasource"class="org.springframework.jndi.jndiobjectfactorybean"destroy-method=&
33、quot;close"><property name="jndiname"><value>java:comp/env/jdbc/sjgl</value></property></bean>2、配置sessionfactory<bean id="sessionfactory"class="org.springframework.orm.hibernate3.localsessionfactorybean"><property name=&quo
34、t;datasource"><ref bean="datasource" /></property><!- 為處理blob類(lèi)型字段的句柄聲明 /-><property name="lobhandler" ref="lobhandler" /><property name="hibernateproperties"><props><prop key="hibernate.dialect">org.h
35、ibernate.dialect.mysqldialect</prop><!- 表示允許自動(dòng)提交 -><prop key="hibernate.connection.autocommit">true</prop><!- 顯示sql語(yǔ)句 -><prop key="hibernate.show_sql">true</prop></props></property><!- 配置hibernate映射文件 -><property name
36、="mappingresources"><list><value>qztc/paper/vo/classcourse.hbm.xml</value>略 </list></property></bean>3、裝配dao在spring中注冊(cè)dao<bean id="indexdao" class="qztc.paper.dao.indexdao"abstract="true"></bean><bean id=&q
37、uot;indexdaoimpl" class="qztc.paper.dao.impl.indexdaoimpl"parent="indexdao"><property name="hibernatetemplate"><ref bean="hibernatetemplate" /></property></bean>4、裝配service層<bean name="/admin/admin"class="qztc.
38、paper.struts.action.adminaction"><property name="admindao"><ref bean="admindaoimpl" /></property></bean>3.3.3 web系統(tǒng)加載spring<context-param><param-name>contextconfiglocation</param-name><param-value>/web-inf/applicationcontext
39、.xml</param-value></context-param><servlet><servlet-name>context</servlet-name><servlet-class>org.springframework.web.context.contextloaderservlet</servlet-class><load-on-startup>1</load-on-startup></servlet>3.4 上傳試卷到數(shù)據(jù)庫(kù)本系統(tǒng)中為了實(shí)現(xiàn)試卷的保密性,需要把試卷
40、word文檔轉(zhuǎn)換成二進(jìn)制流存在數(shù)據(jù)庫(kù)blob字段中,在這里用三個(gè)框架ssh整合實(shí)現(xiàn)。1、在applicationcontext.xml配置文件中<!- lob字段的處理句柄配置 /-><bean id="lobhandler"class="org.springframework.jdbc.support.lob.defaultlobhandler"lazy-init="true"></bean><bean id="sessionfactory"class="org
41、.springframework.orm.hibernate3.localsessionfactorybean"><property name="datasource"><ref bean="datasource" /></property><!- 為處理blob類(lèi)型字段的句柄聲明 /-><property name="lobhandler" ref="lobhandler" /></bean><!-定義事務(wù)bean-&g
42、t;<bean id="transactionmanager"class="org.springframework.orm.hibernate3.hibernatetransactionmanager"><property name="sessionfactory"><ref local="sessionfactory" /></property></bean><!-定義事務(wù)攔截器bean -><bean id="transac
43、tioninterceptor"class="erceptor.transactioninterceptor"><!-事務(wù)攔截器bean需要依賴(lài)注入一個(gè)事務(wù)管理器-><property name="transactionmanager" ref="transactionmanager" /><property name="transactionattributes"><!-下面定義事務(wù)傳播
44、屬性-><props><prop key="save*">propagation_required</prop><prop key="write">propagation_required,readonly</prop></props></property></bean><!- 定義beannameautoproxycreator-><beanclass="org.springframework.aop.framework.a
45、utoproxy.beannameautoproxycreator"><!- 指定對(duì)滿足哪些bean name的bean自動(dòng)生成業(yè)務(wù)代理 -><property name="beannames"><!- 下面是所有需要自動(dòng)創(chuàng)建事務(wù)代理的bean-><list><value>fileservice</value><!-此處可增加其他需要自動(dòng)創(chuàng)建事務(wù)代理的bean-></list></property><!-下面定義beannameautoproxy
46、creator所需的事務(wù)攔截器-><property name="interceptornames"><list><value>transactioninterceptor</value><!- 此處可增加其他新的interceptor -></list></property></bean>2、在action中處理上傳的文件/ 上傳試卷public actionforward addpaper(actionmapping mapping, actionform form,h
47、ttpservletrequest request, httpservletresponse response)throws exception fileform fileform = (fileform) form;/ 保存試卷this.fileservice.save(fileform);return mapping.findforward("addpaperdo");3、調(diào)用的fileservice實(shí)現(xiàn)方法/ 用于將上傳的文件信息保存到數(shù)據(jù)庫(kù)public void save(fileform fileform) throws exception string pape
48、rcourse = fileform.getpapercourse();string paperdept = fileform.getpaperdept();string paperins = fileform.getpaperins();integer maxpapernum=this.filedao.querymaxpapernum(paperins, paperdept, papercourse);if(maxpapernum=null)maxpapernum=0;integer papernum=maxpapernum+1;paper paper=new paper();string
49、papertea = fileform.getpapertea();simpledateformat format = new simpledateformat("yyyy-mm-dd hh:mm:ss");date d = new date();string papertime = format.format(d);paper.setpapercourse(papercourse);paper.setpaperdept(paperdept);paper.setpaperins(paperins);paper.setpapertea(papertea);paper.setp
50、apertime(papertime);paper.setpapernum(papernum);paper.setremark("未審核");paper.setfactor(1.0);paper.setpapercontent(fileform.getpaperfile().getfiledata();this.filedao.save(paper);3.5 批量安排課程管理員根據(jù)每個(gè)班級(jí)能選擇的課程進(jìn)行安排課程,先下載課程表模板,然后填寫(xiě)好數(shù)據(jù)直接上傳,使用poi組件實(shí)現(xiàn)讀取excel文件的數(shù)據(jù),并存入數(shù)據(jù)庫(kù)課程表中相應(yīng)的字段。核心功能代碼如下:/添加課程表public
51、void saveclasscourse(fileform fileform) throws exception file file = fileform.getfile();system.out.print(file);hssfworkbook workbook = new hssfworkbook(new fileinputstream(file); / 得到excel對(duì)象hssfsheet sheet = workbook.getsheetat(0); / 得到第一個(gè)sheetint rows = sheet.getphysicalnumberofrows(); / 得到行數(shù)for (i
52、nt i = 1; i < rows; i+) hssfrow row = sheet.getrow(i);classcourse classcourse = new classcourse();classgrade classgrade = new classgrade();course course = new course();hssfcell cell = row.getcell(short) 0); / 得到列1(下標(biāo)0,為第一列)string coursecode=cell.getstringcellvalue(); course=filedao.persistencecou
53、rse(coursecode);classcourse.setcourse(course);system.out.println("課程號(hào):" + course.getdept().getdeptcode();cell = row.getcell(short) 1); / 得到列2string classcode=cell.getstringcellvalue();classgrade=filedao.persistenceclassgrade(classcode);classcourse.setclassgrade(classgrade);system.out.print
54、ln("班級(jí)號(hào):" + classcourse.getclassgrade().getclasscode();cell = row.getcell(short) 2); / 得到列3classcourse.setyear(cell.getstringcellvalue();system.out.println("學(xué)年:" + classcourse.getyear();cell = row.getcell(short) 3);/ 得到列4classcourse.setterm(cell.getstringcellvalue();system.out.pr
55、intln("學(xué)期:" + classcourse.getterm();cell = row.getcell(short) 4);/ 得到列4double papercount=cell.getnumericcellvalue();int papercount2=(int)papercount/1;integer papercount3=integer.valueof(papercount2);system.out.print(papercount3);classcourse.setpapercount(papercount3);system.out.println(&qu
56、ot;上課人數(shù):" + classcourse.getpapercount();classcourse.setremark("未抽卷");classcourse.setremark2("未打印");this.filedao.saveclasscourse(classcourse);3.6 系統(tǒng)定時(shí)更新試卷在抽卷過(guò)程中,如果某份試卷被抽到作為考試用,則把該份試卷的參與系數(shù)設(shè)置成最小。但是為了更好的確保試卷的重用性,確保在以后的抽卷過(guò)程中,也能夠抽到它,要求系統(tǒng)定時(shí)增加每份試卷的參與系數(shù)大小,這樣就確保了試卷庫(kù)中每份試卷的重用性。1、 在web.x
57、ml配置文件中<?xml version="1.0" encoding="utf-8"?><web-app xmlns="xmlns:xsi="/2001/xmlschema-instance" version="2.4"xsi:schemalocation=" <listener> <listener-class>qztc.paper.util.mylistener</listener-class> </listener> 2、 系統(tǒng)設(shè)定開(kāi)始時(shí)間和間隔時(shí)間package qztc.paper.util;import java.util.timer; import javax.
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游景區(qū)宣傳演員聘用協(xié)議
- 城市綠化景觀設(shè)計(jì)改造提升合同
- 車(chē)牌租賃代售合同范本模板
- 瑜伽館裝修協(xié)議
- 生態(tài)園苗木采購(gòu)施工合同
- 交通運(yùn)輸業(yè)工傷員工管理手冊(cè)
- 農(nóng)村交通改善項(xiàng)目合同
- 水泵房消防安全管理規(guī)程
- 電商平臺(tái)副總經(jīng)理招聘合同
- 空調(diào)安裝工程合同類(lèi)別
- 最新種植新病歷
- 水聯(lián)動(dòng)試車(chē)方案(共33頁(yè))
- 高效電池片(TOPCon)生產(chǎn)項(xiàng)目可行性研究報(bào)告模板-提供甲乙丙資質(zhì)資信
- INPLAN操作培訓(xùn)PPT課件
- VB和Oracle的鏈接
- 代理報(bào)關(guān)委托書(shū)
- 小學(xué)美術(shù)四年級(jí)質(zhì)量檢測(cè)試卷(共3頁(yè))
- 青少年科學(xué)調(diào)查體驗(yàn)活動(dòng)分析報(bào)告
- 大班科學(xué)四季的變化ppt課件
- 建設(shè)部211文件
- 16種多環(huán)芳烴簡(jiǎn)介
評(píng)論
0/150
提交評(píng)論