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明明pip安装成功却找不到包的问题

    通过 pip 安装 Python 包是非常常见的一种方式,但是有时候我们可能会碰到这样的问题:明明已经使用 pip 安装成功了某个包,但是在代码中却无法 import 这个包,甚至会报错 “No module named xxxx”。这个问题通常有以下可能的原因和解决方案: pip和Python版本不匹配 在Python中安装的包通常都是针对特定的pytho…

    python 2023年5月14日
    00
  • Python如何读取、写入JSON数据

    下面就给您详细讲解一下Python如何读取、写入JSON数据。 什么是JSON数据? JSON,全称 JavaScript Object Notation,是一种轻量级的数据交换格式,通常用于Web程序中将数据从服务器传输到客户端。JSON格式的数据由键值对构成,类似于Python中的字典类型。值可以是数字、字符串、布尔、列表、字典和null。 以下是一个J…

    python 2023年5月20日
    00
  • Python 深入理解yield

    Python 深入理解yield的完整攻略 引言 在Python中,有一种神奇的关键字——yield。它在迭代器、协程、生成器等方面有着广泛应用,是Python语言中非常重要的一部分。本文将详细讲解yield关键字的使用方法和如何理解yield。 基本语法 yield的基本语法如下: def my_generator(): yield 1 yield 2 y…

    python 2023年5月19日
    00
  • 基于xpath选择器、PyQuery、正则表达式的格式清理工具详解

    下面是详细的攻略: 基于xpath选择器、PyQuery、正则表达式的格式清理工具详解 在数据处理和爬虫开发中,我们经常需要对数据进行格式清理和提取。本文将介绍基于xpath选择器、PyQuery、正则表达式的格式清理工具,并提供两个示例说明。 xpath选择器 xpath是一种用于在XML和HTML文档中进行导航和提取信息的语言。在Python中,我们可以…

    python 2023年5月14日
    00
  • python 字符串格式化代码

    下面是关于 Python 字符串格式化的完整攻略。 什么是字符串格式化? 字符串格式化是 Python 中一种经常使用的字符串操作,用于把一个字符串中的某些部分替换为我们想要的值,通常用于打印出一些数据。 字符串格式化的语法 在 Python 中使用字符串格式化,我们需要使用%操作符和一个字母代码来表示要格式化的值的类型。 以下是常见的占位符代码: %s:字…

    python 2023年5月18日
    00
  • python 编程之twisted详解及简单实例

    Python编程之Twisted详解及简单实例 Twisted简介 Twisted是一个基于事件驱动和异步网络编程的Python框架。它提供了一组模块用于处理网络通信、多线程、邮件处理、数据库连接等等,可以开发出高扩展性和高性能的网络应用程序。 Twisted框架具有如下特点: 基于事件驱动的模式,能够高效地处理高并发请求。 支持多种协议,如TCP/IP、U…

    python 2023年5月19日
    00
  • Python GUI Tkinter简单实现个性签名设计

    下面我将为您介绍“Python GUI Tkinter简单实现个性签名设计”的完整攻略。 1. 初步了解Tkinter 首先,我们需要在Python中安装Tkinter库。Tkinter是一个Python自带的GUI界面库,提供了创建窗口应用程序的基本工具。要使用Tkinter,只需要在代码中导入Tkinter模块即可: import tkinter as …

    python 2023年6月13日
    00
  • Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)

    下面我详细讲解一下“Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)”这篇文章的攻略。 阅读文章并理解首先,我们需要仔细阅读文章,并对其中提到的技术点和方法有一个初步理解。此篇文章主要讲解了如何使用Python爬虫结合Xpath对网页进行解析,获取关键标签,实现自动评论盖楼抽奖的效果。具体实现过程中,需要掌握的技术点有:requests库…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部