写一个pycharm图书管理系统代码,并实现弹窗

时间: 2024-03-10 12:47:39 浏览: 22
以下是一个使用Python Tkinter库实现简单图书管理系统的代码示例,其中包含弹窗的实现: ```python from tkinter import * from tkinter import messagebox class Book: def __init__(self, title, author, isbn, year): self.title = title self.author = author self.isbn = isbn self.year = year class Library: def __init__(self): self.books = [] def add_book(self, book): self.books.append(book) def remove_book(self, book): self.books.remove(book) def search_book(self, title): for book in self.books: if book.title == title: return book def display_books(self): book_list = [] for book in self.books: book_list.append(f"{book.title} by {book.author} ({book.year})") return "\n".join(book_list) class GUI: def __init__(self, library): self.library = library self.window = Tk() self.window.title("图书管理系统") self.window.geometry("400x300") # 标题 self.title_label = Label(self.window, text="图书管理系统", font=("Arial", 20)) self.title_label.pack() # 添加书籍 self.add_frame = Frame(self.window) self.add_frame.pack(pady=10) self.add_label = Label(self.add_frame, text="添加书籍", font=("Arial", 16)) self.add_label.pack(side=LEFT) self.add_title_label = Label(self.add_frame, text="书名") self.add_title_label.pack() self.add_title_entry = Entry(self.add_frame) self.add_title_entry.pack() self.add_author_label = Label(self.add_frame, text="作者") self.add_author_label.pack() self.add_author_entry = Entry(self.add_frame) self.add_author_entry.pack() self.add_isbn_label = Label(self.add_frame, text="ISBN号") self.add_isbn_label.pack() self.add_isbn_entry = Entry(self.add_frame) self.add_isbn_entry.pack() self.add_year_label = Label(self.add_frame, text="出版年份") self.add_year_label.pack() self.add_year_entry = Entry(self.add_frame) self.add_year_entry.pack() self.add_button = Button(self.add_frame, text="添加", command=self.add_book) self.add_button.pack() # 删除书籍 self.remove_frame = Frame(self.window) self.remove_frame.pack(pady=10) self.remove_label = Label(self.remove_frame, text="删除书籍", font=("Arial", 16)) self.remove_label.pack(side=LEFT) self.remove_title_label = Label(self.remove_frame, text="书名") self.remove_title_label.pack() self.remove_title_entry = Entry(self.remove_frame) self.remove_title_entry.pack() self.remove_button = Button(self.remove_frame, text="删除", command=self.remove_book) self.remove_button.pack() # 查找书籍 self.search_frame = Frame(self.window) self.search_frame.pack(pady=10) self.search_label = Label(self.search_frame, text="查找书籍", font=("Arial", 16)) self.search_label.pack(side=LEFT) self.search_title_label = Label(self.search_frame, text="书名") self.search_title_label.pack() self.search_title_entry = Entry(self.search_frame) self.search_title_entry.pack() self.search_button = Button(self.search_frame, text="查找", command=self.search_book) self.search_button.pack() # 显示书籍 self.display_frame = Frame(self.window) self.display_frame.pack(pady=10) self.display_label = Label(self.display_frame, text="所有书籍", font=("Arial", 16)) self.display_label.pack(side=LEFT) self.display_text = Text(self.display_frame, height=5, width=30) self.display_text.pack() self.display_button = Button(self.display_frame, text="显示", command=self.display_books) self.display_button.pack() def add_book(self): title = self.add_title_entry.get() author = self.add_author_entry.get() isbn = self.add_isbn_entry.get() year = self.add_year_entry.get() if not title or not author or not isbn or not year: messagebox.showerror("错误", "请填写所有字段") return book = Book(title, author, isbn, year) self.library.add_book(book) messagebox.showinfo("提示", "书籍添加成功") self.add_title_entry.delete(0, END) self.add_author_entry.delete(0, END) self.add_isbn_entry.delete(0, END) self.add_year_entry.delete(0, END) def remove_book(self): title = self.remove_title_entry.get() if not title: messagebox.showerror("错误", "请填写书名") return book = self.library.search_book(title) if not book: messagebox.showerror("错误", "未找到该书") return self.library.remove_book(book) messagebox.showinfo("提示", "书籍删除成功") self.remove_title_entry.delete(0, END) def search_book(self): title = self.search_title_entry.get() if not title: messagebox.showerror("错误", "请填写书名") return book = self.library.search_book(title) if not book: messagebox.showerror("错误", "未找到该书") return messagebox.showinfo("提示", f"{book.title} by {book.author} ({book.year})") def display_books(self): books = self.library.display_books() self.display_text.delete("1.0", END) self.display_text.insert(END, books) def run(self): self.window.mainloop() # 测试 library = Library() gui = GUI(library) gui.run() ``` 在这个示例中,我们创建了一个GUI类,其中包含添加、删除、查找和显示书籍的方法。每个方法都与一个Tkinter窗口小部件相关联,例如Button、Label和Entry。当用户单击按钮时,相关方法将被调用。如果用户未填写所有字段或未找到所需书籍,则会出现相应的消息框。在添加书籍和删除书籍方法中,如果成功执行操作,则会出现相应的消息框。在查找书籍方法中,如果找到所需书籍,则会出现相应的消息框,显示该书籍的信息。在显示所有书籍的方法中,将创建一个多行文本框,并将所有书籍的信息插入其中。最后,我们创建一个Library对象和GUI对象,并运行GUI。

相关推荐

最新推荐

recommend-type

pycharm 代码自动补全的实现方法(图文)

主要介绍了pycharm 代码自动补全的实现方法(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Pycharm编辑器功能之代码折叠效果的实现代码

 在一些情况下,如果某些代码显得不太重要,我们可以通过Pycharm的代码折叠功能将其折叠为一行。在接下来的部分我们将介绍代码折叠功能基本用法。  2、代码可折叠轮廓线以及折叠开关  首先,我们观察一下代码左侧...
recommend-type

pycharm+django创建一个搜索网页实例代码

主要介绍了pycharm+django创建一个搜索网页实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
recommend-type

Python-Pycharm实现的猴子摘桃小游戏(源代码)

1.基于Python-Pycharm环境开发; 2.用于pygame库开发框架
recommend-type

Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境

主要介绍了Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

Redis验证与连接:快速连接Redis服务器指南

![Redis验证与连接:快速连接Redis服务器指南](https://img-blog.csdnimg.cn/20200905155530592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzNTg5NTEw,size_16,color_FFFFFF,t_70) # 1. Redis验证与连接概述 Redis是一个开源的、内存中的数据结构存储系统,它使用键值对来存储数据。为了确保数据的安全和完整性,Redis提供了多
recommend-type

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker app:app 报错 ModuleNotFoundError: No module named 'geventwebsocket' ]

这个报错是因为在你的环境中没有安装 `geventwebsocket` 模块,可以使用下面的命令来安装: ``` pip install gevent-websocket ``` 安装完成后再次运行 `gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker app:app` 就不会出现这个报错了。
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。