楊濤,謝青伶


摘要:針對(duì)大學(xué)師生在平時(shí)生活中對(duì)課程以及備忘錄管理的需求,利用網(wǎng)絡(luò)爬蟲、控件自定義、數(shù)據(jù)庫(kù)等技術(shù),在Android平臺(tái)上設(shè)計(jì)一款課程表+日程的管理系統(tǒng),使用okhttp3框架從教務(wù)系統(tǒng)爬取課表信息,將課程信息以及日常事務(wù)信息保存在數(shù)據(jù)庫(kù),并且集合在同一個(gè)界面顯示。以簡(jiǎn)潔的界面布局給用戶提供日常事務(wù)的查看、提醒等功能。將信息整合在一起,有助于校園師生管理時(shí)間,提高學(xué)習(xí)生活的效率。
關(guān)鍵詞:課表;Android;網(wǎng)絡(luò)爬蟲;OKHttp3;RecyclerView
中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)19-0073-03
隨著當(dāng)今世界互聯(lián)網(wǎng)的快速發(fā)展,智能移動(dòng)設(shè)備在大學(xué)中的普及率大大提高。廣大師生越來(lái)越喜歡用手機(jī)上的軟件來(lái)處理日常事務(wù)[1],所以市面上也出現(xiàn)了大批的移動(dòng)化課程表供學(xué)生們使用。但通過(guò)調(diào)查發(fā)現(xiàn)多數(shù)課程表都沒(méi)有將課程與用戶日常事務(wù)充分結(jié)合,可視化效果不友好。針對(duì)當(dāng)前情況可以設(shè)計(jì)一款將課程信息與用戶日常事務(wù)整合至同一視圖的App,致力于提高用戶時(shí)間管理效率。Android開發(fā)是目前主要的手機(jī)軟件開發(fā)方式之一[2]。Android系統(tǒng)作為一個(gè)開源手機(jī)操作系統(tǒng),具有拓展性強(qiáng)、操作方便等特點(diǎn),符合當(dāng)下移動(dòng)互聯(lián)網(wǎng)應(yīng)用開發(fā)的需求。目前Android 技術(shù)開發(fā)的應(yīng)用程序主要以Java 語(yǔ)言和Kotlin為基礎(chǔ),實(shí)用性好,易于擴(kuò)展,應(yīng)用前景非常廣闊[3] 。本文論述了一款“課程表+備忘錄”App的設(shè)計(jì)與開發(fā)過(guò)程。
1 總體設(shè)計(jì)
軟件開發(fā)工具使用AndroidStudio,基于Android平臺(tái)設(shè)計(jì)了一款課程表+日程的管理系統(tǒng),通過(guò)使用OKHttp3框架從教務(wù)系統(tǒng)爬取課表信息,再將大學(xué)生的課程信息以及日常事務(wù)保存在數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)設(shè)計(jì)表如表1所示,其中:
1)tb_course課程表:包括表的主鍵Cid,作為唯一標(biāo)識(shí);Cname用于記錄課程名稱;Ctime存儲(chǔ)課程的時(shí)間,用于計(jì)算課程持續(xù)時(shí)長(zhǎng);Ctype用于存儲(chǔ)課程類型(選修、必修);Tname用于存儲(chǔ)任課教師的姓名;Classroom用于存儲(chǔ)某個(gè)課程的教室地點(diǎn)。
2)tb_schedule日程表: 包括表的主鍵Sid,作為唯一標(biāo)識(shí);Scontent用于記錄日程內(nèi)容;Stime記錄事務(wù)時(shí)間(包括開始時(shí)間和結(jié)束時(shí)間);Stype存儲(chǔ)日程事務(wù)類型;Swarm用于存儲(chǔ)用戶選擇的提醒方式。
3)tb_user用戶表:包括用戶的唯一標(biāo)識(shí)useraccount(用戶手機(jī)號(hào)碼、昵稱或者學(xué)號(hào)等);passward記錄用戶密碼;sexy用于存儲(chǔ)用戶性別。
用戶能夠在界面上對(duì)事務(wù)進(jìn)行增、刪、改、查,數(shù)據(jù)庫(kù)也同步更新,以實(shí)現(xiàn)數(shù)據(jù)的長(zhǎng)期保存,通過(guò)調(diào)用數(shù)據(jù)庫(kù)中數(shù)據(jù)根據(jù)用戶需求拓展其他功能,如:課前提醒,今日事件等,同時(shí)設(shè)計(jì)的App應(yīng)從用戶的角度出發(fā),交互模式以可視化方式呈現(xiàn),支持用戶自定義風(fēng)格布局,遵循單手操作原則,為用戶提供符合自身喜好的操作界面以及使用上的便利。
2 系統(tǒng)功能模塊概述
根據(jù)需求“大笨鐘”時(shí)間管理App的設(shè)計(jì)劃分為四個(gè)功能模塊:登錄模塊、今日主頁(yè)模塊、日程查看模塊(日視圖、周視圖、月視圖、年視圖)、功能設(shè)置模塊。系統(tǒng)結(jié)構(gòu)圖如圖1所示。
2.1 登錄界面
登錄界面一開始加載初始化界面,隨后轉(zhuǎn)到登錄主界面,頂部顯示App 的商標(biāo),等待用戶填寫相關(guān)信息,通過(guò)對(duì)數(shù)據(jù)庫(kù)中用戶表的學(xué)號(hào)字段進(jìn)行查詢,若用戶存在則向服務(wù)器發(fā)起登錄請(qǐng)求,界面跳轉(zhuǎn)至日歷模塊;如果登錄失敗,沒(méi)有查詢到學(xué)號(hào)則提示用戶注冊(cè)。
2.2 今日主頁(yè)
本界面顯示的內(nèi)容有:下節(jié)課的課程信息,今日所添加的所有日程,用戶記錄的筆記。
2.3 日歷查看
該模塊為核心模塊,以日、周、月、年四個(gè)日歷時(shí)間視圖來(lái)顯示數(shù)據(jù)庫(kù)中的課表信息以及備忘錄日程。同時(shí)還支持刪除、修改、添加日程功能,上下滑動(dòng)切換視圖用戶操控更便捷。
2.4 功能設(shè)置
該模塊的功能包括修改用戶頭像、修改界面背景、專注時(shí)間功能、提供四、六級(jí)成績(jī)查詢?nèi)肟谝约懊咳胀扑]好書好句。
3 系統(tǒng)功能實(shí)現(xiàn)
3.1 用戶登錄
OKHttp3是一個(gè)當(dāng)前比較流行的用于安卓處理網(wǎng)絡(luò)請(qǐng)求的框架,相比于安卓提供的原生處理網(wǎng)絡(luò)請(qǐng)求類HttpUrlConnection,OKHttp3具有自動(dòng)重連,減少請(qǐng)求延遲,共享Socket來(lái)減少對(duì)服務(wù)器請(qǐng)求的次數(shù)等優(yōu)點(diǎn)。采用OKHttp3發(fā)起網(wǎng)絡(luò)請(qǐng)求從教務(wù)系統(tǒng)獲取驗(yàn)證碼圖片,然后加載到登錄界面的Imageview中。通過(guò)查看網(wǎng)頁(yè)源碼可知,服務(wù)器先把用戶選擇的用戶類型進(jìn)行了編碼,編碼格式是gb2312。當(dāng)用戶填寫學(xué)工號(hào),密碼和驗(yàn)證碼,下一步選擇老師或?qū)W生身份點(diǎn)擊登錄之后,后臺(tái)也同樣對(duì)用戶類型這一變量進(jìn)行該格式的編碼,生成表單。客戶端向教務(wù)系統(tǒng)服務(wù)器發(fā)起登錄請(qǐng)求提交表單,模擬登錄。若登錄失敗,提示錯(cuò)誤信息。驗(yàn)證碼也同時(shí)更換,重新向服務(wù)器發(fā)起請(qǐng)求獲取驗(yàn)證碼圖片,采用handle來(lái)處理異步線程通知主線程更新UI;登錄成功后進(jìn)入日歷查看模塊。
3.2 今日主頁(yè)
3.2.1 當(dāng)前課程
SQLite3是Android內(nèi)置的一個(gè)輕量級(jí)的關(guān)系型數(shù)據(jù)庫(kù),它的運(yùn)算速度非常快,資源占用率小,開發(fā)一款A(yù)pp通常情況下占用幾百K的內(nèi)存就足夠了。SQLite作為一款嵌入式數(shù)據(jù)庫(kù),不僅支持標(biāo)準(zhǔn)的SQL語(yǔ)法,還遵循了數(shù)據(jù)庫(kù)的ACID事務(wù)[4]。使用SQLite對(duì)數(shù)據(jù)庫(kù)進(jìn)行時(shí)間查詢,遍歷所有課程,返回當(dāng)天需要上的所有課程的集合。將當(dāng)前時(shí)間與返回的課程集合中所有課程的開始時(shí)間采用java.time包提供LocalDateTime方式兩兩進(jìn)行比較。轉(zhuǎn)換時(shí)間格式之后,使用duration計(jì)算時(shí)間差,得到距離當(dāng)前時(shí)間最小的時(shí)間差的課程,并將課程信息顯示在UI定義的相對(duì)布局管理器中。