Android 手机图书盘点系统的集成应用*———以MelinetsII平台为例

2013-09-20 06:22
图书馆学刊 2013年7期
关键词:服务端条码盘点

林 立

(闽江学院图书馆,福建 福州 350108)

1 引言

在以往传统的图书馆馆藏管理系统中,图书盘点工作与图书借还工作一样,要将图书搬到电脑前逐本扫描[1]。这种图书盘点模式不仅大大消耗了工作人员的体力,还造成了工作时间上的浪费以及效率的低下,同时也给图书馆的正常开放带来一定影响。为了改进图书盘点工作,近年来有些图书馆引进了手持式图书盘点机。手持式图书盘点机的优点就在于小巧、便携,工作人员可以直接进入书库进行图书数据的采集,一定程度上减轻了工作人员的工作量。但是它的缺点也很明显:一是价格过高,一所图书馆不可能配备太多,导致工作效率十分有限;二是只采集了数据,并未实现与馆藏系统的实时数据传送,而是需要工作人员将采集来的数据转入到馆藏管理系统中进行处理,因此并没有真正意义上完成盘点工作[2]。笔者认为可以利用Android 手机作为平台来完成图书盘点工作,这样在实际工作中既可以省去价格高昂的手持式图书盘点机的费用,同时因为现在Android手机价格低、普及性高,可以实现人手一部,从而大大提高图书盘点的效率。另外,利用Android 手机进行图书盘点,还能通过程序实现图书数据的采集与传输同步,从而实现与图书馆馆藏系统的无缝对接,极大地提高图书盘点的工作效率

2 可行性条件

图1 闽江学院图书馆无线网络拓扑结构

目前,图书馆大多有提供无线接入服务。以闽江学院图书馆为例,馆内各个书库和阅览室都布有WIFI(见图1)。用户通过WIFI 可享受图书馆提供的各项移动服务。手机图书馆将无线通信网络和数字图书馆系统有机结合,利用高普及率的手机新媒体平台延伸、拓展了传统的图书馆服务,极大地方便了读者,提高了图书馆的服务效率[3]。相较于普通手机,智能手机功能强大且可拓展性强。智能手机具有开放性的操作系统,在这个操作系统平台上,可以安装更多的应用程序,从而使智能手机的功能得到无限扩充且具备无线接入互联网的能力[4]。Android 是Google 于2007年11月推出的一个专为移动设备设计的软件平台。它是一套真正意义上的开放性移动设备综合平台,其包括操作系统、中间件和一些关键的平台应用、浏览网页等功能,用户可根据个人需要扩展其功能。Android 的最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验[5]。现在Android 平台下流行着多款条码扫描软件,如“我查查”等,都可以实现各种条码的扫描和识别,并具备将识别到的数据上传处理以便进行各种服务的功能。笔者认为完全可以在图书馆工作中引入这种成熟的技术。

3 实现方法与步骤

3.1 软件开发

软件开发软件的开发是整个应用方案的核心。借助成熟的技术和Android 平台下软件代码开放性的特点,可以轻松地编写出图书馆工作所需的软件。软件主要需完成3项工作,一是扫描出图书条码;二是将所得到的图书条码上传至服务器;三是将数据导入馆藏管理系统并最终完成图书盘点工作。前两项

工作应由手机完成,即由客户端软件完成;最后一项工作则可以通过编写服务端软件来接收由客户端发送过来的数据并加以处理而最终完成。

3.1.1 客户端软件的开发

Android 平台下图书条码的扫描软件早已不是新鲜事物,现在流行着多款软件,笔者推荐使用ZXing。ZXing 是经典的条码/ 二维码识别的开源类库,现在流行的多款条码扫描软件,一般都利用ZXing 类库进行编译与开发。ZXing 有多种复用方式,一种是将ZXing 类库包含在自己的程序中,然后再进行编译,这种方式比较复杂;另一种是先安装ZXing 软件,通过Google Market,然后再在自己的应用中,通过Intent 调用ZXing 的扫描条码的Activity,然后将扫描到的结果返回自己的Activity。这种方式相对简单,笔者正是采用这种方式,借用ZXing 的开源类库,简单编写几行命令就可以完成条码的扫描获取。命令如下:

public class ShowBarcodeActivity extends Activity {

private Button button;private TextView textView;

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);setContentView(R.layout.main);

this.button =(Button)this.findViewById(R.id.Button);

this.button.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v){

Intent intent=new Inten(t“com.google.zxing.client.android.SCAN”);

startActivityForResult(intent,0); } });

this.textView =(TextView)this.findViewById(R.id.hello); }

@Override

protected void onActivityResult (int requestCode,int resultCode,

Intent data){ if(requestCode != 0){ return; }

this.textView.setText(data.getStringExtra(“SCAN_RESULT”));}}

这样就完成了第一项工作。第二项工作便是要把扫描来的结果上传到服务端,这就需要在扫描完成后加入如下命令[6]:

Socket socket=null;

String mesg= this.textView.getText().toString()+“ ”;

this.textView.setText(“”);

try {socket=new Socket(“10.10.10.131”,54321);

// 向服务器发送信息,括号内是服务端的IP 和端口

PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);out.println(mesg);

