前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现简单的图书管理程序

python实现简单的图书管理程序

作者头像
梦无矶小仔
发布2022-06-30 18:50:06
9190
发布2022-06-30 18:50:06
举报
文章被收录于专栏:梦无矶的测试开发之路

项目流程

通过python的面向对象编程,实现一个文字版的图书管理系统

  • 本章节的目的,强化大家编程的逻辑思维能力
  • 知识点
    • 基本的sql增删改查
    • 面向对象的使用

1、项目介绍

  • 功能模块
  • 图书信息

2.环境准备

数据存储方式:mysql

  • 创建表
代码语言:javascript
复制

create table books( 
    id int unsigned primary key auto_increment not null, 
    name varchar(20) default '', 
    position varchar(40) default '', 
    status enum('在库','出借') default '在库', 
    borrorwer varchar(20) default '' 
);
  • 插入数据
  • # 部分列插入语法:=> insert into 表名(列1,...) values(值1,...)
代码语言:javascript
复制
insert into books(name,position) value('python入门到精通','A区2号架3层');
  • # 全列插入语法=> insert into 表名 values(...)
代码语言:javascript
复制
insert into books value(0,'python入门到精通','A区2号架3层','在库','');
  • 修改数据
代码语言:javascript
复制
update 表名 set 列1=值1,列2=值2... where 条件
  • 删除数据语法
代码语言:javascript
复制
delete from 表名 where 条件;
  • 查询
代码语言:javascript
复制
select * from 表名;

python连接mysql数据库

# 安装pymysql pip install pymysql

  • 连接数据库
代码语言:javascript
复制
pymysql.connect(
    host='localhost', 
    user='root', 
    password="123456", 
    database='test', 
    port=3306, 
    cursorclass=pymysql.cursors.DictCursor)
  • 创建游标对象
  • 执行sql语句

3.功能实现

1.项目主流程和菜单提示
  • 1、运行程序,打印提示菜单
  • 2、根据输入不同的选项进行对应的操作
2.数据库连接
  • 通过pymysql连接数据库,封装执行查询语句和修改语句的方法。
3.添加图书
  • 1、用户依次输入书名、存放位置
  • 2、校验输入的书名和位置是否有值
  • 3、添加图书到数据库
  • 4、提示:
    • 继续添加输入1,回车退回到主菜单
4.修改图书

需求:修改图书只能修改书名和位置信息。

  • 1、用户输入修改的图书编号,判断id是否存在
  • 2、编号存在则打印改书本的全部信息,并提示用户输入新的书名,和新的位置。
  • 3、根据用户的输入,对图书进行修改
  • 4、提示:
    • 继续添加输入1,回车退回到主菜单
5.图书列表
  • 查询数据库中所有的图书,打印出来显示
6.查询图书
  • 1、输入书名,查询出与之匹配的图书信息,并打印
  • 2、提示:
    • 继续查询输入1,回车退回到主菜单
7.删除图书
  • 1、输入书籍编号,找到对应的书籍,从数据库中删除
  • 2、提示:
    • 继续删除输入1,回车退回到主菜单
8.借阅图书
  • 1、输入图书编号,查找到该书籍
  • 2、提示用户输入借阅人名字
  • 3、将书籍的状态改为出借,借阅人改为输入的名字
  • 4、提示:
    • 继续添加输入1,回车退回到主菜单
9.归还图书
  • 1、输入图书编号,查找到该书籍
  • 2、将书籍的状态改为在库,借阅人改为空
  • 3、提示:
    • 继续添加输入1,回车退回到主菜单

python操作数据库

代码语言:javascript
复制
pymysql_practice.py
import pymysql

#pymysql连接数据库
con = pymysql.connect( host='localhost',
                 user='root',
                 password="123456",
                 database='lenovo',
                 port=3306,
                 cursorclass=pymysql.cursors.DictCursor)

