Python实现简易的图书借阅管理系统

本篇文章将编写一个简易的图书借阅管理系统,可以实现一些基本的功能。

图书借阅管理系统需求分析

1. 书籍的属性信息:书名, 作者, 借阅状态(借出数量, 未借的数量)
2. 书籍借阅需要的操作:

            1). 录入书籍信息;
            2). 借阅书籍信息;
            3). 归还书籍;
            4). 查询书籍信息;
            5). 退出

主要思路

用户进入系统后,可以通过键入数字1~5去实现相对应的功能,并且可以重复操作,直到输入数字5之后退出系统。

先创建一个空的列表,作为一个存放书籍信息的容器,执行程序时先进行初始化,自动添加几个已有的信息到列表中;

当输入数字1后,要求用户输入要录入的书籍名称,若书籍已存在列表中,则报错,若书籍不在列表中,则进一步要求用户输入相应的书籍信息,并把它们存放到列表中去;

当输入数字2后,要求用户输入要借阅的书籍名称,之后判断该书籍的库存数量是否为0,若库存为0,则返回库存不足的信息,否则,借阅成功,库存数减1,借出数加1;

当输入数字3后,要求用户输入要归还的书籍名称,并且库存数量加1,借出数量减1;

当输入数字4后,可以给用户以表格的形式返回所有的书籍信息;

当输入数字5后,退出系统。

在写图书借阅管理系统之前,需要写一个改变字体的颜色的代码,在借阅系统中出现不同的情况时,会有相应的颜色变化。

 

下面简单介绍一下Python中怎样改变输出字体颜色:

实现过程:

终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。

转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就是033)。

书写格式:

