搜档网
当前位置:搜档网 › 基于Android开发的图书管理系统报告

基于Android开发的图书管理系统报告

基于Android开发的图书管理系统报告
基于Android开发的图书管理系统报告

宁波大红鹰学院

《Android开发基础》项目名称基于Android的图书管理应用的

设计与实现

所在学院信息工程学院

班级13软工1班

姓名许格

学号

2016年6月20日

目录

一、开发背景 0

二、需求分析 0

2.1 功能分析 0

2.2 开发技术分析 0

三、系统设计 0

3.1系统目标 0

3.2系统功能 0

3.3数据库设计 (1)

四、系统功能实现 (2)

4.1主界面 (2)

4.2.客户端登录 (2)

(2)

(3)

4.3 图书管理 (4)

4.3.1 图书添加 (4)

(5)

(6)

4.4 投稿阅读 (6)

(6)

4.4.2 阅读广场 (6)

4.4.3 投稿数据库操作 (7)

4.5 预约图书 (8)

4.5.1 预约卡 (8)

4.5.2 预约数据库 (8)

4.6 翻译 (8)

4.7 娱乐 (9)

五、总结与收获 (10)

一、开发背景

移动互联网时代的来临,说明一个崭新的时代开始了。所谓移动互联网是将移动通信和互联网整合在一起,移动设备(包括手机和上网本)可以随时随地地访问互联网资源和应用。?

智能手机是移动互联网时代一个标志性的客户端工具,它和传统的手机是有区别的,它就像一台“小电脑”,具有独立的操作系统,可以自由安装、卸载软件,具有强大的计算和存储能力,可以通过移动通信网络来实现无线网络接入。?

对于移动终端设备飞速发展的今天,传统WEB上的应用出现在手机终端是一个大的趋势。而基于Android 开发的图书馆管理系统手机客户端,正是对这一趋势的良好体现,Android平台下的图书馆管理系统的开发,能很好的为用户提供方便,用户能通过它能随时随地的了解系统的实时信息,做到信息的实时化。通过Android平台下的图书馆管理系统客户端的开发,与传统WEB应用进行良好的互补。?

同时,对于校内的图书馆管理系统来说,手机对于学生是必不可少的一个物品,手机客户端这种形式的图书馆管理系统,能更加贴近学生的生活习惯,并且适合学生年龄段的习性,这对学生更多的接触到图书馆的信息有一定得促进作用。?

二、需求分析

2.1 功能分析

基于Android平台开发的图书馆管理系统客户端从设计者的角度来看,用户角色主要为学生用户;功能包括注册、登录、投稿、翻译、娱乐、书籍查询、图书实时更新,借阅图书共八大部分。

学生用户可以根据学号进行快捷注册,学生在投稿区写文章发表,在广场互动,翻译功能可以帮助解决学习上遇到不理解的英文进行翻译,娱乐功能中有两个小游戏,用户可以适时放松一下。当然主要功能当然是查询借阅书籍。

2.2 开发技术分析

该系统是基于Eclipse 软件并连接Android SDK进行开发的基于Android平台开发的图书管理系统,数据库采用较小速度快的SQLite,是嵌入式移动设备中常用的轻量级数据库。软件UI通常使用xml技术设计,由于布局的使用,并且布局之间可以互相嵌套,使得android软件UI的设计变得非常灵活,力求图书馆与学生之间更加亲近方便。

三、系统设计

3.1系统目标

●系统采用人机交互的方式,界面美观友好,信息查询灵活、方便,数据存储安全可靠;?

●能够让学生更好更方便的了解图书馆和借阅图书;?

●丰富学生知识,增加学生阅读积极性;?

●能够对学生信息进行有效的管理;??

●能够准确、详细地了解学生的每月阅读量;?

●系统应最大限度地实现易维护性和易操作性。

3.2系统功能

本系统的具体功能如下:

1、图书管理:新增、浏览馆藏图书。

2、借阅图书:学生查找图书进行预约,预约成功可前往图书馆借阅。

3、投稿:学生可以在平台发布文章,发布的文章可在阅读界面查看,可对文章点赞,评论和分享。

4、翻译:学生可以使用翻译功能在线翻译,如学习时遇到看不懂的英文句子以及单词。

