首页 > 编程语言 >python小练习——图书管理系统(增加数据存储)

python小练习——图书管理系统(增加数据存储)

时间:2023-03-07 16:44:39浏览次数:40  
标签:存储 name 管理系统 python excel list book print 书籍

 

上一次我们做了一个小的图书馆里系统,用来学习python基础部分的:函数、模块、列表、字典、循环、判断

 

现在我们在上一次的基础上增加一个功能,将写入系统的书籍存放起来,这样才是一个真正意义上的系统,毕竟没有哪一家公司的系统是不会永久存放数据的。这里的功能也很简单,我们借此练习python处理excel的功能,python具体如何操作excel,可以参看之前的文章 python+excel=openpyxl(一)

 

还是一样,直接贴代码出来,具体细节已经在代码中使用注释标明

 

book_main.py:主程序,执行此程序来启动管理系统

"""
图书管理系统主程序:
用于实现启动图书馆里系统,提供欢迎信息以及操作提示信息
1、新增
2、显示所有
3、查询
0、退出
其他输入内容显示输入错误
"""
from library_manager.book_tools import *

 

while True:

# TODO 显示功能菜单
show_menu()
action = input('请选择希望执行的操作:')
print('您选择的操作是【%s】' % action)
if action in ['1', '2', '3']:
if action == '1':
# 新增
add_book()
elif action == '2':
# 显示全部
show_book()
else:
# 查询书籍
search_book()
elif action == '0':
print('欢迎再次使用图书管理系统,撒由那拉~~~')
break
else:
print('您输入的不正确,请重新选择')

book_tools.py:工具模块,实现系统的具体功能
import openpyxl

# 记录所有书籍信息
book_list = list()
# 创建一个excel的workbook对象,用来存放数据
wb = openpyxl.Workbook()
# 获取sheet表单
ws = wb.active
# 修改表单名称
ws.title = 'library_manager'
# 指定excel名称
excel_name = 'library.xlsx'

def show_menu():
"""显示菜单"""
print("*" * 20)
print('撒浪嘿呦~~~\n欢迎使用图书管理系统 ')
print("""1、新建书籍\n2、显示全部\n3、查询书籍\n\n0、退出系统""")
print("*" * 20)
return

def add_book():
"""新增书籍信息"""
print('=' * 20)
print('新增书籍')
# 1、提示用户输入名片的详细信息
name = input('请输入书籍名称:')
pub_date = input('请输入书籍出版日期:')
comment = input('请输入书籍简介:')
# 2、使用用户输入的信息建立一个书籍字典
book_dict = {"name": name,
"pub_date": pub_date,
"comment": comment
}
# 3、将书籍字典添加到列表中
book_list.append(book_dict)
# 4、确定列表中现有多少本书,需要根据书的数目来确定写入excel表格的行数
num = len(book_list)
print(book_list)
# 将book_dict字典的key写入excel表格作为表字段名
for col in range(1, len(book_dict) + 1):
ws.cell(row=1, column=col, value=list(book_dict.keys())[col - 1])
# 将数据写入到excel中,写入的是book_dict的value数据
for col in range(1, len(book_dict)+1):
ws.cell(row=num+1, column=col, value=list(book_dict.values())[col-1])
print(list(ws.values))
# 保存excel表格
wb.save(excel_name)
# 5、提示数据添加成功
print('添加 %s 成功' % name)


def show_book():
"""显示所有书籍"""
print('=' * 20)
print('显示书籍')
# 判断是否存在书籍
if len(book_list) > 0:
# 打印表头
for name in ['名称', '日期 ', '概述']:
print(name, end='\t\t')
print()
# 打印分割线
print('-' * 40)
for book in book_list:
for value in book.values():
# 获取字典中所有的值,遍历输出
print(value, end='\t\t\t')
print()
else:
print('暂无任何书籍信息,请先完成输入')

