当前位置 博文首页 > 教你用python实现一个无界面的小型图书管理系统

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

    作者:florachy 时间:2021-05-25 17:56

    一、需求了解

    功能模块

    在这里插入图片描述

    图书信息

    在这里插入图片描述

    二、环境准备

    安装mysql数据库

    参考文章:

    MySQL数据库压缩版本安装与配置

    MySQL msi版本下载安装图文教程

    创建数据库表

    • 创建数据库

    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()
    
    js
    下一篇:没有了