Python图书信息管理系统(完整代码)

        引言:(假装也不是一个大学生课设)在数字化和信息化快速发展的今天,图书管理系统成为了图书馆、学校及个人图书收藏管理中不可或缺的工具。这类系统不仅能有效地管理大量的图书资料,还能提高图书检索、借阅和归还的效率,极大地方便了读者和管理员。随着编程技术的进步,特别是Python语言的普及,开发一个功能全面且用户友好的图书管理系统已变得更加容易和高效。

目录

系统需求分析

技术选型

系统设计

数据模型设计

架构设计

核心代码实现

Book类

BookManager类

         主函数 main()

完整项目

使用效果


系统需求分析

一个完备的图书管理系统应该具备以下几个核心功能:

  • 图书管理:包括图书的添加、修改、删除和信息查询,能够记录图书的ISBN、标题、作者、出版社和库存等信息。
  • 借阅管理:实现图书借出和归还的管理,自动更新库存状态,记录借阅者信息和借阅时间。
  • 用户管理:区分管理员和普通用户,管理员具有全部管理权限,普通用户仅能查询图书和查看借阅状态。
  • 搜索功能:支持按书名、作者、ISBN等字段进行高效搜索。
  • 报表功能:自动生成图书借阅统计、库存报表等,帮助管理员快速获取图书流通和存储情况。

技术选型

        本系统选择Python作为主要开发语言,因其简洁性、易学性及其丰富的库支持。本系统可以用于存储书籍信息,并提供方法来管理图书的增加、删除、显示和查询。该管理系统通过命令行与用户交互,用户可以通过简单的文本菜单进行操作。

系统设计

数据模型设计
  • Book:存储图书信息,字段包括book_id, title, author, publisher, isbn, stock。
  • User:存储用户信息,字段包括user_id, username, password, role。
  • Borrow:存储借阅信息,字段包括borrow_id, book_id, user_id, borrow_date, return_date。
架构设计

系统采用三层架构:

  • 表示层:负责与用户交互,提供图形界面。
  • 业务逻辑层:处理图书、用户和借阅的业务逻辑。
  • 数据访问层:与数据库进行交互,实现数据的增删改查。

核心代码实现

Book类

Book类代表图书管理系统中的一个书籍条目。它包含四个属性:book_id, title, author, year_published,分别用于存储书籍ID、标题、作者和出版年份。此外,它还包括一个__str__方法,用于返回书籍的详细描述,方便打印和显示。

class Book:
    def __init__(self, book_id, title, author, year_published):
        self.book_id = book_id
        self.title = title
        self.author = author
        self.year_published = year_published

    def __str__(self):
        return f"书籍ID: {self.book_id}, 标题: '{self.title}', 作者: {self.author}, 出版年份: {self.year_published}"
BookManager类

BookManager类是管理书籍的核心类。它包含一个字典books来存储所有的书籍对象,其中键是book_id,值是Book对象。类中定义的方法包括:

  • add_book: 添加一本书到字典中。如果书籍ID已存在,则输出错误消息。
  • remove_book: 根据书籍ID删除一本书。如果书籍ID不存在,则输出错误消息。
  • show_all_books: 打印所有存储的书籍信息。
  • find_book: 根据书籍ID查找并显示一本书的信息。如果书籍ID不存在,则输出错误消息。
class BookManager:
    def __init__(self):
        self.books = {}

    def add_book(self, book):
        if book.book_id in self.books:
            print("错误: 此书籍ID已存在。")
        else:
            self.books[book.book_id] = book
            print(f"已添加: {book}")

    def remove_book(self, book_id):
        if book_id in self.books:
            del self.books[book_id]
            print(f"已删除书籍ID {book_id}")
        else:
            print("错误: 书籍ID未找到")

    def show_all_books(self):
        for book in self.books.values():
            print(book)

    def find_book(self, book_id):
        if book_id in self.books:
            print(f"找到书籍: {self.books[book_id]}")
        else:
            print("未找到书籍。")
主函数 main()

主函数负责创建BookManager实例并提供一个命令行界面,让用户可以通过输入选择执行不同的操作,如添加书籍、删除书籍、显示所有书籍、查询书籍和退出程序。这通过一个循环实现,循环内部处理用户的输入和相应的功能调用。

