GUI开发丨基于Tkinter+SQLite3的智能图书管理系统

文章目录

  • 写在前面
  • 实验介绍
  • 实验内容
    • SQLite3数据库
    • GUI界面
  • 运行结果
  • 写在后面

写在前面

本期内容:基于Tkinter+SQLite3的智能图书管理系统

实验需求:

  • tkinter
  • sqlite3

项目下载地址:https://download.csdn.net/download/m0_68111267/88744196

实验介绍

本期博主将使用Tkinter和SQLite3技术实现一个GUI版智能图书管理系统,主要考察Python的GUI界面开发以及数据库的基本操作。

  • Tkinter:Tkinter是Python的一个标准库,用于创建图形用户界面(GUI)。它提供了一系列的工具和控件,可以用来设计和开发交互式的应用程序。Tkinter是一个跨平台的工具包,可以在不同的操作系统上运行。它具有简单易用的特点,使得开发者能够快速地创建界面并添加各种功能。Tkinter提供了一系列的方法和属性,用于控制界面的布局和样式,并且支持用户输入和交互。它还支持多线程和网络编程,可以实现复杂的应用程序。
  • SQLite3:SQLite3是一种轻量级的嵌入式关系数据库管理系统。它使用磁盘文件作为数据库存储,不需要单独的服务器进程,可以直接运行在应用程序中。SQLite3支持标准的SQL语法,并提供了丰富的SQL命令和函数,可以实现数据的增删改查操作。它具有快速、可靠和稳定的特点,支持事务处理和多线程访问。SQLite3适用于小型项目和个人开发,可以快速搭建和部署,同时也可以作为大型项目的局部数据存储解决方案。

实验内容

SQLite3数据库

编写数据库文件"db.py",实现对sqlite3数据库的基本操作:

  • init():创建book表,存放书籍信息
  • insert():插入图书信息
  • view():查看图书信息
  • search():查询图书信息
  • delete():删除图书信息
  • update():更新图书信息
"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import sqlite3

class Database:
    def __init__(self, db):
        self.conn = sqlite3.connect(db)
        self.cur = self.conn.cursor()
        self.cur.execute("create table if not exists book(id integer primary key, title text, author text, year integer, isbn integer)")
        self.conn.commit()

    def insert(self, title, author, year, isbn):
        self.cur.execute("insert into book values(null,?,?,?,?)", (title, author, year, isbn))
        self.conn.commit()

    def view(self):
        self.cur.execute("select * from book")
        rows = self.cur.fetchall()
        return rows

    def search(self, title="", author="", year="", isbn=""):
        self.cur.execute("select * from book where title=? or author=? or year=? or isbn=?", (title, author, year, isbn))
        rows =self.cur.fetchall()
        return rows

    def delete(self, id):
        self.cur.execute("delete from book where id=?", (id,))
        self.conn.commit()

    def update(self, id, author, title, year, isbn):
        self.cur.execute("update book set title=?, author=?, year=?, isbn=? where id=?", (title, author, year, isbn, id))
        self.conn.commit()

    def __del__(self):
        self.conn.close()

这段代码是一个简单的图书管理系统,使用 SQLite 数据库来存储和管理图书信息。

首先,在类的构造函数中建立了一个 SQLite 数据库连接,并创建了一个名为 “book” 的表,该表有五个列分别是 id、title、author、year 和 isbn。id 列被指定为主键,并自动递增。

接下来,类中定义了几个方法来执行不同的数据库操作:

  • insert 方法用于添加图书信息到数据库中。它接受四个参数:title、author、year 和 isbn,并使用 SQL 语句向数据库中插入一条记录。
  • view 方法用于查看所有图书信息。它执行了一个查询语句,返回了数据库中的所有记录。
  • search 方法用于根据指定的条件查询图书信息。它接受四个可选的参数:title、author、year 和 isbn,并根据这些条件执行查询语句,返回匹配的记录。
  • delete 方法用于删除指定 id 的图书信息。它根据传入的 id 值执行了一个删除语句。
  • update 方法用于更新指定 id 的图书信息。它接受五个参数:id、author、title、year 和 isbn,并根据这些参数执行了一个更新语句。

最后,类中的 del 方法用于在对象被销毁时关闭数据库连接。

这段代码实现了一个简单的图书管理系统,可以添加、查看、搜索、删除和更新图书信息。它使用了 SQLite 数据库作为数据存储的后端,并提供了一组简单的接口来操作数据库中的数据。

GUI界面

编写GUI界面文件"book.py",实现图书信息的展示:

from tkinter import *
from db import Database

database = Database("books.db")


