Android实训——图书管理系统
在大学课程实训课程中,通过开发实现一个完整的系统作业是基本操作吧,本次描述的是一个基于Android studio开发的图书管理系统,大学阶段学习的基本知识不牢固,很多地方也没有完全优化完善,单单实现了一个数据的增删改查以及各个界面的跳转关系。
涉及到的只是对于刚接触开发的人来说比较难的有,数据库的增、删、改、查以及列表(List)适配器以及列表item响应事件处理等。以下请看流程:
一、结构图如以下:
二、系统分为两个模块:
(1)、管理员模块:添加用户的登录信息(赋予用户初始登录账号密码) && (增删改查)书籍信息 && (增删改查)用户基本数据(学号、名称、等等)&& 查看已借书籍
(2)、用户模块:登录账号密码、借书、还书、显示用户所借的书籍
三、主要代码:
(1)、设置管理员特定账号密码:
//设置登录的账号密码为admin、123456
/**
*name = 账号输入框数据
*pass = 密码输入框数据
*/
if(name.equals("admin") && pass.equals("123456")){Intent intent=new Intent(MainActivity.this,AdminActivity.class);startActivity(intent);Toast.makeText(getApplicationContext(), "跳转到管理员界面", Toast.LENGTH_LONG).show();
}
(2)、管理员的管理界面(这里简单介绍对第一个功能:对学生登录信息的操作)
2-1、对学生登录信息的操作界面(这里设计到数据库的内容、后面单独介绍数据库创建以及数据库列表创建)
//插入数据库的方法
public void operate(User user){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String name=user.getUsername();String pass=user.getPassword();db.execSQL("insert into user (name,password) values (?,?)",new Object[]{name,pass});Log.d("数据库操作", "成功");db.close();}else{Toast.makeText(this.context,"error",Toast.LENGTH_LONG).show();}
}
2-2、查看录入的数据(这里就涉及到列表、数据适配器的内容了)
//从数据库查找数据并返回
//User是一个数据的实体类,里面包含username,password以及它们的get和set方法以及构造器
public List<User> findAll(){List<User> users =null;SQLiteDatabase db=help.getReadableDatabase();if(db.isOpen()){Cursor cursor=db.query("user",null,null,null,null,null,null);users=new ArrayList<User>();while(cursor.moveToNext()){User user=new User();String name=cursor.getString(cursor.getColumnIndex("name"));user.setUsername(name);String pass=cursor.getString(cursor.getColumnIndex("password"));user.setPassword(pass);users.add(user);}cursor.close();db.close();}return users;}//调用此方法,userlist为全局变量,这里需要注意
//声明一个List userlist = new ArrayList();
private void getData() {userdao=new UserBean(this);userlist=userdao.findAll();
}/**
* R.layout.userlist:新建的一个布局
* userlist:上面提到的全局变量
* setOnItemClickListener:列表的item的响应事件
* 响应事件为:创建一个对话框,对话框有两个操作:修改、删除
*/
public void actionFindAllInfo(){getData();UserAdapter myAdapter=new UserAdapter(this,R.layout.userlist,userlist);listview.setAdapter(myAdapter);listview.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) {User user=(User)arg0.getItemAtPosition(arg2);final String name=user.getUsername();final String pass=user.getPassword();AlertDialog.Builder builder=new AlertDialog.Builder(UserViewActivity.this);builder.setTitle("确定以下操作???");builder.setPositiveButton("修改", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {Intent intent=new Intent();Bundle bundel=new Bundle();bundel.putString("name", name);bundel.putString("pass", pass);intent.setClass(getApplicationContext(),UpdateUserActivity.class);intent.putExtras(bundel);startActivity(intent);}});builder.setNegativeButton("删除", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {User user=new User(name,pass);if(user.getUsername()==null){UserBean del=new UserBean(UserViewActivity.this);del.delete();Toast.makeText(getApplicationContext(), "用户名不能为空", Toast.LENGTH_LONG).show();}UserBean del=new UserBean(UserViewActivity.this);del.delete(user);Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show();onStart();}});builder.show();}});
)
补充说明:适配器使用
//对数据进行列表适配以及展示
public class UserAdapter extends ArrayAdapter{User list;public void setList(User list){this.list=list;}@Overridepublic long getItemId(int position){return position;}public UserAdapter(Context context, int resource,List<User>userlist) {super(context, resource,userlist);}@Overridepublic View getView(int position,View convertView,ViewGroup parent){list=(User)getItem(position);View view=LayoutInflater.from(getContext()).inflate(R.layout.userlist, null);TextView name =(TextView)view.findViewById(R.id.textView1);TextView pass =(TextView)view.findViewById(R.id.textView2);name.setText(list.getUsername());pass.setText(list.getPassword());return view;}
}
2-2-1、删除功能:上面我们提到了修改了删除功能,结合前面我们有贴了一个数据库添加数据的方法以及查看并返回一个实体类的方法、现在我们我们简单说一下删除方法:
//删除数据库数据的方法,将获得用户的数据传进来作为条件删除用户数据
public void delete(User user){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String name=user.getUsername();String pass=user.getPassword();db.delete("user", "name=?", new String[]{name});}
}
2-2-2、修改功能
//更新用户数据方法
public void update(User user){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String name=user.getUsername();String pass=user.getPassword();ContentValues cv=new ContentValues();cv.put("name", name);cv.put("password", pass);//String sql="update user set name=? password=? where name=?,new Object[]{name,pass��name}";db.update("user", cv,"name=?", new String[]{name});Log.v("�û�����", "�û��ijɹ�");db.close();}
}
四、数据库的创建
//单独封装的一个数据库创建类
public class User_SQliteHelp extends SQLiteOpenHelper{private Context mContext;public User_SQliteHelp(Context context) {super(context, "xxx.db", null, 1);//数据库创建}public User_SQliteHelp(Context context, String name, CursorFactory cursorFactory, int version) {super(context, name,cursorFactory, version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE IF NOT EXISTS user(name varchar(20)primary key,password varchar(20))");}@Overridepublic void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {}
}
五、对数据库操作的方法
//把所有对数据库操作的方法封装成一个类
public class UserBean {private Context context;private User_SQliteHelp help;public UserBean(Context context){this.context=context;help=new User_SQliteHelp(context);}//检查public boolean ischeck(User use){boolean flage=false;if(findone(use).getUsername()!=null)flage=true;return flage;}public User findone(User user){SQLiteDatabase db=help.getReadableDatabase();User use=new User();String name=user.getUsername();String pass=user.getPassword();if(db.isOpen()){Cursor cursor=db.query("user",null,"name=?",new String[]{name},null,null,null);while(cursor.moveToNext()){String username=cursor.getString(cursor.getColumnIndex("name"));use.setUsername(username);String password=cursor.getString(cursor.getColumnIndex("password"));use.setPassword(password);}}return use;}public List<User> findAll(){List<User> users =null;SQLiteDatabase db=help.getReadableDatabase();if(db.isOpen()){Cursor cursor=db.query("user",null,null,null,null,null,null);users=new ArrayList<User>();while(cursor.moveToNext()){User user=new User();String name=cursor.getString(cursor.getColumnIndex("name"));user.setUsername(name);String pass=cursor.getString(cursor.getColumnIndex("password"));user.setPassword(pass);users.add(user);}cursor.close();db.close();}return users;}public void operate(User user){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String name=user.getUsername();String pass=user.getPassword();db.execSQL("insert into user (name,password) values (?,?)",new Object[]{name,pass});Log.d("数据库操作", "成功");db.close();}else{Toast.makeText(this.context,"error",Toast.LENGTH_LONG).show();}
}public void update(User user){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String name=user.getUsername();String pass=user.getPassword();ContentValues cv=new ContentValues();cv.put("name", name);cv.put("password", pass);db.update("user", cv,"name=?", new String[]{name});db.close();}}public void delete(User user){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String name=user.getUsername();String pass=user.getPassword();db.delete("user", "name=?", new String[]{name});}
}public void delete(){SQLiteDatabase db=help.getWritableDatabase();if(db.isOpen()){String sql="delet from user where name is null";db.execSQL(sql);}}public boolean login(String username,String password){SQLiteDatabase db=help.getReadableDatabase();String sql="select * from user where username=? and password=?";Cursor cursor=db.rawQuery(sql, new String[]{username,password});if(cursor.moveToFirst()){cursor.close();return true;}return false;}
}
六、上文提到的用户实体类User
public class User {String username,password;public User(String username,String password){this.username=username;this.password=password;}public User(){ }public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
总结:这里只简单介绍了系统其中一个单独的功能,里面还有很多重复的对数据库增删改查功能以及界面的跳转,就不一一列举了,学完之后你会发现都是类似的东西。
如需要源码可私聊。
Android实训——图书管理系统相关推荐
- android 实训的背景,Android实训项目作业.doc
Android实训项目作业 2-1用整型数计算两个数的和2 2-7排列任意4个数的顺序,按从小到大顺序输出2 2.1编写显示下列图形的程序.2 3.1编写程序,当点击按钮命令后,页面标题及文本组件的文 ...
- Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!...
Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写.加上色彩.分数等深度剖析开发过程! 关于2048,我看到非常多大神,比方医生.郭神.所以我也研究了一段时间.还好是研 ...
- 2021-6-28 项目实训-研究生管理系统
2021-6-28 项目实训-研究生管理系统 完成了以下工作: 1.配置Springboot+uni-app环境 2.安装MySQL数据库 3.下载安装微信小程序开发工具 4.运行示例代码
- Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程
Android实训案例(九)--答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程 项目也是偷师的,决心研究一下数据库.所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要 ...
- Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。然后重点提到Acti
Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity.Service.BroadcastReceiver.ContentProvider.然后重点提到Activi ...
- 中职计算机实训室管理规定,中高职智慧实训室管理系统
中高职智慧实训室管理系统 利用物联网.互联网技术,通过智能数据控制终端设备获取前端数据资源,结合实训室管控软件平台的支撑,将实训室智能门禁.实训室视频监控.实训室远程电控.实训室温湿度检测.智慧电子门 ...
- 【安卓大作业】Android Studio学校图书管理系统
[安卓大作业]Android Studio学校图书管理系统 一.界面展示 二.功能介绍 图书馆介绍.查看上架新书.借阅排行榜 学生端.图书借阅.管理员端.图书管理等 三.项目结构 四.关键代码展示 ( ...
- Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局
Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...
- Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!
Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!
Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...
最新文章
- Java分布式 RPC 框架性能大比拼,Dubbo真的最差吗?
- 语音文件转成文字怎么转
- CFA考试一二三级经验,我写的很仔细......
- 网吧ARP双绑定详细策略 -限制P2P绝密版
- Java建造圆判断是否在园内_java – 查找一个圆圈是否在另一个圆圈内
- file_get_contents 在本地测试可以, 但在服务器上报错403
- zabbix前端php界面,Zabbix Web UI
- telephone 为空 唯一索引_PostgreSQL的空串、空值对唯一性约束的影响
- python视频延迟严重_利用多进程降低opencv视频延迟处理rtsp视频流
- 晨哥真有料丨自信一点!恋爱做自己,不要自卑,不要迎合!
- 美法院起诉黑客组织成员 为暴雪服务器攻击者
- Debian sequeeze编译coreavc 2.0+mplayer
- 计算机主板用料,【技嘉H55评测】主板供电篇——CPU辅助电源-中关村在线
- ad中使用智能粘贴_AD元件复制粘贴使用技巧
- 2022年烷基化工艺找解析及烷基化工艺考试总结
- 计算机无法ping打印机,打印机故障:测试页打印失败是否参阅打印疑难解答已或得帮助...
- INSERT INTO语句
- Qt使用lambda表达式实现无参信号与有参槽的连接
- C#文本型数值转换为数值类型
- matlab车轮滚动动画,Fireworks动画教程:简单制作轮子滚动动画效果