def main():
    book_manager = BookManager()
    while True:
        print("\n图书管理菜单:")
        print("1. 添加书籍")
        print("2. 删除书籍")
        print("3. 显示所有书籍")
        print("4. 查询书籍")
        print("5. 退出")
        choice = input("请输入选项: ")

        if choice == '1':
            book_id = input("请输入书籍ID: ")
            title = input("请输入书名: ")
            author = input("请输入作者名: ")
            year_published = input("请输入出版年份: ")
            book_manager.add_book(Book(book_id, title, author, year_published))
        elif choice == '2':
            book_id = input("请输入要删除的书籍ID: ")
            book_manager.remove_book(book_id)
        elif choice == '3':
            book_manager.show_all_books()
        elif choice == '4':
            book_id = input("请输入要查询的书籍ID: ")
            book_manager.find_book(book_id)
        elif choice == '5':
            print("正在退出...")
            break
        else:
            print("无效选项,请输入1至5之间的数字。")

完整项目

class Book:
    def __init__(self, book_id, title, author, year_published):
        self.book_id = book_id
        self.title = title
        self.author = author
        self.year_published = year_published

    def __str__(self):
        return f"书籍ID: {self.book_id}, 标题: '{self.title}', 作者: {self.author}, 出版年份: {self.year_published}"

class BookManager:
    def __init__(self):
        self.books = {}

    def add_book(self, book):
        if book.book_id in self.books:
            print("错误: 此书籍ID已存在。")
        else:
            self.books[book.book_id] = book
            print(f"已添加: {book}")

    def remove_book(self, book_id):
        if book_id in self.books:
            del self.books[book_id]
            print(f"已删除书籍ID {book_id}")
        else:
            print("错误: 书籍ID未找到")

    def show_all_books(self):
        for book in self.books.values():
            print(book)

    def find_book(self, book_id):
        if book_id in self.books:
            print(f"找到书籍: {self.books[book_id]}")
        else:
            print("未找到书籍。")

def main():
    book_manager = BookManager()

    while True:
        print("\n图书管理菜单:")
        print("1. 添加书籍")
        print("2. 删除书籍")
        print("3. 显示所有书籍")
        print("4. 查询书籍")
        print("5. 退出")
        choice = input("请输入选项: ")

        if choice == '1':
            book_id = input("请输入书籍ID: ")
            title = input("请输入书名: ")
            author = input("请输入作者名: ")
            year_published = input("请输入出版年份: ")
            book_manager.add_book(Book(book_id, title, author, year_published))
        elif choice == '2':
            book_id = input("请输入要删除的书籍ID: ")
            book_manager.remove_book(book_id)
        elif choice == '3':
            book_manager.show_all_books()
        elif choice == '4':
            book_id = input("请输入要查询的书籍ID: ")
            book_manager.find_book(book_id)
        elif choice == '5':
            print("正在退出...")
            break
        else:
            print("无效选项,请输入1至5之间的数字。")

if __name__ == "__main__":
    main()
使用效果

跑过了,很好用

能救一个算一个吧,还缺啥跟我说!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Centos Nginx SSL 配置

Nginx 配置 SSL 1.下载SSL证书 .crt 和 .key文件 2.创建和上传证书 mkdir -p /etc/nginx/cert 上传证书3.nginx.conf配置 # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Docum…

Java中子类继承和方法重写_java重写父类方法参数变了怎么改

public(非私有)private私有()构造方法不能继承不能继承成员变量能继承能继承成员方法能继承不能继承 1.也不能继承父类的有参构造方法,具体看构造函数继承特点 2.私有的成员变量相当于从父类拷贝一份拿过来用的,不能直接用,需要get/set方法 继承特点 继承中 成员变量访问特点:如…

Java-List集合堆内存溢出

Java-List集合堆内存溢出 情况一情况二对照分析对照规定堆内存 情况一 往List<Object>的集合中不断插入元素&#xff0c;集合底层的数组会不断扩容&#xff0c;从0 -> 10 -> 10 10>>1…。最终出现堆内存溢出&#xff0c;是在扩容数组大小的时候。这里的过程…

Next.js 实战 (一):项目搭建指南

前言 时间过得好快&#xff0c;一下就来到2024下半年了。 上半年我为了学习 Nuxt3&#xff0c;从 0 到 1 开发了一个导航网站&#xff1a;Dream Site&#xff0c;目前主要的功能都已完成了&#xff0c;后续有时间再慢慢添加有趣的功能。 下半年开始进攻 Next.js&#xff0c;…

MES系统如何进行数据采集?

在现代化制造业中&#xff0c;MES系统扮演着至关重要的角色。其中&#xff0c;对生产设备进行数据采集是MES系统不可或缺的一部分。数据采集不仅能够实时监控设备的运行状态&#xff0c;还能提供准确的生产数据&#xff0c;帮助企业实现精细化管理和优化生产流程。 通过实时采…

