張國祥,舒玉坤
(1.湖北師范學院 物理與電子科學學院,湖北 黃石 435002; 2.武漢大學 微電子與信息技術研究院,湖北 武漢 430079)
目前圖書管理系統存在的問題主要表現在:1)檢索速度慢、效率低。圖書館的規模越大,這個問題越突出。2)借書、還書工作量大,而且常出現差錯。3)圖書統計工作難。4)不能隨時隨地了解圖書館的信息及本人圖書借還、借期等情況,操作不方便。
高校近年的發展速度快,圖書館的規模和藏書數量也不斷的擴大,為了解決海量圖書的管理問題,改變傳統的管理方式迫在眉睫。隨著計算機的廣泛應用,其逐步成為現代化的標志,圖書館面對大量的讀者信息,書籍信息以及兩者相互作用產生的借書信息、還書信息,因此需要對這些信息進行管理,及時了解各個環節中信息的變更。
長期以來,圖書館是圖書文獻的典藏和利用的場所,如今正逐步拓展成現代信息中心。圖書館利用自動化、網絡化和數字化等技術手段,對館藏的和可獲取的信息資源進行加工整合,以滿足用戶不斷增長的信息需求,未來的現代圖書館將成為基于互聯網的知識信息中心,其特點是:分布式的資源庫、多媒體的信息集合、超大規模海量存儲、跨庫無縫鏈接、智能檢索,用戶可隨時隨地得到其服務。
圖書館2.0五定律認為:未來的現代圖書館是以用戶為中心的虛擬社區、圖書館沒有障礙、圖書館無處不在、無縫的用戶體驗、永遠的測試版[1]。測試版的含義就是仍處在不斷發展、不斷完善的進程中,需要與時俱進,體現了“圖書館是一個不斷生長的有機體”的時代特征。因此,研究和開發基于Android平臺的圖書館管理系統很有必要。
本系統將遵循軟件工程的方法,從需求分析、系統分析、概要設計、詳細設計、到測試與調試等一系列的開發過程,內容包括:后臺數據庫設計和客戶端設計,同時實現數據庫的建立和維護;圖書館對外借書、還書的簡易操作;對所藏圖書的按書名、作者、出版社等組合查詢;建立圖書館外借讀者數據庫,方便工作人員對讀者進行有效管理;建立圖書館工作人員數據庫,限定每個工作人員的權限,最大限度的保護數據安全;實現圖書館對新書入庫,舊書注銷的處理。
本設計主要完成基于Android平臺的軟件開發、數據庫的設計,最終實現用戶登錄、借閱管理,歸還管理,除了這些核心功能外,還包括一些輔助功能,如用戶管理、參數設置、圖書管理、統計查詢。在整個設計中采用JAVA編程,也運用到了一些前端控件來控制輸入信息,對輸入信息進行驗證,通過JDBC連接數據庫,在系統規劃中先后用數據流程圖、系統功能結構圖分析系統所需的各種數據,詳細的展現系統的各個功能模塊。
數據庫管理系統DBMS的主要目標是提供一個可以方便、高效地存取數據庫信息的環境,設計數據庫系統的目的是為了管理大量信息。設計數據庫必須遵循一定的規則,在關系型數據庫中的規則是范式,常用范式有1NF、2NF、3NF、4NF、5NF, 判斷規范化程度表中所有屬性都是單純域,不存在表中有表的情況;非主屬性相互獨立,不存在函數依賴;非主屬性完全依賴于關鍵字,一般以三范式的要求以減少數據冗余,節約存儲空間,同時加快增、刪、改的速度[2]。整個系統所包括的信息有圖書信息、圖書借閱信息、讀者信息、系統用戶信息等。可將這些信息抽象為系統所需要的數據項和數據結構:(帶下劃線表示主鍵)
1)圖書信息(圖書編號ID、書名、圖書類型、圖書簡介、作者、譯者、ISBN號、價格、出版社、典藏點、入庫時間、操作員)
2)圖書借閱信息(圖書編號ID、讀者ID、借出時間、應還時間、是否歸還、操作員)
3) 讀者信息(讀者編號ID、姓名、性別、條形碼、讀者類型、出生年月、證件名稱、證件號碼、登記日期、電話、郵箱、操作員)
4) 系統用戶信息(管理員編號ID、名稱、密碼)
該系統在Android環境下,主要采用JAVA開發工具,MySQL數據庫來設計,開發過程應遵循GB/T 11457-1995軟件工程標準,GB/T 8567-1988計算機軟件產品開發文件編制指南等。繪制系統結構圖的過程,實際上就是對系統功能模塊進行分解設計的過程,即合理地將數據流程圖轉變為所需要的系統結構圖。系統結構圖將會使讀者或用戶能直觀的了解系統的結構模式,理解系統的各個功能的結構,能很好地方便用戶使用和理解整個系統[3]。
根據需求分析的結果,按照“低耦合、高內聚”的原則[4],本系統將劃分為以下主要功能模塊:系統首頁(圖書推薦)、查找圖書、讀者信息、圖書管理、更多功能。其軟件界面如圖1、2.
3.1.1 J2EE平臺 J2EE即Java2平臺企業版,是原Sun公司為企業級應用推出的標準平臺。它簡化了企業解決方案的開發、部署和管理相關復雜問題的體系結構,具有“編寫一次、隨處運行”的特性、方便存取數據庫的JDBC、API以及能夠在Internet應用中保護數據的安全模式等[5]。
3.1.2 Android系統 Android是基于Linux內核的操作系統。它由Linux 內核層、開發庫層、應用框架層、應用程序層四個層次組成。Android 上應用程序有活動(Activity)、服務(Service)、接收器(Receiver)和ContentProvider 四種主要類型。活動是Android最常用的應用程序形式。一個應用程序可包括一個或多個活動;服務是在后臺運行著的應用程序;接收器接受請求并處理intent;ContentProvider是數據儲存抽象機制[6]。

