网络资源模板--Android Studio 图书借阅App

news2024/9/21 10:29:44

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--图书借阅App

二、项目测试环境

三、项目详情

首页

这段代码是一个 Android 应用的 `MainActivity` 类,功能简要总结如下:

1. **界面设置**:
   - 在 `onCreate` 方法中,设置活动的布局为 `activity_main.xml`。
   - 通过 `bindView` 方法初始化两个按钮:`btnUserEnter` 和 `btnAdminEnter`。

2. **按钮点击事件**:
   - 为 `btnUserEnter` 和 `btnAdminEnter` 设置点击监听器,点击任一按钮都会启动 `LoginActivity`。

3. **权限请求**:
   - 在 `requestPermissions` 方法中,使用 `XXPermissions` 库请求读写外部存储权限。
   - 如果权限被授予,调用 `DataUtils.init()` 进行初始化。
   - 如果权限被拒绝,弹出一个 Toast 提示用户。

这个活动的主要功能是提供用户和管理员进入登录界面的按钮,并在应用启动时请求所需的存储权限。

 private void initView() {
        btnUserEnter.setOnClickListener(v->{
            startActivity(new Intent(MainActivity.this, LoginActivity.class));

        });
        btnAdminEnter.setOnClickListener(v -> {
            startActivity(new Intent(MainActivity.this, LoginActivity.class));
        });
    }

登录注册页面

这段代码包含两个活动:`LoginActivity` 和 `RegisterActivity`,它们一起实现了用户登录和注册的功能。以下是它们的功能简要总结:

### `LoginActivity` 功能:
1. **用户界面初始化**:
   - 设置布局并初始化界面元素(用户名、密码输入框、登录按钮、记住我复选框和注册链接)。

2. **记住用户信息**:
   - 从 `CurrentUserUtils` 获取当前用户信息,并填充用户名和密码(如果选中“记住我”复选框)。

3. **登录功能**:
   - 用户点击登录按钮时,首先检查用户名和密码是否为“admin”。
   - 如果是,则跳转到 `BookManageActivity`。
   - 如果不是,则调用 `UserDB.login()` 方法进行登录,处理返回的结果。
   - 登录成功后,将用户信息存储并跳转到 `NavActivity`;否则,弹出错误消息。

4. **注册链接**:
   - 点击注册链接时,启动 `RegisterActivity` 并等待结果。

5. **处理注册结果**:
   - 如果注册成功,将注册的用户信息填充到输入框中。

### `RegisterActivity` 功能:
1. **用户界面初始化**:
   - 设置布局并初始化界面元素(用户名、密码输入框、再次输入密码按钮和返回按钮)。

2. **返回按钮**:
   - 点击返回按钮关闭当前活动。

3. **注册功能**:
   - 用户点击注册按钮时,获取输入的用户名和密码,并创建 `User` 对象。
   - 调用 `UserDB.register()` 方法进行注册,处理返回的结果。
   - 如果注册成功,将用户信息返回到 `LoginActivity` 并关闭当前活动;否则,弹出消息提示注册结果。

### 总结:
整体上,这段代码实现了用户的登录和注册功能,包括记住用户信息、处理注册和登录逻辑,以及相应的界面交互。用户可以在登录页面输入信息,若未注册可通过链接跳转到注册页面。注册完成后,信息会返回至登录页面以便快速登录。

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_REGISTER && resultCode == RESULT_OK) {
            if (data != null) {
                User user = (User) data.getSerializableExtra("user");
                etUsername.setText(user.getUsername());
                etPassword.setText(user.getPassword());
            }
        }
    }

 this.btn_register.setOnClickListener(v -> {
            String obj = RegisterActivity.this.etUsername.getText().toString();
            String obj2 = RegisterActivity.this.etPassword.getText().toString();
            String obj3 = RegisterActivity.this.etPasswordAgain.getText().toString();
            User user = new User();
            user.setUsername(obj);
            user.setPassword(obj2);
            BusinessResult<User> register = UserDB.register(user, obj3);
            Toast.makeText(RegisterActivity.this, register.getMessage(), Toast.LENGTH_SHORT).show();
            if (register.isSuccess()) {
                Intent intent = new Intent();
                intent.putExtra("user", user);
                RegisterActivity.this.setResult(-1, intent);
                RegisterActivity.this.finish();
            }
        });

图书管理页面

这段代码定义了 `BookManageActivity` 类,主要功能如下:

### 功能总结:
1. **界面设置**:
   - 在 `onCreate` 方法中,初始化活动的布局和界面元素,包括 RecyclerView(书籍管理列表)、添加书籍的文本视图和返回按钮。

