前言

最近给小朋友教学python,让他们自己做一个图书管理系统,然后做完之后大家坐在一起做一下代码评审,想着他们都做了,自己也写一份给他们看一下吧。网上现有的图书管理系统可以说是一找一大堆,但是都是按照新手的水平写的,代码没有什么架构(因为有经验的人也不愿写这种系统),自己也是因为出于教学目的才重新写了一遍,正好把一些面向对象、MVC架构、高内聚低耦合、设计模式等思想传授给他们。

本项目采用传统的Python实现,不同的是,这是一个powerful的图书管理系统,具有一个基本的图书管理系统都有的功能,但是与普通管理系统相比,该系统基于MVC架构分层构建,扩展性强,高内聚低耦合, 数据持久化上采用cushy-storage进行文件存储,大大减少文件操作的开发成本,减少自定义存储协议所需要的工作量。项目的架构和设计思想适合新手学习借鉴。

python gui实现 图书管理系统 用python做一个图书管理系统_前端

特性

  • 批量查询、查询所有图书信息
  • 添加图书信息
  • 修改图书信息
  • 删除图书信息
  • 采用cushy-storage进行图书数据持久化保存
  • 采用rich进行更好看的终端显示

快速上手

先不说太多了,直接把代码拉下来跑一遍看看效果吧。

  • 使用git clone
git clone https://github.com/Undertone0809/library-management-system

python gui实现 图书管理系统 用python做一个图书管理系统_数据库_02

  • 导包:打开终端命令行,输入下面的命令,这一步是下载一些需要的第三方库,这里的主要用的是cushy-storagerich
pip install -r requirements.txt
  • 在第三方包下载完之后,运行init_data.py初始化数据
  • 直接运行app.py就好了

运行效果

python gui实现 图书管理系统 用python做一个图书管理系统_python_03

python gui实现 图书管理系统 用python做一个图书管理系统_python gui实现 图书管理系统_04

代码剖析

  • 本项目开发严格遵循高内聚、低耦合、支持扩展、架构分层的设计思想进行设计,专门的层做专门的事情,本项目基本的架构如下所示:

python gui实现 图书管理系统 用python做一个图书管理系统_前端_05

  • 进入项目的主入口,你会发现唯一暴露的就是menu_service.base_menu()的函数,本项目通过menu_service来封装需要显示的模块。
  • 在数据存储上,最底层将cushy-storage进行二次封装,形成了cache_service,使用cache_service,可以轻松地对对象进行增删改查。
  • 对Book的对象级别操作,我们叫做ORM,通过ORM架构,我们可以直接通过操作Book对象来进行增删改查的操作,让代码更加稳定。book_service进一步封装了
    cache_service的功能,让Book操作更加便捷
  • 对于日志打印,app.py中运行utils.enable_log()即可开启日志打印,将数据流转的关键信息打印出来。
  • utils.py封装了一些简单的工具类,如日志的打印、id自动生成等功能,具有通用性,因此放在一起方便调用。
  • 在终端显示上,使用rich 可以有更好看终端效果,如在批量显示Book上,可以将Books以表格的形式展现出来,效果如下所示:

python gui实现 图书管理系统 用python做一个图书管理系统_开发语言_06

TODO

  • 增加用户登陆的功能
  • 提供普通用户和管理员的功能
  • 按照图书价格排序