Android Studio 实现图书借阅(管理)系统

🍅文章末尾有获取完整项目源码方式🍅

目录

前言

一、任务介绍

1.1 背景

1.2目的和意义

二、 实现介绍

视频演示

2.1 启动页实现

2.2 注册页面实现

2.3 登陆页面实现

2.4 图书列表的实现

2.5 当前借阅页面实现               

 2.6 我的页面实现  

 2.7 归还图书页面实现 

三、获取源码


前言

       本系统将充分利用Android Studio提供的丰富功能和优秀性能,以用户友好的界面设计和智能化的功能模块,为用户带来全新的图书借阅体验。同时,该系统的开发将有助于促进图书馆管理的现代化和智能化进程,提升图书馆的服务质量和核心竞争力。

一、任务介绍

1.1 背景

        随着社会的发展,图书馆作为知识的仓库和学习的场所,扮演着至关重要的角色。然而,传统的图书借阅管理方式已经难以满足当代信息化、智能化的需求。为了更好地适应现代化管理需求,本系统基于Android Studio平台,旨在实现一套便捷高效的图书借阅和管理系统。

1.2目的和意义

         提升借阅体验:传统的图书借阅方式需要读者亲自到图书馆办理借书手续,耗费时间和精力。通过该系统,读者可以在线浏览图书馆的书籍目录、借阅图书,无需到图书馆现场,大大提升了借阅的便捷性和效率。

二、实现介绍

视频演示

Android Studio 实现图书借阅(管理)系统

2.1 启动页实现

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    tools:context=".Activity.StartActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/logo" />
</androidx.constraintlayout.widget.ConstraintLayout>

2.2 注册页面实现

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    tools:context=".Activity.RegisterActivity">

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="0dp"
        android:layout_height="250dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/logo" />

    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="32dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView3">

        <EditText
            android:id="@+id/mUserNameEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="请输入用户名"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/mPasswordEditText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:ems="10"
            android:hint="请输入密码"
            android:inputType="textPassword" />

        <EditText
            android:id="@+id/rPassword_edittext"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:ems="10"
            android:hint="请再次输入密码"
            android:inputType="textPassword" />

        <TextView
            android:id="@+id/tv_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center|right"
            android:text="已有帐号,立即登录!"
            android:textColor="#000" />
    </LinearLayout>

    <Button
        android:id="@+id/btn_register"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:background="@drawable/btn_lr"
        android:text="立 即 注 册"
        android:textColor="#fff"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/linearLayout3"
        app:layout_constraintStart_toStartOf="@+id/linearLayout3"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout3" />
</androidx.constraintlayout.widget.ConstraintLayout>

        这段代码实现了一个简单的注册页面,可以输入用户名和密码进行注册,同时要求输入的密码和重复密码一致。注册成功后,会插入数据库并跳转到登录页面;注册失败则显示失败的提示。

package com.example.booklendingsystem.Activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import com.example.booklendingsystem.R;

public class RegisterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        initView();
        register();
        login();
    }

    // 返回到登陆页面
    private void login() {
        tvLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }

    private void register() {
        // 点击注册按钮进行验证
        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                               // 判断是否输入内容
                if (username.isEmpty() || password.isEmpty()) {
                    Toast.makeText(getApplicationContext(), "请输入账号或密码", Toast.LENGTH_SHORT).show();
                    return;
                }
                // 判断两次密码是否一致
                if (passwordrepeat.equals(password) && password.equals(passwordrepeat)) {
                                    if (result) {
                        Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                        startActivity(intent);
                        finish();
                    } else {
                        Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(getApplicationContext(), "两次密码不同,请检查!", Toast.LENGTH_SHORT).show();
                }

            }
        });
    }


   
}

