PyQT5一起学做图书管理系统(6)添加/删除书籍

环境

系统:windows10系统
编辑器:Sublime3
编程语言:python3+pyqt5

前言

本节来实现书籍的添加与删除,还是那句话,记得首先把数据库模块那一节给完成了,这样的话,本节就很容易实现

设计逻辑

添加/删除功能都是一个对话框(Dialog),在这个界面填入必要的信息之后,执行数据库就OK了

添加功能

对于添加逻辑,需要添加以下信息
- 书名
- 书号
- 作者名
- 分类(分类已经规定,只需要选择对应的种类就可以了)
- 出版社
- 出版日期
- 添加的数量

初始化

首先初始化数据库,然后初始化UI界面

class addBookDialog(QDialog):add_book_success_signal = pyqtSignal()def __init__(self, parent=None):super(addBookDialog, self).__init__(parent)self.setUpUI()self.setWindowModality(Qt.WindowModal)self.bookdb=BookDbManager()self.addordropdb=AddOrDropManager()self.setWindowTitle("添加书籍")

初始化UI界面

书籍类别中规定好图书的分类,然后添加各个信息的lable和lineEdit,接着设计好字体大小颜色,把各个控件有序的放好,最后为添加按钮绑定监听事件。

def setUpUI(self):# 书名,书号,作者,分类,添加数量.出版社,出版日期# 书籍分类:哲学类、社会科学类、政治类、法律类、军事类、经济类、文化类、教育类、体育类、语言文字类、艺术类、历史类、地理类、天文学类、生物学类、医学卫生类、农业类BookCategory = ["哲学", "社会科学", "政治", "法律", "军事", "经济", "文化", "教育", "体育", "语言文字", "艺术", "历史", "地理", "天文学", "生物学", "医学卫生", "农业"]self.resize(300, 400)self.layout = QFormLayout()self.setLayout(self.layout)# Label控件self.titlelabel = QLabel("  添加书籍")self.bookNameLabel = QLabel("书    名:")self.bookIdLabel = QLabel("书    号:")self.authNameLabel = QLabel("作    者:")self.categoryLabel = QLabel("分    类:")self.publisherLabel = QLabel("出 版 社:")self.publishDateLabel = QLabel("出版日期:")self.addNumLabel = QLabel("添加数量:")# button控件self.addBookButton = QPushButton("添 加")# lineEdit控件self.bookNameEdit = QLineEdit()self.bookIdEdit = QLineEdit()self.authNameEdit = QLineEdit()self.categoryComboBox = QComboBox()self.categoryComboBox.addItems(BookCategory)self.publisherEdit = QLineEdit()self.publishTime = QDateTimeEdit()self.publishTime.setDisplayFormat("yyyy-MM-dd")# self.publishDateEdit = QLineEdit()self.addNumEdit = QLineEdit()self.bookNameEdit.setMaxLength(10)self.bookIdEdit.setMaxLength(6)self.authNameEdit.setMaxLength(10)self.publisherEdit.setMaxLength(10)self.addNumEdit.setMaxLength(12)self.addNumEdit.setValidator(QIntValidator())# 添加进formlayoutself.layout.addRow("", self.titlelabel)self.layout.addRow(self.bookNameLabel, self.bookNameEdit)self.layout.addRow(self.bookIdLabel, self.bookIdEdit)self.layout.addRow(self.authNameLabel, self.authNameEdit)self.layout.addRow(self.categoryLabel, self.categoryComboBox)self.layout.addRow(self.publisherLabel, self.publisherEdit)self.layout.addRow(self.publishDateLabel, self.publishTime)self.layout.addRow(self.addNumLabel, self.addNumEdit)self.layout.addRow("", self.addBookButton)# 设置字体font = QFont()font.setPixelSize(20)self.titlelabel.setFont(font)font.setPixelSize(14)self.bookNameLabel.setFont(font)self.bookIdLabel.setFont(font)self.authNameLabel.setFont(font)self.categoryLabel.setFont(font)self.publisherLabel.setFont(font)self.publishDateLabel.setFont(font)self.addNumLabel.setFont(font)self.bookNameEdit.setFont(font)self.bookIdEdit.setFont(font)self.authNameEdit.setFont(font)self.publisherEdit.setFont(font)self.publishTime.setFont(font)self.categoryComboBox.setFont(font)self.addNumEdit.setFont(font)# button设置font.setPixelSize(16)self.addBookButton.setFont(font)self.addBookButton.setFixedHeight(32)self.addBookButton.setFixedWidth(140)# 设置间距self.titlelabel.setMargin(8)self.layout.setVerticalSpacing(10)self.addBookButton.clicked.connect(self.addBookButtonCicked)

