Android简易版图书管理系统
这是我的代码gitee地址,想要的可以自行去看看:https://gitee.com/pan-qiaoyan/Library.git
终于完工了,做了半个月,我真是太懒了,记录一下:
准备工作:
1.虚拟器安装搜狗输入法,这样虚拟器就可以输入中文了,步骤:
①网上下载搜狗输入法X86的安装包(可以在以下网址下载)
http://www.mdpda.com/app/apk3670941.html
②下载好后。启动虚拟器后直接拖下载的apk文件进去,下载好会显示搜狗输入法的
2.准备好软件的图标,为软件设置一个好看的外观。可以参照以下博主的帖子
https://blog.csdn.net/sinat_41924085/article/details/80514151
一、设置各种界面xml文件
1、activity_main.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/cardview_light_background"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:layout_gravity="center" android:paddingLeft="16dp" android:paddingRight="16dp" android:text="图书管理系统" android:textSize="30dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="20dp" android:src="@drawable/pic_logo1"/> <!-- 用户名子布局,水平布局,包含一个TextView控件与EditView控件 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="5dp"> <TextView android:padding="8dp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginTop="30dp" android:layout_marginLeft="70dp" android:text="用户名:" android:gravity="center" android:textSize="20dp"/> <EditText android:id="@+id/username_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_marginTop="30dp" android:layout_marginRight="90dp" android:layout_weight="2" android:background="@drawable/eidttext_background" android:hint="请输入用户名" android:maxLines="1" android:padding="8dp" /> </LinearLayout> <!-- 密码子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:padding="8dp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginTop="30dp" android:layout_marginLeft="70dp" android:text="密码:" android:gravity="center" android:textSize="20dp"/> <EditText android:padding="8dp" android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" android:id="@+id/password_text" android:layout_marginTop="30dp" android:layout_marginLeft="0dp" android:layout_marginRight="90dp" android:maxLines="1" android:hint="请输入密码" android:background="@drawable/eidttext_background" android:inputType="textPassword"/> <!--inputType是设置密码输入框的文本是密码的形式,这步很关键--> </LinearLayout> <!-- 记住密码子布局--> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/checkbox_text" android:layout_marginLeft="90dp" android:checked="false" android:text="记住密码" android:textSize="12dp"/> <CheckBox android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/password_checkbook" android:layout_marginLeft="70dp" android:checked="false" android:text="显示密码" android:textSize="12dp" /> </LinearLayout> <!-- 注册登录按钮子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="30dp" android:layout_marginLeft="40dp"> <!-- 注册按钮--> <Button android:id="@+id/register_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="60dp" android:backgroundTint="#000000" android:paddingRight="20dp" android:paddingLeft="20dp" android:textSize="20dp" android:textColor="@color/cardview_light_background" android:text="注册"/> <!--登录按钮--> <Button android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="50dp" android:backgroundTint="#000000" android:paddingRight="20dp" android:paddingLeft="20dp" android:textSize="20dp" android:textColor="@color/cardview_light_background" android:text="登录"/> </LinearLayout> </LinearLayout>
2.注册界面,activity_register.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_marginTop="70dp" android:text="用户注册" android:textSize="35dp" /> <!-- 用户名子布局,水平布局,包含一个TextView控件与EditView控件 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:padding="8dp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginTop="30dp" android:layout_marginLeft="70dp" android:text="用户名:" android:gravity="right" android:textSize="20dp"/> <EditText android:id="@+id/newusername_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_marginTop="30dp" android:layout_marginRight="90dp" android:layout_weight="2" android:background="@drawable/eidttext_background" android:hint="请输入用户名" android:maxLines="1" android:padding="8dp" /> </LinearLayout> <!-- 密码子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:padding="8dp" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginTop="30dp" android:layout_marginLeft="70dp" android:text="密码:" android:gravity="right" android:textSize="20dp"/> <EditText android:padding="8dp" android:layout_width="0dp" android:layout_weight="2" android:layout_height="wrap_content" android:id="@+id/newpassword_text" android:layout_marginTop="30dp" android:layout_marginLeft="0dp" android:layout_marginRight="90dp" android:maxLines="1" android:hint="请输入密码" android:background="@drawable/eidttext_background" android:inputType="textPassword"/> <!--inputType是设置密码输入框的文本是密码的形式,这步很关键--> </LinearLayout> <!-- 再次确认密码--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_marginRight="0dp" android:layout_marginTop="30dp" android:layout_weight="1" android:gravity="right" android:padding="0dp" android:paddingLeft="0dp" android:paddingRight="0dp" android:text="确认密码:" android:textSize="20dp" /> <EditText android:padding="8dp" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/new_again_password_text" android:layout_marginTop="30dp" android:layout_marginLeft="0dp" android:layout_marginRight="90dp" android:maxLines="1" android:hint="请再次输入密码" android:background="@drawable/eidttext_background" android:inputType="textPassword"/> <!--inputType是设置密码输入框的文本是密码的形式,这步很关键--> </LinearLayout> <CheckBox android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/new_password_checkbook" android:layout_marginLeft="220dp" android:checked="false" android:text="显示密码" android:textSize="12dp" /> <!-- 注册以及返回按钮子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="30dp" android:layout_marginLeft="40dp"> <!-- 注册按钮--> <Button android:id="@+id/yes_register_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="60dp" android:backgroundTint="#000000" android:paddingRight="20dp" android:paddingLeft="20dp" android:textSize="20dp" android:textColor="@color/cardview_light_background" android:text="注册"/> <!--返回按钮--> <Button android:id="@+id/back_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="50dp" android:backgroundTint="#000000" android:paddingRight="20dp" android:paddingLeft="20dp" android:textSize="20dp" android:textColor="@color/cardview_light_background" android:text="返回"/> </LinearLayout> <ImageView android:layout_width="68dp" android:layout_height="57dp" android:layout_gravity="center" android:layout_marginTop="90dp" android:src="@drawable/pic_logo1" /> </LinearLayout>
3.功能界面,activity_library_function.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/find_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询书籍" android:textSize="25dp" android:textColor="@color/cardview_light_background" android:background="@drawable/eidttext_background" android:backgroundTint="#000000" android:layout_marginTop="70dp" android:layout_gravity="center" android:paddingLeft="50dp" android:paddingRight="50dp" android:paddingTop="10dp" android:paddingBottom="10dp"/> <Button android:id="@+id/add_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增添书籍" android:textSize="25dp" android:textColor="@color/cardview_light_background" android:background="@drawable/eidttext_background" android:backgroundTint="#000000" android:layout_marginTop="70dp" android:layout_gravity="center" android:paddingLeft="50dp" android:paddingRight="50dp" android:paddingTop="10dp" android:paddingBottom="10dp"/> <Button android:id="@+id/alter_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改书籍" android:textSize="25dp" android:textColor="@color/cardview_light_background" android:background="@drawable/eidttext_background" android:backgroundTint="#000000" android:layout_marginTop="70dp" android:layout_gravity="center" android:paddingLeft="50dp" android:paddingRight="50dp" android:paddingTop="10dp" android:paddingBottom="10dp"/> <Button android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除书籍" android:textSize="25dp" android:textColor="@color/cardview_light_background" android:background="@drawable/eidttext_background" android:backgroundTint="#000000" android:layout_marginTop="70dp" android:layout_gravity="center" android:paddingLeft="50dp" android:paddingRight="50dp" android:paddingTop="10dp" android:paddingBottom="10dp"/> </LinearLayout>
4.查询书籍页面,find.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="300dp" android:layout_height="match_parent" android:background="@drawable/eidttext_background" android:backgroundTint="@color/cardview_light_background"> <!-- 书籍名称子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍名称:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/find_bookname_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <!-- 操作结果文本框--> <EditText android:id="@+id/find_result_text" android:layout_width="250dp" android:layout_height="90dp" android:layout_marginTop="15dp" android:layout_gravity="center" android:textColor="#000000" android:background="@drawable/eidttext_background"/> <!-- 确定以及取消按钮--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp" android:gravity="center" > <!-- 确定按钮--> <Button android:id="@+id/find_yes_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="确定"/> <!--登录按钮--> <Button android:id="@+id/find_no_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="取消"/> </LinearLayout> </LinearLayout>
5.增添书籍页面,activity_dialog.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="300dp" android:layout_height="match_parent" android:background="@drawable/eidttext_background" android:backgroundTint="@color/cardview_light_background"> <!-- 书籍名称子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍名称:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/add_bookname_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <!-- 书籍编号子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍编号:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/add_bookID_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" android:maxLines="5" /> </LinearLayout> <!-- 书籍价格子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍价格:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/add_bookPrice_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <!-- 操作结果文本框--> <EditText android:id="@+id/add_result_text" android:layout_width="250dp" android:layout_height="90dp" android:layout_marginTop="15dp" android:layout_gravity="center" android:background="@drawable/eidttext_background"/> <!-- 确定以及取消按钮--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp" android:gravity="center" > <!-- 确定按钮--> <Button android:id="@+id/add_yes_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="确定"/> <!--登录按钮--> <Button android:id="@+id/add_no_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="取消"/> </LinearLayout> </LinearLayout>
6.修改书籍信息页面,alter_activity.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="300dp" android:layout_height="match_parent" android:background="@drawable/eidttext_background" android:backgroundTint="@color/cardview_light_background"> <!-- 书籍名称子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp" android:layout_gravity="center"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="原书籍名称:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/alter_bookname_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp" android:layout_gravity="center"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍新名称:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/new_alter_bookname_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <!-- 书籍编号子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍新编号:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/alter_bookID_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" android:maxLines="5" /> </LinearLayout> <!-- 书籍价格子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍新价格:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/alter_bookPrice_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <!-- 操作结果文本框--> <EditText android:id="@+id/alter_result_text" android:layout_width="250dp" android:layout_height="90dp" android:layout_marginTop="15dp" android:layout_gravity="center" android:textColor="#000000" android:background="@drawable/eidttext_background"/> <!-- 确定以及取消按钮--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp" android:gravity="center" > <!-- 确定按钮--> <Button android:id="@+id/alter_yes_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="确定"/> <!--登录按钮--> <Button android:id="@+id/alter_no_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="取消"/> </LinearLayout> </LinearLayout>
7.删除书籍信息页面,cancel_activity.xml
代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="300dp" android:layout_height="match_parent" android:background="@drawable/eidttext_background" android:backgroundTint="@color/cardview_light_background"> <!-- 书籍名称子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍名称:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/cancel_bookname_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" /> </LinearLayout> <!-- 书籍编号子布局--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="书籍编号:" android:textSize="20dp" android:textColor="#000000" /> <EditText android:id="@+id/cancel_bookID_text" android:layout_width="0dp" android:layout_height="35dp" android:layout_weight="1" android:layout_marginRight="20dp" android:background="@drawable/eidttext_background" android:layout_gravity="center" android:textColor="#000000" android:maxLines="5" /> </LinearLayout> <!-- 操作结果文本框--> <EditText android:id="@+id/cancel_result_text" android:layout_width="250dp" android:layout_height="90dp" android:layout_marginTop="15dp" android:layout_gravity="center" android:textColor="#000000" android:background="@drawable/eidttext_background"/> <!-- 确定以及取消按钮--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp" android:gravity="center" > <!-- 确定按钮--> <Button android:id="@+id/cancel_yes_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="确定"/> <!--登录按钮--> <Button android:id="@+id/cancel_no_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="#000000" android:paddingRight="10dp" android:paddingLeft="10dp" android:textSize="15dp" android:textColor="@color/cardview_light_background" android:text="取消"/> </LinearLayout> </LinearLayout>
注意:上面的四个功能页面都是采用了对话框式的活动,所以要在AndroidManist.xml文件中每个活动里加入一句:android:theme="@style/Theme.AppCompat.Dialog"
AndroidManist.xml代码:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.library"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".cancel" android:theme="@style/Theme.AppCompat.Dialog"></activity> <activity android:name=".find" android:theme="@style/Theme.AppCompat.Dialog"></activity> <activity android:name=".Alter_activity" android:theme="@style/Theme.AppCompat.Dialog" /> <activity android:name=".Dialog_Activity" android:theme="@style/Theme.AppCompat.Dialog" /> <activity android:name=".Library_function" /> <activity android:name=".RegisterActivity" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
二、java代码
1.MainActivity.java
package com.example.library;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText username; //用户名输入框
private EditText password; //密码输入框
private Button LoginButton; //登录按钮
private Button RegisterButton; //注册按钮
private CheckBox passwordCheck; //显示密码复选框
// private EditText new_username;//注册页面的用户名输入框
// private EditText new_password;//注册页面的密码输入框
// private EditText new_again_password;//注册页面的再次输入密码框
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verifyStoragePermissions(this);
initialize(); //初始化各种控件
ischeck(passwordCheck); //设置密码显示或不显示
LoginButton.setOnClickListener(this);
RegisterButton.setOnClickListener(this);
}
/**
* 初始化控件
*/
private void initialize(){
username=(EditText)findViewById(R.id.username_text); //创建用户名输入框对象
password=(EditText)findViewById(R.id.password_text); //创建密码输入框对象
RegisterButton=(Button)findViewById(R.id.register_button); //创建注册按钮对象
LoginButton =(Button)findViewById(R.id.login_button); //创建登录按钮对象
passwordCheck=(CheckBox)findViewById(R.id.password_checkbook); //创建显示密码复选框对象
}
/**
* 设置显示密码的点击操作
*
*/
private void ischeck(CheckBox passwordCheck){
passwordCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//显示明文,即设置为可见的密码
password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}else{
//不显示明文,即设置为不可见的密码
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
});
}
/**
* 点击登录或注册按钮时触发的点击事件
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.login_button://登录的点击事件
login();
break;
case R.id.register_button://注册的点击事件
//点击注册按钮时转去第二个活动页面
Intent intent=new Intent(MainActivity.this,RegisterActivity.class);
startActivity(intent);
break;
default:
break;
}
}
/**
* 登录
*/
private void login() {
//获取输入的用户名与密码
String usernametext=username.getText().toString().trim();
String passwordtext=password.getText().toString().trim();
//System.out.println(usernametext+" "+passwordtext);
//定义用户名和密码规则
String usernameregex = "[a-zA-Z]{5}";
String passwordregex = "[0-9]{5}";
//校验用户名
if (!(usernametext.matches(usernameregex))) {
// JOptionPane.showMessageDialog(this, "用户名格式不对,请输入5位单词字母)");
// new AlertDialog.Builder(MainActivity.this)
// .setTitle("error").setMessage("用户名格式不对,请输入5位单词字母")
// .setPositiveButton("好的",null).show();
Toast.makeText(MainActivity.this,"用户名格式不对,请输入5位单词字母",Toast.LENGTH_LONG).show();
//清空用户名框文本,并把输入光标放回到输入框
this.username.setText("");
this.username.requestFocus();
return;
}
//校验密码
if (!(passwordtext.matches(passwordregex))) {
//JOptionPane.showMessageDialog(this, "密码格式不对,请输入6-12位任意字符)");
Toast.makeText(MainActivity.this,"密码格式不正确,请输入6-12位任意字符",Toast.LENGTH_LONG).show();
// new AlertDialog.Builder(MainActivity.this)
// .setTitle("error").setMessage("密码格式不正确,请输入6-12位任意字符")
// .setPositiveButton("好的",null).show();
//
//清空用户名框文本,并把输入光标放回到输入框
this.password.setText("");
this.username.requestFocus();
return;
}
//调用登录功能
UserDaoImpl loginImpl=new UserDaoImpl();
boolean flag=loginImpl.isloging(this,usernametext,passwordtext);
if(!flag){
//如果登录不成功
Toast.makeText(MainActivity.this,"用户名或密码错误",Toast.LENGTH_LONG).show();
//将用户名框与密码框清空,并把光标放回框中
this.username.setText("");
this.password.setText("");
this.username.requestFocus();
this.password.requestFocus();
}else{
//登录成功
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_LONG).show();
Intent intent=new Intent(MainActivity.this,Library_function.class);
startActivity(intent);
}
}
private void openPerssion() {
verifyStoragePermissions(this);
}
/**
* @des 权限组的获取
* @author DELL
* @time 10:44
*/
public void verifyStoragePermissions(Activity activity) {
try {
//检测是否有写的权限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.User.java:用户信息类
package com.example.library; /** * * @author Asus */ public class User { private String username;//用户名 private String password;//用户密码 public User(){} public User(String username, String password) { this.username = username; this.password = password; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public String getPassword() { return password; } }
3.UserDao.java:登录注册功能接口
package com.example.library; import android.content.Context; import java.io.FileNotFoundException; /** *这是一个用户登录注册接口 * @author Asus */ public interface UserDao { /** * 这是判断登录是否成功的方法 * @param username 用户名 * @param password 用户的密码 * @return 用户是否登录成功 */ public abstract boolean isloging(Context context,String username, String password) ; /** * 这是注册方法 * */ public abstract boolean register(Context context,User user); }
4.UserDaoImpl.java:登录注册实现类
package com.example.library; import android.content.Context; import android.content.res.Resources; import android.os.Environment; import android.util.Log; import android.widget.Toast; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Properties; import java.util.Set; /** * 用户登录注册功能实现类 * * @author Asus */ public class UserDaoImpl implements UserDao { private static File sdpath= Environment.getExternalStorageDirectory(); private static File myfile=new File(sdpath,"panq.txt"); //创建类的时候就创建文件 static { try { if(myfile.exists()) System.out.println("文件已存在"); else{ myfile.createNewFile(); } } catch (IOException ex) { ex.printStackTrace(); } } /** * 登录功能 * @param context Activity的上面的某一层是Context,所以传值过来的是一个Activity,此处可以写成Context * @param username 用户名 * @param password 用户的密码 * @return */ @Override public boolean isloging(Context context,String username, String password) { boolean flag =false;//判断是否登录成功 BufferedReader br = null; try{ //读取文件信息,看用户名与密码是否匹配 br = new BufferedReader(new FileReader(myfile)); String line = null; while ((line = br.readLine()) != null) { String[] date = line.split("="); System.out.println("用户名:"+date[0]+",密码:"+date[1]); if (date[0].equals(username) && date[1].equals(password)) { //信息匹配,登录成功 flag = true; break; } } }catch (Exception e1){ e1.printStackTrace(); }finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } /** * * @param context Activity的上面的某一层是Context,所以传值过来的是一个Activity,此处可以写成Context * @param user 用户信息 * @return */ @Override public boolean register(Context context,User user) { BufferedWriter bw=null; BufferedReader br=null; boolean isregister=false;//判断是否注册成功 try{ //先读取文件,查看用户名是否已注册 br=new BufferedReader(new FileReader(myfile)); boolean flag=myload(user.getUsername());//通过myload函数判断用户名是否已存在 if(!flag){ //用户名不存在,即可以使用该用户名,注册成功 isregister=true; //把用户信息写到文件中 bw=new BufferedWriter(new FileWriter(myfile,true)); bw.write(user.getUsername()+"="+user.getPassword()); bw.newLine(); bw.flush(); } }catch (Exception e){ e.printStackTrace(); }finally { if (br!=null&bw != null) { try { bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } return isregister; } /** * 判断用户名是否已存在 * @param username 用户注册时输入的用户名 * @return * @throws IOException */ private boolean myload(String username) throws IOException { boolean flag = false; Properties p = new Properties(); BufferedReader br = new BufferedReader(new FileReader(myfile)); p.load(br); br.close(); Set<String> key = p.stringPropertyNames();//获取所有已注册的用户名 for (String user : key) { if (username.equals(user)) { flag = true; break; } } return flag; } }
5.RegisetrActivity.java:注册功能的活动代码
package com.example.library; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.text.InputType; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Toast; public class RegisterActivity extends AppCompatActivity implements View.OnClickListener{ private EditText new_username;//注册页面的用户名输入框 private EditText new_password;//注册页面的密码输入框 private EditText new_again_password;//注册页面的再次输入密码框 private Button new_register;//注册按钮 private Button back;//返回按钮 private CheckBox ispassword;//显示密码按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); init();//初始化控件 ischeck(ispassword); new_register.setOnClickListener(this); back.setOnClickListener(this); } /** * 初始化控件 */ private void init() { new_username=(EditText)findViewById(R.id.newusername_text);//创建注册页面的用户名输入框对象 new_password=(EditText)findViewById(R.id.newpassword_text);//创建注册页面的密码输入框对象 new_again_password=(EditText)findViewById(R.id.new_again_password_text);//创建注册页面的再次确认密码输入框对象 new_register=(Button)findViewById(R.id.yes_register_button);//创建注册按钮对象 back=(Button)findViewById(R.id.back_button);//创建返回按钮对象 ispassword=(CheckBox)findViewById(R.id.new_password_checkbook);//创建显示密码按钮对象 } private void register(){ //获取输入的用户名与密码 String usernametext=new_username.getText().toString().trim(); String passwordtext=new_password.getText().toString().trim(); //定义用户名和密码规则 String usernameregex = "[a-zA-Z]{5}"; String passwordregex = "[0-9]{5}"; //校验用户名 if (!(usernametext.matches(usernameregex))) { // JOptionPane.showMessageDialog(this, "用户名格式不对,请输入5位单词字母)"); // new AlertDialog.Builder(MainActivity.this) // .setTitle("error").setMessage("用户名格式不对,请输入5位单词字母") // .setPositiveButton("好的",null).show(); Toast.makeText(RegisterActivity.this,"用户名格式不对,请输入5位单词字母",Toast.LENGTH_LONG).show(); //清空用户名框文本,并把输入光标放回到输入框 this.new_username.setText(""); this.new_username.requestFocus(); return; } //校验密码 if (!(passwordtext.matches(passwordregex))) { //JOptionPane.showMessageDialog(this, "密码格式不对,请输入6-12位任意字符)"); Toast.makeText(RegisterActivity.this,"密码格式不正确,请输入6-12位任意字符",Toast.LENGTH_LONG).show(); // new AlertDialog.Builder(MainActivity.this) // .setTitle("error").setMessage("密码格式不正确,请输入6-12位任意字符") // .setPositiveButton("好的",null).show(); // //清空用户名框文本,并把输入光标放回到输入框 this.new_password.setText(""); this.new_password.requestFocus(); return; } //校验两次输入的密码是否一致 String again_password=new_again_password.getText().toString().trim(); if(!again_password.equals(new_password)){ Toast.makeText(RegisterActivity.this,"密码不一致",Toast.LENGTH_LONG).show(); } //调用注册功能 User user=new User(usernametext,passwordtext); UserDaoImpl loginImpl=new UserDaoImpl(); boolean result=loginImpl.register(this,user);//判断是否注册成功 if(result){ Toast.makeText(RegisterActivity.this,"注册成功",Toast.LENGTH_LONG).show(); }else { Toast.makeText(RegisterActivity.this, "用户名已存在", Toast.LENGTH_LONG).show(); //清空用户名框文本,并把输入光标放回到输入框 this.new_username.setText(""); this.new_username.requestFocus(); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.yes_register_button: register();//校验输入的用户名与密码 break; case R.id.back_button: Intent intent=new Intent(RegisterActivity.this,MainActivity.class); startActivity(intent); break; default: break; } } /** * 设置显示密码的点击操作 * */ private void ischeck(CheckBox passwordCheck){ passwordCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ //显示明文,即设置为可见的密码 new_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); new_again_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); }else{ //不显示明文,即设置为不可见的密码 new_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); new_again_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); } } }); } }
6.Library_function.java:图书馆功能活动代码
package com.example.library; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Library_function extends AppCompatActivity implements View.OnClickListener { private Button addButton;//增添书籍按钮 private Button findButton;//查询书籍按钮 private Button alterButton;//修改书籍信息按钮 private Button cancelButton;//删除书籍按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_library_function); init(); addButton.setOnClickListener(this); alterButton.setOnClickListener(this); findButton.setOnClickListener(this); cancelButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.add_button: Intent intent1=new Intent(Library_function.this,Dialog_Activity.class); startActivity(intent1); break; case R.id.find_button: Intent intent3=new Intent(Library_function.this,find.class); startActivity(intent3); break; case R.id.alter_button: Intent intent2=new Intent(Library_function.this,Alter_activity.class); startActivity(intent2); break; case R.id.cancel_button: Intent intent4=new Intent(Library_function.this,cancel.class); startActivity(intent4); break; default: break; } } private void init(){ addButton=(Button)findViewById(R.id.add_button); findButton=(Button)findViewById(R.id.find_button); alterButton=(Button)findViewById(R.id.alter_button); cancelButton=(Button)findViewById(R.id.cancel_button); } }
7.Book.java:书籍的信息类
package com.example.library; public class Book { private String ID;//书的编号 private String Name;//书名 private String price;//书的价格 public Book() { super(); } public Book(String iD, String name, String price) { super(); ID = iD; Name = name; this.price = price; } public String getID() { return ID; } public void setID(String iD) { ID = iD; } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Book other = (Book) obj; if (ID == null) { if (other.ID != null) return false; } else if (!ID.equals(other.ID)) return false; if (Name == null) { if (other.Name != null) return false; } else if (!Name.equals(other.Name)) return false; if (price == null) { if (other.price != null) return false; } else if (!price.equals(other.price)) return false; return true; } @Override public String toString() { return "Book [ID=" + ID + ", Name=" + Name + ", price=" + price + "]"; } }
8.BookDao.java:图书管理系统的4个功能接口
package com.example.library; /** * 图书管理系统功能的接口 * 2020.04.26 */ interface BookDao { public void addBook(Book book);//增添书籍 public String findBook(String bookName);//查询书籍 public boolean alterBook(String BookName,String newstr);//修改书籍内容 public void cancelBook(String bookName,String ID);//删除书籍 }
9.BookDaoImpl.java:功能实现类
package com.example.library; import android.os.Environment; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; /** * 图书管理系统的功能实现类 */ public class BookDaoImpl implements BookDao{ private static File sdpath= Environment.getExternalStorageDirectory(); private static File file=new File(sdpath,"Library.txt"); private static File file1=new File(sdpath,"temp.txt"); //创建类的时候就创建文件 static { try { if(file.exists()&file1.exists()) System.out.println("文件已存在"); else{ file1.createNewFile(); } } catch (IOException ex) { ex.printStackTrace(); } } /** * 增添书籍 * @param book 书的信息 */ @Override public void addBook(Book book) { BufferedWriter bw=null; BufferedReader br=null; try { bw=new BufferedWriter(new FileWriter(file,true));//true代表将数据写入文件末尾处,而不是文件开始处 br=new BufferedReader(new FileReader(file)); String line=null; if((line=br.readLine())!=null){ //如果文件第一行不是空,即文件已经有内容 bw.write("\r\n");//因为文件最后一行的末尾没有回车换行符,如果不先加回车换行符,就会直接在最后一行写,不会新增一行 bw.write(book.getID()+"-"+book.getName()+"-"+book.getPrice()); bw.flush(); }else{//如果文件第一行为空,即文件没有内容 bw.write(book.getID()+"-"+book.getName()+"-"+book.getPrice()); bw.flush(); } } catch (IOException e) { e.printStackTrace(); }finally{ if(bw!=null&br!=null) { try { bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 查询书籍 * @param bookName 要查询的书籍名称 */ @Override public String findBook(String bookName) { BufferedReader br=null; String result=null; try { br=new BufferedReader(new FileReader(file)); String readLine = ""; while((readLine = br.readLine()) != null){ String list[]=readLine.split("-"); if(readLine.contains(bookName)) { result="ID:"+list[0]+"\n书名:"+list[1]+"\n价格:"+list[2]; break; } } } catch (Exception e) { e.printStackTrace(); }finally{ if(br!=null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } /** * 修改书籍信息 * @param oldName 要修改的书籍名称 * @param buffer 修改后的书籍全部信息,包括编号、书名、书的价格 * @return */ @Override public boolean alterBook(String oldName, String buffer) { RandomAccessFile raf=null; try { raf=new RandomAccessFile(file, "rw"); String Line=null; while((Line=raf.readLine())!=null) { //RandomAccessFile 读写文件时,不管文件中保存的数据编码格式是什么 // 使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1 // 所以 输出显示是还要在进行一次转码 String changeLine=new String(Line.getBytes("ISO-8859-1"), "utf-8"); //查找要替换的内容 if(changeLine.contains(oldName)) { //得到当前指针的位置,如果不是最后一行,就应该是在oldName\r\n后面; //如果是最后一行,则就在oldName后面 long lastpoint=raf.getFilePointer(); //如果是最后一行 if(lastpoint==raf.length()) { //指针回到行首 raf.seek(lastpoint-changeLine.getBytes().length); int currentLength=changeLine.getBytes().length;//原字符串的字节长度,1个中文字符占2字节 int targeLength=buffer.getBytes().length;//替换后字符串的字节长度 //替换的字符串字节数比源字符串小 if(currentLength>targeLength) { int tempLength=currentLength-targeLength; StringBuilder sb=new StringBuilder(buffer); //目的是防止修改的内容没有没全替换掉 for(int a=0;a<tempLength;a++) { sb.append(" "); } raf.writeBytes(new String(sb.toString().getBytes("utf-8"), "ISO-8859-1")); }else { //替换的字符串字节数比源字符串大或两者相等 raf.writeBytes(new String(buffer.getBytes("utf-8"), "ISO-8859-1")); } }else {//不是最后一行 //回到行首,减去2的原因是行末有\r\n,占2字节 raf.seek(lastpoint-changeLine.getBytes().length-2); int currentLength=changeLine.getBytes().length;//原字符串的长度 int targeLength=buffer.getBytes().length;//替换后字符串的长度 //替换的字符串字节数比源字符串小,目的是防止修改的内容没有没全替换掉 if(currentLength>targeLength) { int tempLength=currentLength-targeLength; StringBuilder sb=new StringBuilder(buffer); //源字符串没替换的字符用空格代替 for(int a=0;a<tempLength;a++) { sb.append(" "); } raf.writeBytes(new String(sb.toString().getBytes("utf-8"), "ISO-8859-1")); }else { //替换的字符串比源字符串大或两者相等 raf.writeBytes(new String(buffer.getBytes("utf-8"), "ISO-8859-1")); } } break; } } } catch (Exception e) { e.printStackTrace(); }finally{ if(raf!=null) { try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } /** * 删除书籍 * @param bookName 要删除的书籍名称 * @param ID 要删除的书籍编号 */ @Override public void cancelBook(String bookName, String ID) { boolean flag=false; BufferedWriter bw=null; BufferedReader br=null; StringBuilder sb=null; try { bw=new BufferedWriter(new FileWriter(file1)); br=new BufferedReader(new FileReader(file)); String line=null; sb=new StringBuilder(); while((line=br.readLine())!=null) { //要删除的那一行 if (line.contains(bookName)) { String[] data = line.split("-");//将书籍编号、书籍名、书籍价格存在数组中 if (!ID.equals(data[0])) System.out.println("输入编号不正确"); else { //如果删除的书籍信息都匹配成功 flag = true; } }else {//不是要删除的那一行 sb.append(line).append("\r\n");//存储没有被删的书籍信息到字符串sb中 } } int lastindex=sb.lastIndexOf("\r\n");//获取最后一行书籍信息的回车换行符索引 sb.delete(lastindex,sb.length());//删除最后一行书籍信息的回车换行符 //如果输入的删除信息都匹配成功,就开始删除信息 if(flag) { bw.write(sb.toString());//将字符串写进新的文件中 //重命名文件必须先关闭流 bw.close(); br.close(); if(file.delete())//重命名前必须删除同名文件 file1.renameTo(file); } }catch (Exception e) { e.printStackTrace(); }finally{ if(br!=null&bw!=null) { try { bw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
10.Dialog_Activity.java:增添书籍功能代码
package com.example.library; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.ViewParent; import android.widget.Button; import android.widget.EditText; public class Dialog_Activity extends AppCompatActivity implements View.OnClickListener{ private EditText name;//书名文本框 private EditText ID;//书的编号文本框 private EditText price;//价格文本框 private EditText result;//操作结果文本框 private Button yes_button;//确定文本框 private Button no_button;//取消文本框 private BookDaoImpl impl=new BookDaoImpl();//创建实现类 private Book book;//创建书类对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dialog_); setTitle("增添书籍");//设置标题 init();//控件初始化 yes_button.setOnClickListener(this); no_button.setOnClickListener(this); } /** * 初始化各种控件 */ private void init(){ name=(EditText)findViewById(R.id.add_bookname_text); ID=(EditText)findViewById(R.id.add_bookID_text); price=(EditText)findViewById(R.id.add_bookPrice_text); yes_button=(Button)findViewById(R.id.add_yes_button); no_button=(Button)findViewById(R.id.add_no_button); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.add_yes_button: getResult(); break; case R.id.add_no_button: Intent intent=new Intent(Dialog_Activity.this,Library_function.class); startActivity(intent); break; default: break; } } /** * 操作的类 * @param */ private void getResult() { String bookname=this.name.getText().toString().trim();//获取用户键盘录入的书名 String bookid=this.ID.getText().toString().trim();//获取用户键盘录入编号 String bookprice=this.price.getText().toString().trim();//获取用户键盘录入的价格 book=new Book(bookid,bookname,bookprice);//将书籍信息放到Book类中 //调用书籍添加功能 impl.addBook(book); } }
11.find.java:查询书籍信息功能代码
package com.example.library; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class find extends AppCompatActivity implements View.OnClickListener { private EditText findBookName; private EditText findResult; private Button find_yes; private Button find_no; private BookDaoImpl find_impl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_find); setTitle("查询书籍"); init(); find_yes.setOnClickListener(this); find_no.setOnClickListener(this); } private void init() { findBookName=(EditText)findViewById(R.id.find_bookname_text); findResult=(EditText)findViewById(R.id.find_result_text); find_yes=(Button)findViewById(R.id.find_yes_button); find_no=(Button)findViewById(R.id.find_no_button); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.find_yes_button: getresult(); break; case R.id.find_no_button: Intent intent=new Intent(find.this,Library_function.class); startActivity(intent); break; default: break; } } private void getresult() { String find_Bookname=this.findBookName.getText().toString().trim(); System.out.println(find_Bookname); find_impl=new BookDaoImpl(); String result=find_impl.findBook(find_Bookname); System.out.println(result); if(result==null){ this.findResult.setText("无查询结果."); }else{ this.findResult.setText(result); } } }
12.alter_activity:修改书籍信息功能代码
package com.example.library; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Alter_activity extends AppCompatActivity implements View.OnClickListener{ private EditText alter_name;//原书名文本框 private EditText alter_new_name;//新书名文本框 private EditText alter_ID;//书的新编号文本框 private EditText alter_price;//新价格文本框 private EditText alter_result;//操作结果文本框 private Button alter_yes_button;//确定文本框 private Button alter_no_button;//取消文本框 private BookDaoImpl alter_impl=new BookDaoImpl();//创建实现类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alter_activity); setTitle("修改书籍");//设置标题 init();//控件初始化 alter_yes_button.setOnClickListener(this); alter_no_button.setOnClickListener(this); } /** * 初始化各种控件 */ private void init(){ alter_name=(EditText)findViewById(R.id.alter_bookname_text); alter_new_name=(EditText)findViewById(R.id.new_alter_bookname_text); alter_ID=(EditText)findViewById(R.id.alter_bookID_text); alter_price=(EditText)findViewById(R.id.alter_bookPrice_text); alter_result=(EditText)findViewById(R.id.alter_result_text) ; alter_yes_button=(Button)findViewById(R.id.alter_yes_button); alter_no_button=(Button)findViewById(R.id.alter_no_button); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.alter_yes_button: getResult(); break; case R.id.alter_no_button: break; default: break; } } /** * 操作的类 * @param */ private void getResult() { String bookname=this.alter_name.getText().toString().trim();//获取用户键盘录入的书名 String newbookname=this.alter_new_name.getText().toString().trim();//获取用户输入的新书名 String bookid=this.alter_ID.getText().toString().trim();//获取用户输入的新编号 String bookprice=this.alter_price.getText().toString().trim();//获取用户键盘录入的价格 String buffer=bookid+'-'+newbookname+'-'+bookprice; //调用修改功能 alter_impl.alterBook(bookname,buffer); this.alter_result.setText("修改成功"); } }
13.cancel.java:删除书籍信息功能代码
package com.example.library; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class cancel extends AppCompatActivity implements View.OnClickListener{ private EditText cancelBookName; private EditText cancelID; private EditText cancelRecult; private Button cancel_yes; private Button cancel_no; private BookDaoImpl cancelImpl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cancel); setTitle("删除书籍"); init(); cancel_yes.setOnClickListener(this); cancel_no.setOnClickListener(this); } private void init() { cancelBookName=(EditText)findViewById(R.id.cancel_bookname_text); cancelID=(EditText)findViewById(R.id.cancel_bookID_text); cancelRecult=(EditText)findViewById(R.id.cancel_result_text); cancel_yes=(Button)findViewById(R.id.cancel_yes_button); cancel_no=(Button)findViewById(R.id.cancel_no_button); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.cancel_yes_button: getResult(); break; case R.id.cancel_no_button: Intent intent=new Intent(cancel.this,Library_function.class); startActivity(intent); break; } } private void getResult() { String cancel_bookName=this.cancelBookName.getText().toString().trim(); String cancel_ID=this.cancelID.getText().toString().trim(); cancelImpl=new BookDaoImpl(); cancelImpl.cancelBook(cancel_bookName,cancel_ID); this.cancelRecult.setText("删除成功"); } }
最后:其实过程不难,只是要有耐心,遇到难题要一步步去解决,现在只是txt文件去记录书籍信息,希望这个月可以完成安卓与数据库结合的图书管理系统。
源码想要的可以自行去看看,gitee地址:https://gitee.com/pan-qiaoyan/Library.git