python实现图书管理系统(超详细)

news2024/11/25 18:37:10

python实现图书管理系统

图书管理系统

    • python实现图书管理系统
          • 图书管理系统:
          • 图书的功能:
          • 现在开始添加数据:
      • 增加数据
      • 删除数据
      • 查询数据
      • 图书位置修改
      • 图书的借出
      • 图书的还回
      • 主体界面
      • 完整代码
      • 功能运行截图

实验环境:PyCharm 2021.1.3 x64 专业版
在这里插入图片描述

图书管理系统:

数据的存储 系统的功能
图书的数据:

图书id(每一个id对应一本书)
图书名称
图书位置
图书是否借出

接下来便是数据的存储,数据的存储有链接: 列表, 元组,字典等,在本次图书管理系统中,我们使用字典进行存储,一般情况下,复杂的数据存储建议使用字典存储。后期学习完文件操作后,可以将数据存储到文件中,方便使用。在本次实验中,基本上每行代码都有相应的注释,方便读者阅读,如果遇到什么不懂的问题可以私信我,我会帮忙解决滴!!

本次实验中,我会将模块分开一个一个提出来讲解,方便读者理解。

图书信息在字典中的存储形式:

图书id作为key
图书名称,图书位置,图书是否借出作为value

字典存储数据也是有缺点的,不能持久化的存储数据,只能在内存中临时使用。

图书的功能:

图书功能一般都是增删改查四大功能
增:图书添加
删:图书删除
改:图书位置修改(图书id 图书名称 不能修改)
查:图书查询(图书信息查询)
图书信息查询包括:
图书id查询 图书名称查询 图书位置查询
再增加一个功能 图书的借出和归还功能

在这里插入图片描述
在这里插入图片描述

现在开始添加数据:
books_dict = {}
数据先存储到字典中

存储那些数据包括:
图书id 图书名称 图书位置

增加数据

第一步:
创建增加图书功能
代码如下:

def add_book():
    """增加图书信息"""
    book_id = input("请输入书的id:")  # key
    book_name = input("请输入书的名称:")  # value
    book_position = input("请输入书的位置:")  # value
    is_lend = False  # 是否借出

    books_dict[book_id] = {"book_name": book_name,
                           "book_position": book_position,
                           "is_lend": is_lend}  # 将输入的图书信息存储到字典
    print(f"数据添加完成:{books_dict}:{books_dict[book_id]}")  # 显示添加数据后的信息

删除数据

删除数据,通过查询id删除
代码如下:


def del_book():
    """删除图书信息"""
    book_id = input("请输入书的id:")
    book_info = books_dict[book_id]   # 通过key获取字典的数据 字典数据的获取
    del books_dict[book_id]           # 删除字典里面指定key数据  字典
    print(f"删除图书:{book_id}:{book_info}")

查询数据

查找图书信息
包括:查找详细的图书,查找已经借出的图书,查看所有的图书信息
代码如下:

def select_book(): # 查找详细的图书 查找已经借出的图书 查看所有的图书信息
    """查找图书的信息"""
    print("1:查找详细的图书 2:查找已经借出的图书 3:查看所有的图书信息")
    sub_code = input("请您输入需要使用的功能:")

    if sub_code == "1":
        book_id = input("请输入书的id:")
        print(books_dict[book_id])      # 通过key获取字典key相关的数据

    elif sub_code == "2":
        for i in books_dict.items():   # 字典课程 字典操作方法
            if i[1]["is_lend"]:        # 筛选字典的数据 i[1] 字符串的操作 字符串的索引
                print(i)

    elif sub_code == "3":
        for i in books_dict.items():
            print(i)

图书位置修改

在前面说过,图书id,图书名称是唯一的,不能修改,所以我们能修改的只有图书的位置。
代码如下:

def modify_book():
    """图书位置的修改"""    # 字典数据的修改
    book_id = input("请输入书的id:")  # key
    book_position = input("请输入书存放新的位置:")
    books_dict[book_id]['book_position'] = book_position
    print(f"修改后的数据:{book_id}:{books_dict[book_id]}")