BufferedReader br=new BufferedReader(new InputStreamReader

(socket.getInputStream()));

String mstr=br.readLine();

if (mstr!=null) {this.textView.setText(mstr);}else{ this.textView.

setTex(t“数据错误”); } out.clos(e);br.clos(e);socket.clos(e);} catch(UnknownHostException e) { e.printStackTrace();}catch(IOException e){e.printStackTrace();}catch(Exception e){Log.e(DEBUG_TAG,e.toString());}

3.1.2 服务端软件的开发

接收由客户端发送来的数据,并进行处理后传入馆藏管理数据库,最终完成图书盘点是服务端软件所要完成的工作。服务端软件建议使用JAVA 来编写,因为JAVA 具有跨平台的优势,且与Android 的兼容性好。服务端软件根据工作任务可以分解成两个部分,一是数据接收;二是数据处理。数据的接收相对简单,命令代码如下:

public void run() {try {ServerSocket serverSocket=new Server-Socket(54321);while(true) {System.out.println (“接收用户连接:”);

Socket client=serverSocket.accept();System.out.println(“accept:”);try {BufferedReader in=new BufferedReader(new InputStream-Reader(client.getInputStream()));

String str=in.readLine();System.out.println(“read:”+str);PrintWriter out=new PrintWriter (new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);out.println(“Server Message:”+str);

in.close();out.close();}catch(Exception ex){ System.out.println(ex.getMessage()); ex.printStackTrace();}

finally{client.close();System.out.println(“close”);} }}catch(IOException e){ System.out.println(e.getMessage());} }接收到条码数据后要进行处理才能完成盘点,这就需要

了解MelinetsII 中图书盘点的工作流程。MelinetsII 中图书盘点系统在接收完图书条码信息后,与表manager.ct_2_A 里面的字段book_barcode 进行比对,查找到后对字段check_status的值进行改写。其中字段check_status 的值,1代表已盘点,其他是未盘点。要完成这项工作,可以在服务端程序中再加入如下命令代码[7]:

try{Class.forName(“com.sybase.jdbc.SybDriver”);

String connURL =“jdbc:sybase:Tds:10.10.10.132:4100/melinets2”;// 这里写的是MelinetsII 服务器的IP 和端口

Properties sysProps = System.getProperties();sysProps.put (“user”,“

userid”);sysProps.put (“password”,“user_password”);

Connection conn = DriverManager.getConnection (connURL,sysProps);

Statement stmt = conn.createStatement();

sql = “update manager.ct_2_A set check_status= ‘1’where book_barcode=”“‘+str+’”;

stmt.executeUpdate(sql);stmt.close();conn.close();}

这样整个图书盘点的工作流程通过程序基本上可以完成了,但是为了优化工作流程,提高工作效率,必须考虑到多部手机同时在线扫描和上传数据,服务端就必须同时接收并处理多个数据。要解决这个问题,还必须实现服务端的多线程,可以在程序中加入如下命令:

public static void main (String [] args) {Thread desktopServerThread=new Thread (new myServer ());desktopServerThread.start(); }

3.2 具体操作

在进行图书盘点前与以往进行盘点工作一样,先要在MelinetsII 系统中将所有图书盘点信息复位,即全部恢复为未盘点状态。然后安排工作人员分别到各个库位,用安装好盘点系统的Android 手机联上无线网络并与服务端保持正常通信后,即可进行图书的扫描盘点。全部完成后,就可以在MelinetsII 中进行盘点统计了,其工作流程见图2。

图2 Android手机图书盘点系统工作流程

4 结语

当今以智能手机为代表的无线通信和移动应用技术正飞速发展,利用先进的技术来改善传统的图书馆工作方式,将会极大地提高图书馆的工作效率。笔者利用A n d r o i d下的开源类库构建手机图书盘点系统,在闽江学院图书馆的实际应用中取得了良好的效果。图书盘点的效率得到了很大提升,盘点工作也得以经常性地开展。这样有助于在O P A C上及时更新图书信息,避免了读者常常在O P A C上检索到图书,借阅时才发现没有该书的尴尬局面。

[1] 李湖生.图书清点的基本流程及其综合设计方案[J].现代图书情报技术,2008(12):86-89.

[2] 林体排,吴爱民.数据采集器在图书馆图书清点中的应用[J].国家图书馆学刊,2005(7):127-128.

[3] 梁爱东,刘玲.基于手机的高校图书馆移动信息服务研究[J].现代情报,2010(3):71-75.

[4]陆承兆.智能手机图书馆——基于3G的手机图书馆新发展[J].图书馆学研究,2010(1):96-98.

[5]Reto Meier.Android高级编程[M].北京:清华大学出版社,2010.

[6] 刘平.Android手机访问服务器的一种数据交互方法[J].电子设计工程,2010(9):96-102.

[7] 陶浦洲.Sybase数据库技术大全[M].北京:科学出版社,1995.

猜你喜欢
服务端条码盘点
热线互动
浅析影响商品条码质量的主要因素
睁眼瞎盘点
睁眼瞎盘点
日杂商品条码质量现状研究
盘点各国网红猫
新时期《移动Web服务端开发》课程教学改革的研究
ISSN条码的制作和印前输出要点
建国以来新年献词盘点
摸清黑客套路防范木马侵入