class BookManageSystem:
    def __init__(self, root):
        self.root = root
        self.root.title("图书管理系统")
        l1 = Label(root, text="书名")
        l1.grid(row=0, column=0)
        l2 = Label(root, text="作者")
        l2.grid(row=0, column=2)
        l3 = Label(root, text="出版时间")
        l3.grid(row=1, column=0)
        l4 = Label(root, text="ISBN")
        l4.grid(row=1, column=2)
        self.title_text = StringVar()
        self.e1 = Entry(root, textvariable=self.title_text)
        self.e1.grid(row=0, column=1)
……请下载后查看完整代码

这段代码是一个基本的图书管理系统。首先通过import语句引入必需的库和模块,然后创建一个名为BookManageSystem的类。

在BookManageSystem的构造函数中,初始化了一个Tkinter的根窗口root,并设置了窗口的标题为"图书管理系统"。然后通过Label控件创建了四个标签,用于显示"书名"、“作者”、"出版时间"和"ISBN"这四个字段。接着通过Entry控件创建了四个文本框,用于用户输入图书的相关信息。使用了StringVar类型的变量来绑定这些文本框的值。接下来创建了一个Listbox控件用于显示图书列表,并创建了一个Scrollbar控件用于支持列表的滚动。

接下来是几个按钮,分别对应查看所有图书、搜索图书、添加图书、修改图书和删除图书等操作。其中每个按钮都绑定了相应的命令函数。最后创建了一个退出按钮用于关闭程序。

BookManageSystem类中定义了一些命令函数,包括view_command函数用于显示所有图书、search_command函数用于搜索图书、add_command函数用于添加图书、delete_command函数用于删除图书以及update_command函数用于修改图书。这些函数内部调用了数据库操作类的相关方法。

在程序的最后,创建了一个Tk()对象root,并设置窗口的宽度和高度。然后通过计算窗口的坐标,将窗口居中显示。最后创建了一个BookManageSystem对象,并调用mainloop()方法来显示窗口以及处理事件循环。

该程序的功能是实现一个简单的图书管理系统,用户可以通过界面进行图书的增删改查操作,并将数据存储在数据库中。

运行结果

1
2

写在后面

我是一只有趣的兔子,感谢你的喜欢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/326758.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WhatsApp广播列表功能介绍及用法

如果遇到想要发送一条信息给多个客户的时候,WhatsApp广播功能就能帮到你。WhatsApp的广播功能可以让你将同一条消息发送给多个联系人,而这些联系人不会知道你已向其他联系人发送了相同的消息。所以广播功能非常适合于一次向多个人发送通知或公告&#xf…

软件测试|SQLAlchemy query() 方法查询数据

简介 上一篇文章我们介绍了SQLAlchemy 的安装和基础使用,本文我们来详细介绍一下如何使用SQLAlchemy的query()方法来高效的查询我们的数据。 创建模型 我们可以先创建一个可供我们查询的模型,也可以复用上一篇文章中我们创建的模型,代码如…

x-cmd pkg | tokei - 代码行数统计工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 tokei 是一个使用 Rust 编写的显示有关代码统计信息的命令行工具,可以分门别类的统计目录内的代码行数。 tokei 具有良好的跨平台性,可以在 Linux、macOS、Windows 等多种平台上安装运行。 首…

