教你用python实现一个无界面的小型图书管理系统


Posted in Python onMay 21, 2021

一、需求了解

功能模块

教你用python实现一个无界面的小型图书管理系统

图书信息

教你用python实现一个无界面的小型图书管理系统

二、环境准备

创建数据库表

  • 创建数据库

CREATE DATABASE bookmanage;

  • 使用数据库

use bookmanage;

  • 创建表

create table books(
id int unsigned primary key auto_increment not null,
name varchar(20) default “”,
position varchar(40) default “”,
status enum(‘在库', ‘出借') default ‘在库',
borrower varchar(20) default “”
);

  • 插入数据

insert into books(name, position) value (‘python从入门到放弃', ‘A-1-1');

  • 查询数据

select * from books where id=2;

  • 修改数据

update books set name=‘python';

  • 删除数据

delete from book where id=3;

三、代码实现

引入pymysql模块

  • 安装pymysql

命令:pip install pymysql

  • 封装操作数据库模块
# -*- coding: utf-8 -*-
"""
=============================== 
@Time    : 2021/5/18 15:56
@Author  : flora.chen
@FileName: handle_mysql.py
@Software: PyCharm
===============================
"""
import pymysql

class MysqlDB:
    """
    操作mysql数据库
    """
    def __init__(self, host, user, pwd, database=None, port=3306):
        """
        初始化数据库链接
        :param host: 主机地址
        :param user: 用户名
        :param pwd: 密码
        :param database: 数据库名称,默认为空
        :param port: 端口号,默认3306
        """
        self.conn = pymysql.connect(
            host=host,
            user=user,
            password=pwd,
            database=database,
            port=port,
            cursorclass=pymysql.cursors.DictCursor
        )
        # 创建一个游标对象
        self.cur = self.conn.cursor()

    def update(self, sql):
        """
        进行增删改操作
        :param sql: 需要执行的SQL
        :return:
        """
        # 执行SQL
        result = self.cur.execute(sql)
        # 提交事务
        self.conn.commit()
        return result

    def query(self, sql, one=False):
        """
        进行查询操作
        :param one: 判断是要返回所有查询数据还是第一条,默认是所有
        :param sql: 要执行的SQL
        :return:
        """
        # 执行SQL
        self.cur.execute(sql)
        if one:
            return self.cur.fetchone()
        else:
            return self.cur.fetchall()

    def close(self):
        """
        断开游标,关闭数据库连接
        :return:
        """
        self.cur.close()
        self.conn.close()


if __name__ == "__main__":
    db = MysqlDB(host="localhost", user="root", pwd="root")
    print(db.query("select * from bookmanage.books"))
    # db.update("insert into bookmanage.books(name, position) value ('python从入门到放弃', 'A-1-1');")

图案管理系统后台实现

# -*- coding: utf-8 -*-
"""
=============================== 
@Time    : 2021/5/18 16:39
@Author  : flora.chen
@FileName: bookmanager.py
@Software: PyCharm
===============================
"""
from handle_mysql import MysqlDB

db = MysqlDB(host="localhost", database="bookmanage", user="root", pwd="root")


