張國(guó)祥,舒玉坤
(1.湖北師范學(xué)院 物理與電子科學(xué)學(xué)院,湖北 黃石 435002; 2.武漢大學(xué) 微電子與信息技術(shù)研究院,湖北 武漢 430079)
目前圖書(shū)管理系統(tǒng)存在的問(wèn)題主要表現(xiàn)在:1)檢索速度慢、效率低。圖書(shū)館的規(guī)模越大,這個(gè)問(wèn)題越突出。2)借書(shū)、還書(shū)工作量大,而且常出現(xiàn)差錯(cuò)。3)圖書(shū)統(tǒng)計(jì)工作難。4)不能隨時(shí)隨地了解圖書(shū)館的信息及本人圖書(shū)借還、借期等情況,操作不方便。
高校近年的發(fā)展速度快,圖書(shū)館的規(guī)模和藏書(shū)數(shù)量也不斷的擴(kuò)大,為了解決海量圖書(shū)的管理問(wèn)題,改變傳統(tǒng)的管理方式迫在眉睫。隨著計(jì)算機(jī)的廣泛應(yīng)用,其逐步成為現(xiàn)代化的標(biāo)志,圖書(shū)館面對(duì)大量的讀者信息,書(shū)籍信息以及兩者相互作用產(chǎn)生的借書(shū)信息、還書(shū)信息,因此需要對(duì)這些信息進(jìn)行管理,及時(shí)了解各個(gè)環(huán)節(jié)中信息的變更。
長(zhǎng)期以來(lái),圖書(shū)館是圖書(shū)文獻(xiàn)的典藏和利用的場(chǎng)所,如今正逐步拓展成現(xiàn)代信息中心。圖書(shū)館利用自動(dòng)化、網(wǎng)絡(luò)化和數(shù)字化等技術(shù)手段,對(duì)館藏的和可獲取的信息資源進(jìn)行加工整合,以滿足用戶不斷增長(zhǎng)的信息需求,未來(lái)的現(xiàn)代圖書(shū)館將成為基于互聯(lián)網(wǎng)的知識(shí)信息中心,其特點(diǎn)是:分布式的資源庫(kù)、多媒體的信息集合、超大規(guī)模海量存儲(chǔ)、跨庫(kù)無(wú)縫鏈接、智能檢索,用戶可隨時(shí)隨地得到其服務(wù)。
圖書(shū)館2.0五定律認(rèn)為:未來(lái)的現(xiàn)代圖書(shū)館是以用戶為中心的虛擬社區(qū)、圖書(shū)館沒(méi)有障礙、圖書(shū)館無(wú)處不在、無(wú)縫的用戶體驗(yàn)、永遠(yuǎn)的測(cè)試版[1]。測(cè)試版的含義就是仍處在不斷發(fā)展、不斷完善的進(jìn)程中,需要與時(shí)俱進(jìn),體現(xiàn)了“圖書(shū)館是一個(gè)不斷生長(zhǎng)的有機(jī)體”的時(shí)代特征。因此,研究和開(kāi)發(fā)基于Android平臺(tái)的圖書(shū)館管理系統(tǒng)很有必要。
本系統(tǒng)將遵循軟件工程的方法,從需求分析、系統(tǒng)分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、到測(cè)試與調(diào)試等一系列的開(kāi)發(fā)過(guò)程,內(nèi)容包括:后臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)和客戶端設(shè)計(jì),同時(shí)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的建立和維護(hù);圖書(shū)館對(duì)外借書(shū)、還書(shū)的簡(jiǎn)易操作;對(duì)所藏圖書(shū)的按書(shū)名、作者、出版社等組合查詢(xún);建立圖書(shū)館外借讀者數(shù)據(jù)庫(kù),方便工作人員對(duì)讀者進(jìn)行有效管理;建立圖書(shū)館工作人員數(shù)據(jù)庫(kù),限定每個(gè)工作人員的權(quán)限,最大限度的保護(hù)數(shù)據(jù)安全;實(shí)現(xiàn)圖書(shū)館對(duì)新書(shū)入庫(kù),舊書(shū)注銷(xiāo)的處理。
本設(shè)計(jì)主要完成基于Android平臺(tái)的軟件開(kāi)發(fā)、數(shù)據(jù)庫(kù)的設(shè)計(jì),最終實(shí)現(xiàn)用戶登錄、借閱管理,歸還管理,除了這些核心功能外,還包括一些輔助功能,如用戶管理、參數(shù)設(shè)置、圖書(shū)管理、統(tǒng)計(jì)查詢(xún)。在整個(gè)設(shè)計(jì)中采用JAVA編程,也運(yùn)用到了一些前端控件來(lái)控制輸入信息,對(duì)輸入信息進(jìn)行驗(yàn)證,通過(guò)JDBC連接數(shù)據(jù)庫(kù),在系統(tǒng)規(guī)劃中先后用數(shù)據(jù)流程圖、系統(tǒng)功能結(jié)構(gòu)圖分析系統(tǒng)所需的各種數(shù)據(jù),詳細(xì)的展現(xiàn)系統(tǒng)的各個(gè)功能模塊。
數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS的主要目標(biāo)是提供一個(gè)可以方便、高效地存取數(shù)據(jù)庫(kù)信息的環(huán)境,設(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng)的目的是為了管理大量信息。設(shè)計(jì)數(shù)據(jù)庫(kù)必須遵循一定的規(guī)則,在關(guān)系型數(shù)據(jù)庫(kù)中的規(guī)則是范式,常用范式有1NF、2NF、3NF、4NF、5NF, 判斷規(guī)范化程度表中所有屬性都是單純域,不存在表中有表的情況;非主屬性相互獨(dú)立,不存在函數(shù)依賴(lài);非主屬性完全依賴(lài)于關(guān)鍵字,一般以三范式的要求以減少數(shù)據(jù)冗余,節(jié)約存儲(chǔ)空間,同時(shí)加快增、刪、改的速度[2]。整個(gè)系統(tǒng)所包括的信息有圖書(shū)信息、圖書(shū)借閱信息、讀者信息、系統(tǒng)用戶信息等??蓪⑦@些信息抽象為系統(tǒng)所需要的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):(帶下劃線表示主鍵)
1)圖書(shū)信息(圖書(shū)編號(hào)ID、書(shū)名、圖書(shū)類(lèi)型、圖書(shū)簡(jiǎn)介、作者、譯者、ISBN號(hào)、價(jià)格、出版社、典藏點(diǎn)、入庫(kù)時(shí)間、操作員)
2)圖書(shū)借閱信息(圖書(shū)編號(hào)ID、讀者ID、借出時(shí)間、應(yīng)還時(shí)間、是否歸還、操作員)
3) 讀者信息(讀者編號(hào)ID、姓名、性別、條形碼、讀者類(lèi)型、出生年月、證件名稱(chēng)、證件號(hào)碼、登記日期、電話、郵箱、操作員)
4) 系統(tǒng)用戶信息(管理員編號(hào)ID、名稱(chēng)、密碼)
該系統(tǒng)在Android環(huán)境下,主要采用JAVA開(kāi)發(fā)工具,MySQL數(shù)據(jù)庫(kù)來(lái)設(shè)計(jì),開(kāi)發(fā)過(guò)程應(yīng)遵循GB/T 11457-1995軟件工程標(biāo)準(zhǔn),GB/T 8567-1988計(jì)算機(jī)軟件產(chǎn)品開(kāi)發(fā)文件編制指南等。繪制系統(tǒng)結(jié)構(gòu)圖的過(guò)程,實(shí)際上就是對(duì)系統(tǒng)功能模塊進(jìn)行分解設(shè)計(jì)的過(guò)程,即合理地將數(shù)據(jù)流程圖轉(zhuǎn)變?yōu)樗枰南到y(tǒng)結(jié)構(gòu)圖。系統(tǒng)結(jié)構(gòu)圖將會(huì)使讀者或用戶能直觀的了解系統(tǒng)的結(jié)構(gòu)模式,理解系統(tǒng)的各個(gè)功能的結(jié)構(gòu),能很好地方便用戶使用和理解整個(gè)系統(tǒng)[3]。
根據(jù)需求分析的結(jié)果,按照“低耦合、高內(nèi)聚”的原則[4],本系統(tǒng)將劃分為以下主要功能模塊:系統(tǒng)首頁(yè)(圖書(shū)推薦)、查找圖書(shū)、讀者信息、圖書(shū)管理、更多功能。其軟件界面如圖1、2.
3.1.1 J2EE平臺(tái) J2EE即Java2平臺(tái)企業(yè)版,是原Sun公司為企業(yè)級(jí)應(yīng)用推出的標(biāo)準(zhǔn)平臺(tái)。它簡(jiǎn)化了企業(yè)解決方案的開(kāi)發(fā)、部署和管理相關(guān)復(fù)雜問(wèn)題的體系結(jié)構(gòu),具有“編寫(xiě)一次、隨處運(yùn)行”的特性、方便存取數(shù)據(jù)庫(kù)的JDBC、API以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等[5]。
3.1.2 Android系統(tǒng) Android是基于Linux內(nèi)核的操作系統(tǒng)。它由Linux 內(nèi)核層、開(kāi)發(fā)庫(kù)層、應(yīng)用框架層、應(yīng)用程序?qū)铀膫€(gè)層次組成。Android 上應(yīng)用程序有活動(dòng)(Activity)、服務(wù)(Service)、接收器(Receiver)和ContentProvider 四種主要類(lèi)型。活動(dòng)是Android最常用的應(yīng)用程序形式。一個(gè)應(yīng)用程序可包括一個(gè)或多個(gè)活動(dòng);服務(wù)是在后臺(tái)運(yùn)行著的應(yīng)用程序;接收器接受請(qǐng)求并處理intent;ContentProvider是數(shù)據(jù)儲(chǔ)存抽象機(jī)制[6]。
圖1 系統(tǒng)首頁(yè)界面 圖2 更多功能界面
3.1.3 開(kāi)發(fā)工具Eclipse Eclipse 是一個(gè)開(kāi)放源代碼,基于 Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái),就其本身而言,它只是一個(gè)框架和一組服務(wù),通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。主要由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,由Eclipse Platform、JDT、CDT和PDE四個(gè)部分組成。 Eclipse SDK(軟件開(kāi)發(fā)者包)是Eclipse Platform、JDT和PDE組件的合并。提供了一個(gè)具有豐富特性的開(kāi)發(fā)環(huán)境,允許開(kāi)發(fā)者有效地建造可以無(wú)縫集成到Eclipse Platform中的工具。
3.1.4 JDBC接口 JDBC是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成。JDBC為數(shù)據(jù)庫(kù)開(kāi)發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠用純 Java API 編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序,有了JDBC API,就不必為訪問(wèn)不同的數(shù)據(jù)庫(kù)專(zhuān)門(mén)寫(xiě)程序;同時(shí),將Java語(yǔ)言和JDBC結(jié)合起來(lái)使程序員不必為不同的平臺(tái)編寫(xiě)不同的應(yīng)用程序,只須寫(xiě)一遍程序就可以讓它在任何平臺(tái)上運(yùn)行,這也是Java語(yǔ)言“編寫(xiě)一次,處處運(yùn)行”的優(yōu)勢(shì)。
3.2.1 MVC架構(gòu) 系統(tǒng)主要采用模型-視圖-控制器MVC(Model-View-Controller)架構(gòu)的設(shè)計(jì)模式,MVC應(yīng)用程序由三部分組成,Event(事件)導(dǎo)致Controller改變Model或View,或者同時(shí)改變兩者。只要Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴(lài)的View都會(huì)自動(dòng)更新。類(lèi)似的,只要Controller改變了View,View會(huì)從潛在的Model中獲取數(shù)據(jù)來(lái)刷新自己。MVC架構(gòu)需要其它模式協(xié)作完成,在J2EE模式目錄中,通常采用service to worker模式實(shí)現(xiàn),它由集中控制器模式,派遣模式和Page Helper模式組成。而Struts只實(shí)現(xiàn)了MVC的View和Controller兩個(gè)部分,Model部分需要開(kāi)發(fā)者自己來(lái)實(shí)現(xiàn),Struts提供了抽象類(lèi)Action使開(kāi)發(fā)者能將Model應(yīng)用于Struts框架中[7]。
3.2.2 輕量級(jí) MySQL是一個(gè)中小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL軟件采用了GPL(GNU通用公共許可證),由于其體積小、速度快、成本低,尤其是開(kāi)放源碼這一特點(diǎn),作為輕量級(jí)數(shù)據(jù)庫(kù),對(duì)Android平臺(tái)的圖書(shū)館管理系統(tǒng)而言,是一個(gè)不錯(cuò)的選擇。
Android為我們提供了一個(gè)SharedPreferences類(lèi),它是一個(gè)輕量級(jí)的存儲(chǔ)類(lèi),特別適合用于保存軟件配置參數(shù)及曾經(jīng)輸入過(guò)的信息[5~6]。使用SharedPreferences保存數(shù)據(jù),其后臺(tái)用xml文件存放數(shù)據(jù),文件存放在/data/data/
getSharedPreferences(name,mode)方法的第一個(gè)參數(shù)用于指定該文件的名稱(chēng),第二個(gè)參數(shù)指定文件的操作模式,共有四種操作模式:1)Activity.MODE_PRIVATE,默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問(wèn),在該模式下,寫(xiě)入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容,如果想把新寫(xiě)入的內(nèi)容追加到原文件中,可以使用Activity.MODE_APPEND ;2)Activity.MODE_WORLD_READABLE表示當(dāng)前文件可以被其他應(yīng)用讀; 3)Activity.MODE_WORLD_WRITEABLE表示當(dāng)前文件可以被其他應(yīng)用寫(xiě)入, 如果希望文件被其他應(yīng)用讀和寫(xiě),可以用Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE ;4)Activity.MODE_APPEND該模式會(huì)檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。
3.2.3 數(shù)據(jù)庫(kù)的連接 在命令行連接Mysql數(shù)據(jù)時(shí),需首先下載MySQL的jdbc驅(qū)動(dòng)[8~9],并加入到環(huán)境變量classpath中;如果在eclipse下連接MySQL,則要把jdbc的jar包包含到你的工程中去,建一個(gè)工程,點(diǎn)擊 project->properties,在彈出的對(duì)話框里點(diǎn)Libraries,在右邊點(diǎn)擊 Add External JARs ,選擇jdbc的mysql-connector-java-5.1.6-bin.jar文件即可。你會(huì)發(fā)現(xiàn)工程下多了引用,這說(shuō)明已經(jīng)加到你的工程中了。
3.2.4 查找圖書(shū) 圖書(shū)查詢(xún)子模塊是對(duì)館藏圖書(shū)和讀者當(dāng)前的借閱情況進(jìn)行查詢(xún)的一種操作,具有此權(quán)限的用戶登錄并進(jìn)入該操作界面后選中相應(yīng)的查詢(xún)條件,并輸入相應(yīng)的查詢(xún)信息,系統(tǒng)即可檢索后臺(tái)數(shù)據(jù)庫(kù)并在前臺(tái)終端顯示被查詢(xún)的圖書(shū)的狀態(tài)[10~11],或相應(yīng)讀者的借閱情況,此子功能操作界面如圖3:
圖3 圖書(shū)查詢(xún)操作界面
系統(tǒng)允許通過(guò)書(shū)名、作者、出版社進(jìn)行簡(jiǎn)單查詢(xún),也可通過(guò)書(shū)名、作者、出版社任意組合進(jìn)行查詢(xún)得到向量,并通過(guò)適配器將數(shù)據(jù)顯示[12~13]。其實(shí)現(xiàn)代碼如下:
// 通過(guò)作者、書(shū)名和出版社進(jìn)行查詢(xún)
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()) // 將結(jié)果集信息添加到返回向量中
{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), // 數(shù)據(jù)List
R.layout.grid_row, // 行對(duì)應(yīng)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); // 顯示主標(biāo)題
GridView gv = (GridView) findViewById(R.id.GridView01);
generateDataList(queryTOgird, resultnumdetails);
gv.setAdapter(gridView(queryTOgird, resultnumdetails));
3.2.5 中文亂碼及解決辦法 Android訪問(wèn)MySql數(shù)據(jù)庫(kù),有時(shí),客戶端顯示中文時(shí)卻出現(xiàn)了亂碼。為了避免亂碼的出現(xiàn),可采取統(tǒng)一編碼。Android默認(rèn)編碼是UTF-8,為國(guó)際通用編碼,所以在數(shù)據(jù)庫(kù)、客戶端以及服務(wù)器端都統(tǒng)一設(shè)置為UTF-8。如獲得數(shù)據(jù)庫(kù)連接對(duì)象conn方法:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Library_DB?useUnicode=true&characterEncoding=utf-8","username","password")。通過(guò)處理,中文亂碼的現(xiàn)象就不會(huì)出現(xiàn)了。
本系統(tǒng)是在Android平臺(tái)下開(kāi)發(fā)的一個(gè)小型的移動(dòng)圖書(shū)管理系統(tǒng),它允許讀者通過(guò)書(shū)名、作者、出版社等條件的任意組合查詢(xún)圖書(shū)館的藏書(shū)以及本人的借書(shū)情況,方便讀者借還圖書(shū),由于使用了開(kāi)放式Android平臺(tái)的輕量級(jí)存儲(chǔ)類(lèi)以及輕量級(jí)Mysql數(shù)據(jù)庫(kù),因此,該系統(tǒng)小巧、數(shù)據(jù)緊湊,運(yùn)行的速度快,可在手機(jī)上通過(guò)WiFi或3G體驗(yàn)5A模式即“任何用戶(Any user),在任何時(shí)候(Any time)、任何地點(diǎn)(Anywhere), 獲得任何圖書(shū)館(Any library)擁有的任何信息資源(Any information resource)”,從而突破時(shí)間、空間的限制,以“用戶為中心,提供無(wú)所不在”的開(kāi)放式、深層次的知識(shí)服務(wù),為移動(dòng)圖書(shū)館的發(fā)展起到一定的促進(jìn)作用。
[1]阮岡納贊. 圖書(shū)館學(xué)五定律[M]. 夏 云,譯.北京: 書(shū)目文獻(xiàn)出版社, 1988.
[2]薩師煊,王 珊. 數(shù)據(jù)庫(kù)系統(tǒng)概論[M].北京:高等教育出版社,1991.
[3]王立福. 軟件工程(第2版)[M]. 北京:北京大學(xué)出版社,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應(yīng)用案例開(kāi)發(fā)大全[M].北京:人民郵電出版社,2011.
[7]孫福振,李 艷, 李業(yè)剛. 基于J2EE 的MVC 設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J]. 山東理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,20(3):49~56.
[8]Paul DuBois. MySQL網(wǎng)絡(luò)數(shù)據(jù)庫(kù)指南 [M]. 北京:機(jī)械工業(yè)出版社,2000.
[9]張 斌,高 波. Linux網(wǎng)絡(luò)編程 [M].北京:清華大學(xué)出版社,2000.
[10]Andrew S. Tanenbaum. Computer Networks (Third Edition) [M].北京:清華大學(xué)出版社,1998.
[11]張國(guó)祥, 舒玉坤. IC卡收銀管理信息系統(tǒng)安全性的應(yīng)用與研究[J].湖北師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2008,28 (4):1~4.
[12]張國(guó)祥. Delphi ADOX在收銀系統(tǒng)中的研究與應(yīng)用[J]. 微計(jì)算機(jī)信息(管控一體化) ,2008,24(09):263~264.
[13]張國(guó)祥.校園網(wǎng)計(jì)費(fèi)系統(tǒng)的研究與實(shí)現(xiàn)[J]. 武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),2005,27(6): 49~52.