馬 可,黃恒熠,栗云鵬
1(河海大學 機電工程學院,常州 213022)
2(南京航空航天大學 計算機科學與技術學院,南京 211106)
3(浩鯨云計算科技股份有限公司,南京 211153)
高校擁有大量的座位資源供學生自習,包括圖書館、自習室和實驗室等,但高校的座位管理存在很多難題,如占座嚴重、尋座困難、難以統一管理等[1,2].已有不少高校采用了各種圖書館座位管理系統進行圖書館座位分配[3-5],一定程度上緩解了占座問題,但諸如尋座困難、難以統一管理等問題依舊存在.
基于FSR 薄膜傳感器[6,7]檢測終端的C/S 架構的高校座位管理系統可以有效的解決上述問題,在座位中配置檢測終端進行座位使用情況的判定,生成檢測數據,由管理系統對座位情況和使用用戶進行記錄,由管理員進行座位使用規則的獨立設定,學生可以通過移動APP 進行座位的查詢和預約,實現座位的獨立設置規則并統一管理,方便學生預約,減少學生尋座時間,快速排查占座行為,提高座位的有效利用率和管理效率.
高校座位信息管理系統是一個對高校所有座位以及與座位相關的使用規則進行統一管理,為管理者和用戶提供統一規范的系統.該系統主要適用于高校管理者對高校座位資源的管理和高校師生對高校座位資源的查詢和使用.管理系統必須滿足以下需求:
(1)數據資源的有效管理
① 實現系統數據資源的存儲,通過本地以及云端,可靠地存儲座位使用情況的相關信息和數據;② 實現數據及數據庫的管理和維護,為系統各項數據進行存儲、查詢、修改和校驗等,并提供文檔、圖片等不同數據的傳輸.
(2)數據資源的共享與適用
該管理系統適用于高校管理,是高校管理的組成部分,系統的各類信息和數據應符合高校管理的規范,數據類型與結構與高校管理的其他系統相統一,確保管理人員能夠獲取正確的數據.
(3)用戶友好和界面友善
該系統需為用戶提供便捷的登陸注冊界面以及系統座位信息服務界面,用戶登陸后系統按照用戶的身份權限為用戶規劃出可以使用的座位和可以預約的座位,用戶可以通過點擊對應的設備來操作符合其權限的設備,進行業務的操作和實現,使得用戶可以通過簡單的操作完成系統的任務,提高工作效率.
(4)功能的可擴展性
該系統為高校座位管理服務,需要提供座位查詢、預約、管理等基本功能,同時還需要能夠高效的擴展,以滿足高校座位管理的新需求.
整個系統可分為3 個部分,包括用戶端應用、云服務器端應用和檢測終端.用戶端應用面向使用者,提供交互服務;云服務器端應用負責邏輯處理和數據存儲;檢測終端作為硬件檢測設施,與座位配套,負責檢測座位的使用情況.為了實現系統的可擴展性和易維護性目標,系統各個不同部分直接進行交互時,根據云服務器端應用的數據結構類型進行通信時數據的格式化規范.
高校座位包括了圖書館、自習室和實驗室等不同區域,各個區域的管理規范各不相同,負責的管理人員繁多,系統對各個區域的座位進行統一管理能夠提升管理的效率.針對系統需求的不同部分,將系統的功能模塊主要劃分為:用戶管理、座位配置、座位管理和座位檢測.系統的功能模塊如圖1所示.
(1)用戶管理模塊:即管理該系統的用戶,負責管理用戶的基本信息.包括用戶的注冊、用戶的信息錄入、用戶登陸與用戶退出、用戶信息修改、用戶注銷.為了滿足高校管理時信息的統一管理,系統除了開放用戶賬戶的注冊方式,也可以通過統一導入賬戶信息以創建用戶賬號,接入校園信息管理系統,實現信息的共享.
(2)座位配置模塊:即管理如何配置該系統中的座位使用權限,面向高權限座位管理員.由各個區域的管理員對座位進行設置.該模塊主要包括了設置座位的啟用情況、修改座位的基礎信息和修改座位的使用權限等.通過對座位功能的統一設定,實現不同區域不同座位管理方式的自由設定,實現座位使用的自由、公開管理.
(3)座位管理模塊:即管理座位的使用,面用系統中高校座位使用者.包括為用戶獲取座位的基本信息,如座位的位置、使用方式、管理公告等,為用戶提供可用座位的查詢、座位的預約以及預約的取消,同時將座位信息進行圖形化顯示,為用戶記錄違規信息和使用時長,以供統計和管理.
(4)座位檢測模塊:即檢測座位的使用情況.該模塊主要包括了為座位配置對應的座位檢測設備,以及為座位檢測設備設置檢測間隔,包括座位檢測時間間隔和判定未使用的時長間隔等.
該高校座位信息管理系統包括了大量的數據通信和數據存儲等操作,采取C/S 架構進行開發,需要明確處理數據的在網絡中的流動和管理.由于采取了C/S架構,系統中的數據流動可以按照需求進行設定,系統的數據流向圖如圖2所示.

