python实例1- 图书馆管理系统(Gui页面)

综合练习实例 

创建一个 Book 类,分别具有以下功能。

(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):提供一种查看方式:查看特定图书信息。

#查看所有已借出图书or查看所有图书信息。#

(7)退出系统:结束程序循环

写前构思

首先需要知到我们大概要做一个什么样的页面,ta有哪些必需元素,ta要用什么样的方式去实现

整体流程

要用Gui页面显示,首先需要创建一个窗口,导入了 Python tkinter库,它是 Python 用于创建图形用户界面(GUI)的标准库。为了方便简写成tk

import tkinter as tk

创建了一个Tk对象,这是tkinter应用程序的主窗口。并设置主窗口的标题和规格大小

这里设置主窗口的大小为宽 600 像素、高 400 像素。

win=tk.Tk()
win.title("图书管理系统")
win.geometry("600x400")

创建一个标签组件,写入文本用来作为主界面显示文本,使用grid布局管理器将标签放置在主窗口的第 0 行第 1 列的位置

stort=tk.Label(win,text="图书管理系统\n-----------------------------------------")
stort.grid(row=0,column=1)

接下来要为gui界面框架添加必需的组件,标签,输入框,按钮,允许用户输入图书的 ID、名称和位置,我们需要有“id”,“name” , ”address” , 创建三个标签组件,显示我们相关的文本信息,并创建对应的输入框

t1 = tk.Label(win, text="id")
t1.grid(row=1)
t2 = tk.Label(win, text="name")
t2.grid(row=2)
t3 = tk.Label(win, text="address")
t3.grid(row=3)

e1=tk.Entry()
e1.grid(row=1,column=1)
e2 = tk.Entry()
e2.grid(row=2,column=1)
e3 = tk.Entry()
e3.grid(row=3,column=1)

运代码可以发现gui窗口已有雏形

添加图书,创建一个按钮作为开关,点击按钮可以达到添加图书的目的

win 是按钮的父容器,text = "add" 设置按钮上显示的文本为 add。command = Add 表示当按钮被点击时,会调用名为 Add 的函数。(row = 5, column = 0) 使用 grid 布局管理器将按钮放置在父容器中的第 5 行第 0 列

然后用函数方法写出图书的添加,这里我添加一个标签作为分割线,创建一个空列表,根据要求,允许用户输入图书的 ID、名称和位置,并将这些信息存储在全局字典 books_dict 中。

e1、e2 和 e3 是 Tkinter 的输入框(Entry)组件,通过 get() 方法获取用户在这些输入框中输入的值 ,存储到t1,t2,t3中,if语句判断,如果这三个值都不为空(即用户在三个输入框中都有输入),则将包含这三个信息的字典添加到 books_dict 列表中,然后在界面上显示 “添加图书成功” 的标签;否则,显示 “请完成输入” 的标签。

books_dict=[]

stort=tk.Label(win,text="\n-------------------------------------------")
stort.grid(row=4,column=1)

def Add():
    t1 = e1.get()
    t2 = e2.get()
    t3 = e3.get()
    if t1 and t2 and t3:
        books_dict.append({"id":t1, "name":t2, "address":t3})
        y1 = tk.Label(win, text='添加图书成功')
        y1.grid(row=5, column=1)
    else:
       y1= tk.Label(win, text=' 请完成输入 ')
       y1.grid(row=5, column=1)
b1= tk.Button(win,text = "add",command=Add)
b1.grid(row=5,column=0)

删除图书,使用遍历字典,查看有无相同id的图书,有则删除

t1 = e1.get(),这里e1应该是一个输入框(Entry组件),用户在其中输入要删除图书的id。

遍历books_dict:for i in range(len(books_dict)),逐个检查字典中的id与用户输入的id是否匹配。如果找到匹配的id(books_dict[i]["id"] == t1),将该图书信息添加到del_book列表中(del_book.append({"id":t1})),然后从books_dict中删除该元素(del books_dict[i]),并将found标志设置为True,同时跳出循环(break)。根据found的值显示相应的提示标签。如果found为True,表示删除成功,显示图书已删除;如果found为False,表示没有找到匹配的图书,显示找不到图书。

del_book=[]
def Del():
    t1 = e1.get()
    found = False
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            del_book.append({"id":t1})
            del books_dict[i]
            found = True
            break
    if found:
        y2 = tk.Label(win, text=' 图书已删除 ')
        y2.grid(row=6, column=1)
    else:
        y2 = tk.Label(win, text='找不到图书')
        y2.grid(row=6, column=1)

更改图书,同删除图书,使用遍历字典的方法

通过e1.get()和e2.get()获取图书的原始编号(t1)和新的图书名称(new_name),然后在books_dict(一个存储图书信息的字典列表)中查找编号匹配的图书,并将其名称修改为新的名称。如果找到图书,则显示 “已更改” 的提示;如果没有找到,则显示 “找不到图书” 的提示。