2. **书籍管理**:
   - 使用 `BookManageAdapter` 来管理 RecyclerView 中的书籍数据。
   - 设置点击事件,允许用户查看书籍详情或编辑书籍信息。

3. **添加书籍**:
   - 点击添加书籍文本时,启动 `BookEditActivity` 以添加新书籍。

4. **返回功能**:
   - 点击返回图标时,结束当前活动并返回到上一个界面。

5. **刷新书籍列表**:
   - 在 `onResume` 方法中,调用 `BookDB.getAllBooks()` 更新书籍列表,确保显示最新数据。

总体而言,`BookManageActivity` 提供了书籍管理的基本界面和交互功能,用户可以查看、编辑书籍或添加新书籍。

  private void bindView() {
        this.rvBookManage = (RecyclerView) findViewById(R.id.rv_book_manage);
        this.tvAdd = (TextView) findViewById(R.id.tv_add);
        this.ivBack = (ImageView) findViewById(R.id.iv_back);
    }

    private void initView() {
        this.ivBack.setOnClickListener(view -> finish());
        this.tvAdd.setOnClickListener(view ->
                startActivity(new Intent(BookManageActivity.this, BookEditActivity.class))
        );

        BookManageAdapter bookManageAdapter = new BookManageAdapter();
        this.adapter = bookManageAdapter;

        bookManageAdapter.setOnItemClickListener(new BookManageAdapter.OnItemClickListener() {
            @Override
            public void onItemDetailClick(int position, Book book) {
                Intent intent = new Intent(BookManageActivity.this, BookDetailActivity.class);
                intent.putExtra("book", book);
                startActivity(intent);
            }

            @Override
            public void onItemEditClick(int position, Book book) {
                Intent intent = new Intent(BookManageActivity.this, BookEditActivity.class);
                intent.putExtra("book", book);
                startActivity(intent);
            }
        });

        this.rvBookManage.setAdapter(this.adapter);
        this.rvBookManage.setLayoutManager(new LinearLayoutManager(this));
    }

添加修改图书页面

这段代码实现了 `BookEditActivity` 类,主要用于编辑或添加书籍信息,功能如下:

### 功能总结:
1. **界面初始化**:
   - 在 `onCreate` 方法中,设置布局并初始化各个视图元素,包括返回按钮、书籍信息输入框、图片选择和提交按钮。

2. **数据处理**:
   - 从意图中获取书籍对象。如果存在,则填充书籍信息并显示编辑选项;否则,准备添加新书籍。

3. **用户交互**:
   - 用户可以通过点击返回按钮关闭活动。
   - 点击书籍图片或选择文本框可打开相册选择书籍封面。
   - 提交按钮根据是否编辑更新或添加书籍,使用 `BookDB` 进行数据库操作,并通过 Toast 显示操作结果。

4. **删除功能**:
   - 提供删除书籍的选项,调用数据库方法删除书籍并反馈结果。

5. **处理相册选择结果**:
   - 在 `onActivityResult` 中处理用户选择的图片路径,并更新书籍封面。

整体而言,`BookEditActivity` 提供了完整的书籍信息编辑和添加功能,允许用户更新现有书籍信息或添加新书籍,同时提供了删除书籍的选项。

 private void initView() {
        tvTitle.setText(isEdit ? "编辑图书" : "添加图书");
        ivBack.setOnClickListener(view -> finish());
        ivBookImg.setOnClickListener(view -> AlbumUtils.openAlbum(BookEditActivity.this));
        tvSelect.setOnClickListener(view -> AlbumUtils.openAlbum(BookEditActivity.this));
        btnSubmit.setOnClickListener(view -> {
            book.setName(etBookName.getText().toString());
            book.setAuthor(etBookAuthor.getText().toString());
            book.setDesc(etBookDesc.getText().toString());
            book.setTotal(Integer.parseInt(etBookTotal.getText().toString()));
            BusinessResult<Book> businessResult = isEdit ? BookDB.updateBook(book) : BookDB.addBook(book);
            Toast.makeText(BookEditActivity.this, businessResult.getMessage(), Toast.LENGTH_SHORT).show();
            if (businessResult.isSuccess()) {
                finish();
            }
        });
        tvDelete.setOnClickListener(view -> {
            BusinessResult<Void> deleteBook = BookDB.deleteBook(book.getId().intValue());
            Toast.makeText(BookEditActivity.this, deleteBook.getMessage(), Toast.LENGTH_SHORT).show();
            if (deleteBook.isSuccess()) {
                finish();
            }
        });
    }

