馬 可,黃恒熠,栗云鵬
1(河海大學 機電工程學院,常州 213022)
2(南京航空航天大學 計算機科學與技術學院,南京 211106)
3(浩鯨云計算科技股份有限公司,南京 211153)
高校擁有大量的座位資源供學生自習,包括圖書館、自習室和實驗室等,但高校的座位管理存在很多難題,如占座嚴重、尋座困難、難以統(tǒng)一管理等[1,2].已有不少高校采用了各種圖書館座位管理系統(tǒng)進行圖書館座位分配[3-5],一定程度上緩解了占座問題,但諸如尋座困難、難以統(tǒng)一管理等問題依舊存在.
基于FSR 薄膜傳感器[6,7]檢測終端的C/S 架構的高校座位管理系統(tǒng)可以有效的解決上述問題,在座位中配置檢測終端進行座位使用情況的判定,生成檢測數(shù)據(jù),由管理系統(tǒng)對座位情況和使用用戶進行記錄,由管理員進行座位使用規(guī)則的獨立設定,學生可以通過移動APP 進行座位的查詢和預約,實現(xiàn)座位的獨立設置規(guī)則并統(tǒng)一管理,方便學生預約,減少學生尋座時間,快速排查占座行為,提高座位的有效利用率和管理效率.
高校座位信息管理系統(tǒng)是一個對高校所有座位以及與座位相關的使用規(guī)則進行統(tǒng)一管理,為管理者和用戶提供統(tǒng)一規(guī)范的系統(tǒng).該系統(tǒng)主要適用于高校管理者對高校座位資源的管理和高校師生對高校座位資源的查詢和使用.管理系統(tǒng)必須滿足以下需求:
(1)數(shù)據(jù)資源的有效管理
① 實現(xiàn)系統(tǒng)數(shù)據(jù)資源的存儲,通過本地以及云端,可靠地存儲座位使用情況的相關信息和數(shù)據(jù);② 實現(xiàn)數(shù)據(jù)及數(shù)據(jù)庫的管理和維護,為系統(tǒng)各項數(shù)據(jù)進行存儲、查詢、修改和校驗等,并提供文檔、圖片等不同數(shù)據(jù)的傳輸.
(2)數(shù)據(jù)資源的共享與適用
該管理系統(tǒng)適用于高校管理,是高校管理的組成部分,系統(tǒng)的各類信息和數(shù)據(jù)應符合高校管理的規(guī)范,數(shù)據(jù)類型與結構與高校管理的其他系統(tǒng)相統(tǒng)一,確保管理人員能夠獲取正確的數(shù)據(jù).
(3)用戶友好和界面友善
該系統(tǒng)需為用戶提供便捷的登陸注冊界面以及系統(tǒng)座位信息服務界面,用戶登陸后系統(tǒng)按照用戶的身份權限為用戶規(guī)劃出可以使用的座位和可以預約的座位,用戶可以通過點擊對應的設備來操作符合其權限的設備,進行業(yè)務的操作和實現(xiàn),使得用戶可以通過簡單的操作完成系統(tǒng)的任務,提高工作效率.
(4)功能的可擴展性
該系統(tǒng)為高校座位管理服務,需要提供座位查詢、預約、管理等基本功能,同時還需要能夠高效的擴展,以滿足高校座位管理的新需求.
整個系統(tǒng)可分為3 個部分,包括用戶端應用、云服務器端應用和檢測終端.用戶端應用面向使用者,提供交互服務;云服務器端應用負責邏輯處理和數(shù)據(jù)存儲;檢測終端作為硬件檢測設施,與座位配套,負責檢測座位的使用情況.為了實現(xiàn)系統(tǒng)的可擴展性和易維護性目標,系統(tǒng)各個不同部分直接進行交互時,根據(jù)云服務器端應用的數(shù)據(jù)結構類型進行通信時數(shù)據(jù)的格式化規(guī)范.
高校座位包括了圖書館、自習室和實驗室等不同區(qū)域,各個區(qū)域的管理規(guī)范各不相同,負責的管理人員繁多,系統(tǒng)對各個區(qū)域的座位進行統(tǒng)一管理能夠提升管理的效率.針對系統(tǒng)需求的不同部分,將系統(tǒng)的功能模塊主要劃分為:用戶管理、座位配置、座位管理和座位檢測.系統(tǒng)的功能模塊如圖1所示.
(1)用戶管理模塊:即管理該系統(tǒng)的用戶,負責管理用戶的基本信息.包括用戶的注冊、用戶的信息錄入、用戶登陸與用戶退出、用戶信息修改、用戶注銷.為了滿足高校管理時信息的統(tǒng)一管理,系統(tǒng)除了開放用戶賬戶的注冊方式,也可以通過統(tǒng)一導入賬戶信息以創(chuàng)建用戶賬號,接入校園信息管理系統(tǒng),實現(xiàn)信息的共享.
(2)座位配置模塊:即管理如何配置該系統(tǒng)中的座位使用權限,面向高權限座位管理員.由各個區(qū)域的管理員對座位進行設置.該模塊主要包括了設置座位的啟用情況、修改座位的基礎信息和修改座位的使用權限等.通過對座位功能的統(tǒng)一設定,實現(xiàn)不同區(qū)域不同座位管理方式的自由設定,實現(xiàn)座位使用的自由、公開管理.
(3)座位管理模塊:即管理座位的使用,面用系統(tǒng)中高校座位使用者.包括為用戶獲取座位的基本信息,如座位的位置、使用方式、管理公告等,為用戶提供可用座位的查詢、座位的預約以及預約的取消,同時將座位信息進行圖形化顯示,為用戶記錄違規(guī)信息和使用時長,以供統(tǒng)計和管理.
(4)座位檢測模塊:即檢測座位的使用情況.該模塊主要包括了為座位配置對應的座位檢測設備,以及為座位檢測設備設置檢測間隔,包括座位檢測時間間隔和判定未使用的時長間隔等.
該高校座位信息管理系統(tǒng)包括了大量的數(shù)據(jù)通信和數(shù)據(jù)存儲等操作,采取C/S 架構進行開發(fā),需要明確處理數(shù)據(jù)的在網(wǎng)絡中的流動和管理.由于采取了C/S架構,系統(tǒng)中的數(shù)據(jù)流動可以按照需求進行設定,系統(tǒng)的數(shù)據(jù)流向圖如圖2所示.
圖2 系統(tǒng)的數(shù)據(jù)流向圖
系統(tǒng)中主要包含了用戶的請求數(shù)據(jù)和座位檢測數(shù)據(jù),數(shù)據(jù)作為信息的載體,在各個不同模塊間流動和傳輸,將系統(tǒng)的模塊連接起來,實現(xiàn)了系統(tǒng)各個模塊的解耦,利于系統(tǒng)的層次化設計.
按照系統(tǒng)需求和數(shù)據(jù)流設計,系統(tǒng)的總體架構設計如圖3,主要包括了移動手機APP[8]、云端應用服務器、座位檢測終端、座位檢測服務器、MySQL 數(shù)據(jù)庫服務器.
圖3 系統(tǒng)總體架構圖
系統(tǒng)架構將系統(tǒng)劃分為云端服務、用戶端交互、終端座位檢測3 個部分,各個部分功能可以獨立開發(fā),提高系統(tǒng)的開發(fā)效率和穩(wěn)定性.該系統(tǒng)架構適合采用廣泛的C/S 開發(fā)模式,并適合于將系統(tǒng)劃分為“用戶界面/數(shù)據(jù)采集—功能邏輯—數(shù)據(jù)庫”的3 個層次.對系統(tǒng)進行該架構的劃分使得系統(tǒng)各個部分獨立開發(fā),使得各個層次的功能透明,便于各個層次的獨立維護和擴展.
根據(jù)功能的可擴展性的需求,該系統(tǒng)采用了Android MVP 設計模式進行系統(tǒng)的開發(fā),使得系統(tǒng)劃分為了4 層:用戶應用層、邏輯服務層、數(shù)據(jù)模型層、數(shù)據(jù)存儲層.系統(tǒng)的軟件架構如圖4.
圖4 系統(tǒng)軟件架構圖
采用Android MVP 設計模式的優(yōu)點在于:系統(tǒng)的各個部分相對獨立,開發(fā)者可以將一個功能拆分為多個部分進行開發(fā),使得代碼有極高的可讀性,功能實現(xiàn)十分明晰.通過面向接口,隱藏和忽略其他層的實現(xiàn)方式,使得開發(fā)者可以實現(xiàn)各層的獨立設計,也使得系統(tǒng)的功能可以高效的進行擴展和維護.
其中用戶應用層主要負責交互、顯示以及座位使用情況的檢測,主要對應了用戶應用的APP 界面和座位檢測終端;其中邏輯服務層主要負責功能的邏輯實現(xiàn),對應了用戶應用中的控制層和服務器應用的邏輯層;其中數(shù)據(jù)模型層主要負責數(shù)據(jù)的面向?qū)ο蟮膶嶓w類的管理以及數(shù)據(jù)庫的操作;其中數(shù)據(jù)存儲層主要包括了MySQL 數(shù)據(jù)庫服務器和本地數(shù)據(jù)庫SQLite,分別負責系統(tǒng)的數(shù)據(jù)存儲管理和用戶應用的本地數(shù)據(jù)存儲.
此系統(tǒng)為了實現(xiàn)作為的統(tǒng)一管理,需要設計終端進行座位信息的綁定以及使用情況的檢測,通過硬件終端檢測座位使用情況,可以生成座位管理需要的大量數(shù)據(jù),便于后續(xù)的統(tǒng)計和分析,本系統(tǒng)的座位檢測終端原理如圖5所示.
圖5 檢測終端原理圖
檢測終端將實驗室、自習室和圖書館等不同的區(qū)域中的座位錄入系統(tǒng),并在每個錄入系統(tǒng)的座位上安裝檢測終端,使用FSR 薄膜傳感器,能夠檢測出座位是否有人使用,檢測結果通過A/D 轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號,經(jīng)Arduino 平臺上的nRF24L01 無線模塊傳輸數(shù)據(jù)到上位機.系統(tǒng)使用基于ARM的微型電腦Raspberry Pi 作為檢測終端上位機,接收檢測終端數(shù)據(jù),并上傳到網(wǎng)絡服務器中,并由服務器系統(tǒng)軟件對檢測數(shù)據(jù)進行處理,結合服務器系統(tǒng)軟件提供的其他功能子模塊,向用戶端軟件提供系統(tǒng)功能,實現(xiàn)對高校實驗室、自習室和圖書館的不同資源進行統(tǒng)一管理.
(1)技術思路
MVP的核心在于將程序中的視圖和數(shù)據(jù)分離,減輕Activity[9,10]的負擔,也使得程序的邏輯更加簡潔.其中,M 層負責數(shù)據(jù)的獲取,V 層負責視圖的處理,P 層負責邏輯的實現(xiàn).其中V 層不直接調(diào)用M 層也不持有V 層,而是由P 層持有V 層對象和M 層對象,作為中介來獲取數(shù)據(jù)[11,12].雖然在一定程度上加大了代碼量,但是在邏輯上的簡潔性和明確性使得這個缺點可以承受.
(2)具體的分層結構
該系統(tǒng)采用MVP的思想進行構建,分別構建了M 層、V 層和P 層,項目結構圖見圖6.
圖6 項目結構圖
圖6中MyView對應的是V 層,model對應的是M 層,presenter對應的是P 層,util是常用工具類.MyView 下包含了Activity 類、fragment 類和自定義view 類以及對應的視圖接口類;model 下包含了實體的抽象類Bean、網(wǎng)絡請求的自定義bean 類、用于本地數(shù)據(jù)庫查詢的DAO 類和用于網(wǎng)絡HTTP 請求的Moudle 類;presenter 包含了層現(xiàn)器類和層現(xiàn)器的接口類.
(3)以單個功能模塊的數(shù)據(jù)流為例,系統(tǒng)實現(xiàn)MVP 設計思想的流程如下:
① Activity 繼承對應的View 接口,實現(xiàn)其中方法;
② Activity在OnCreate()中綁定用戶信息實體的父容器LinearLayout,并實例化對應的Presenter 層現(xiàn)器,調(diào)用層現(xiàn)器中檢查用戶身份表版本的方法checkUserRoleVersion()和請求加載用戶數(shù)據(jù)的請求getSeatPartUser(Seat seat);
③ 層現(xiàn)器通過在實例化時持有View對象,并創(chuàng)建Moudle對象和DAO對象;
④ 層現(xiàn)器調(diào)用Moudle 中網(wǎng)絡請求方法獲取用戶數(shù)據(jù),調(diào)用DAO 中數(shù)據(jù)庫請求方法獲取本地數(shù)據(jù)庫數(shù)據(jù);
⑤ 返回結果數(shù)據(jù)后,Moudle 回調(diào)層現(xiàn)器方法,層現(xiàn)器回調(diào)View 方法,將數(shù)據(jù)返回到頁面Activity;
⑥ Activity 調(diào)用動態(tài)創(chuàng)建實體方法,利用得到的數(shù)據(jù)完成頁面更新.
數(shù)據(jù)的持久化[13]是該系統(tǒng)的核心技術之一,在服務器端通過使用數(shù)據(jù)庫進行數(shù)據(jù)的持久化,通過數(shù)據(jù)類型映射進行數(shù)據(jù)的訪問和存儲,并通過JavaBean 技術進行服務器與移動端應用的數(shù)據(jù)交互.在Android移動端應用中,對于數(shù)據(jù)的本地存儲也有一定的需求,為了能夠應對不同大小、不同類型的數(shù)據(jù),本系統(tǒng)實現(xiàn)了SharedPreference、SQLite 存儲方式.
(1)數(shù)據(jù)類型映射
本系統(tǒng)中包括了大量不同類型的數(shù)據(jù),在數(shù)據(jù)庫中建立數(shù)據(jù)了對應的條目,為了實現(xiàn)數(shù)據(jù)庫中的數(shù)據(jù)在系統(tǒng)應用中的流動和交互,系統(tǒng)設計了對應的數(shù)據(jù)映射類型,實現(xiàn)數(shù)據(jù)格式的統(tǒng)一化,有利于數(shù)據(jù)的網(wǎng)絡交互的數(shù)據(jù)庫存儲讀取規(guī)范化.其中最核心的數(shù)據(jù)映射類型包括了用戶類User、座位類Seat、用戶身分類UserRoleBean、座位預約類Appointment.以用戶類為例,其映射結構如下:
@Setter
@Getter
@ToString
public class User {
@NotBlank
private String userId;
private String userName;
…
}
(2)SharedPreference
對于系統(tǒng)中常用的一些數(shù)據(jù),如簡單參數(shù)和系統(tǒng)狀態(tài)等,若其數(shù)據(jù)量較小,本系統(tǒng)將其存儲在XML 格式的文件中.
以本系統(tǒng)進行暫存當前用戶登陸狀態(tài)和基本信息的SharedPreference為例:存儲路徑如下:/data/data/com.SSHHY/shared_prefs/userinfo.xml
流程:實例化SharedPreferences對象,存儲Shared-Preferences對象,讀取SharedPreferences對象.
其代碼實現(xiàn)如下:
# 實例化SharedPreferences對象
private SharedPreferences sharedPreferences;
# 讀取SharedPreferences對象
sharedPreferences=getSharedPreferences(“userinfo”,Context.MODE_PRIVATE);
Boolean loginFlag=sharedPreferences.getBoolean(“l(fā)oginFlag”,false);
# 修改和存儲SharedPreferences對象
SharedPreferences.Editor editor=sharedPreferences.edit();
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.apply();
(3)SQLite
對于系統(tǒng)中的基礎數(shù)據(jù),當其數(shù)據(jù)量相對較大時,本系統(tǒng)使用SQLite 輕量級數(shù)據(jù)庫進行存儲,存儲在db 格式的文件中.
以本系統(tǒng)中的SQLite 數(shù)據(jù)庫為例,存儲路徑如下:/data/data/com.SSHHY/databases/myDemo.db
SQLite 數(shù)據(jù)庫支持SQL 語法,同時Android 提供了SQLiteOpenHelper 類進行操作.為了使得數(shù)據(jù)庫操作的邏輯符合MVP的思想,本系統(tǒng)開發(fā)時將SQLite數(shù)據(jù)庫的操作劃分入M 層,由專門的DAO 類進行操作.所有對數(shù)據(jù)庫的操作均從Activity的UI 主線程分離出來,由P 層作為中介進行連接.
為了進行數(shù)據(jù)庫的查詢等操作時,建立了對應數(shù)據(jù)庫的DAO 類,通過持有DBHelper對象實現(xiàn)數(shù)據(jù)庫的增刪改查.結合數(shù)據(jù)的存儲和訪問技術,通過數(shù)據(jù)類型的映射,可便捷實現(xiàn)用戶端雨數(shù)據(jù)庫的交互.
(1)登陸注冊界面
用戶通過該界面進行新賬號的申請,也可以通過已有賬號的用戶賬戶和密碼進行登陸,如圖7.
圖7 登陸注冊界面
(2)個人信息及查詢界面
用戶完成登陸后進行個人信息界面,查看、完善和修改個人的信息;可以進行查詢,按照頂部導航欄中的下拉框進行選擇即可查詢得出該教室中所有座位的使用情況如圖8.
圖8 個人信息及查詢界面
(3)預約提示
用戶查詢到座位后,對座位進行點擊即可對該座位進行預約,系統(tǒng)按照座位的使用情況、管理員設置的使用期限和用戶個人權限進行預約,并彈出對應的提示框進行提示預約情況,如圖9.
圖9 預約提示
(4)預約界面
用戶成功完成預約后自動進去預約界面,期間無法進行其他座位的查詢和預約,用戶在預約時間未按時使用座位或離開座位時間過久會被自動取消座位預約資格,防止用戶占座行為,如圖10.
圖10 預約界面
(1)檢測終端的連接
系統(tǒng)使用檢測終端檢測座位使用情況,使用Arduino作為檢測終端上位機,由Arduino 連接樹莓派服務器.如圖11所示.其中檢測終端包含了FSR 薄膜傳感器、數(shù)模轉(zhuǎn)換器、LED 顯示燈、離座按鍵.FSR 薄膜傳感器檢測時不會對10 kg 以下的書包、書籍等物品產(chǎn)生檢測值,只會對超過40 kg的人坐到座位上時才會產(chǎn)生檢測值.FSR 薄膜傳感器通過數(shù)模轉(zhuǎn)換器連接到Arduino,將產(chǎn)生的數(shù)字量轉(zhuǎn)變成模擬量,傳輸?shù)紸rduino可以識別的數(shù)據(jù).LED 顯示燈由兩個不同的LED 組成,一個燈在按下離座按鍵時亮起,指示暫離,另一個燈亮起指示違規(guī).Arduino 通過nRF24L01 芯片射頻通信與上位機樹莓派進行連接,將數(shù)據(jù)傳輸至樹莓派.
圖11 檢測終端連接示意圖
(2)檢測終端的通信配置
系統(tǒng)在投入使用前,需要配置網(wǎng)絡設備保證檢測終端與互聯(lián)網(wǎng)聯(lián)通.檢測終端中,使用Arduino 通過nRF24L01 芯片射頻通信與上位機樹莓派進行連接,將數(shù)據(jù)傳輸至樹莓派.樹莓派連接至互聯(lián)網(wǎng)公網(wǎng),樹莓派中安裝Tomcat 網(wǎng)絡服務器,利用Tomcat 訪問服務器的公網(wǎng)IP 地址,將數(shù)據(jù)發(fā)送至服務器的規(guī)定端口.服務器開放對應端口,以接收數(shù)據(jù).服務器開放對應端口以接收數(shù)據(jù),如圖12所示,其中80 端口為Tomcat 服務器默認端口,8081為APP的服務器網(wǎng)絡服務端口,6000和7000為FRP 內(nèi)網(wǎng)穿透端口,20和21是FTP服務端口.通過訪問服務器公網(wǎng)IP 地址下的對應端口號,以訪問對應的服務或上傳對應的數(shù)據(jù).
圖12 服務器開放端口
(3)檢測終端讀取的代碼示例
FSR 薄膜傳感器連接到Arduino的模擬輸入引腳讀取數(shù)值引腳后,可以由Arduino 讀取其模擬輸入數(shù)值,使用analogRead(pin)函數(shù)可以讀取0 到1023 之間的值,代表的是0-5 V的電壓信號,這個電壓值可以用于后續(xù)估計薄膜傳感器上受到的壓力范圍,并可以通過串口監(jiān)視器顯示.其代碼實現(xiàn)如下:
int val_AD=0;
void setup()
{
Serial.begin(9600);
}
void sloop()
{
val_AD=analogRead(A0);
Serial.println(val_AD);
delay(20);
}
本文對高校座位的信息化管理進行探索,研究了對應的軟件管理系統(tǒng),有利于數(shù)據(jù)的統(tǒng)一管理、信息的安全存儲,為相關管理人員提高了統(tǒng)一的人員導入、規(guī)則設定、信息統(tǒng)計等功能,為高校座位的統(tǒng)一管理提供了更便捷、更可靠的管理方式.滿足了管理員對信息化管理的需求,方便高校用戶對高校資源的利用率,提高高校管理的信息化水平,提高管理人員的管理效率,在實際測試中,滿足了使用者的基本使用需求.