5、娱乐:娱乐功能开发了两个休闲小游戏,打地鼠游戏和扫雷游戏。学生可在学习之余放松一下。

6、个人:学生可使用学号进行注册和登录。

本系统的系统结构功能图如图3-1所示。

图3-1系统结构功能图

3.3系统用例图

3.4数据库设计

由于本系统是在校学生使用的软件,需要充分考虑图书管理和学生借阅需求等问题,而SQLite是一款轻型的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。处理速度快,效率高,正好满足了手机app的需求,所以本系统采用SQLite 数据库。

根据数据库的概念设计,可以进一步进行数据库的逻辑设计。本人所设计的数据库命名为Tushu,数据库中包括以下的数据表:1、学生信息表(student) 2、借阅表(cord) 3、图书表(books) 4、留言表(reads)

(一)学生信息表(student)

表1 student表结构

(二)借阅表(cord)

(三)图书表(books)

(四)留言表(reads)

四、系统功能实现

4.1主界面

该系统分为三大功能模块:图书管理、预约图书、翻译、投稿、娱乐、登录注册六个功能,下面分别介绍这七大块,界面如图4-1所示。

图4-1会员管理界面图

Activity关键代码实现如下:

//主界面GridView 六个菜单适配,新建适配器MuneAdapter.Java:

public class MuneAdapter extends BaseAdapter{

int[] imageId ={R.drawable.j,R.drawable.h,R.drawable.o,

String[] text={"书架","阅读","签到","投稿","翻译","娱乐"};

private Context context;

public MuneAdapter(Context context){this.context=context;}

public int getCount() { return 6;}

public Object getItem(int position) { return null;}

public long getItemId(int position) { return 0;}

public View getView(int position, View convertView, ViewGroup parent) {

icon.setImageResource(imageId[position]);

tv.setText(text[position]); return view; } }

//在主界面进行适配,然后进行跳转。

gView.setAdapter(new MuneAdapter(MainActivity.this));

gView.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView parent, View view, int position,long id) { switch (position) {

case 0: startActivity(BookActivity.class);

break;

4.2.客户端登录

4.2.1学生登录

学生登录客户端主要用于查询想借阅的图书和借书。登录界面如图4-2-1所示,学

生可以登录注册进入客户端。在登录界面中,首先提醒您输入登录信息,并且把登录的用户名和密码输入其文本框内。

图4-2-1登录界面图

技术分析:

创建了一个名为LoginActivity.java实现登录,查询数据库中的学号和密码是否匹配,如果没有账号点击注册跳转到注册页面。

代码实现如下:

String name=user.getText().toString();

String pass=pwd.getText().toString();

Log.i("TAG",name+"_"+pass);StudentDao dao=new StudentDao(this);

boolean flag=dao.login(name, pass);

if (TextUtils.isEmpty(name)||TextUtils.isEmpty(pass)) {

Toast.makeText(this, "学号和密码不能为空!", 0).show();}

else if(flag){Log.i("TAG","登录成功!");

Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_LONG).show();

Intent intent =new Intent();

intent.setClass(LoginActivity.this, MeActivity.class);

intent.putExtra("name", user.getText().toString());

startActivity(intent);

}else{Log.i("TAG","登录失败!");

Toast.makeText(LoginActivity.this, "登录失败!学号或密码不正确!", Toast.LENGTH_LONG).show();} }

4.2.2学号快捷注册

学生登录客户端没有账号可点击登录按钮右下方的“学号快捷注册”进行注册。注册界面如图4-2-2所示,学生可以注册个人信息然后进行登录。在注册界面中,首先提醒您输入个人信息,注册成功后跳转到登录界面。

图4-2-2注册界面

代码实现如下:

String S_Num=S_num.getText().toString().trim();

String S_Name=S_name.getText().toString().trim();

String S_Class=S_class.getText().toString().trim();

String S_Phone=S_phone.getText().toString().trim();

String S_pwd=S_Pwd.getText().toString().trim();

if (TextUtils.isEmpty(S_Num)||TextUtils.isEmpty(S_pwd)) {

Toast.makeText(this, "学号和密码不能为空!", 0).show();

return;

}else {Student student =new Student();

student.S_Num=S_Num; student.S_Name=S_Name;

student.S_Class=S_Class; student.S_Phone=S_Phone;

student.S_pwd=S_pwd; dao.add(student);}

