鄭啟根 侯懿
摘?要:錯題本是學生的寶貴財富,同學們建立錯題本的初衷是能夠有效地整理錯題、適合反復翻閱、快速突破學習中的薄弱點。目前,智能手機的使用越來越普遍,本課題開發(fā)基于Android系統(tǒng)的手機APP智能錯題本。用戶可以利用手機版的智能錯題本掃描自己練習冊、試卷上的錯題,形成錯題集,錄入自己的解題方法及思路,根據(jù)用戶自己的掌握程度對錯題進行個性化的難度分類,還可以生成試卷,供用戶測試練習,相較于傳統(tǒng)手工書寫批注模式整理更方便、搜索更快捷、節(jié)約時間成本。
關(guān)鍵詞:Andriod;APP開發(fā);錯題
中圖分類號:TN99文獻標識碼:A
1?項目背景
在中小學生的學習成長中,會遇到各類習題的錯誤,在經(jīng)過老師的講解后,學生會做筆記,形成自己的錯題本。錯題本有助于同學們查找學習中的不足,快速突破重點難點。根據(jù)前期的中學生群體調(diào)查,在300+份有效回收的調(diào)查問卷中,842%的同學認為錯題本非常重要,75.5%的同學有自己的手寫錯題本,經(jīng)常翻看的比例是66%。主要問題反應在傳統(tǒng)錯題本記錄量大,耗時費力,翻閱與查找不方便。從智能手機面世以來,各種應用程序?qū)映霾桓F,教育類APP也占有其中的一席之地,有很多搜題、學習軟件,已成為學生學習的好幫手。據(jù)調(diào)差顯示經(jīng)常使用學習類APP的學生占調(diào)查總?cè)藬?shù)的65.38%。
本著把手機用在學習上的思路,解決傳統(tǒng)錯題本耗時大檢索不便的缺點,本課題針對錯題的特性開發(fā)一款基于Andriod系統(tǒng)的智能錯題集??衫盟槠瘯r間隨時隨地錄入瀏覽,使智能手機成為真正的學習工具。
2?基于安卓系統(tǒng)的智能錯題本設(shè)計方案
2.1?智能錯題本功能需求調(diào)查結(jié)論
在課題開始階段進行智能錯題本的功能需求調(diào)查,收集手寫錯題本樣稿。確定手機錯題本開發(fā)思路為拍照錄入錯題及答案,用戶可以自由設(shè)定幾個層次的錯題標簽,如按題型、考察內(nèi)容、難度等,便于檢索和分類,用戶可以在拍好的錯題及答案上進行各種個性化符號的標注,如加下劃線,波浪線,加★、√、、?、※等符號,可利用標簽方便進行錯題檢索,便于回顧,機型適配基于安卓的市場常見手機品牌如華為、小米、三星、OPPO、vivo、魅族、ZET、聯(lián)想、HTC等機型。
2.2?確定開發(fā)軟件
開發(fā)軟件選用Android?Studio。其優(yōu)點是啟動和響應速度快,內(nèi)存占用低、整合了Gradle構(gòu)建工具,集合一些Ant和Maven的優(yōu)點、具有強大的UI編輯器、安裝的時候就自帶了GitHub,CVN。其缺點是開發(fā)過程中占用開發(fā)電腦內(nèi)存較大,同時升級頻繁,插件復雜,但相對于一些新出現(xiàn)的開發(fā)平臺,該開發(fā)軟件穩(wěn)定性好,系統(tǒng)BUG少,因而選定該軟件作為開發(fā)平臺。
數(shù)據(jù)庫鑒于本次開發(fā)為單機版本,選擇SQLite,其有點是方便免費,安卓平臺自帶的數(shù)據(jù)庫,維護難度低,整個數(shù)據(jù)庫存儲在一個單個的文件中,數(shù)據(jù)導入導出備份恢復都是復制文件。
安全加固采用騰訊樂固使用方便,用戶量大,擁有專業(yè)加固策略,目前未使用其付費項目。
2.3?智能錯題本開發(fā)
2.3.1?程序簡介
智能錯題本用戶界面如下圖,以下主要分為三層:
(1)數(shù)據(jù)庫存儲層:使用SQLite作為數(shù)據(jù)承載載體,所有的錯題的存儲均放置于此層;
(2)技術(shù)支撐層:此層主要為業(yè)務(wù)層提供技術(shù)化組件的支撐,通過此層,業(yè)務(wù)層的操作可以順利的完成。此層主要提供安全算法處理、日志處理、存儲連接處理、外部網(wǎng)絡(luò)連接等處理。純技術(shù)化處理,不涉及到業(yè)務(wù)的處理方式;
(3)業(yè)務(wù)層:此層為核心層,用戶可見層次。主要提供包含科目的分類服務(wù)、錯誤的管理服務(wù)、考試的服務(wù)以及其他的一些外部服務(wù)等。
智能錯題本用戶界面
2.3.2?程序片段舉例
(1)裁剪圖圖片,對圖片進行編輯。
public?void?toCropPhoto(Uri?uri){
Intent?intent=new?Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop","true");
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
intent.putExtra("outputX",1024);
intent.putExtra("outputY",1024);
intent.putExtra("scale",true);
intent.putExtra("return-data",false);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",true);//?no?face?detection
intent.putExtra(MediaStore.EXTRA_OUTPUT,F(xiàn)ileIOUtil.img_uri);
acti.startActivityForResult(intent,Constant.REQ_CROP_PHOTO);