陳子楊 何允恒 李木子 陳夢仙 王云鸞 呂友波
摘要:圖書館對于高校學生,不僅是借閱書籍,查閱資料的設施,還是自主學習的場所。伴隨著移動互聯(lián)網(wǎng)的迅猛發(fā)展,以移動端為代表的終端異軍突起。它給人們帶來了全新的移動溝通體驗,在學生中應用頗為普遍,影響力非常廣,信息的時效性非常顯著。因而該文描述了一套針對圖書館座位管理的移動端可視化選座系統(tǒng)的設計與實現(xiàn)。使用了python語言中的flask框架來實現(xiàn)web端的搭建。而數(shù)據(jù)庫所需數(shù)據(jù)是通過輕量級數(shù)據(jù)庫sqlite儲存的。該系統(tǒng)可以讓用戶在移動端上就能實現(xiàn)圖書館選座,續(xù)座退座等功能,有極大的便利效果。
關(guān)鍵詞:移動端;選座系統(tǒng);flask
中圖分類號:TP311? ? ?文獻標識碼:A? ? ? 文章編號:1009-3044(2019)01-0075-03
The Design and Implementation of a University Library Selection System Based on Mobile
CHEN Zi-yang, HE Yun-heng, LI Mu-zi, CHEN Meng-xian, WANG Yun-luan,LV You-bo
(School of Computer and Information Engineering, Harbin Commercial University, Harbin 150028, China)
Abstract: The library is not only a library for borrowing books, accessing materials, but also a place for self-learning. Along with the rapid development of the mobile Internet, the terminal represented by the mobile terminal has sprung up. It brings people a new mobile communication experience, which is quite popular among students, has a wide influence, its information is Timeliness. Therefore, this paper describes the design and implementation of a mobile terminal visualization system for library seat management. The web side is built by the flask framework of the python language. The data required by the database is stored by the lightweight database sqlite. The system allows the user to 'select the seat', 'Extend seat occupancy time', and 'Leave the seat' on the mobile terminal, which has great convenience.
Key words: mobile terminal; Selection System; flask
1 背景
圖書館對于高校學生,不僅是借閱書籍,查閱資料的設施,還是自主學習的場所。伴隨著移動互聯(lián)網(wǎng)的迅猛發(fā)展,以移動端為代表的終端異軍突起。它給人們帶來了全新的移動溝通體驗,在學生中應用頗為普遍,影響力非常廣,信息的時效性非常顯著。自從我校圖書館出現(xiàn)了選座設備,便很好地杜絕了學生用書本、物品占座的現(xiàn)象。但是目前我校的圖書館原有的選座設備依然存在很多需要完善的方面:1)該選座設備給想要選座的同學限定了座位的使用時間,卻無法提醒該座位過期的時間,且若需要“續(xù)座”須得在使用時間到期前半小時去往選座系統(tǒng)“續(xù)座”,從而嚴重影響了學生學習的集中性和積極性。2)由于未在規(guī)定時間內(nèi)“續(xù)座”或完全離開,則會被系統(tǒng)記錄一次,累積三次后就會在一段時間內(nèi)無法選座。但是系統(tǒng)記錄的次數(shù)只會在超過三次后才能清零,可能會導致學生不能選座的問題
針對這些問題,我們研究了以網(wǎng)絡為媒介建立的手機移動端圖書館選座系統(tǒng),并實現(xiàn)了“網(wǎng)上訂座”“逾期提醒”等功能,做到設備需求來源于師生,設備服務于師生。
2 系統(tǒng)設計
2.1 系統(tǒng)總體設計
選座系統(tǒng)主要目的是實現(xiàn)用戶在移動端完成圖書館座位的“即時選座”,“提前預定”以及“即時退座”等功能。整個系統(tǒng)可分為三個層次,如圖1所示。分別為:一、視圖界面,主要通過bootstrap來設計。二、數(shù)據(jù)庫模塊,通過SQLite用于系統(tǒng)的數(shù)據(jù)存儲處理。三、通過flask框架搭建后臺功能模塊。三個層次互相聯(lián)系,協(xié)同運作。
2.2 視圖界面先
2.2.1 系統(tǒng)流程呈現(xiàn)
如圖2所示,對于用戶而呈現(xiàn)的有基礎(chǔ)的登陸注銷界面,選座界面以及三個基本功能的按鈕。完成一次“選座”,“預定”或者是“退訂”即完成一次流程。
如圖3所示,整個視圖頁面的邏輯模塊分為登陸注銷模塊和選座功能模塊。從選座界面開始,倘若未登錄就跳轉(zhuǎn)到登陸界面,通過驗證回到了選座界面。倘若驗證失敗則會彈出flash提示組件。在已登陸的情況下就擁有了兩個功能,選擇或者預定,執(zhí)行“選座”或者“預定”時向服務器發(fā)起請求并得到反饋后便擁有了“退訂”的功能。
2.2.2 視圖實現(xiàn)方式
該選座系統(tǒng)的視圖界面是基于前端框架Bootstrap設計的。前端開發(fā)框架是指一系列產(chǎn)品化的HTML/CSS/JavaScript組件的集合。其UI組件樣式簡潔,配備有一些JavaScript插件以及其柵格系統(tǒng),這讓我們的視圖界面能夠更便捷的開發(fā)并呈現(xiàn)出來。Bootstrap能夠很好地實現(xiàn)響應式網(wǎng)頁設計,在屏幕分辨率,尺寸各異的移動端,甚至是電腦端可以響應出不同的設圖界面,使頁面更富有彈性化兼容不同移動設備,減少了開發(fā)量。
除此之外,JQuery也是該視圖界面的重要框架。JQuery是一個簡潔,快速,輕量級的JavaScript庫。不僅僅Bootstrap的腳本部分是基于JavaScript框架JQuery的,并且該視圖頁面的特定邏輯也是通過JQuery腳本實現(xiàn)的,極大地簡化了 JavaScript 編程。
日期選擇插件Datepicker是一個配置靈活的插件,該視圖使用了Datepicker實現(xiàn)了座位選擇在時間上選擇限定的可視化工具,圖4移動端的視圖頁面。
ECharts(Enterprise Charts)是百度的一個開源的數(shù)據(jù)可視化工具,一個純Javascript的圖表庫。該視圖使用echarts控件渲染了一個小型插件,實現(xiàn)座位時間上的可視化。如下圖5。
2.3 功能模塊概述
該系統(tǒng)軟件基于Flask框架設計開發(fā),是基于Linux平臺開發(fā),因為其基于B/S方式因而用戶可以跨平臺使用該系統(tǒng)軟件。Flask是一個使用Python語言編寫的輕量級Web應用框架,使用Jinjia2渲染模板。
該系統(tǒng)由Nginx接入用戶的HTTP連接,將用戶的請求轉(zhuǎn)發(fā)給uwsgi進程,uwsgi根據(jù)WSGI協(xié)議構(gòu)建進程池并調(diào)度Flask服務進程。
當用戶打開了瀏覽器,呈現(xiàn)出來的是一個指定樓層指定區(qū)域的座位矩陣。而這個座位矩陣對應了現(xiàn)實世界下的圖書館自習座位。座位矩陣如圖6。
該座位通過jinjia2模板遍歷產(chǎn)生,并通過數(shù)據(jù)庫內(nèi)信息設置好矩陣元素屬性,如(a。未被選中;b。被選中;c。已被使用d。已被預約;e暫離)。
用戶通過點擊按鈕生成一個請求,并后臺邏輯加工成為一個信息集S{用戶信息,座位信息,請求需求}。緊接著Flask后臺則將信息集轉(zhuǎn)交給了數(shù)據(jù)庫。數(shù)據(jù)庫調(diào)整后做出響應后再返回信息作用于頁面上的座位矩陣。
2.3.1 ORM映射模塊
面向?qū)ο箝_發(fā)是當前開發(fā)的主流,幾乎所有的應用程序都需要一個持久化的存儲系統(tǒng)。而關(guān)系數(shù)據(jù)庫仍然是許多人都青睞的持久信息儲存方法,于是該系統(tǒng)采用了ORM映射將對象的狀態(tài)關(guān)系到關(guān)系數(shù)據(jù)庫的數(shù)據(jù)上。用以提高開發(fā)效率、降低開發(fā)成本和問題復雜度,最重要的目的還是消除編寫低級數(shù)據(jù)庫訪問代碼。最終使用了SQLAlchemy這個python中最知名的ORM工具,用以Flask后臺和數(shù)據(jù)庫的連接。
2.3.2 任務調(diào)度模塊
用戶可以選擇指定位置,但是用戶的座位占用時間是限定的,到了一定時間用戶就會從有座位的狀態(tài)到無座位的狀態(tài)。而數(shù)據(jù)庫是相對靜態(tài)的,不能自發(fā)的修改本身內(nèi)容。因此該系統(tǒng)使用了APScheduler,APScheduler (Advanced Python Scheduler) 是基于Quartz的一個Python定時任務框架??梢园才派院髨?zhí)行的python代碼,無論是一次或者說還是定期執(zhí)行。設置好定時任務,通過簡單的數(shù)據(jù)庫操作,實現(xiàn)座位狀態(tài)的改變,實現(xiàn)多用戶同一座位使用。
2.4 數(shù)據(jù)庫設計
一個選座系統(tǒng),首先確定的兩個實體是座位和選座人員。一個選座人員可以選定一個座位,而一個位置也只能被一個選座人員使用,于是相應的一對一關(guān)系就出現(xiàn)了。選座人員可以對座位進行選座也可以進行預定,統(tǒng)稱二者為‘綁定,那么需要一個記錄和存儲這個綁定關(guān)系信息的容器。
對于選座人員這個實體可以確定主體為學生,先暫時不考慮教職工的選座功能。對于學生可以模擬出學生姓名,身份找號,性別,學號,年級,專業(yè)等等屬性。學生的屬性只有學號和身份證號是唯一的,為了區(qū)別于學生和其他社會人員,并且考慮到數(shù)據(jù)庫的儲存,學號是適合作為學生關(guān)系的唯一標識符。
為了更加精確便捷地便于學生找到座位,對于座位這個實體,要不斷細化分類。對不同樓層,不同區(qū)域的位置進行分組,因此關(guān)系模型的設計就設置區(qū)域?qū)傩?。位置區(qū)域這些屬性是對于座位實際存在的,同時也應該存在一些邏輯上設置的屬性。因此為了區(qū)別座位是否被學生選座,而設置座位的狀態(tài)(是否選座,是否預定等等)。同時考慮到前端視圖的映射,指定區(qū)域的一批座位也需要進行編號。
對于綁定關(guān)系分為選座和預定,前者只需要學生和座位兩個實體的唯一標識符,但是考慮到預定功能,需滿足不同時刻而設置了開始時間和結(jié)束時間。
2.4.1 數(shù)據(jù)庫模型結(jié)構(gòu)
如下圖7滿足項目需求而設計的數(shù)據(jù)庫實體關(guān)系圖:
根據(jù)ER圖并去除傳遞關(guān)系可以得出的關(guān)系有:
1)學生(學號,姓名,身份證號,性別,專業(yè)代碼,年級代碼)
2)專業(yè)(專業(yè)代碼,專業(yè))
3)年級(年級代碼,年級)
4)座位(座位id,座位編號,區(qū)域碼,位置狀態(tài),桌子代碼)
5)區(qū)域位置(區(qū)域代碼,方向,高度)
6)位置狀態(tài)(位置狀態(tài),位置狀態(tài)值)
7)桌子(桌子代碼,區(qū)域碼)
8)選座集合(位置ID,學號,開始時間,結(jié)束時間)
整個數(shù)據(jù)庫的數(shù)據(jù)表包括了座位信息,被選座位集,學生信息,桌子信息,(自習區(qū))位置信息,專業(yè)信息和年級信息,而實際在數(shù)據(jù)庫上的表如圖8。
2.4.2 數(shù)據(jù)庫安全性
僅有管理員才能獲取數(shù)據(jù)庫的所有權(quán)限,包括創(chuàng)建新的用戶,創(chuàng)建基本表和視圖,擁有對所有數(shù)據(jù)庫對象的存取權(quán)限,并授權(quán)給其他一般用戶。
而一般用戶,諸如學生只能查詢到本人的個人信息和座位信息,有限地修改座位狀態(tài)。
2.4.3 數(shù)據(jù)集完整性
數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性。該數(shù)據(jù)庫的數(shù)據(jù)是符合現(xiàn)實世界語義、反映當前實際情況的,而且該數(shù)據(jù)庫內(nèi)的內(nèi)部關(guān)系也是符合邏輯的。
2.4.4 數(shù)據(jù)庫規(guī)范性
范式(paradigm)的概念和理論是美國著名科學哲學家托馬斯·庫恩(Thomas Kuhn) 提出并在《科學革命的結(jié)構(gòu)》(The Structure of Scientific Revolutions)(1970)中系統(tǒng)闡述的。常見范式有1NF,2NF,3NF,BCNF(Boyce Codd Normal Form)。而一個低一級范式的關(guān)系模式通過模式分解可以轉(zhuǎn)換為若干個高一級的關(guān)系模式的集合,這種過程稱作規(guī)范化。
對于學生關(guān)系R1(學號,姓名,身份證號,性別,專業(yè),年級),擁有著年級和專業(yè)的屬性,倘若出現(xiàn)了新的專業(yè)或者新的年級,而尚無對應學生時,則無法存儲這個專業(yè)或者年級,存在插入異常。因此將學生關(guān)系分解為三個關(guān)系學生關(guān)系R1(學號,姓名,身份證號,性別,專業(yè)碼,年級碼),專業(yè)關(guān)系R2(專業(yè)碼,專業(yè)),年級關(guān)系R3(年級碼,年級)。此時三個關(guān)系符合BCNF,即修正的第三范式。
對于座位關(guān)系R4(座位ID,座位編號,方向,樓層,座位狀態(tài),桌子號),各個屬性都是必需的且不相互依賴,包含碼,因此符合BCNF。但考慮到前端映射效率問題分解成區(qū)域位置關(guān)系R5(區(qū)域代碼,方向,樓層),桌子關(guān)系R6(桌子號,區(qū)域碼),考慮到存取設置R7(位置狀態(tài),狀態(tài)情況)。R5,R6,R7都符合BCNF,但此時的R4(座位ID,座位編號,區(qū)域號,座位狀態(tài)碼,桌子號)因桌子號和區(qū)域號具有傳遞的情況,只符合2NF。
對于選座集合關(guān)系R8(學號。座位ID,開始時間,結(jié)束時間)符合BCNF。
3 結(jié)束語
該文通過對該校圖書館情況的觀察和思考,立足于該校的學生情況,結(jié)合所學知識提出和實現(xiàn)了一系列功能用于服務。從用戶的角度正確了解到了用戶的需求而為其提供服務,把視圖頁面,后臺的實現(xiàn),數(shù)據(jù)庫的設計都一一介紹闡述,完成了一個智能,服務,便捷的圖書館選座系統(tǒng)。
參考文獻:
[1] 王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論[M].5版.北京: 高等教育出版社,1983.
[2] 胡鑫,劉紅,葉小亮.一種圖書館可視化智能選座引導系統(tǒng)的研究與實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù), 2016(2):71-72.
[3] 代琳娜. 高校圖書館占座現(xiàn)象的技術(shù)緩解策略[J].科技資訊,2015(20):205-206.
[4] 郭小平. 大數(shù)據(jù):基于微信移動端的教務信息公眾平臺[J].亞太教育,2016(25):289.