图书详情页

这段代码实现了 `BookDetailActivity` 类,用于显示书籍详细信息,功能总结如下:

### 功能总结:
1. **界面设置**:
   - 在 `onCreate` 方法中,设置活动的布局并从意图中获取书籍对象。

2. **信息展示**:
   - 使用 Glide 加载书籍封面图片,并显示书名、作者、描述以及剩余数量和总数。

3. **返回功能**:
   - 设置返回按钮的点击事件,允许用户返回到前一个界面。

整体而言,`BookDetailActivity` 提供了简单明了的界面,展示了书籍的详细信息,确保用户能方便地查看书籍内容。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="54.0dip"
        android:background="@color/main">

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@id/iv_back"
            android:layout_width="54.0dip"
            android:layout_height="54.0dip"
            android:gravity="center"
            android:padding="12.0dip"
            android:src="@drawable/ic_back"
            android:text="返回"
            android:textColor="@color/white" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="详情"
            android:textColor="@color/white"
            android:textSize="18.0sp"
            android:textStyle="bold" />
    </FrameLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16.0dip"
            android:orientation="vertical">

            <com.google.android.material.imageview.ShapeableImageView
                android:id="@id/iv_book_img"
                android:layout_width="120.0dip"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/book1"
                app:shapeAppearanceOverlay="@style/RoundedCorner" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16.0dip"
                android:ellipsize="end"
                android:gravity="start"
                android:maxLines="1"
                android:text="思辨力35讲:像辩手一样思考"
                android:textColor="@color/black"
                android:textSize="15.0sp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toStartOf="@id/tv_book_detail"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_num"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="剩余:6       总数:10"
                android:textColor="@color/main"
                android:textSize="10.0sp" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_author"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16.0dip"
                android:text="庞颖"
                android:textColor="#ffb0b0b0"
                android:textSize="12.0sp" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_desc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="bottom"
                android:text="本书是一套帮助你识破逻辑陷阱,迅速提升分析、表达问题的实用指南。"
                android:textColor="#ffb0b0b0"
                android:textSize="12.0sp" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</LinearLayout>

图书列表

借阅信息

四、完整的项目源码 

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hutool:Java开发者的瑞士军刀

有想念&#xff0c;才是团圆&#xff1b;在一起&#xff0c;便是中秋。 在Java的世界里&#xff0c;有这样一个工具库&#xff0c;它小巧而强大&#xff0c;功能丰富且易于使用&#xff0c;它就是Hutool。Hutool是一个Java工具包&#xff0c;旨在减少Java开发人员在开发过程中…

Oracle数据库逻辑与物理结构操作

一、实验步骤 1、查询所有DBA和USER开头的静态数据字典 2、查询所有V$动态性能视图 3、查询当前数据库中的表空间信息 ①查询和TABLESPACE相关的数据字典 ②通过动态性能视图查询表空间信息 ③通过数据字典查询表空间信息 4、操作数据文件 &#xff08;1&#xff09;向 ORC…

JavaWeb JavaScript 11.XML —— 配置文件

生活想埋没我&#xff0c;没想到我是颗种子 —— 24.9.19 一、XML 1.什么是XML XML是EXtensible Markup Languge的缩写&#xff0c;翻译过来就是可扩展标记语言。所以很明显&#xff0c;XML和HTML一样都是标记语言&#xff0c;也就是说它们的基本语法都是标签 可扩展 三个字…

网络:UDP协议

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言UDP协议报头和有效载荷分离的问题有效载荷向上交付的问题&#xff0c;也就是交给哪个进程&#xff1f;怎么确定把报文收全了&#xff1f;UDP报头是如何封装的呢&…

JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码

通过Tomcat进行发布项目的目的是为了提供项目的访问能力&#xff1a;Tomcat作为Web服务器&#xff0c;能够处理HTTP请求和响应&#xff0c;将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式&#xff1a; 第一种&#xff1a;直接在Tomcat文件夹里的webapp…

数学建模 第一讲 - 概论

一、什么是数学模型 一个栗子 例 1.1 一只装满水的圆柱型桶&#xff0c;底半径为 1米&#xff0c;高为 2米&#xff0c;底部有一直径为 0.1 米的洞。问桶流空要多少时间? 数学模型是对于一个特定的对象为了一个特定目标&#xff0c;根据事物的内在规律&#xff0c;作出一些必…

防止用户过于轻松采集网页内容的方法