#创建一个游标对象
cur = con.cursor(cursor=pymysql.cursors.DictCursor) #以字典形式展示数据

#执行sql
sql = "select * from books"
res = cur.execute(sql)
print(res)

#获取查询的结果
result1 = cur.fetchall()
print(result1)

#执行增删改的sql
sql = 'insert into books(name,position) value("天龙八部","A区1号架1层");'
res2 = cur.execute(sql)

#提交事务
con.commit()
print(res2)
con.close()

图书管理小项目

BookManage.py

代码语言:javascript
复制
import pymysql


class DB:
    '''
    项目涉及到数据库的增删查改,咱们封装数据库对应的操作方法来处理
    查询的方法
    增删改的方法
    '''

    def __init__(self):
        # pymysql连接数据库
        self.con = pymysql.connect(host='localhost',
                              user='root',
                              password="123456",
                              database='lenovo',
                              port=3306,
                              cursorclass=pymysql.cursors.DictCursor)

        # 创建一个游标对象
        self.cur = self.con.cursor(cursor=pymysql.cursors.DictCursor)  # 以字典形式展示数据

    def query_sql(self,sql):
        '''
        查询sql方法
        :param sql: sql语句
        :return: 查询得到的结果
        '''
        self.cur.execute(sql)
        return self.cur.fetchall()

    def update_sql(self,sql):
        '''
        :param sql: sql语句
        :return:
        '''
        self.cur.execute(sql)
        self.con.commit()

    def close(self):
        """关闭游标,断开连接"""
        self.cur.close()
        self.con.close()

