Android平臺英文單詞學(xué)習(xí)系統(tǒng)_第1頁
Android平臺英文單詞學(xué)習(xí)系統(tǒng)_第2頁
Android平臺英文單詞學(xué)習(xí)系統(tǒng)_第3頁
Android平臺英文單詞學(xué)習(xí)系統(tǒng)_第4頁
Android平臺英文單詞學(xué)習(xí)系統(tǒng)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

XXXXX本科生畢業(yè)設(shè)計(jì)(論文)TOC\o"1-5"\h\z學(xué)院(系):X專業(yè):X學(xué)生:X指導(dǎo)教師:X完成日期年月Android平臺英文單詞學(xué)習(xí)系統(tǒng)—測試和挑戰(zhàn)模塊的設(shè)計(jì)與實(shí)現(xiàn)EnglishWordsLearningSystemBasedonAndroidPlatformTheModulesDesignandRealizationofTestingandChallenging總計(jì):畢業(yè)設(shè)計(jì)(論文)26頁表格:1個插圖:10幅XXXX本科畢業(yè)設(shè)計(jì)(論文)Android平臺英文單詞學(xué)習(xí)系統(tǒng)—測試和挑戰(zhàn)模塊的設(shè)計(jì)與實(shí)現(xiàn)EnglishWordsLearningSystemBasedonAndroidPlatformTheModulesDesignandRealizationofTestingandChallenging學(xué)院(系):X專業(yè):X學(xué)生姓名:X學(xué)號:X指導(dǎo)教師(職稱):X評閱教師:X完成日期:XXXXXAndroid平臺英文單詞學(xué)習(xí)系統(tǒng)—測試和挑戰(zhàn)模塊的設(shè)計(jì)與實(shí)現(xiàn)軟件工程XX[摘要]Android手機(jī)操作系統(tǒng)是Google開發(fā)的基于Linux平臺的開源手機(jī)操作系統(tǒng),是一個對第三方軟件完全開放的平臺。開發(fā)者在為其開發(fā)程序時擁有更大的自由度,使得Android有著非常廣泛的開發(fā)群體。本英語學(xué)習(xí)系統(tǒng)基于Android平臺開發(fā),不僅實(shí)現(xiàn)英文單詞的翻譯結(jié)果、單詞讀音等功能,還實(shí)現(xiàn)單詞測試功能。將本系統(tǒng)安裝到Android手機(jī)里,使邊走邊學(xué)、隨時隨地學(xué)習(xí)和交互學(xué)習(xí)真正成為可能。[關(guān)鍵詞]Android;英文單詞;SQLite數(shù)據(jù)庫EnglishWordsLearningSystemBasedonAndroidPlatformTheModulesDesignandRealizationofTestingandChallengingSoftwareEngineeringMajorXXAbstract:TheAndroidmobilephoneoperatingsystemisanopensourcephoneOSdevelopedbyGooglebasedontheLinuxplatform,itisacompletelyopenplatformwhichisopentothethird-partysoftware.Developershavagreatefreedomwhendeveloping,Androidhasveryextensivedevelopmentpopulations.ThisEnglishwordslearningsystembasedontheAndroidplatform.Ithasthefunctionsofenglishwords'meaningsanditspronunciations,italsohasenglishwordstestingfunction.IfyouinstallthesystemintoAndroidmobilephone,youcanstudywhilewalking,studyingwheneverandwherever,andstudyinteractively.Keywords:Android;englishwords;SQLitedatabaseTOC\o"1-5"\h\z\o"CurrentDocument"1引言1\o"CurrentDocument"論文研究背景與意義1\o"CurrentDocument"1.2本課題研究內(nèi)容與目標(biāo)1\o"CurrentDocument"1.3手機(jī)應(yīng)用程序的特點(diǎn)2\o"CurrentDocument"2開發(fā)環(huán)境及相關(guān)技術(shù)的介紹2\o"CurrentDocument"Android簡介2Android的特點(diǎn)2\o"CurrentDocument"Android的系統(tǒng)構(gòu)架3\o"CurrentDocument"AndroidADT插件5\o"CurrentDocument"SQLite數(shù)據(jù)庫5SQLite數(shù)據(jù)庫的簡介5\o"CurrentDocument"SQLiteOpenHelper簡介6\o"CurrentDocument"TTS簡介6\o"CurrentDocument"2.4開發(fā)環(huán)境的搭配6\o"CurrentDocument"3系統(tǒng)分析8\o"CurrentDocument"3.1可行性分析83.1.1技術(shù)條件方面的可行性分析83.1.2市場因素方面的可行性分析83.1.3操作的可行性分析83.1.4經(jīng)濟(jì)可行性分析9\o"CurrentDocument"3.2用例圖91測試模塊的用例圖93.2.2挑戰(zhàn)模塊的用例圖9\o"CurrentDocument"3.3用例描述103.3.1測試模塊用例描述10\o"CurrentDocument"3.3.2挑戰(zhàn)模塊用例描述11\o"CurrentDocument"4系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)12\o"CurrentDocument"4.1系統(tǒng)模塊功能的設(shè)計(jì)與實(shí)現(xiàn)124.1.1系統(tǒng)功能模塊圖134.1.2單詞的朗讀功能的設(shè)計(jì)與實(shí)現(xiàn)134.1.3單詞中文意思和缺失單詞填寫功能的設(shè)計(jì)與實(shí)現(xiàn)144.1.4倒計(jì)時功能的設(shè)計(jì)與實(shí)現(xiàn)144.1.5重做功能的設(shè)計(jì)與實(shí)現(xiàn)15\o"CurrentDocument"4.2測試/挑戰(zhàn)模塊界面的設(shè)計(jì)與實(shí)現(xiàn)161測試模塊界面的設(shè)計(jì)與實(shí)現(xiàn)164.2.2挑戰(zhàn)模塊界面的設(shè)計(jì)與實(shí)現(xiàn)17\o"CurrentDocument"4.3數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)194.3.1數(shù)據(jù)庫的設(shè)計(jì)194.3.2數(shù)據(jù)庫的代碼實(shí)現(xiàn)194.3.3操作數(shù)據(jù)庫的方法205系統(tǒng)運(yùn)行與測試215.1測試的任務(wù)及目標(biāo)21\o"CurrentDocument"5.2測試方案22模塊測試225.2.2測試結(jié)果22\o"CurrentDocument"結(jié)束語24\o"CurrentDocument"參考文獻(xiàn)25\o"CurrentDocument"致謝26iii1引言隨著移動通信技術(shù)的快速發(fā)展,寬帶化、智能化、個性化、多媒體化、多功能化以及環(huán)?;瘜⑹鞘澜缫苿油ㄐ虐l(fā)展的新趨勢。其中,尤其以智能化最受各方的關(guān)注,它是世界移動通信發(fā)展的又一大趨勢。越來越多的手機(jī)擁有電腦的常用處理功能,如上網(wǎng)、視頻聊天、文檔處理等,其智能程度正不斷提高,在全球市場的占有率也不斷提高。在本章中,淺析了論文的背景和意義以及課題的內(nèi)容與目標(biāo),分析了手機(jī)應(yīng)用的一系列特點(diǎn)。1.1論文研究背景與意義如今的移動應(yīng)用開發(fā)產(chǎn)業(yè)讓人眼花繚亂,涉及到八大平臺,它們各有特點(diǎn),但不足之處也不少:比如Symbian系統(tǒng),它所采用的硬件配置較低,且各類機(jī)型采用的的處理器主頻較低,雖然系統(tǒng)可以使其獲得較高的處理效能,但是在多媒體、版本之間兼容性差等方面的表現(xiàn)依然不盡如人意。此外,iPhone蘋果的手機(jī)操作系統(tǒng),不支持Flash,沒有語音識別和語音撥號,在支持后臺運(yùn)行程序方面做得不足;微軟的WindowsMobile手機(jī)操作系統(tǒng),它對硬件要求較高,對不熟悉電腦的人來說操作較為復(fù)雜。Android手機(jī)操作系統(tǒng)是Google開發(fā)的基于Linux平臺的開源手機(jī)操作系統(tǒng)。GoogleAndroid智能手機(jī)平臺自從發(fā)布后空前成功,獲得了如HTC、摩托羅拉、三星和索愛等知名手機(jī)制造商的支持。它采用WebKit瀏覽器引擎,具備觸摸屏、高級圖形顯示和上網(wǎng)功能,用戶能夠在手機(jī)上查看電子郵件、視頻聊天、文檔處理等;與其他手機(jī)相比,它更強(qiáng)調(diào)搜索功能。除上述之外,它最震撼人心之處在于Android手機(jī)系統(tǒng)的開放性和服務(wù)免費(fèi)。作為一款開放源代碼軟件,Android向開發(fā)者開放,并免費(fèi)提供給手機(jī)廠商使用。Android手機(jī)操作系統(tǒng)是一個對第三方軟件完全開放的平臺,開發(fā)者在為其開發(fā)程序時擁有更大的自由度,突破了iPhone等只能添加為數(shù)不多的固定軟件的枷鎖,因此吸引了越來越多的用戶和開發(fā)者加入其陣營,其流行和普及的程度已經(jīng)逼近蘋果的iPhone手機(jī)平臺。在日前英語學(xué)習(xí)熱潮的大背景下,英語學(xué)習(xí)軟件充分發(fā)揮了移動通訊和互聯(lián)網(wǎng)的力量,使邊走邊學(xué)、隨時隨地學(xué)和交互學(xué)習(xí)真正成為可能,也使該類軟件的前景相當(dāng)看好。然而,目前那些非Android平臺開發(fā)的英文學(xué)習(xí)軟件僅僅提供了想要查詢的詞和句子的翻譯結(jié)果,這類軟件會智能發(fā)音,顯示單詞音標(biāo),單詞意思。功能過于簡單,使用起來也相當(dāng)繁瑣。1.2本課題研究內(nèi)容與目標(biāo)本課題采用面向?qū)ο蟮脑O(shè)計(jì),運(yùn)用Android、Java、SQLite數(shù)據(jù)庫等現(xiàn)有的技術(shù),設(shè)計(jì)開發(fā)一個基于Android的英文單詞學(xué)習(xí)系統(tǒng),該英文學(xué)習(xí)系統(tǒng)提供了想要查詢的英文單詞的翻譯結(jié)果、單詞讀音和意思等,而且還可以測試和挑戰(zhàn)所學(xué)過的單詞的掌握效果。總體來看,該系統(tǒng)能夠幫助用戶學(xué)習(xí)記憶英語,并且留有相關(guān)接口,便于以后擴(kuò)展。1.3手機(jī)應(yīng)用程序的特點(diǎn)對于手機(jī)程序來說,由于機(jī)能限制,手機(jī)上的程序應(yīng)該有以下幾個特點(diǎn):啟動快,占用內(nèi)存小;盡可能的反應(yīng)快;優(yōu)化手機(jī)鍵盤的操作;對流量進(jìn)行控制;對于商務(wù)應(yīng)用,手機(jī)程序是作為PC機(jī)程序的延伸,在沒有PC機(jī)的情況下處理各種事務(wù)的工具,應(yīng)該有強(qiáng)大的同步能力;對于個人應(yīng)用,手機(jī)程序應(yīng)該是各種Web應(yīng)用額便攜終端,能方便進(jìn)行手機(jī)與PC以及它們各自之間的無縫交流,純粹的只在手機(jī)網(wǎng)絡(luò)上的應(yīng)用潛力不大。2開發(fā)環(huán)境及相關(guān)技術(shù)的介紹當(dāng)前,我國一直把英語放在了重中之重的地位,各大高校更是一直在給“英語熱”持續(xù)加溫。四六級、托福、雅思、出國、考研等,一系列都得用英語做奠基石。在當(dāng)今計(jì)算機(jī)技術(shù)飛速發(fā)展,信息爆炸的時代,應(yīng)該如何看待英語學(xué)習(xí)?又如何進(jìn)行開發(fā)和應(yīng)用呢?本章中介紹了實(shí)現(xiàn)英文學(xué)習(xí)系統(tǒng)所需要的一些技術(shù)以及開發(fā)環(huán)境的搭配。Android簡介Android一詞的本義指“機(jī)器人”,它是Google于2007年11月5日宣布的基于Linux平臺的開源手機(jī)操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件[1]Android的特點(diǎn)Android的特點(diǎn)突出,靈活易用。它在界面開發(fā)中,應(yīng)用構(gòu)成、布局管理以及其生命周期都體現(xiàn)出超強(qiáng)的優(yōu)勢。Android的主要特點(diǎn)有:應(yīng)用程序無界限。Android上的應(yīng)用程序可以通過標(biāo)準(zhǔn)API訪問核心移動設(shè)備功能。通過互聯(lián)網(wǎng),應(yīng)用程序可以聲明它們的功能可供其他應(yīng)用程序使用。2.開放性。Google與開放手機(jī)聯(lián)盟合作并開發(fā)Android,通過與運(yùn)營商、設(shè)備制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望通過建立標(biāo)準(zhǔn)化、開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個開放式的生態(tài)系統(tǒng)。應(yīng)用程序是在平臺允許的條件下創(chuàng)建的。移動設(shè)備上的應(yīng)用程序可以被替換或擴(kuò)展,即使是撥號程序或主屏幕這樣的核心組件。應(yīng)用程序可以并行運(yùn)行。Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其