Toast.makeText(ZhuceActivity.this,"注册成功!", 0).show();

finish();break;}

}

4.2.3 个人信息数据库

// Studentdao.java

public class StudentDao{

private DBOpenHelper helper;

private SQLiteDatabase db;

public StudentDao(Context context){

super(); helper=new DBOpenHelper(context);}

public boolean add(Student student){

db=helper.getWritableDatabase();

ContentValues values =new ContentValues();

values.put("S_Num",student.S_Num);

values.put("S_Name", student.S_Name);

values.put("S_Class", student.S_Class);

values.put("S_Phone", student.S_Phone);

values.put("S_pwd", student.S_pwd);

long rowid=db.insert("student", null, values);

if (rowid==-1) { return false;

}else { return true; } }

public boolean login(String S_Num,String S_pwd){

db=helper.getReadableDatabase();

String sql="select * from student where S_Num=? and S_pwd=?";

Cursor cursor=db.rawQuery(sql, new String[]{S_Num,S_pwd});

if(cursor.moveToFirst()==true){ cursor.close(); return true; }

return false;

}

4.3 图书管理

4.3.1 图书添加

图书管理员可以进行图书的添加删除和修改。及时的更新书库图书信息和增加新书,点击下方茶杯按钮即可添加图书,图书添加界面如图4-3-1所示。

图4-3-1添加图书界面图

技术分析:

在SQLite中添加books表,进行增删查改。创建了一个名为AddbookActivity.java 实现添加图书信息。

代码实现如下:

// AddbookActivity.java 添加图书:

String B_Name=bookname.getText().toString().trim();

String B_Author=author.getText().toString().trim();

String B_pm=pm.getText().toString().trim();

if (TextUtils.isEmpty(B_Name)||TextUtils.isEmpty( B_Author)) {

Toast.makeText(this, "书名不能为空!", 0).show();

return;

}else {

Book book =new Book(); book.B_Name=B_Name;

book.B_Author=B_Author; book.B_Pm=B_pm;

dao.add(book); }

Toast.makeText(AddbookActivity.this,"添加成功!",0).show();

finish(); break;}}

4.3.2图书信息显示

BookActivity.java显示数据库中所有图书信息,用listview 显示,创建一个BookActivity.Java实现listview的适配。如图4-3-2图书信息界面图。

图4-3-2图书信息界面图

技术分析:

通过BookActivity.Java实现listview的适配。

代码实现如下:

//BookAdapter.java 适配器把数据库的图书信息显示在listview上,关键代码如下:

public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder= null;

if (convertView==null) {

holder=new ViewHolder();

convertView.setTag(holder);

}else {holder=(ViewHolder) convertView.getTag();

return convertView;}

static class ViewHolder{

TextView bookname; TextView author; TextView bookpm; TextView record;

View shu; }

//BookActivity.java使用listview显示所有图书信息。

mListView.setOnScrollListener(new OnScrollListener() {

public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) {

case OnScrollListener.SCROLL_STATE_IDLE:

int lastVisiblePosition=mListView.getLastVisiblePosition();

if (lastVisiblePosition==pagebook.size()-1) { pagenumber++;

if (pagenumber*pagesize>=totalNumber) {

Toast.makeText(BookActivity.this,"没有更多的数据了", 0).show();

}else {pagebook.addAll(dao.getPageBook(pagenumber, pagesize));

adapter.notifyDataSetChanged();}}

break;}}

public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount,

int totalItemCount) {

} });

4.3.3图书数据库操作

