python搭建图书管理系统

一、项目介绍:

图书管理系统:
1.功能模块:
python搭建图书管理系统
2.图书信息
python搭建图书管理系统

二、环境准备

1.数据库的存储方式:mysql
2.通过云服务器安装一个mysql数据库,可参考博客
安装mysql数据库
3.登录数据库,创建一个表

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 ''
	
);

4.查询数据库

select * from books; 

5.插入数据

insert into books values(0,'python入门到精通','A区2号架3层','在库','1');
insert into books values(2,'java入门到精通','A区2号架4层','在库','1');
insert into books values(5,'c语言','A区2号架4层','在库','');

6.更新数据

update books set name='php',status='出借' where id=1;

三、python连接mysql数据库

1.安装pymysql

pip install pymysql

2.连接数据库

con=pymysql.connect(
    host='152.136.217.145',
    port=3306,
    user='root',
    password='123456',
    database='test',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor)

三、功能实现

1.项目主流程和菜单提示
python搭建图书管理系统
2.数据库连接
通过pymysql连接数据库,封装执行查询语句和修改语句的方法。
3.添加图书
python搭建图书管理系统
4.修改图书
python搭建图书管理系统
5.图书列表
python搭建图书管理系统
6.查询图书
1、输入书名,查询出与之匹配的图书信息,并打印
2、提示:
继续查询输入1,回车退回到主菜单
7、删除图书
1、输入书籍编号,找到对应的书籍,从数据库中删除
2、提示:
继续删除输入1,回车退回到主菜单
8、借阅图书
1、输入图书编号,查找到该书籍
2、提示用户输入借阅人名字
3、将书籍的状态改为出借,借阅人改为输入的名字
4、提示:
继续添加输入1,回车退回到主菜单
9、归还图书
1、输入图书编号,查找到该书籍
2、将书籍的状态改为在库,借阅人改为空
3、提示:
继续添加输入1,回车退回到主菜单

四、python代码实现

# @Time    : 2021/12/19 12:17
# @Author  : guiyin
# @FileName: BookManager.py
# @SoftWare: PyCharm
import pymysql
class DB:
    def __init__(self):
        # 连接数据库
        self.con = pymysql.connect(
            host='152.136.217.145',
            port=3306,
            user='root',
            password='123456',
            database='test',
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor)
        #创建游标
        self.cur = self.con.cursor()
    def query_sql(self,sql):
        """查询sql语句的方法"""
        self.cur.execute(sql)
        #返回查询到的所有结果
        return self.cur.fetchall()
    def update_sql(self,sql):
        """执行增删改sql的方法"""
        self.cur.execute(sql)
        # 提交事务
        self.con.commit()
    def close(self):
        """关闭游标,断开连接"""
        self.cur.close()
        self.con.close()
