Python实现图书借阅管理系统

Python实现图书借阅管理系统

1. 系统概述

本系统是基于Python语言实现的,用于管理图书借阅流程的软件。系统包括以下三个模块:

  1. 图书管理模块:用于管理图书信息,包括书名、作者、出版社等
  2. 读者管理模块:用于管理读者信息,包括姓名、性别、年龄等
  3. 借阅管理模块:用于管理借阅流程,包括借出图书、归还图书等

2. 实现过程

2.1 数据库设计

在开发系统前,我们需要设计数据库存储图书和读者信息,使用SQLite数据库进行存储。下面是数据库的结构设计:

-- 图书表
CREATE TABLE book (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    author TEXT NOT NULL,
    press TEXT NOT NULL,
    total INTEGER NOT NULL,
    stock INTEGER NOT NULL
);

-- 读者表
CREATE TABLE reader (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    gender TEXT NOT NULL,
    age INTEGER NOT NULL,
    phone TEXT NOT NULL
);

-- 借阅表
CREATE TABLE borrow (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    book_id INTEGER NOT NULL,
    reader_id INTEGER NOT NULL,
    borrow_date TEXT NOT NULL,
    return_date TEXT NOT NULL,
    FOREIGN KEY(book_id) REFERENCES book(id),
    FOREIGN KEY(reader_id) REFERENCES reader(id)
);

2.2 实现模块

2.2.1 图书管理模块

图书管理模块包括添加图书、删除图书、修改图书和查询图书信息等功能。

添加图书的实现:

def add_book(title, author, press, total):
    stock = total
    conn = sqlite3.connect('library.db')
    cur = conn.cursor()
    cur.execute('INSERT INTO book(title, author, press, total, stock) \
                 VALUES (?, ?, ?, ?, ?)', (title, author, press, total, stock))
    conn.commit()
    conn.close()
    print('Add book successfully!')

删除图书的实现:

def delete_book(book_id):
    conn = sqlite3.connect('library.db')
    cur = conn.cursor()
    cur.execute('DELETE FROM book WHERE id=?', (book_id,))
    conn.commit()
    conn.close()
    print('Delete book successfully!')

2.2.2 读者管理模块

读者管理模块包括添加读者、删除读者、修改读者和查询读者信息等功能。

添加读者的实现:

def add_reader(name, gender, age, phone):
    conn = sqlite3.connect('library.db')
    cur = conn.cursor()
    cur.execute('INSERT INTO reader(name, gender, age, phone) VALUES (?, ?, ?, ?)', (name, gender, age, phone))
    conn.commit()
    conn.close()
    print('Add reader successfully!')

修改读者的实现:

def update_reader(reader_id, name, gender, age, phone):
    conn = sqlite3.connect('library.db')
    cur = conn.cursor()
    cur.execute('UPDATE reader SET name=?, gender=?, age=?, phone=? WHERE id=?', (name, gender, age, phone, reader_id))
    conn.commit()
    conn.close()
    print('Update reader successfully!')

2.2.3 借阅管理模块

借阅管理模块包括借出图书、归还图书和查询借阅记录等功能。

借出图书的实现:

def borrow_book(book_id, reader_id, borrow_date):
    conn = sqlite3.connect('library.db')
    cur = conn.cursor()
    cur.execute('SELECT stock FROM book WHERE id=?', (book_id,))
    stock = cur.fetchone()[0]
    if stock == 0:
        print('The book is out of stock!')
    else:
        cur.execute('UPDATE book SET stock=? WHERE id=?', (stock - 1, book_id))
        cur.execute('INSERT INTO borrow(book_id, reader_id, borrow_date, return_date) VALUES (?, ?, ?, ?)',
                    (book_id, reader_id, borrow_date, ''))
        conn.commit()
        print('Borrow book successfully!')
    conn.close()

归还图书的实现:

def return_book(borrow_id, return_date):
    conn = sqlite3.connect('library.db')
    cur = conn.cursor()
    cur.execute('SELECT book_id FROM borrow WHERE id=?', (borrow_id,))
    book_id = cur.fetchone()[0]
    cur.execute('SELECT stock FROM book WHERE id=?', (book_id,))
    stock = cur.fetchone()[0]
    cur.execute('UPDATE book SET stock=? WHERE id=?', (stock + 1, book_id))
    cur.execute('UPDATE borrow SET return_date=? WHERE id=?', (return_date, borrow_id))
    conn.commit()
    conn.close()
    print('Return book successfully!')

2.3 示例说明

2.3.1 添加图书和查询图书

# 添加图书
add_book('Python从入门到精通', '张三', '清华大学出版社', 100)

# 查询图书
conn = sqlite3.connect('library.db')
cur = conn.cursor()
cur.execute('SELECT * FROM book')
row = cur.fetchall()
for book in row:
    print(f'{book[1]}, {book[2]}, {book[3]}, 库存:{book[5]}本')
conn.close()

2.3.2 借出图书和归还图书

# 借出图书
borrow_book(1, 1, '2021-03-01')

