zoukankan      html  css  js  c++  java
  • Android简易版图书管理系统

    这是我的代码github地址,想要的可以自行去看看:https://github.com/nihaowoshipanq/Library

    终于完工了,做了半个月,我真是太懒了,记录一下:

    准备工作:

    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>
    View Code

     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>
    View Code

    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>
    View Code

    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>
    View Code

    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>
    View Code

    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>
    View Code

    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>
    View Code

    注意:上面的四个功能页面都是采用了对话框式的活动,所以要在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>
    View Code

    二、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();
            }
        }
    
    }
    View Code

    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;
        }
    
    
    }
    View Code

    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);
    
    }
    View Code

    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;
        }
    
    }
    View Code

    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);
                    }
                }
            });
        }
    }
    View Code

    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);
        }
    }
    View Code

    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 + "]";
        }
    }
    View Code

    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);//删除书籍
    }
    View Code

    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("
    ");//因为文件最后一行的末尾没有回车换行符,如果不先加回车换行符,就会直接在最后一行写,不会新增一行
                    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]+"
    书名:"+list[1]+"
    价格:"+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
    后面;
                        //如果是最后一行,则就在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的原因是行末有
    ,占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("
    ");//存储没有被删的书籍信息到字符串sb中
                    }
                }
                int lastindex=sb.lastIndexOf("
    ");//获取最后一行书籍信息的回车换行符索引
                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();
                    }
                }
            }
    
    
        }
    }
    View Code

    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);
    
    
    
    
    
    
        }
    
    
    }
    View Code

    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);
            }
        }
    }
    View Code

    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("修改成功");
    
        }
    
    
    }
    View Code

    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("删除成功");
        }
    }
    View Code

    最后:其实过程不难,只是要有耐心,遇到难题要一步步去解决,现在只是txt文件去记录书籍信息,希望这个月可以完成安卓与数据库结合的图书管理系统。

    代码我已经放到github上了,大家可以不用问我,直接去github下载就行,网址在文章开头。

  • 相关阅读:
    容器级虚拟化如何进行资源分配
    容器虚拟化实现的原理
    tensorflow报cudnn错误
    nginx调优
    mysql主从原理及配置
    新安装mysql,如何提升mysql安全性
    LINUX系统软件安装和卸载的常见方法
    如何增加黑客通过ssh入侵的难度--保护ssh的三把锁
    ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像
    ubuntu-docker入门到放弃(七)操作系统
  • 原文地址:https://www.cnblogs.com/panqiaoyan/p/12818313.html
Copyright © 2011-2022 走看看