public class BookDao {

private DBOpenHelper helper;

private SQLiteDatabase db;

public BookDao(Context context){ super();helper=new DBOpenHelper(context); }

public boolean add(Book book){ db=helper.getWritableDatabase();

ContentValues values =new ContentValues();

values.put("B_Name", book.B_Name); values.put("B_Author", book.B_Author);

values.put("B_Pm", book.B_Pm); long rowid=db.insert("books", null, values);

if (rowid==-1) { return false; }else { return true; } }

public boolean delete(Book book){ db=helper.getWritableDatabase();

int rowname=db.delete("books","B_Name=?" , new String[] {book.B_Name} );

if (rowname==0) { return false; }else { return true; } }

4.4 投稿阅读

4.4.1投稿

每个学生都可以投稿写文章然后发布,发布出去的文章可以在阅读界面查看。阅读界面相当于广场,用户可以在广场上看到文章。投稿界面如图4-4-1所示:

图4-4-1投稿界面图

技术分析:

输入标题和文章内容发布,用户可以在阅读“广场”上看到发布的内容。

代码实现如下:

//Tougao.java关键代码

String Title=title.getText().toString().trim();

String Article=article.getText().toString().trim();

if (TextUtils.isEmpty(Title)) {

Toast.makeText(this, "标题不能为空!", 0).show();

return; }else { Write write =new Write();

write.Title=Title; write.Article=Article;

dao.add(write); }

Toast.makeText(TougaoActivity.this,"发布成功!",0).show();

break;

}

4.4.2 阅读广场

用户可以在阅读广场查看发布的文章,可以评论、点赞和分享。

图4-4-2阅读界面图

技术分析:

使用listview 来显示发布的文章,创建一个ReadAdapter.java适配器。

代码实现如下:

//创建一个ReadAdapter.java 实现一个适配器功能显示到listview上,显示广场上所有文章。

关键代码如下:

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder= null;

if (convertView==null) {

holder=new ViewHolder();

convertView.setTag(holder);

}else { holder=(ViewHolder) convertView.getTag(); }

return convertView; }

static class ViewHolder{

TextView title;

TextView article;}

//ReadAdapter.java关键代码:

public void onScrollStateChanged(AbsListView view, int scrollState) {

switch (scrollState) {

case OnScrollListener.SCROLL_STATE_IDLE:

int lastVisiblePosition=mListView.getLastVisiblePosition();

if (lastVisiblePosition==pagewrite.size()-1) { pagenumber++;

if (pagenumber*pagesize>=totalNumber) {

Toast.makeText(ReadActivity.this,"没有更多的数据了", 0).show();

}else {pagewrite.addAll(dao.getPagewrite(pagenumber, pagesize));

adapter.notifyDataSetChanged();}

}break;

} }

public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount) { } });

4.4.3 投稿数据库操作

public class RecordDao {

private DBOpenHelper helper;

private SQLiteDatabase db;

public RecordDao(Context context){ super();

helper=new DBOpenHelper(context); }

public boolean add(Record record){

db=helper.getWritableDatabase();

ContentValues values =new ContentValues();

values.put("B_Name", record.B_Name); values.put("S_Num", record.S_Num);

values.put("ReturnTime", record.ReturnTime);

long rowid=db.insert("cord", null, values);

if (rowid==-1) { return false;

}else { return true; } }

public boolean delete(Record record){ db=helper.getWritableDatabase();

int rowname=db.delete("cord","S_Num=?" , new String[] {record.S_Num} );

if (rowname==0) { return false;

}else { return false; } }

4.5 预约图书

4.5.1 预约卡

学生可以在借书功能界面进行图书预约,输入图书名和学号还有归还时间。界面图如4-5所示。

图4-5-1预约图书界面图

代码实现如下:

//JieyueActivity.java关键代码:

String B_Name=booknam.getText().toString().trim();

String s_Num=snum.getText().toString().trim();

String time=returntime.getText().toString().trim();

if (TextUtils.isEmpty(B_Name)) { Toast.makeText(this, "书名不能为空!", 0).show();

return; }else {

Record record=new Record(); record.B_Name=B_Name;

record.S_Num=s_Num; record.ReturnTime=time;

dao.add(record); }

Toast.makeText(JieyueActivity.this,"预约成功!", 0).show();

finish(); break; } }

4.5.2 预约数据库

//预约数据库实现,关键代码实现如下:

