摘要:根據現如今的大學生學習環境以及學習習慣來看,智能手機已經是不可替代的學習工具之一,網絡課程,習題等都可以在移動客戶端上解決,不僅方便,還有很高的效率。該文以“C語言程序設計”課程為例,開發基于Android的學習平臺。學生可利用這些功能來加強課堂學習的效果,也可利用討論區來和網友進行學習上的交流。這樣保證了學習的即時性和求解問題的有效性。
關鍵詞:Android;C語言;學習平臺
中圖分類號:TN929 文獻標識碼:A 文章編號:1009-3044(2018)10-0089-03
1 背景
互聯網的發展使計算機技術在教育領域也得到了廣泛的應用。隨著智能手機的普及,一種新型的學習方式出現在我們面前,并且越來越大眾化。這就是所謂的移動學習――一種在是一種在移動計算設備幫助下的能夠在任何時間任何地點發生的學習,移動學習所使用的移動計算設備必須能夠有效的呈現學習內容并且提供教師與學習者之間的雙向交流[1][2]。移動學習可以隨時隨地進行學習,這種方式解決了傳統課堂模式不夠方便的問題,也使資源利用率更高。對于當代大學生來說,手機和pad等移動設備是生活中不可缺少的物品,而我們利用這些電子設備強大的功能來開發一款適合大學生學習“C語言程序設計”(下文都簡稱“C語言”)的學習平臺有明顯的實用價值。
2 移動學習平臺的需求分析
2.1 用戶調查
要想學習平臺的學習內容更加符合學生的期望以及學習效果更強,在開發之前筆者進行了一個用戶調查。調查內容主要為學生對于移動學習平臺的需求性以及學生在C語言學習中所遇到的困難??梢愿鶕@兩點研發最適合學生使用的平臺,這樣不僅能節省很多開發資源也可以節省用戶的時間、增強用戶體驗。
2.2 需求分析
移動學習平臺首先必須要保證學生學習的隨時隨地性,所以要保證在本地存儲學習資源。將數據資源都存儲在本地數據庫里,用戶在進行使用的時候不用花費太多等待響應的時間,這樣可以更加高效率的進行學習,也能夠更加發揮了移動互聯網的優勢。其次,要盡可能的提升用戶體驗,平臺提供的學習資料必須更加系統化并且能突出學習重點,而不是像一些傳統的題庫一樣,只有題目以及答案,而是應該從基礎到問題解析再到知識點的延伸,這樣可以讓學生對學習內容掌握得更加牢靠。學生在使用的時候根據自身需求和學習進度選擇適合自己的功能。
3 移動學習平臺的系統設計
3.1 系統體系設計
移動端目前主流系統有Android和IOS等,其中Android的更新快來越快,而且Android智能手機也因為性價比較高而擁有大多的用戶,所以該平臺基于Android系統開發并且檢測[3]。該移動平臺基于C/S架構,基本體系結構如圖1所示:分為服務器端數據服務、服務器端功能模塊、客戶端數據服務、客戶端功能模塊。
3.2 數據庫的設計
該平臺主要是實現題庫功能,所以數據庫中表格比較簡單,所以會創建一個Exercises表格,表格中字段有題目編號(Exercise_id),該字段設為主鍵自增長;題目內容(Exercise_content),類型為varchar;題目答案(Exercise_solve),類型為varchar。平臺模塊中不管是隨機練習還是模擬考試都將從該Exercise表中抽取題目。由于在進入平臺的時候有登錄以及注冊功能,所以需要創建一個用戶表,用戶的賬號信息保存在用戶表中,登錄以及注冊功能在用戶表中查詢以及增加數據。表中有三個字段:用戶ID(userID),用戶名(user)以及密碼(password)。同樣,用戶ID設置主鍵自增長,并且用戶名設置為unique,防止出現用戶名相同的情況。
4 C語言學習移動平臺的實現
4.1 歡迎界面
考慮到美觀的因素,該移動平臺歡迎界面分為滑動頁面,界面上有功能模塊的名稱,讓用戶在登錄之前就大概可以了解到該App的用途。該平臺設計的是三張滑動頁面,所以要寫三個.xml文件分別表示三個界面。某一頁的代碼如圖2所示,布局里放上你每頁滑動所顯示的圖片,設置相關格式。如圖2。
布局寫好后,實現滑動功能對應的java文件核心代碼如表一所示。先將之前寫好的每個布局文件放在List里面,根據ArrayList的長度作為控制來循環滑動的頁數,根據索引下表來檢索出滑動到的頁數。圖3為滑動的其中一個頁面。因為此處定義的滑動頁數為3,在之前的布局文件中,第三頁定義了一??按鈕,用來進入主界面。所以當滑到第三頁的時候,如果點擊Enter按鈕,將跳轉到登錄和注冊頁面,界面如圖4所示。
4.2 注冊登錄的界面
為了更好的用戶體驗,該平臺將注冊和登錄放在一個頁面上,避免用戶使用時太麻煩,或者等待響應的時間太長,從而影響用戶體驗,圖5為注冊和登錄的界面。部分登錄注冊頁面布局代碼如下所示,采用嵌套布局,分層次為注冊和登錄。
[
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="match_parent" android:layout_height="wrap_content"
android:background="#00000000"
android:layout_marginTop="146dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#e501aaff">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:hint="username"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
……
……
實現注冊的功能和登錄的功能都需要連接數據庫,在實體方法中會用到數據庫的一些查找和增加的語句。數據庫里有用戶信息表,會存放用戶信息,包括用戶名和密碼,注冊的時候會調用后臺的一個查詢功能查詢用戶表里是否有相同的用戶名,如果是則不能將此條信息添加到數據庫里面去。登錄的時候則輸入用戶名和密碼,調用數據庫查詢是否有此用戶存在,如果存在。再查詢該用戶的密碼,將這個密碼和用戶登錄時輸入的密碼對比,如果一致則登錄成功[4]。登陸注冊主要Java代碼如下。
[private void initViews(){
……
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_login: {
String username = etLoginUsername.getText().toString();
String password = etLoginPassword.getText().toString();
if (login(username, password)) {
Log.d("AtyLoginOrRegister","username"+username);
serverManager.setUsername(username);
Log.d("AtyLoginOrRegister","password"+password);
Intent intent = new Intent(this, AtyMain.class);
startActivity(intent);
finish();
} else {
etLoginUsername.setText("");
etLoginPassword.setText("");
}
break;
}
case R.id.btn_register: {
Intent intent = new Intent(this, AtyMain.class);
startActivity(intent);
finish();
break;
}
default:break;
}
} ]
4.3 題庫模塊的實現
由于Android系統內置了數據庫,而SQLite又是一種運算非???,所占資源非常少的?稻菘?[5],所以非常適合我們本地功能的實現。關于題庫這一塊,先將題目按模塊存在數據庫里面,然后將數據庫題目表的一些屬性封裝在我們的實體類中,通過方法實現查詢數據庫表格內容的接口方法。到主頁面中我們就可以通過按鈕事件來控制答題,做題界面如圖6所示。核心java代碼如下所示。 [public class ProgrammingExercisesFragmentController {
……
private void initView() {
if (questions.get(index).getType().equals(QuestionType.SHORT)) {
binding.ProgramFragmentEt.setText("");
binding.btnCodeProgram.setVisibility(View.GONE);
} else {
binding.btnCodeProgram.setVisibility(View.GONE);
}
binding.ProgramFragmentTitle.setText("[" + (index + 1) + "/" + questions.size() + "]" + questions.get(index).getTitle());
}
public void btnOnProgram(View v) {
int on = clickListener.on(index);
index = on;
initView();
Log.e("TAG", index + "");
}
public void btnAnalyzeProgram(View v) {
clickListener.showdialog(index, clickListener.description(index));
}
public void btnCodeProgram(View v) {
clickListener.showdialog(index, clickListener.code(index));
}
public void btnUnderProgram(View v) {
int under = clickListener.under(index);
index = under;
initView();
Log.e("TAG", index + "");
}
} ]
隨機練習和模擬考試都是將數據庫里面的題目隨機抽取出來,代碼邏輯同上述相同,這就不再多做介紹。
5 結束語
在這個互聯網+時代,幾乎所有的學習資源都是可以更加便利的從網絡上獲取,而使用移動端平臺這種學習方式則十分高效,也更加利用了碎片的時間進行學習。隨著互聯網和軟件的不斷發展,網絡學習必將會更加便捷,更加展現得天獨厚的資源共享優勢,高級程序的學習不僅僅限于書本,課堂以及學校機房。該文的研究旨在探索移動端學習的優勢和傳統可課堂學習的最佳結合點,使得學生在學習高級程序語言的時候掌握更加適合自己的方法。通過測試以及短暫的使用,發現進入主界面的時候沒有記住密碼的功能,在很大程度上不太方便,影響用戶體驗,后期將會繼續優化。學習部分分目前只實現了題庫方面的功能,不能上傳視頻實現共享,平臺暫時無法 統計每個用戶的使用習慣以及大多數人學習的疑難點。想實現這個功能需要用到當前的新技術大數據分析。雖然現在國內仍然以傳統教學模式為主,少有將大數據用到教學和自主學習上,但是網絡教學和移動端學習使學習這一件事成為全民化。相信隨著移動技術的發展和軟件行業的發展,互聯網+學習會給更多的人帶來優質高效的學習成果。
參考文獻;
[1] Aleksander Dyeetal:Mobile Education-A Glance at The Future[EB/OL].http://www.nettskolen.com/forskn-ing/ mobile education.pdf.
[2] 秦艷菲,魏慧琴. 基于 Android 的高級程序設計語言移動學習平臺設計與實現[J]. 現代計算機,2015(13).
[3] 郭霖.第一行代碼Android[M].2版.北京:人民郵電出版社,2016.
[4] 王凌燕,張仕東,王麗燕. 基于Android的英語口語移動學習平臺的?O計與實現[J]. 陜西科技大學學報,2012,30(5):146-150.
[5] Satya Komatineni,Dave MacLean.精通Android[M].北京:人民郵電出版社,2013:76-78.