class Books:
    def __init__(self):
        self.db = DB()
    def menu(self):
        print("-" * 20 + "欢迎进入图书管理系统" + "-" * 20)
        print("-" * 20 + "菜单" + "-" * 20)
        print("【1】: 添加图书")
        print("【2】: 修改图书")
        print("【3】: 删除图书")
        print("【4】: 查询图书")
        print("【5】: 图书列表")
        print("【6】: 出借图书")
        print("【7】: 归还图书")
        print("【8】: 退出")

    def main(self):
        """程序的入口函数"""
        # 1、输出提示信息到控制台
        # 2、用户根据提示,选择功能
        # 3、判断用户的输入,执行对应的功能函数
        #用户输入
        while True:
            self.menu()
            number = input("请输入选项:")
            if number == "1":
                self.add_book()
            elif number == "2":
                self.update_book()
            elif number == "3":
                self.delete_book()
            elif number == "4":
                self.query_book()
            elif number == "5":
                self.all_book()
            elif number == "6":
                self.lend_book()
            elif number == "7":
                self.revert_book()
            elif number == "8":
                self.quit()
                break
            else:
                print("你输入的选项有误请重新输入!")
    def add_book(self):
        """添加图书"""
        """
        1.用户输入图书信息(书名、位置)
        2.将用户的输入保存到数据库(执行sql)
        3.提示用户是否继续添加
        """
        print("*" * 8 + "添加图书" + "*" * 8)
        name = input("请输入书名")
        position = input("请输入图书位置")
        sql = "insert into books(name,position )value('{}','{}') ".format(name,position)
        self.db.update_sql(sql)
        print("添加成功")
        n=input("继续添加请输入1,回车退回主菜单")
        if n =='1':
            self.add_book()


    def update_book(self):
        """修改图书"""
        print("*" * 8 + "修改图书" + "*" * 8)
        id = input("请输入修改图书编号")
        #执行查询的结果,带“”处理不报错的情况
        sql1 = f'select * from books where id="{id}"'
        res_book_dail=self.db.query_sql(sql1)
        if res_book_dail:
            print("请确认要修改的是否是以下图书 \n",res_book_dail[0])
            name = input("不修改书名直接回车,修改则输入新的书名:").strip() or res_book_dail[0]["name"]
            position = input("不修改位置直接回车,修改则输入新的位置:").strip() or res_book_dail[0]["position"]
            sql = f'update books set name="{name}",position="{position}" where id="{id}"'
            res = self.db.update_sql(sql)
            # if name and position:
            #     sql = f'update books set name="{name}",position="{position}" where id="{id}"'
            # elif name:
            #     sql = f'update books set name="{name}" where id="{id}"'
            # elif position:
            #     sql = f'update books set position="{position}" where id="{id}"'
            # else:
            #     print()
        else:
            print("你输入书籍有误或者不存在")
        n = input("继续修改请输入1,回车退回主菜单")
        if n == '1':
            self.update_book()


    def delete_book(self):
        """删除图书"""
        print("*" * 8 + "删除图书" + "*" * 8)
        id = input("请输入删除图书编号")
        # 执行查询的结果,带“”处理不报错的情况
        sql1 = f'select * from books where id="{id}"'
        res_book_dail = self.db.query_sql(sql1)
        if res_book_dail:
            print("你要删除的图书信息如下:",res_book_dail[0])
            n = input("确认删除输入1,回车取消删除")
            if n == "1":
                sql = f'delete from books where id="{id}"'
                self.db.update_sql(sql)
                print("删除成功")
            else:
                print("取消删除")
        else:
            print("你输入的图书编号不存在或者有误")
        n = input("继续删除请输入1,回车退回主菜单")
        if n == '1':
            self.delete_book()
    def query_book(self):
        """查询图书"""
        print("*" * 8 + "查询图书" + "*" * 8)
        name = input("请输入要查询的图书名称")
        # 执行查询的结果,带“”处理不报错的情况
        sql1 = f'select * from books where name="{name}"'
        res_book_dail = self.db.query_sql(sql1)
        print("图书详细信息",res_book_dail[0])
        print("查询图书成功")
    def all_book(self):
        """获取所有 图书"""
        print("*" * 8 + "图书列表" + "*" * 8)
        sql = "select * from books "
        res_book=self.db.query_sql(sql)
        for book in res_book:
            print(f'编号:{book["id"]},书名:{book["name"]},位置:{book["position"]},状态:{book["status"]},借阅人:{book["borrower"]}')

    def lend_book(self):
        """出借图书"""
        print("*" * 8 + "借阅图书" + "*" * 8)
        id = input("请输入图书编号")
        # 执行查询的结果,带“”处理不报错的情况
        sql1 = f'select * from books where id="{id}"'
        res_book_dail = self.db.query_sql(sql1)
        if res_book_dail[0]["status"] == "在库":
            borrower = input("请输入借阅者名字:")
            sql1 = 'update books set status="出借",borrower="{}" where id ="{}" '.format(borrower,id)
            res = self.db.update_sql(sql1)
            print("借阅成功!!!!")
        elif res_book_dail[0]["status"] == "出借":
            print("此书已被借出")
        else:
            print("输入有误请")
        n = input("继续借阅请输入1,回车退回主菜单")
        if n == '1':
            self.lend_book()
    def revert_book(self):
        """归还图书"""
        print("*" * 8 + "归还图书" + "*" * 8)
        id = input("请输入图书编号,查找需要归还的图书")
        # 执行查询的结果,带“”处理不报错的情况
        sql1 = f'select * from books where id="{id}"'
        res_book_dail = self.db.query_sql(sql1)
        if res_book_dail[0]["status"] == "出借":
            sql = f'update books set status="在库",borrower=null where id="{id}"'
            res=self.db.update_sql(sql)
            print("图书归还成功")
        else:
            print("图书状态有误,请检查")
        n = input("继续归还请输入1,回车退回主菜单")
        if n == '1':
            self.revert_book()

    def quit(self):
        """退出"""
        print("退出系统")
if __name__ == '__main__':
    Books().main()

上一篇:SpringBoot - 实现JSON数据的返回(将模型转成JSON字符串)


下一篇:集合增强for