![虛擬校園_軟件系統(tǒng)架構(gòu)說(shuō)明_第1頁(yè)](http://file4.renrendoc.com/view/088d09a5b3eda087dc2d150d184e66a1/088d09a5b3eda087dc2d150d184e66a11.gif)
![虛擬校園_軟件系統(tǒng)架構(gòu)說(shuō)明_第2頁(yè)](http://file4.renrendoc.com/view/088d09a5b3eda087dc2d150d184e66a1/088d09a5b3eda087dc2d150d184e66a12.gif)
![虛擬校園_軟件系統(tǒng)架構(gòu)說(shuō)明_第3頁(yè)](http://file4.renrendoc.com/view/088d09a5b3eda087dc2d150d184e66a1/088d09a5b3eda087dc2d150d184e66a13.gif)
![虛擬校園_軟件系統(tǒng)架構(gòu)說(shuō)明_第4頁(yè)](http://file4.renrendoc.com/view/088d09a5b3eda087dc2d150d184e66a1/088d09a5b3eda087dc2d150d184e66a14.gif)
![虛擬校園_軟件系統(tǒng)架構(gòu)說(shuō)明_第5頁(yè)](http://file4.renrendoc.com/view/088d09a5b3eda087dc2d150d184e66a1/088d09a5b3eda087dc2d150d184e66a15.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 虛擬校園軟件系統(tǒng)架構(gòu)說(shuō)明 我們小組致力于開(kāi)發(fā)一個(gè)功能齊全的、易用的、人性化的校園虛擬學(xué)習(xí)系統(tǒng)。該系統(tǒng)是用純java語(yǔ)言開(kāi)發(fā)的WEB應(yīng)用程序。該系統(tǒng)的用戶分為三類,分別是學(xué)生、教師、管理員。1 需求分析 1.1 系統(tǒng)需求 學(xué)生用戶的需求是與老師和同學(xué)進(jìn)行交流、參加模擬考試 、展示自己和瀏覽別人的作品;教師用戶的需求是批改作業(yè)、發(fā)布學(xué)習(xí)資源和對(duì)同學(xué)們進(jìn)行答疑等;管理員的需求是對(duì)所有后臺(tái)信息的管理。 虛擬校園系統(tǒng)是集學(xué)習(xí)、信息交流、信息發(fā)布、資料管理與查詢、信息管理與查詢、作業(yè)管理與提交等等學(xué)生與教師的日?;顒?dòng)于一體的復(fù)雜系統(tǒng)。經(jīng)過(guò)不斷的調(diào)查和訪問(wèn),虛擬校園學(xué)習(xí)系統(tǒng)開(kāi)發(fā)時(shí)應(yīng)滿足以下具體需求:1滿足
2、教師和學(xué)生基本信息的管理的需求。2滿足學(xué)生和教師對(duì)學(xué)習(xí)資源的便捷查找與管理的需求。3滿足學(xué)生和教師對(duì)各種信息的發(fā)布與管理的需求。4滿足學(xué)生作業(yè)的提交與管理的需求。5由于涉及多種信息與資源,系統(tǒng)要具有優(yōu)良的存儲(chǔ)結(jié)構(gòu),滿足系統(tǒng)容易擴(kuò)充和維護(hù)的需求。6提供友好的用戶和管理員界面,滿足該系統(tǒng)的易于使用和管理的需求。7具有完整的系統(tǒng)接口,滿足可靈活的導(dǎo)入與導(dǎo)出數(shù)據(jù)的需求。系統(tǒng)1.2 功能需求 基于系統(tǒng)需求分析,該系統(tǒng)需要實(shí)現(xiàn)以下基本功能:1) 用戶管理:設(shè)置操作人員口令和權(quán)限,添加/刪除用戶。2)各種信息的管理:學(xué)生發(fā)布的信息、教師發(fā)布的信息以及管理員發(fā)布的信息的發(fā)布/刪除。3)各種學(xué)習(xí)資源庫(kù)的管理:教
3、師發(fā)布的資源,管理員發(fā)布的資源等的添加/刪除/備份/導(dǎo)入。4)作業(yè)的管理:作業(yè)的提交/刪除/備份/導(dǎo)入。5)提供便捷地對(duì)各種信息和資源進(jìn)行檢索的功能。5)數(shù)據(jù)庫(kù)的管理包括數(shù)據(jù)的備份和恢復(fù)。1.3 性能要求1)最佳主機(jī)配置:內(nèi)存512M以上,硬盤1000G以上,cpu在Intel4以上;2)搜索時(shí)間最大不超過(guò)10秒,平均時(shí)間在15秒以內(nèi);3)數(shù)據(jù)庫(kù)容量:1G4)系統(tǒng)用戶容量的需求:靜態(tài)用戶(注冊(cè)用戶):5000以上,動(dòng)態(tài)用戶(在線用戶):500以上,并發(fā)數(shù):100以上5)系統(tǒng)運(yùn)行時(shí)間,724小時(shí)不間斷運(yùn)行2 系統(tǒng)采用的相關(guān)協(xié)議、技術(shù)和理論 2.1 軟件涉及的協(xié)議、技術(shù)和理論 開(kāi)發(fā)一個(gè)系統(tǒng)僅僅有了
4、好的創(chuàng)意,對(duì)于整個(gè)系統(tǒng)的成功還遠(yuǎn)遠(yuǎn)不夠。開(kāi)發(fā)語(yǔ)言和環(huán)境的選擇也是至關(guān)重要的。開(kāi)發(fā)環(huán)境的特點(diǎn)和運(yùn)行方式能否很好的滿足系統(tǒng)功能需求,能否為整個(gè)系統(tǒng)的資源提供最優(yōu)化解決方案,是程序開(kāi)發(fā)人員必須解決的問(wèn)題。它是決定整個(gè)系統(tǒng)性能好壞的重要因素之一。除此之外,程序采用的模塊化結(jié)構(gòu)和程序的具體算法對(duì)于系統(tǒng)也是至關(guān)重要。本系統(tǒng)中我們小組選擇ECHO2+MYSQL+TOMCAT組合開(kāi)發(fā)環(huán)境。 2.1.1 關(guān)于echo2 Echo2(/)是一個(gè)開(kāi)源的完全基于 Ajax 技術(shù)的開(kāi) 框架用它做出的系統(tǒng)是一個(gè)單頁(yè)面系統(tǒng),所有的界面更新都是通過(guò)不停的更 新DOM來(lái)實(shí)現(xiàn),而且系統(tǒng)只有一個(gè)URL,用戶很難通過(guò)URL來(lái)非法進(jìn)去
5、系統(tǒng) 內(nèi)部。 它通過(guò)一個(gè)強(qiáng)大的基于Ajax的展現(xiàn)(rendering)引擎,將程序員用 Java編寫的代碼轉(zhuǎn)換成瀏覽器需要的 HTML。這個(gè)強(qiáng)大引擎包括兩個(gè)部分: 服務(wù)器端和客戶端。 服務(wù)器端引擎主要功能如下:接收并處理客戶端數(shù)據(jù);將服務(wù)器端組件和數(shù)據(jù)轉(zhuǎn)換成 XML客戶端引擎主要功能如下:向服務(wù)器端發(fā)送相關(guān)數(shù)據(jù);解析服務(wù)器端返回的 XML;根據(jù)解析結(jié)果更新頁(yè)面 DOM 節(jié)點(diǎn); Echo2 包括其擴(kuò)展組件庫(kù) Echo Point NG 和 Echo2 Extras,提供了非常豐富和非常絢麗的基本組件和擴(kuò)展組件,使開(kāi)發(fā)者基本不需要開(kāi)發(fā)自己的組件就能非常出色的構(gòu)建炫麗的客戶端效果。另外,Echo2
6、還提供了Server Push 的一種模式,可以模擬 C/S 系統(tǒng)中的 Server Push 的效果。為了讓開(kāi)發(fā)者方便的看到服務(wù)器和客戶端的通信情況,以及客戶端 DOM 節(jié)點(diǎn)的狀態(tài),Echo2 還提供了一個(gè)Debug 模式。這對(duì)我們開(kāi)發(fā) B/S 系統(tǒng)非常方便。Echo2是Echo Web框架的下一代版本。一個(gè)可以用于開(kāi)發(fā)基于Web胖客戶端應(yīng)用程序的框架。 圖1,Echo2 2.1.2Ajax技術(shù)原理 Ajax 由 HTML、JavaScript 技術(shù)、DHTML 和 DOM 組成,這一杰出的方法可以將笨拙的 Web 界面轉(zhuǎn)化成交互性的 Ajax 應(yīng)用程序。Ajax 不僅僅 是一種時(shí)尚,它是一
7、種構(gòu)建網(wǎng)站的強(qiáng)大方法,而且不像學(xué)習(xí)一種全新的語(yǔ)言那樣困難。AJAX應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用SOAP或其它一些基于XML的web service接口,并在客戶端采用JavaScript處理來(lái)自服務(wù)器的響應(yīng)。因?yàn)樵诜?wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,結(jié)果我們就能看到響應(yīng)更快 的應(yīng)用。同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,所以Web服務(wù)器的處理時(shí)間也減少了。 Ajax 應(yīng)用程序的優(yōu)勢(shì)在于: 1. 通過(guò)異步模式,提升了用戶體驗(yàn) 2. 優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用 3. Ajax引擎在客戶端運(yùn)行,承擔(dān)了一部分本來(lái)由服務(wù)器承擔(dān)的
8、工作,從而減少了大用戶量下的服務(wù)器負(fù)載。 2.1.3 MYSQL數(shù)據(jù)庫(kù)軟件MYSQL是一個(gè)真正的多用戶、多線程SQL數(shù)據(jù)庫(kù)服務(wù)器。SQL(結(jié)構(gòu)化查詢語(yǔ)言)是世界上最流行的和標(biāo)準(zhǔn)化的數(shù)據(jù)庫(kù)語(yǔ)言。MYSQL是以一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn),它由一個(gè)服務(wù)器守護(hù)程序MYSQLD和很多不同的客戶程序和庫(kù)組成。 2.1.4 APACHE TOMCAT服務(wù)器程序 Tomcat 是一個(gè)免費(fèi)的開(kāi)源的SERVLET容器,它是Apache基金會(huì)的Jakarta項(xiàng)目中的 一個(gè)核心項(xiàng)目,由Apache,Sun和其它一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了Sun的參與和支持,最新的SERVLET和JSP規(guī)范總能在Tomcat
9、中得到體現(xiàn)。Tomcat被JAVAWORLD雜志的編輯選為2001年度最具創(chuàng)新的java產(chǎn)品,可見(jiàn)其在業(yè)界的地位。與傳統(tǒng)的桌面應(yīng)用程序不同,Tomcat中的應(yīng)用程序是一個(gè)WAR(Web Archive)文件。在Tomcat中,應(yīng)用程序的部署很簡(jiǎn)單,你只需將你的WAR 放到Tomcat的WEBAPP目錄下,Tomcat會(huì)自動(dòng)檢測(cè)到這個(gè)文件,并將其解壓。 2.2 開(kāi)發(fā)工具 在本系統(tǒng)的開(kāi)發(fā)過(guò)程中,采用了如下工具及軟件: MySQL5.0 Apache Tomcat 5.5 + JDK 1.5 Eclipse j2ee 版 JDBC for MYSQL3 虛擬校園學(xué)習(xí)系統(tǒng)的總體設(shè)計(jì)框架 本系統(tǒng)采用EC
10、HO2/Ajax技術(shù)實(shí)現(xiàn)的,用戶的操作幾乎是立即更新的。因?yàn)槲覀儼醋烂娉绦虻乃季S設(shè)計(jì)Web應(yīng)用,我們不愿意讓用戶總是等待。 系統(tǒng)是一個(gè)基于WEB的應(yīng)用程序,這就注定了本系統(tǒng)必須要以B/S架構(gòu)為主要架構(gòu)。本系統(tǒng)采用Echo2框架,Echo2 還提供了 Server Push 的一種模式,可以模擬 C/S 系統(tǒng)中的 Server Push 效果,當(dāng)服務(wù)器收到外部事件以后更新客戶端數(shù)據(jù);特定時(shí)間間隔更新客戶端數(shù)據(jù)。 服務(wù)器發(fā)送功能具體的實(shí)現(xiàn)包括多用戶交互程序。 它保持程序的用戶們根據(jù)狀態(tài)信息或者新聞來(lái)更新數(shù)據(jù),并且當(dāng)長(zhǎng)時(shí)間運(yùn)行時(shí)提供反饋。因此可以說(shuō)本系統(tǒng)就是一個(gè)應(yīng)用程序,不是傳統(tǒng)意義上的網(wǎng)站。 教師
11、接口學(xué)生接口教師接口學(xué)生接口精品展示模塊作品展示模塊網(wǎng)絡(luò)硬盤模塊作業(yè)系統(tǒng)模塊注冊(cè)/登陸模塊論壇模塊聊天室模塊郵件模塊數(shù)據(jù)庫(kù)教研室系統(tǒng)學(xué)習(xí)室系統(tǒng)管理員接口 3.1.1系統(tǒng)功能的模塊化設(shè)計(jì)1)作品展示學(xué)生用戶可以將自己的作品發(fā)布到平臺(tái)上,提供大家評(píng)論參考以及互相學(xué)習(xí),可展示的作品比如自己寫的文章、做的FLASH、寫的算法或者程序等等。用戶可以管理自己發(fā)布的作品,包括對(duì)作品的刪除和修改。2)精品庫(kù)教師可以通過(guò)查看展示作品里的優(yōu)秀作品,把它們放到精品庫(kù)里,讓所有的教師或者學(xué)生下載。3)自我測(cè)試用戶選擇一些考試,評(píng)定下自己的實(shí)力,測(cè)試自己。4)注冊(cè)登陸用戶應(yīng)當(dāng)能夠方便注冊(cè)成為學(xué)生,能夠方便登陸系統(tǒng),登陸
12、后能方便修改自己的密碼以及個(gè)人信息,登陸后能夠退出登陸(注銷登陸信息)。5)網(wǎng)絡(luò)硬盤提供給用戶空間,讓他們上傳資料。6)郵件系統(tǒng)用戶之間可以互相發(fā)送站內(nèi)信息,比如學(xué)生請(qǐng)教教師或者教師回復(fù)學(xué)生等。7)聊天室模塊當(dāng)前所有在線用戶可以在聊天室中討論問(wèn)題8)論壇模塊學(xué)生可以在論壇中發(fā)帖尋求幫助或者回答別人提出的問(wèn)題9)管理員系統(tǒng)管理員對(duì)系統(tǒng)涉及的所有基礎(chǔ)信息進(jìn)行管理10)教研室系統(tǒng) 老師在教研室中對(duì)涉及自身的所有信息進(jìn)行管理,例如管理自己班級(jí)的學(xué)生信息、查看本班學(xué)生的作業(yè)和考試情況、上傳學(xué)習(xí)資料供本班學(xué)生下載等等。 學(xué)生在教研室中進(jìn)入自己老師的空間查看老師布置的作業(yè),答疑,下載老師上傳的課件等等。11
13、)學(xué)習(xí)室系統(tǒng) 此模塊只有學(xué)生才能進(jìn)入,學(xué)生對(duì)設(shè)計(jì)自身的所有信息進(jìn)行管理,例如發(fā)布自己的作品、發(fā)送郵件、使用網(wǎng)絡(luò)硬盤等等。3.1.2 用戶功能的接口描述 該系統(tǒng)的主要用戶分為教師、學(xué)生和管理員,他們對(duì)系統(tǒng)中的不同模塊具有不相同的操作及其權(quán)限,設(shè)計(jì)的教師接口為教研室,其中集成了教師對(duì)系統(tǒng)所有模塊的操作及其權(quán)限。學(xué)生接口為學(xué)習(xí)室,其中集成了學(xué)生對(duì)系統(tǒng)模塊的操作及其權(quán)限。管理員接口為管理員后臺(tái),可以維護(hù)系統(tǒng)干凈和進(jìn)行數(shù)據(jù)庫(kù)的操作。1)教研室系統(tǒng) 個(gè)人信息系統(tǒng):顯示及修改教師的所有基本信息。作業(yè)系統(tǒng):教師可以查看、下載已經(jīng)提交的作業(yè)以及布置新的作業(yè)。信息發(fā)布:教師給系統(tǒng)注冊(cè)的所有用戶可以發(fā)送站內(nèi)信息???/p>
14、試安排:教師可以安排考試。學(xué)習(xí)資源:教師可以上傳學(xué)習(xí)資源到公共資源庫(kù)。學(xué)生作品管理:教師可以將自己學(xué)生中的比較優(yōu)秀的展示作品添加到精品庫(kù)。精品庫(kù):教師可以下載或者刪除精品庫(kù)里的資料。網(wǎng)絡(luò)硬盤: 教師可以上傳或者下載個(gè)人資料。2)學(xué)習(xí)室系統(tǒng)個(gè)人信息系統(tǒng):顯示及修改該學(xué)生的所有基本信息。作業(yè)系統(tǒng):學(xué)生可以上傳、查看、下載自己已提交的作業(yè)。信息發(fā)布:學(xué)生可以給系統(tǒng)注冊(cè)的所有用戶發(fā)送站內(nèi)信息。自我測(cè)試:學(xué)生進(jìn)行自我測(cè)試。教師空間:學(xué)生可以進(jìn)入教師空間,在系統(tǒng)的公共資源庫(kù)中查找并下載資料、給老師發(fā)送郵件等。作品展示:學(xué)生可瀏覽大家已展示的作品,并展示自己的作品和刪除自己已展出的作品。網(wǎng)絡(luò)硬盤:學(xué)生可上傳
15、或者下載個(gè)人資料。 3)管理員系統(tǒng) 在此系統(tǒng)中管理員對(duì)所有設(shè)計(jì)系統(tǒng)的基本信息進(jìn)行管理 學(xué)生用戶管理: 教師用戶管理: 作品,精品管理: 系統(tǒng)公告管理: 論壇管理: 3.1.3系統(tǒng)主要界面功能和一致性風(fēng)格的設(shè)計(jì) 根據(jù)用戶需求,需要對(duì)系統(tǒng)中大量的數(shù)據(jù)進(jìn)行添加、刪除、檢索、顯示等操作,設(shè)計(jì)中將信息管理技術(shù)引入WEB系統(tǒng)。根據(jù)檢索數(shù)據(jù)的特征,系統(tǒng)設(shè)計(jì)了兩種可以進(jìn)行重復(fù)檢索的界面:一種是需要輸入關(guān)鍵字的檢索界面,如:學(xué)習(xí)資源模塊中的資源搜索,另一種是不需要輸入關(guān)鍵字,需要建立下拉列表,用戶從中選擇關(guān)鍵詞的檢索界面,如作品展示、精品庫(kù)等。另外,對(duì)于系統(tǒng)中各模塊內(nèi)容的顯示,統(tǒng)一設(shè)計(jì)了可進(jìn)行多種選擇排序的顯示
16、方式。 3.1.4 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì) 系統(tǒng)核心數(shù)據(jù)庫(kù)如下所示發(fā)送編號(hào)內(nèi)容1作業(yè)號(hào)得分MM1M11M學(xué)生發(fā)布編號(hào)描述o學(xué)生姓名內(nèi)容郵件郵件發(fā)送姓名1M教師作業(yè)批改評(píng)語(yǔ)姓名教師提交作業(yè)號(hào)資源編號(hào)發(fā)布描述教師姓名1M姓名系統(tǒng)核心部分?jǐn)?shù)據(jù)庫(kù)E-R圖時(shí)間 帖子回帖時(shí)間發(fā)帖人最后回復(fù)人編號(hào)ID回復(fù)回帖人內(nèi)容內(nèi)容編號(hào)ID 論壇數(shù)據(jù)庫(kù)E-R 圖系統(tǒng)的最終關(guān)系模型主要有 1)教師(帳號(hào),密碼,姓名,性別,簡(jiǎn)介,學(xué)院,教研室,上次登陸時(shí)間,代課班級(jí))2)學(xué)生(學(xué)號(hào),密碼,姓名,性別,出生年月,學(xué)院,班級(jí),上次登陸時(shí)間,指導(dǎo)老師賬號(hào))3)作品(作品號(hào),作品名,關(guān)鍵字,作者學(xué)號(hào),作品種類,上傳時(shí)間,存儲(chǔ)路徑,文件大小,
17、描述,作者姓名,指導(dǎo)老師姓名)4)作業(yè)(作業(yè)號(hào),作業(yè)標(biāo)題,附件路徑,批語(yǔ),學(xué)生,教師,班級(jí),狀態(tài),日期)5)論壇帖子(發(fā)帖編號(hào),主題,內(nèi)容,發(fā)帖人,發(fā)帖時(shí)間,最后回復(fù)人,瀏覽次數(shù),回復(fù)次數(shù),附件存儲(chǔ)路徑)由于關(guān)系模型太多,只列出較為典型的集中關(guān)系模型,恕不一一列出。如果想看具體的數(shù)據(jù)庫(kù)內(nèi)容,請(qǐng)查看數(shù)據(jù)庫(kù)文件。4 主要模塊的設(shè)計(jì)與實(shí)現(xiàn) 4.1 數(shù)據(jù)庫(kù)連接方式和數(shù)據(jù)編碼格式 在本系統(tǒng)中,系統(tǒng)對(duì)數(shù)據(jù)庫(kù)的操作主要是通過(guò)JDBC for MYSQL驅(qū)動(dòng)程序進(jìn)行連接操作。JDBC, 全稱為Java Database Connectivity standard, 它是一個(gè)面向?qū)ο蟮膽?yīng)用程序接口(API),
18、通過(guò)它可訪問(wèn)各類關(guān)系數(shù)據(jù)庫(kù)。JDBC也是java核心類庫(kù)的一部分。 數(shù)據(jù)庫(kù)的訪問(wèn)流程: JDBC Driver Manager-局部JDBC驅(qū)動(dòng)-客戶端數(shù)據(jù)庫(kù)-數(shù)據(jù)庫(kù)服務(wù)器-返回查詢結(jié)果,這種訪問(wèn)事實(shí)上是轉(zhuǎn)換JDBC調(diào)用為相應(yīng)的數(shù)據(jù)庫(kù)的客戶端API調(diào)用,這種方式的訪問(wèn)需要相應(yīng)的數(shù)據(jù)庫(kù)提供商提供相應(yīng)的JDBC驅(qū)動(dòng)程序,但是有一種好處,可以獨(dú)立于ODBC,方便性就大大提高了。private ConnectionFactory() dbconfig=new DataBaseConfig();dbconfig.setDbName(Res.get(dbname);dbconfig.setDriverNa
19、me(Res.get(dbdriver);dbconfig.setPassword(Res.get(dbpwd);dbconfig.setUser(Res.get(dbuser);dbconfig.setType(DataBaseConfig.CONNECT_TYPE_NORMAL);dbconfig.setUrl(Res.get(dburl); Class.forName(com.myql.jdbc.Driver ).newInstance(); String url=jdbc:mysql:/localhost:3306/campus; String user=username; Strin
20、g password=password; Connection conn= DriverManager.getConnection(url,user,password); 在數(shù)據(jù)庫(kù)的操作中,本系統(tǒng)主要用到了Statement類和ResultSet類對(duì)數(shù)據(jù)庫(kù)進(jìn)行插入、查詢、刪除等操作。相關(guān)定義的代碼如下:Statement stmt=conn.createStatement(); String sql=select * from tablename where table_id = 5;ResultSet rs=stmt.executeQuery(sql); 在數(shù)據(jù)編碼方面,通常使用的編碼格式有
21、許多,比如說(shuō):UTF-8,GBK,gb2312,iso8859-1,Unicode,等等。每個(gè)編碼格式的編碼方式都不同,支持的字符集也有較大的區(qū)別。在本系統(tǒng)中,客戶端采用gb2312規(guī)范的編碼格式,是考慮到幾乎所有的用戶均使用windows操作系統(tǒng)和IE瀏覽器,對(duì)gb2312的支持最好;而服務(wù)器端和數(shù)據(jù)庫(kù)采用UTF-8編碼格式,這是因?yàn)?,UTF-8在兼容性方面有出色表現(xiàn),同時(shí),Tomcat和MYSQL數(shù)據(jù)庫(kù)的默認(rèn)編碼格式也是UTF-8,它能使系統(tǒng)運(yùn)行在一個(gè)穩(wěn)定的環(huán)境下。編碼格式的聲明,以及編碼的轉(zhuǎn)換等 在數(shù)據(jù)的傳輸和存儲(chǔ)中,通常有一些涉及到文本格式的內(nèi)容需要存儲(chǔ),比如:個(gè)人筆記的內(nèi)容,專題討論
22、的內(nèi)容,都是需要保留諸如回車、空格等控制文本格式的元素的。在本系統(tǒng)中采用了如下代碼進(jìn)行轉(zhuǎn)換:public String turn(String str)while(str.indexOf(n)!=-1) /替換回車為str = str.substring(0,str.indexOf(n)+str.substring(str.indexOf(n)+1); while(str.indexOf( )!=-1) /替換空格為str = str.substring(0,str.indexOf( )+str.substring(str.indexOf( )+1); return str; 4.2 登陸注冊(cè)
23、模塊的設(shè)計(jì)與實(shí)現(xiàn) 在基于B/S架構(gòu)的WEB程序中,用戶注冊(cè)、登陸以及用戶個(gè)人信息的管理構(gòu)成了整個(gè)系統(tǒng)最為基本的模塊,一切其它的模塊和功能,無(wú)一不是建立在用戶注冊(cè)、登陸等身份驗(yàn)證的基礎(chǔ)上的。在本系統(tǒng)中,此模塊起到了關(guān)鍵性的作用,因?yàn)橐磺械臋?quán)限,教師和學(xué)生的身份識(shí)別,登陸用戶的資料管理等等,都通過(guò)這個(gè)模塊來(lái)實(shí)現(xiàn)。本模塊的結(jié)構(gòu)圖如圖所示。 學(xué)生用戶教師用戶注冊(cè)登陸驗(yàn)證修改/編輯個(gè)人信息通過(guò)驗(yàn)證實(shí)例化用戶對(duì)象,登陸系統(tǒng)錯(cuò)誤信息提示NY 注: 教師信息因?yàn)楦骂l率很低,故教師信息由管理員在數(shù)據(jù)庫(kù)中直接添加。4.2.1 學(xué)生注冊(cè)模塊 學(xué)生注冊(cè)界面為 學(xué)生用戶提交注冊(cè)信息后,系統(tǒng)根據(jù)學(xué)生所提交的信息進(jìn)行驗(yàn)證
24、,比如學(xué)號(hào)格式,郵箱地址格式是否正確、信息是否完整等等。通過(guò)驗(yàn)證后在數(shù)據(jù)庫(kù)中添加該學(xué)生用戶。代碼核心部分如下所示protected void register() String id = idTf.getText();String pwd = pwdTf.getText();String pwdr = confirmpwdTf.getText();String name = nameTf.getText();Boolean sex = sexCombox.getSelectedIndex () = 0 ? true : false;int school = schoolCombox.getSe
25、lectedIndex() + 1;if(classCombox.getSelectedItem()!=null) cla= classCombox.getSelectedItem().toString();String email = emailTf.getText();boolean agreement = agreementCb.isSelected();if (agreement) String idregx = Util.getIdRegx();String pwdregx = Util.getPasswordRegx();String nameregx = Util.getName
26、Regx();String classregx = Util.getClassRegx();String emailregx = Util.getEmailRegx();boolean ok = true;if (!Util.match(idregx, id) ok = false;idInfoLabel.setForeground(Color.RED);idInfoLabel.setText(Res.get(reg.iderr); else idInfoLabel.setForeground(Color.BLACK);idInfoLabel.setText(Res.get(reg.idok)
27、;/ pwdif (!pwd.equals(pwdr) ok = false;pwdInfoLabel.setForeground(Color.RED);pwdInfoLabel.setText(Res.get(ferr); else /if (!Util.match(pwdregx, pwd) ok = false;pwdInfoLabel.setForeground(Color.RED);pwdInfoLabel.setText(Res.get(reg.pwderr); else pwdInfoLabel.setForeground(Color.BLACK);pwdInfoLabel.se
28、tText(Res.get(reg.pwdok);/ nameif (!Util.match(nameregx, name) ok = false;nameInfoLabel.setForeground(Color.RED);nameInfoLabel.setText(Res.get(err); else nameInfoLabel.setForeground(Color.BLACK);nameInfoLabel.setText(Res.get(ok);/ classif (!Util.match(classregx, cla) ok = false;classInfoLabel.setFor
29、eground(Color.RED);classInfoLabel.setText(Res.get(reg.classerr); else classInfoLabel.setForeground(Color.BLACK);classInfoLabel.setText(Res.get(reg.classok);/ emailif (!Util.match(emailregx, email) ok = false;emailInfoLabel.setForeground(Color.RED);emailInfoLabel.setText(Res.get(reg.emailerr); else e
30、mailInfoLabel.setForeground(Color.BLACK);emailInfoLabel.setText(Res.get(reg.emailok);if(teaName.length()3)ok=false;teaCheck.setForeground(Color.RED);teaCheck.setText(請(qǐng)選擇老師); elseteaCheck.setForeground(Color.BLACK);teaCheck.setText(成功);/ okif (ok) StudentDataBase db = StudentDataBase.Instance();int d
31、 = Integer.parseInt(id);if (db.contain(d) idInfoLabel.setForeground(Color.RED);idInfoLabel.setText(Res.get(reg.idexist); else Student s = new Student();s.setId(Integer.parseInt(id);s.setName(name);s.setPassword(pwd);s.setClassNumber(Integer.parseInt(cla);s.setEmail(email);s.setSchoolNumber(short) sc
32、hool);s.setIsmale(sex);s.setRegisterTeacher(teaName);s.setIsregistertoteacher(true);db.add(s);File f=new File(SysConfig.getInstance().getHomeworkPath(s.getId();f.mkdir();/homework file pathf=new File(SysConfig.getInstance().getNetDiskPath(s.getId();/System.out.println(f);f.mkdir();/net disk file pat
33、h/Logger.Instance().logEvent(s.getId()+ register);submitButton.setText(Res.get(reg.submitsuc);submitButton.setEnabled(false);s=db.get(d);app.login(s);/ not agreementelse submitButton.setText(Res.get(reg.submiterr);4.2.2 用戶登陸模塊實(shí)現(xiàn) 本系統(tǒng)中,登陸時(shí)學(xué)生采用真實(shí)學(xué)號(hào)和密碼登陸,教師采用管理員提供的賬號(hào)和密碼登陸。系統(tǒng)在驗(yàn)證用戶身份時(shí),直接從數(shù)據(jù)表里以該用戶名和密碼為條件進(jìn)行
34、檢索,如果找到記錄則登陸成功,如果找不到記錄則登陸失敗。 當(dāng)?shù)顷懗晒r(shí),系統(tǒng)將該教師的個(gè)人資料(包括賬號(hào)、密碼、其他信息)記錄在用戶變量中,寫入Teacher中。類圖和相關(guān)代碼如下:Teacher類:教師類。TeacherDataBase類:教師和數(shù)據(jù)庫(kù)處理的類Teacher t=new Teacher();/新建教師對(duì)象trystatement=c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);/數(shù)據(jù)庫(kù)的查詢r(jià)s=statement.executeQuery(sql);if(!rs.ne
35、xt()return null; t.setId(id);t.setName(rs.getString(2);t.setSchoolNumber(rs.getShort(3);t.setDepartment(rs.getShort(4);t.setSummary(rs.getString(5);t.setPassword(rs.getString(6);t.setIsmale(rs.getBoolean(7);t.setEmail(rs.getString(8);t.setLastLoginTime(rs.getLong(9);t.setAdminclass(rs.getString(10);
36、t.setWeb(rs.getBoolean(11);t.setOpenToAll(rs.getBoolean(12);這樣,當(dāng)用戶進(jìn)行其他操作時(shí),就可以進(jìn)行登陸與否的驗(yàn)證了,以教師為例,點(diǎn)擊某個(gè)需要教師權(quán)限的頁(yè)面時(shí),系統(tǒng)會(huì)進(jìn)行如下的身份驗(yàn)證: if(tdb.contain(id)/得到idTeacher t=tdb.get(id);if(t.getPassword().equals(pwd)/密碼一樣,登錄成功app.login(t);setVisible(false);return;else/密碼不一樣,登錄不成功loginButton.setForeground(Color.RED);
37、loginButton.setText(Res.get(login.pwderr);return;4.3 作品展示模塊4.3.1 作品展示模塊設(shè)計(jì)與實(shí)現(xiàn) 學(xué)生將其比較優(yōu)秀的作品展示給大家。展示時(shí),必須標(biāo)明名稱、作品分類、關(guān)鍵字、描述和文件。展示作品界面如圖所示:算法流程圖如下:用戶登錄選擇作品展示填寫作品基本信息文件合法是上傳至服務(wù)器否提示錯(cuò)誤選擇作品文件客戶端發(fā)布作品流程圖發(fā)送成功失敗信息發(fā)送失敗信息操作成功接收上傳文件并存放到相應(yīng)目錄中將基本信息寫入數(shù)據(jù)庫(kù)接收作品基本信息收到用戶請(qǐng)求否是服務(wù)器發(fā)布作品流程圖系統(tǒng)會(huì)對(duì)作品信息進(jìn)行二次處理,將作品信息添加到數(shù)據(jù)庫(kù)中處理核心代碼如下所示: Byt
38、eArrayOutputStream out = new ByteArrayOutputStream(); IOUtils.copy(event.getInputStream(), out); event.getInputStream().close(); /驗(yàn)證提交的作品其他信息是否完整 if(nametf.getText()=null|nametf.getText().trim().equals() System.out.println(作品名稱不能為空); return; String tempFilename=event.getFileName(); String filename=U
39、til.getFilename(new String(tempFilename.getBytes(GBK),UTF-8); String SavePath; String suff=Util.getSuffix(filename); SavePath=Util.getWorkShowAttachPath(student.getId(),suff); File f=new File(SavePath); f.createNewFile(); FileOutputStream fop=new FileOutputStream(f); fop.write(out.toByteArray(); fop
40、.close(); /將作品信息添加到數(shù)據(jù)庫(kù)中 String name=nametf.getText(); String keywords=keywordstf.getText().trim(); String instruct=student.getRegisterTeacher().substring(0,student.getRegisterTeacher().length()-1); String instruct1=Util.getinstructname(instruct); Works ws=new Works(); ws.setAttach(Util.getSavePath(S
41、avePath); ws.setName(name); ws.setinstruct(instruct1); ws.setAuthor(student.getName(); ws.setKeywords(keywords); ws.setDescription(); ws.setFromId(student.getId(); ws.setSchoolNumber(student.getSchoolNumber(); ws.setClassNumber(student.getClassNumber(); ws.setMark(0+); ws.setCategory(WorkshowCategor
42、y)cateSF.getSelectedItem().getId(); ws.setUploadTime(Util.getDateLong(); ws.setFileSize(Util.getFileSize(SavePath); WorksDataBase.Instance().add(ws); label.setText(sucessed);4.3.2展示作品模塊算法的設(shè)計(jì)與實(shí)現(xiàn) 在作品展示中,作品的瀏覽和檢索是整個(gè)模塊的核心部分。在作品數(shù)量有一定規(guī)模的時(shí)候,用戶根據(jù)名稱、關(guān)鍵字、描述和作者檢索后的結(jié)果往往不夠精準(zhǔn),經(jīng)常出現(xiàn)許多冗余信息,這就給用戶帶來(lái)麻煩。這個(gè)時(shí)候,就需要一個(gè)多次檢索的功
43、能,允許用戶在搜索的結(jié)果進(jìn)行再次的搜索,這樣,得出來(lái)的結(jié)果的質(zhì)量就相對(duì)令人滿意了。在多次搜索算法當(dāng)中,通常有這么兩種實(shí)現(xiàn)方案: 1)在結(jié)果中搜索法。這個(gè)辦法是說(shuō),在用戶進(jìn)行第一次檢索的時(shí)候,系統(tǒng)記錄下用戶的檢索信息(關(guān)鍵字等),當(dāng)用戶輸入第二次檢索的信息時(shí),使用一個(gè)select語(yǔ)句,對(duì)幾次的查詢條件進(jìn)行“與”操作,用幾個(gè)條件同時(shí)進(jìn)行限制,查找出用戶需要的結(jié)果。相關(guān)算法如下:String condition=oldCondition+ and +newCondition;2)重新檢索法。重新檢索將以前檢索條件重置為空,以當(dāng)前用戶給定的檢索條件為唯一檢索條件。核心代碼如下如所示if(selectI
44、ndex.getSelectedItem()!=null)int selectIndexId=selectIndex.getSelectedIndex();switch(selectIndexId)case 0:selectContent=keywords;showCondition= 關(guān)鍵字=;break;case 1:selectContent=fromId;showCondition= 作者ID=;break;case 2:selectContent=schoolnumber;indexContent=String.valueOf(schoolSelect.getSelectedInde
45、x();showCondition= 學(xué)院=;selectContent1=classnumber;showCondition1= 班級(jí)=;if(classSelect!=null) indexContent1=ssclassSelect.getSelectedIndex();break;case 3: selectContent=classnumber;showCondition= 班級(jí)=;break;case 4:selectContent=category;showCondition= 類型=;indexContent=String.valueOf(categorySelect.getS
46、electedIndex();break;default:break; 3) 多選擇性排序算法的設(shè)計(jì)與實(shí)現(xiàn) 用戶在作品展示中看到很多作品,但有時(shí)候不能區(qū)分你的是哪個(gè)作品。而多選擇性排序算法可以讓作品按照名稱、作者、作品分類、大小、上傳時(shí)間等排序,來(lái)方便用戶顯示內(nèi)容。 多選擇性排序算法描述如下:分別設(shè)置按鈕代表:作者、作品分類、大小、上傳時(shí)間等。(以作者按鈕為例描述清楚設(shè)置以上按鈕的步驟)。用數(shù)據(jù)isDesc記錄按鈕的狀態(tài),如果按鈕被點(diǎn)擊,立馬修改按鈕的狀態(tài),并且修改數(shù)據(jù)庫(kù)的查詢信息,用order by name或者order by desc對(duì)數(shù)據(jù)庫(kù)中的字段進(jìn)行升序或者降序排序。算法流程圖如下查
47、詢按鈕被點(diǎn)擊修改按鈕的狀態(tài)為降序按鈕是升序?修改按鈕的狀態(tài)為升序NY用order by name desc修改數(shù)據(jù)庫(kù)的查詢用order by name ase修改數(shù)據(jù)庫(kù)的查詢重要代碼如下:public void actionPerformed(ActionEvent arg0) String condition=WorksDataBase.Instance().getCondition();String showCndition=WorksDataBase.Instance().getShowCondition();String order=;if(isDesc) /是降序order= ord
48、er by name ;/改為升序isDesc=false;else/不是降序order= order by name desc ;/改為降序isDesc=true;updatePage(condition,order,showCndition); /更新4.3.3 精品庫(kù)展示算法的設(shè)計(jì)與實(shí)現(xiàn) 精品展示算法與作品展示算法雷同,故不再做解釋,請(qǐng)參考4.3.2中內(nèi)容4.4自我測(cè)試模塊 老師給本班同學(xué)出題,學(xué)生參加測(cè)試,檢驗(yàn)學(xué)習(xí)成果4.4.1 自我測(cè)試的設(shè)計(jì)與實(shí)現(xiàn)學(xué)生接口教師接口測(cè)試出試卷出題目試卷庫(kù)試題庫(kù) 自我測(cè)試系統(tǒng)結(jié)構(gòu)圖1)試卷在數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表為contest contest,表的結(jié)構(gòu),如圖
49、20所示:2) 考試與問(wèn)題的對(duì)應(yīng)關(guān)系由 表paperquestion記錄Paperquestion的結(jié)構(gòu)如下圖所示3)學(xué)生參加測(cè)試后將結(jié)果保存在contestgrade表中Contestgrade的結(jié)構(gòu)如圖所示4)教師查看某次考試情況 在Contestgrade表中搜索,將參加該此考試的所有學(xué)生的答題情況進(jìn)行統(tǒng)計(jì),反饋給教師。4.5郵件系統(tǒng)模塊 本系統(tǒng)是方便教師和同學(xué)們交流信息。比如學(xué)生請(qǐng)教教師問(wèn)題,老師進(jìn)行答疑。4.5.1 模塊結(jié)構(gòu)圖編輯郵件顯示郵件信息庫(kù)學(xué)生教師發(fā)送郵件刪除郵件4.5.2 數(shù)據(jù)表的設(shè)計(jì)系統(tǒng)采用發(fā)送和收取兩張表存儲(chǔ)信息。表名inmessage:inmessage表字段含義及備
50、注字段名含義備注id主鍵,編號(hào)。標(biāo)識(shí),基數(shù)為1,增量為1fromId發(fā)信息的人toId收信息的人title標(biāo)題content內(nèi)容isRead是否閱讀sendTime發(fā)送時(shí)間表名outmessage: Outmessage表字段含義及備注字段名含義備注id主鍵,編號(hào)。標(biāo)識(shí),基數(shù)為1,增量為1fromId信息發(fā)來(lái)的人toId信息收到的人title主題content信息內(nèi)容isRead信息是否被閱讀sendTime信息發(fā)送時(shí)間4.5.3 發(fā)布信息代碼重要代碼如下:Message m=new Message();/創(chuàng)建信息對(duì)象m.setContent(content); /給信息添加內(nèi)容m.setId
51、From(fromId); /給信息添加發(fā)布人m.setIdTo(toId); /給信息添加收到人m.setRead(false); /給信息添加未讀m.setTime(Util.getDateLong();/給信息添加時(shí)間m.setTitle(title); /給信息添加標(biāo)題InMessageDataBase.Instance().add(m);OutMessageDataBase.Instance().add(m);resultLabel.setForeground(Color.BLACK);resultLabel.setText(Res.get(msg.sendmsg.sendok);L
52、ogger.Instance().logEvent(m.getId()+ message sended);if(message!=null&!message.isRead()message.setRead(true);InMessageDataBase.Instance().update(message);setVisible(false);dispose();4.6 論壇模塊 在論壇中老師和學(xué)生可以相互發(fā)帖和回帖進(jìn)行答疑解惑。 帖子和回復(fù)的對(duì)應(yīng)關(guān)系如下E-R圖所示 帖子回帖時(shí)間發(fā)帖人最后回復(fù)人編號(hào)ID回復(fù)回帖人內(nèi)容內(nèi)容編號(hào)ID時(shí)間 帖子和回復(fù)的對(duì)應(yīng)關(guān)系帖子對(duì)數(shù)據(jù)庫(kù)中的post表,具體結(jié)構(gòu)如下
53、圖所示 Post表結(jié)構(gòu)圖回帖對(duì)數(shù)據(jù)庫(kù)中的reply表,具體結(jié)構(gòu)如下圖所示 Reply表結(jié)構(gòu)圖一個(gè)帖子由發(fā)帖和回帖部分組成,其核心代碼為private void initGUI() mainColumn=new Column();post=PostDataBase.Instance().get(postId);askId=post.getAskerId();hostTable=new HostTable(app,askId,userId,postId);mainColumn.add(hostTable);replyTable=new ReplyTable(app,userId,postId);m
54、ainColumn.add(replyTable);add(mainColumn);System.gc();用戶可以在所有帖子中搜索自己的發(fā)帖,或者回復(fù)過(guò)的帖子,其核心代碼為 myPostBt.addActionListener(new ActionListener()/自己的所有發(fā)帖public void actionPerformed(ActionEvent arg0) if(userId=UNLOGIN)/ 如果沒(méi)用登錄 app.getMainPane().showUnLoginWarningPane();return; removeTable(); problemTable=new P
55、roblemTable(app,userId,ProblemTable.TYPE_MYPOST); mainColumn.add(problemTable); );myreplyPostBt.addActionListener(new ActionListener()/自己曾經(jīng)回復(fù)過(guò)的帖子public void actionPerformed(ActionEvent arg0) if(userId=UNLOGIN)/ 如果沒(méi)用登錄 app.getMainPane().showUnLoginWarningPane();return;removeTable();problemTable=new P
56、roblemTable(app,userId,ProblemTable.TYPE_MYREPLY);mainColumn.add(problemTable););4.7 管理員模塊管理模塊是WEB系統(tǒng)中的重要組成部分,也是維護(hù)系統(tǒng)信息干凈和進(jìn)行數(shù)據(jù)管理操作的執(zhí)行模塊。本系統(tǒng)具備獨(dú)立的管理后臺(tái),具備獨(dú)立的管理員賬號(hào)。管理后臺(tái)具備以下功能:1)管理員可以用正確的帳號(hào)和密碼(默認(rèn)都是admin)登陸,帳號(hào)和密碼可以自由修改2)管理員可以管理大部分?jǐn)?shù)據(jù)庫(kù)中的數(shù)據(jù)。但有以下操作限制:無(wú)法修改用戶個(gè)人信息,只能刪除無(wú)法修改用戶發(fā)布的消息、資源等數(shù)據(jù),只能刪除管理后臺(tái)主要用控制臺(tái),用命令行的方式去管理。首先
57、必須用su 7758521升級(jí)為超級(jí)管理者,才能進(jìn)行其他管理。所有的命令如圖26: 管理員控制臺(tái)界面 除了用控制臺(tái)對(duì)系統(tǒng)進(jìn)行管理,還有可視化的管理界面供管理員使用,圖形化操作,很方便管理員使用。 圖形化管理界面5 后記 軟件中還有很多有亮點(diǎn)的細(xì)節(jié)處理,工具類代碼的重用等等,由于篇幅過(guò)長(zhǎng)恕不一一列出。虛擬校園軟件的設(shè)計(jì)切實(shí)從使用著的角度出發(fā),功能強(qiáng)大,使用簡(jiǎn)便。但是由于開(kāi)發(fā)者的水平有限,其中的bug肯定難以避免,希望指導(dǎo)老師給予批評(píng)指導(dǎo),不吝賜教。5 結(jié)束附錄資料:從 XML 生成可與 Ajax 共同使用的 JSON時(shí)下,非常流行使用 JavaScript 代碼為數(shù)據(jù)驅(qū)動(dòng)的 Web 應(yīng)用程序添加
58、互動(dòng)性。若能將數(shù)據(jù)編碼成 JavaScript Object Notation(JSON)的格式,您就可以更輕松地通過(guò) JavaScript 語(yǔ)言使用它。通過(guò)本文,發(fā)掘使用 XSLT V2 從 XML 數(shù)據(jù)生成 JSON 的幾種不同方法。幾年前,許多開(kāi)發(fā)人員很看好 XML、XSLT、Extensible HTML (XHTML)和其他一些基于標(biāo)記的語(yǔ)言?,F(xiàn)在,Asynchronous JavaScript and XML(AJAX)成了新的熱點(diǎn),人們又將目光轉(zhuǎn)向了使用 JavaScript 代碼的數(shù)據(jù)驅(qū)動(dòng)的富 Internet 應(yīng)用程序。但是開(kāi)發(fā)人員是否已經(jīng)消除了 XML 和這一新技術(shù)之間的鴻
59、溝呢?當(dāng)然,您可以在 Web 客戶機(jī)中使用 XML 解析器來(lái)讀取數(shù)據(jù),但這種做法會(huì)帶來(lái)兩個(gè)問(wèn)題。第一,出于安全方面的原因,XML 數(shù)據(jù)只能從與此頁(yè)面相同的那個(gè)域中讀取。這雖然不是什么大的限制因素,但它的確會(huì)引起部署方面的問(wèn)題,還會(huì)阻礙 DHTML 小部件的創(chuàng)建。第二,讀取和解析 XML 會(huì)非常慢。另一種做法是讓服務(wù)器執(zhí)行 XML 的解析工作,方法是設(shè)置服務(wù)器,使之向?yàn)g覽器發(fā)送以 JavaScript 代碼或時(shí)下流行的 JavaScript Object Notation(JSON)編碼的數(shù)據(jù)。本文將展示如下三種使用 XSLT V2 語(yǔ)言和 Saxon XSLT V2 處理器從 XML 數(shù)據(jù)生成
60、 JSON 的技巧: 簡(jiǎn)單編碼 通過(guò)函數(shù)調(diào)用加載數(shù)據(jù) 編碼對(duì)象 JSON 簡(jiǎn)介要學(xué)習(xí)如何將數(shù)據(jù)編碼成 JSON(它只是 JavaScript 的一個(gè)子集),最好的方法是從數(shù)據(jù)開(kāi)始。清單 1 顯示了書籍列表的一個(gè)示例 XML 數(shù)據(jù)集。清單 1. 基本的圖形化圖書館 Code Generation in Action JackHerrington Manning PHP Hacks JackHerrington OReilly Podcasting Hacks JackHerrington OReilly 這個(gè)數(shù)據(jù)集很簡(jiǎn)單,只包含三本書,每本書都具有惟一的 ID、書名、作者姓名及出版商的名字。(沒(méi)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 1場(chǎng)景歌說(shuō)課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)
- 2024年秋一年級(jí)道德與法治下冊(cè) 第二單元 我和大自然 5 風(fēng)兒輕輕吹說(shuō)課稿 新人教版
- 18古詩(shī)三首浪淘沙(其一)說(shuō)課稿-2024-2025學(xué)年六年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 8 設(shè)計(jì)制作小車(二) 說(shuō)課稿-2024-2025學(xué)年科學(xué)四年級(jí)上冊(cè)教科版
- 23《月光曲》說(shuō)課稿-2024-2025學(xué)年語(yǔ)文六年級(jí)上冊(cè)統(tǒng)編版
- 1 24時(shí)計(jì)時(shí)法(說(shuō)課稿)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)人教版001
- 2023九年級(jí)道德與法治上冊(cè) 第三單元 文明與家園 第五課 守望精神家園第2框 凝聚價(jià)值追求說(shuō)課稿 新人教版
- 2025北京市飼料采購(gòu)合同新
- 2025建造船舶所要用到的合同
- 2025房屋租賃合同正文
- 煙葉復(fù)烤能源管理
- 食品安全管理員考試題庫(kù)298題(含標(biāo)準(zhǔn)答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 2024年山東濟(jì)寧初中學(xué)業(yè)水平考試地理試卷真題(含答案詳解)
- 社會(huì)保險(xiǎn)課件教學(xué)課件
- 訂婚協(xié)議書手寫模板攻略
- 準(zhǔn)備單元 雪地上的“足跡”(教學(xué)設(shè)計(jì))-2023-2024學(xué)年五年級(jí)下冊(cè)科學(xué)大象版
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說(shuō)明
- 音樂(lè)學(xué)科閱讀方案
- 《立體倉(cāng)庫(kù)鋼結(jié)構(gòu)貨架技術(shù)規(guī)范(征求意見(jiàn)稿)》
- 2024年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論