题目:
需要添加的功能有
(1)图书添加(add_book):允许用户输入图书的ID、名称和位置,并将这些信息存储在全局字典 books dict中。
(2)图书剧除(del book):通过图书ID 从 books_dict 中删除图书信息。
(3)图书位置修改(modify_book):允许用户更改已存在图书的存放位置。
(4)图书借出(lend_book):将指定图书的借出状态设置为 True。
(5)图书还回(give_back):将指定图书的借出状态重置为 False。
(6)图书信息查看(select_book):提供三种查看方式:查看特定图书信息、查看所有已借出图书和查看所有图书信息。
将上述信息与GUI界面相结合
第一步:先设置窗口和标题
首先题目里说要与GUI界面相结合,所以我们要先引入tkinter模块,设置实例化窗口、标题和窗口大小,接下来往窗口里添加标题和设置它所在的位置,由于下面我们需要用到字符串变量,所以在这里设一个字符串变量,由于这是图书馆信息管理系统需要有大量信息写入,所以我们可以先设置一个空字典,方便后续的信息写入进去。
注释:Lable标签作用添加文本,其中\n作用换行,place设置标签所在位置
import tkinter as tk # 导入tkinter模块
win = tk.Tk() # 实例化窗口
win.title('图书馆管理系统') # 设置窗口标题
win.geometry('800x750') # 设置窗口大小
# 设置窗口内标题
title = tk.Label(win, text='Library management system\n-----------------------------------')
title.place(x=150, y=10)
var = tk.StringVar() # 字符串变量
book_dict = {} # 创建空字典
第二步:设置按钮实现功能
阅读题目我们知道需要实现很多种功能,所以我们可以设置多个单选按钮控制来实现这些功能
注释:text表示在按钮上显示的文本信息,variable是控制变量,value当用户启动单选按钮时,每个单选按钮的值都分配给控制变量。
# 设置单选按钮
function1 = tk.Radiobutton(win, text='添加图书信息', variable=var, value='A')
function1.place(x=20, y=50)
function2 = tk.Radiobutton(win, text='删除图书信息', variable=var, value='B')
function2.place(x=140, y=50)
function3 = tk.Radiobutton(win, text='修改图书位置', variable=var, value='C')
function3.place(x=260, y=50)
function4 = tk.Radiobutton(win, text='借出图书', variable=var, value='D')
function4.place(x=20, y=100)
function5 = tk.Radiobutton(win, text='归还图书', variable=var, value='E')
function5.place(x=140, y=100)
function6 = tk.Radiobutton(win, text='查看图书信息', variable=var, value='F')
function6.place(x=260, y=100)
第三步:功能添加图书信息
使用函数add(),设置一个大标签将之前信息覆盖掉,我们需要添加图书的id号、书名、存放位置和借书状态,因此我在这个大标签上设置四个标签和四个文本框,它们位置按顺序依次排列,当我点击添加图书信息单选按钮并点确认按钮时,会显示刚才设置的四个标签和文本框和设置的确认信息按钮,当点击按钮是实现将输入在文本框里的信息填入到字典中,要实现此功能我们需要再设置一个函数add_book(),用get()来获取上方文本框信息,将获取的信息填入到字典中,设置了一个标签是将填入到字典里的信息显示在GUI的界面中。
def add(): # 添加图书信息
lable = tk.Label(win, width=250, height=250) # 设置一个大标签
lable.place(x=20, y=190)
m1 = tk.Label(win, text='id:')
m1.place(x=20, y=220)
e1 = tk.Entry(win, bd=5)
e1.place(x=80, y=220)
m2 = tk.Label(win, text='name:')
m2.place(x=20, y=250)
e2 = tk.Entry(win, bd=5)
e2.place(x=80, y=250)
m3 = tk.Label(win, text='position:')
m3.place(x=20, y=280)
e3 = tk.Entry(win, bd=5)
e3.place(x=80, y=280)
m4 = tk.Label(win, text='is_lend:')
m4.place(x=20, y=310)
e4 = tk.Entry(win, bd=5)
e4.place(x=80, y=310)
def add_book():
l1 = e1.get();l2 = e2.get();l3 = e3.get();l4 = e4.get()
# 将获取信息填入到字典里
book_dict[l1] = {'id': l1, 'name': l2, 'position': l3, 'is_lend': l4}
# 将添加的图书信息显示在界面中
lable1 = tk.Label(win, text=f'添加图书信息为:{book_dict[l1]}')
lable1.place(x=20, y=400)
btn = tk.Button(win, text='确认信息', width=8, height=2, command=add_book)
btn.place(x=80, y=350)
第四步:功能删除图书信息
当点击删除图书信息单选按钮时并点击确认按钮时,显示一个文本(id:)、一个文本框和一个确认删除的按钮,将我要删掉的图书id,写在文本框里,当点击确认删除按钮时可以将刚才输入的图书id号相关信息从字典里删除,这时需要在设一个函数del_book()来完成此功能,l1是获取文本框里的输入的id信息,接下来用到if判断语句,如果id号在字典里,使用del将关于此id号的所有信息从字典中删除,并且将删除的具体信息显示在GUI界面中,反之,要是id号不在字典中,显示文本内容为id为{l1}的图书未找到。
def delete(): # 删除图书信息
lable = tk.Label(win, width=250, height=250)
lable.place(x=20, y=190)
m1 = tk.Label(win, text='id :')
m1.place(x=20, y=220)
e1 = tk.Entry(win, bd=5)
e1.place(x=50, y=220)
def del_book():
l1 = e1.get()
if l1 in book_dict:
delete_infor = book_dict[l1]
del book_dict[l1]
lable3 = tk.Label(win, text=f'删除图书信息为:{delete_infor}')
lable3.place(x=20, y=330)
else:
lable1 = tk.Label(win, text=f'id为{l1}的图书未找到')
lable1.place(x=20, y=330)
btn = tk.Button(win, text='确认删除', width=8, height=2, command=del_book)
btn.place(x=60, y=270)
第五步:功能修改图书位置
当点击修改图书位置单选按钮并点确认时,会显示要删除id和改后新位置,需要在文本框里输入图书的id号和修改后图书存放的新位置,设置确认修改按钮点击会执行将字典里关于此id号的图书位置信息进行更改,所以我们需要再用一个函数modify_book(),从刚才的文本框里获取信息,用if判断语句,如果获取的id号在字典里,将字典里对应位置信息更改为从文本框里获取的信息,将具体的信息显示在GUI界面中,反之,如果id号不在字典里,显示在GUI界面中的内容为此id不存在无法修改。
def modify(): # 修改图书位置
lable = tk.Label(win, width=250, height=250)
lable.place(x=20, y=190)
m1 = tk.Label(win, text='id :')
m1.place(x=20, y=220)
e1 = tk.Entry(win, bd=5)
e1.place(x=50, y=220)
m3 = tk.Label(win, text='改后新位置:')
m3.place(x=20, y=280)
e3 = tk.Entry(win, bd=5)
e3.place(x=90, y=280)
def modify_book():
l1 = e1.get();l3 = e3.get()
if l1 in book_dict:
book_info = book_dict[l1]
book_dict[l1]['position'] = l3
lable4 = tk.Label(win, text=f'修改后的图书信息:{book_info}')
lable4.place(x=20, y=390)
else:
lable5 = tk.Label(win, text='此id不存在无法修改')
lable5.place(x=20, y=390)
btn = tk.Button(win, text='确认修改', width=8, height=2, command=modify_book)
btn.place(x=60, y=350)
第六步:功能图书借书状态
当点击借出图书单选按钮时并点击确认时,会显示id文本和一个文本框,我们需要查询的图书id和确认查询按钮,输入完id号当我们点击确认查询按钮时,需要实现此id的图书状态进行更改,所以我们需要在设置一个函数lend_book(),从文本框里获取id信息,用到if判断语句,如果此id号在字典里,实现将状态改为True,并将具体信息出现在GUI界面中,反之,如果该id号不存在,显示文本内容为id为{l1}的图书未找到。
def lend(): # 借书状态
lable = tk.Label(win, width=250, height=250)
lable.place(x=20, y=190)
m1 = tk.Label(win, text='id :')
m1.place(x=20, y=220)
e1 = tk.Entry(win, bd=5)
e1.place(x=50, y=220)
def lend_book():
l1 = e1.get()
if l1 in book_dict:
book_info = book_dict[l1]
book_dict[l1]['is_lend'] = True
lable6 = tk.Label(win, text=f'借出图书信息{book_info}')
lable6.place(x=20, y=320)
else:
lable7 = tk.Label(win, text=f'id为{l1}的图书未找到')
lable7.place(x=20, y=320)
btn = tk.Button(win, text='确认查询', width=8, height=2, command=lend_book)
btn.place(x=20, y=260)
第七步:功能图书还回状态
当点击归还图书单选按钮和确认按钮时,会显示id文本和一个文本框,输入id号和确认查询按钮,当输入完id号点击确认查询按钮时,实现将字典里的状态进行更改,所以我们需要再设一个函数give_book(),从文本框里获取id信息,用到if判断语句,如果此id号在字典中,实现将图书状态更改为False,并显示具体的详情信息在GUI界面中,反之显示文本id为{l1}的图书未找到。
def give(): # 还回状态
lable = tk.Label(win, width=250, height=250)
lable.place(x=20, y=190)
m1 = tk.Label(win, text='id :')
m1.place(x=20, y=220)
e1 = tk.Entry(win, bd=5)
e1.place(x=50, y=220)
def give_book():
l1 = e1.get()
if l1 in book_dict:
book_info = book_dict[l1]
book_dict[l1]['is_lend'] = False
lable8 = tk.Label(win, text=f'归还图书信息{book_info}')
lable8.place(x=20, y=320)
else:
lable9 = tk.Label(win, text=f'id为{l1}的图书未找到')
lable9.place(x=20, y=320)
btn = tk.Button(win, text='确认查询', width=8, height=2, command=give_book)
btn.place(x=20, y=250)
第八步:功能之一查看特定图书信息
当点击查看图书信息单选按钮和确认按钮时,会显示三个按钮,上图是其中一个按钮的功能查询特定图书的信息,当点击这个按钮时,使用函数specific(),弹出查看特定图书的id的标签和文本框,和查看按钮,查看按钮的功能是将查看的信息显示出来,所以我们需要再设一个函数view(),从文本框里获取id信息,使用if判断语句,如果此id在字典中,使用标签将信息显示在GUI界面中,反之显示此id不存在。
def select():
lable = tk.Label(win, width=250, height=250)
lable.place(x=5, y=200)
def specific():
m1 = tk.Label(win, text='查看特定图书的id:')
m1.place(x=20, y=320)
e1 = tk.Entry(win, bd=5)
e1.place(x=140, y=320)
def view():
l1 = e1.get()
if l1 in book_dict:
book_info = book_dict[l1]
lable1 = tk.Label(win, text=f'id为{l1}详细信息:{book_info}')
lable1.place(x=20, y=350)
else:
lable2 = tk.Label(win, text='此id不存在')
lable2.place(x=20, y=350)
btn1 = tk.Button(win, text='查看', width=5, height=2, command=view)
btn1.place(x=400, y=300)
btn2 = tk.Button(win, text='查询特定图书信息', width=20, height=2, command=specific)
btn2.place(x=20, y=200)
功能之二查看所有已借出图书信息
当点击查看所有已借出图书按钮时,要实现把is_lend=True的图书信息都打印出来,实现此功能使用函数loaned(),使用for循环遍历整个字典,这里需要注意遍历字典键值对,输出形式将以元组的形式,所以当我们要访问时要加上索引值,打印访问后的结果在控制台上。
def loaned():
for i in book_dict.items():
if i[1]['is_lend'] == True:
print(f'所有已借出的图书:{i}')
btn3 = tk.Button(win, text='查看所有已借出图书', width=20, height=2, command=loaned)
btn3.place(x=200, y=200)
功能之三查看所有图书信息
当点击查看所有图书信息按钮时,要实现把所有信息都打印出来,所以设一个函数all(),使用for遍历整个字典,将结果打印在控制台上。
def all():
for j in book_dict.items():
print(f'所有图书信息{j}')
btn4 = tk.Button(win, text='查看所有图书信息', width=20, height=2, command=all)
btn4.place(x=100, y=250)
最后一步
我们点击相应的单选之后点确认按钮时,会对应的调用我们上方之前所设的函数。