添加逻辑

有任何一项没有填写,需要重新填

书籍之前已经存在,调用更新函数

书籍是新添加的,调用添加函数

def addBookButtonCicked(self):bookName = self.bookNameEdit.text()bookId = self.bookIdEdit.text()authName = self.authNameEdit.text()bookCategory = self.categoryComboBox.currentText()publisher = self.publisherEdit.text()publishTime = self.publishTime.text()addBookNum = self.addNumEdit.text()if (bookName == "" or bookId == "" or authName == "" or bookCategory == "" or publisher == "" or publishTime == "" or addBookNum == ""):print(QMessageBox.warning(self, "警告", "有字段为空,添加失败", QMessageBox.Yes, QMessageBox.Yes))returnelse:addBookNum = int(addBookNum)bookinfo=self.bookdb.querybyBookID(bookId)if (bookinfo):self.bookdb.updateBookinfo(addBookNum,bookId,addFlag=1)else:self.bookdb.addBOOK(bookName, bookId, authName, bookCategory, publisher, publishTime, addBookNum, addBookNum,0)# 插入droporinsert表timenow = time.strftime('%Y-%m-%d', time.localtime(time.time()))self.addordropdb.addinfo(bookId, timenow, addBookNum)print(QMessageBox.information(self, "提示", "添加书籍成功!", QMessageBox.Yes, QMessageBox.Yes))self.add_book_success_signal.emit()self.close()self.clearEdit()returndef clearEdit(self):self.bookNameEdit.clear()self.bookIdEdit.clear()self.authNameEdit.clear()self.addNumEdit.clear()self.publisherEdit.clear()

删除功能

删除书籍的界面和添加界面类似,但是在界面上稍微有一点区别,删除书籍时,需要根据BookID来删除,因此z在界面上,除了BookID之外,其他的输入框都是readonly属性。
删除逻辑是,如果当前书籍全部在书库中,没有被外借,则之前全部删除,如果还有外借的书籍,则提示删除上限(即只能删除库中现存书籍数量)

效果图

全部代码

