首页 / 探索 / 正文

图书管理系统源代码(别再死磕语法了! 手把手教你写一个图书管理系统(附源码))

放大字体  缩小字体 来源:虎门沙角炮台 2026-04-17 17:21  浏览次数:6

你好! 经常有粉丝在后台问我:“小编,我Python基础语法(列表、字典、循环、函数)都学会了,但是一到自己写东西就懵逼,有没有什么项目能把这些知识点串起来? ”

我的回答永远是:做一个“图书管理系统”!

别小看这个项目,它虽然被写烂了,但它是检验你是否掌握、面向对象编程(OOP)数据持久化(文件存储)业务逻辑处理以及的试金石。

今天,我就用的视角,手把手带你从零实现一个资深博主Python控制台版图书管理系统。 不仅有代码,更有设计思路。

别再死磕语法了! 手把手教你写一个图书管理系统(附源码)nerror="javascript:errorimg.call(this);">

1. 为什么是它?

在开始敲代码之前,我们要先搞清楚,这个项目能帮你打通哪几条“任督二脉”:

  • 面向对象思维 (OOP):如何把书抽象成类,把图书馆抽象成书图书馆类。
  • CRUD操作:增(Add)、删(Remove)、改(Borrow/Return)、查(Search),这是所有系统的核心。
  • 数据持久化:程序关闭后数据不丢失,我们这次用文件来模拟数据库。
  • 交互逻辑:如何写一个死循环菜单,让用户一直操作直到选择退出。

2. 系统设计(蓝图)

我们要做的系统包含两个核心类:

  1. Book(书籍类)
  2. 属性:书名、作者、ISBN(唯一标识)、是否借出。
  3. LibraryManager(管理类)
  4. 属性:包含所有书籍的列表。
  5. 方法:添加书籍、查询书籍、借书、还书、保存数据、加载数据。

3. 代码实战(干货时刻)

我们要写得专业点,用上,这才是Python 3.x该有的样子。Type Hinting(类型提示)

第一步:定义书籍模型


    import jsonimport osfrom typing import List, Dict# 数据存储的文件名DATA_FILE = "library_data.json"class Book:    def __init__(self, title: str, author: str, isbn: str, is_borrowed: bool = False):        self.title = title        self.author = author        self.isbn = isbn  # ISBN作为唯一ID        self.is_borrowed = is_borrowed    def __str__(self):        status = "已借出" if self.is_borrowed else "可借阅"        return f"[{status}] 《{self.title}》 | 作者: {self.author} | ISBN: {self.isbn}"    # 将对象转换为字典,方便存入JSON    def to_dict(self) -> Dict:        return {            "title": self.title,            "author": self.author,            "isbn": self.isbn,            "is_borrowed": self.is_borrowed        }  
别再死磕语法了! 手把手教你写一个图书管理系统(附源码)nerror="javascript:errorimg.call(this);">

第二步:核心管理逻辑

这是整个程序的“大脑”。注意看和save_dataload_data,这是让你的程序“拥有记忆”的关键。


    class LibraryManager:    def __init__(self):        self.books: List[Book] = []        self.load_data()  # 启动时自动加载数据    def add_book(self, title: str, author: str, isbn: str):        # 检查ISBN是否重复        for book in self.books:            if book.isbn == isbn:                print(f" 错误:ISBN {isbn} 已存在!")                return        new_book = Book(title, author, isbn)        self.books.append(new_book)        self.save_data()        print(f" 成功添加书籍:《{title}》")    def list_books(self):        if not self.books:            print(" 图书馆目前是空的。")            return        print("-" * 30)        print(" 图书列表:")        for book in self.books:            print(book)        print("-" * 30)    def borrow_book(self, isbn: str):        for book in self.books:            if book.isbn == isbn:                if book.is_borrowed:                    print(f" 《{book.title}》 已经被借走了。")                else:                    book.is_borrowed = True                    self.save_data()                    print(f" 成功借阅:《{book.title}》")                return        print(" 未找到该ISBN对应的书籍。")    def return_book(self, isbn: str):        for book in self.books:            if book.isbn == isbn:                if not book.is_borrowed:                    print(f" 《{book.title}》 并没有被借出。")                else:                    book.is_borrowed = False                    self.save_data()                    print(f" 成功归还:《{book.title}》")                return        print(" 未找到该ISBN对应的书籍。")    def save_data(self):        """将书籍列表保存到JSON文件"""        data = [book.to_dict() for book in self.books]        try:            with open(DATA_FILE, 'w', encoding='utf-8') as f:                json.dump(data, f, ensure_ascii=False, indent=4)        except Exception as e:            print(f" 保存数据失败: {e}")    def load_data(self):        """从JSON文件加载数据"""        if not os.path.exists(DATA_FILE):            return  # 文件不存在则跳过        try:            with open(DATA_FILE, 'r', encoding='utf-8') as f:                data = json.load(f)                self.books = [Book(**item) for item in data] # 列表推导式+解包,高级写法        except Exception as e:            print(f" 加载数据失败: {e}")  