# 查询借阅记录
conn = sqlite3.connect('library.db')
cur = conn.cursor()
cur.execute('SELECT borrow.id, book.title, reader.name, borrow.borrow_date, borrow.return_date \
             FROM borrow INNER JOIN book ON borrow.book_id=book.id \
             INNER JOIN reader ON borrow.reader_id=reader.id')
row = cur.fetchall()
for borrow in row:
    print(f'{borrow[0]}, {borrow[1]}, {borrow[2]}, 借出日期:{borrow[3]}')
conn.close()

# 归还图书
return_book(1, '2021-03-05')

# 查询借阅记录
conn = sqlite3.connect('library.db')
cur = conn.cursor()
cur.execute('SELECT borrow.id, book.title, reader.name, borrow.borrow_date, borrow.return_date \
             FROM borrow INNER JOIN book ON borrow.book_id=book.id \
             INNER JOIN reader ON borrow.reader_id=reader.id')
row = cur.fetchall()
for borrow in row:
    print(f'{borrow[0]}, {borrow[1]}, {borrow[2]}, 借出日期:{borrow[3]}, 归还日期:{borrow[4]}')
conn.close()

3. 总结

本系统实现了基本的图书借阅管理功能,涉及到的知识点包括SQLite数据库操作和Python函数实现。在实现过程中,我们需要仔细设计数据库结构,同时编写代码时也需要注意异常处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现图书借阅管理系统 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • Python yield 使用浅析

    Python yield 使用浅析 yield 是 Python 中一个特殊的关键字,表示生成器的返回值,使用它可以让一个普通函数变成一个生成器函数,即每次遇到 yield 语句时候,函数会将结果返回,并在此处暂停执行,直到被唤醒后再恢复执行。 使用场景 实现迭代器 逐步批量处理大量数据 内存使用控制 代码整洁度 使用方法 简单的例子 def simple_…

    python 2023年6月3日
    00
  • 用Python读取几十万行文本数据

    为了用Python读取大量文本数据,通常需要考虑以下几个方面: 选择适合的数据结构,如何优化内存使用; 操作文本文件的读取与写入; 对文本数据进行处理、分词、统计等操作。 下面是一个完整的攻略: 选择适合的数据结构 当读取大量文本数据时,需要使用适合的数据结构来提高程序的运行效率,比如使用生成器、迭代器等方式。下面为读取大文本数据的三种方式: 内存映射文件 …

    python 2023年6月6日
    00
  •  Python列表的切片取值详解

    Python列表的切片取值详解 在Python中,列表是一种常用的数据结构,它可以存储任意类型的数据,并且支持动态扩展和缩。列表的切片操作是Python中常用的操作之一,它可以用来获取中的一部分元素。本文将详细讲Python列表的切片取值操作。 切片取值操作 Python中的切片操作可以来获取列表中的一部分元素,语法如下: lst[start:end:ste…

    python 2023年5月13日
    00
  • 详解Python PIL ImageChops.subtract()方法

    Python PIL库提供了许多图像处理方法, 其中ImageChops.subtract()方法是用于计算两个图像像素之间差异的方法,该方法会返回一个新图像,该图像表示第二个图像从第一个图像中减去的结果。 方法语法 ImageChops.subtract(image1, image2, scale=1.0, offset=0) 方法参数 image1:第一…

    python-answer 2023年3月25日
    00
  • 一文搞懂Python中pandas透视表pivot_table功能

    一文搞懂Python中pandas透视表pivot_table功能 在数据分析中,透视表是一种非常实用的数据统计工具。pandas库中的pivot_table函数就是用来实现透视表功能的。本文将详细讲解pivot_table的用法和示例。 什么是透视表 透视表是一种交互式的表格,可以用于快速汇总、筛选和分析大量数据。它通常用于商业和科学研究领域,以便对数据进…

    python 2023年5月13日
    00
  • 使用Python代码实现Linux中的ls遍历目录命令的实例代码

    下面是使用Python代码实现Linux中的ls遍历目录命令的完整攻略。 1. 获取命令行参数 ls命令可以通过命令行参数指定要遍历的目录,因此我们需要在Python代码中获取命令行参数。可以使用sys模块中的argv列表实现,代码如下: import sys if len(sys.argv) == 1: dir_path = ‘.’ else: dir_p…

    python 2023年6月2日
    00
  • Python文件名匹配与文件复制的实现

    Python文件名匹配与文件复制的实现可以分为以下几步: 一、使用glob模块进行文件名匹配 python中可以使用glob模块进行文件名的匹配和查找,该模块支持类似于正则表达式的通配符匹配,例如 * 可以匹配任意字符(包括0个字符),? 可以匹配任意单个字符,[] 可以匹配括号内指定的任意字符等等。 例如,使用 glob 模块查找当前目录下所有以 .txt…

    python 2023年6月3日
    00
  • 在 Python 3.6 中从 CSV 绘制纬度经度

    【问题标题】:Plot latitude longitude from CSV in Python 3.6在 Python 3.6 中从 CSV 绘制纬度经度 【发布时间】:2023-04-03 08:31:01 【问题描述】: 我正在尝试从地图上的CSV 文件中绘制大量经纬度值,格式如下(第一列和第二列): 我正在使用 python 3.6(显然某些库,如…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部