朱 建,唐子昱,宮 帥,談 杰,馬學(xué)森,3
(1.合肥工業(yè)大學(xué)計算機與信息學(xué)院,安徽 合肥 230009;2.合肥市第八中學(xué),安徽 合肥 230071;3.廣東三水合肥工業(yè)大學(xué)研究院,廣東 佛山 528000)
近幾年,為了響應(yīng)國家大力建設(shè)環(huán)境友好型、資源節(jié)約型社會的號召,共享經(jīng)濟(jì)和共享服務(wù)大行其道,利用移動支付、移動通訊、GPS等網(wǎng)絡(luò)技術(shù)手段,整合線下閑散物資或個人勞務(wù),并以較低價格對供給方與需求方進(jìn)行精準(zhǔn)匹配,減少交易成本,從而實現(xiàn)“物盡其用”和“按需分配”的資源最優(yōu)配置,實現(xiàn)供求雙方收益最大化[1]。小至充電寶,大到汽車,共享的理念逐漸滲透到生活中的方方面面,而圖書作為保有量大、閑置率高、文化價值大的常用物品,也是最適宜共享的物品之一。
據(jù)證實,當(dāng)今社會擁有的海量圖書散布在千家萬戶,人均書本量為19.82本,但部分書籍閱讀量不足1次就被閑置在各個用戶的書架上[2]。因此,如何實現(xiàn)各用戶圖書資源的流轉(zhuǎn)和共享,對發(fā)揮全社會圖書資源的有效價值,促進(jìn)社會和諧具有重要意義?;ヂ?lián)網(wǎng)和物聯(lián)網(wǎng)的發(fā)展,以及各種APP開發(fā)平臺的成功應(yīng)用,為實現(xiàn)圖書資源共享提供了技術(shù)保障。與此同時,Android操作系統(tǒng)已成為市場主流,2016年上半年,Android操作系統(tǒng)便占有全球移動智能手機系統(tǒng)86.2%的市場份額[3]。此外,線下面對面交互或借助中間媒介進(jìn)行交互已成為人們所普遍認(rèn)可的便捷交互方式。因此,利用線下多種交互方式在Android系統(tǒng)上設(shè)計和開發(fā)一款共享圖書的APP,具有良好的發(fā)展前景。
“圖書漂流”活動源于20世紀(jì)60年代的歐洲,方法類似于中世紀(jì)的“漂流瓶”,即書友將自己擁有卻不再閱讀的書籍貼上特定的標(biāo)簽后,投放到公園長凳、咖啡館桌子等公共場所,無償?shù)靥峁┙o拾取的人閱讀。拾取之人閱讀之后再以相同的方式將書投放到公共環(huán)境中去,從而實現(xiàn)“圖書漂流”。但這類傳統(tǒng)的“圖書漂流”共享方式難以全面推廣,其主要缺陷有以下幾點。
圖書由書友自愿放置于公共場所,因此,圖書的擁有者、放置地點、圖書類別等問題均無有效信息可供參考,這常導(dǎo)致其他書友借書無處可尋,對圖書內(nèi)容更是一無所知。而散播在公共場所的零散書籍在惡劣環(huán)境下被破壞、損毀至無法閱讀也難以被人察覺,從源頭處便阻礙圖書的正常“漂流”[4]。
由于缺乏管理系統(tǒng),圖書漂流無法對借閱者做出有效約束,私自截留或肆意損壞圖書都會影響正常的圖書漂流過程。上海市普陀區(qū)圖書館對漂流圖書的跟蹤調(diào)查結(jié)果顯示,自首批圖書“放漂”后,社會各界的捐贈圖書冊數(shù)已突破十萬,但圖書循環(huán)率僅為30%.此外,部分回漂的書還存在劃痕、缺頁等現(xiàn)象,余下的圖書或是暫時擱淺,或銷聲匿跡[5]。
當(dāng)前的圖書館管理系統(tǒng)以圖書管理為中心,難以體現(xiàn)圖書館以讀者為中心的服務(wù)理念,大部分圖書館管理系統(tǒng)均存在圖書館資源相對隔離及信息服務(wù)相對孤立、不能全面集成圖書館的業(yè)務(wù)和管理工作,信息孤島現(xiàn)象嚴(yán)重的問題[6]。
*[基金項目]廣東省科技發(fā)展專項基金資助項目(No.2017A010101001);中央高?;究蒲袠I(yè)務(wù)專項基金資助項目(No.JZ2016HGBZ1032);論文得到國家留學(xué)基金資助
本文將“圖書漂流”APP與線下跳蚤市場、同類換物網(wǎng)和同類型的APP進(jìn)行了比較,詳細(xì)說明了“圖書漂流”APP的客戶群、形式、地域、運營模式、業(yè)務(wù)類型、時間限制和功能創(chuàng)新等特點。詳細(xì)特點比較情況如表1所示。
在APP開發(fā)過程中使用了Eclipse開發(fā)平臺,開發(fā)語言為Java,還包含AndroidSDK、MySQL、ZXING、豆瓣圖書API和百度地圖SDK等多個輔助工具,最終實現(xiàn)了書友在線上分享交流圖書漂流信息、線下直接借閱[7]。
表1 “圖書漂流”APP的特點
APP總體工作流程如圖1所示。
圖1 工作流程圖
一個Android應(yīng)用程序一般包含4種子構(gòu)造塊,即Activity、Service、Content Provider和 Broadcast Receiver。Activity是在手機前臺與用戶通信,Service在后臺分析前臺所傳達(dá)的命令而完成相關(guān)工作,Content Provider是數(shù)據(jù)存儲,Broadcast Receiver協(xié)助程序組件之間的相互通信[8]。
“圖書漂流”APP將用戶分為兩類,即書友(普通用戶)和管理員,其中,管理員負(fù)責(zé)對分布于城市各地的圖書交換柜中的圖書資源、用戶信息進(jìn)行調(diào)配和管理,負(fù)責(zé)整個APP的管理工作;書友作為普通用戶,主要通過APP進(jìn)行圖書的查詢、申請和借閱,享受APP帶來的便利服務(wù)。同時,與APP和服務(wù)器進(jìn)行信息交互的圖書交換柜具有自動控制、驗證、遠(yuǎn)程監(jiān)控和報警等功能。
APP的注冊用戶分為管理員和書友(普通用戶),其具體工作如下。
4.2.1 管理員
管理員負(fù)責(zé)對整個系統(tǒng)的維護(hù)和管理,包括圖書的上架、調(diào)配、銷毀以及用戶行為的監(jiān)督、提醒等,其具體功能如下。
4.2.1.1 添加圖書
管理員使用攝像頭掃描圖書條形碼,服務(wù)端解析條形碼數(shù)據(jù)后獲得圖書的ISBN碼,并在相關(guān)出版網(wǎng)站查詢圖書的具體信息,同時,將該信息呈現(xiàn)給管理員,管理員核對信息無誤后將圖書正式上架,以供書友查詢、借閱。
4.2.1.2 圖書調(diào)配與管理
因為各個圖書交換柜的周邊環(huán)境不同,使得不同圖書交換柜的借閱信息呈現(xiàn)差異化的傾向和偏好,管理員可以根據(jù)借閱信息主動平衡圖書交換柜間的差異。例如,減少借閱量小的圖書交換柜的圖書數(shù)量,并將剩余圖書轉(zhuǎn)向借閱量大的圖書交換柜,或?qū)⑻囟ǚN類圖書集中投放在受歡迎的圖書交換柜,強化書友的借閱體驗。此外,還可以勘正圖書的謬誤信息,銷毀下架圖書的信息。出現(xiàn)以上情況,管理員可以通過APP隨時操作,實時更新數(shù)據(jù)。
4.2.1.3 用戶管理
管理員可以通過APP查看書友的詳細(xì)借閱信息,包括借閱時間、書目、逾期時間、評論和積分等。對提出申請的書友,管理員可參考該書友的借閱歷史和積分進(jìn)行審核;對有長時間逾期不還、損毀圖書或其他違規(guī)行為的用戶,處以臨時封禁、永久封禁和銷戶等懲罰,以維護(hù)良好的用戶環(huán)境。
4.2.2 普通用戶
書友是系統(tǒng)中的普通用戶,通過APP即可方便、快捷地查詢和借閱圖書,享受閱讀的樂趣,具體功能如下。
4.2.2.1 設(shè)定資料
書友可以在APP中選擇填寫一些個人信息——性別、生日、喜愛的圖書種類、手機、QQ等聯(lián)系信息,在注冊頁面的地圖上還可以選擇用戶所在位置,系統(tǒng)會根據(jù)書友填寫的相關(guān)信息、借閱和歸還情況提供個性化服務(wù),包括推薦特定書目、借閱地點導(dǎo)航和好友推薦等。
4.2.2.2 圖書追溯
系統(tǒng)中每本書上架、歷次借閱、歸還、評分與評價、下架等都被服務(wù)器數(shù)據(jù)庫系統(tǒng)詳細(xì)記錄,書友可以追溯自己感興趣的所有圖書的漂流航跡,對圖書漂流狀態(tài)進(jìn)行持續(xù)性追蹤,并對圖書進(jìn)行全生命周期的關(guān)注。
4.2.2.3 查詢與借閱圖書
查詢圖書是書友在APP中通過關(guān)鍵字查詢自己希望借閱的圖書,查詢結(jié)果以列表方式呈現(xiàn),書友可以查看每一條查詢結(jié)果,最終選定借閱的圖書。在圖書的詳細(xì)信息界面提供了該系列圖書的具體信息,包括存放點、存放數(shù)量、現(xiàn)有借閱人等。書友根據(jù)相關(guān)信息可自行選擇借閱地點,APP自動生成導(dǎo)航信息,并顯示出服務(wù)器生成的口令信息,引導(dǎo)書友前往相應(yīng)地點的圖書交換柜通過口令驗證來完成借閱。同時,如果借閱圖書所存放的點距離書友比較遠(yuǎn),書友可以通過APP發(fā)出捎帶請求,捎帶者根據(jù)捎帶請求可將圖書捎帶至?xí)迅郊目山栝嘃c,以便書友自行前往借閱。
4.2.2.4 圖書與私信管理
圖書管理是書友對已借閱的圖書進(jìn)行管理,包括發(fā)表圖書評分、評價,拖動進(jìn)度條可調(diào)整當(dāng)前已讀的進(jìn)度,查看自己所有借閱圖書的時間、地點和歸還時間,此外,還可查看其他書友發(fā)送的交友或借閱申請等私信,并對其作出回應(yīng)。4.2.2.5 申請捐贈
書友可以捐贈身邊閑置的或希望與他人分享的圖書,通過添加圖書的功能直接將圖書上傳到數(shù)據(jù)庫中,并可持續(xù)關(guān)注該本圖書的借閱軌跡。
4.2.2.6 用戶圖書積分
服務(wù)器根據(jù)圖書狀態(tài)信息的改變分別給予圖書捐贈者、圖書捎帶者、已完成圖書借閱和歸還的書友不同的積分獎勵。書友與管理員的相應(yīng)功能如圖2所示。
在服務(wù)器端MySql的數(shù)據(jù)庫BookCrossing中,建立了
多張表來存放APP所需的大部分信息,還有一部分存放在手機中的數(shù)據(jù)庫sqlite里作為緩存[9]。
4.3.1 數(shù)據(jù)庫概念設(shè)計
“圖書漂流”APP的數(shù)據(jù)庫中包括了Users(用戶)和Books(圖書)2個實體,實體間的關(guān)系如圖3所示。
圖2APP功能示意圖
圖3 系統(tǒng)E-R圖
圖3中,N表示相鄰的2個實體,比如Users與Books之間是一對多的關(guān)系,N:M表示多對多的關(guān)系,在保證數(shù)據(jù)完整性的前提下,最大程度節(jié)省數(shù)據(jù)存儲空間,保證了實體間的合理關(guān)系,且無冗余。3個實體又包括了各自的字段,通過借閱、管理、歸還等多個外鍵聯(lián)系,使得整個數(shù)據(jù)庫形成一個完整的整體,具有較高的工作效率。
4.3.2 數(shù)據(jù)庫邏輯設(shè)計
Users表:保存用戶登錄時所需要的信息,其中包括用戶名、密碼、用戶權(quán)限(用以區(qū)分管理員和書友)、是否允許用戶借閱的標(biāo)記位、申請信息是否通過的標(biāo)記位等。
Lib表:保存所有圖書角的圖書信息,其中包括圖書的ISBN碼、圖書名、各個圖書點某本書的擁有量、圖書類型、某書評分的計算量等。
UsersData表:保存用戶的私人信息,其中包括年齡、生日、愛好、手機、QQ、位置信息等。
4.4.1 掃碼上傳
掃碼功能通過集成在APP內(nèi)的zxing掃碼軟件實現(xiàn)。軟件打開手機攝像頭,識別和讀取代表圖書ISBN碼的條形碼,再將讀取到的ISBN碼交付給其他模塊,從而實現(xiàn)對圖書的確認(rèn)。
首先是確定權(quán)限,賦予軟件相應(yīng)的權(quán)限:
android:name="android.permission.VIBRATE"/> android:name="android.permission.CAMERA"/> android:name="android.hardware.camera.autofocus"/> 接著在掃碼按鈕上設(shè)置監(jiān)聽器,觸發(fā)監(jiān)聽器執(zhí)行startActivityForResult()方法調(diào)用掃碼程序,將得到的信息返回給調(diào)用者,最后在onActivityResult()中用相應(yīng)的Intent類型data接收圖書ISBN碼。 4.4.2 圖書信息下載 通過圖書ISBN碼在相關(guān)網(wǎng)站查詢,從查詢結(jié)果中篩選出有效信息反饋到移動終端。 取得圖書ISBN編號后,用“https://api.douban.com/v2/book/isbn/”與ISBN號拼接得到圖書信息的地址。 整理地址圖書信息中的JSON格式數(shù)據(jù),從中分離出圖書的有關(guān)信息,包括封面、作者、簡介等,即: public Bitmap DownloadBitmap(String bmurl){ Bitmap bm=null; InputStream is=null; BufferedInputStream bis=null; try{ URL url=new URL(bmurl); URLConnection connection=url.openConnection(); bis=new BufferedInputStream(connection.getInputStream()); bm=BitmapFactory.decodeStream(bis);} } 4.4.3 圖書信息存儲 存儲反饋的圖書信息,以備管理員和書友管理、查詢。將圖書信息拆分為String數(shù)組進(jìn)行傳輸,并保存到數(shù)據(jù)庫中,管理員可以根據(jù)圖書信息審核圖書,書友可以根據(jù)圖書信息決定是否借閱,即: Socket socket=new Socket("192.168.1.107",8888); System.out.println("Client connected"); DataOutputStream dout = new DataOutputStream(socket.getOutputStream()); String query=String.format("addbook/%s/%s/%s/%d",isbn, bookname,bookcorner,quantity); dout.writeUTF(query); DataInputStream din = new DataInputStream(socket.getInputStream()); String msg=din.readUTF(); 4.4.4 路徑規(guī)劃 決定了需要借閱的圖書后,APP可以引導(dǎo)書友到相應(yīng)的借閱點借閱圖書。 先確定書友的位置,再根據(jù)借閱點的位置自動為書友規(guī)劃出最佳路徑,以節(jié)約書友的時間和空間成本,即:if(location==null||mMapView==null)return; MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius()).direc tion(100).latitude(location.getLatitude()).longitude(location.get Longitude()).build();if(isFirstLoc){ isFirstLoc=false; LatLng ll=new LatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdate u=MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(u);} 本文針對現(xiàn)有圖書漂流的不足,結(jié)合當(dāng)前Android平臺的巨大優(yōu)勢,將傳統(tǒng)圖書漂流與Android平臺有機結(jié)合,提出了基于Android平臺的圖書漂流APP開發(fā)方案。該APP提供了線上交流平臺和線下交易系統(tǒng),使書友在線下能夠輕松查詢并借閱自己想要的圖書,同時,在線上與其他愛書之人共享自己的讀書心得,徹底打破傳統(tǒng)的圖書館—書友的單一結(jié)構(gòu),以網(wǎng)狀形式覆蓋城市借閱點,讓書友不再受時間和空間的限制,閑暇之余可輕松借閱。5 結(jié)束語