水利水电安全员C证考试题库资料,2024年全国考试通用!

1.安全生产民事责任&#xff0c;是指责任主体违反安全生产法律规定造成&#xff08;&#xff09;&#xff0c;由人民法院依照民事法律强制其行使民事赔偿的一种法律责任。民事责任追究的目的是为了最大限度的维护当事人受到民事损害时享有获得民事赔偿的权利。 A.民事损伤 B.…

如何检查购买的Facebook账号优劣?

Facebook 是全球最受欢迎的社交网络之一,为品牌广告提供了巨大的潜力。许多公司和营销人员使用 Facebook 来推广他们的产品和服务&#xff0c;经常会购买账号。当然也分出了很多账号&#xff0c;比如个人号&#xff0c;BM号&#xff0c;广告号&#xff0c;小黑号等等。 但是,有…

【Arduino】ESP8266开发环境配置(图文)

ESP8266与ESP32开发很类似&#xff0c;相当于是低配版本的ESP32&#xff0c;其同样具有无线网络连接能力&#xff0c;功能强大&#xff0c;而且价格比ESP32更具有优势。接下来我们就来设置一下ESP8266的开发环境。 使用Arduino开发平台软件&#xff0c;选择首选项进行设置。 h…

DVWA sql手注学习(巨详细不含sqlmap)

这篇文章主要记录学习sql注入的过程中遇到的问题已经一点学习感悟&#xff0c;过程图片会比较多&#xff0c;比较基础和详细&#xff0c;不存在看不懂哪一步的过程 文章目录 靶场介绍SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶场介绍 DVWA&#xff08;Damn…

YUV 颜色编码详解

YUV 简介 YUV是被欧洲电视系统所采用的一种颜色编码方法&#xff08;属于PAL&#xff09;&#xff0c;是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中&#xff0c;通常采用三管彩色摄影机或彩色CCD摄影机进行取像&#xff0c;然后把取得的彩色图像信号经分…

硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140110514 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

ConsiStory:无需训练的一致性文本到图像生成技术

随着大规模文本到图像&#xff08;T2I&#xff09;扩散模型的发展&#xff0c;用户可以更自由地通过文本指导图像生成过程。然而&#xff0c;要在不同的提示中保持同一主题的视觉一致性仍然是一个挑战。现有的方法通常需要对模型进行微调或预训练&#xff0c;以教授新词汇来描述…

arthas命令使用

dashboard(线程、内存等环境概览) jvm&#xff08;JVM相关信息概览&#xff09; 1、RUNTIME&#xff08;系统运行环境JVM相关信息&#xff0c;运行时长等&#xff09; 2、CLASS-LOADING&#xff08;类加载信息&#xff09; 3、 COMPILATION&#xff08;编译信息&#xff09; 4…

论文学习——基于类型检测的动态自适应多目标优化算法

论文题目&#xff1a;Dynamic adaptive multi-objective optimization algorithm based on type detection 基于类型检测的动态自适应多目标优化算法&#xff08;Xingjuan Cai a,b, Linjie Wu a,∗, Tianhao Zhao a, Di Wu c, Wensheng Zhang d, Jinjun Chen e&#xff09;Inf…

Spring启动时,将SpringContext设置到Util中(SpringContextUtil)

场景 在Spring应用开发中&#xff0c;为简化代码或者在静态方法中获取Spring应用的上下文&#xff0c;需要把SpringContext设置到类属性上。经过对源码的分析和实践&#xff0c;使用Spring的事件监听器监听ApplicationPreparedEvent事件是最佳的方式。 通过ApplicationPrepar…

深入理解 Git `git add -p` 命令中的交互选项

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

git使用遇到的问题记录

文章目录 1. 记录以下问题*error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307* 1. 记录以下问题 error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307 第一种&#xff1a;clone的仓库地址或者账户密码发生改变&#xff1b;…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字&#xff08;也称为关键字&#xff09;是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

商务视频推广8个增加用户转化率的技巧-华媒舍

商务视频推广是一种有效的营销策略&#xff0c;可以帮助企业吸引更多的潜在客户并增加用户转化率。我们将介绍8个提高商务视频推广效果的技巧&#xff0c;帮助您更好地利用视频来促进业务增长。 技巧一&#xff1a;制作高质量的内容 成功的商务视频推广首先要有高质量的内容。…