public class RecordDao {

private DBOpenHelper helper;

private SQLiteDatabase db;

public RecordDao(Context context){ super();

helper=new DBOpenHelper(context); }

public boolean add(Record record){

db=helper.getWritableDatabase();

ContentValues values =new ContentValues();

values.put("B_Name", record.B_Name); values.put("S_Num", record.S_Num);

values.put("ReturnTime", record.ReturnTime);

long rowid=db.insert("cord", null, values);

if (rowid==-1) { return false; }else { return true; } } public boolean delete(Record record){

db=helper.getWritableDatabase();

int rowname=db.delete("cord","S_Num=?" , new String[] {record.S_Num} );

if (rowname==0) { return false; }else { return false; }

}

4.6 翻译

图书馆应用具有翻译功能这是一个创新,可以使学习英语的学生可以方便的当做英文字典。

图4-6翻译界面图

技术分析:

翻译功能使用http实现网页在线翻译,在webview中放一个有道的API网页。

代码实现如下:

//FanyiActivity.java关键代码:

myWebView1.setWebViewClient(new WebViewClient(){

public boolean shouldOverrideUrlLoading(WebView view,String url){

view.loadUrl(url);

return super.shouldOverrideUrlLoading(view, url); }

});

4.7 娱乐

娱乐功能里有两个休闲小游戏,打地鼠和扫雷游戏。可提供用户休息时娱乐。点击打地鼠游戏,在屏幕上会随机显示地鼠,触摸地鼠后,该地鼠将不显示,同时屏幕上会显示打到了几只地鼠,打地鼠游戏界面如下图4-7所示:

4-7 娱乐界面

技术分析:

地鼠随机的出现通过生成地鼠的随机位置,并使用线程控制出现时间间隔,确定地鼠是否打中则借助触摸监听器onTouch()方法实现。

代码实现如下:

//DadishuActivity.java关键代码:

private int i=0;

private ImageView mouse,exit;

private Handler handler;

public float[] [] position =new float[][]{{31,625},{424,349},{300,520},

{ 221, 256 }, { 100, 296 }, { 150, 220 }, { 367, 292 },{ 333, 600 } };//地鼠位置数组

mouse.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View view, MotionEvent event) {

view.setVisibility(view.INVISIBLE); i++;

Toast.makeText(DadishuActivity.this, "打到["+i+"]只地鼠",0).show(); return false; } }); handler=new Handler(){

public void handleMessage(Message msg){ int index=0; if(msg.what==0x101){

index=msg.arg1; mouse.setX(position[index][0]);

mouse.setY(position[index][1]); mouse.setVisibility(View.VISIBLE); }

super.handleMessage(msg); } };

Thread t=new Thread(new Runnable(){

public void run() {

int index =0;

while(!Thread.currentThread().isInterrupted()){

index=new Random().nextInt(position.length);

Message m=handler.obtainMessage();

m.arg1=index; m.what=0x101; handler.sendMessage(m);

try{ Thread.sleep(new Random().nextInt(500)+500);

}catch(InterruptedException e){

e.printStackTrace();} } }

}); t.start(); }

五、总结与收获

这个学期从来学就开始自学安卓开发,每天平均花9个小时,从一开始的0基础,不断的一点点写基础代码,实现基础功能。甚至一开始的时候在基础代码,没有几行的情况下都会有许多错误,询问老师和同学,帮助解决bug。图书管理系统是我集合诸多之前自学时写的功能,该系统主要实现了管理图书,预约图书,翻译功能,娱乐功能,用户登录注册和投稿功能。

由于自身经验不足,尽管按照书本实现代码,但还是有各种各样的问题。例如在创建数据库的时候,在没有错误情况下,完全重新写了三次都无法运行。代码出现错误不知如何修改,陷入无尽的迷茫中,因个人的能力有限,有些功能设计不够完善,有待进一步的改善。

但是通过这段时间的锻炼,对于系统设计的理念更为明确,对Eclipse这款软件的运用真的熟悉掌握了不少。这是一次难得的经历,让我对安卓开发有了更深的理解。系统设计从刚开始的一片空白,到现在至少可以自己进行功能分析,对于一些功能实现还是已经会了。相信在以后的系统设计中,本人能够吸取经验和教训,能力不断提高。另外现在的系统还存在一些小瑕疵,比如修改数据时没有回显,考勤管理模块没有设置请假时间段等等,相信在之后的进一步理解中会完善此功能。

总之,通过此次系统设计,真正深刻体会到了在找BUG的几天里很磨人很抓狂,找到的BUG被自己发现并且解决的时候,那是一种非常开心的事。做好一个完整事情,需要非常耐心的对待要解决的问题,要善于运用有限的资源来充实自己,也要相信自己。

相关主题