吳 衡
(天水師范學(xué)院 物理與信息科學(xué)學(xué)院,甘肅 天水 741001)
大學(xué)生的課程具有課程種類多、教室分布分散、上課時(shí)間和次數(shù)安排靈活、每門課有不同的教室、選修課程多等特點(diǎn),所以記錄這些信息的課表往往密密麻麻。學(xué)生一般會(huì)將課表打印出來,隨身攜帶。紙質(zhì)的課表在使用中容易破損、遺失、難以長期保存,而且很難及時(shí)更新,一旦課程發(fā)生變化,經(jīng)常會(huì)發(fā)生因課表沒有及時(shí)更新導(dǎo)致學(xué)生找錯(cuò)教室、上課延誤等問題。
本文將教務(wù)管理與智能手機(jī)相結(jié)合,設(shè)計(jì)實(shí)現(xiàn)基于Android(安卓)系統(tǒng)的應(yīng)用軟件——高校課表查詢軟件,很好地解決了查課表難的問題。本軟件設(shè)計(jì)新穎,學(xué)生只需輸入學(xué)號(hào),便可以快速顯示本人的詳細(xì)課表,包括代課教師、授課地點(diǎn)、上課時(shí)間、課程周節(jié)次等。通過筆者所在單位的實(shí)踐,該系統(tǒng)得到了師生的認(rèn)可。
Android是目前最流行的智能手機(jī)平臺(tái)(占據(jù)全球智能手機(jī)操作系統(tǒng)市場的59%的份額,中國市場占有率為76.7%),其最大特點(diǎn)是采用Linux系統(tǒng)做內(nèi)核和應(yīng)用程序使用JAVA語言開發(fā)。
整個(gè)系統(tǒng)由服務(wù)器端和客戶端組成,系統(tǒng)流程按照C/S模式構(gòu)架。如圖1所示。
圖1 教務(wù)數(shù)據(jù)流拓?fù)鋱D
智能手機(jī)終端通過無線數(shù)據(jù)網(wǎng)絡(luò)將學(xué)生信息發(fā)往Job Schedule Server(任務(wù)調(diào)度服務(wù)器,簡稱JSS),JSS將學(xué)生信息轉(zhuǎn)發(fā)到系統(tǒng)負(fù)載低的Application Server(應(yīng)用服務(wù)器,簡稱APP)。APP SERVER負(fù)責(zé)與學(xué)校的教務(wù)平臺(tái)通信,它將從JSS傳來的請求逐一按以下步驟處理:安全檢查;遠(yuǎn)程SQL查詢教務(wù)平臺(tái);數(shù)據(jù)重新格式化;壓縮封裝;查詢結(jié)果返回,最后課表信息再通過無線數(shù)據(jù)網(wǎng)返回智能手機(jī)終端。接收到信息后,手機(jī)終端按如下步驟逐一進(jìn)行:安全掃描;數(shù)據(jù)解包;數(shù)據(jù)重新格式化;更新手機(jī)界面、呈現(xiàn)學(xué)生課表。
代碼的編寫使用開源編輯器Eclipse。編譯、運(yùn)行和調(diào)試在Google提供的手機(jī)模擬器上進(jìn)行。
為了盡可能避免安卓平臺(tái)碎片化的問題,開發(fā)應(yīng)用程序接口選擇Android2.2版本,最大程度地解決程序在不同運(yùn)行安卓版本手機(jī)間的安裝問題。同時(shí),在開發(fā)的過程中采用模擬器和真機(jī)雙測試,從而保證了程序的運(yùn)行效果,加快了開發(fā)進(jìn)度。[1]
安卓手機(jī)客戶端使用JAVA語言編寫、Eclipse編輯,項(xiàng)目結(jié)構(gòu)如圖2所示。
圖2 教務(wù)項(xiàng)目結(jié)構(gòu)示意圖
程序運(yùn)行后首先啟動(dòng)歡迎界面。歡迎界面在屏幕上短暫停留幾秒后進(jìn)入學(xué)生信息輸入界面,在該界面輸入學(xué)號(hào),點(diǎn)擊“查課表”按鈕,學(xué)生周課表出現(xiàn),單擊每一節(jié)課,顯示每節(jié)課的詳細(xì)情況。
3.1.1 歡迎界面的實(shí)現(xiàn)
歡迎界面的代碼文件是Splash.java,繼承了android的Activity類,它是整個(gè)程序的默認(rèn)入口。歡迎界面在屏幕上停留幾秒后使用Intent方法進(jìn)入信息錄入界面(SNoInput.java)。停留效果由子線程方法實(shí)現(xiàn)。[2]主線程建立歡迎界面后,用戶新建一個(gè)子線程實(shí)例,用子線程實(shí)現(xiàn)規(guī)定時(shí)間的延遲,結(jié)束后告訴主線程進(jìn)行用戶界面(User Interface簡稱:UI)刷新,從而產(chǎn)生了屏幕停留的效果。實(shí)例代碼如圖3所示。
3.1.2 學(xué)生信息輸入界面
SNoInput.java實(shí)現(xiàn)學(xué)生輸入學(xué)號(hào)和網(wǎng)絡(luò)獲取詳細(xì)課表兩個(gè)功能,其中網(wǎng)絡(luò)處理部分是整個(gè)程序的核心和難點(diǎn)。數(shù)據(jù)從服務(wù)器端通過網(wǎng)絡(luò)傳入手機(jī)客戶端時(shí)往往會(huì)產(chǎn)生延遲現(xiàn)象,延遲可能在1s以內(nèi),也可能會(huì)達(dá)到4~5秒或者更長。[3]Android程序運(yùn)行后默認(rèn)情況下在一個(gè)線程內(nèi),UI更新、數(shù)據(jù)處理是一步一步進(jìn)行的。如果網(wǎng)絡(luò)延遲很短,點(diǎn)擊查詢后很快會(huì)進(jìn)入課表顯示界面。一般來講,延遲超過3秒,手機(jī)會(huì)產(chǎn)生假死機(jī)現(xiàn)象,就會(huì)嚴(yán)重影響程序的用戶體驗(yàn)。網(wǎng)絡(luò)性能決定延遲的長短,處理延遲的最好方法就是將網(wǎng)絡(luò)處理與主程序線程分開處理,也就是異步任務(wù)機(jī)制,Android提供了工具類android.os.asynctask來實(shí)現(xiàn)該機(jī)制。SNoInput.java使用Asynctask創(chuàng)建異步任務(wù)來解決網(wǎng)絡(luò)延遲問題,代碼如圖4所示。
3.1.3 課表詳細(xì)顯示界面
Android標(biāo)準(zhǔn)庫中的GridView類用表格的排列方法顯示數(shù)據(jù)。[4]以節(jié)次——星期關(guān)系按照表格的形式顯示課程名稱,在課表的每個(gè)窗格的onClick事件中觸發(fā)Dialog,顯示詳細(xì)信息,如圖5所示。
App SERVER服務(wù)器端是客戶端和學(xué)校教務(wù)Oracle數(shù)據(jù)庫的紐帶,它首先要考慮數(shù)據(jù)安全和系統(tǒng)負(fù)載。安全方面,底層操作系統(tǒng)選用Linux3.0,代碼使用Shell腳本和PHP語言共同編寫,采用多層次防護(hù)安全策略,這樣可以有效地增加系統(tǒng)安全性;同時(shí)系統(tǒng)對所有的客戶端請求進(jìn)行安全掃描,過濾敏感SQL查詢語句。PHP調(diào)用原生Oracle數(shù)據(jù)庫接口,直接與學(xué)校教務(wù)數(shù)據(jù)庫進(jìn)行通信,SQL查詢課程表的實(shí)例代碼如圖6所示。
圖3 屏幕延遲代碼及效果圖
圖4 異步任務(wù)機(jī)制處理代碼及截圖
圖5 課表顯示代碼與截圖
圖6 SQL查詢語句的實(shí)現(xiàn)代碼實(shí)例
在Oracle數(shù)據(jù)庫上的查詢均優(yōu)化為單表查詢,查詢的結(jié)果返回App SERVER服務(wù)器上后進(jìn)行重新封裝的,這樣數(shù)據(jù)處理工作全部轉(zhuǎn)移到App SERVER服務(wù)器上,將數(shù)據(jù)庫的負(fù)載降到了最低。
文中實(shí)現(xiàn)的課表查詢軟件是基于Android平臺(tái)的查詢服務(wù),利用教務(wù)Oracle服務(wù)器數(shù)據(jù)接口,制作APP SERVER服務(wù)器對課表進(jìn)行查詢,客戶端手機(jī)列出詳細(xì)的課表信息,并且在筆者工作單位進(jìn)行了應(yīng)用。通過移動(dòng)通信網(wǎng)絡(luò)與手機(jī)課表應(yīng)用服務(wù)器之間的互聯(lián)通信,提供給學(xué)生各種與課程有關(guān)的信息,方便了師生的生活和學(xué)習(xí)。
附程序下載地址:http://dep.tsnc.edu.cn/android/tsncjw.php
[1]沈文瑞,曾連蓀,楊臻.基于Android平臺(tái)的校園導(dǎo)覽軟件設(shè)計(jì)[J].電子設(shè)計(jì)工程,2012,(9):26-28.
[2]郭宏志.Android應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[3]佘志龍.Google Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2010.
[4]Meier R.Android 2 高級(jí)編程[M].2版.王超,譯.北京:清華大學(xué)出版社,2010.
天水師范學(xué)院學(xué)報(bào)2013年2期