2.3 登陆页面实现

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    tools:context=".Activity.LoginActivity">

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="0dp"
        android:layout_height="250dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/logo" />

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="32dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView2">

        <EditText
            android:id="@+id/username_edittext"
            android:layout_width="match_parent"
            android:layout_height="57dp"
            android:ems="10"
            android:hint="请输入用户名"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/rPassword_edittext"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:ems="10"
            android:hint="请输入密码"
            android:inputType="textPassword" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:orientation="horizontal">

            <CheckBox
                android:id="@+id/savePwd_checkBox"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="记住密码"
                android:textSize="14sp" />

            <TextView
                android:id="@+id/register_text"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center|right"
                android:text="还没有账号?立即注册!"
                android:textColor="#000" />
        </LinearLayout>
    </LinearLayout>

    <Button
        android:id="@+id/login_button"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:background="@drawable/btn_lr"
        android:text="立 即 登 录"
        android:textColor="#fff"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/linearLayout2"
        app:layout_constraintStart_toStartOf="@+id/linearLayout2"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />
</androidx.constraintlayout.widget.ConstraintLayout>

        这段代码实现了一个简单的登录页面,可以输入用户名和密码进行登录,可以选择是否保存密码,还可以跳转到注册页面进行账号注册。

package com.example.booklendingsystem.Activity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.booklendingsystem.R;

public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        register();
        login();
    }

 

    // 进行账号密码验证实现登录
    private void login() {
        mLoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取输入的内容
                String username = mUserNameEditText.getText().toString().trim();
                String password = mPasswordEditText.getText().toString().trim();
                    
                // 判断输入的内容是否为空
                if (username.isEmpty() || password.isEmpty()) {
                    Toast.makeText(getApplicationContext(), "请输入账号或密码", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (result) {
                    Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                } else {
                    Toast.makeText(getApplicationContext(), "账号或密码错误", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    // 跳转注册页面
    private void register() {
        rEgisterText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(intent);
            }
        });
    }

    }

2.4 图书列表的实现

        在点击借阅按钮的点击监听器中,获取了输入的学号和借阅人的信息,并进行了一些判断和处理。如果输入为空,会显示提示消息;如果输入不为空,会检查数据库中是否已有借阅记录,如果有,则显示提示消息,如果没有,则将借阅信息添加到数据库中,并显示借阅成功的提示消息。

        最后,将适配器设置给 ListView,并返回显示列表的视图。        

package com.example.booklendingsystem.Fragment;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;

import com.example.booklendingsystem.Bean.BookList;
import com.example.booklendingsystem.Bean.BorrowInfo;
import com.example.booklendingsystem.Helper.BookHelper;
import com.example.booklendingsystem.R;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;


public class BookListFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_book_list, container, false);
        // 创建 BorrowInfo 对象
        final ArrayList<BookList> bookList = new ArrayList<>();
        bookList.add(new BookList(R.drawable.gava, "《Java从入门到精通(第7版)》", "明日科技", "《Java从入门到精通(第7版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细讲解了使用Java语言进行程序开发需要掌握的知识。全书分为4篇共24章,内容包括初识Java,开发工具(IDEA、Eclipse),Java语言基础,流程控制,数组,类和对象,继承、多态、抽象类与接口,包和内部类,异常处理,字符串,常用类库,集合类,枚举类型与泛型,lambda表达式与流处理,I/O(输入/输出),反射与注解,数据库操作,Swing程序设计,Java绘图,多线程,并发,网络通信,飞机大战游戏,MR人脸识别打卡系统。书中所有知识都结合具体实例进行讲解,涉及的程序代码都给出了详细的注释,这可以帮助读者轻松领会Java程序开发的精髓,并快速提高开发技能。"));
         // 创建适配器
        ArrayAdapter<BookList> adapter = new ArrayAdapter<BookList>(getActivity(), R.layout.item_book, bookList) {
            @NonNull
            @Override
            public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                if (convertView == null) {
                    convertView = getLayoutInflater().inflate(R.layout.item_book, parent, false);
                }

                ImageView imageView = convertView.findViewById(R.id.img_book);
                TextView bookNameView = convertView.findViewById(R.id.tv_bookName);
                TextView authorView = convertView.findViewById(R.id.tv_author);
                TextView descriptionView = convertView.findViewById(R.id.tv_description);

                BookList currentBook = getItem(position);
                if (currentBook != null) {
                    imageView.setImageResource(currentBook.getImageResource());
                    bookNameView.setText(currentBook.getTitle());
                    authorView.setText(currentBook.getAuthor());
                    descriptionView.setText(currentBook.getDescription());
                }

                return convertView;
            }
        };

        ListView listView = view.findViewById(R.id.lv);
        listView.setAdapter(adapter);
        return view;
    }
}

