基于Android平台的轻量级图书馆管理系统的研究与实现

2013-09-03 07:11张国祥舒玉坤
关键词:应用程序图书数据库

张国祥,舒玉坤

(1.湖北师范学院 物理与电子科学学院,湖北 黄石 435002; 2.武汉大学 微电子与信息技术研究院,湖北 武汉 430079)

0 引言

目前图书管理系统存在的问题主要表现在:1)检索速度慢、效率低。图书馆的规模越大,这个问题越突出。2)借书、还书工作量大,而且常出现差错。3)图书统计工作难。4)不能随时随地了解图书馆的信息及本人图书借还、借期等情况,操作不方便。

高校近年的发展速度快,图书馆的规模和藏书数量也不断的扩大,为了解决海量图书的管理问题,改变传统的管理方式迫在眉睫。随着计算机的广泛应用,其逐步成为现代化的标志,图书馆面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息、还书信息,因此需要对这些信息进行管理,及时了解各个环节中信息的变更。

长期以来,图书馆是图书文献的典藏和利用的场所,如今正逐步拓展成现代信息中心。图书馆利用自动化、网络化和数字化等技术手段,对馆藏的和可获取的信息资源进行加工整合,以满足用户不断增长的信息需求,未来的现代图书馆将成为基于互联网的知识信息中心,其特点是:分布式的资源库、多媒体的信息集合、超大规模海量存储、跨库无缝链接、智能检索,用户可随时随地得到其服务。

图书馆2.0五定律认为:未来的现代图书馆是以用户为中心的虚拟社区、图书馆没有障碍、图书馆无处不在、无缝的用户体验、永远的测试版[1]。测试版的含义就是仍处在不断发展、不断完善的进程中,需要与时俱进,体现了“图书馆是一个不断生长的有机体”的时代特征。因此,研究和开发基于Android平台的图书馆管理系统很有必要。

1 图书借阅管理需求分析

本系统将遵循软件工程的方法,从需求分析、系统分析、概要设计、详细设计、到测试与调试等一系列的开发过程,内容包括:后台数据库设计和客户端设计,同时实现数据库的建立和维护;图书馆对外借书、还书的简易操作;对所藏图书的按书名、作者、出版社等组合查询;建立图书馆外借读者数据库,方便工作人员对读者进行有效管理;建立图书馆工作人员数据库,限定每个工作人员的权限,最大限度的保护数据安全;实现图书馆对新书入库,旧书注销的处理。

本设计主要完成基于Android平台的软件开发、数据库的设计,最终实现用户登录、借阅管理,归还管理,除了这些核心功能外,还包括一些辅助功能,如用户管理、参数设置、图书管理、统计查询。在整个设计中采用JAVA编程,也运用到了一些前端控件来控制输入信息,对输入信息进行验证,通过JDBC连接数据库,在系统规划中先后用数据流程图、系统功能结构图分析系统所需的各种数据,详细的展现系统的各个功能模块。

2 总体设计

2.1 数据库设计

数据库管理系统DBMS的主要目标是提供一个可以方便、高效地存取数据库信息的环境,设计数据库系统的目的是为了管理大量信息。设计数据库必须遵循一定的规则,在关系型数据库中的规则是范式,常用范式有1NF、2NF、3NF、4NF、5NF, 判断规范化程度表中所有属性都是单纯域,不存在表中有表的情况;非主属性相互独立,不存在函数依赖;非主属性完全依赖于关键字,一般以三范式的要求以减少数据冗余,节约存储空间,同时加快增、删、改的速度[2]。整个系统所包括的信息有图书信息、图书借阅信息、读者信息、系统用户信息等。可将这些信息抽象为系统所需要的数据项和数据结构:(带下划线表示主键)

1)图书信息(图书编号ID、书名、图书类型、图书简介、作者、译者、ISBN号、价格、出版社、典藏点、入库时间、操作员)

2)图书借阅信息(图书编号ID、读者ID、借出时间、应还时间、是否归还、操作员)

3) 读者信息(读者编号ID、姓名、性别、条形码、读者类型、出生年月、证件名称、证件号码、登记日期、电话、邮箱、操作员)

4) 系统用户信息(管理员编号ID、名称、密码)

2.2 结构设计

该系统在Android环境下,主要采用JAVA开发工具,MySQL数据库来设计,开发过程应遵循GB/T 11457-1995软件工程标准,GB/T 8567-1988计算机软件产品开发文件编制指南等。绘制系统结构图的过程,实际上就是对系统功能模块进行分解设计的过程,即合理地将数据流程图转变为所需要的系统结构图。系统结构图将会使读者或用户能直观的了解系统的结构模式,理解系统的各个功能的结构,能很好地方便用户使用和理解整个系统[3]。

根据需求分析的结果,按照“低耦合、高内聚”的原则[4],本系统将划分为以下主要功能模块:系统首页(图书推荐)、查找图书、读者信息、图书管理、更多功能。其软件界面如图1、2.

3 程序设计与编码

3.1 开发平台与工具

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 程序设计

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//shared_prefs目录下。

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 GetAllfromBook(String BookName, String Author, String Publishment)

{

Vector v = new 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 v, Vector result)

{

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")。通过处理,中文乱码的现象就不会出现了。

4 结语

本系统是在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.

猜你喜欢
应用程序图书数据库
图书推荐
删除Win10中自带的应用程序
欢迎来到图书借阅角
谷歌禁止加密货币应用程序
班里有个图书角
数据库
数据库
数据库
数据库
三星电子将开设应用程序下载商店