addBookDialog.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-12-05 21:32:31
# @Author  : Jimy_Fengqi (jmps515@163.com)
# @Link    : https://blog.csdn.net/qiqiyingse/import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import qdarkstyle
import time
#from PyQt5.QtSql import *
from db.userInfoManager import BookDbManager
from db.userInfoManager import AddOrDropManager
import imagesclass addBookDialog(QDialog):add_book_success_signal = pyqtSignal()def __init__(self, parent=None):super(addBookDialog, self).__init__(parent)self.setUpUI()self.setWindowModality(Qt.WindowModal)self.bookdb=BookDbManager()self.addordropdb=AddOrDropManager()self.setWindowTitle("添加书籍")def setUpUI(self):# 书名,书号,作者,分类,添加数量.出版社,出版日期# 书籍分类:哲学类、社会科学类、政治类、法律类、军事类、经济类、文化类、教育类、体育类、语言文字类、艺术类、历史类、地理类、天文学类、生物学类、医学卫生类、农业类BookCategory = ["哲学", "社会科学", "政治", "法律", "军事", "经济", "文化", "教育", "体育", "语言文字", "艺术", "历史", "地理", "天文学", "生物学", "医学卫生", "农业"]self.resize(300, 400)self.layout = QFormLayout()self.setLayout(self.layout)# Label控件self.titlelabel = QLabel("  添加书籍")self.bookNameLabel = QLabel("书    名:")self.bookIdLabel = QLabel("书    号:")self.authNameLabel = QLabel("作    者:")self.categoryLabel = QLabel("分    类:")self.publisherLabel = QLabel("出 版 社:")self.publishDateLabel = QLabel("出版日期:")self.addNumLabel = QLabel("添加数量:")# button控件self.addBookButton = QPushButton("添 加")# lineEdit控件self.bookNameEdit = QLineEdit()self.bookIdEdit = QLineEdit()self.authNameEdit = QLineEdit()self.categoryComboBox = QComboBox()self.categoryComboBox.addItems(BookCategory)self.publisherEdit = QLineEdit()self.publishTime = QDateTimeEdit()self.publishTime.setDisplayFormat("yyyy-MM-dd")# self.publishDateEdit = QLineEdit()self.addNumEdit = QLineEdit()self.bookNameEdit.setMaxLength(10)self.bookIdEdit.setMaxLength(6)self.authNameEdit.setMaxLength(10)self.publisherEdit.setMaxLength(10)self.addNumEdit.setMaxLength(12)self.addNumEdit.setValidator(QIntValidator())# 添加进formlayoutself.layout.addRow("", self.titlelabel)self.layout.addRow(self.bookNameLabel, self.bookNameEdit)self.layout.addRow(self.bookIdLabel, self.bookIdEdit)self.layout.addRow(self.authNameLabel, self.authNameEdit)self.layout.addRow(self.categoryLabel, self.categoryComboBox)self.layout.addRow(self.publisherLabel, self.publisherEdit)self.layout.addRow(self.publishDateLabel, self.publishTime)self.layout.addRow(self.addNumLabel, self.addNumEdit)self.layout.addRow("", self.addBookButton)# 设置字体font = QFont()font.setPixelSize(20)self.titlelabel.setFont(font)font.setPixelSize(14)self.bookNameLabel.setFont(font)self.bookIdLabel.setFont(font)self.authNameLabel.setFont(font)self.categoryLabel.setFont(font)self.publisherLabel.setFont(font)self.publishDateLabel.setFont(font)self.addNumLabel.setFont(font)self.bookNameEdit.setFont(font)self.bookIdEdit.setFont(font)self.authNameEdit.setFont(font)self.publisherEdit.setFont(font)self.publishTime.setFont(font)self.categoryComboBox.setFont(font)self.addNumEdit.setFont(font)# button设置font.setPixelSize(16)self.addBookButton.setFont(font)self.addBookButton.setFixedHeight(32)self.addBookButton.setFixedWidth(140)# 设置间距self.titlelabel.setMargin(8)self.layout.setVerticalSpacing(10)self.addBookButton.clicked.connect(self.addBookButtonCicked)def addBookButtonCicked(self):bookName = self.bookNameEdit.text()bookId = self.bookIdEdit.text()authName = self.authNameEdit.text()bookCategory = self.categoryComboBox.currentText()publisher = self.publisherEdit.text()publishTime = self.publishTime.text()addBookNum = self.addNumEdit.text()if (bookName == "" or bookId == "" or authName == "" or bookCategory == "" or publisher == "" or publishTime == "" or addBookNum == ""):print(QMessageBox.warning(self, "警告", "有字段为空,添加失败", QMessageBox.Yes, QMessageBox.Yes))returnelse:addBookNum = int(addBookNum)bookinfo=self.bookdb.querybyBookID(bookId)if (bookinfo):self.bookdb.updateBookinfo(addBookNum,bookId,addFlag=1)else:self.bookdb.addBOOK(bookName, bookId, authName, bookCategory, publisher, publishTime, addBookNum, addBookNum,0)# 插入droporinsert表timenow = time.strftime('%Y-%m-%d', time.localtime(time.time()))self.addordropdb.addinfo(bookId, timenow, addBookNum)print(QMessageBox.information(self, "提示", "添加书籍成功!", QMessageBox.Yes, QMessageBox.Yes))self.add_book_success_signal.emit()self.close()self.clearEdit()returndef clearEdit(self):self.bookNameEdit.clear()self.bookIdEdit.clear()self.authNameEdit.clear()self.addNumEdit.clear()self.publisherEdit.clear()if __name__ == "__main__":app = QApplication(sys.argv)app.setWindowIcon(QIcon(":/images/MainWindow_1.png"))app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())mainMindow = addBookDialog()mainMindow.show()sys.exit(app.exec_())

