熊 輝,陳家豪,劉永樂,王晨陽(yáng),陳蘭麗,,孫建冬
(1.重慶工業(yè)職業(yè)技術(shù)學(xué)院,重慶 401120;2.湖北理工學(xué)院,湖北 黃石 435003;3.湖北師范大學(xué),湖北 黃石 435000)
大學(xué)圖書館良好的學(xué)習(xí)環(huán)境是學(xué)生喜愛到圖書館自習(xí)的主要原因之一。隨著大學(xué)的擴(kuò)招,圖書館自習(xí)室座位資源與學(xué)生的供需矛盾越來越突出,占座的現(xiàn)象越來越嚴(yán)重[1]。圖書館占座就是在別人去之前一個(gè)人占用一個(gè)或者多個(gè)座位,并且在所占的桌子或者椅子上放著一個(gè)物件以表示該座位已經(jīng)被占用。尤其是各種考試前夕,圖書館自習(xí)室便成為了學(xué)生密度最高的地方之一。大多數(shù)國(guó)內(nèi)高校目前的解決方案是周期性清理圖書館座位。這樣的方案表面上可以解決使用座位的矛盾,但是自習(xí)室座位的使用率仍然很低。學(xué)生占座后,由于上課與作息時(shí)間的需要,座位還是長(zhǎng)期處于空座,這樣也會(huì)使沒有占到座位的同學(xué)覺得不夠公平。
因此,圖書館如何合理地分配座位,如何高效地使用座位資源,如何建立一個(gè)公平合理的自習(xí)室管理制度,成為各大高校亟需解決的問題。
我國(guó)對(duì)圖書館自習(xí)室管理系統(tǒng)已經(jīng)有了較多的研究[2]。當(dāng)前,在圖書館自習(xí)室管理系統(tǒng)的研究,主要分為以下3個(gè)方面:(1)基于人工的圖書館自習(xí)室管理系統(tǒng)。這種的管理方式容易導(dǎo)致自習(xí)室座位使用效率較低,而大多數(shù)學(xué)生得不到自習(xí)室座位。(2)基于C/S構(gòu)架或B/S的圖書館自習(xí)室管理系統(tǒng)。這種結(jié)構(gòu)使用廣泛,但是要求有較好的系統(tǒng)分析基礎(chǔ),開發(fā)成本較高。(3)基于物聯(lián)網(wǎng)技術(shù)的圖書館自習(xí)室管理系統(tǒng)[3]。嵌入式技術(shù)以及物聯(lián)網(wǎng)技術(shù)與校園信息化技術(shù)相結(jié)合,是未來圖書館自習(xí)室管理系統(tǒng)的研究發(fā)展方向。但是現(xiàn)在技術(shù)不夠成熟,軟硬件開發(fā)難度大,成本高。
Python是一個(gè)結(jié)合了編譯性、互動(dòng)性、解釋性和面向?qū)ο蟮哪_本語言。Python具有很強(qiáng)的可讀性,相比其他高級(jí)程序語言,其語法結(jié)構(gòu)更有特色[4]?;赑ython的圖書館自習(xí)室管理系統(tǒng),方案簡(jiǎn)潔實(shí)用,成本低廉,運(yùn)行維護(hù)方便。Django是一個(gè)Python的網(wǎng)站開發(fā)基本框架[5],具有豐富的應(yīng)用庫(kù)支持,可以將公共工具包轉(zhuǎn)換為個(gè)人開發(fā)包,這使得Django具有很大的擴(kuò)展性。
Vue.js是Python用于構(gòu)建用戶界面的輕量級(jí)響應(yīng)式JavaScript(JS)框架[6]。與其他大型框架不同,Vue可以自底向上逐層應(yīng)用。Vue的核心庫(kù)設(shè)計(jì)只關(guān)注視圖層,不僅易于上手開發(fā),還便于與第三方支持庫(kù)或既有項(xiàng)目整合。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持庫(kù)相結(jié)合使用時(shí),Vue也完全能夠?yàn)閺?fù)雜的單頁(yè)應(yīng)用提供驅(qū)動(dòng)。
使用前后端分離方式時(shí),所有的靜態(tài)文件將放在靜態(tài)文件服務(wù)器中,向后臺(tái)獲取數(shù)據(jù)需要通過各個(gè)應(yīng)用程序接口(API)進(jìn)行。前端在每一個(gè)頁(yè)面需要通過特殊的API對(duì)后端的數(shù)據(jù)實(shí)現(xiàn)特定的增、刪、改、查等操作,保證數(shù)據(jù)和操作執(zhí)行的可靠性和安全性。
為了保證圖書館自習(xí)室管理系統(tǒng)的順利開發(fā),要對(duì)系統(tǒng)的使用者進(jìn)行角色的劃分,從技術(shù)的可行性分析出不同角色的流程,并分析不同角色不同功能。
圖書館自習(xí)室管理系統(tǒng)的使用者可以劃分為2類:圖書館管理員與使用自習(xí)室的學(xué)生。在圖書館自習(xí)室管理系統(tǒng)中,管理員充當(dāng)系統(tǒng)維護(hù)角色,負(fù)責(zé)維護(hù)系統(tǒng)的正常運(yùn)轉(zhuǎn)與環(huán)境管理。管理員的主要權(quán)限有以下幾點(diǎn):(1)圖書館自習(xí)室的座位信息查詢。可以直接看到各個(gè)自習(xí)室的使用情況,對(duì)應(yīng)的座位號(hào)是否被使用等。(2)學(xué)生的狀態(tài)查詢。通過學(xué)號(hào)可以看到每個(gè)學(xué)生的使用狀態(tài),學(xué)生是否在學(xué);學(xué)生使用的自習(xí)室與座位號(hào);學(xué)生的賬號(hào)是否被禁止學(xué)習(xí)等。(3)查看學(xué)生的信息??梢钥吹綄W(xué)生的基本信息、借閱情況等。(4)監(jiān)督與處罰。管理員對(duì)座位使用情況進(jìn)行監(jiān)督。如座位被使用而座位上沒人,可以對(duì)其使用者進(jìn)行禁止學(xué)習(xí)操作。(5)恢復(fù)學(xué)生使用。如果學(xué)生反省自己錯(cuò)誤,可以通過學(xué)號(hào)恢復(fù)學(xué)生對(duì)系統(tǒng)的使用權(quán)。
學(xué)生的服務(wù)與權(quán)限如下:(1)系統(tǒng)登錄。通過學(xué)號(hào)與密碼登錄圖書館自習(xí)室管理系統(tǒng)。(2)個(gè)人信息查詢。只能看到自己的基本信息、學(xué)習(xí)狀態(tài)與座位是否被禁用。(3)座位查詢??梢钥吹矫恳粋€(gè)自習(xí)室的使用情況、座位使用情況。(4)座位辦理。通過手機(jī)App或者電腦網(wǎng)頁(yè),辦理正常的入座與退座。
圖書館自習(xí)室的管理核心是可以保證自習(xí)室座位的高效使用,以免浪費(fèi)座位資源。另外,還要維護(hù)良好的學(xué)習(xí)環(huán)境,保證自習(xí)室的安靜、座位的整潔以及公共衛(wèi)生安全。
本系統(tǒng)從學(xué)生與管理員的登錄開始,實(shí)現(xiàn)系統(tǒng)的各種功能?;玖鞒倘鐖D1所示。
圖1 圖書館自習(xí)室管理系統(tǒng)基本流程圖
(1)學(xué)生使用圖書館自習(xí)室管理系統(tǒng),先使用自己的學(xué)號(hào)與密碼登錄管理系統(tǒng),隨之可以查看各個(gè)自習(xí)室的座位使用情況。如果是空座,那么學(xué)生可以通過點(diǎn)擊座位來選擇入座,如果不是空座則無法點(diǎn)擊。退座的過程也需要學(xué)生確認(rèn)是否退座。使用座位的過程中,所占的座位會(huì)從空座變成被選用。所以各個(gè)座位就不會(huì)引起使用的沖突。
(2)管理員從登錄頁(yè)面開始進(jìn)入系統(tǒng),需要維護(hù)圖書館自習(xí)室的學(xué)習(xí)環(huán)境,不能允許被使用的座位上沒有學(xué)生在學(xué)習(xí)。所有每個(gè)管理員有著監(jiān)督與懲罰的權(quán)限,可以禁止學(xué)生使用座位,同時(shí)也可以恢復(fù)學(xué)生對(duì)座位的使用權(quán)。
數(shù)據(jù)庫(kù)是一個(gè)系統(tǒng)的核心部分,數(shù)據(jù)庫(kù)的安全是最重要的,必須能保證用戶的信息安全和隱私安全。本系統(tǒng)選擇MySQL數(shù)據(jù)庫(kù)來儲(chǔ)存用戶的使用數(shù)據(jù),采用目前最穩(wěn)定、高效、安全的MySQL 5.7版本。
數(shù)據(jù)庫(kù)需要系統(tǒng)角色的劃分,根據(jù)角色特點(diǎn)編寫合適的字段,以便使用時(shí)查找與調(diào)用。本系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)較簡(jiǎn)潔,學(xué)生和管理員相同,有學(xué)號(hào)(工號(hào))、名字、密碼等字段。為查詢學(xué)生是否被禁止學(xué)習(xí),給出1個(gè)can_study布爾值字段;為顯示學(xué)生是否在學(xué)習(xí)中,給出1個(gè)in_study的布爾值,如果正常入座、退座則會(huì)改變這個(gè)字段;為記錄學(xué)生所用的座位號(hào),給出1個(gè)字符串的字段seat_info。自習(xí)室的座位是1個(gè)model,需要多次實(shí)例化才能得到多個(gè)座位。它包含2個(gè)字段,1個(gè)是讓前端知道座位是否被占用的布爾值字段is_user,還有1個(gè)字符字段顯示當(dāng)座位被使用時(shí)同學(xué)的學(xué)號(hào)。
本系統(tǒng)采用基于Vue.js前端框架和Django后端框架結(jié)合的前后端分離架構(gòu)設(shè)計(jì)。前后端分離的開發(fā),是指前后端工程師約定好數(shù)據(jù)交互接口,并行地進(jìn)行開發(fā)和測(cè)試。前端通過HTTP請(qǐng)求獲取數(shù)據(jù)并負(fù)責(zé)將數(shù)據(jù)渲染到頁(yè)面上;后端只提供數(shù)據(jù),不負(fù)責(zé)將數(shù)據(jù)渲染到頁(yè)面上。主要優(yōu)點(diǎn)包括以下幾點(diǎn)。
(1)提升開發(fā)效率。前后端分離以后,可以實(shí)現(xiàn)前后端代碼的解耦,只要前后端溝通約定應(yīng)用所需接口以及接口參數(shù),便可以開始并行開發(fā),無需等待對(duì)方的開發(fā)工作結(jié)束。(2)增強(qiáng)代碼的可維護(hù)性。前后端分離后,應(yīng)用的代碼不再是前后端混合,只有在運(yùn)行期才會(huì)有調(diào)用依賴關(guān)系。(3)支持多終端和服務(wù)化架構(gòu)。前后端分離后,同一套數(shù)據(jù)接口可以為不同的終端提供服務(wù),更有助于打造多終端應(yīng)用。
3.2.1 前端設(shè)計(jì)
圖書館自習(xí)室管理系統(tǒng)的使用者只有圖書館管理員和使用自習(xí)室的學(xué)生,因此系統(tǒng)前端設(shè)計(jì)簡(jiǎn)單清晰。當(dāng)使用者訪問系統(tǒng)時(shí),直接出現(xiàn)登錄界面,如果不進(jìn)行登錄則無法訪問首頁(yè),也無法看到圖書館的基本信息、自習(xí)室座位等信息。系統(tǒng)設(shè)置了一個(gè)攔截器程序,攔截沒有登錄的用戶,避免無關(guān)人員進(jìn)入系統(tǒng)。登陸后,頁(yè)面會(huì)依次展示圖書館的簡(jiǎn)介、圖書館的開館時(shí)間等信息。通過點(diǎn)擊登錄界面的選擇欄可以跳轉(zhuǎn)到個(gè)人中心,或者查看各個(gè)圖書館自習(xí)室。學(xué)生有自己的個(gè)人中心,而管理員可以登錄管理學(xué)生中心頁(yè)面。當(dāng)用戶注銷后,網(wǎng)頁(yè)自動(dòng)跳轉(zhuǎn)到需要登錄的頁(yè)面,同時(shí)清空使用者的使用信息。
3.2.2 后端設(shè)計(jì)
為了方便開發(fā),使用Django自帶的后臺(tái)管理程序。在Django項(xiàng)目中的admin.py文件中注冊(cè)需要被管理的Model。屬性設(shè)置如下:
使用超級(jí)賬號(hào)訪問“http://127.0.0.1:8000/admin/”網(wǎng)站管理后臺(tái)數(shù)據(jù),后臺(tái)管理包括學(xué)生管理、座位管理和管理員身份創(chuàng)建。
登錄模塊用來識(shí)別用戶,對(duì)用戶的權(quán)限進(jìn)行判定。因管理員和學(xué)生登錄身份不同,模塊提供了2個(gè)登錄按鈕。為了讓前端區(qū)分出是學(xué)生身份還是管理身份,本系統(tǒng)使用了Vue框架中的Vuex組件,它可以將關(guān)鍵數(shù)據(jù)存在內(nèi)存中,后面開發(fā)模塊使用不同功能,系統(tǒng)可以從內(nèi)存中調(diào)出身份來區(qū)分。登錄成功后頁(yè)面會(huì)跳轉(zhuǎn)至首頁(yè),如果學(xué)號(hào)(工號(hào))或者密碼錯(cuò)誤則會(huì)回饋給前端相應(yīng)的信息。
在座位分配的問題中,系統(tǒng)使用分頁(yè)的功能來實(shí)現(xiàn)不同自習(xí)室座位的管理。學(xué)生選擇不同的自習(xí)室去訪問不同的座位號(hào)碼,就可以得到屬于相應(yīng)自習(xí)室的座位。入座前需要判斷該學(xué)生是否可以使用該系統(tǒng)、操作者是否是學(xué)生、是否已經(jīng)使用了1個(gè)座位等。經(jīng)過一系列的判斷后,則可以通過AJAX(Asynchronous JavaScript And XML)向后臺(tái)請(qǐng)求入座操作。Vue前端將入座者信息、座位信息傳遞給Django框架后臺(tái),經(jīng)過2個(gè)AJAX的“PATCH”請(qǐng)求則完成入座,將學(xué)號(hào)信息賦予所選座位,同時(shí)把座位信息賦予“個(gè)人信息”的“座位號(hào)”,學(xué)生的學(xué)習(xí)狀態(tài)改為“學(xué)習(xí)中”,被使用的座位狀態(tài)也被改為“使用中”。入座成功后,程序中相應(yīng)的字段會(huì)改變,而系統(tǒng)應(yīng)用界面也會(huì)隨之跳轉(zhuǎn)到學(xué)生“個(gè)人中心”頁(yè)面。
如果學(xué)生學(xué)習(xí)完畢,從“個(gè)人中心”點(diǎn)擊“退出學(xué)習(xí)”,需要2個(gè)AJAX的“PATCH”請(qǐng)求來改變學(xué)生與座位的字段信息,即座位信息復(fù)原。點(diǎn)擊頁(yè)面右上角的“注銷”便可以退出系統(tǒng),內(nèi)存中清除使用者的信息,頁(yè)面也會(huì)隨著跳轉(zhuǎn)到登錄頁(yè)面。
管理員維護(hù)自習(xí)室的學(xué)習(xí)環(huán)境,提高座位的使用率。對(duì)于占著座位卻發(fā)現(xiàn)座位上沒人的情況,管理員有權(quán)限去禁止這個(gè)學(xué)生再次使用該座位。若管理員發(fā)現(xiàn)某座位被使用而座位上卻沒有學(xué)生,可以點(diǎn)擊這個(gè)學(xué)號(hào)進(jìn)入管理頁(yè)面。為了保護(hù)學(xué)生的個(gè)人隱私,系統(tǒng)設(shè)定學(xué)生之間不能查看彼此的“個(gè)人中心”。因此,前端設(shè)定為只有管理員才可以點(diǎn)擊學(xué)號(hào)跳轉(zhuǎn)到特定的學(xué)生管理頁(yè)面,可以清楚看到該學(xué)生的基本信息。頁(yè)面上設(shè)置搜索框,管理員可以通過學(xué)號(hào)來搜索特定學(xué)生。頁(yè)面底部設(shè)置了“禁止學(xué)習(xí)”按鈕,點(diǎn)擊可以直接禁止這個(gè)學(xué)生使用該座位。點(diǎn)擊后這名學(xué)生的“能否學(xué)習(xí)”字段已被改變,該學(xué)生依然可以登錄這個(gè)系統(tǒng)查看每個(gè)座位的使用情況,但是無法入座。學(xué)生若反省自己的行為,可以向管理員申請(qǐng)恢復(fù)自己賬號(hào)使用。管理員恢復(fù)某個(gè)學(xué)生的賬號(hào)使用,需要用學(xué)生學(xué)號(hào)通過搜索框查找這個(gè)學(xué)生。
該查詢操作通過Vue前端AJAX的“POST”請(qǐng)求向后臺(tái)發(fā)送學(xué)號(hào),后臺(tái)以這段字符串為索引,在數(shù)據(jù)庫(kù)中查詢,成功后返回該學(xué)生的信息。Django框架后臺(tái)代碼如下:
高校圖書館自習(xí)室反映了一所大學(xué)的學(xué)習(xí)氛圍,也是學(xué)校圖書館管理水平的體現(xiàn)。基于Python開發(fā)的圖書館座位自習(xí)管理系統(tǒng),界面簡(jiǎn)潔,穩(wěn)定性好,開發(fā)維護(hù)成本低。該系統(tǒng)為學(xué)生提供必要的座位資源服務(wù)和圖書館管理功能。應(yīng)用程序采用先進(jìn)的管理員權(quán)限管理功能,可以較好解決圖書館“占座”現(xiàn)象,提高座位資源利用效率,提升圖書館服務(wù)質(zhì)量。