对应的布局文件代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Fragment.BookListFragment">

    <ListView
        android:id="@+id/lv"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#fff"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.238"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view2"
        app:layout_constraintVertical_bias="1.0" />

    <View
        android:id="@+id/view2"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:background="#80D3F8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="图书列表"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@+id/view2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/view2"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 2.5 当前借阅页面实现               

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Fragment.LoanRecordFragment">

    <View
        android:id="@+id/view3"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:background="#80D3F8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="当前借阅"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@+id/view3"
        app:layout_constraintEnd_toEndOf="@+id/view3"
        app:layout_constraintStart_toStartOf="@+id/view3"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/lst_orders"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view3">

    </ListView>

</androidx.constraintlayout.widget.ConstraintLayout>

         首先,在 onCreateView 方法中,加载了布局文件并初始化了视图。然后,在 setupListView 方法中,获取了所有的借阅信息,并将其倒序排列。

接下来,创建了一个自定义的适配器 BookAdapter,并将其设置给 ListView。

        最后,在 getAllBorrowInfoFromDatabase 方法中,通过 BookHelper 类从数据库中获取了所有的借阅信息。

package com.example.booklendingsystem.Fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import androidx.fragment.app.Fragment;

import com.example.booklendingsystem.Adapter.BookAdapter;
import com.example.booklendingsystem.Bean.BorrowInfo;

import com.example.booklendingsystem.R;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LoanRecordFragment extends Fragment {

    private ListView listView;
    private BookAdapter bookAdapter; // 自定义适配器

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_loan_record, container, false);
        initView(view);
        setupListView(); // 设置ListView
        return view;
    }

    private void initView(View view) {
        listView = view.findViewById(R.id.lst_orders);
    }

    // 设置ListView及其适配器
    private void setupListView() {       
        listView.setAdapter(bookAdapter); // 设置适配器
    }

  }

 2.6 我的页面实现  

        实现了一个包含三个按钮的界面,分别是归还图书、修改密码和退出登录。当用户点击这些按钮时,会触发相应的操作。

        在 onCreateView 方法中,通过 findViewById 方法获取到了三个按钮的实例,并分别为它们设置了点击事件监听器。

        当用户点击归还图书按钮时,会跳转到 BackBookActivity 页面;当用户点击修改密码按钮时,会弹出一个自定义的对话框,让用户输入新密码并进行确认,然后更新密码并跳转到登录页面;

        当用户点击退出按钮时,会弹出一个对话框确认是否退出,并在用户确认退出后跳转到登录页面。

        还实现了一个 initView 方法用于初始化界面的控件,以及 edit、modify 和 backbook 方法用于处理按钮的点击事件。

package com.example.booklendingsystem.Fragment;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;

import com.example.booklendingsystem.Activity.BackBookActivity;
import com.example.booklendingsystem.Activity.LoginActivity;
import com.example.booklendingsystem.Helper.UsersHelper;
import com.example.booklendingsystem.R;

import static android.content.Context.MODE_PRIVATE;

public class MineFragment extends Fragment {