dropBookDialog.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-12-05 21:28:34
# @Author  : Jimy_Fengqi (jmps515@163.com)
# @Link    : https://blog.csdn.net/qiqiyingse/import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import qdarkstyle
#from PyQt5.QtSql import *
from db.userInfoManager import BookDbManager
from db.userInfoManager import AddOrDropManager
import time
import imagesclass dropBookDialog(QDialog):drop_book_successful_signal=pyqtSignal()def __init__(self, parent=None):super(dropBookDialog, self).__init__(parent)self.setUpUI()self.setWindowModality(Qt.WindowModal)self.setWindowTitle("删除书籍")self.bookdb=BookDbManager()self.addordropdb=AddOrDropManager()def setUpUI(self):# 书名,书号,作者,分类,添加数量.出版社,出版日期# 书籍分类:哲学类、社会科学类、政治类、法律类、军事类、经济类、文化类、教育类、体育类、语言文字类、艺术类、历史类、地理类、天文学类、生物学类、医学卫生类、农业类BookCategory = ["哲学", "社会科学", "政治", "法律", "军事", "经济", "文化", "教育", "体育", "语言文字", "艺术", "历史", "地理", "天文学", "生物学", "医学卫生", "农业"]self.resize(300, 400)self.layout = QFormLayout()self.setLayout(self.layout)# Label控件self.titlelabel = QLabel("  淘汰书籍")self.bookNameLabel = QLabel("书    名:")self.bookIdLabel = QLabel("书    号:")self.authNameLabel = QLabel("作    者:")self.categoryLabel = QLabel("分    类:")self.publisherLabel = QLabel("出 版 社:")self.publishDateLabel = QLabel("出版日期:")self.dropNumLabel = QLabel("数    量:")# button控件self.dropBookButton = QPushButton("淘 汰")# lineEdit控件self.bookNameEdit = QLineEdit()self.bookIdEdit = QLineEdit()self.authNameEdit = QLineEdit()self.categoryComboBox = QComboBox()self.categoryComboBox.addItems(BookCategory)self.publisherEdit = QLineEdit()self.publishTime = QLineEdit()# self.publishDateEdit = QLineEdit()self.dropNumEdit = QLineEdit()self.bookNameEdit.setMaxLength(10)self.bookIdEdit.setMaxLength(6)self.authNameEdit.setMaxLength(10)self.publisherEdit.setMaxLength(10)self.dropNumEdit.setMaxLength(12)self.dropNumEdit.setValidator(QIntValidator())    #设置限制输入类型为整型,这里没有限制大小# 添加进formlayoutself.layout.addRow("", self.titlelabel)self.layout.addRow(self.bookNameLabel, self.bookNameEdit)self.layout.addRow(self.bookIdLabel, self.bookIdEdit)self.layout.addRow(self.authNameLabel, self.authNameEdit)self.layout.addRow(self.categoryLabel, self.categoryComboBox)self.layout.addRow(self.publisherLabel, self.publisherEdit)self.layout.addRow(self.publishDateLabel, self.publishTime)self.layout.addRow(self.dropNumLabel, self.dropNumEdit)self.layout.addRow("", self.dropBookButton)# 设置字体font = QFont()font.setPixelSize(20)self.titlelabel.setFont(font)font.setPixelSize(14)self.bookNameLabel.setFont(font)self.bookIdLabel.setFont(font)self.authNameLabel.setFont(font)self.categoryLabel.setFont(font)self.publisherLabel.setFont(font)self.publishDateLabel.setFont(font)self.dropNumLabel.setFont(font)self.bookNameEdit.setFont(font)self.bookNameEdit.setReadOnly(True)self.bookNameEdit.setStyleSheet("background-color:#363636")self.bookIdEdit.setFont(font)self.authNameEdit.setFont(font)self.authNameEdit.setReadOnly(True)self.authNameEdit.setStyleSheet("background-color:#363636")self.publisherEdit.setFont(font)self.publisherEdit.setReadOnly(True)self.publisherEdit.setStyleSheet("background-color:#363636")self.publishTime.setFont(font)self.publishTime.setStyleSheet("background-color:#363636")self.categoryComboBox.setFont(font)self.categoryComboBox.setStyleSheet("background-color:#363636")self.dropNumEdit.setFont(font)# button设置font.setPixelSize(16)self.dropBookButton.setFont(font)self.dropBookButton.setFixedHeight(32)self.dropBookButton.setFixedWidth(140)# 设置间距self.titlelabel.setMargin(8)self.layout.setVerticalSpacing(10)self.dropBookButton.clicked.connect(self.dropBookButtonClicked)self.bookIdEdit.textChanged.connect(self.bookIdEditChanged)def bookIdEditChanged(self):bookId = self.bookIdEdit.text()if (bookId == ""):self.bookNameEdit.clear()self.publisherEdit.clear()self.authNameEdit.clear()self.dropNumEdit.clear()self.publishTime.clear()bookinfo=self.bookdb.querybyBookID(bookId)# 查询对应书号,如果存在就更新formif (bookinfo):self.bookNameEdit.setText(bookinfo[0][0])self.authNameEdit.setText(bookinfo[0][2])self.categoryComboBox.setCurrentText(bookinfo[0][3])self.publisherEdit.setText(bookinfo[0][4])self.publishTime.setText(bookinfo[0][5])returndef dropBookButtonClicked(self):bookId = self.bookIdEdit.text()dropNum = 0if (self.dropNumEdit.text() == ""):print(QMessageBox.warning(self, "警告", "淘汰数目为空,请检查输入,操作失败"), QMessageBox.Yes, QMessageBox.Yes)returndropNum = int(self.dropNumEdit.text())bookinfo=self.bookdb.querybyBookID(bookId)if (bookinfo):if (dropNum > bookinfo[0][7] and  dropNum < bookinfo[0][6]):print(QMessageBox.warning(self, "警告", "还有%d本未入库,最多可淘汰%d本,请检查输入" % (bookinfo[0][8],bookinfo[0][7]), QMessageBox.Yes,QMessageBox.Yes))returnelif dropNum > bookinfo[0][6]:QMessageBox.warning(self, "警告", "最多可淘汰%d本,请检查输入" % bookinfo[0][6], QMessageBox.Yes,QMessageBox.Yes)returnelif dropNum <= 0:QMessageBox.warning(self, "警告", "输入数量错误,请检查输入" , QMessageBox.Yes,QMessageBox.Yes)self.dropNumEdit.clear()return# 更新Book表和BuyorDrop表# 如果drop书目和当前库存相同,则直接删除Book记录(这里先默认当前所有书都在库存中)if dropNum < bookinfo[0][7] and dropNum > 0:self.bookdb.updateBookinfo(dropNum, bookId,addFlag=0)elif  dropNum == bookinfo[0][6] and  bookinfo[0][8] == 0:self.bookdb.dropBook(bookId)timenow = time.strftime('%Y-%m-%d', time.localtime(time.time()))self.addordropdb.dropinfo(bookId, timenow, dropNum)print(QMessageBox.information(self, "提示", "淘汰书籍成功!", QMessageBox.Yes, QMessageBox.Yes))self.drop_book_successful_signal.emit()self.close()returnif __name__ == "__main__":app = QApplication(sys.argv)app.setWindowIcon(QIcon(":/images/MainWindow_1.png"))app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())mainMindow = dropBookDialog()mainMindow.show()sys.exit(app.exec_())