圖2 系統的數據流向圖
系統中主要包含了用戶的請求數據和座位檢測數據,數據作為信息的載體,在各個不同模塊間流動和傳輸,將系統的模塊連接起來,實現了系統各個模塊的解耦,利于系統的層次化設計.
按照系統需求和數據流設計,系統的總體架構設計如圖3,主要包括了移動手機APP[8]、云端應用服務器、座位檢測終端、座位檢測服務器、MySQL 數據庫服務器.

圖3 系統總體架構圖
系統架構將系統劃分為云端服務、用戶端交互、終端座位檢測3 個部分,各個部分功能可以獨立開發,提高系統的開發效率和穩定性.該系統架構適合采用廣泛的C/S 開發模式,并適合于將系統劃分為“用戶界面/數據采集—功能邏輯—數據庫”的3 個層次.對系統進行該架構的劃分使得系統各個部分獨立開發,使得各個層次的功能透明,便于各個層次的獨立維護和擴展.
根據功能的可擴展性的需求,該系統采用了Android MVP 設計模式進行系統的開發,使得系統劃分為了4 層:用戶應用層、邏輯服務層、數據模型層、數據存儲層.系統的軟件架構如圖4.

圖4 系統軟件架構圖
采用Android MVP 設計模式的優點在于:系統的各個部分相對獨立,開發者可以將一個功能拆分為多個部分進行開發,使得代碼有極高的可讀性,功能實現十分明晰.通過面向接口,隱藏和忽略其他層的實現方式,使得開發者可以實現各層的獨立設計,也使得系統的功能可以高效的進行擴展和維護.
其中用戶應用層主要負責交互、顯示以及座位使用情況的檢測,主要對應了用戶應用的APP 界面和座位檢測終端;其中邏輯服務層主要負責功能的邏輯實現,對應了用戶應用中的控制層和服務器應用的邏輯層;其中數據模型層主要負責數據的面向對象的實體類的管理以及數據庫的操作;其中數據存儲層主要包括了MySQL 數據庫服務器和本地數據庫SQLite,分別負責系統的數據存儲管理和用戶應用的本地數據存儲.
此系統為了實現作為的統一管理,需要設計終端進行座位信息的綁定以及使用情況的檢測,通過硬件終端檢測座位使用情況,可以生成座位管理需要的大量數據,便于后續的統計和分析,本系統的座位檢測終端原理如圖5所示.

圖5 檢測終端原理圖
檢測終端將實驗室、自習室和圖書館等不同的區域中的座位錄入系統,并在每個錄入系統的座位上安裝檢測終端,使用FSR 薄膜傳感器,能夠檢測出座位是否有人使用,檢測結果通過A/D 轉換器轉換為數字信號,經Arduino 平臺上的nRF24L01 無線模塊傳輸數據到上位機.系統使用基于ARM的微型電腦Raspberry Pi 作為檢測終端上位機,接收檢測終端數據,并上傳到網絡服務器中,并由服務器系統軟件對檢測數據進行處理,結合服務器系統軟件提供的其他功能子模塊,向用戶端軟件提供系統功能,實現對高校實驗室、自習室和圖書館的不同資源進行統一管理.
(1)技術思路
MVP的核心在于將程序中的視圖和數據分離,減輕Activity[9,10]的負擔,也使得程序的邏輯更加簡潔.其中,M 層負責數據的獲取,V 層負責視圖的處理,P 層負責邏輯的實現.其中V 層不直接調用M 層也不持有V 層,而是由P 層持有V 層對象和M 層對象,作為中介來獲取數據[11,12].雖然在一定程度上加大了代碼量,但是在邏輯上的簡潔性和明確性使得這個缺點可以承受.
(2)具體的分層結構
該系統采用MVP的思想進行構建,分別構建了M 層、V 層和P 層,項目結構圖見圖6.