开头部分:\033[显示方式;前景色;背景色m + 结尾部分:\033[0m

注意:

开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;

另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。

对于结尾部分,其实也可以省略,但是为了书写规范,建议\033[***开头,\033[0m结尾。

数值表示的参数含义:

显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)

前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色>)、37(白色)

背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色>)、47(白色)

先创建一个colorFont.py文件,方便之后调用,并编写代码:

OKGREEN = '\033[32m'
ERROR = '\033[31m'
WARNING = '\033[33m'
END = '\033[0m'

if __name__ == '__main__':
    print(OKGREEN + 'OK')
    print(ERROR + '错误')
    print(WARNING + "警告")

测试后,输出结果如下:

 

接下来就是系统的编写了,首先需要导入colorFont模块,代码如下:

from colorFont import *
from prettytable import PrettyTable
class Book(object):
    def __init__(self, name, author, borrowed=0, borrow=0):
        """

        :param name:书籍名称
        :param author: 作者
        :param borrowed: 已借出书籍数
        :param borrow: 未借出的书籍数
        """
        self.name = name
        self.author = author
        self.borrowed = borrowed
        self.borrow = borrow

    def __str__(self):
        return '<Book: %s>' %(self.name)

class BookManage(object):
    books = []

    def init(self):
        """初始化书籍信息的函数, 添加书籍信息"""
        self.books.append(Book("Python核心编程", 'Wesley Chun', 5, 0))
        self.books.append(Book("Python for data analysis", 'Wes McKinney', 5, 10))
        self.books.append(Book("流畅的Python", 'Luciano Ramalho', 0, 10))
        print(OKGREEN + "初始化书籍信息成功" + END)

    def find(self, name):
        """
        根据用户传入的书籍名称判断书籍是否存在, 如果存在, 返回该书籍对象; 如果不存在, 返回None
        """
        for book in self.books:
            if book.name == name:
                return book
        else:
            return None

    def entering(self):
        name = input("请输入要录入的书籍名称:").strip()
        book = self.find(name)
        if book:
            print(WARNING + "该书信息已存在,请不要重复录入" +END)
        else:
            author = input("请输入作者:")
            borrow = input("请输入录入数量:")
            borrowed = 0
            self.books.append(Book(name, author, borrowed, int(borrow)))
            print(OKGREEN + "录入书籍信息成功" +END)

    def borrowBook(self):
        # 删除字符串左右的空格
        name = input("借阅书籍名称:").strip()
        # 查找书籍, 如果存在, 返回书籍对象, 不存在, 返回None;
        book = self.find(name)
        if book:
            if book.borrow > 0:
                # 未借出书籍数量减1;
                book.borrow -= 1
                # 借出书籍数量加1
                book.borrowed += 1
                print(OKGREEN + "书籍借阅成功" + END)
            else:
                print(WARNING + "书籍%s库存不足" %(book.name) + END)
        else:
            print(ERROR + "书籍%s不存在" %(name) + END)

    def returnBook(self):
        name = input("归还书籍名称:").strip()
        book = self.find(name)
        if book:
            book.borrow += 1
            book.borrowed -= 1
            print(OKGREEN + "书籍归还成功" + END)
        else:
            print(ERROR + "本图书馆没有此书" + END)

    def show(self):
        print("书籍信息显示".center(50, '*'))
        table = PrettyTable()
        table.field_names = ["编号", "书籍名称", "作者", "已借出数量", "库存数量"]
        for index, book in enumerate(self.books):
            table.add_row([index+1, book.name, book.author, book.borrowed, book.borrow])
        print(table)

def main():
    # 创建书籍管理的对象
    bm = BookManage()
    # 先初始化书籍信息
    bm.init()
    prompt = """
                书籍借阅与管理系统
                
            1).录入书籍信息
            2).借阅书籍信息
            3).归还书籍
            4).查询书籍信息
            5).退出系统
            
            
    请输入你的选择:"""
    while True:
        choice = input(prompt)
        if choice == '1':
            bm.entering()
        elif choice == '2':
            bm.borrowBook()
        elif choice == '3':
            bm.returnBook()
        elif choice == '4':
            bm.show()
        elif choice == '5':
            exit(0)
        else:
            print("请输入正确的选项")

if __name__ == '__main__':
    main()

运行程序之后,输出如下所示:

之后输入要执行的操作相对应的数字,先输入一个 4 吧,看一下书库里最开始有什么信息,输入4后,得到下面的输出:

再输入一个 1 ,录入一个新的信息:

再输入一个2,借一本书吧:

再输入 还书吧:

再输入 看一下,现在书库中所有书的情况吧:

最后输入 5 就可以退出该系统了。

以上就是一个简单的图书借阅管理系统的实现。

  • 15
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,为了实现这个图书借阅管理系统,我们可以考虑以下几个步骤: 1. 设计数据库结构,包括书籍、用户和借阅记录等表的字段和关系。 2. 使用 Python 编写程序,创建数据库并初始化表结构。 3. 编写程序实现管理员和用户登录功能,管理员可以添加、删除和修改书籍信息,用户可以查询、借阅和归还书籍。 4. 实现图书查询功能,可以按照书名、作者、出版社等条件进行查询。 5. 实现借阅和归还功能,包括借阅时间和归还时间的记录。 6. 实现图书的统计功能,包括借阅情况、借阅排行榜等。 下面是一个简单的示例代码,代码中使用了 SQLite 数据库和 Flask 框架来实现: ```python from flask import Flask, render_template, request, redirect, url_for import sqlite3 app = Flask(__name__) # 连接数据库 conn = sqlite3.connect('library.db') c = conn.cursor() # 创建书籍、用户和借阅记录表 c.execute('''CREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, author TEXT NOT NULL, publisher TEXT NOT NULL, isbn TEXT NOT NULL, quantity INTEGER NOT NULL)''') c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, password TEXT NOT NULL, is_admin INTEGER NOT NULL)''') c.execute('''CREATE TABLE IF NOT EXISTS borrow_records (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, book_id INTEGER NOT NULL, borrow_time TEXT NOT NULL, return_time TEXT)''') # 插入初始数据 c.execute("INSERT INTO users (name, password, is_admin) VALUES ('admin', 'admin', 1)") c.execute("INSERT INTO books (title, author, publisher, isbn, quantity) VALUES ('Python编程从入门到实践', 'Eric Matthes', '人民邮电出版社', '9787115428021', 10)") c.execute("INSERT INTO books (title, author, publisher, isbn, quantity) VALUES ('流畅的Python', 'Luciano Ramalho', '人民邮电出版社', '9787111601107', 5)") conn.commit() # 关闭数据库连接 conn.close() @app.route('/') def index(): return render_template('index.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': name = request.form['name'] password = request.form['password'] conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("SELECT * FROM users WHERE name=? AND password=?", (name, password)) user = c.fetchone() conn.close() if user is None: return render_template('login.html', error='用户名或密码不正确') else: if user[3] == 1: return redirect(url_for('admin')) else: return redirect(url_for('user')) else: return render_template('login.html') @app.route('/admin') def admin(): conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("SELECT * FROM books") books = c.fetchall() conn.close() return render_template('admin.html', books=books) @app.route('/add_book', methods=['POST']) def add_book(): title = request.form['title'] author = request.form['author'] publisher = request.form['publisher'] isbn = request.form['isbn'] quantity = request.form['quantity'] conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("INSERT INTO books (title, author, publisher, isbn, quantity) VALUES (?, ?, ?, ?, ?)", (title, author, publisher, isbn, quantity)) conn.commit() conn.close() return redirect(url_for('admin')) @app.route('/delete_book/<int:book_id>') def delete_book(book_id): conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("DELETE FROM books WHERE id=?", (book_id,)) conn.commit() conn.close() return redirect(url_for('admin')) @app.route('/user') def user(): conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("SELECT * FROM books") books = c.fetchall() c.execute("SELECT * FROM borrow_records WHERE user_id=?", (1,)) records = c.fetchall() conn.close() return render_template('user.html', books=books, records=records) @app.route('/borrow_book/<int:book_id>') def borrow_book(book_id): conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("SELECT * FROM books WHERE id=?", (book_id,)) book = c.fetchone() if book[5] > 0: c.execute("UPDATE books SET quantity=? WHERE id=?", (book[5]-1, book_id)) c.execute("INSERT INTO borrow_records (user_id, book_id, borrow_time) VALUES (?, ?, datetime('now', 'localtime'))", (1, book_id)) conn.commit() conn.close() return redirect(url_for('user')) @app.route('/return_book/<int:record_id>') def return_book(record_id): conn = sqlite3.connect('library.db') c = conn.cursor() c.execute("SELECT * FROM borrow_records WHERE id=?", (record_id,)) record = c.fetchone() c.execute("SELECT * FROM books WHERE id=?", (record[2],)) book = c.fetchone() c.execute("UPDATE books SET quantity=? WHERE id=?", (book[5]+1, book[0])) c.execute("UPDATE borrow_records SET return_time=datetime('now', 'localtime') WHERE id=?", (record_id,)) conn.commit() conn.close() return redirect(url_for('user')) if __name__ == '__main__': app.run(debug=True) ``` 其中,`index.html`、`login.html`、`admin.html` 和 `user.html` 分别是网页模板文件,可以根据需要进行修改。运行该程序后,访问 `http://localhost:5000/` 即可使用该图书借阅管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值