PyQT5一起学做图书管理系统(6)添加/删除书籍相关推荐

  1. 纯前端vue+bootstrap实现图书管理系统的添加、删除功能

    1.纯前端vue+bootstrap实现图书管理系统的添加.删除功能最终效果界面 2.添加效果 3.删除效果 4.前端代码:图书管理系统.html <!DOCTYPE html> < ...

  2. Java jdbc连接数据库 图书管理系统实现添加图书功能

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  3. C语言做图书管理系统

    在这#include <stdio.h> #include <stdlib.h>//其中包含system函数 #include <conio.h>//定义了通过控制 ...

  4. 做图书管理系统时遇到的一些问题及解决方案

    1.出现 error during artifact deployment 解决:<servelet-mapping>里面少一个/ 2.idea运行后前端出现乱码 解决:在tomcat配置 ...

  5. 【JAVA项目实战】【图书管理系统】用户删除功能【Servlet】+【JQuery】+【Mysql】

  6. 用python3做一个图书管理系统(图形用户界面:tkinter)

    kongzhi.py#主控模块from socket import * from tkinter import * from ts_denglu import *s = socket() s.sets ...

  7. 基于ASP.NET MVC+SQLite开发的一套(Web)图书管理系统【100010294】

    摘要 随着互联网的快速发展,各种线下手工业务都开始转向了互联网线上操作,在21世纪的信息革命时代,信息管理系统成为日常信息记录的主流工具. 本文介绍了以VS 2019(Microsoft Visual ...

  8. C++图书管理系统(简单版)

    1.系统需求 图书管理系统是一个可以记录图书借记和存储的工具. 本教程主要利用C++来实现一个图书管理系统 系统中需要实现的功能如下: 添加书籍:向图书管理系统中添加新书,信息包括(书名.书的价格.书 ...

  9. java Swing实现图书管理系统

    学习swing实现图书管理系统,本文实现该系统的功能截图,和数据库设计SQL语句供大家参考 1.图书管理系统技术架构 主要技术 Java Swing 开发工具和环境 Eclipse JDK 1.7 M ...

最新文章

  1. 如何高性能添加UIView阴影
  2. q160问题,www.q160.com,ie被篡改
  3. POJ 3268 Silver Cow Party
  4. Gh0st源码学习(二)去除硬盘锁和驱动
  5. Qt6 在线安装图文步骤
  6. UITableview高度计算
  7. Zephyr NVS文件系统原理及应用
  8. MySQL入门第三天(下)——存储过程与存储引擎
  9. 【信息论】信息论基础知识
  10. 计算机 程序安装管理,电脑安装软件时提示:系统管理员设置了系统策略,禁止进行此安装...
  11. 【图形和图像】三原色
  12. 关于通过请求获取的验证码不正确的解决的破解方法
  13. Octree 了然于胸
  14. Vue.js删除子组件数据显示异常,重新销毁创建子组件
  15. 全国高考今日开启 报名人数再创历史新高 2022全国高考时间科目安排 优积科技-祝同学们高考顺利
  16. 10个2018年度最佳网站设计实例赏析及原型分享
  17. VPU/NPU/TPU/GPU/CPU眼花缭乱,傻傻分不清楚?三百字讲明白
  18. 展锐Camera open failure log解析程序
  19. Python Eric7+PyQt6环境配置,GUI程序开发
  20. matlab工具函数newp,常用的 MATLAB 神經網絡工具箱函數

热门文章

  1. linux删除互信ip,Linux上操作SSH互信
  2. 思科(CISCO)TRUNK简单配置
  3. Nginx总结(反向代理、负载均衡、动静分离)篇
  4. Python按照拼音顺序给数组排序
  5. object-c陷阱
  6. 1071 小赌怡情 (15分)
  7. Python是男人就下一百层小游戏源代码
  8. Win7注册表写入失败怎么办?Win7写入注册表失败的解决方法
  9. 第七篇:读《被讨厌的勇气》
  10. Avira防毒软件(小红伞)将推出中文版