class BookManage:
    """
    图书管理系统
    """

    @staticmethod
    def print_menu():
        """
        菜单打印
        :return:
        """
        print("---------------------菜单-------------------------")
        print("[1]: 添加图书")
        print("[2]: 修改图书")
        print("[3]: 删除图书")
        print("[4]: 查询图书")
        print("[5]: 图书列表")
        print("[6]: 出借图书")
        print("[7]: 归还图书")
        print("[8]: 退出")

    def add_book(self):
        """
        [1]: 添加图书
        :return:
        """
        print("****************添加图书****************")
        name = input("请输入书名:")
        position = input("请输入图书位置:")
        if name and position:
            db.update("insert into books(name, position) value ('{}', '{}');".format(name, position))
            print("图书添加成功")
        else:
            print("书名或者图书位置不能为空,请重新输入!")

        num = input("继续添加请输入1, 回车退回主菜单")
        if num == "1":
            self.add_book()

    def update_book(self):
        """
        [2]: 修改图书
        :return:
        """
        print("****************修改图书****************")
        book_id = input("请输入需要修改的图书ID:")
        result = db.query("select * from books where id={};".format(book_id), one=True)
        if result:
            print("当前数据为:{}".format(result))
            name = input("重新输入书名,不修改输入回车:") or result["name"]
            position = input("重新输入位置,不修改输入回车:") or result["position"]
            db.update("update books set name='{}', position='{}' where id={};".format(name, position, book_id))
            print("修改成功")
        else:
            print("您输入的图书ID不存在,请重新输入~")

        num = input("继续修改请输入1, 回车退回主菜单")
        if num == "1":
            self.update_book()

    def delete_book(self):
        """
        [3]: 删除图书
        :return:
        """
        print("****************删除图书****************")
        book_id = input("请输入需要修改的图书ID:")
        result = db.query("select * from books where id={};".format(book_id), one=True)
        if result:
            print("当前数据为:{}".format(result))
            confirm_num = input("确定需要删除这本书吗?确认请按1,取消请按2:")
            if confirm_num == "1":
                db.update("delete from books where id={};".format(book_id))
                print("删除成功")
            else:
                print("已确认不删除该书籍~")
        else:
            print("系统中未找到该书籍!")

        num = input("继续删除请输入1, 回车退回主菜单")
        if num == "1":
            self.delete_book()

    def query_book(self):
        """
        [4]: 查询图书
        :return:
        """
        print("****************查询图书****************")
        name = input("请输入您要查询的图书名称(模糊匹配):")
        if name:
            result = db.query("select * from books where name like '%{}%';".format(name))
            if result:
                print("当前查询到如下书籍信息:{}".format(result))
            else:
                print("未查询到相关书籍信息~")
        else:
            print("书名不能为空!")

        num = input("继续查询请输入1, 回车退回主菜单")
        if num == "1":
            self.query_book()

    def book_list(self):
        """
        [5]: 图书列表
        :return:
        """
        print("****************图书列表****************")
        result = db.query("select * from books;")
        for i in result:
            print("编号:{}, 书籍名:{}, 位置:{}, 状态:{}, 借阅人:{}".format(i["id"], i["name"], i["position"], i["status"],
                                                               i["borrower"]))

    def borrow_book(self):
        """
        [6]: 出借图书
        :return:
        """
        print("****************出借图书****************")
        book_id = input("请输入需要借阅的图书ID:")
        result = db.query("select * from books where id={};".format(book_id), one=True)
        if result:
            if result["status"] == "出借":
                print("抱歉,该书已经借出!")
            else:
                while True:
                    borrower = input("请输入借阅者的名字:")
                    if borrower:
                        db.update("update books set borrower='{}' where id={};".format(borrower, book_id))
                        db.update("update books set status='出借' where id={};".format(book_id))
                        print("图书借阅成功~")
                        break
                    else:
                        print("借阅者的名字不能为空, 请重新输入")
        else:
            print("未查询到相关书籍信息~")

        num = input("继续借阅请输入1, 回车退回主菜单")
        if num == "1":
            self.borrow_book()

    def back_book(self):
        """
        [7]: 归还图书
        :return:
        """
        print("****************归还图书****************")
        book_id = input("请输入需要归还的图书ID:")
        result = db.query("select * from books where id={};".format(book_id), one=True)
        if result:
            if result["status"] == "在库":
                print("该书是在库状态,请确认图书编号是否正确!")
            else:
                db.update("update books set status='在库' where id={};".format(book_id))
                db.update("update books set borrower='' where id={};".format(book_id))
                print("书籍归还成功~")
        else:
            print("未查询到相关书籍信息~")

        num = input("继续归还书籍请输入1, 回车退回主菜单")
        if num == "1":
            self.borrow_book()

    def quit(self):
        """
        [8]: 退出
        :return:
        """
        print("****************退出****************")
        db.close()

    def main(self):
        """
        程序运行的流程控制
        :return:
        """
        print("---------------欢迎进入图书管理系统----------------")
        while True:
            self.print_menu()
            num = input("请输入选项:")
            if num == "1":
                self.add_book()
            elif num == "2":
                self.update_book()
            elif num == "3":
                self.delete_book()
            elif num == "4":
                self.query_book()
            elif num == "5":
                self.book_list()
            elif num == "6":
                self.borrow_book()
            elif num == "7":
                self.back_book()
            elif num == "8":
                self.quit()
                break
            else:
                print("您的输入有误~ 请按照菜单提示输入,谢谢!")


if __name__ == "__main__":
    book = BookManage()
    book.main()

到此这篇关于教你用python实现一个无界面的小型图书管理系统的文章就介绍到这了,更多相关Python实现图书管理系统内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
python实现的简单窗口倒计时界面实例
May 05 Python
解析Python中的二进制位运算符
May 13 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Python实现的用户登录系统功能示例
Feb 05 Python
利用python如何在前程无忧高效投递简历
May 07 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
python源文件的字符编码知识点详解
Mar 04 Python
一篇文章带你搞懂Python类的相关知识
Python深度学习之Pytorch初步使用
我对PyTorch dataloader里的shuffle=True的理解
Python快速优雅的批量修改Word文档样式
Django migrate报错的解决方案
Django使用channels + websocket打造在线聊天室
教你怎么用python爬取爱奇艺热门电影
You might like
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
幼儿园安全检查制度
2014/01/30 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
廉政承诺书范文
2015/04/28 职场文书
辞职信怎么写?
2019/05/21 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android