教你用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 相关文章推荐
Python深入学习之内存管理
Aug 31 Python
Python中的装饰器用法详解
Jan 14 Python
python生成随机mac地址的方法
Mar 16 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
判断网页编码的方法python版
Aug 12 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
numpy matrix和array的乘和加实例
Jun 28 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
Django ORM 查询管理器源码解析
Aug 05 Python
python getpass模块用法及实例详解
Oct 07 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
一篇文章带你搞懂Python类的相关知识
Python深度学习之Pytorch初步使用
我对PyTorch dataloader里的shuffle=True的理解
Python快速优雅的批量修改Word文档样式
Django migrate报错的解决方案
Django使用channels + websocket打造在线聊天室
教你怎么用python爬取爱奇艺热门电影
You might like
mysql limit查询优化分析
2008/11/12 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
Python合并字符串的3种方法
2015/05/21 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
心得体会开头
2014/01/01 职场文书
高中美术教学反思
2014/01/19 职场文书
大学毕业感言50字
2014/02/07 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
创建青年文明号材料
2014/05/09 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
大学生十八大感想
2015/08/11 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
导游词之井冈山
2019/11/20 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
Python中with上下文管理协议的作用及用法
2022/03/18 Python