弋改珍,江 蕭,袁嵐清
(咸陽師范學院 信息工程學院,陜西 咸陽 712000)
近年來,隨著移動通信,特別是基于Android平臺移動終端的飛速發展,無線網絡高速接入Internet已成為現實,移動用戶可以方便快捷地享受到Internet提供的服務,使得移動終端成為互聯網的終端,同時也使得基于Android平臺的移動終端應用越來越廣泛。
文中基于軟件工程的思想,采用Eclipse作為開發平臺,以SQLite為數據庫管理系統,在Android平臺上設計開發了課堂點名系統,該系統提供錄入學生信息、查詢、點名、統計等功能,可以方便教師進行課堂點名,提高課堂考勤的效率。
Android 應用程序是由 Activity、Intent Receiver、Service、ContentProvider4部分組成,但并不是每一個Android應用程序都必須由這4部分組成。在應用程序中使用時,需要在配置文件Android應用程序中所必需的,用于定義應用程序的組件、組件的功能以及必要條件等[1]。Android應用的構成和工作流程圖如圖1所示。

圖1 Android的構成和工作機制Fig.1 Structure and work principle of Android
在Android中,每個界面使用一個由基類Activity派生的Activity子類實現,每個Activity子類都是獨立的。Activity類可以顯示View控件組成的用戶接口,并對事件做出響應。Android在實現多界面顯示時,將歷史顯示屏幕存儲在堆棧數據結構中,返回時可以逐級返回[2]。
多界面之間的切換調用Android的專有類Intent,Intent數據結構中最重要的部分是Action和Action對應的數據。典型的Action有:MAIN、VIEW、PICK、EDIT等,對應的數據以URI形式表示[3]。使用Intent Filter描述如何處理Action、如何表示Action 的 URI。 Intent Filter定義在 AndroidManifest.xml中[4]。
從一個界面切換到另一個界面調用startActivity()方法。通過解析各種Intent,就可以簡單地從一個屏幕切換到另一個屏幕。向前導航時,活動將會調用startActivity()方法,然后系統會在所有安裝的應用程序定義的Intent Filter中查找,找到最匹配的Intent對應的Activity。新的Activity接收到Intent的通知后,立即開始運行。
Broadcast Receiver[5]使應用程序對外部事件做出響應。Broadcast Receiver只能通過 Notification Manager來通知用戶。它既可以在AndroidManifest.xml中注冊,也可以在代碼中使用Context.registerReceiver()進行注冊。各種應用通過調用Context.sendBroadcast()方法將它們自己的Intent receiver廣播給其他應用程序。
Service[5]類似于Windows系統中的Windows服務,是一種沒有界面的應用程序,具有較長的生命周期。通過調用Context.bindService()方法,連接到一個服務上,當連接到一個服務之后,還可以通過服務提供的接口與它進行通信;通過調用Context.startservive()來啟動一個服務,從而使該服務可以在后臺運行。
Content Provider[6]是對外提供的數據接口,類似于普通的Web應用的一個Web Service接口,按照標準開放出一個接口,供其他應用獲取數據。Content Provider類實現了一組標準的方法,從而使得其他的應用程序能夠保存或讀取此Content Provider的各種數據類型。
點名系統主要用于教師在課堂中進行學生考勤管理、考勤數據存儲、學生信息考勤查詢等。使用該系統可以提高教師課堂考勤的效率。具體實現功能如下:
1)系統主界面:提供圖形化的菜單功能。
2)學生信息管理:包括學生編號、學生姓名、學生性別、學生性別能屬性,提供學生信息的添加、修改、刪除功能。
3)學生點名管理:包括點名時間、學生信息、考勤情況等。
4)數據查詢:提供按時間段和按照學生姓名查詢學生的考勤信息。
系統功能結構圖如圖2所示。