[C#]winform部署官方yolov8-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一种先进的对象检测算法,它在传统的Yolov3和Yolov4基础上进行了优化,加…

Python办公自动化 – 数据预处理和数据校验

Python办公自动化 – 数据预处理和数据校验 以下是往期的文章目录,需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化 – 对Ex…

1491. 去掉最低工资和最高工资后的工资平均值

1491. 去掉最低工资和最高工资后的工资平均值 class Solution {public double average(int[] salary) {Arrays.sort(salary);salary[0] 0;for(int i 1;i < salary.length - 1;i){salary[0] salary[i];}return salary[0] * 1.0 / (salary.length - 2);} }

【python 的各种模块】(9) 在python使用PIL( 即pillow模块 ) 修改图片

目录 1 导入PIL模块&#xff08;pillow&#xff09; 1.1 PIL的全称&#xff1a;Python Imaging Library 1.2 导入PIL模块 1.2.1 可用的导入形式 1.2.2 常用的导入形式 1.2.3 PIL下面的常用子模块 2 PIL.Image的方法 (读入&#xff0c;生成和显示图片) 2.1 用 PIL.Image…

算法总结——单调栈

纵有疾风起&#xff0c;人生不言弃。本文篇幅较长&#xff0c;如有错误请不吝赐教&#xff0c;感谢支持。 文章目录 一、单调栈的定义二、单调栈的应用&#xff1a;寻找左边第一个比它小的数寻找左边第一个比它小的数的下标寻找右边第一个小于它的数寻找右边第一个小于它的数的…

毫无基础的人如何入门 Python ?

一、写在前面 其实不止是 Python&#xff0c;任何学习都会遇到这么几个难点 迷茫&#xff0c;对于学习过程中&#xff0c;对新的、未知的概念欠缺了解&#xff1b;彷徨&#xff0c;没有目的性的学习&#xff0c;不知道学完之后可以怎么用&#xff1b;乏力&#xff0c;知道很重…

通过 CMake 制作库文件 静态库 和 动态库

hehedalinux:~/Linux/loveDBTeacher-v2$ tree . ├── CMakeLists.txt ├── include │ └── head.h ├── main.c └── src├── add.c├── div.c├── mult.c└── sub.c CMake Calc 项目 在这里有add.c,div.c,mult.c,sub.c,main.c,head.h 二、生成静态库 …

protobuf学习日记 | 初识protobuf

目录 前言 一、序列化与反序列化 二、protobuf是什么 三、protobuf的使用特点 四、快速上手 1、proto文件编写 2、编译proto文件 3、序列化与反序列化的使用 前言 这是小编新开的一个栏目&#xff0c;为了记录自己在学习ProtoBuf的历程&#xff0c;也希望能帮助大家&am…

༺༽༾ཊ—设计-七个-07-原则-模式—ཏ༿༼༻

第七原则&#xff1a;迪米特职责 类与类之间的耦合度尽可能低 换言之&#xff0c;我们可以理解成———只与直接朋友说话&#xff0c;不跟陌生人说话 直接朋友&#xff1a; 通过方法传参传进来的朋友&#xff0c; 类自己的字段&#xff0c; 构造函数进来的也是直接朋友&…

CrystalDiskInfo v9.2.2

软件介绍 CrystalDiskInfo免费专业硬盘检测工具&#xff0c;硬盘健康状态信息检测工具。支持检测机械硬盘及固态硬盘信息&#xff0c;采用S.M.A.R.T.技术检测分析读取磁盘的详细信息&#xff0c;包含硬盘温度&#xff0c;固件、序列号、驱动器接口等。CrystalDiskInfo是由日本…

前沿重器[40] | 高级RAG技术——博客阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现

回声状态网络&#xff08;Echo State Networks,ESN&#xff09;详细讲解及Python代码实现 1 基本概念 回声状态网络是一种循环神经网络。ESN 训练方式与传统 RNN 不同。网络结构如下图&#xff1a; &#xff08;1&#xff09;储层&#xff08;Reservoir&#xff09;&#x…

zotero使用gpt

zotero使用gpt 下载 zotero下载&#xff1a;https://www.zotero.org/download/ 插件下载&#xff1a;https://github.com/MuiseDestiny/zotero-gpt?tabreadme-ov-file 插件安装 zotero中选择 工具->添加组件 选择右上角的齿轮&#xff0c;选择Install add-on from fil…

LabVIEW水泵性能测试系

项目背景&#xff1a; 水泵作为工业和日常生活中不可或缺的设备&#xff0c;其性能测试对于提高设计水平和改善性能至关重要。传统测试方法往往需要依赖经验和理论的结合&#xff0c;且测试效率和准确性有待提高。为了解决这些问题&#xff0c;设计了一套基于NI-LabVIEW平台的水…

TikTok电商加快闭环,独享IP为运营带来哪些好处?

近日有消息称TikTok电商在加快闭环&#xff0c;以后商家可能无法继续在TikTok上为其他电商平台或独立站引流了。如今“TikTok Shop Shopping Center”平台正在构建&#xff0c;将各种购物渠道整合为一体&#xff0c;这可能是一种趋势&#xff0c;意味着TikTok逐渐从社交应用转型…

movie-web, 开源的电影搜索网站

这个开源的电影网站 movie-web 看起来是一个很不错的项目。它提供了简洁易用的界面&#xff0c;并且能够保存播放进度和收藏电影。同时&#xff0c;它还支持中文输入和快速的搜索响应速度&#xff0c;这对于中文用户来说是非常方便的。 不过需要注意的是&#xff0c;虽然它可以…

C# Cad2016二次开发api(三)

直线 Line 属性中文数据类型作用Length长度double直线的长度Angle角度double直线的弧度&#xff0c;0~2πDelta增量Vector3d起点到终点的向量Normal法向向量Vector3d直线所在平面的法向单位向量Thickness厚度doubleEndPoint终点Point3d直线的终点StartPoint起点Point3d直线的起…