黃日勝,陳冠志
(河源職業技術學院,廣東 河源 517000)
學生考勤是課堂教學的一部分,是加強學生管理維護學校教學秩序、保證各項教學任務順利實施的一個關鍵環節[1]。但傳統的課堂點名方式不僅耗費了寶貴的課堂時間而且還加重教師的工作負擔[2]。當前,二維碼具有信息容量大、糾錯能力強、印刷成本低等特點,而廣泛應用于各種領域[3]。物聯網技術、移動互聯技術的迅速發展,給日常生活帶來巨大的變化。由此本文將結合移動互聯技術、二維碼技術提出一種基于Android 平臺的智慧考勤應用系統,結合學校教務系統的課程及學生信息,利用移動終端的攝像頭采集并自動識別二維碼信息,然后通過移動互聯網絡傳輸到服務器,從而實現移動在線智能化考勤。
智慧考勤APP由兩個部分組成:教師簽到系統和學生簽到系統。教師簽到系統方便教師發起簽到和考勤統計,并實時顯示老師上課的課程表。學生簽到系統實時顯示學生上課的課程表,學生可以通過掃二維碼的方式進行簽到。
教師簽到系統由教師課程表查看、對應課程發起簽到、對應課程考勤統計查看、搜索課程考勤統計、手動考勤管理等功能組成。
教師課程表查看:從服務端獲取該教師課程表的數據,進行實時顯示該教師上課的課程表。
對應課程發起簽到:對課程表的課程進行長按,選擇發起簽到,便可對該課程向服務端發起簽到指令。
對應課程考勤統計查看:對課程表的課程進行長按,選擇考勤統計,便可查看該課程的考勤統計。
搜索課程考勤統計:教師可按學年-學期-班級-課程進行搜索并查看考勤統計。
手動考勤管理:對學生考勤異常的情況,教師可通過手動對該學生進行考勤管理。
學生簽到系統由掃二維碼簽到、學生課程表查看、查看對應課程的詳細信息等功能組成。掃二維碼簽到:學生可通過掃二維碼的方式進行簽到。學生課程表查看:從服務端獲取該學生課程表的數據,進行實時顯示該學生上課的課程表。
查看對應課程的詳細信息:對課程表的課程點擊,便可查看該課程的詳細信息。
課程表包含3個功能,分別是發起簽到、考勤統計、手動考勤管理,單擊課程,就進入手動考勤管理界面;長按,就會彈出發起簽到和考勤統計的提示框。點擊發起簽到時,就會向服務器發起簽到指令;點擊考勤統計,進入考勤統計界面。
從服務器獲取教師上課的課程表JSON數據,接著進行數據處理,最后將數據展示成界面。當教師單擊課程時,就進入手動考勤管理界面;當教師對課程表長按時,就會彈出發起簽到和考勤統計的提示框。點擊發起簽到時,就會向服務器發起簽到指令;點擊考勤統計時,就進入該課程的考勤統計界面。教師課程表、考勤統計的實施界面分別如圖1—2所示。顯示課程表及手動考勤管理主要代碼如下。
//顯示課程表
private void showCourse(){
showCourseTemp(mCourseListTemp,0);
mCourseListTemp.clear();
showCourseTemp(mTeaCourseList,1);
mCourseListTemp.addAll(mTeaCourseList);
}
//手動考勤管理
Alert Dialog dialog = new Alert Dialog.Builder(SdglActivity.this)
.setTitle(“對【“ + sdglBean.getName() + “】手動考勤操作:”)
.setSingleChoiceItems(new String[]{“正常簽到”,”請假”“遲到”“早退”“曠課”}, sdglBean.getState(),(dialog1,which) ->{
sdglBean.setState(which);
dialog1.dismiss();
ToastUtil.info(“操作成功”);
}).create();
dialog.show();

圖1 教師課程表

圖2 考勤統計
按學年—學期—班級—課程進行篩選時,可查看到篩選出來的考勤統計結果。當教師按學年—學期—班級—課程進行篩選時,可查看到篩選出來的考勤統計結果。當教師點擊統計標題列時,會對該列進行降序或升序排列。條件篩選、篩選結果實現界面分別如圖3—4所示。條件篩選的主要實施代碼如下:

圖4 篩選結果
this.setOnClickListener(v ->{
if (myPopW.isShowing()){
myPopW.dismiss();
this.setTextColor(getResources().getColor(R.color.colorDarkBlue));
this.setCompoundDrawablesWithIntrinsicBounds(null,null, tvIcoDown, null);
} else{
myPopW.show(this);
this.setTextColor(getResources().getColor(R.color.colorAccent));
this.setCompoundDrawablesWithIntrinsicBounds(null,null, tvIcoUp, null);
}});
本功能基于Google的開源庫 Zxing開發,學生點擊掃碼按鈕,打開攝像頭,掃描服務器發過來的二維碼,進行簽到。簽到界面、掃碼界面分別如圖5—6所示。處理二維碼掃描結果的主要代碼如下:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == QR_CODE_REQUEST_CODE) {
//處理掃描結果(在界面上顯示)
if (null != data) {
Bundle bundle = data.getExtras();
if (bundle == null){
return;
}
if (bundle.getInt(CodeUtils.RESULT_TYPE) ==CodeUtils.RESULT_SUCCESS){
String result = bundle.getString(CodeUtils.RESULT_STRING);
String resultUrl = result+”3838438”;
OkHttpUtils.post().url(resultUrl).build().execute(new StringCallback(){
@Override
public void onError(Call call, Exception e, int i) {
}
@Override
public void onResponse(String s, int i) { }
});
}else if (bundle.getInt(CodeUtils.RESULT_TYPE) ==CodeUtils.RESULT_FAILED){
ToastUtil.info(“解析二維碼失敗”);
}
}
}
}

圖5 簽到界面

圖6 掃碼
從服務器獲取學生上課的課程表JSON數據,接著進行數據處理,最后將數據展示成界面。當學生單擊課程時,便可查看該課程詳細信息。學生課程表、課程詳情界面分別如圖7—8所示。查看課程詳情的主要實施代碼如下:
protected void courseInfoShow(String byClsName)
{
List<Cou rse> quer yList = Dat aSuppor t.where(“clsName=?”, byClsName). find(Course.class);
for (Course course : queryList)
{
tvTeaName.setText(course.getTeaName());
tvClasName.setText(course.getClsName());
tvClsRoom.setText(course.getRoomName());
tvBeginWeek.setText(“第” + course.getBeginWeek() +“周”);
tvEndWeek.setText(“第” + course.getEndWeek() +“周”);
}
myPopW.show(getView());
}

圖7 學生課程表

圖8 課程詳情
本系統通過結合移動互聯網技術、二維碼技術來實時記錄學生課堂出勤情況,有效整合學校教務系統的相關功能。從實現結果來看,基于Android的智慧考勤APP操作方便快捷,功能強大。對于提高點名效率,促進學校課堂管理具有一定的意義。