当前位置:首页 > PHP

php借书功能实现

2026-02-16 21:22:53PHP

数据库设计

创建借书功能需要设计数据库表结构,以下为关键表示例:

books表(书籍信息)

CREATE TABLE books (
    book_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    author VARCHAR(50) NOT NULL,
    isbn VARCHAR(20) UNIQUE,
    total_copies INT DEFAULT 1,
    available_copies INT DEFAULT 1,
    status ENUM('available', 'unavailable') DEFAULT 'available'
);

users表(用户信息)

CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(50) UNIQUE,
    max_borrow_limit INT DEFAULT 3
);

borrow_records表(借阅记录)

CREATE TABLE borrow_records (
    record_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    book_id INT,
    borrow_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    return_date DATETIME,
    due_date DATETIME,
    status ENUM('borrowed', 'returned') DEFAULT 'borrowed',
    FOREIGN KEY (user_id) REFERENCES users(user_id),
    FOREIGN KEY (book_id) REFERENCES books(book_id)
);

核心功能实现

1. 借书逻辑处理
通过PHP脚本检查用户可借阅数量及书籍库存,更新借阅记录:

<?php
function borrowBook($userId, $bookId) {
    $pdo = new PDO("mysql:host=localhost;dbname=library", "username", "password");

    // 检查用户是否达到借阅上限
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM borrow_records WHERE user_id = ? AND status = 'borrowed'");
    $stmt->execute([$userId]);
    $borrowedCount = $stmt->fetchColumn();

    $stmt = $pdo->prepare("SELECT max_borrow_limit FROM users WHERE user_id = ?");
    $stmt->execute([$userId]);
    $maxLimit = $stmt->fetchColumn();

    if ($borrowedCount >= $maxLimit) {
        return "借阅数量已达上限";
    }

    // 检查书籍是否可借
    $stmt = $pdo->prepare("SELECT available_copies FROM books WHERE book_id = ?");
    $stmt->execute([$bookId]);
    $available = $stmt->fetchColumn();

    if ($available <= 0) {
        return "书籍库存不足";
    }

    // 更新书籍库存
    $pdo->beginTransaction();
    try {
        $stmt = $pdo->prepare("UPDATE books SET available_copies = available_copies - 1 WHERE book_id = ?");
        $stmt->execute([$bookId]);

        // 添加借阅记录
        $dueDate = date('Y-m-d H:i:s', strtotime('+30 days'));
        $stmt = $pdo->prepare("INSERT INTO borrow_records (user_id, book_id, due_date) VALUES (?, ?, ?)");
        $stmt->execute([$userId, $bookId, $dueDate]);

        $pdo->commit();
        return "借阅成功";
    } catch (Exception $e) {
        $pdo->rollBack();
        return "系统错误:" . $e->getMessage();
    }
}
?>

2. 还书逻辑处理
更新书籍库存与借阅记录状态:

<?php
function returnBook($recordId) {
    $pdo = new PDO("mysql:host=localhost;dbname=library", "username", "password");

    $pdo->beginTransaction();
    try {
        // 获取借阅记录中的书籍ID
        $stmt = $pdo->prepare("SELECT book_id FROM borrow_records WHERE record_id = ?");
        $stmt->execute([$recordId]);
        $bookId = $stmt->fetchColumn();

        // 更新书籍库存
        $stmt = $pdo->prepare("UPDATE books SET available_copies = available_copies + 1 WHERE book_id = ?");
        $stmt->execute([$bookId]);

        // 更新借阅记录状态
        $stmt = $pdo->prepare("UPDATE borrow_records SET status = 'returned', return_date = NOW() WHERE record_id = ?");
        $stmt->execute([$recordId]);

        $pdo->commit();
        return "还书成功";
    } catch (Exception $e) {
        $pdo->rollBack();
        return "系统错误:" . $e->getMessage();
    }
}
?>

前端交互示例

HTML表单(借书操作)

<form action="borrow.php" method="post">
    <label>用户ID: <input type="number" name="user_id" required></label>
    <label>书籍ID: <input type="number" name="book_id" required></label>
    <button type="submit">提交借阅</button>
</form>

PHP处理脚本(borrow.php)

php借书功能实现

<?php
include 'functions.php'; // 包含上述borrowBook函数
$userId = $_POST['user_id'];
$bookId = $_POST['book_id'];
echo borrowBook($userId, $bookId);
?>

扩展功能建议

  • 逾期检查:通过定时任务检查due_date,自动发送提醒邮件。
  • 预约功能:当书籍不可用时,允许用户预约并通知到货。
  • 数据统计:分析用户借阅偏好与热门书籍排行。

通过以上步骤可实现完整的借书系统,需根据实际需求调整事务处理与异常逻辑。

标签: 借书功能
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…

vue实现复选功能

vue实现复选功能

Vue 实现复选功能 基础实现 使用 v-model 绑定到数组实现多选功能。当复选框被选中时,其 value 会被添加到数组中;取消选中时,会从数组中移除。 <template>…