def Modify():
    t1=e1.get()
    new_name=e2.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            books_dict[i]["name"]=new_name
            t3 = tk.Label(win, text='   已更改   ')
            t3.grid(row=7, column=1)
            break
        else:
            t3 = tk.Label(win, text='找不到图书')
            t3.grid(row=7, column=1)

借出图书,同上理

这里有一个 for 循环,它遍历 books_dict 列表的索引。在循环中,检查当前索引 i 对应的图书字典中 "id" 键的值是否等于刚才获取的输入值 t1。如果相等,则创建一个 tk.Label 组件,并在窗口中显示文本 "图书未借出",然后使用 grid 布局管理器将其放置在第 8 行第 1 列的位置,最后通过 break 跳出循环。

def Lend():
    t1 = e1.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            t4 = tk.Label(win, text=" 图书未借出 ")
            t4.grid(row=8, column=1)
            break
        if is_lend:
            t4 = tk.Label(win, text=' 找不到图书 ')
            t4.grid(row=8, column=1)

归还图书:同上理

def Give():
    t1 = e1.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            t5=tk.Label(win, text='图书已经归还')
            t5.grid(row=9, column=1)
            break
        else:
            t5 = tk.Label(win, text=' 找不到图书 ')
            t5.grid(row=9, column=1

查询图书依旧使用字典遍历

如果查找的id存在字典中则文本输出对应的id,name,address,否则找不到图书

def Give():
    t1 = e1.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            t5=tk.Label(win, text='图书已经归还')
            t5.grid(row=9, column=1)
            break
        else:
            t5 = tk.Label(win, text=' 找不到图书 ')
            t5.grid(row=9, column=1

完整代码总结(仅供参考)

全部代码如下:

import tkinter as tk
books_dict=[]


win=tk.Tk()
win.title("图书管理系统")
win.geometry("600x400")
stort=tk.Label(win,text="图书管理系统\n-----------------------------------------")
stort.grid(row=0,column=1)

t1 = tk.Label(win, text="id")
t1.grid(row=1)
t2 = tk.Label(win, text="name")
t2.grid(row=2)
t3 = tk.Label(win, text="address")
t3.grid(row=3)

e1=tk.Entry()
e1.grid(row=1,column=1)
e2 = tk.Entry()
e2.grid(row=2,column=1)
e3 = tk.Entry()
e3.grid(row=3,column=1)

stort=tk.Label(win,text="\n-------------------------------------------")
stort.grid(row=4,column=1)

def Add():
    t1 = e1.get()
    t2 = e2.get()
    t3 = e3.get()
    if t1 and t2 and t3:
        books_dict.append({"id":t1, "name":t2, "address":t3})
        y1 = tk.Label(win, text='添加图书成功')
        y1.grid(row=5, column=1)
    else:
       y1= tk.Label(win, text=' 请完成输入 ')
       y1.grid(row=5, column=1)
del_book=[]
def Del():
    t1 = e1.get()
    found = False
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            del_book.append({"id":t1})
            del books_dict[i]
            found = True
            break
    if found:
        y2 = tk.Label(win, text=' 图书已删除 ')
        y2.grid(row=6, column=1)
    else:
        y2 = tk.Label(win, text='找不到图书')
        y2.grid(row=6, column=1)

def Modify():
    t1=e1.get()
    new_name=e2.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            books_dict[i]["name"]=new_name
            t3 = tk.Label(win, text='   已更改   ')
            t3.grid(row=7, column=1)
            break
        else:
            t3 = tk.Label(win, text='找不到图书')
            t3.grid(row=7, column=1)

def Lend():
    t1 = e1.get()
    is_lend=True
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            t4 = tk.Label(win, text=" 图书未借出 ")
            t4.grid(row=8, column=1)
            break
        if is_lend:
            t4 = tk.Label(win, text=' 找不到图书 ')
            t4.grid(row=8, column=1)

def Give():
    t1 = e1.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"] == t1:
            t5=tk.Label(win, text='图书已经归还')
            t5.grid(row=9, column=1)
            break
        else:
            t5 = tk.Label(win, text=' 找不到图书 ')
            t5.grid(row=9, column=1)
def Select():
    t1=e1.get()
    t2=e2.get()
    t3=e3.get()
    for i in range(len(books_dict)):
        if books_dict[i]["id"]==t1:
            t6 = tk.Label(win, text={"id":t1,
                                     "name":t2,"address":t3})
            t6.grid(row=10, column=1)
        else:
            t6 = tk.Label(win, text='找不到图书')
            t6.grid(row=10, column=1)

b1= tk.Button(win,text = "add",command=Add)
b1.grid(row=5,column=0)
b2= tk.Button(win,text = "del",command=Del)
b2.grid(row=6,column=0)
b3 = tk.Button(win,text="modify",command=Modify)
b3.grid(row=7,column=0)
b4 = tk.Button(win,text = "lend",command=Lend)
b4.grid(row=8,column=0)
b5 = tk.Button(win,text = "giveback",command=Give)
b5.grid(row=9,column=0)
b6 = tk.Button(win,text = "select",command=Select)
b6.grid(row=10,column=0)

win.mainloop()

 输出结果

小结

居然看完啦,你真棒!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值