【正文】
1; subjectId 為外鍵,應(yīng)用了題目信息表的主鍵; studentId 也為外鍵,引用了用戶信息表的標(biāo)示。詳細(xì)信息如表 錯(cuò)題記錄表 : 表 字段名稱 數(shù)據(jù)類型 必須的 PK 注釋 Id Int 是 是 錯(cuò)題記錄的 Id號(hào) subjected Int 是 否 錯(cuò)誤題目的 id號(hào) studentId Int 是 否 做錯(cuò)題目的學(xué)生的 id號(hào) countNum Int 是 否 該學(xué)生做錯(cuò)題目的次數(shù) 用戶信息表:數(shù)據(jù)庫(kù)表名為 userInfo,描述用戶基本信息的數(shù)據(jù)結(jié)構(gòu)表。主鍵為 id,在數(shù)據(jù)庫(kù)中設(shè)置為 自增,增量為 1。詳細(xì)信息如下表 用戶信息表: 表 息表 字段名稱 數(shù)據(jù)類型 必需的 PK 注釋 Id Int 是 是 用戶的標(biāo)示 username Char(20) 是 否 用戶的姓名 userNum Char(30) 是 否 用戶的職工編號(hào),或者學(xué)生的學(xué)號(hào) 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) Password Char(30) 是 否 用戶的密碼 Sex Char(10) 是 否 用戶的性別 Email Char(50) 否 否 用戶的郵件地址 Birthday dateTime 否 否 用戶的出生日期 Tel Char(20) 否 否 用戶的電話號(hào)碼或者手機(jī)號(hào)碼 Photo Char(50) 是 否 用戶的頭像地址 tGraduated Char(50) 否 否 教師畢業(yè)的學(xué)校 tPosition Char(30) 否 否 教師的職位 tDegree Char(30) 否 否 教師的稱號(hào) Nation Char(20) 否 否 用戶的民族 userAbout Varchar(5000) 否 否 用戶的簡(jiǎn)要描述 tResearch Varchar(5000) 否 否 教師的主研究領(lǐng)域 Popedom Char(10) 是 否 用戶的權(quán)限標(biāo)志 Addr Char(50) 否 否 用戶的地址 userClass Char(50) 否 否 學(xué)生的班級(jí) 系統(tǒng)設(shè)計(jì) 系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì) 在系統(tǒng)服務(wù)器端的業(yè)務(wù)處理中有六個(gè)包,它們分別是: 包 裝載系統(tǒng)實(shí)體 bean。映射數(shù)據(jù)庫(kù)中相應(yīng)的表。 包 主要映射數(shù)據(jù)庫(kù)中的一些視圖,同時(shí),也映射試圖層 Flex 程序中的一些視圖 bean,用于更好的顯示數(shù)據(jù),有利于將數(shù)據(jù)庫(kù)中查 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) j in g p in . c om . u t ilj in g p in . c om . op e ra t e d bj in g p in . c om . e n t it yj in g p in . c om . b u s in e s sj in g p in . c om . a c t ions e rv le t詢出來的關(guān)系型數(shù)據(jù)轉(zhuǎn)換成對(duì)象類型的數(shù)據(jù)。 包 :裝載對(duì)數(shù)據(jù)庫(kù)中各個(gè)表的所有低層操作,如增加、刪除、修改等。 包 :裝載系統(tǒng)主要的工具類。如分頁工具類,連接數(shù)據(jù)的工具類,隨機(jī)選題工具類,題目轉(zhuǎn)換工具類等。 包 :裝載視圖層 Flex 應(yīng)用程序接口, Flex 應(yīng)用程序通過 RemoteObject 對(duì)象可以直接調(diào)用 action 里面的方法。 包 servlet 和 的作用是一樣的,不過他是通過 Flex 的HttpService 對(duì)象來與后臺(tái)進(jìn)行通信 ,在這里主要用于文件的傳輸。 客戶端通過請(qǐng)求 里的類來達(dá)到和服務(wù)器端進(jìn)行數(shù)據(jù)交互。而 里的類將請(qǐng)求數(shù)據(jù)設(shè)置在 或者 中,如果需要 里的類來輔助處理業(yè)務(wù)邏輯,就調(diào)用 里的工具類來處理,如果沒有就直接調(diào)用 里的類來連接數(shù)據(jù)庫(kù)。并對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行相應(yīng)的操作。它們的工作機(jī)制如 圖 系統(tǒng)服務(wù)器端包圖: 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) 圖 系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì) 由于使用的是 B/S 架構(gòu),所有在客戶端是使用瀏覽器,在服務(wù)器是使用Tomcat 作為容器存放服務(wù)器的業(yè)務(wù)邏輯處理程序,數(shù)據(jù)庫(kù)采用 sql2021。在客戶端是使用 Flex 開發(fā)的 Flash;用戶只要在瀏覽器中安裝 Flash 的插件就可以通過在地址欄上輸入域名訪問服務(wù)器。在客戶端 Flex 應(yīng)用程序中, Model 包里的ActionScript 類,主要是用于映射服務(wù)器端 或者 里的數(shù)據(jù)對(duì)象。 Util 包用于裝載視圖成的工具類,包括翻頁處理類、文件上傳處類和一些簡(jiǎn)單業(yè)務(wù)邏輯的處理類等。 Format 裝載的格式化數(shù)據(jù)類,用于對(duì) model 中的對(duì)象數(shù)據(jù)進(jìn)行格式化顯示,主要是為了提高系統(tǒng)性能。 Event 裝載的一些自定義事件。它的結(jié)構(gòu)圖如下圖 系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)圖: 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) 圖 系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)圖 學(xué)生在線測(cè)試活動(dòng)圖 學(xué)生登錄后在線測(cè)試所涉及的對(duì)象有題目和錯(cuò)題記錄,題目是管理員錄入題庫(kù)的題目,學(xué)生通過學(xué)生后臺(tái)界面按照不同的方式從數(shù)據(jù)庫(kù)中進(jìn)行 選題,并且對(duì)選擇的題目進(jìn)行測(cè)試,如果測(cè)試錯(cuò)題將把錯(cuò)題記錄通過系統(tǒng)記錄在錯(cuò)題記錄中,學(xué)生還可以對(duì)自己錯(cuò)題的題目再測(cè)試,測(cè)試正確后覺得是否從數(shù)據(jù)庫(kù)中刪除錯(cuò)題記錄。活動(dòng)圖表示如下: 客戶端 F le x 程序精品課程數(shù)據(jù)庫(kù)服務(wù)器端應(yīng)用程序j in g p in . c om . a c t ionj in g p in . c om . e n t it yj in g p in . c om . op e ra t ej in g p in . c om . u t ils e rv le tj in g p in . c om . b u s in e s sm od e lv ie w u t ilf or m a te v e n t映射實(shí)體 B e a n映射試圖 b e a n用于文件上傳使用 R e m ot e O b j e c t 對(duì)象調(diào)用 A c t ion 里對(duì)象的方法自定義事件格式化數(shù)據(jù)顯示將關(guān)系型數(shù)據(jù)封裝成對(duì)象模型 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) 圖 學(xué)生登錄后的活動(dòng)圖 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) 第四章 系統(tǒng)關(guān)鍵技術(shù)的實(shí)現(xiàn) 系統(tǒng)的實(shí)現(xiàn)在系統(tǒng)的客戶端使用了 Flex 技術(shù),在服務(wù)器端用 J2EE 來處理業(yè)務(wù)邏輯,系統(tǒng)中的各個(gè)功能模塊的工作流程大體都差不多,本人圍繞系統(tǒng)的主體工作機(jī)制,分頁,學(xué)生組卷,文件上傳等關(guān)鍵技術(shù)的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析和介紹。 系統(tǒng)主體架構(gòu)的實(shí)現(xiàn) 系統(tǒng)設(shè)計(jì)架構(gòu)和工作機(jī)制 在客戶端的 Flex 應(yīng)用中可以通過調(diào)用 Flex 數(shù)據(jù)服務(wù)組件 BlazeDS 來和服務(wù)器端應(yīng)用程序進(jìn)行通信。在本系統(tǒng)中調(diào)用了兩個(gè) BlazeDS 的對(duì)象 :RemoteObject和 HttpService 。 RemoteObject 對(duì)象通過在服務(wù)器端 和 文件的配置可以直接調(diào)用服務(wù)器端應(yīng)用程序中的方法,它的數(shù)據(jù)傳輸格式是以二進(jìn)制格式數(shù)據(jù)進(jìn)行傳輸,所以傳輸速率較快,適合傳輸對(duì)象型數(shù)據(jù)。而 HttpService 對(duì)象通過服務(wù)器端的配置 可以直接請(qǐng)求服務(wù)器中的Servlet,它是以傳統(tǒng)的 Http 字符流的形式進(jìn)行數(shù)據(jù)傳輸?shù)?,適合文件的傳輸和簡(jiǎn)單的 Http 請(qǐng)求等。下面給出簡(jiǎn)單的代碼,使用 ReomteObject 進(jìn)行數(shù)據(jù)通信的客戶端代碼如下: 下面是是向服務(wù)器端發(fā)送查詢章節(jié)集合的類: //查詢結(jié)果集 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) public var sectionList:ArrayCollection。 private function init():void{ sectionInfo = new SectionInfo()。 sectionList = new ArrayCollection()。 remoteObject = new RemoteObject()。 //設(shè)置服務(wù)器端的接受接口 =sectionInfoAction。 //便宜系統(tǒng)移植 =messagebroker/amf。 //設(shè)置是否顯示等待狀態(tài) = true。 //監(jiān)聽當(dāng)查詢錯(cuò) 誤時(shí)執(zhí)行的方法 (,function():void{(39。查詢章節(jié)出錯(cuò) 39。)。})。 //監(jiān)聽查詢成功后執(zhí)行的方法 (, selectResultHandle)。 getSectionList()。 } //向服務(wù)器發(fā)送查詢請(qǐng)求 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) public function getSectionList():void{ //調(diào)用服務(wù)器端相應(yīng)類的 getSection()方法 (sectionInfo)。 } //處理查詢結(jié)果 public function selectResultHandle(e:ResultEvent):void{ = ( as ArrayCollection)。 } 在獲得章節(jié)信息的 Flex 類 SectionUtil中 ,remoteObject對(duì)象是向服務(wù)器交互 ,=sectionInfoAction為了指定服務(wù)器端 ,同時(shí)監(jiān)聽與服務(wù)器交互的事件,如果交互成功,就用 selectResultHandle方法處理結(jié)果,如果失敗直接打印查詢錯(cuò)誤。 在服務(wù)器端的 文件中配置 sectionInfoACtion接口配置信息如下 : //定義 sectionInfoAction接口 destination id=sectionInfoAction properties source/source /properties /destination 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) 中獲得章節(jié)信息的方法 代碼如下: * 按條件查詢章節(jié)信息 public ListSectionInfo getSections(SectionInfo sInfo) { operate = new SectionInfoOperate()。 ListSectionInfo list = new ArrayListSectionInfo()。 list = (sInfo)。 return list。 } } 只要在服務(wù)器度端進(jìn)行 的配置,在客戶端的RemoteObject 對(duì)象就可以調(diào)用 SectinInfoAction 的任何方法進(jìn)行數(shù)據(jù)的傳輸 . 使用 HttpService 對(duì)象進(jìn)行數(shù) 據(jù)傳輸時(shí),服務(wù)器的 Servlet 和普通的Servlet 沒有什么區(qū)別 ,在客戶端的 Flex 程序如下 : mx:HTTPService id=Object method=POST fault=faultEvent(event) result=resultHandle(event) mx:url xxxServlet 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) /mx:url /mx:HTTPService 代碼分析 : 使用 mxml 創(chuàng)建 HTTPService 對(duì)象 , 并且設(shè)置請(qǐng)求錯(cuò)誤時(shí)處理的 方法faultEvent(event), 其中在 event 中 封 裝 了 錯(cuò) 誤 的 詳 細(xì) 信息 。resultHandle(event)請(qǐng)求成功是執(zhí)行的方法 , event 對(duì)象中封裝了請(qǐng)求成功后的詳細(xì)信息 , 包括返回結(jié)果。 xxxServlet 是服務(wù)器端相 中配置 servlet 的路徑。這樣客戶端就可以通過 HTTPService 對(duì)象和服務(wù)器進(jìn)行數(shù)據(jù)交戶了。系統(tǒng)主體架構(gòu)設(shè)計(jì)圖如 系統(tǒng)架構(gòu)設(shè)計(jì)圖。 圖 系統(tǒng)架構(gòu)設(shè)計(jì)圖 系統(tǒng)服務(wù)器端包中的類和作用 在上一章中已經(jīng)描述了系統(tǒng)服務(wù)器后臺(tái)所用到的主要包 有五個(gè) 分別為: 、 、 、 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) 、 。而視圖成的 Flex 代碼就相當(dāng)于 MVC里的 V 即視圖,而在這里的包 、和 里的類就是 M 即模型層,其他的業(yè)務(wù)類就是控制層。各個(gè)包和包里的類及它們的作用如表 系統(tǒng)業(yè)務(wù)包和包里的類所示: 表 系統(tǒng)業(yè)務(wù)包和包里的類 ( 客 戶端視圖層接口 ) ( 系統(tǒng)實(shí)體Bean,對(duì)應(yīng)數(shù)據(jù)庫(kù)里的表 ) (對(duì)各個(gè)數(shù)據(jù)庫(kù)表的操作) (映射客戶端視圖層的一些 mode里的類,用于封裝數(shù)據(jù),便宜客戶和服務(wù)器的數(shù)據(jù)交換) Servlet(系統(tǒng)客戶端 Serlvet接口,主要用于文件上傳 ) 平凡文學(xué)網(wǎng) 平凡文學(xué)網(wǎng) (服務(wù)器端系統(tǒng)工具類,有些用于處理一些業(yè)務(wù)邏輯 )