def search_book():
"""搜索书籍"""
print('=' * 20)
print('搜索书籍')
# 1、提示用户输入要搜索的姓名
book_name = input('请输入需要搜索的书籍名称:')
# 2、遍历名片列表,查询要搜索的姓名,如果没有找到,给出提示信息
# 先判断list中是否有数据,没有的话就直接打印
if len(book_list) > 0:
# 定义一个变量,确定查询的数目是在列表中的下标位置,用来确定数据所在的行数
row = 0
for book in book_list:
row += 1
if book_name == book['name']:
# 打印表头
for name in ['名称', '日期 ', '概述']:
print(name, end='\t\t')
print()
# 打印分割线
print('-' * 40)
for value in book.values():
# 获取字典中所有的值,遍历输出
print(value, end='\t\t\t')
print()
# TODO 针对找到的名片记录执行删除和修改的操作
application(book)
# 重新将新的书籍数据写入到excel表格中
for col in range(1, len(book.values())+1):
# row+1,是因为表格中的第一行是表头,所以我们需要将写入的数据行数整体下移一位才是正确的数据位置
ws.cell(row=row+1, column=col, value=list(book.values())[col-1])
# 保存excel表格
wb.save(excel_name)
break
else:
print('没有%s的相关信息' % book_name)
else:
print('没有%s的相关信息' % book_name)

def application(book_info):
"""处理查找到的书籍信息
:param book_info: 书籍的信息,数据类型为字典
"""
action = input('请输入对书籍的操作'
'1:修改\t2:删除\t0:返回上一级')
if action == '1':
book_info['name'] = input_book_info(book_info['name'], '修改姓名:')
book_info['pub_date'] = input_book_info(book_info['pub_date'], '修改出版日期:')
book_info['comment'] = input_book_info(book_info['comment'], '修改概述:')
elif action == '2':
book_list.remove(book_info)
print('已删除%s' % book_info['name'])

def input_book_info(book_value, tip_message):
"""完成数据修改内容
:param book_value: 书籍原有的信息,外部传入
:param tip_message: 输入时的提示信息
:return:
"""
# 1、提示用户输入内容
value = input(tip_message)
# 2、针对用户的输入进行判断,如果用户输入了内容,直接返回结果
if len(value) > 0:
return value
else:
return book_value
# 3、如果用户没有输入内容,返回字典中原有的值

具体效果:
数据完成插入,修改之后,会写入到一个excel文件中

标签:存储,name,管理系统,python,excel,list,book,print,书籍
From: https://www.cnblogs.com/xmxit/p/17188565.html

相关文章

  • 虹科方案 | 助力高性能视频存储解决方案-1
    虹科电子科技有限公司是ATTO技术公司在中国的官方合作伙伴。依附于我们十多年的客户积累和方案提供经验,虹科与ATTO共同致力于为数据密集型计算环境提供网络和存储连接以及......
  • Python3,2分钟掌握Doscoart库,你也能成为艺术家。
    1、引言小屌丝:鱼哥,最近在忙啥?小鱼:咱俩陌生了?小屌丝:何出此言?小鱼:你说的话又嘛意思呢?小屌丝:我的意思,最近看你这整理各种资料,貌似很忙的样子?小鱼:我平时不也这么忙嘛小......
  • python操作pandas的笔记
    importpandasaspddata={'name':['Alice','Bob','Charlie','David'],'age':[25,30,35,40],'gender':['F','M','M','M'......
  • 减少80%存储-风控名单服务重构剖析
    引言小小的Redis大大的不简单,本文将结合风控名单服务在使用Redis存储数据时的数据结构设计及优化,并详细分析redis底层实现对数据结构选型的重要性。背景先来交代......
  • Python中Index的用法
    1.Index常用于Python的List数据类型在Python中有一种数据类型叫作List数据类型。程序员口中和中文翻译过来都称之为List数据类型,而Index主要用于List数据类型中。Index......
  • 使用Python操作Mysql数据库(进阶)
    #-*-coding:utf-8-*-importloggingimportpymysqlfromrest_framework.responseimportResponselogger=logging.getLogger(__name__)#连接数据库def......
  • Python 内置函数装饰器 classmethod staticmethod
    使用官方的说法:classmethod(function)中文说明:classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:classC:@classmetho......
  • 基于ElementUI和Vue.js的SUNBOOK图书后台管理系统(纯HTML、原生Java后端开发)
    一、项目介绍-使用element-ui、axios和Vue.js实现SUNBOOK的页面结构及网页请求-通过JSON传递请求与响应参数-在后端使用JdbcUtilsByDruid实现对数据的增加、删除、......
  • Python2.0与Python3.0的区别
    Python2.0与Python3.0的区别输出方面Python2.0使用print关键字进行输出,比如:print“Hello”;Python3.0使用print()函数,比如:print("Hello")。输入方面Python2.0......
  • python奇葩反爬-你是故意的还是不小心的
    问题在挖掘数据时,数据存在于js文件内,所以主要思路就是,把数据提取出来,直接转json格式,通过字典的键索引获取数据。奈何在转json格式的时候一直报错。报错:Expectingvalue:......