上一次我们做了一个小的图书馆里系统,用来学习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文件中