    private LinearLayout llBackBook;
    private LinearLayout llEdit;
    private LinearLayout llModifymm;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_mine, container, false);
        initView(view);
        edit();
        modify();
        backbook();
        return view;
    }

    // 进入归还图书页面
    private void backbook() {
        llBackBook.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), BackBookActivity.class);
                startActivity(intent);
            }
        });
    }

    private void modify() {
        llModifymm.setOnClickListener(new View.OnClickListener() {

            private EditText dialogEtRmm;
            private EditText dialogEtNmm;
            private EditText dialogEtUser;
            private Button btnCancel;
            private Button btnModify;

            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                final View dialogView = getLayoutInflater().inflate(R.layout.dialog_modifymm, null);
                // 获取控件
                dialogEtUser = dialogView.findViewById(R.id.dialog_et_user);
                dialogEtNmm = dialogView.findViewById(R.id.dialog_et_nmm);
                dialogEtRmm = dialogView.findViewById(R.id.dialog_et_rmm);
                btnModify = dialogView.findViewById(R.id.btn_modify);
                btnCancel = dialogView.findViewById(R.id.btn_cancel);

                builder.setView(dialogView);
                // 创建对话框并声明为 final
                final AlertDialog dialog = builder.create();
                dialog.show();

                // 点击取消关闭对话框
                btnCancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                // 点击修改按钮后的添加操作
                btnModify.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                          dialog.dismiss();

                        } else {
                            Toast.makeText(getActivity(), "修改密码失败,请检查用户名是否正确!", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        });
    }

    // 退出
    private void edit() {
        llEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建一个AlertDialog.Builder对象
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

                // 设置对话框的标题和内容
                builder.setTitle("提示")
                        .setMessage("确定要退出吗?")

                        // 设置取消按钮(左边的按钮)
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // 用户点击取消按钮时,不执行任何操作
                                dialog.dismiss();
                            }
                        })

                        // 设置确定按钮(右边的按钮)
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // 跳转登陆页面
                                Intent intent = new Intent(getActivity(), LoginActivity.class);
                                Toast.makeText(getActivity(), "退出成功!", Toast.LENGTH_SHORT).show();
                                startActivity(intent);
                            }
                        });

                // 创建并显示AlertDialog
                AlertDialog dialog = builder.create();
                dialog.show();
            }
        });
    }

    // 获取控件
    private void initView(View view) {
        llBackBook = view.findViewById(R.id.ll_back_book);
        llEdit = view.findViewById(R.id.ll_edit);
        llModifymm = view.findViewById(R.id.ll_modifymm);
    }
}

对应的xml布局代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    tools:context=".Fragment.MineFragment">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/imageView5"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:src="@drawable/logo" />

        <LinearLayout
            android:id="@+id/ll_back_book"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:src="@drawable/backbook" />

            <TextView
                android:id="@+id/textView7"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_marginLeft="10dp"
                android:layout_weight="1"
                android:gravity="center|left"
                android:text="归还图书"
                android:textColor="#000"
                android:textSize="16sp" />

            <ImageView
                android:id="@+id/imageView6"
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:src="@drawable/right" />
        </LinearLayout>

        <View
            android:id="@+id/view4"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="20dp"
            android:background="#EFEFEF" />

        <LinearLayout
            android:id="@+id/ll_modifymm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="20dp"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageView9"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:src="@drawable/modifymm" />

            <TextView
                android:id="@+id/textView15"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_marginLeft="10dp"
                android:layout_weight="1"
                android:gravity="center|left"
                android:text="修改密码"
                android:textColor="#000"
                android:textSize="16sp" />

            <ImageView
                android:id="@+id/imageView10"
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:src="@drawable/right" />
        </LinearLayout>

        <View
            android:id="@+id/view5"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="20dp"
            android:background="#EFEFEF" />

        <LinearLayout
            android:id="@+id/ll_edit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_marginRight="20dp"
            android:gravity="center"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/imageView7"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:src="@drawable/edit" />

            <TextView
                android:id="@+id/textView12"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_marginLeft="10dp"
                android:layout_weight="1"
                android:gravity="center|left"
                android:text="退出登录"
                android:textColor="#000"
                android:textSize="16sp" />

            <ImageView
                android:id="@+id/imageView8"
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:src="@drawable/right" />
        </LinearLayout>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

  2.7 归还图书页面实现 

 我们先来看一下布局代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    tools:context=".Activity.BackBookActivity">

    <View
        android:id="@+id/view6"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:background="#80D3F8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView17"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="归还图书"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@+id/view6"
        app:layout_constraintEnd_toEndOf="@+id/view6"
        app:layout_constraintStart_toStartOf="@+id/view6"
        app:layout_constraintTop_toTopOf="@+id/view6" />

    <LinearLayout
        android:id="@+id/linearLayout4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="center"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view6">

        <EditText
            android:id="@+id/et_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="请输入学号进行查询"
            android:inputType="textPersonName" />

        <Button
            android:id="@+id/btn_inquire"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_marginLeft="15dp"
            android:background="@drawable/btn_lr"
            android:text="查询"
            android:textColor="#fff" />
    </LinearLayout>

    <ListView
        android:id="@+id/lv"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout4" />

    <ImageView
        android:id="@+id/back"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/view6"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/back" />

