李昆倫,劉志豪,周英洪,黃錚
(武漢理工大學信息工程學院,武漢430070)
圖書館是搜集、整理、收藏圖書資料以供人閱覽、參考的場所。而高校圖書館作為大學生的第二課堂,是以在校學生和教職員工為服務對象的學術(shù)性機構(gòu)[1]。雖然高校圖書館是頗受學生歡迎的學習場所,但座位資源有限,在某些特定時期(如考研季、考試周等)會出現(xiàn)座位供不應求的現(xiàn)象,再加之部分學生不良的占座習慣,高校圖書館的座位資源往往不能得到充分的利用。為了給廣大讀者提供一個文明有序的學習環(huán)境,保證座位被充分且公平地使用,各個圖書館均制定了相應的座位管理規(guī)則。這些規(guī)則一般由圖書館管理員來協(xié)調(diào)實施,但是實際的效果并不理想。因此,為了提高座位的管理效率,減少人力、物力資源的浪費,引進合適的座位管理系統(tǒng)成為眾多高校圖書館的不二之選。
目前,已有一些掃碼占座系統(tǒng)在某些高校圖書館投入使用,但讀者接受程度較低。分析其原因,主要在于:第一,這些系統(tǒng)不能向讀者預先提供空閑座位的具體位置,用戶體驗差;第二,這些系統(tǒng)缺乏信息采集和識別功能,不能確定座位是否正在被他人使用。此外,一些高校圖書館還引入了支持刷卡選座的觸摸屏一體機,以可視化圖像的方式為讀者提供所有座位的信息,但當讀者流量增大時容易造成“排隊選座”的現(xiàn)象,造成極大的不便。
為了解決這一系列問題,本文設計并實現(xiàn)了一種新型的圖書館座位智能服務系統(tǒng)。經(jīng)過硬件測試和實地使用,該系統(tǒng)體現(xiàn)出了較高的實用價值。
本文的圖書館座位智能服務系統(tǒng)一共分為三個部分:信息采集與識別系統(tǒng)、服務器系統(tǒng)和移動客戶端。系統(tǒng)整體結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)整體結(jié)構(gòu)框圖
移動客戶端提供給讀者一個能夠使用本系統(tǒng)的平臺,它可以接收來自服務器系統(tǒng)的座位預約狀態(tài)信息并展示給讀者,同時也可以幫助讀者發(fā)送一系列指令來完成相應的功能,例如預約座位、暫時離座等。
服務器系統(tǒng)是一個包含了服務器和數(shù)據(jù)庫的整體,它在接收來自信息采集與識別系統(tǒng)、移動客戶端的數(shù)據(jù)之后,修改數(shù)據(jù)庫內(nèi)的數(shù)據(jù),并把座位的狀態(tài)信息發(fā)送給移動客戶端、預約座位的讀者信息發(fā)送給信息采集與識別系統(tǒng)。因此,服務器系統(tǒng)是整個系統(tǒng)的大腦,控制各個子系統(tǒng)的信息通信。
信息采集與識別系統(tǒng)負責接收來自服務器的數(shù)據(jù)及指令,在讀者使用座位時會對讀者身份進行識別。當讀者使用校園卡成功入座后,系統(tǒng)會把相應的信息返回給服務器系統(tǒng)。
為了適應高校圖書館各種復雜多變的情況,并給讀者良好的使用體驗,本文設計的系統(tǒng)功能模塊如圖2所示。
圖2 系統(tǒng)的各功能模塊
信息管理服務器面向圖書館管理員和系統(tǒng)維護人員。他們擁有后臺操作權(quán)限,可以對讀者的信用積分進行管理,同時還可對座位的使用情況進行查詢和統(tǒng)計等操作[2]。
本系統(tǒng)的信息管理服務使用Eclipse 平臺進行編寫,提高了系統(tǒng)的可擴展能力[3],同時降低了網(wǎng)絡延時,增強了用戶體驗。JavaWeb 服務器運行在Tomcat 環(huán)境中,它和移動客戶端使用統(tǒng)一的命令格式“request01&&request02”,其中“request01”代表方法類型,“request02”代表二者之間交互的數(shù)據(jù)。服務器初始化完畢后,Tomcat 開始監(jiān)聽服務器相應的端口,解析移動客戶端的請求,同時根據(jù)收到的URL 等信息,把客戶端的請求發(fā)送給相應的Servlet 組件。而Servlet 會調(diào)用service 方法來處理這些請求,并把響應的結(jié)果返回給移動客戶端。命令解析的關(guān)鍵代碼如下:switch(request02){
case"01":Message=database01.Registration_01(request01);break;
case"02":Message=database01.LogIn_02(request01);break;
case"03":Message=database01.ChooseSeat_03(request01);break;
case"04":Message=database01.CancelSeat_04(request01);break;
case"05":Message=database01.GetSeatInfo_05(request01);break;
default:database01.HardwareInfo_06(request01);}
(1)數(shù)據(jù)庫
為了記錄讀者和座位的信息,系統(tǒng)需要使用數(shù)據(jù)庫完成信息的錄入與查詢。本系統(tǒng)采用的是MySQL數(shù)據(jù)庫,具有使用方式靈活、非過程化的優(yōu)點[4]。數(shù)據(jù)庫所能夠容納的讀者人數(shù)值設置為5000,該人數(shù)值可根據(jù)各高校圖書館的實際情況進行調(diào)整。此外,JDBC(Java DataBase Connectivity,Java 數(shù)據(jù)庫連接)可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,通過數(shù)據(jù)庫驅(qū)動程序mysql-connector-java-5.1.47.jar 和JDBC 封裝的Connection、PreparedStatement、ResultSet 類和接口來實現(xiàn)與數(shù)據(jù)庫的連接、數(shù)據(jù)庫語句的執(zhí)行以及執(zhí)行結(jié)果的反饋等操作,該方法的關(guān)鍵代碼如下:
Connection con=null;
PreparedStatement prepStmt=null;
ResultSet rs=null;
try{
con=getConnection();
String queryStatement="update seatInfo set studentID='empty',預約時間='empty',預約截止時間='empty'where table-Num='"+tableNum+"'";
prepStmt=con.prepareStatement(queryStatement);
rs=prepStmt.executeQuery();
}finally{
closeResultSet(rs);
closePrepStmt(prepStmt);
closeConnection(con);
}
(2)信用管理
為了促使讀者合理有效地利用圖書館的座位資源,系統(tǒng)設計了信用獎懲機制。當讀者在一周內(nèi),沒有違約的不良行為(例如未能按預約時間到館、超出暫離規(guī)定的時間等),將給予信用積分的獎勵。當信用積分達到一定的級別時,系統(tǒng)將增加讀者額外的離座時間。相反,在讀者違約的情況下,系統(tǒng)會對其積分進行扣除。當積分扣減到規(guī)定的閾值時,讀者將在一周的時間內(nèi)不能使用本系統(tǒng)的預約服務。根據(jù)讀者的信用情況來調(diào)整他們使用座位的權(quán)限,這是本系統(tǒng)的創(chuàng)新點之一。
(3)臨時卡功能
當讀者因為忘記帶校園卡而想進入圖書館學習時,可以在服務前臺進行登記,領(lǐng)取與刷卡器配套的臨時卡,具有和校園卡相同的功能,當讀者離開圖書館時應歸還該臨時卡。
本文的移動客戶端適用于Android 操作系統(tǒng),采用基于IntelliJ IDEA 平臺的Android Studio 集成開發(fā)工具來完成相應的界面設計。在Android 應用中,提供了Activity、Service、BroadcastReciver 和ContentProvider 四大組件,可以完成復雜的程序設計。移動客戶端使用基于TCP 協(xié)議的Socket 通信來實現(xiàn)和服務器系統(tǒng)的數(shù)據(jù)交互,進而通過異步消息處理機制完成對移動客戶端界面的更新。下面即以移動客戶端和服務器系統(tǒng)的Socket 通信為例,來設計研發(fā)如下關(guān)鍵代碼。其中,IpAddress、Port 分別是服務器系統(tǒng)的相應的IP 地址和端口號,in 和out 分別是輸入字符流和輸出字節(jié)流。
Socket socket=new Socket();
socket.connect(new InetSocketAddress(IpAddress, Port),5000);
OutputStream out=socket.getOutputStream();
BufferedReader in=new BufferedReader(new InputStream-
Reader(socket.getInputStream()));
out.write(txt1.getBytes("gbk"));
out.flush();
socket.shutdownOutput();
移動客戶端的功能主要包括讀者賬戶綁定、座位預約、暫時離座、久坐提醒四個模塊。讀者可以在自己的手機上安裝該客戶端,并通過互聯(lián)網(wǎng)訪問本系統(tǒng)的服務器[5]。
(1)賬戶綁定
讀者可以將移動客戶端和自己的校園卡進行綁定,通過讀者卡號進行移動客戶端的登陸,同時方便讀者進行座位的查詢和預約。
(2)座位預約
讀者登陸客戶端后,可以查詢圖書館當前的座位狀況,并根據(jù)自身的需求選擇適合的座位進行預約。預約完成后,讀者需在1 個小時內(nèi)到達圖書館就座。否則,預約的座位將會自動釋放,系統(tǒng)還會扣除讀者的信用積分并發(fā)送警告通知至客戶端。如果讀者確定自己無法在規(guī)定時間到達圖書館時,可以通過移動客戶端取消預約,以免造成失信。
(3)暫時離座
當讀者因就餐、打電話、上洗手間等情況需要暫時離座時,就可以使用此功能。按下移動客戶端上對應的按鍵后,讀者對應的座位信息會發(fā)給服務器,服務器控制數(shù)據(jù)庫使得當前座位重新處于預約狀態(tài)。待讀者返回時,座位將被再次占用。
通過大量調(diào)查,讀者暫離的時長通常受到離座時段的影響。因此,本系統(tǒng)規(guī)定:在11:00~13:00、17:00~19:00 兩個時段,系統(tǒng)可以為暫離的讀者保留座位1.5個小時;而其他時段則只允許保留0.5 個小時。此外,當實際的座位保留時長剩余15 分鐘時,系統(tǒng)會發(fā)送通知來提醒讀者,引起他們的注意。
(4)久坐提醒
眾所周知,連續(xù)久坐的時間過長會對身體健康造成不好的影響。為了讓讀者在享受學習的同時又能保持一個良好的作息規(guī)律,系統(tǒng)每隔2 小時就會向讀者發(fā)送健康關(guān)愛的提示,提醒讀者適當休息。這是本系統(tǒng)的又一個創(chuàng)新點。
信息采集與識別系統(tǒng)的硬件主要由STM32 主控制器、RFID 射頻識別模塊(采用MFRC522 芯片)和Wi-Fi 數(shù)據(jù)收發(fā)模塊等部分組成[6],其總體結(jié)構(gòu)如圖3所示。該部分實現(xiàn)的功能主要包括信息的采集與核對、座位LED 指示燈的顯示等。
圖3 信息采集與識別系統(tǒng)的硬件框圖
當讀者通過移動客戶端預約座位后,服務器將把讀者的信息發(fā)送給對應座位的硬件系統(tǒng),該座位的LED 指示燈會產(chǎn)生相應的顏色變化,表示座位處于被預約狀態(tài)。讀者到達預約的座位時,使用校園卡在刷卡器上進行身份的識別。射頻模塊將讀者的信息傳輸給STM32 主控制器,最后通過Wi-Fi 模塊把座位信息和讀者信息發(fā)給服務器,若刷卡器識別的讀者信息與預約信息相匹配,則座位的LED 指示燈顏色會再次變化,表示讀者入座成功。
圖4 是實物測試的場景,此時將已經(jīng)完成的硬件系統(tǒng)通電并接入無線局域網(wǎng)中。測試時,本文使用了若干張RFID 卡,同時使用移動客戶端進行座位預約。
圖4 硬件實物圖
(1)座位預約測試
在實際的硬件中,座位LED 指示燈有三種顏色,分別代表座位的三種不同狀態(tài),其中紅色表示座位處于預約狀態(tài);黃色表示讀者入座成功狀態(tài);綠色表示該座位處于空閑可用狀態(tài)。
測試時,首先在移動客戶端進行座位預約。預約選定的座位后,座位LED 指示燈變成紅色,表示有讀者預約此座位。若該讀者在預約后的1 小時內(nèi)去刷卡就座,座位LED 指示燈顯示黃色,此時座位被鎖定。若并非該讀者就座即入座信息與預約信息不一致時,座位LED 指示燈、服務器的座位狀態(tài)不會發(fā)生改變。
在本系統(tǒng)中,座位的預約僅限當日有效,讀者可以一直使用座位至閉館。當讀者離開圖書館時需按下刷卡器旁的離座按鈕,將該座位釋放,否則就會扣除相應的積分。在移動客戶端上,座位預約界面如圖5 所示,其中黑色表示該座位已被預約,淺灰色表示該座位處于無人使用的空閑狀態(tài),讀者可點擊它們進行預約。
圖5 移動客戶端座位預約界面
(2)暫時離座功能測試
測試時間取14:23,測試者在移動客戶端上使用暫時離座功能之后,此時所使用的座位硬件LED 指示燈變成紅色,移動客戶端上顯示剩余的允許離座時間。當剩余的允許離座時間還剩15 分鐘時,移動客戶端發(fā)送一個如圖6 所示的提醒。當測試者按時返回座位后,座位LED 指示燈變成黃色,反之指示燈變成綠色,座位被釋放。
圖6 歸座提醒通知
(3)久坐提醒功能測試
在測試者成功入座的前提下,移動客戶端每隔2小時會有一個如圖7 所示的提醒通知。
圖7 休息提醒通知
(4)臨時卡測試
假定測試者忘帶校園卡,可以使用圖書館管理人員發(fā)放的臨時卡,如果測試者存在有效的預約記錄,管理人員可以將該測試者預約的卡號更改為臨時卡號,測試者可以使用臨時卡到預約座位上刷卡入座;當測試者無預約記錄時,手持臨時卡后可以在空閑的座位上刷卡入座。
本文設計的高校圖書館座位智能服務系統(tǒng)成功地搭建了服務器與數(shù)據(jù)庫,借助主流的嵌入式技術(shù)完成了相關(guān)的硬件設計,并開發(fā)了配套的移動客戶端。通過本文的系統(tǒng),讀者可以享受到線上座位預約、實時空位查詢、限時離座保護和久坐健康提醒等智能服務。實測結(jié)果表明,本文設計的系統(tǒng)可以有效地提高圖書館的座位利用效率,改善讀者的用戶體驗,具有較高的實用價值。