教你用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操作MySQL的一些基本方法
Aug 16 Python
python实现下载文件的三种方法
Feb 09 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
Python rstrip()方法实例详解
Nov 11 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
Python中断多重循环的思路总结
Oct 04 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
解决django FileFIELD的编码问题
Mar 30 Python
PYTHON InceptionV3模型的复现详解
May 06 Python
一篇文章带你搞懂Python类的相关知识
Python深度学习之Pytorch初步使用
我对PyTorch dataloader里的shuffle=True的理解
Python快速优雅的批量修改Word文档样式
Django migrate报错的解决方案
Django使用channels + websocket打造在线聊天室
教你怎么用python爬取爱奇艺热门电影
You might like
How do I change MySQL timezone?
2008/03/26 PHP
php mssql 时间格式问题
2009/01/13 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
python图片验证码生成代码
2016/07/02 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
培训班主持词
2014/03/28 职场文书
小学生优秀评语大全
2014/04/22 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
公司口号大全
2014/06/11 职场文书
归元寺导游词
2015/02/06 职场文书
高一数学教学反思
2016/02/18 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
python基础之类属性和实例属性
2021/10/24 Python