</androidx.constraintlayout.widget.ConstraintLayout>

        在 setButtonClickListener 方法中,用户为 btnInquire 按钮设置了点击监听器。当点击该按钮时,用户首先获取输入框中的学号值,并判断该学号是否为空。

        如果为空,则显示一个 Toast 提示用户输入借阅者的学号;否则,调用 getBorrowInfoByBorrowerId 方法来根据学号查询借阅信息列表。

        如果查询结果为空,显示一个 Toast 提示用户未找到相关借阅信息,并清空搜索框;如果查询结果不为空,则将查询结果设置到 ListView 控件中,并清空搜索框。

        在 getBorrowInfoByBorrowerId 方法中,用户创建了一个 BookHelper 对象,并调用其 getBorrowInfoByBorrowerId 方法来获取借阅信息列表。该方法接受一个借阅者学号作为参数,并返回一个借阅信息列表。

        在 setListViewAdapter 方法中,用户首先创建了一个 BackBookAdapter 对象,并将借阅信息列表作为参数传递给它。然后,将适配器设置给 ListView 控件,以显示借阅信息列表。

        在 initView 方法中,用户使用 findViewById 方法获取了 EditText、Button、ListView 和 ImageView 控件的实例,并将它们保存在相应的变量中。

package com.example.booklendingsystem.Activity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.booklendingsystem.Adapter.BackBookAdapter;
import com.example.booklendingsystem.Bean.BorrowInfo;
import com.example.booklendingsystem.Helper.BookHelper;
import com.example.booklendingsystem.R;

import java.util.ArrayList;
import java.util.List;

public class BackBookActivity extends AppCompatActivity {

    // 声明变量
    private BackBookAdapter backBookAdapter;
    private EditText etId;
    private Button btnInquire;
    private ListView lv;
    private ImageView back;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_back_book);
        // 初始化界面
        initView();
        // 设置按钮点击监听器
        setButtonClickListener();
        // 返回
        back();
    }

    // 返回
    private void back() {
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }


    private void setButtonClickListener() {
        btnInquire.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取输入框中的id值
                String id = etId.getText().toString().trim();

                // 判断输入框中的id是否为空
                if (id.isEmpty()) {
                    // 若输入框中的id为空,提示Toast
                    Toast.makeText(BackBookActivity.this, "请输入借阅者的学号!", Toast.LENGTH_SHORT).show();
                } else {
                
                    // 判断查询结果是否为空
                    if (borrowInfoList.isEmpty()) {
                        // 若查询结果为空,提示Toast
                        Toast.makeText(BackBookActivity.this, "未找到相关借阅信息", Toast.LENGTH_SHORT).show();
                        // 清空搜索框
                        etId.setText("");
                    } else {
                      // 清空搜索框
                        etId.setText("");
                    }
                }
            }
        });
    }

    
    // 设置ListView控件的适配器
    private void setListViewAdapter(List<BorrowInfo> borrowInfoList) {
              lv.setAdapter(backBookAdapter);
    }

    // 获取控件
    private void initView() {
        etId = findViewById(R.id.et_id);
        btnInquire = findViewById(R.id.btn_inquire);
        lv = findViewById(R.id.lv);
        back = findViewById(R.id.back);
    }
}

        到此为止,我们的项目就已经完成了! 

三、获取源码

关注公众号《编程乐学》

后台回复:24012101

👇👇👇快捷获取方式👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/389573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你知道.NET的字符串在内存中是如何存储的吗?