中并行運(yùn)行。在后臺運(yùn)行時,應(yīng)用程序可以生成通知以引起注意。應(yīng)用程序可以輕松的嵌入網(wǎng)絡(luò)。應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過WebView顯示網(wǎng)絡(luò)內(nèi)容⑶。2.1.2Android的系統(tǒng)構(gòu)架Android的體系結(jié)構(gòu)總共分為4層,分別是應(yīng)用層、應(yīng)用框架層、系統(tǒng)運(yùn)行層和Linux內(nèi)核層[1]。Android系統(tǒng)架構(gòu)如圖2-1所示:HomeContactsPhoneHomeContactsPhoneBrowser…ApplicationApplicationFrameworkActivityManagerWindowManagerContentProviderViewSystemNotificationManagerPackageManagerTelephonyManagerResourceManagerLocationManagerXMPPServiceLibrariesSurfaceManagerMediaFrameworkOpenGLIESFreeTypeSGLSSLAndroidRuntimeSurfaceManagerMediaFrameworkOpenGLIESFreeTypeSGLSSLAndroidRuntimeCoreLibrariesDalvikVMDisplayDriverCameraDriverBluetoothDriverFlashMemDriverBinder(IPC)DriverUSBDriverKeypadDriverViFiDriverAduioDriversPowerManagemen圖2-1Android系統(tǒng)架構(gòu)圖應(yīng)用層應(yīng)用是基于Java語言編寫的,能夠運(yùn)行在虛擬機(jī)上的程序,即圖中最上層的藍(lán)色部分。Google最早就在Android系統(tǒng)中捆綁了一些核心應(yīng)用程序,比如e-mail客戶端、SMS短消息程序、日歷、地圖、瀏覽器等等。應(yīng)用框架層應(yīng)用框架層就是編寫Google發(fā)布的核心應(yīng)用時所需要的API框架,開發(fā)人員可以使用這些框架來開發(fā)應(yīng)用,雖然這樣簡化了程序開發(fā)的架構(gòu)設(shè)計(jì),但是必須遵守其框架的開發(fā)原則。其主要內(nèi)容有:絢麗多彩而又可擴(kuò)展的視圖(Views):可以用來構(gòu)建應(yīng)用程序界面,它包括列表(lists)、網(wǎng)格(grids)、文本框(textboxes)、按鈕(buttons)等。內(nèi)容提供器(ContentProviders):將應(yīng)用數(shù)據(jù)與其他的應(yīng)用共享。資源管理器(ResourceManager):提供非代碼資源的訪問,如本地字符串、圖形和布局文件(layoutfiles)o通知管理器(NotificationManager):應(yīng)用可以在狀態(tài)欄中顯示自定義的提示信息?;顒庸芾砥?ActivityManager):用來管理應(yīng)用程序的生命周期并且提供常用的導(dǎo)航退回功能。窗口管理器(WindowManager):管理所有的窗口程序。包管理器(PackageManager):Android系統(tǒng)自身內(nèi)部的程序管理。系統(tǒng)運(yùn)行庫(C/C++庫以及Android運(yùn)行庫)層在使用Android應(yīng)用框架時,Android系統(tǒng)會通過一些C/C++庫來支持需要使用的各個組件,目的是為了使其能更好地為開發(fā)者服務(wù)。SQLite:用C語言編寫的開源嵌入式關(guān)系數(shù)據(jù)庫。Bionic系統(tǒng)C庫:C語言標(biāo)準(zhǔn)庫,系統(tǒng)最底層的庫,C庫是通過Linux系統(tǒng)來調(diào)用的。多媒體庫(MediaFrameword):Android系統(tǒng)內(nèi)的多媒體庫,是基于PacketVideoOpenCore,該庫支持多類常用的音頻、視頻格式的回放和錄制以及一些圖片,比如:MPEG4、AAC、AMR、JPG、MP3、PNG等。SGL:2D圖形引擎庫。OpenGLES1.0:支持3D效果。Webkit:Web瀏覽器引擎。SSL:位于TVP/IP協(xié)議和各種應(yīng)用層協(xié)議之間,是為數(shù)據(jù)通訊提供支持的。Linux內(nèi)核層Android的核心系統(tǒng)服務(wù)都是基于Linux2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型等都是基于Linux2.6內(nèi)核。Linux內(nèi)核同時也作為硬件和軟件棧之間的抽象層。在Android中,更多的是需要一些與移動設(shè)備相關(guān)的驅(qū)動程序,主要的驅(qū)動如下:顯示驅(qū)動(DisplayDriver):在Linux的幀緩沖(FrameBuffer)的基礎(chǔ)上開發(fā)的驅(qū)動。鍵盤驅(qū)動(KeyBoardDriver):作為輸入設(shè)備的鍵盤驅(qū)動。Flash內(nèi)存驅(qū)動(FlashMemoryDriver):基于MTD的Flash驅(qū)動程序。照相機(jī)驅(qū)動(CameraDriver):常見的是基于Linux的v4l2(VideoforLinux)驅(qū)動。音頻驅(qū)動(AudioDriver):常見的是基于ALSA(AdvancedLinuxSoundArchitecture)的高級Linux聲音體系驅(qū)動。藍(lán)牙驅(qū)動(BluetoothDriver):基于IEEE802.15.1標(biāo)準(zhǔn)的無線傳輸技術(shù)。WiFi驅(qū)動(CameraDrive):基于IEEE802.11標(biāo)準(zhǔn)的驅(qū)動程序。BinderIPC驅(qū)動:這是一個特殊的Android驅(qū)動程序,具有單獨(dú)的設(shè)備節(jié)點(diǎn),提供進(jìn)程之間的通訊。PowerManagement(能源管理):例如電池的電量等。2.1.3AndroidADT插件ADT(AndroidDevelopmentTools)為Android開發(fā)工具的簡稱,是在強(qiáng)大的、集成的EclipseIDE環(huán)境中構(gòu)建Android應(yīng)用程序的插件。ADT擴(kuò)展了Eclipse的功能,快速建立新的Android項(xiàng)目,創(chuàng)建一個應(yīng)用程序的用戶界面,加上Android框架的API組件、調(diào)試應(yīng)用程序使用AndroidSDK工具,以便APK分發(fā)給應(yīng)用程序[9]2.2SQLite數(shù)據(jù)庫2.2.1SQLite數(shù)據(jù)庫的簡介SQLite是用C語言編寫的一款輕型的開源關(guān)系數(shù)據(jù)庫,遵循ACID,它的設(shè)計(jì)目標(biāo)是嵌入式的。目前,已經(jīng)在很多嵌入式產(chǎn)品中使用到它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等常用的操作系統(tǒng),同時還能夠與很多程序語言相結(jié)合,比如Tcl、C#、PHP、Java等,還有ODBC接口,與Mysql、PostgreSQL這兩款世界著名的開源數(shù)據(jù)庫管理系統(tǒng)相比,它的處理速度更快。SQLite具有如下特征:輕量級。因?yàn)镾QLite是進(jìn)程內(nèi)的數(shù)據(jù)庫引擎,所以不存在數(shù)據(jù)庫的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個動態(tài)庫,就可以使用它的全部功能。不但如此,動態(tài)庫的尺寸也相當(dāng)?shù)男?。?dú)立性°SQLite數(shù)據(jù)庫的核心引擎自身不依賴于第三方軟件,使用時不需要安裝。所以在部署的時候省去了不少的麻煩。隔離性。SQLite數(shù)據(jù)庫中的所有信息(比如表、視圖、觸發(fā)器等)都包含在一個文件內(nèi),方便管理和維護(hù)??缙脚_。SQLite數(shù)據(jù)庫能夠支持大部分的操作系統(tǒng),除了電腦上使用的操作系統(tǒng)之外,也支持很多手機(jī)操作系統(tǒng)。多語言接口。SQLite數(shù)據(jù)庫支持很多語言編程接口,比如C/C++、Java等,獲得很多開發(fā)者的歡迎。安全性。SQLite數(shù)據(jù)庫通過數(shù)據(jù)庫級上的獨(dú)占性和共享鎖來實(shí)現(xiàn)獨(dú)立事物處理。多個進(jìn)程可以在同一時間同一數(shù)據(jù)庫讀取數(shù)據(jù),但是只有一個可以寫入數(shù)據(jù)⑴。2.2.2SQLiteOpenHelper簡介在編寫數(shù)據(jù)庫應(yīng)用軟件時,需要考慮開發(fā)的軟件可能會安裝在很多用戶的手機(jī)上,如果應(yīng)用使用到了SQLite數(shù)據(jù)庫,必須在用戶初次使用軟件時創(chuàng)建出應(yīng)用使用到的數(shù)據(jù)庫表結(jié)構(gòu)及添加一些初始化記錄,另外在軟件升級的時候,需要對數(shù)據(jù)表結(jié)構(gòu)進(jìn)行更新。那么,如何才能實(shí)現(xiàn)在用戶初次使用或升級軟件時自動在用戶的手機(jī)上創(chuàng)建出應(yīng)用需要的數(shù)據(jù)庫表?總不能在每個需要安裝此軟件的手機(jī)上通過手工方式創(chuàng)建數(shù)據(jù)庫表?因?yàn)檫@種需求是每個數(shù)據(jù)庫應(yīng)用都要面臨的,所以在Android系統(tǒng),提供了一個名為SQLiteOpenHelper的抽象類,必須繼承它才能使用,它是通過對數(shù)據(jù)庫版本進(jìn)行管理來實(shí)現(xiàn)前面提出的需求⑷。2.3TTS簡介TTS是TextToSpeech的縮寫,即“從文本到語音”是人機(jī)對話的一部分,讓機(jī)器能夠說話。TTS語音合成技術(shù)即將覆蓋國標(biāo)一、二級漢字,具有英文接口,自動識別中英文,支持中英文混讀?;诶显~匯應(yīng)用的TTS一般用純軟件實(shí)現(xiàn),主要包括以下幾部分:文本分析。對輸入文本進(jìn)行語言學(xué)分析,逐句進(jìn)行詞匯的、語法的和語義的分析,以確定句子的低層結(jié)構(gòu)和每個字的音素的組成,包括文本的斷句、字詞切分、數(shù)字的處理、縮略語的處理等。語音合成。把處理好的文本所對應(yīng)的單字或短語從語音合成庫中提取,把語言學(xué)描述轉(zhuǎn)化成言語波形。韻律處理。合成音質(zhì)(QualityofSyntheticSpeech)是指語音合成系統(tǒng)所輸出的語音質(zhì)量,一般從清晰度、自然度和連貫性等方面進(jìn)行主觀評價。清晰度是正確聽辨有意義詞語的百分率;自然度用來評價合成語音音質(zhì)是否接近人說話的聲音,合成詞語的語調(diào)是否自然;連貫性用來評價合成語句是否流暢⑺。2.4開發(fā)環(huán)境的搭配1.安裝JDK。下載JDK6Update20,雙擊jdk-6u20-windows-i586.exe進(jìn)行安裝。安裝完成后,在命令行中輸入“javaversion”,若出現(xiàn)以下信息表示安裝成功。javaversion"1.6.0_20"Java(TM)SERuntimeEnvironment(build1.6.0_20-b02)JavaHotSpot(TM)ClientVM(build16.3-b01,mixedmode,sharing)安裝AndroidSDK。下載android-sdk_r06-windows.zipo解壓android-sdk_r06-windows.zip到你想安裝AndroidSDK的目錄。在環(huán)境變量中的PATH中加入D:\android-sdk-windows\tools。由于google改變了下載安裝方法,現(xiàn)在必須在線實(shí)時地從google網(wǎng)站上下載需要安裝的文件來進(jìn)行在線安裝。雙D:\android-sdk-windows\SDKSetup.exe運(yùn)行AndroidSDKandAVDManagero在安裝列表選擇要安裝的apis版本、usb驅(qū)動、SDK例子程序和SDK文檔等。創(chuàng)建一個新的AndroidVirtualDevice(AVD)。下載并安裝Eclipse(/downlods)。安裝Eclipse的AndroidADT插件。通過Eclipse自身的update功能進(jìn)行下載:啟動Eclipse,選擇[Help]>[SoftUpdates]>[FindandInstall?],這時窗口中新增了“/android/eclipse/”項(xiàng),選中該項(xiàng),點(diǎn)擊[Install…]按鍵即可下載。配置Eclipse和AndroidADT插件。設(shè)置Eclipse的JavaJDK屬性設(shè)置。選擇[Windows]>[Preferences...]打開編輯屬性窗口;選擇Java屬性面板;選擇Java編譯器為6.0;點(diǎn)擊Apply和OK。進(jìn)行AndroidSDK設(shè)置。選擇[Windows]>[Preferences.]打開編輯屬性窗口;選擇Android屬性面板;加入AndroidSDK的目錄(點(diǎn)擊[Browse...]進(jìn)行選擇目錄)。測試開發(fā)環(huán)境。搭建好開發(fā)環(huán)境之后,創(chuàng)建一個HelloWorld工程,運(yùn)行程序。效果如圖2-2所示:3系統(tǒng)分析本章介紹了該英文學(xué)習(xí)系統(tǒng)各個模塊的用例圖以及用例分析,系統(tǒng)的可行性分析。測試模塊:用戶可以對單詞的朗讀、中文意思、缺失單詞、重做功能進(jìn)行操作。挑戰(zhàn)模塊:用戶可以對單詞的朗讀、中文意思、缺失單詞、重做、倒計(jì)時等功能進(jìn)行操作。3.1可行性分析軟件工程項(xiàng)目大多是復(fù)雜的大型系統(tǒng)工程,在沒有明確問題是否有行之有效的解決辦法之前,不三思而行,有可能造成時間、人力、物力、財(cái)力等的巨大浪費(fèi)??尚行苑治龅哪康脑谟谝宰钚〉拇鷥r,在盡可能短的時間內(nèi)得出軟件項(xiàng)目是否能夠開發(fā)、是否值得開發(fā)的結(jié)論。3.1.1技術(shù)條件方面的可行性分析數(shù)據(jù)庫方面:選用SQLite數(shù)據(jù)庫。SQLite是一款輕型的數(shù)據(jù)庫,它被大量的應(yīng)用在嵌入式領(lǐng)域。系統(tǒng)整體方面:采用Java編碼,Java語言具有簡單、面向?qū)ο?、分布式、解釋型、可靠、安全、平臺無關(guān)、可移植、高性能、多線程、動態(tài)性等特點(diǎn)。采用Android提供的控件進(jìn)行相關(guān)控件的編寫與部署。使用工具方面:利用Eclipse開發(fā)工具,結(jié)合Android模擬器,采用Java編碼。操作系統(tǒng)方面:使用Windows7操作系統(tǒng)。3.1.2市場因素方面的可行性分析秉承用戶至上的思想,本軟件采用了與用戶交互的方式,由用戶往數(shù)據(jù)庫中存儲數(shù)據(jù),便于數(shù)據(jù)的隨時更新。該軟件還可以放入用戶的手機(jī)中,更方便用戶的使用,大大的提高了學(xué)習(xí)英語的效果和激情。測試模塊是軟件的一大特色,測試時,所選用的單詞不按一定的順序,完全是隨機(jī)從數(shù)據(jù)庫中讀取。目前市場上學(xué)習(xí)英語的軟件非常多,但是大多數(shù)都是在電腦上運(yùn)行使用,不方便用戶隨時隨地的學(xué)習(xí)。少數(shù)的軟件能夠在手機(jī)上運(yùn)行,但是功能單一,沒有擴(kuò)展功能,用戶不能往數(shù)據(jù)庫里面添加數(shù)據(jù),所以使本軟件有很大的市場前景。3.1.3操作的可行性分析本系統(tǒng)采用基于手機(jī)的圖形用戶界面,而該系統(tǒng)是大家熟悉的Android操作系統(tǒng),功能操作是大家常用的手機(jī)鍵盤,對于那些有手機(jī)的用戶可以輕松上手。整個英文學(xué)習(xí)系統(tǒng)采用友好的交互界面,簡潔明了,不需要對數(shù)據(jù)庫進(jìn)行深入的了解。