圖1 系統首頁界面 圖2 更多功能界面
3.1.3 開發工具Eclipse Eclipse 是一個開放源代碼,基于 Java 的可擴展開發平臺,就其本身而言,它只是一個框架和一組服務,通過插件組件構建開發環境。主要由Eclipse項目、Eclipse工具項目和Eclipse技術項目三個項目組成,由Eclipse Platform、JDT、CDT和PDE四個部分組成。 Eclipse SDK(軟件開發者包)是Eclipse Platform、JDT和PDE組件的合并。提供了一個具有豐富特性的開發環境,允許開發者有效地建造可以無縫集成到Eclipse Platform中的工具。
3.1.4 JDBC接口 JDBC是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為數據庫開發人員提供了一個標準的API,據此可以構建更高級的工具和接口,使數據庫開發人員能夠用純 Java API 編寫數據庫應用程序,有了JDBC API,就不必為訪問不同的數據庫專門寫程序;同時,將Java語言和JDBC結合起來使程序員不必為不同的平臺編寫不同的應用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,處處運行”的優勢。
3.2.1 MVC架構 系統主要采用模型-視圖-控制器MVC(Model-View-Controller)架構的設計模式,MVC應用程序由三部分組成,Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的數據或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中獲取數據來刷新自己。MVC架構需要其它模式協作完成,在J2EE模式目錄中,通常采用service to worker模式實現,它由集中控制器模式,派遣模式和Page Helper模式組成。而Struts只實現了MVC的View和Controller兩個部分,Model部分需要開發者自己來實現,Struts提供了抽象類Action使開發者能將Model應用于Struts框架中[7]。
3.2.2 輕量級 MySQL是一個中小型關系型數據庫管理系統,MySQL軟件采用了GPL(GNU通用公共許可證),由于其體積小、速度快、成本低,尤其是開放源碼這一特點,作為輕量級數據庫,對Android平臺的圖書館管理系統而言,是一個不錯的選擇。
Android為我們提供了一個SharedPreferences類,它是一個輕量級的存儲類,特別適合用于保存軟件配置參數及曾經輸入過的信息[5~6]。使用SharedPreferences保存數據,其后臺用xml文件存放數據,文件存放在/data/data/
getSharedPreferences(name,mode)方法的第一個參數用于指定該文件的名稱,第二個參數指定文件的操作模式,共有四種操作模式:1)Activity.MODE_PRIVATE,默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中,可以使用Activity.MODE_APPEND ;2)Activity.MODE_WORLD_READABLE表示當前文件可以被其他應用讀; 3)Activity.MODE_WORLD_WRITEABLE表示當前文件可以被其他應用寫入, 如果希望文件被其他應用讀和寫,可以用Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE ;4)Activity.MODE_APPEND該模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
3.2.3 數據庫的連接 在命令行連接Mysql數據時,需首先下載MySQL的jdbc驅動[8~9],并加入到環境變量classpath中;如果在eclipse下連接MySQL,則要把jdbc的jar包包含到你的工程中去,建一個工程,點擊 project->properties,在彈出的對話框里點Libraries,在右邊點擊 Add External JARs ,選擇jdbc的mysql-connector-java-5.1.6-bin.jar文件即可。你會發現工程下多了引用,這說明已經加到你的工程中了。
3.2.4 查找圖書 圖書查詢子模塊是對館藏圖書和讀者當前的借閱情況進行查詢的一種操作,具有此權限的用戶登錄并進入該操作界面后選中相應的查詢條件,并輸入相應的查詢信息,系統即可檢索后臺數據庫并在前臺終端顯示被查詢的圖書的狀態[10~11],或相應讀者的借閱情況,此子功能操作界面如圖3:

