教你用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发送各种形式的邮件的方法汇总
Nov 09 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
python 实用工具状态机transitions
Nov 21 Python
一篇文章带你搞懂Python类的相关知识
Python深度学习之Pytorch初步使用
我对PyTorch dataloader里的shuffle=True的理解
Python快速优雅的批量修改Word文档样式
Django migrate报错的解决方案
Django使用channels + websocket打造在线聊天室
教你怎么用python爬取爱奇艺热门电影
You might like
PHP四种基本排序算法示例
2015/04/09 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
微信小程序实现时间戳格式转换
2020/07/20 Javascript
Python判断telnet通不通的实例
2019/01/26 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
农民工创业典型事迹
2014/01/25 职场文书
中学教师教育感言
2014/02/21 职场文书
信用卡工资证明格式
2014/09/13 职场文书
授权委托书公证
2014/09/14 职场文书
2015年安全月活动总结
2015/03/26 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
总结Python使用过程中的bug
2021/06/18 Python
postgresql中如何执行sql文件
2023/05/08 PostgreSQL