3.1.4經(jīng)濟(jì)可行性分析該系統(tǒng)帶來的經(jīng)濟(jì)效益明顯,最主要的是該系統(tǒng)是免費(fèi)的,可以通過網(wǎng)絡(luò)在網(wǎng)上下載安裝到手機(jī)上。因?yàn)锳ndroid是一個開放的系統(tǒng),開發(fā)一個軟件應(yīng)用開發(fā)人員不需要任何費(fèi)用。不限制該系統(tǒng)的任何功能,免費(fèi)使用,靠廣告賺錢。只要到某些網(wǎng)站上,下載一個廣告接口開發(fā)包,嵌入到軟件里,然后只要有人下載使用該軟件,就能賺到廣告費(fèi)。3.2用例圖3.2.1測試模塊的用例圖3.3用例描述3.3.1測試模塊用例描述單詞朗讀用例描述用例名稱:單詞的朗讀參與者:用戶簡要說明:用戶在點(diǎn)擊朗讀按鈕時,能夠把相應(yīng)英文單詞的讀音讀出來。前置條件:用戶必須進(jìn)入主菜單界面才能進(jìn)入該模塊?;臼录鳎河脩粼谥鞑藛谓缑嫔线x擇“測試”按鈕時,用例開始。當(dāng)進(jìn)入測試頁面后,用戶點(diǎn)擊“朗讀”按鈕,如果該讀音與相應(yīng)單詞符合,則可以進(jìn)入測試階段,該用例結(jié)束。異常事件流:如果點(diǎn)擊“朗讀”按鈕后沒響應(yīng)或者發(fā)音與該單詞不符合,則點(diǎn)擊“返回”按鈕,退回到主菜單界面,用例結(jié)束。中文意思用例描述用例名稱:英文單詞的中文意思參與者:用戶簡要說明:顯示出該英文單詞的中文意思。前置條件:用戶必須通過主菜單進(jìn)入測試頁面才能進(jìn)行查看中文意思?;臼录鳎河脩敉ㄟ^主菜單的“測試”按鈕進(jìn)入測試頁面,用例開始。在測試頁面可以看到某個測試單詞的中文意思后,進(jìn)入測試階段,該用例結(jié)束。異常事件流:在測試頁面無法看到中文意思,點(diǎn)擊“返回”按鈕返回到主菜單界面,重新點(diǎn)擊進(jìn)行測試,用例結(jié)束。缺失單詞填寫用例描述用例名稱:缺失英文單詞的填寫參與者:用戶簡要說明:在輸入框內(nèi)輸入英文單詞缺失部分的字母。前置條件:用戶必須成功進(jìn)入測試頁面,并且有完整的中文意思和朗讀?;臼录鳎河脩暨M(jìn)入測試界面后,并在測試界面的編輯框內(nèi)填入該測試單詞的隱藏部分的字母后,用例開始。點(diǎn)擊“提交”按鈕后,如果所填的字母與該單詞隱藏部分的字母相符合,則自動進(jìn)入下個單詞的測試,用例結(jié)束。異常事件流:點(diǎn)擊“提交”按鈕后,如果系統(tǒng)檢測到所填字母與該單詞隱藏部分字母不符合,則彈出一個對話框提示用戶“測試失敗,請重試”,選擇“重做”還是進(jìn)行“下一個”單詞測試,用例結(jié)束。重做用例描述用例名稱:英文單詞重做參與者:用戶簡要說明:如果填寫的英文單詞隱藏字母不正確,則進(jìn)行重做。前置條件:用戶在進(jìn)行測試后選擇是否重做?;臼录鳎河脩粼邳c(diǎn)擊“提交”按鈕后,用例開始。如果答案錯誤,選擇“重做”再一次進(jìn)行對這單詞進(jìn)行測試,答案正確后進(jìn)行下一個單詞的測試,用例結(jié)束。異常事件流:如果點(diǎn)擊“重做”,系統(tǒng)未響應(yīng),則提示重做失敗,用例結(jié)束。3.3.2挑戰(zhàn)模塊用例描述單詞朗讀用例描述用例名稱:單詞的朗讀參與者:用戶簡要說明:用戶在點(diǎn)擊朗讀按鈕時,能夠把相應(yīng)英文單詞的讀音讀出來。前置條件:用戶必須進(jìn)入主菜單界面才能進(jìn)入該模塊?;臼录鳎河脩粼谥鞑藛谓缑嫔线x擇“挑戰(zhàn)”按鈕時,用例開始。當(dāng)進(jìn)入挑戰(zhàn)頁面后,用戶點(diǎn)擊“朗讀”按鈕,如果該讀音與相應(yīng)單詞符合,則可以進(jìn)入挑戰(zhàn)階段,該用例結(jié)束。異常事件流:如果點(diǎn)擊“朗讀”按鈕后沒響應(yīng)或者發(fā)音與該單詞不符合,則點(diǎn)擊“返回”按鈕,退回到主菜單界面,用例結(jié)束。中文意思用例描述用例名稱:英文單詞的中文意思參與者:用戶簡要說明:顯示出該英文單詞的中文意思。前置條件:用戶必須通過主菜單進(jìn)入挑戰(zhàn)頁面才能進(jìn)行查看中文意思。基本事件流:用戶通過主菜單的“挑戰(zhàn)”按鈕進(jìn)入測試頁面,用例開始。在挑戰(zhàn)頁面可以看到某個挑戰(zhàn)單詞的中文意思后,進(jìn)入挑戰(zhàn)階段,該用例結(jié)束。異常事件流:在挑戰(zhàn)頁面無法看到中文意思,點(diǎn)擊“返回”按鈕返回到主菜單界面,重新點(diǎn)擊進(jìn)行挑戰(zhàn),用例結(jié)束。缺失單詞填寫用例描述用例名稱:缺失英文單詞的填寫參與者:用戶簡要說明:在輸入框內(nèi)輸入英文單詞缺失部分的字母。前置條件:用戶必須成功進(jìn)入挑戰(zhàn)頁面,并且有完整的中文意思和朗讀?;臼录鳎河脩暨M(jìn)入挑戰(zhàn)界面后,并在測試界面的編輯框內(nèi)填入該挑戰(zhàn)單詞的隱藏部分的字母后,用例開始。點(diǎn)擊“挑戰(zhàn)”按鈕后,如果所填的字母與該單詞隱藏部分的字母相符合,則自動進(jìn)入下個單詞的挑戰(zhàn),用例結(jié)束。異常事件流:點(diǎn)擊“提交”按鈕后,如果系統(tǒng)檢測到所填字母與該單詞隱藏部分字母不符合,則彈出一個對話框提示用戶“測試失敗,請重試”,選擇“重做”還是進(jìn)行“下一個,,單詞挑戰(zhàn),用例結(jié)束。重做用例描述用例名稱:英文單詞重做參與者:用戶簡要說明:如果填寫的英文單詞隱藏字母不正確,則進(jìn)行重做。前置條件:用戶在進(jìn)行挑戰(zhàn)后選擇是否重做。基本事件流:用戶在點(diǎn)擊“提交”按鈕后,用例開始。如果答案錯誤,選擇“重做”再一次進(jìn)行對這單詞進(jìn)行挑戰(zhàn),答案正確后進(jìn)行下一個單詞的挑戰(zhàn),用例結(jié)束。異常事件流:如果點(diǎn)擊“重做”,系統(tǒng)未響應(yīng),則提示重做失敗,用例結(jié)束。倒計(jì)時用例描述用例名稱:倒計(jì)時參與者:用戶簡要說明:用戶在挑戰(zhàn)每一個英文單詞的時候都有時間限制。前置條件:用戶必須進(jìn)入挑戰(zhàn)頁面,并且開始對某個單詞挑戰(zhàn)?;臼录鳎河脩糸_始對某個單詞進(jìn)行挑戰(zhàn)的時候,倒計(jì)時自動啟動,用例開始。在規(guī)定事件內(nèi)提交該單詞隱藏字母答案后,如果答案正確,則進(jìn)行下一個單詞的挑戰(zhàn),用例結(jié)束。異常事件流:如果答案錯誤,選擇重做后,倒計(jì)時則重新開始,在規(guī)定時間內(nèi)提交正確答案,進(jìn)行下一個單詞挑戰(zhàn),用例結(jié)束[8]4系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)詳細(xì)設(shè)計(jì)階段,要為每個模塊進(jìn)行詳細(xì)的算法設(shè)計(jì),用某種圖形、表格等工具將每個模塊處理過程的詳細(xì)算法描述出來;為模塊內(nèi)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì),對于需求分析、概要設(shè)計(jì)確定的概念行的數(shù)據(jù)類型進(jìn)行確切的定義;對數(shù)據(jù)結(jié)構(gòu)進(jìn)行物理設(shè)計(jì),確定數(shù)據(jù)庫的物理結(jié)構(gòu)。4.1系統(tǒng)模塊功能的設(shè)計(jì)與實(shí)現(xiàn)4.1.1系統(tǒng)功能模塊圖英文單詞學(xué)習(xí)系統(tǒng)圖4-1系統(tǒng)功能模塊圖單詞朗讀功能:把英文單詞的英文發(fā)音朗讀出來。中文意思功能:顯示相應(yīng)英文單詞的中文翻譯。缺失單詞功能:隨機(jī)確定英文單詞隱藏字母的位置,把該位置的字母用下劃線代替。倒計(jì)時功能:限制用戶操作單詞的時間,時間結(jié)束停止用戶對該單詞的操作。重做功能:重新對該單詞進(jìn)行操作。4.1.2單詞的朗讀功能的設(shè)計(jì)與實(shí)現(xiàn)Android自身提供系統(tǒng)所需要朗讀的資源進(jìn)行智能識別并且進(jìn)行朗讀,所以不需要在數(shù)據(jù)庫單獨(dú)設(shè)計(jì)一列存儲音頻文件。當(dāng)用戶點(diǎn)擊“朗讀”按鈕時,系統(tǒng)智能的對輸入框內(nèi)的單詞進(jìn)行朗讀。具體實(shí)現(xiàn)的主要實(shí)現(xiàn)代碼如下:publicvoidonInit(intstatus){//TTSEngine初始化完成if(status==TextToSpeech.SUCCESS){intresult=mTts.setLanguage(Locale.US);//設(shè)置發(fā)音語言if(result==TextToSpeech.LANG_MISSING_DATA||result==TextToSpeech.LANG_NOT_SUPPORTED)//判斷語言是否可用{Log.v(TAG,"Languageisnotavailable");speak_btn.setEnabled(false);}else{mTts.speak("Thisisanexampleofspeechsynthesis.",TextToSpeech.QUEUE_ADD,null);speak_btn.setEnabled(true);}}4.1.3單詞中文意思和缺失單詞填寫功能的設(shè)計(jì)與實(shí)現(xiàn)在測試/挑戰(zhàn)階段,用戶可以根據(jù)單詞的讀音或者中文意思來判斷輸入框內(nèi)應(yīng)該填入單詞缺失部分的字母。首先通過loadDate方法對WebView控件添加單詞的中文意思,在控件上顯示出來。實(shí)現(xiàn)單詞隨機(jī)字母隱藏方法:首先獲取一個顯示該單詞的TextView控件,然后用randomIndex變量獲取這個單詞隨機(jī)隱藏的那個字母的下標(biāo)位置,確定該下標(biāo)的位置是通過用隨機(jī)數(shù)對單詞長度進(jìn)行求余,用求余結(jié)果確定下標(biāo)位置,用_one_char_word變量代表該字母,再用下劃線代替該字母。具體實(shí)現(xiàn)的主要實(shí)現(xiàn)代碼如下:privatevoidshowWordAndMean(){word_TV=(TextView)this.findViewById(R.id.word_TV);finalWebViewtranslate_WV=(WebView)this.findViewById(R.id.translate_means_WV);Stringtemp_word_name=wordList.get(curWordIndex).getWord_name();//單詞中的某一個字母隱藏randomIndex該字母的下標(biāo)randomIndex=newRandom().nextInt()%temp_word_name.length();//_代表的字母_one_char_word=temp_word_name.charAt(randomIndex);word_TV.setText(temp_word_name.replaceFirst(_one_char_word+"","_"));translate_WV.loadData(wordList.get(curWordIndex).getWord_mean(),"text/html","UTF-8");this.restartTimer(timer);4.1.4倒計(jì)時功能的設(shè)計(jì)與實(shí)現(xiàn)本系統(tǒng)未使用傳統(tǒng)的進(jìn)度條來實(shí)現(xiàn)倒計(jì)時功能,而是用更新圖片的方式來實(shí)現(xiàn),圖片內(nèi)容是數(shù)字0-9,這樣效果更明顯、更直觀。當(dāng)用戶挑戰(zhàn)時,在對每個單詞進(jìn)行挑戰(zhàn)時都有時間規(guī)定,如果未在規(guī)定時間內(nèi)提交答案,則自動跳轉(zhuǎn)至下一個單詞進(jìn)行挑戰(zhàn);在規(guī)定的時間內(nèi)提交答案,則倒計(jì)時停止圖片的更新。在進(jìn)行下一個單詞挑戰(zhàn)時,初始化倒計(jì)時并重新啟動倒計(jì)時。具體實(shí)現(xiàn)的主要實(shí)現(xiàn)代碼如下:重新開始計(jì)時器:privatevoidrestartTimer(Timertimer){timer.schedule(newTimerTask(){publicvoidrun(){if(curIndex<0){this.cancel();}mHandler.sendEmptyMessage(UPDATE_IMAGE);--curIndex;}},0,1);}更新倒計(jì)時:publicvoidhandleMessage(Messagemsg){//更新倒計(jì)時時間if(msg.what==UPDATE_IMAGE){if(curIndex==0){//直接跳到下一個ChallengeModuleActivity.this.showWordAndMean();〃記錄為錯誤}else{time_IV.setImageResource(SheduleTime[curIndex]);}}4.1.5重做功能的設(shè)計(jì)與實(shí)現(xiàn)用戶在對某個單詞進(jìn)行測試/挑戰(zhàn)的時候,如果在文本框內(nèi)輸入答案后,點(diǎn)擊“提交”按鈕后,如果系統(tǒng)檢測到提交的答案與_one_char_word代表的字母不相符,則自動彈出一個對話框,讓用戶選擇“重做”還是進(jìn)行“下一個”單詞的測試挑戰(zhàn)。選擇“重做”,此時指向該單詞的游標(biāo)已經(jīng)指向下一個單詞了,因此需要使指向wordList單詞列表中的單詞的游標(biāo)curWordIndex自減1,重新指向該單詞,讓用戶重新進(jìn)行這個單詞的測試/挑戰(zhàn)。選擇“下一個”則自動調(diào)用next()方法,進(jìn)行下一個單詞的測試/挑戰(zhàn)。具體實(shí)現(xiàn)主要實(shí)現(xiàn)代碼如下:newAlertDialog.Builder(ChallengeModuleActivity.this).setTitle(R.string.please_choose).setNegativeButton(R.string.next,newOnClickListener(){//選擇下一個單詞測試

publicvoidonClick(DialogInterfacedialog,intwhich){next();}}).setPositiveButton(R.string.again,newOnClickListener(){//選擇重新測試publicvoidonClick(DialogInterfacedialog,intwhich){curWordIndex--;showWordAndMean();}}).create();}重試功能效果如圖4-2、重試功能效果如圖4-2、圖4-3所示:圖4-2(測試)重做圖4-3(挑戰(zhàn))重做4.2測試/挑戰(zhàn)模塊界面的設(shè)計(jì)與實(shí)現(xiàn)Android的應(yīng)用程序界面通常使用View和ViewGroup控件,部署XML文件來進(jìn)行設(shè)計(jì)。4.2.1測試模塊界面的設(shè)計(jì)與實(shí)現(xiàn)用戶在主菜單界面點(diǎn)擊“測試”按鈕后進(jìn)入測試頁面進(jìn)行單詞的測試。在測試頁面設(shè)計(jì)了一個文本編輯框和四個按鈕,文本編輯框提供用戶輸入測試單詞隱藏部分的字母,四個按鈕的主要功能是單詞讀音,退出測試頁面進(jìn)入主菜單,檢測答案是否正確,進(jìn)行下一個單詞的測試。界面的主要控件實(shí)現(xiàn)代碼如下:<LinearLayoutxmlns:android="/apk/res/android”android:layout_width="fill_parent"android:layout_height="fill_parent”android:orientation="vertical"><TextViewandroid:id="@+id/word_TV"android:gravity="center_horizontal”android:layout_width="fill_parent"android:layout_height="wrap_content"></TextView><Buttonandroid:text="@string/next"android:id="@+id/next_btn”android:layout_width="wrap_content”android:layout_height="wrap_content"></Button></LinearLayout>測試界面效果如圖4-4所示:4.2.2挑戰(zhàn)模塊界面的設(shè)計(jì)與實(shí)現(xiàn)用戶在主菜單界面點(diǎn)擊“挑戰(zhàn)”按鈕后進(jìn)入挑戰(zhàn)頁面進(jìn)行單詞的挑戰(zhàn)。在挑戰(zhàn)頁面設(shè)計(jì)了一個文本編輯框、視圖和四個按鈕,文本編輯框提供用戶輸入測試單詞隱藏部分的字母,視圖提供倒計(jì)時圖片的切換顯示,四個按鈕的主要功能是單詞讀音,退出挑戰(zhàn)頁面進(jìn)入主菜單,檢測答案是否正確,進(jìn)行下一個單詞的挑戰(zhàn)。該界面的主要控件實(shí)現(xiàn)代碼如下:<LinearLayoutxmlns:android="/apk/res/android”android:layout_width="fill_parent"android:layout_height="fill_parent”android:orientation="vertical"><LinearLayoutandroid:gravity="right”android:layout_width="fill_parent"android:layout_height="wrap_content"><ImageViewandroid:layout_width="wrap_content”android:layout_height="wrap_content"android:scaleType="fitXY”android:maxWidth="48dip"android:maxHeight="48dip"android:src="@drawable/nine”android:id="@+id/time_IV”/></LinearLayout></LinearLayout>挑戰(zhàn)界面效果如圖4-5所示:4.3數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)4.3.1數(shù)據(jù)庫的設(shè)計(jì)根據(jù)需求分析和用例分析,創(chuàng)建生詞本數(shù)據(jù)庫表(words)o生詞表包括編號、英文單詞、中文意思、系統(tǒng)時間。生詞本的數(shù)據(jù)字典如表4-1所示:表4-1生詞本表項(xiàng)目字段名類型與寬度是否主鍵是否為空說明編號Word_idnumber是否自動編號英文單詞Word_nameVarchar(50)否否中文意思Word_meanVarchar(50)否否系統(tǒng)時間Word_timeVarchar(50)否否系統(tǒng)時間表中字段的含義:編號:單詞的ID,生詞本表的主鍵,唯一的標(biāo)識一個英文單詞。英文單詞:英語單詞。中文意思:英文單詞的中文翻譯。系統(tǒng)時間:單詞導(dǎo)入數(shù)據(jù)庫時的系統(tǒng)時間。4.3.2數(shù)據(jù)庫的代碼實(shí)現(xiàn)為了實(shí)現(xiàn)對數(shù)據(jù)庫版本進(jìn)行管理,SQLiteOpenHelper類提供了兩個重要的方法,分別是onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion),前者用于初次使用軟件時生成數(shù)據(jù)庫表,后者用于升級軟件時更新數(shù)據(jù)庫表結(jié)構(gòu)。當(dāng)調(diào)用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用于操作數(shù)據(jù)庫的SQLiteDatabase實(shí)例的時候,如果數(shù)據(jù)庫不存在,Android系統(tǒng)會自動生成一個數(shù)據(jù)庫,接著調(diào)用onCreate()方法,onCreate()方法在初次生成數(shù)據(jù)庫時才會被調(diào)用,在onCreate()方法里可以生成數(shù)據(jù)庫表結(jié)構(gòu)及添加一些應(yīng)用使用到的初始化數(shù)據(jù)。onUpgrade()方法在數(shù)據(jù)庫的版本發(fā)生變化時會被調(diào)用,一般在軟件升級時才需改變版本號,而數(shù)據(jù)庫的版本是由程序員控制的,假設(shè)數(shù)據(jù)庫現(xiàn)在的版本是1,由于業(yè)務(wù)的變更,修改了數(shù)據(jù)庫表結(jié)構(gòu),這時候就需要升級軟件,升級軟件時希望更新用戶手機(jī)里的數(shù)據(jù)庫表結(jié)構(gòu),為了實(shí)現(xiàn)這一目的,可以把原來的數(shù)據(jù)庫版本設(shè)置為2,并且在onUpgrade()方法里面實(shí)現(xiàn)表結(jié)構(gòu)的更新。當(dāng)軟件的版本升級次數(shù)比較多,這時在onUpgrade()方法里面可以根據(jù)原版號和目標(biāo)版本號進(jìn)行判斷,然后作出相應(yīng)的表結(jié)構(gòu)及數(shù)據(jù)更新。生詞本效果如圖4-6所示。

生成數(shù)據(jù)庫的主要實(shí)現(xiàn)代碼如下:publicclassDBOpenHelperextendsSQLiteOpenHelper{privatestaticfinalStringDATABASENAME="goohua.db";//數(shù)據(jù)庫名稱privatestaticfinalintDATABASEVERSION=1;//數(shù)據(jù)庫版本publicDBOpenHelper(Contextcontext){super(context,DATABASENAME,null,DATABASEVERSION);}publicvoidonCreate(SQLiteDatabasedb){db.execSQL("CREATETABLEwords(word_idintegerprimarykeyautoincrement,word_namevarchar(40),word_meanvarchar(100),word_timeINTEGER)");}4.3.3操作數(shù)據(jù)在WordService接口中提供了對數(shù)據(jù)庫操作的一系列方法,比如向數(shù)據(jù)庫里面插入數(shù)據(jù)的save方法,刪除數(shù)據(jù)的delete方法,查詢數(shù)據(jù)的List<WordItem>getScrollData方法等。插入數(shù)據(jù)的save方法:在學(xué)習(xí)單詞的時候,用戶需要把某個單詞放入生詞表中,則調(diào)用該save方法,將該單詞插入到數(shù)據(jù)庫中。publicvoidsave(WordItemwordItem){SQLiteDatabasedb=dbOpenHelper.getWritableDatabase();db.execSQL("insertintowords(word_name,word_means,word_time)values(?,?,?)”,newObject[]{wordItem.getWord_name(),wordItem.getWord_mean(),wordItem.getWord_time()});}刪除數(shù)據(jù)的delete方法:用戶在查看生詞庫中的單詞的時候,如果要刪除某個單詞,則調(diào)用該方法,將該單詞從數(shù)據(jù)庫中刪除。publicvoiddelete(WordItemwordItem){SQLiteDatabasedb=dbOpenHelper.getWritableDatabase();db.execSQL("deletefromwordswhereword_id=?”,newObject[]{wordItem.getWord_id()});}查詢數(shù)據(jù)的方法:從數(shù)據(jù)中隨機(jī)查詢出一批單詞,把查詢出來單詞的各個字段的數(shù)據(jù)保存到WordItem列表對象中。publicList<WordItem>getScrollData(Integeroffset,IntegermaxResult){List<WordItem>word_items=newArrayList<WordItem>();SQLiteDatabasedb=dbOpenHelper.getReadableDatabase();Cursorcursor=db.rawQuery("select*fromwordslimit?,?",newString[]{offset.toString(),maxResult.toString()});while(cursor.moveToNext()){intword_id=cursor.getInt(cursor.getColumnIndex("word_id"));Stringword_name=cursor.getString(cursor.getColumnIndex("word_name"));Stringword_mean=cursor.getString(cursor.getColumnIndex("word_mean"));longword_time=cursor.getLong(cursor.getColumnIndex("word_time"));WordItemwordItem=newWordItem(word_id,word_name,word_mean,word_time);word_items.add(wordItem);}cursor.close();returnword_items;}數(shù)據(jù)庫總記錄:查詢生詞本數(shù)據(jù)庫中單詞的總條數(shù)。publiclonggetCount(){SQLiteDatabasedb=dbOpenHelper.getReadableDatabase();Cursorcursor=db.rawQuery("selectcount(*)fromwords",null);cursor.moveToFirst();returncursor.getLong(0);}5系統(tǒng)運(yùn)行與測試5.1測試的任務(wù)及目標(biāo)在軟件運(yùn)行之前,盡可能多的發(fā)現(xiàn)軟件中的錯誤。測試一下重做、倒計(jì)時等功能能否正確運(yùn)行。測試的目的是為了發(fā)現(xiàn)程序中的錯誤,修改后能夠正確的運(yùn)行并且實(shí)現(xiàn)相應(yīng)的功臺匕能匕。5.2測試方案設(shè)計(jì)測試方案是測試階段的關(guān)鍵技術(shù)問題。測試方案包括預(yù)定要測試的功能、應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果,目標(biāo)是設(shè)計(jì)一組可能發(fā)現(xiàn)錯誤的數(shù)據(jù)。測試有兩種方法:黑盒測試和白盒測試。黑盒測試又稱為功能測試,在程序接口進(jìn)行,只檢查程序功能是否能夠按照規(guī)格說明書的規(guī)定正確使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)并發(fā)生正確的輸出信息,而且要能夠保持外部信息的完整性[14]。白盒測試又叫結(jié)構(gòu)測試,完全了解程序的結(jié)構(gòu)和處理過程,這種方法按照程序內(nèi)部的邏輯測試程序,檢驗(yàn)程序中每條通路是否都能按照預(yù)定要求正確工作[14]。5.2.1模塊測試也叫單元測試,目的是保證每一個模塊作為一個單元能正確運(yùn)行,本測試所發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計(jì)的錯誤。Junit測試是程序員測試,即所謂白盒測試,因?yàn)槌绦騿T知道被測試的軟件如何完成功能和完成什么樣的功能。Junit是一個開放源代碼的Java測試框架,用于編寫和運(yùn)行可重復(fù)的測試,繼承TestCase類,就可以用Junit進(jìn)行自動測試了。模塊測試主要由代碼審查:第一步:首先在AndroidManifest.xml中加入下面的代碼:<manifestxmlns:android="/apk/res/android”package="com.goohua"android:versionCode="1"android:versionName="1.0”><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><uses-libraryandroid:name="android.test.runner"/></application><uses-sdkandroid:minSdkVersion="6”/><instrumentationandr

溫馨提示

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

評論

0/150

提交評論