图书的借出

通过id进行图书的借出(如果通过图书名称,会出现错误,因为名称相同的图书可能不止一本。)

def lend_book():
    """图书的借出"""
    book_id = input("请输入书的id:\n")
    books_dict[book_id]["is_lend"] = True

图书的还回

通过图书的id进行还回

def give_back():
    """图书的还回"""
    book_id = input("请输入书的id:\n")
    books_dict[book_id]["is_lend"] = False

主体界面


while True:  # while 循环
    print("-" * 60)     # * 复制容器里面的数据
    print("1:图书添加  2:图书删除 3:图书位置修改 \n "
          "4:图书借出  5:图书还回 6:图书信息查看  7:退出系统")
    func_code = input("请您输入需要是使用的功能:")
    print("-" * 60)

    # func_dict = {"1": add_book}
    # 这么写可以让我们以更简单的方式来访问字典中的函数。而不是用字典中的字符串指定函数,我们可以直接用字典中的整数访问函数。

    if func_code == "1":  # func_code 需要注意输入的数据类型
        add_book()        # 函数的调用
    elif func_code == "2":
        del_book()
    elif func_code == "3":
        modify_book()
    elif func_code == "4":
        lend_book()
    elif func_code == "5":
        give_back()
    elif func_code == "6":
        select_book()
    elif func_code == '7':
        break        # 循环里面的关键字  只能在循环里面使用
    else:
        print("输入的选项id无效!")
';

完整代码

def add_book():
    """增加图书信息"""
    book_id = input("请输入书的id:")  # key
    book_name = input("请输入书的名称:")  # value
    book_position = input("请输入书的位置:")  # value
    is_lend = False  # 是否借出

    books_dict[book_id] = {"book_name": book_name,
                           "book_position": book_position,
                           "is_lend": is_lend}  # 将输入的图书信息存储到字典
    print(f"数据添加完成:{books_dict}:{books_dict[book_id]}")  # 显示添加数据后的信息


def del_book():
    """删除图书信息"""
    book_id = input("请输入书的id:")
    book_info = books_dict[book_id]   # 通过key获取字典的数据 字典数据的获取
    del books_dict[book_id]           # 删除字典里面指定key数据  字典
    print(f"删除图书:{book_id}:{book_info}")


def select_book(): # 查找详细的图书 查找已经借出的图书 查看所有的图书信息
    """查找图书的信息"""
    print("1:查找详细的图书 2:查找已经借出的图书 3:查看所有的图书信息")
    sub_code = input("请您输入需要使用的功能:")

    if sub_code == "1":
        book_id = input("请输入书的id:")
        print(books_dict[book_id])      # 通过key获取字典key相关的数据

    elif sub_code == "2":
        for i in books_dict.items():   # 字典课程 字典操作方法
            if i[1]["is_lend"]:        # 筛选字典的数据 i[1] 字符串的操作 字符串的索引
                print(i)

    elif sub_code == "3":
        for i in books_dict.items():
            print(i)


def modify_book():
    """图书位置的修改"""    # 字典数据的修改
    book_id = input("请输入书的id:")  # key
    book_position = input("请输入书存放新的位置:")
    books_dict[book_id]['book_position'] = book_position
    print(f"修改后的数据:{book_id}:{books_dict[book_id]}")


def give_back():
    """图书的还回"""
    book_id = input("请输入书的id:\n")
    books_dict[book_id]["is_lend"] = False


def lend_book():
    """图书的借出"""
    book_id = input("请输入书的id:\n")
    books_dict[book_id]["is_lend"] = True