第三步:用户界面(CLI)

写个漂亮的菜单,让用户知道怎么操作。


    def main():    manager = LibraryManager()    while True:        print("\n" + "="*10 + "  Python图书管理系统 " + "="*10)        print("1. 添加图书")        print("2. 显示所有图书")        print("3. 借阅图书")        print("4. 归还图书")        print("5. 退出系统")                choice = input(" 请输入选项 (1-5): ")        if choice == '1':            title = input("请输入书名: ")            author = input("请输入作者: ")            isbn = input("请输入ISBN: ")            manager.add_book(title, author, isbn)        elif choice == '2':            manager.list_books()        elif choice == '3':            isbn = input("请输入要借阅的ISBN: ")            manager.borrow_book(isbn)        elif choice == '4':            isbn = input("请输入要归还的ISBN: ")            manager.return_book(isbn)        elif choice == '5':            print(" 感谢使用,再见!")            break        else:            print(" 输入无效,请重试。")if __name__ == "__main__":    main()  

4. 代码解析(经验谈)

很多初学者代码能跑,但写得“不够味”。我在上面的代码里埋了几个:进阶技巧

  1. JSON序列化

我们没有用复杂的数据库(MySQL/SQLite),而是用了模块。这是轻量级项目存储数据的首选。json

load_data里的 是 Python 的[Book(**item) for item in data]字典解包技巧,能瞬间把字典转回对象,非常优雅。

  1. 文件编码

在 时一定要指定 ,否则在 Windows 上存中文书名可能会乱码,这是新手最容易踩的坑。open()encoding='utf-8'

  1. 分离关注点

LibraryManager类只管业务逻辑。

这种结构叫做,方便以后维护。高内聚,低耦合

5. 想要更进一步?(课后作业)

如果你觉得上面的代码太简单,不妨尝试以下几个挑战,能做出来你就算入门了:

  • 挑战Lv1:添加“搜索功能”,支持按书名模糊查找(提示:使用 关键字)。in
  • 挑战Lv2:换掉 ,使用 Python 自带的 JSONsqlite3 库,真正实现关系型数据库存储。
  • 挑战Lv3:嫌黑底白字的命令行太丑?试着用 或者 TkinterPyQt 给它加个图形化界面(GUI)。

6. 结语

编程从来不是看会的,而是敲会的。

把上面的代码复制到你的编辑器里(推荐 VS Code 或 PyCharm),跑起来,试试看添加几本书,关掉程序再打开,看看书还在不在。

如果你在这个过程中遇到了报错,恭喜你,那才是你真正学到东西的时刻!

源码已经都在文章里了,觉得有用的话,点个赞支持一下小编!你的关注是我更新的动力!

别再死磕语法了! 手把手教你写一个图书管理系统(附源码)nerror="javascript:errorimg.call(this);">

打赏
0相关评论
热门搜索排行
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:115904045
头条快讯网 版权所有
中国互联网举报中心