一、字符串对象的内存布局 从“值类型”和“引用类型”来划分&#xff0c;字符串自然属于引用类型的范畴&#xff0c;所以一个字符串对象自然采用引用类型的内存布局。引用类型实例的内存布局总的来说整个内存布局分三块&#xff1a;ObjHeader TypeHandle Payload。对于一般…

如何在Windows中配置多个显示器?这里提供详细步骤

Windows可以通过多种方式使用多个显示器,扩展或复制主显示器。你甚至可以关闭主显示器。以下是如何使用简单的键盘快捷键更改辅助显示设置。 使用Windows+P投影菜单 要快速更改Windows 10处理多个显示器的方式,请按Windows+P。屏幕右侧会弹出一个名为“投影”的深灰色菜单。…

Codeforces Round 926 F. Sasha and the Wedding Binary Search Tree

F. Sasha and the Wedding Binary Search Tree 题意 给定一颗二叉搜索树&#xff0c;规定树上的所有点的点权都在范围 [ 1 , C ] [1, C] [1,C] 内&#xff0c;树上的某些节点点权已知&#xff0c;某些节点点权未知&#xff0c;求出合法的二叉搜索树的数量 思路 由于是二叉搜…

Web项目利用MybatisPlus进行分页查询

之前在写博客系统前台页面的时候&#xff0c;遇到了利用mp进行分页查询的情况&#xff0c;由于涉及到的知识点相对较为重要&#xff0c;固写一篇博客以此巩固。 一、功能需求 在首页和分类页面都需要查询文章列表。 首页&#xff1a;查询所有的文章分类页面&#xff1a;查询…

隐函数的求导【高数笔记】

1. 什么是隐函数&#xff1f; 2. 隐函数的做题步骤&#xff1f; 3. 隐函数中的复合函数求解法&#xff0c;与求导中复合函数求解法有什么不同&#xff1f; 4. 隐函数求导的过程中需要注意什么&#xff1f;

透光力之珠——光耦固态继电器的独特特点解析

光耦固态继电器作为现代电子控制领域中的重要组件&#xff0c;以其独特的特点在工业、通信、医疗等多个领域得到广泛应用。本文将深入剖析光耦固态继电器的特点&#xff0c;揭示其在电子控制中的卓越性能。 光耦固态继电器的光电隔离技术 光耦固态继电器以其光电隔离技术而脱颖…

深入了解社区店:定义、模式与优势

在当今的商业环境中&#xff0c;社区店正逐渐成为创业者们关注的热点。本文将以我的鲜奶吧店铺为例&#xff0c;深入探讨社区店的定义、模式和优势&#xff0c;为您提供最有价值的干货信息。 1、社区店的定义 社区店是指位于社区内或周边&#xff0c;以服务社区居民为主要目标…

Diffusion Transformer U-Net for MedicalImage Segmentation

用于医学图像分割的扩散变压器U-Net 摘要&#xff1a; 扩散模型在各种发电任务中显示出其强大的功能。在将扩散模型应用于医学图像分割时&#xff0c;存在一些需要克服的障碍:扩散过程调节所需的语义特征与噪声嵌入没有很好地对齐;这些扩散模型中使用的U-Net骨干网对上下文信…

2.15学习总结

2.15 1.聪明的质监员&#xff08;二分前缀和&#xff09; 2.村村通&#xff08;并查集&#xff09; 3.玉蟾宫(悬线法DP) 4.随机排列&#xff08;树状数组逆序对问题&#xff09; 5.增进感情&#xff08;DFS&#xff09; 6.医院设置&#xff08;floyd&#xff09; 聪明的质监员…

P1010 [NOIP1998 普及组] 幂次方题解

题目 任何一个正整数都可以用2的幂次方表示。例如137。 同时约定次方用括号来表示&#xff0c;即ab可表示为a(b)。 由此可知&#xff0c;137可表示为2(7)2(3)2(0)&#xff0c;进一步&#xff1a;72 ( 用2表示)&#xff0c;并且32。 所以137可表示为2(2(2)22(0))2(22(0))2(0…