圖6 項目結構圖
圖6中MyView對應的是V 層,model對應的是M 層,presenter對應的是P 層,util是常用工具類.MyView 下包含了Activity 類、fragment 類和自定義view 類以及對應的視圖接口類;model 下包含了實體的抽象類Bean、網絡請求的自定義bean 類、用于本地數據庫查詢的DAO 類和用于網絡HTTP 請求的Moudle 類;presenter 包含了層現器類和層現器的接口類.
(3)以單個功能模塊的數據流為例,系統實現MVP 設計思想的流程如下:
① Activity 繼承對應的View 接口,實現其中方法;
② Activity在OnCreate()中綁定用戶信息實體的父容器LinearLayout,并實例化對應的Presenter 層現器,調用層現器中檢查用戶身份表版本的方法checkUserRoleVersion()和請求加載用戶數據的請求getSeatPartUser(Seat seat);
③ 層現器通過在實例化時持有View對象,并創建Moudle對象和DAO對象;
④ 層現器調用Moudle 中網絡請求方法獲取用戶數據,調用DAO 中數據庫請求方法獲取本地數據庫數據;
⑤ 返回結果數據后,Moudle 回調層現器方法,層現器回調View 方法,將數據返回到頁面Activity;
⑥ Activity 調用動態創建實體方法,利用得到的數據完成頁面更新.
數據的持久化[13]是該系統的核心技術之一,在服務器端通過使用數據庫進行數據的持久化,通過數據類型映射進行數據的訪問和存儲,并通過JavaBean 技術進行服務器與移動端應用的數據交互.在Android移動端應用中,對于數據的本地存儲也有一定的需求,為了能夠應對不同大小、不同類型的數據,本系統實現了SharedPreference、SQLite 存儲方式.
(1)數據類型映射
本系統中包括了大量不同類型的數據,在數據庫中建立數據了對應的條目,為了實現數據庫中的數據在系統應用中的流動和交互,系統設計了對應的數據映射類型,實現數據格式的統一化,有利于數據的網絡交互的數據庫存儲讀取規范化.其中最核心的數據映射類型包括了用戶類User、座位類Seat、用戶身分類UserRoleBean、座位預約類Appointment.以用戶類為例,其映射結構如下:
@Setter
@Getter
@ToString
public class User {
@NotBlank
private String userId;
private String userName;
…
}
(2)SharedPreference
對于系統中常用的一些數據,如簡單參數和系統狀態等,若其數據量較小,本系統將其存儲在XML 格式的文件中.
以本系統進行暫存當前用戶登陸狀態和基本信息的SharedPreference為例:存儲路徑如下:/data/data/com.SSHHY/shared_prefs/userinfo.xml
流程:實例化SharedPreferences對象,存儲Shared-Preferences對象,讀取SharedPreferences對象.
其代碼實現如下:
# 實例化SharedPreferences對象
private SharedPreferences sharedPreferences;
# 讀取SharedPreferences對象
sharedPreferences=getSharedPreferences(“userinfo”,Context.MODE_PRIVATE);
Boolean loginFlag=sharedPreferences.getBoolean(“loginFlag”,false);
# 修改和存儲SharedPreferences對象
SharedPreferences.Editor editor=sharedPreferences.edit();
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.apply();
(3)SQLite
對于系統中的基礎數據,當其數據量相對較大時,本系統使用SQLite 輕量級數據庫進行存儲,存儲在db 格式的文件中.
以本系統中的SQLite 數據庫為例,存儲路徑如下:/data/data/com.SSHHY/databases/myDemo.db
SQLite 數據庫支持SQL 語法,同時Android 提供了SQLiteOpenHelper 類進行操作.為了使得數據庫操作的邏輯符合MVP的思想,本系統開發時將SQLite數據庫的操作劃分入M 層,由專門的DAO 類進行操作.所有對數據庫的操作均從Activity的UI 主線程分離出來,由P 層作為中介進行連接.
為了進行數據庫的查詢等操作時,建立了對應數據庫的DAO 類,通過持有DBHelper對象實現數據庫的增刪改查.結合數據的存儲和訪問技術,通過數據類型的映射,可便捷實現用戶端雨數據庫的交互.
(1)登陸注冊界面
用戶通過該界面進行新賬號的申請,也可以通過已有賬號的用戶賬戶和密碼進行登陸,如圖7.