圖2 系統功能結構圖Fig.2 The system function structure diagram
點名系統的數據使用SQLite進行數據庫管理[7]。SQLite是開源的、嵌入式數據庫管理系統。SQLite可以完成數據庫管理所需要的創建數據庫、創建表、向表中添加數據、從表中刪除數據、修改表中的數據以及查詢表中的數據。也可以使用SQLite提供的SQL特征,完成簡單的數據統計分析功能。
Android應用程序訪問數據庫的接口是SQLiteOpen-Helper類,使用這個類可以完成對數據庫的操作。在設計過程中,從SQLiteOpenHelper派生自己的子類DBHelper。創建數據庫時使用SQLiteOpenHelper的onCreate()方法,升級數據庫時使用onOpgrade()方法。
點名系統中DBHelper.java(數據庫操作類)的實現過程:
1)創建數據庫是實例化SQLiteDatabase的一個對象:
privateSQLiteDatabasedb;
2)創建數據庫及其表:
public void onCreate(SQLiteDatabasedb){
this.db=db;
db.execSQL(CREATE_TBL1);
db.execSQL(CREATE_TBL2);
}
3)給數據庫表中插入數據:首先調用getWritableDatabase()方法將數據庫設置可寫,然后調用數據庫的內部方法insert將Activity中輸入的值添加到數據庫表中。
public void insert1(ContentValues values){
SQLiteDatabasedb=getWritableDatabase();
db.insert(TBL_NAME1,null,values);
db.close();
}
4)調用數據庫內部的rawQuery()方法,使用SQLite中的Cursor從指定的表或者按照條件創建查詢:
public Cursor query3(String name){
SQLiteDatabasedb=getWritableDatabase();
Cursor c=db.rawQuery("Select rid as_id,name,date,statue from records where name='"+name+"'",null);
return c;
}
5)刪除數據調用 SQLiteDatabase中內部方法delete(),修改表中的數據時調用update()方法。
點名系統中的界面包括:
AddStudentActivity.java:添加學生界面,用來添加學生信息
AlterRecordActivity.java:更改記錄界面,用來更改記錄信息
AlterStudentActivity.java:更改學生信息界面,用來更改學生信息
CallActivity.java:學生點名界面,用來在線點名
RollCallActivity.java:程序主運行界面
QueryActivity.java:數據查詢界面,用來進行數據查詢
StudentInfoActivity:學生信息管理主界面
Android開發采用MVC模式,使用Android中的Activity進行界面開發,主界面的布局信息存放在/layout/main.xml文件中。實現主界面時,從Activity類中派生RollCallActivity子類,使用setContentView(R.layout.main);將布局文件加載到主界面并顯示其內容,使用map0.put("ItemImage",R.drawable.a1);給主界面上添加圖標,map0.put("ItemText","學生信息理");添加文字。
為界面上的圖標和文字創建Activity轉換是的監聽器設置:
1)創建一個 intent類
Intent intent=new Intent();
2)設置Activity跳轉的關聯:
intent.setClass(RollCallActivity.this,StudentInfoActivity.class);
主界面設計流程如圖3所示。

圖3 界面設計流程圖Fig.3 Flow diagram of interface design
1)學生信息中“性別”字段值的錄入
為了便于“性別”字段的錄入,實例化一個ArrayAdapter對象,調用setDropDownViewResource()方法產生一個下拉列表,調用ArrayAdapter的add()方法輸入下拉列表的值,最后調用setAdapter()方法將輸入的值添加到下拉列表中。
2)將輸入的字段值保存到數據庫表中
實例化一個名為btnSave的按鈕,當一條記錄錄入結束后,單擊該按鈕將錄入的記錄保存在數據庫表中。在學生信息錄入過程中,如果某個字段的值為空,則使用Android中的消息機制,調用Setmessage()方法提示重新輸入。如果字段值不為空,則實例化一個ContentValues對象,然后調用put()方法,讓ContentValue存儲鍵值對,最后調用數據庫的insert()方法將錄入的信息存入數據庫中。設計過程如圖4所示。

圖4 錄入學生信息流程Fig.4 Flow diagram of inputting student information
系統自動生成點名的時間,通過選擇學生列表,并設置出席狀態為:出席、遲到、曠課、病假、事假等類別,保存學生的出勤情況,供日后查詢。
在點名界面CallActivity中,使用Date()獲取系統時間,設置點名的時間;點名時,將學生到課情況設置為“出席”、“遲到”、“曠課”、“病假”、“事假”5 種狀態。 用 ArrayAdapter
將學生的ID、姓名、點名時間、狀態信息保存在數據庫表中。
調用SQLite數據庫的 getReadableDatabase()方法,設置數據庫為讀方式,用下面的語句實現按照日期進行查詢:
db.rawQuery ("Select rid as_id,name,date,statue from records where date between'"+d1+"'and'"+d2+"'",null);
按照姓名進行查詢:
db.rawQuery ("Select rid as_id,name,date,statue from records where name='"+name+"'",null);
本文以Eclipse為開發平臺,利用Android嵌入的SQLite數據庫管理系統,設計開發了課堂點名系統。該系統實現了系統主界面、學生信息管理(包括信息的錄入、增加、刪除、修改)、點名(包括設置學生到課狀態)和按照條件查詢功能。本系統實現的功能具備了教師在課堂使用的特點,操作方便、簡潔。點名系統存在的問題是沒有考慮到教師隨機抽查點名的情況。這也是該系統需要進一步完善的功能。
[1]XXX.基于Android的課堂簽到系統[D].南京:中南大學,2013.
[2]施金蘭.基于Android平臺的網絡共享研究與實現 [D].上海:華東師范大學,2011.
[3]Android應用開發幫助文檔[EB/OL].[2013-06-15]http://wenku.baidu.com/linkurlXwz4bMjStWGzGPLBoWqTHKSo2BvfM iDaoToXxz1zbtmMYpXOpGo9-3WAa4IMusk7Z4q.
[4]張巖龍.基于嵌入式系統的802.11b無線網絡安全研究及應用[D].成都:電子科技大學,2005.
[5]Android developers[EB/OL].[2013:05-15].http://developer.android.com/guide/components/fundamentals.html.
[6]Android project[EB/OL].[2013-05-20].http://source.android.com/.
[7]周藝環,任偉,張旭,等.電子式互感器異常報文數據庫設計[J].陜西電力,2014(5):65-68.ZHOU Yi-huan,REN Wei,ZHANG Xu,et al.Electronic transformer exception message database design[J].Shaanxi Electric Power,2014(5):65-68.