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