while True:  # while 循环
    print("-" * 60)     # * 复制容器里面的数据
    print("1:图书添加  2:图书删除 3:图书位置修改 \n "
          "4:图书借出  5:图书还回 6:图书信息查看  7:退出系统")
    func_code = input("请您输入需要是使用的功能:")
    print("-" * 60)

    # func_dict = {"1": add_book}
    # 这么写可以让我们以更简单的方式来访问字典中的函数。而不是用字典中的字符串指定函数,我们可以直接用字典中的整数访问函数。

    if func_code == "1":  # func_code 需要注意输入的数据类型
        add_book()        # 函数的调用
    elif func_code == "2":
        del_book()
    elif func_code == "3":
        modify_book()
    elif func_code == "4":
        lend_book()
    elif func_code == "5":
        give_back()
    elif func_code == "6":
        select_book()
    elif func_code == '7':
        break        # 循环里面的关键字  只能在循环里面使用
    else:
        print("输入的选项id无效!")

功能运行截图

图书添加:
在这里插入图片描述
在这里插入图片描述

图书删除:
在这里插入图片描述
图书位置修改:
在这里插入图片描述
图书借出:
在这里插入图片描述
图书归还:
在这里插入图片描述
图书信息查看:
在这里插入图片描述
退出系统:在这里插入图片描述

在这里插入图片描述

“过去的33年里,我每天早上看着镜子问自己:“今天是我生命的最后一天吗?我是否要去做今天该做的事?”一天一天太多次是“不是”,我知道这需要改变…所有的事情——所有身外的期望,所有的骄傲,所有的对困难和失败的恐惧——这些东西在死亡面前立刻消失的无影无踪,只剩下真正重要的东西。想着自己即将死去,这是让我避免落入担心失去什么的陷阱里的最好的方法。”
—— Steve Jobs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解JAVA字节码

目录 1.概述 2.字节码文件构成 2.1.魔数 2.2.版本号 2.3.常量池 2.4.访问标志 2.5.索引 2.6.字段表 2.7.方法表 3.字节码指令 3.1.概述 3.2.指令分类 3.2.1.加载存储指令 3.2.2.运算指令 3.2.3.其他指令 3.3.完整指令工作流程 4.字节码保护 1.概述 以往的编程…

浅析安科瑞能耗监测云平台在公共建筑上的应用及未来发展趋势

摘要:文章以每年发布的上海市国家机关办公建筑和大型公共建筑能耗监测及分析报告变化为切入点,分析了历年能耗分析报告的内容和功能变化;介绍了上海市国家机关办公建筑和大型公共建筑能耗监测平台发展和应用历程;揭示了当下显现的…

MOV压敏电阻应用推荐及选型要点说明

ESD器件-MOV压敏电阻是一种非线性的电阻元器件产品,具有瞬态电压抑制功能,能够吸收电路中多余的电流,可保护一些敏感电路及其他电子产品设备的电路不受ESD、雷击瞬态浪涌电流的危害。对于它的一些应用范围,优恩小编在这里举例说明…

2.SpringSecurity源码的初探

SpringSecurity源码的初探 一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用Spring Security XML名称…

【python】深入了解Selenium-PageObject

1、PageObject 定义 Page Object(简称PO)模式,是Selenium实战中最为流行,并且是自动化测试中最为熟悉和推崇的一种设计模式。在设计自动化测试时,把页面元素和元素的操作方法按照页面抽象出来,分离成一定的对象,然后再…

MySQL - 索引 与 事务

前言 本篇介绍MySQL的索引与事务,了解底层索引B树的基本思想, 了解事务的4大特征, 隔离性解决事务并发等问题; 如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录前言1. 数据库索引1.1 B树1.2 B树2. 事务总…

Linux -- 查看进程 top命令 详解

我们上篇介绍了, Linux 中的进程等概念,那么,在Linux 中如何查看进程呢 ??我们常用到的有两个命令, PS 和 top 两个命令,今天先来介绍下 top 命令~!top 命令 :主要是 交…

Unity 入门精要00---Unity提供的基础变量和宏以及一些基础知识

头文件引入: XXPROGRAM ... #include "UnityCG.cginc"; ... ENDXX 常用的结构体(在UnityCg.cginc文件中):在顶点着色器输入和输出时十分好用 。 关于如何使用这些结构体,可在Unity安装文件目录/Editor…

