书香驿站,图书管理系统APP(使用sqlite数据库,包调试成功)
yuyutoo 2024-10-30 06:32 3 浏览 0 评论
“书香驿站”App的设计与实现
课程名称: Android应用设计
学 号:
姓 名:
日 期:
成 绩:
摘要
随着移动终端使用率的快速增加,Android智能产品已日益成为越来越多的人们选择的移动终端产品。伴随着Android智能手机与平板电脑已经在我们生活大量的使用,越来越多的基于Android开发平台的应用也随之产生。为了给移动终端使用者提供便利的图书借阅服务,提升图书管理员工作效率,设计出“书香驿站”图书管理系统App。系统基于Android Studio开发平台,使用基于SQLite的结构化数据存储策略,最终实现管理员和用户两个角色的系统开发。用户可以进行注册登录,查看全部上架图书,浏览图书详细信息,拥有借阅和收藏功能,可查看收藏图书或取消收藏,可修改个人信息。管理员负责后台管理,包含查询信息,管理图书和管理读者三个功能板块。
关键词:移动终端,Android,图书管理
Abstract
With the rapid increase of mobile terminal utilization, Android intelligent products have increasingly become the mobile terminal products that more and more people choose. With Android smartphones and tablets have been widely used in our lives, more and more applications based on Android development platform have also emerged. In order to provide convenient book borrowing services for mobile terminal users and improve the work efficiency of librarians, the "book post station" library management system app is designed. The system is based on the Android Studio development platform and uses the structured data storage strategy based on SQLite to finally realize the system development of two roles: administrator and user. Users can register and log in, view all books on the shelves, browse book details, have borrowing and collection functions, view or cancel collection, and modify personal information. The administrator is responsible for background management, including three functional blocks: querying information, managing books and managing readers.
Key words: mobile terminal, Android, library management
目录
摘要1Abstract21、课程设计目的42、系统设计43、数据库设计74、系统实现84.1用户登陆注册84.2用户修改个人信息104.3用户借阅及收藏图书124.4用户退出登录144.5管理员登录154.6管理员查询图书信息164.7管理员管理图书194.8管理员管理读者215、问题及解决方案246、总结25
1、课程设计目的
随着移动终端使用率的快速增加,Android智能产品已日益成为越来越多的人们选择的移动终端产品。当前阅读方式也随之发生了巨大变革,传统图书行业为了取得长久的发展就需要顺应科技潮流。由于学校图书馆的不断发展,图书馆的图书品种、数量也在不断地增多。学校使用图书管理系统提高了工作效率,同时摆脱图书管理人员在工作中出现的很多问题,大大节省了学生借书的时间。利用图书管理系统对图书记录进行统一管理,包括新增图书记录更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。系统应具备高效、快捷、稳定地管理图书馆的数据信息的能力。系统主要能实现以下几个功能:查询图书、借还图书、图书管理、读者信息管理等。管理员只需要访问本系统,就可以轻松实现图书查询、图书借还等操作,使用本系统能方便快捷地完成图书馆的信息数据管理工作。该系统实现图书资料管理的数字化,提高管理工作的效率和规范化水平。
2、系统设计
整体系统分为用户和管理员,用户可以进行登陆注册、查看图书、借阅图书、收藏图书和修改个人信息等操作。管理员可以查看图书信息、借阅信息、管理图书和管理读者等操作。
图2-1 系统功能模块图
用户可以进行注册登录,查看全部上架图书,浏览图书详细信息,拥有借阅和收藏功能,可查看收藏图书或取消收藏,可修改个人信息,可直接退出登录。登录时可选择记住密码,若首次登陆密码正确下次就可以不用输入密码直接登录。
图2-2 管理员流程图
管理员负责后台管理,主要包含查询信息,管理图书和管理读者三个功能板块。进入查询信息界面后可查看图书信息、借阅信息、还书信息,管理图书分为添加图书和查询图书两部分,管理读者分为查找读者、添加读者、编辑读者和删除读者。
图2-3 用户流程图
图2-4 管理员UI设计
图2-5 用户UI设计
3、数据库设计
共包含5个数据库表,分别是用户表、图书表、图书借阅表、图书归还表和图书收藏表。用户表用于存放用户注册信息以及用户更新修改的信息,图书表用于存放管理员添加的图书信息,图书借阅表用于存放借阅图书的用户所借阅的图书信息,图书归还表用于存放归还借阅图书的用户及其归还的图书信息,图书收藏表用于存放用户及用户收藏的图书信息。
表2-1 用户表
字段名称 | 类型 | 主键 | 说明 |
id | char | 是 | 用户id |
user | char | 用户名 | |
name | char | 姓名 | |
password | varchar | 密码 | |
sex | char | 性别 | |
phone | varchar | 手机号 | |
birthday | varchar | 生日 |
表2-2 图书表
字段名称 | 类型 | 主键 | 说明 |
id | varchar | 是 | 图书id |
bookid | varchar | ISBN编码 | |
name | char | 书名 | |
type | char | 类型 | |
writer | char | 作者 | |
publicer | char | 出版社 | |
price | float | 价格 | |
rank | float | 评分 | |
comment | varchar | 简介 | |
img | varchar | 图片地址 |
表2-3 图书借阅表
字段名称 | 类型 | 主键 | 说明 |
Bid | varchar | 是 | 借阅id |
Bname | char | 用户名 | |
Bookid | char | 图书号 | |
bookname | char | 图书名 | |
bookauthor | char | 作者 | |
nowtime | varchar | 时间 |
表2-4 图书收藏表
字段名称 | 类型 | 主键 | 说明 |
id | varchar | 是 | 收藏id |
Bname | char | 用户名 | |
Bookid | char | ISBN | |
bookname | char | 图书名 | |
bookauthor | char | 作者 | |
nowtime | varchar | 时间 |
表2-5 图书归还表
字段名称 | 类型 | 主键 | 说明 |
id | varchar | 是 | 归还id |
Bname | char | 用户名 | |
Bookid | char | ISBN | |
bookname | char | 图书名 | |
bookauthor | char | 作者 | |
nowtime | varchar | 时间 |
4、系统实现
4.1用户登陆注册
用户首次使用需要先进行注册,输入用户名(要求是6位数字),密码,姓名,手机号(要求是11位数字)等信息,若不符合要求则需要再次注册,注册成功则直接跳转到登陆界面。
图4-1 用户登陆注册
系统会对用户输入的注册信息进行检测,若该用户名已经注册过,或者用户名等信息输入不符合规定,则注册失败,信息不会被插入数据库。核心代码如下:
String username = cusror.getString(cusror.getColumnIndex("user"));
if (username.equals(user_ed.getText().toString())) {
Toast.makeText(registerActivity.this, "用户名已存在", Toast.LENGTH_LONG).show();
((EditText) findViewById(R.id.r_name)).setText("");
boolean testid=true,testnum=true;
if (user_ed.getText().length()!=6) {
Toast.makeText(registerActivity.this,"请输入6位帐号",Toast.LENGTH_SHORT).show();
testid=false;
}
if(phone.getText().length()!=11){
Toast.makeText(registerActivity.this,"输11位手机号",Toast.LENGTH_SHORT).show();
testnum=false;
}
用户注册并成功登录后可选择“记住密码”,下次登陆即可跳过输入密码的步骤。记住密码功能使用使用SharedPreferences数据存储机制实现,只有首次登陆成功才可以记住密码,如果用户名或密码输入错误则不能登录,并在登陆界面显示提示信息。
图4-2 用户登录提示
记住密码功能核心功能如下:
if (username.equals(struser) && password.equals(strpwd)) {
login_succ=true;
Intent intent = new Intent(MainActivity.this, contentActivity.class);
startActivity(intent);
/*
将用户名存储到sharedpreferences中
获取用户名和密码,方便在记住密码时使用
*/
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("users", username);
editor.putString("passwords", password);
//是否记住密码
if (rember.isChecked()) {
editor.putBoolean("remember", true);
} else {
editor.putBoolean("remember", false);
}
}
用户登录验证功能具体代码如下:
if (cursor.moveToFirst()) {
do {
String username = cursor.getString(cursor.getColumnIndex("user"));
String password = cursor.getString(cursor.getColumnIndex("password"));
if (username.equals(struser) && password.equals(strpwd)) {
login_succ=true;
Intent intent = new Intent(MainActivity.this, contentActivity.class);
startActivity(intent);
} while (cursor.moveToNext());
}
if(!login_succ){
Toast.makeText(MainActivity.this, "用户名或密码不正确,请重新输入", Toast.LENGTH_SHORT).show();
}
4.2用户修改个人信息
用户界面设置菜单选项,根绝用户选项跳转到不同功能页面。用户菜单栏效果图如下:
图4-3 用户菜单栏
用户点击菜单选项中“修改个人信息”可查看当前用户注册信息,用户可根据需要修改除用户名外的个人信息(为了保证用户名的唯一性),修改后的信息则会在数据库中立即更新。
图4-4 用户修改个人信息
首先需要获取当前用户信息并显示在页面中,再获取用户修改信息时输入的信息并在数据库中进行更新,用户修改个人信息功能核心代码如下:
if (cursor.getCount() > 0) {//获取当前用户信息并显示在页面中
cursor.moveToFirst();// 不能修改用户名
user_ed.setText(cursor.getString(cursor.getColumnIndex("user")));
pwd_ed.setText(cursor.getString(cursor.getColumnIndex("password")));
}
//修改按钮的事件监听
update_bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String strpwd = pwd_ed.getText().toString();
SQLiteDatabase db = help.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("password", strpwd);
db.update("admin", values, "user=?", new String[]{String.valueOf(uname2)});
Toast.makeText(ReaderUpdateInfo.this, "除用户名外信息修改成功", Toast.LENGTH_LONG).show();
}});
}
4.3用户借阅及收藏图书
用户可在个人主页查看当前上架图书,点击可进入详情页查看该图书详细信息,可以根据个人兴趣选择收藏图书,并且可以在该页面借阅图书。
图4-5 用户图书列表及详情页
用户点击“借阅”按钮后表示从图书馆借阅该图书,并且还可以点击“收藏”按钮对感兴趣的图书进行收藏,方便下次寻找。用户阅读图书后可在个人中心的“借阅信息”查看借阅图书并进行归还,也可以在个人中心的“我的收藏”查看当前收藏图书,长按即可从收藏列表删除。
图4-6 用户收藏及取消收藏
用户收藏图书及取消收藏核心代码如下:
//根据用户查询自己的收藏信息
String username = perf.getString("users", "");//获得当前用户名称
List<Map<String, Object>> data = help.queryuser(username);
final SimpleAdapter adapter = new SimpleAdapter(
collectActivity.this, data, R.layout.collect_item,
new String[]{"Borname", "Bookid", "bookname",
"bookauthor", "nowtime"},
new int[]{R.id.Borname, R.id.Bbookid,
R.id.Bbookname, R.id.Bbookauthor,
R.id.Bnowtimae});
listView.setAdapter(adapter);
//取消收藏
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
int i = position +1;
// setTitle("点击" + i + "的item");
help.delcollect(i);
Toast.makeText(collectActivity.this, "取消收藏成功", Toast.LENGTH_SHORT).show();
listView.setAdapter(adapter);
startActivity(intent);
}
});
用户还书后后,台会获取已还书籍信息并插入还书表。
图4-7 用户借阅及还书
用户借阅图书及归还图书核心代码如下:
//将信息插入还书表
SharedPreferences perf=getSharedPreferences("data",MODE_PRIVATE);
// String datetime=perf.getString("time","");//获得当前系统时间
String username=perf.getString("users","");//获得当前用户名称
String strbid=pid.getText().toString();//书籍编号
databaseHelp help=new databaseHelp(getApplicationContext());
ContentValues values=new ContentValues();
values.put("Borname",username);
values.put("Bookid",strbid);
help.insertpay(values);
Toast.makeText(PayActivity.this,"还书成功",Toast.LENGTH_LONG).show();
//通过删除borrow表的信息
public void delborrow(int id) {
if (db == null) {
db = getWritableDatabase();
db.delete(Table_Name3, "_Bid=?", new String[]{String.valueOf(id)});
}
db.close();
}
4.4用户退出登录
用户可在个人中心的菜单栏点击“退出”即可退出当前登录,核心代码如下:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
4.5管理员登录
管理员是一个固定账户,用户名为190811010,姓名为贾婷婷,密码是123456,只有用户名和密码输入正确后管理员才能登陆,否则就会弹出提示信息“用户名或密码不正确”,并且清空当前输入的用户名和密码。管理员负责后台管理,主要包含查询信息,管理图书和管理读者三个功能板块。
图4-8 管理员登陆
管理员登陆及登陆验证核心代码如下:
String struser = user_ed.getText().toString();
String strpwd = pwd_ed.getText().toString();
String admin="190811010";
String pwd="123456";
//如果管理员输入的用户名与密码正确就登录,用户名:admin;密码:123456
if (admin.equals(struser) && pwd.equals(strpwd)) {
Intent intent = new Intent(AdminActivity.this, admin_content.class);
startActivity(intent);
} else {
Toast.makeText(AdminActivity.this, "用户名或密码不正确", Toast.LENGTH_LONG).show();
((EditText) findViewById(R.id.a_name)).setText("");
((EditText) findViewById(R.id.a_password)).setText("");
}
4.6管理员查询图书信息
管理员共有三大功能,分别是查询信息、管理图书和管理读者。
图4-9 管理员功能模块
进入查询信息界面后可查看图书信息、借阅信息、还书信息,在图书信息界面可查看上架全部图书,点击列表可进入详情页并修改详细信息,长按列表可删除图书。
图4-10 图书信息部分
展示全部上架图书需要找到对应的listview,从数据库中逐条取出图书信息,按照列表要求展示,图书信息列表展示核心代码如下:
listView = (ListView) findViewById(R.id.select_book_list);//找到对应的listview
final databaseHelp help = new databaseHelp(getApplicationContext());
Cursor cursor = help.querybookinfo();//数据库查询所有图书信息
String from[] = {"name", "type", "writer","publicer","rank","img", "price"};
int to[] = {R.id.book_name, R.id.book_type, R.id.book_author, R.id.book_publish, R.id.book_rank, R.id.book_info_img, R.id.book_pice};
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view.getId() == R.id.book_info_img) {
ImageView imageView = (ImageView) view;
imageView.setImageURI(Uri.parse(cursor.getString(columnIndex)));
return true;
} else {return false; }}});
listView.setAdapter(adapter);
单击listview会跳转到图书详情页面,并且可以在该页面修改图书信息,使用bundle传值的方法把图书信息传递到详情页面,被管理员修改后的图书信息会覆盖原本信息并保存在数据库中。图书详情及信息修改核心代码如下:
//listview的单击事件,修改图书信息
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//传值到修改界面
int i = position;
Intent intent = new Intent(admin_select_bookinfo.this, admin_update_book.class);
Bundle bundle = new Bundle();
bundle.putInt("id", i);
intent.putExtras(bundle);
startActivity(intent);
finish();
}
});
管理员长按listview会出现会话框,询问是否要删除该图书,若选择“确定”,该图书就会从数据库中删除,删除后再次查询图书数据看,长按列表删除图书核心代码如下:
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
final long temp = l;
builder.setMessage("确定要删除吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
help.delbookinfo((int) temp);
//删除后重新显示
Cursor cursor = help.querybookinfo();
String from[] = {"name", "type", "writer","publicer","rank","img"};
listView.setAdapter(adapter);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {});
AlertDialog dialog = builder.create();
dialog.show();
return true; }});
用户在个人页面借阅图书后,图书借阅表会保存借阅者和借阅图书信息,并在管理员端显示。
图4-11 借阅信息
管理员端查看图书借阅信息核心代码如下:
ad_borrow=(ListView)findViewById(R.id.ad_show_borrow);
databaseHelp help=new databaseHelp(getApplicationContext());
List<Map<String, Object>> data = help.queryborrow();
SimpleAdapter adapter = new SimpleAdapter(
admin_borrow_info.this, data, R.layout.ad_borrow_item,
new String[] { "_Bid","Borname","Bookid", "bookname", "nowtime" },
new int[] { R.id.ad_bid, R.id.ad_borname,
R.id.ad_bbid, R.id.ad_bname,
R.id.ad_btime });
ad_borrow.setAdapter(adapter);
4.7管理员管理图书
管理图书分为添加图书和查询图书两部分。添加图书时需要选择图片,补充图书详细信息,系统会检查管理员输入的信息若不符合要求则弹出提示信息并且不插入数据库,若所填信息符合要求则插入数据库。查询图书时根据管理员输入的图书名称进行模糊查询,系统会把所有符合条件的图书展示在listview中。
图4-12 添加图书
管理员添加图书核心代码如下:
//ISBN为十位,且不为空
if (et_bookid.getText().length()!=10) {
Toast.makeText(admin_add_book.this,"请输入10位图书ISBN",Toast.LENGTH_SHORT).show();
testid=false;
break;
}
if(et_bookname.getText().length()==0){
Toast.makeText(admin_add_book.this,"请输入完整图书信息",Toast.LENGTH_SHORT).show();
testother=false;
break;
}
if(testid==true&&testother==true){
helper.inserbooktdata(et_bookid.getText().toString(),
et_bookname.getText().toString(),
et_bookcomment.getText().toString(),
uri.toString());
Toast.makeText(admin_add_book.this,"添加图书成功",Toast.LENGTH_SHORT).show();
break;
}
图4-13 查询图书
通过bundle传值的方式获取管理员输入的查询条件,在数据库中寻找所有匹配的图书,管理员查询图书核心代码如下:
//bundle传值传递查询信息
Bundle bundle=this.getIntent().getExtras();
name=bundle.getString("name");
Cursor cursor = help.querybookinfoname(name);
String from[] = {"name", "type", "writer","publicer","rank","img"};
int to[] = {R.id.book_name, R.id.book_type, R.id.book_author, R.id.book_publish, R.id.book_rank, R.id.book_info_img};
//往bookinfo表中通过name查找
public Cursor querybookinfoname(String name) {
SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.query(Table_Name2, null, "name like ?", new String[]{"%"+name+"%"}, null, null, null, null);
return cursor;
}
4.8管理员管理读者
管理读者分为查找读者、添加读者、编辑读者和删除读者。
图4-14 管理图书
查找读者根据读者的用户名用户名进行模糊查询,通过bundle传值的方式获取管理员输入的查询条件,在数据库中寻找用户名匹配的用户,管理员查询用户核心代码如下:
Bundle bundle=this.getIntent().getExtras();
name=bundle.getString("name");
Cursor cursor = help.querybookinfoname(name);
String from[] = {"name", "type", "writer","publicer","rank","img"};
int to[] = {R.id.book_name, R.id.book_type, R.id.book_author, R.id.book_publish, R.id.book_rank, R.id.book_info_img};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.admin_book_item, cursor, from, to);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (view.getId() == R.id.book_info_img) {
ImageView imageView = (ImageView) view;
imageView.setImageURI(Uri.parse(cursor.getString(columnIndex)));
return true;
} else {return false; }}});
管理员添加用户,输入信息后系统从数据库查询,如果当前用户名已被注册则不能再添加同名用户,只有输入信息符合要求才能添加到数据库,核心代码如下:
String struser = user_ed.getText().toString();
String strpwd = pwd_ed.getText().toString();
//验证用户名是否存在
databaseHelp help = new databaseHelp(getApplicationContext());
SQLiteDatabase db = help.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("user", struser);
values.put("password", strpwd);
Cursor cursor = db.query("admin", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
String username = cursor.getString(cursor.getColumnIndex("user"));
if (username.equals(user_ed.getText().toString())) {
Toast.makeText(admin_add_reader.this, "用户名已存在", Toast.LENGTH_LONG).show();
((EditText) findViewById(R.id.r_name)).setText("");
return; }} while (cursor.moveToNext());}
cursor.close();
help.insert(values);
Toast.makeText(admin_add_reader.this, "用户添加成功", Toast.LENGTH_LONG).show();
编辑读者即修改当前已存在的读者信息,管理员点击待修改用户的listview后跳转到用户信息页面,点击“修改”提交编辑后的信息,修改后的信息则会在数据库中立即更新,核心代码如下:
//listview的单击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//传值到修改界面
int i = position + 1;
Intent intent = new Intent(admin_editer_reader.this, admin_update_reader.class);
Bundle bundle = new Bundle();
bundle.putInt("id", i);
intent.putExtras(bundle);
startActivity(intent); }});
//把编辑后的信息存入数据库
String struser = user_ed.getText().toString();
String strpwd = pwd_ed.getText().toString();
SQLiteDatabase db = help.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("user", struser);
values.put("name", uname);
db.update("admin", values, "_id=?", new String[]{String.valueOf(id)});
编辑读者即修改当前已存在的读者信息,管理员点击待修改用户的listview后跳转到用户信息页面,点击“修改”提交编辑后的信息,修改后的信息则会在数据库中立即更新,核心代码如下:
Bundle bundle = getIntent().getExtras();
id = bundle.getInt("id");
final databaseHelp help = new databaseHelp(getApplicationContext());
Cursor cursor = help.queryid(id);
if (cursor.getCount() > 0) {
cursor.moveToFirst();
user_ed.setText(cursor.getString(cursor.getColumnIndex("user")));
pwd_ed.setText(cursor.getString(cursor.getColumnIndex("password")));}
//修改按钮的事件监听
update_bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String struser = user_ed.getText().toString();
String strpwd = pwd_ed.getText().toString();
SQLiteDatabase db = help.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("user", struser);
values.put("password", strpwd);
db.update("admin", values, "_id=?", new String[]{String.valueOf(id)});}
管理员根据用户名删除用户,在数据库中清空用户信息,核心代码如下:
//listview的单击事件监听
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
builder.setMessage("确定要删除吗?").setPositiveButton
("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
help.del((int) temp);
//删除后重新显示
Cursor cursor = help.query();
String from[]={"user","password","name", "sex", "birthday", "phone"};
listView.setAdapter(adapter); }})
5、问题及解决方案
在开始实现系统时实现用户表和借阅表的创建,在管理员端需要查看用户时不知道应该怎么办,后来查阅相关资料得知要创建查询函数,找到可用的数据库使用指针的方式,采用while循环依次获取数据库指定表的信息。具体实现代码如下:
//在pay表中根据用户查询
public List<Map<String, Object>> querypayuser(String str){
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
SQLiteDatabase db=getWritableDatabase();
Cursor cursor=db.query(Table_Name4, null,"Borname=?", new String[]{str}, null, null, null);
while(cursor.moveToNext()){
Map<String, Object> map = new HashMap<String, Object>();
map.put("_Rid",cursor.getString(cursor.getColumnIndex("_Rid")));
map.put("Borname",cursor.getString(cursor.getColumnIndex("Borname")));
map.put("Bookid",cursor.getString(cursor.getColumnIndex("Bookid")));
map.put("bookname",cursor.getString(cursor.getColumnIndex("bookname")));
map.put("bookauthor",cursor.getString(cursor.getColumnIndex("bookauthor")));
map.put("nowtime",cursor.getString(cursor.getColumnIndex("nowtime")));
data.add(map);
}
return data;
}
在管理员实现搜索功能时有点不知所措,后来查看课上的ppt和录屏,想到使用bundle传值的方式把当前页面输入的搜索字符传递到处理页,在处理页调用模糊查询函数,最后将所有符合的查询结果显示在查询结果页面。具体实现代码如下:
//获取搜索页面传来的值
final databaseHelp help = new databaseHelp(getApplicationContext());
Bundle bundle=this.getIntent().getExtras();
name=bundle.getString("name");
Cursor cursor = help.querybookinfoname(name);
//往bookinfo表中通过name查找
public Cursor querybookinfoname(String name) {
SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.query(Table_Name2, null, "name like ?", new String[]{"%"+name+"%"}, null, null, null, null);
return cursor;
}
6、总结
截止到今天图书管理系统已经实现,基本达到了自己的预期目的。最开始拿到设计要求时毫无头绪,之前一直写的是局部功能,现在要实现整个完善的系统,而且不能是功能的堆砌,要考虑到整体的业务逻辑。
整个系统的亮点就是功能完善,同时实现了用户和管理员两个角色,并且实现了角色信息的交互管理。用户在注册时设置了用户名检验,保证了用户的唯一性,这为后来查询用户信息和借阅信息提供了便利。为了提升用户使用的流畅性,设置了菜单选项,点击菜单会在左侧展示用户个人中心,用户可以在个人中心对收藏和借阅的图书进行管理。管理员端不仅能管理图书还能管理用户,实现图书及用户的搜索、删除、增加和修改操作,保证了图书馆图书信息的及时更新,也保障了图书馆用户的使用秩序及用户信息安全。管理员端还可以查看用户的借阅和归还操作,极大程度上提升了管理效率。
项目还存在不足,由于时间原因未实现用户端添加读书笔记、评论图书等功能,后期会继续改进项目并不断加强学习,希望未来可以完成业务逻辑完善、界面美观和功能完善的图书管理系统。
参考文献
[1]陈志鹏.基于Android手机客户端图书借还APP的设计[J].农业图书情报学报,2020,32(05):65-75.DOI:10.13998/j.cnki.issn1002-1248.2020.01.05-1160.
[2]邵玠文,蔡宇锋,王德宏.基于安卓系统的图书借阅管理系统设计[J].电子测试,2020(05):97-98.DOI:10.16520/j.cnki.1000-8519.2020.05.032.
[3]曹光辉,周奕.基于Android平台的“掌上图书”[J].电脑知识与技术,2020,16(01):86-87.DOI:10.14004/j.cnki.ckt.2020.0036.
[4]朱金诺. 基于android平台的校园助手客户端的设计与实现[D].江西财经大学,2016.
[5]Sufyan bin Uzayr. Mastering Android Studio:A Beginner's Guide[M].CRC Press:2021-08-27.
相关推荐
- Mysql和Oracle实现序列自增(oracle创建序列的sql)
-
Mysql和Oracle实现序列自增/*ORACLE设置自增序列oracle本身不支持如mysql的AUTO_INCREMENT自增方式,我们可以用序列加触发器的形式实现,假如有一个表T_WORKM...
- 关于Oracle数据库12c 新特性总结(oracle数据库19c与12c)
-
概述今天主要简单介绍一下Oracle12c的一些新特性,仅供参考。参考:http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT...
- MySQL CREATE TABLE 简单设计模板交流
-
推荐用MySQL8.0(2018/4/19发布,开发者说同比5.7快2倍)或同类型以上版本....
- mysql学习9:创建数据库(mysql5.5创建数据库)
-
前言:我也是在学习过程中,不对的地方请谅解showdatabases;#查看数据库表createdatabasename...
- MySQL面试题-CREATE TABLE AS 与CREATE TABLE LIKE的区别
-
执行"CREATETABLE新表ASSELECT*FROM原表;"后,新表与原表的字段一致,但主键、索引不会复制到新表,会把原表的表记录复制到新表。...
- Nike Dunk High Volt 和 Bright Spruce 预计将于 12 月推出
-
在街上看到的PandaDunk的超载可能让一些球鞋迷们望而却步,但Dunk的浪潮仍然强劲,看不到尽头。我们看到的很多版本都是为女性和儿童制作的,这种新配色为后者引入了一种令人耳目一新的新选择,而...
- 美国多功能舰载雷达及美国海军舰载多功能雷达系统技术介绍
-
多功能雷达AN/SPY-1的特性和技术能力,该雷达已经在美国海军服役了30多年,其修改-AN/SPY-1A、AN/SPY-1B(V)、AN/SPY-1D、AN/SPY-1D(V),以及雷神...
- 汽车音响怎么玩,安装技术知识(汽车音响怎么玩,安装技术知识视频)
-
全面分析汽车音响使用或安装技术常识一:主机是大多数人最熟习的音响器材,有关主机的各种性能及规格,也是耳熟能详的事,以下是一些在使用或安装时,比较需要注意的事项:LOUDNESS:几年前的主机,此按...
- 【推荐】ProAc Response系列扬声器逐个看
-
有考牌(公认好声音)扬声器之称ProAcTablette小音箱,相信不少音响发烧友都曾经,或者现在依然持有,正当大家逐渐掌握Tablette的摆位设定与器材配搭之后,下一步就会考虑升级至表现更全...
- #本站首晒# 漂洋过海来看你 — BLACK&DECKER 百得 BDH2000L无绳吸尘器 开箱
-
作者:初吻给了烟sco混迹张大妈时日不短了,手没少剁。家里有了汪星人,吸尘器使用频率相当高,偶尔零星打扫用卧式的实在麻烦(汪星人:你这分明是找借口,我掉毛是满屋子都有,铲屎君都是用卧式满屋子吸的,你...
- 专题|一个品牌一件产品(英国篇)之Quested(罗杰之声)
-
Quested(罗杰之声)代表产品:Q212FS品牌介绍Quested(罗杰之声)是录音监听领域的传奇品牌,由英国录音师RogerQuested于1985年创立。在成立Quested之前,Roger...
- 常用半导体中英对照表(建议收藏)(半导体英文术语)
-
作为一个源自国外的技术,半导体产业涉及许多英文术语。加之从业者很多都有海外经历或习惯于用英文表达相关技术和工艺节点,这就导致许多英文术语翻译成中文后,仍有不少人照应不上或不知如何翻译。为此,我们整理了...
- Fyne Audio F502SP 2.5音路低音反射式落地音箱评测
-
FyneAudio的F500系列,有新成员了!不过,新成员不是新的款式,却是根据原有款式提出特别版。特别版产品在原有型号后标注了SP字样,意思是SpecialProduction。Fyne一共推出...
- 有哪些免费的内存数据库(In-Memory Database)
-
以下是一些常见的免费的内存数据库:1.Redis:Redis是一个开源的内存数据库,它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合。Redis提供了快速的读写操作,并且支持持久化数据到磁...
- RazorSQL Mac版(SQL数据库查询工具)
-
RazorSQLMac特别版是一款看似简单实则功能非常出色的SQL数据库查询、编辑、浏览和管理工具。RazorSQLformac特别版可以帮你管理多个数据库,支持主流的30多种数据库,包括Ca...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- Mysql和Oracle实现序列自增(oracle创建序列的sql)
- 关于Oracle数据库12c 新特性总结(oracle数据库19c与12c)
- MySQL CREATE TABLE 简单设计模板交流
- mysql学习9:创建数据库(mysql5.5创建数据库)
- MySQL面试题-CREATE TABLE AS 与CREATE TABLE LIKE的区别
- Nike Dunk High Volt 和 Bright Spruce 预计将于 12 月推出
- 美国多功能舰载雷达及美国海军舰载多功能雷达系统技术介绍
- 汽车音响怎么玩,安装技术知识(汽车音响怎么玩,安装技术知识视频)
- 【推荐】ProAc Response系列扬声器逐个看
- #本站首晒# 漂洋过海来看你 — BLACK&DECKER 百得 BDH2000L无绳吸尘器 开箱
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)