圖7 登陸注冊界面
(2)個人信息及查詢界面
用戶完成登陸后進行個人信息界面,查看、完善和修改個人的信息;可以進行查詢,按照頂部導航欄中的下拉框進行選擇即可查詢得出該教室中所有座位的使用情況如圖8.

圖8 個人信息及查詢界面
(3)預約提示
用戶查詢到座位后,對座位進行點擊即可對該座位進行預約,系統按照座位的使用情況、管理員設置的使用期限和用戶個人權限進行預約,并彈出對應的提示框進行提示預約情況,如圖9.

圖9 預約提示
(4)預約界面
用戶成功完成預約后自動進去預約界面,期間無法進行其他座位的查詢和預約,用戶在預約時間未按時使用座位或離開座位時間過久會被自動取消座位預約資格,防止用戶占座行為,如圖10.

圖10 預約界面
(1)檢測終端的連接
系統使用檢測終端檢測座位使用情況,使用Arduino作為檢測終端上位機,由Arduino 連接樹莓派服務器.如圖11所示.其中檢測終端包含了FSR 薄膜傳感器、數模轉換器、LED 顯示燈、離座按鍵.FSR 薄膜傳感器檢測時不會對10 kg 以下的書包、書籍等物品產生檢測值,只會對超過40 kg的人坐到座位上時才會產生檢測值.FSR 薄膜傳感器通過數模轉換器連接到Arduino,將產生的數字量轉變成模擬量,傳輸到Arduino可以識別的數據.LED 顯示燈由兩個不同的LED 組成,一個燈在按下離座按鍵時亮起,指示暫離,另一個燈亮起指示違規.Arduino 通過nRF24L01 芯片射頻通信與上位機樹莓派進行連接,將數據傳輸至樹莓派.

圖11 檢測終端連接示意圖
(2)檢測終端的通信配置
系統在投入使用前,需要配置網絡設備保證檢測終端與互聯網聯通.檢測終端中,使用Arduino 通過nRF24L01 芯片射頻通信與上位機樹莓派進行連接,將數據傳輸至樹莓派.樹莓派連接至互聯網公網,樹莓派中安裝Tomcat 網絡服務器,利用Tomcat 訪問服務器的公網IP 地址,將數據發送至服務器的規定端口.服務器開放對應端口,以接收數據.服務器開放對應端口以接收數據,如圖12所示,其中80 端口為Tomcat 服務器默認端口,8081為APP的服務器網絡服務端口,6000和7000為FRP 內網穿透端口,20和21是FTP服務端口.通過訪問服務器公網IP 地址下的對應端口號,以訪問對應的服務或上傳對應的數據.

圖12 服務器開放端口
(3)檢測終端讀取的代碼示例
FSR 薄膜傳感器連接到Arduino的模擬輸入引腳讀取數值引腳后,可以由Arduino 讀取其模擬輸入數值,使用analogRead(pin)函數可以讀取0 到1023 之間的值,代表的是0-5 V的電壓信號,這個電壓值可以用于后續估計薄膜傳感器上受到的壓力范圍,并可以通過串口監視器顯示.其代碼實現如下:
int val_AD=0;
void setup()
{
Serial.begin(9600);
}
void sloop()
{
val_AD=analogRead(A0);
Serial.println(val_AD);
delay(20);
}
本文對高校座位的信息化管理進行探索,研究了對應的軟件管理系統,有利于數據的統一管理、信息的安全存儲,為相關管理人員提高了統一的人員導入、規則設定、信息統計等功能,為高校座位的統一管理提供了更便捷、更可靠的管理方式.滿足了管理員對信息化管理的需求,方便高校用戶對高校資源的利用率,提高高校管理的信息化水平,提高管理人員的管理效率,在實際測試中,滿足了使用者的基本使用需求.