class Books(DB):

    def add_book(self):
        '''添加图书'''
        print("---------添加图书--------")
        name = input("请输入书名:")
        position = input("请输入图书存放的位置:")
        if name and position:
            sql = "insert into books(name,position) value('{}','{}')".format(name,position)
            self.update_sql(sql)
            print("添加成功!")
        else:
            print("添加失败,书名和位置均不能为空!!!")

        n = input("继续添加请输入1,回车返回主菜单")
        #判断用户输入的是否为1,为1则再次调用添加图书的方法
        if n == "1":
            self.add_book()
        else:
            pass

    def update_book(self):
        '''修改图书'''
        print("----------修改图书------------")
        id = input("请输入要修改图书的ID")
        #打印图书的信息
        res = self.query_sql(f'select * from books where id={id}')
        if res:
            print("当前图书的信息",res)
            # 进行修改
            name = input("请输入新的书名,不修改请输入回车:") or res[0]['name']
            position = input("请输入图书存放的位置,不修改请输入回车:") or res[0]['position']
            sql = f'update books set name = "{name}",position="{position}" where id="{id}"'
            self.update_sql(sql)
            print("修改成功!")
        else:
            print("您输入的书籍id不存在")
        n = input("继续修改请输入1,回车返回主菜单")
        if n == "1":
            self.update_book()
        else:
            pass

    def del_book(self):
        '''删除图书'''
        print("----------删除图书------------")
        id = input("请输入删除图书的id:")
        # 打印图书的信息
        res = self.query_sql(f'select * from books where id={id}')
        if res:
            print("您要删除的书籍信息如下:",res)
            is_delete = input("确认删除请输入1,否则请输入回车:")
            if is_delete == "1" and res[0]["status"]=="在库":
                sql = 'delete from books where id = {id}'
                self.update_sql(sql)
                print("删除成功")
            elif res[0]["status"]=="出借":
                print("本书已出借,无法删除!")
        else:
            print("您输入的书籍id不存在")
        #判断是否要继续删除
        n = input("继续删除请输入1,回车返回主菜单")
        if n == "1":
            self.del_book()
        else:
            pass



    def qurey_book(self):
        '''查询图书'''
        print("----------查询图书------------")
        name = input("请输入要查询的图书名:")
        if name:
            sql = f"select * from books where name = '{name}' "
            res = self.query_sql(sql)

            if res:
                for i in res:
                    print(i)
            else:
                print("图书馆暂无该书籍!")
        else:
            print("书名不能为空!")
        # 判断是否要继续查询
        n = input("继续查询请输入1,回车返回主菜单")
        if n == "1":
            self.qurey_book()
        else:
            pass


    def book_list(self):
        '''图书列表'''
        sql = "select * from books"
        res = self.query_sql(sql)
        print("****************图书列表***************")
        for i in res:
            print(f'编号:{i["id"]},书名:{i["name"]},位置:{i["position"]},'
                  f'转态:{i["status"]},借阅人:{i["borrorwer"]}')

        print("返回主菜单页面")

    def revert_book(self):
        '''归还图书'''
        print("----------删除图书------------")
        id = input("请输入要归还图书的ID:")
        sql = f'select * from books where id = {id}'
        res = self.query_sql(sql)
        if res:
            print("您要归还的图书信息如下:\n",res)
            #查看图书的状态,如果状态为出借,则不能借出
            if res[0]["status"] == "出借":
                status = "在库"
                lend_sql =  f'update books set status="{status}",borrorwer=" " where id="{id}"'
                self.update_sql(lend_sql)
                print("归还成功")
            else:
                print("本书并未出借!")
        else:
            print("请输入正确的图书编号!")

        # 判断是否要继续租借
        n = input("继续归还请输入1,回车返回主菜单")
        if n == "1":
            self.revert_book()
        else:
            pass


    def lend_book(self):
        '''租借图书'''
        print("----------租借图书------------")
        id = input("请输入要租借图书的ID:")
        sql = f'select * from books where id = {id}'
        res = self.query_sql(sql)
        if res:
            print("您要借阅的图书信息如下:\n",res)
            #查看图书的状态,如果状态为出借,则不能借出
            if res[0]["status"] == "出借":
                print("该图书已被借出!")
            else:
                print("本书可借出!")
                borrorwer = input("借书请输入您的名字:")
                status = "出借"
                lend_sql =  f'update books set status="{status}",borrorwer="{borrorwer}" where id="{id}"'
                self.update_sql(lend_sql)
                print("登记成功,借阅成功!")
        else:
            print("图书馆暂无该书籍!")

        # 判断是否要继续租借
        n = input("继续租借请输入1,回车返回主菜单")
        if n == "1":
            self.lend_book()
        else:
            pass

    def quit(self):
        '''退出'''
        self.close()
        print("程序退出!!!")


    def print_menu(self):
        '''打印菜单'''
        print("-----菜单---------")
        print("【1】︰添加图书\n"
              "【2】:修改图书\n"
              "【3】:删除图书\n"
              "【4】:查询图书\n"
              "【5】:图书列表\n"
              "【6】:出借图书\n"
              "【7】:归还图书\n"
              "【8】:退出")

    def main(self):
        print("---------------欢迎进入小仔图书管理系统---------------")
        while True:
            self.print_menu()
            number = input("请输入你的选项:")
            if number == '1':
                self.add_book()
            elif number == "2":
                self.update_book()
            elif number == "3":
                self.del_book()
            elif number == "4":
                self.qurey_book()
            elif number == "5":
                self.book_list()
            elif number == "6":
                self.lend_book()
            elif number == "7":
                self.revert_book()
            elif number == "8":
                self.quit()
                break
            else:
                print("您输入的选项有误!憨批!")


if __name__ == '__main__':
    book = Books()
    book.main()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 梦无矶的测试开发之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目流程
    • 1、项目介绍
      • 2.环境准备
        • 3.功能实现
          • 1.项目主流程和菜单提示
          • 2.数据库连接
          • 3.添加图书
          • 4.修改图书
          • 5.图书列表
          • 6.查询图书
          • 7.删除图书
          • 8.借阅图书
          • 9.归还图书
      • python操作数据库
        • 图书管理小项目
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档