图书馆管理系统与GUI界面相结合,案例详解

题目:

需要添加的功能有

(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)

最后一步

我们点击相应的单选之后点确认按钮时,会对应的调用我们上方之前所设的函数。

图书资料管理信息系统,带源代码、数据库sql文件、课设报告,具备如下基本功能: 1、 系统管理功能有:角色管理、用户管理、修改密码。主要实现系统的安全管理,不同的操作者有不同的权限,可以执行不同的操作。普通读者的权限只能是查询图书及自己的借阅情况;而图书馆管理员可以对图书信息进行管理,如对新书入库,也可以管理用户,如添加新用户和删除不用的账号等。 2、 进书管理功能有:登记基本的图书信息。这部分的功能用于登记新书的书名、作者、出版社、价格、进书的册数、进书日期、ISBN等。 3、 图书入库管理功能有:对新书分类编目,及时更新图书库中的图书信息。这部分的功能用于对所购进的新书,按其种类学科进行编目,给唯一的书号;及时更新书库中的图书信息,包括书名、书号、作者、出版社、价格、库存位置和库存册数这些信息,方便读者查询借阅。 4、 查询功能功能有:查询图书的信息,查询读者的借阅情况。这部分的功能主要提供多种方式的查询服务。读者可以根据书名、作者或关键字模糊查询图书信息;读者也可以根据自己的借书证号查询自己的借阅情况,如已借了几本书,借书日期,还书日期,有没有续借等。 5、 借书/还书管理功能有:借书管理、还书管理。这部分的功能是当读者借书时,系统根据借书证号识别读者身份,核对读者的借书信息,做出判断如可不可以借、还可借几本,成功借阅后记录在借书信息并修改书库图书信息。当读者还书时,系统根据借书证号识别读者身份,核对读者的借书信息,做出判断如有没有超期,要不要罚款,需要罚多少等,最后还书成功,修改书库图书信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值