面对AI&#xff0c;所有禁止采集网页内容的功能都是徒劳&#xff0c;最不济截图后采集文字总简单了吧&#xff1f;能做的就是增加一点点人工采集的难度。 以下总结一下 一、注册用户 必须注册才能浏览全部内容&#xff0c;那么这样就可以针对用户控制其浏览次数&#xff0c;浏…

ActiveMQ、RabbitMQ 和 Kafka 在 Spring Boot 中的实战

在现代的微服务架构和分布式系统中&#xff0c;消息队列 是一种常见的异步通信工具。消息队列允许应用程序之间通过 生产者-消费者模型 进行松耦合、异步交互。在 Spring Boot 中&#xff0c;我们可以通过简单的配置来集成不同的消息队列系统&#xff0c;包括 ActiveMQ、Rabbit…

多层感知机paddle

多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析&#xff0c;torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机&#xff08;MLP&#xff0c;也称为神经网络&#xff0…

QEMU:模拟 ARM 大端字节序运行环境

文章目录 1. 前言2. ARM 大小端模拟测试2.1 裸机模拟测试2.1.1 大端模拟测试2.1.2 小端模拟测试 2.2 用户空间模拟测试2.2.1 大端模拟测试2.2.2 小端模拟测试 2.3 结论 3. 参考链接 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&…

leetcode刷题3

文章目录 前言回文数1️⃣ 转成字符串2️⃣ 求出倒序数再比对 正则表达式匹配[hard]1️⃣ 动态规划 盛最多水的容器1️⃣ 遍历分类2️⃣ 双指针贪心 最长公共前缀1️⃣ 遍历&#xff08;zip解包&#xff09; 三数之和1️⃣ 双指针递归 最接近的三数之和1️⃣ 迭代一次双指针 电…

携手阿里云CEN:共创SD-WAN融合广域网

在9月19日举行的阿里云云栖大会上&#xff0c;犀思云作为SD-WAN领域的杰出代表及阿里云的SD-WAN重要合作伙伴&#xff0c;携手阿里云共同推出了创新的企业上云方案——Fusion WAN智连阿里云解决方案。这一创新方案不仅彰显了犀思云在SD-WAN技术领域的深厚积累&#xff0c;更体现…

前端web端项目运行的时候没有ip访问地址

我们发现 没有netWork 的地址 导致 团队内其他同学无法打开我们的地址 进行访问 在page.json 中的运行 指令中 添加 --host 记得加上空格 这样我们就可以看到这个地址了 团队其他同学 就可以访问我们这个地址了

Resnet50网络——口腔癌病变识别

一 数据准备 1.导入数据 import matplotlib.pyplot as plt import tensorflow as tf import warnings as w w.filterwarnings(ignore) # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负…

2024华为杯研究生数学建模竞赛(研赛)选题建议+初步分析

难度&#xff1a;DE<C<F&#xff0c;开放度&#xff1a;CDE>F。 华为专项的题目&#xff08;A、B题&#xff09;暂不进行选题分析&#xff0c;不太建议大多数同学选择&#xff0c;对自己专业技能有很大自信的可以选择华为专项的题目。后续会直接更新A、B题思路&#…

计算机网络传输层---课后综合题

线路&#xff1a;TCP报文下放到物理层传输。 TCP报文段中&#xff0c;“序号”长度为32bit&#xff0c;为了让序列号不会循环&#xff0c;则最多能传输2^32B的数据&#xff0c;则最多能传输&#xff1a;2^32/1500B个报文 结果&#xff1a; 吞吐率一个周期内传输的数据/周期时间…

2024/9/19、20 数学20题

极大线性无关组&#xff1a;

基于C#+SQL Server2005(WinForm)图书管理系统

图书管理系统 一、 首先把数据库脚本贴出来(数据库名为library) USE [library] GO /****** Object: Table [dbo].[books] Script Date: 06/12/2016 11:27:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[books]([bNum] [nvarchar](10…

Arthas sysprop(查看和修改JVM的系统属性)

文章目录 二、命令列表2.1 jvm相关命令2.1.4 sysprop&#xff08;查看和修改JVM的系统属性&#xff09;举例1&#xff1a;sysprop 查看所有系统属性举例2&#xff1a;sysprop java.version 查看单个属性&#xff0c;支持通过tab补全 二、命令列表 2.1 jvm相关命令 2.1.4 sysp…

STL-常用算法 遍历/查找/排序/拷贝和替换/算数生成/集合算法

STL常用算法 常用的遍历算法 for_each #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include<vector> #include<algorithm>void myPrint(int v) {cout << v << " "; }class MyPrint { public:void op…