解压缩工具:Bandizip 中文

bandizip是一款可靠和快速的压缩软件,它可以解压RAR、7Z、ZIP、ISO等数十种格式,也可以压缩7Z、ZIP、ISO等好几种常用格式,在压缩文件方面毫不逊色于winrar,适用于多核心压缩、快速拖放、高速压缩等功能,采用了先进快速…

csapp第二章 --- 信息的表示和处理

本章重点纲要 目录 2.1 数据存储 2.1.1 进制 2.1.2 数据在内存的存储方式---大小端 2.1.3 C语言的一些知识 2.2 整数表示 2.2.1 二进制表示整数 2.2.2 扩展、截断 2.3 整数运算 2.3.1 加减法与溢出 2.3.2 逆元和补码的非 2.3.3乘法 2.4浮点数 2.4.1 IEEE规则 2.…

2023年中职组网络安全竞赛——综合渗透测试解析

综合渗透测试 题目如下: PS:需求环境可私信博主,求个三连吧! 解析如下: 通过本地PC中的渗透测试平台KALI2020对服务器场景进行渗透攻击,获取到RSYNC服务所开放的端口,将RSYNC服务开放的端口数值进行MD5加密后作为FLAG提交(如MD5加密前:812);

spark性能调优(二):内存

Memory 一、spark内存简介二、堆内内存 or 堆外内存?三、如何用好RDD Cache?四、OOM怎么办?一、spark内存简介 spark 2.0后,基本上spark内存的管理就已经自动化了,内存出现问题基本上是一些数据问题。比如数据倾斜 spark.executor.memory是绝对值,指定了executor进程的JVM…

毕业设计 基于stm32舞台彩灯控制器设计app控制系统

基于stm32舞台彩灯控制器设计app控制1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STM32F103C8T6核心系统电路设计2.2 WS2812RGB彩灯电路设计3、部分代码展示3.1 控制WS2812显示颜色3.2 设置RGB灯的颜色,角度,亮度实物图1、项目简介 选题指导…

Pluma 插件管理框架

1. 概述 Pluma 是一个用 C 开发的可用于管理插件的开源架构,其官网地址为:http://pluma-framework.sourceforge.net/。该架构是个轻量级架构,非常易于理解。 Pluma 架构有以下基本概念: 1)插件的外在行为体现为一个…

JavaSE:集合框架

为什么用集合框架如果不知道需要多少对象,或者用较为复杂的方式存储对象,可以用集合框架集合框架包含的内容ArrayList实践.size().add(Object o) .add(int index, Object o).get(int index).contains(Object o).remove(Object o) .remove(int…

高精度电流源如何设计出来

随着科技的不断进度,高精度电流源在自动测试/测量以及各种应用中承担着重要的作用。然而想要更高精度的指标参数,就需要电流源仪器研发得更完善。众所周知,高精度电流源是电子实验中重要的测试仪器,能够广泛应用在电化学、电光源、…

深入理解Windows操作系统机制(一)

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。我们每天都在用Windows操作系统,但是其实我们每天直接在打交道的并不是Windows操作系统的内核,而是Windows操作系统的…

pytorch入门7--自动求导和神经网络

深度学习网上自学学了10多天了,看了很多大神的课总是很快被劝退。终于,遇到了一位对小白友好的刘二大人,先附上链接,需要者自取:https://b23.tv/RHlDxbc。 下面是课程笔记。 一、自动求导 举例说明自动求导。 torch中的…

Python 数据库连接 + 创建库表+ 插入【内含代码实例】

人生苦短 我用python Python其他实用资料:点击此处跳转文末名片获取 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB.在TESTDB数据库中您已经创建了表 EMPLOYEEEMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。连…

前端css整理

如何水平垂直居中一个盒子? 1.已知高度:子盒子设置 display: inline-block; 父盒子设置 line-height 等于高度实现垂直居中;使用 text-align:center实现水平居中 2.父盒子 display:flex; align-items:center;justify-content:center; 3.定位&…