圖3 圖書查詢操作界面
系統允許通過書名、作者、出版社進行簡單查詢,也可通過書名、作者、出版社任意組合進行查詢得到向量,并通過適配器將數據顯示[12~13]。其實現代碼如下:
// 通過作者、書名和出版社進行查詢
public static Vector
{
Vector
try
{
Connection con = getConnection();
Statement st = con.createStatement();
String sql = "select ISBN,B_Name,B_Author, B_Publishment from book where B_Name like ′%" + BookName + "%′ and B_Author like ′%" + Author + "%′ and B_Publishment like ′%" + Publishment + "%′";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) // 將結果集信息添加到返回向量中
{v.add(rs.getString(1));
v.add(rs.getString(2));
v.add(rs.getString(3));
v.add(rs.getString(4));
}
rs.close();
st.close();
con.close();
}
return v;
}
public BaseAdapter gridView(Vector
{
SimpleAdapter sca = new SimpleAdapter(this, generateDataList(v, result), // 數據List
R.layout.grid_row, // 行對應layout id
new String[]{ "ColumnNames1", "ColumnNames2", "ColumnNames3", "ColumnNames4", "ColumnNames5" }, // 列名列表
new int[]
{ R.id.TextView02, R.id.TextView04, R.id.TextView06, R.id.TextView08, R.id.TextView10 }
);
return sca;
}
setContentView(R.layout.grid_main);
mTitleView = (TextView) findViewById(R.id.title_text);
mTitleView.setText(R.string.category_search); // 顯示主標題
GridView gv = (GridView) findViewById(R.id.GridView01);
generateDataList(queryTOgird, resultnumdetails);
gv.setAdapter(gridView(queryTOgird, resultnumdetails));
3.2.5 中文亂碼及解決辦法 Android訪問MySql數據庫,有時,客戶端顯示中文時卻出現了亂碼。為了避免亂碼的出現,可采取統一編碼。Android默認編碼是UTF-8,為國際通用編碼,所以在數據庫、客戶端以及服務器端都統一設置為UTF-8。如獲得數據庫連接對象conn方法:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Library_DB?useUnicode=true&characterEncoding=utf-8","username","password")。通過處理,中文亂碼的現象就不會出現了。
本系統是在Android平臺下開發的一個小型的移動圖書管理系統,它允許讀者通過書名、作者、出版社等條件的任意組合查詢圖書館的藏書以及本人的借書情況,方便讀者借還圖書,由于使用了開放式Android平臺的輕量級存儲類以及輕量級Mysql數據庫,因此,該系統小巧、數據緊湊,運行的速度快,可在手機上通過WiFi或3G體驗5A模式即“任何用戶(Any user),在任何時候(Any time)、任何地點(Anywhere), 獲得任何圖書館(Any library)擁有的任何信息資源(Any information resource)”,從而突破時間、空間的限制,以“用戶為中心,提供無所不在”的開放式、深層次的知識服務,為移動圖書館的發展起到一定的促進作用。
[1]阮岡納贊. 圖書館學五定律[M]. 夏 云,譯.北京: 書目文獻出版社, 1988.
[2]薩師煊,王 珊. 數據庫系統概論[M].北京:高等教育出版社,1991.
[3]王立福. 軟件工程(第2版)[M]. 北京:北京大學出版社,2002.
[4]Norman R J.Object-oriented System Analysis and Design [M].New York: Prentice-Hall Inc.1996.
[5]Sayed Y Hashimi,Satya Komatineni. 精通Android2[M]. 北京:人民郵電出版社,2010.
[6]吳亞峰,蘇亞光.Android應用案例開發大全[M].北京:人民郵電出版社,2011.
[7]孫福振,李 艷, 李業剛. 基于J2EE 的MVC 設計模式的研究與實現[J]. 山東理工大學學報(自然科學版),2006,20(3):49~56.
[8]Paul DuBois. MySQL網絡數據庫指南 [M]. 北京:機械工業出版社,2000.
[9]張 斌,高 波. Linux網絡編程 [M].北京:清華大學出版社,2000.
[10]Andrew S. Tanenbaum. Computer Networks (Third Edition) [M].北京:清華大學出版社,1998.
[11]張國祥, 舒玉坤. IC卡收銀管理信息系統安全性的應用與研究[J].湖北師范學院學報(自然科學版),2008,28 (4):1~4.
[12]張國祥. Delphi ADOX在收銀系統中的研究與應用[J]. 微計算機信息(管控一體化) ,2008,24(09):263~264.
[13]張國祥.校園網計費系統的研究與實現[J]. 武漢理工大學學報(信息與管理工程版),2005,27(6): 49~52.