ESP32学习(4)——电脑远程控制LED灯

1.思路梳理 首先需要让ESP32连接上WIFI 然后创建udp socket 接着接收udp数据 最后解析数据&#xff0c;控制LED 2.代码实现 import network from socket import * from machine import Pin p2Pin(2,Pin.OUT)def do_connect(): #连接wifi wlan network.WLAN(network.STA_IF)…

optee imx8mm

总仓库 git clone https://github.com/Xsyin/imx8mqevk.git -b container_region 替换imx8mqevk中的optee-client git clone https://github.com/nxp-imx/imx-optee-client.git -b lf-5.15.32_2.0.0 用 5.15.32 kernel 会有如下报错&#xff0c;需要将optee os升级到分支 lf-…

MySQL容器的数据挂载

挂载本地目录或文件 可以发现&#xff0c;数据卷的目录结构较深&#xff0c;如果我们去操作数据卷目录会不太方便。在很多情况下&#xff0c;我们会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似&#xff1a; # 挂载本地目录 -v 本地目录:容器内目录 # 挂载本地…

第9讲重写登录成功和登录失败处理器

重写登录成功和登录失败处理器 common下新建security包&#xff0c;再新建两个类&#xff0c;LoginSuccessHandler和LoginFailureHandler Component public class LoginSuccessHandler implements AuthenticationSuccessHandler {Overridepublic void onAuthenticationSuccess…

请标记你的龙年心愿关键词

昨天外孙陪我游了崇州市白头镇、道民镇&#xff08;竹艺村&#xff09;&#xff0c;见我心情愉悦&#xff0c;今天再陪我去饱览其他风景名胜&#xff0c;所以笔者——本“人民体验官”特别推广人民日报官方微博文化产品《2024年第一批春花开了》《#大年初七#&#xff0c;标记你…

三种输入输出函数

目录 printf函数 scanf函数 getchar函数 putchar函数 gets函数 puts函数 printf函数 当你需要将数据或文本输出到屏幕或其他输出设备时&#xff0c;C语言提供了一个非常有用的函数&#xff0c;即 printf() 函数。它是标准库中定义的函数&#xff0c;用于格式化输出。 pr…

如何监控另一台电脑屏幕画面?如何远程监控电脑屏幕?

在数字化时代&#xff0c;随着远程工作和协作的普及&#xff0c;电脑屏幕监控的需求也日益增长。无论是出于安全考虑、提高员工工作效率&#xff0c;还是确保企业机密的保密性&#xff0c;电脑屏幕监控都成为了企业不可或缺的管理工具。那么&#xff0c;如何监控另一台电脑屏幕…

怎么恢复电脑重装前的数据?介绍几种有效的方法

在日常生活和工作中&#xff0c;电脑已成为我们不可或缺的工具。然而&#xff0c;有时候我们会遇到一些突发情况&#xff0c;比如电脑系统崩溃需要重新安装系统。在这个过程中&#xff0c;我们可能会失去一些重要的数据&#xff0c;比如照片、文档、视频等。这些数据可能包含着…

第三十一回 武行者醉打孔亮 锦毛虎义释宋江-解压文件但不重复解压

武松发现蜈蚣岭寺庙里一个人搂着女的看月亮&#xff0c;就把那个人和他的道童都杀了。原来那个人叫飞天蜈蚣王道人&#xff0c;那女的是被掳来的&#xff0c;她将一包金银给武松&#xff0c;武松没有要。 就像武松在处理问题时展现出的智慧和决断力&#xff0c;现代IT技术同样…

使用骨传导耳机真的不损伤听力吗?哪些人群适合购买骨传导耳机?

如果是正确的使用骨传导耳机&#xff0c;是不会损伤听力的&#xff0c;因为骨传导耳机采用开放式佩戴&#xff0c;而且传声方式不经过耳道和耳膜&#xff0c;是通过人体骨骼来传递声音&#xff0c;不会损伤耳膜&#xff0c;所以不会损伤听力。 由于骨传导耳机的特殊性&#xff…