基于PyQt+mysql图书管理系统

news2024/9/28 1:19:25

1 需求分析

针对图书馆的图书管理系统数据库设计,分别对图书馆的读者、一般工作人员和部门负责人进行详细地分析,总结出如下的需求信息:
(1)图书馆中的图书具有书号、书名、作者、馆藏册数、在馆册数、价格、出版社及摘要等必要信息。其中每种书具有唯一的书号,即一个书号对应一种书而不是一本书。书名可以重复,但如果只是两本书重名,则这两本书具有不同的书号。馆藏册数和在馆册数可以用于让读者判断是否可以借,另外,馆藏册数必须要大于等于在馆册数。
(2)图书馆中的读者具有卡号、姓名、性别、单位、类型、级别和在借册数这些必要信息。卡号用于唯一地标识读者身份,每个读者对应一个卡号,同样每个卡号也不能对应多个读者。类型这个属性可以用于区分教员、学员,区分他们的意义在于不同类型的读者可同时借阅的书籍数大不相同。
(3)从读者的角度,可以查阅图书馆相应的图书资料(也可以按要求查找,如输入一些关键字)以及每本书的在馆册数;同时可以提交借书和还书的申请;能判断自己是否因超期而欠款,若超期则自动显示出所需的罚款金额。
(4)图书馆中的工作人员可以分为图书管理员和系统管理员。
(5)图书管理员是图书馆中最普通的工作人员,图书管理员可以实现读者的借书和还书操作;也可以实现在读者交罚款之后取消罚款记录。另外,图书管理员在执行借书或还书操作时,应根据不同读者类型的借书限制册和还书日期等约束条件来实现。
(6)系统管理员主要管理各类人员信息,包括读者信息和图书馆管理员信息这两项。
(7)图书馆中应当有书架,书架具有书架号和类型两个属性,不同的书架号对应的图书类型也应该不同;另外还需要在图书中增加存放位置这个属性。

2 系统设计

2.1 概念结构设计
图书这个实体型由书号、书名、作者、价格、出版社、摘要、馆藏册数、在馆册数、存放位置和被借次数这些属性组成,其中书号这个属性为主属性。

读者这个实体型由学号、姓名、性别、单位、类型、可借册数、在借册数、登陆密码和欠款这些属性组成,其中学号这个属性为主属性。

书架这个实体型由书架号和类型这两个属性组成,其中书架号这个属性为主属性,类型为本书架中存放书籍的类型,与之前读者中的表示读者身份的类型完全不同。

图书管理员和系统管理员这两个实体型由工作号,姓名和登录密码这些属性组成,其中工作号为主属性。

借还申请这个实体型由学号、书号、提交时间和借还类型这些属性组成,这些属性均为主属性。
项目代码:https://github.com/usutdzxych/python_mysql

"""

"""

import time
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QTableWidgetItem, QMessageBox
from connect import *

cursor, conn = connect()  # 连接数据库


# 读者界面设计
class Ui_Reader(object):
    # 创建UI
    def setupUi(self, Reader):
        self.loginID = self.getreaderid()
        Reader.setObjectName("Reader")
        Reader.resize(719, 742)
        # readertab
        self.readertab = QtWidgets.QTabWidget(Reader)
        self.readertab.setGeometry(QtCore.QRect(11, 11, 701, 721))
        self.readertab.setObjectName("readertab")

        self.borrowbook = QtWidgets.QWidget()
        self.borrowbook.setObjectName("borrowbook") # 窗口换名字

        self.layoutWidget = QtWidgets.QWidget(self.borrowbook)
        self.layoutWidget.setGeometry(QtCore.QRect(12, 10, 671, 671))
        self.layoutWidget.setObjectName("layoutWidget")

        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")

        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.label = QtWidgets.QLabel(self.layoutWidget)
        self.label.setObjectName("label")

        #水平方向加窗口
        self.horizontalLayout.addWidget(self.label)

        self.borrowbookid = QtWidgets.QLineEdit(self.layoutWidget)
        self.borrowbookid.setObjectName("borrowbookid")

        self.horizontalLayout.addWidget(self.borrowbookid)
        self.borrowcheckbt = QtWidgets.QPushButton(self.layoutWidget)
        self.borrowcheckbt.setObjectName("borrowcheckbt")
        self.horizontalLayout.addWidget(self.borrowcheckbt)
        self.verticalLayout_2.addLayout(self.horizontalLayout)
        self.borrowtable = QtWidgets.QTableWidget(self.layoutWidget)
        self.borrowtable.setMouseTracking(False)
        self.borrowtable.setEditTriggers(QtWidgets.QAbstractItemView.EditKeyPressed)
        self.borrowtable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.borrowtable.setObjectName("borrowtable")
        self.borrowtable.setColumnCount(5)
        self.borrowtable.setRowCount(1)
        item = QtWidgets.QTableWidgetItem()
        self.borrowtable.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.borrowtable.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.borrowtable.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.borrowtable.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.borrowtable.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.borrowtable.setHorizontalHeaderItem(4, item)
        self.verticalLayout_2.addWidget(self.borrowtable)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.borrowokbt = QtWidgets.QPushButton(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.borrowokbt.sizePolicy().hasHeightForWidth())

        self.borrowokbt.setSizePolicy(sizePolicy)
        self.borrowokbt.setObjectName("borrowokbt")
        self.horizontalLayout_2.addWidget(self.borrowokbt)
        self.verticalLayout_2.addLayout(self.horizontalLayout_2)
        self.readertab.addTab(self.borrowbook, "")

        self.returnbook = QtWidgets.QWidget()
        self.returnbook.setObjectName("returnbook")
        self.layoutWidget1 = QtWidgets.QWidget(self.returnbook)
        self.layoutWidget1.setGeometry(QtCore.QRect(9, 9, 311, 111))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.layoutWidget1)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.returnbo = QtWidgets.QLabel(self.layoutWidget1)
        self.returnbo.setObjectName("returnbo")
        self.horizontalLayout_3.addWidget(self.returnbo)
        self.returnbookid = QtWidgets.QLineEdit(self.layoutWidget1)
        self.returnbookid.setObjectName("returnbookid")
        self.horizontalLayout_3.addWidget(self.returnbookid)
        self.returnbookbt = QtWidgets.QPushButton(self.layoutWidget1)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.returnbookbt.sizePolicy().hasHeightForWidth())
        self.returnbookbt.setSizePolicy(sizePolicy)
        self.returnbookbt.setObjectName("returnbookbt")
        self.horizontalLayout_3.addWidget(self.returnbookbt)
        self.readertab.addTab(self.returnbook, "")
        self.checkbook = QtWidgets.QWidget()
        self.checkbook.setObjectName("checkbook")
        self.tableWidget = QtWidgets.QTableWidget(self.checkbook)
        self.tableWidget.setGeometry(QtCore.QRect(10, 200, 651, 471))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditKeyPressed)
        self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget.setColumnCount(9)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(8, item)
        self.widget = QtWidgets.QWidget(self.checkbook)
        self.widget.setGeometry(QtCore.QRect(13, 13, 641, 162))
        self.widget.setObjectName("widget")
        self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_4.addWidget(self.label_3)
        self.bookid = QtWidgets.QLineEdit(self.widget)
        self.bookid.setObjectName("bookid")
        self.horizontalLayout_4.addWidget(self.bookid)
        self.verticalLayout_4.addLayout(self.horizontalLayout_4)
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setObjectName("label_4")
        self.horizontalLayout_5.addWidget(self.label_4)
        self.bookname = QtWidgets.QLineEdit(self.widget)
        self.bookname.setObjectName("bookname")
        self.horizontalLayout_5.addWidget(self.bookname)
        self.verticalLayout_4.addLayout(self.horizontalLayout_5)
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.label_5 = QtWidgets.QLabel(self.widget)
        self.label_5.setObjectName("label_5")
        self.horizontalLayout_6.addWidget(self.label_5)
        self.author = QtWidgets.QLineEdit(self.widget)
        self.author.setObjectName("author")
        self.horizontalLayout_6.addWidget(self.author)
        self.verticalLayout_4.addLayout(self.horizontalLayout_6)
        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.label_6 = QtWidgets.QLabel(self.widget)
        self.label_6.setObjectName("label_6")
        self.horizontalLayout_7.addWidget(self.label_6)
        self.type = QtWidgets.QLineEdit(self.widget)
        self.type.setObjectName("type")
        self.horizontalLayout_7.addWidget(self.type)
        self.verticalLayout_4.addLayout(self.horizontalLayout_7)
        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        self.label_7 = QtWidgets.QLabel(self.widget)
        self.label_7.setObjectName("label_7")
        self.horizontalLayout_8.addWidget(self.label_7)
        self.press = QtWidgets.QLineEdit(self.widget)
        self.press.setObjectName("press")
        self.horizontalLayout_8.addWidget(self.press)
        self.verticalLayout_4.addLayout(self.horizontalLayout_8)
        self.horizontalLayout_9.addLayout(self.verticalLayout_4)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.checkbt = QtWidgets.QPushButton(self.widget)
        self.checkbt.setObjectName("checkbt")
        self.verticalLayout.addWidget(self.checkbt)
        self.horizontalLayout_9.addLayout(self.verticalLayout)
        self.readertab.addTab(self.checkbook, "")
        self.userinfo = QtWidgets.QWidget()
        self.userinfo.setObjectName("userinfo")
        self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.userinfo)
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.verticalLayout_8 = QtWidgets.QVBoxLayout()
        self.verticalLayout_8.setObjectName("verticalLayout_8")
        self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_14.setObjectName("horizontalLayout_14")
        self.verticalLayout_7 = QtWidgets.QVBoxLayout()
        self.verticalLayout_7.setObjectName("verticalLayout_7")
        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
        self.label_8 = QtWidgets.QLabel(self.userinfo)
        self.label_8.setObjectName("label_8")
        self.horizontalLayout_10.addWidget(self.label_8)
        self.lineEdit_8 = QtWidgets.QLineEdit(self.userinfo)
        self.lineEdit_8.setObjectName("lineEdit_8")
        self.horizontalLayout_10.addWidget(self.lineEdit_8)
        self.verticalLayout_7.addLayout(self.horizontalLayout_10)
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
        self.label_9 = QtWidgets.QLabel(self.userinfo)
        self.label_9.setObjectName("label_9")
        self.horizontalLayout_11.addWidget(self.label_9)
        self.lineEdit_9 = QtWidgets.QLineEdit(self.userinfo)
        self.lineEdit_9.setObjectName("lineEdit_9")
        self.horizontalLayout_11.addWidget(self.lineEdit_9)
        self.verticalLayout_7.addLayout(self.horizontalLayout_11)
        self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_12.setObjectName("horizontalLayout_12")
        self.verticalLayout_7.addLayout(self.horizontalLayout_12)
        self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_13.setObjectName("horizontalLayout_13")
        self.label_11 = QtWidgets.QLabel(self.userinfo)
        self.label_11.setObjectName("label_11")
        self.horizontalLayout_13.addWidget(self.label_11)
        self.lineEdit_11 = QtWidgets.QLineEdit(self.userinfo)
        self.lineEdit_11.setObjectName("lineEdit_11")
        self.horizontalLayout_13.addWidget(self.lineEdit_11)
        self.verticalLayout_7.addLayout(self.horizontalLayout_13)
        self.horizontalLayout_14.addLayout(self.verticalLayout_7)
        self.pushButton_5 = QtWidgets.QPushButton(self.userinfo)
        self.pushButton_5.setObjectName("pushButton_5")
        self.horizontalLayout_14.addWidget(self.pushButton_5)
        self.verticalLayout_8.addLayout(self.horizontalLayout_14)
        self.textBrowser_2 = QtWidgets.QTextBrowser(self.userinfo)
        self.textBrowser_2.setObjectName("textBrowser_2")
        self.verticalLayout_8.addWidget(self.textBrowser_2)
        self.verticalLayout_9.addLayout(self.verticalLayout_8)
        self.readertab.addTab(self.userinfo, "")
        self.pay_2 = QtWidgets.QWidget()
        self.pay_2.setObjectName("pay_2")
        self.gridLayout = QtWidgets.QGridLayout(self.pay_2)
        self.gridLayout.setObjectName("gridLayout")
        self.money = QtWidgets.QLabel(self.pay_2)
        self.money.setText("")
        self.money.setObjectName("money")
        self.gridLayout.addWidget(self.money, 0, 1, 1, 1)
        self.label_12 = QtWidgets.QLabel(self.pay_2)
        self.label_12.setObjectName("label_12")
        self.gridLayout.addWidget(self.label_12, 0, 0, 1, 1)
        self.alipay = QtWidgets.QPushButton(self.pay_2)
        self.alipay.setObjectName("alipay")
        self.gridLayout.addWidget(self.alipay, 1, 2, 1, 1)
        self.wepay = QtWidgets.QPushButton(self.pay_2)
        self.wepay.setObjectName("wepay")
        self.gridLayout.addWidget(self.wepay, 1, 1, 1, 1)
        self.readertab.addTab(self.pay_2, "")

        self.retranslateUi(Reader)
        self.getreaderinfo()
        # self.textBrowser_2.setText(self.readerlogin
        self.readertab.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Reader)
        self.borrowcheckbt.clicked.connect(self.borrowidcheck)
        self.borrowokbt.clicked.connect(self.submit)
        # 还书
        self.returnbookbt.clicked.connect(self.ReturnBook)
        # 查询所有书
        self.pushButton.clicked.connect(self.selectallbook)
        self.checkbt.clicked.connect(self.selectbook)

        # 信息修改 pushButton_5
        self.pushButton_5.clicked.connect(self.alterinfo)

        self.wepay.clicked.connect(self.paymoney)
        self.alipay.clicked.connect(self.paymoney)

    def retranslateUi(self, Reader):
        _translate = QtCore.QCoreApplication.translate

        Reader.setWindowTitle(_translate("Reader", "读者系统"))

        # 借书
        self.label.setText(_translate("Reader", "书号/书名"))
        self.borrowcheckbt.setText(_translate("Reader", "查询"))

        item = self.borrowtable.verticalHeaderItem(0)
        item.setText(_translate("Reader", "1"))
        item = self.borrowtable.horizontalHeaderItem(0)
        item.setText(_translate("Reader", "书号"))
        item = self.borrowtable.horizontalHeaderItem(1)
        item.setText(_translate("Reader", "书名"))
        item = self.borrowtable.horizontalHeaderItem(2)
        item.setText(_translate("Reader", "作者"))
        item = self.borrowtable.horizontalHeaderItem(3)
        item.setText(_translate("Reader", "出版社"))
        item = self.borrowtable.horizontalHeaderItem(4)
        item.setText(_translate("Reader", "在馆册数"))
        self.borrowokbt.setText(_translate("Reader", "确认借书"))
        # 页面表格
        self.readertab.setTabText(self.readertab.indexOf(self.borrowbook), _translate("Reader", "借书"))
        # 还书
        self.returnbo.setText(_translate("Reader", "书号"))
        self.returnbookbt.setText(_translate("Reader", "还书"))
        self.readertab.setTabText(self.readertab.indexOf(self.returnbook), _translate("Reader", "还书"))

        # 查询图书信息
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("Reader", "书号"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("Reader", "书名"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Reader", "作者"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("Reader", "类别"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("Reader", "出版社"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("Reader", "馆藏册数"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("Reader", "在馆册数"))
        item = self.tableWidget.horizontalHeaderItem(7)
        item.setText(_translate("Reader", "书架号"))
        item = self.tableWidget.horizontalHeaderItem(8)
        item.setText(_translate("Reader", "被借次数"))

        self.label_3.setText(_translate("Reader", "书名"))
        self.label_4.setText(_translate("Reader", "书号"))
        self.label_5.setText(_translate("Reader", "作者"))
        self.label_6.setText(_translate("Reader", "类别"))
        self.label_7.setText(_translate("Reader", "出版社"))
        self.pushButton.setText(_translate("Reader", "查询所有"))
        self.checkbt.setText(_translate("Reader", "查询"))
        self.readertab.setTabText(self.readertab.indexOf(self.checkbook), _translate("Reader", "查询图书信息"))

        # 用户信息
        self.label_8.setText(_translate("Reader", "姓名"))
        self.label_9.setText(_translate("Reader", "性别"))
        self.label_11.setText(_translate("Reader", "密码"))
        self.pushButton_5.setText(_translate("Reader", "修改"))
        self.readertab.setTabText(self.readertab.indexOf(self.userinfo), _translate("Reader", "用户信息修改"))


        self.label_12.setText(_translate("Reader", "需支付罚款"))
        self.alipay.setText(_translate("Reader", "支付宝支付"))
        self.wepay.setText(_translate("Reader", "微信支付"))
        self.readertab.setTabText(self.readertab.indexOf(self.pay_2), _translate("Reader", "逾期罚款"))  #####

    # 01 借书信息查询
    def borrowidcheck(self):
        bookin = self.borrowbookid.text()
        sql = 'select * from books where 书号="%s" or 书名="%s"' % (bookin, bookin)
        res = cursor.execute(sql)
        bookinfo = cursor.fetchall()
        n = len(bookinfo)
        self.borrowtable.setRowCount(n)
        for i in range(n):
            book = bookinfo[i]
            bookid = QTableWidgetItem(book[0])
            bookname = QTableWidgetItem(book[1])
            bookauthor = QTableWidgetItem(book[2])
            bookpress = QTableWidgetItem(book[5])
            booknumber = QTableWidgetItem(str(book[8]))
            self.borrowtable.setItem(i, 0, bookid)
            self.borrowtable.setItem(i, 1, bookname)
            self.borrowtable.setItem(i, 2, bookauthor)
            self.borrowtable.setItem(i, 3, bookpress)
            self.borrowtable.setItem(i, 4, booknumber)

    # 02 获取当前读者ID
    def getreaderid(self):
        nowtime = time.strftime("%Y-%m-%d", time.localtime())
        sql = 'SELECT * FROM loginrecord where time = "%s" order by number' % nowtime
        cursor.execute(sql)
        todaylogin = cursor.fetchall()
        readerlogin = todaylogin[-1]
        ID = readerlogin[0]
        print(ID)
        return ID

    # 03 获取读者信息
    def getreaderinfo(self):
        sql = 'SELECT * FROM readers where ID="%s"' % (self.loginID)
        cursor.execute(sql)
        readerlogined = cursor.fetchall()
        readerlogined = readerlogined[0]
        text = '读者ID:%s\n姓名:%s\n性别:%s\n单位:%s\n读者类型:%s\n可借册数:%d\n在借册数:%d\n密码:%s\n欠款:%.2f' % readerlogined
        self.textBrowser_2.setText(text)
        money = str(readerlogined[-1]) + '元'
        self.money.setText(money)

    # 04 提交借书申请
    def submit(self):
        s = self.borrowtable.currentRow()
        if s == -1:
            QMessageBox.warning(self, "警告", "请点击想借阅的书!", QMessageBox.Yes)
        else:
            remain = int(self.borrowtable.item(s, 4).text())
            if remain == 0:
                QMessageBox.warning(self, "警告", "这本书已经借光啦!", QMessageBox.Yes)
            else:
                t = self.borrowtable.item(s, 0).text()
                sql = 'SELECT * FROM item where ID="%s" and bookid="%s" and type="borrow"' % (self.loginID, t)
                res = cursor.execute(sql)
                if res:
                    QMessageBox.warning(self, "警告", "请勿重复提交!", QMessageBox.Yes)
                else:
                    nowtime = time.strftime("%Y-%m-%d", time.localtime())
                    sql = 'INSERT INTO item(bookid,ID,time,type) VALUES ("%s","%s","%s","borrow")' % (t, self.loginID, nowtime)
                    cursor.execute(sql)
                    conn.commit()
                    QMessageBox.warning(self, "提示", "提交成功!", QMessageBox.Yes)

    # 05 提交还书申请
    def ReturnBook(self):
        bookid = self.returnbookid.text()
        sql = 'SELECT * FROM books where 书号="%s"' % (bookid)
        res = cursor.execute(sql)
        if res:
            sql = 'SELECT * from borrow where 书号="%s" and ID="%s"' % (bookid, self.loginID)
            res = cursor.execute(sql)
            borrowinfo = cursor.fetchall()
            if res:
                nowtime = time.strftime("%Y-%m-%d", time.localtime())
                sql = 'SELECT * FROM item where ID="%s" and time="%s" and type= "return" and bookid="%s"' % (
                    self.loginID, nowtime, bookid)
                res = cursor.execute(sql)
                if res:
                    QMessageBox.warning(self, "警告", "请勿重复提交!", QMessageBox.Yes)
                else:
                    sql = 'INSERT INTO item(bookid,ID,time,type) VALUES ("%s","%s","%s","return")' % (
                        bookid, self.loginID, nowtime)
                    cursor.execute(sql)
                    conn.commit()
                    QMessageBox.warning(self, "提示", "提交成功!", QMessageBox.Yes)
            else:
                QMessageBox.warning(self, "警告", "您未借过这本书!", QMessageBox.Yes)
        else:
            QMessageBox.warning(self, "警告", "书号输入错误!请重新输入!", QMessageBox.Yes)

    # 05 查询所有书籍
    def selectallbook(self):
        sql = 'SELECT * FROM books'
        cursor.execute(sql)
        books = cursor.fetchall()
        booknumber = len(books)
        self.tableWidget.setRowCount(booknumber)
        for i in range(booknumber):
            book = books[i]
            self.tableWidget.setItem(i, 0, QTableWidgetItem(book[0]))
            self.tableWidget.setItem(i, 1, QTableWidgetItem(book[1]))
            self.tableWidget.setItem(i, 2, QTableWidgetItem(book[2]))
            self.tableWidget.setItem(i, 3, QTableWidgetItem(book[3]))
            self.tableWidget.setItem(i, 4, QTableWidgetItem(book[5]))
            self.tableWidget.setItem(i, 5, QTableWidgetItem(str(book[7])))
            self.tableWidget.setItem(i, 6, QTableWidgetItem(str(book[8])))
            self.tableWidget.setItem(i, 7, QTableWidgetItem(book[9]))
            self.tableWidget.setItem(i, 8, QTableWidgetItem(str(book[10])))

    # 06 条件查询书籍
    def selectbook(self):
        bookname = self.bookid.text()
        bookid = self.bookname.text()
        bookauthor = self.author.text()
        booktype = self.type.text()
        bookpress = self.press.text()
        an = 0
        if bookname:
            bookname = ' 书名="%s"' % (bookname)
            an = 1
        if bookid:
            if an == 1:
                bookid = ' and 书号="%s"' % (bookid)
            else:
                bookid = ' 书号="%s"' % (bookid)
                an = 1
        if bookauthor:
            if an == 1:
                bookauthor = 'and 作者="%s"' % (bookauthor)
            else:
                bookauthor = '作者="%s"' % (bookauthor)
                an = 1
        if booktype:
            if an == 1:
                booktype = ' and 类型="%s"' % (booktype)
            else:
                booktype = ' 类型="%s"' % (booktype)
                an = 1
        if bookpress:
            if an == 1:
                bookpress = ' and 出版社="%s"' % (bookpress)
            else:
                bookpress = ' 出版社="%s"' % (bookpress)
        sql1 = 'SELECT * FROM books where'
        sql = sql1 + bookname + bookid + bookauthor + booktype + bookpress
        res = cursor.execute(sql)
        books = cursor.fetchall()
        if res:
            booknumber = len(books)
            self.tableWidget.setRowCount(booknumber)
            for i in range(booknumber):
                book = books[i]
                self.tableWidget.setItem(i, 0, QTableWidgetItem(book[0]))
                self.tableWidget.setItem(i, 1, QTableWidgetItem(book[1]))
                self.tableWidget.setItem(i, 2, QTableWidgetItem(book[2]))
                self.tableWidget.setItem(i, 3, QTableWidgetItem(book[3]))
                self.tableWidget.setItem(i, 4, QTableWidgetItem(book[5]))
                self.tableWidget.setItem(i, 5, QTableWidgetItem(str(book[7])))
                self.tableWidget.setItem(i, 6, QTableWidgetItem(str(book[8])))
                self.tableWidget.setItem(i, 7, QTableWidgetItem(book[9]))
                self.tableWidget.setItem(i, 8, QTableWidgetItem(str(book[10])))
        else:
            QMessageBox.warning(self, "警告", "没有符合条件的书!", QMessageBox.Yes)

    # 07 读者修改自己的信息
    def alterinfo(self):
        name = self.lineEdit_8.text()
        sex = self.lineEdit_9.text()
        password = self.lineEdit_11.text()
        if name:
            sql = 'UPDATE readers SET 姓名="%s" WHERE ID="%s"' % (name, self.loginID)
            print(sql)
            cursor.execute(sql)
            conn.commit()
        if sex == '男' or sex == '女':
            sql = 'UPDATE readers SET 性别="%s" WHERE ID="%s"' % (sex, self.loginID)
            print(sql)
            cursor.execute(sql)
            conn.commit()
        elif sex != '':
            QMessageBox.warning(self, "警告", "性别输入错误,请输入男/女!", QMessageBox.Yes)
        if password:
            sql = 'UPDATE readers SET password="%s" WHERE ID="%s"' % (password, self.loginID)
            print(sql)
            cursor.execute(sql)
            conn.commit()
        self.getreaderinfo()

    # 08 支付欠款(链接支付接口)
    def paymoney(self):
        money = 0.00
        sql = 'UPDATE readers SET 欠款="%f" WHERE ID="%s"' % (money, self.loginID)
        cursor.execute(sql)
        conn.commit()
        self.getreaderinfo()

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMEYA360:芯力特SIT1043Q CAN FD收发器振铃抑制功能实现原理及实际应用

01、SIT1043Q CAN收发器 振铃抑制功能简述 随着新能源汽车与自动驾驶技术的深入发展,CAN通信的速率从基础的125kbps速率提升到目前8Mbps速率的应用,通信速率越高对CAN收发器差分信号的质量要求越来越高。芯力特研发工程师在SIT1043Q芯片中内置振铃抑制电…

PSP - 基于 OpenFold 训练的 Finetuning 模型与推理逻辑评估

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132410296 AlphaFold2 以其能够以极高的准确度预测蛋白质结构的能力,彻底改变了结构生物学。然而,AlphaFold2 的实现&…

Qt开发环境安装(版本5.14.2)

1.Qt下载 下载地址:https://download.qt.io/archive/qt/ 界面如下: 因为从qt 5.15开始,qt不再提供安装包,需要自行编译。本次我们选择5.14.2进行操作。 我们是在windows下安装,所以选择windows版本进行下载 下载完成…

使用 ChatGPT 的代码解释器进行数据科学的 5 种方法

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 通过代码解释器集成,ChatGPT 现在可以在沙盒环境中编写和执行 Python 代码,以提供更准确和精确的答案。这允许它通过代码执行(而不仅仅是文本预测)执行复…

sdk manager (ubuntu20.4) 安装

1、首先下载sdk manager 1.9.3 下载链接 https://www.baidu.com/link?urlVXJhUqxxhS3eFK3bOPTzi5LFl6ybeW3JwDY1CwANaPf1gvO3IxQKzY547NIe53x1blJxnAXg7FTRTvs-cnfnVa&wd&eqida22baa7b0004ca980000000664e2d426 当然要登录自己的账号才能成功下载,下载对应…

MyBatis-Plus 详解

文章目录 MyBatisPlus一、入门案例1.1 准备表结构和数据1.2 添加依赖1.3 yml 配置1.4 添加 Factor 实体1.5 创建Mapper接口1.6 创建Mapper.xml 文件1.7 测试操作1.8 日志输出 二、CRUD操作2.1 插入因子2.2 更新因子2.3 删除因子① 根据id删除② 批量删除③ 通过Map删除 2.4 查询…

系统架构合理性的思考 | 京东云技术团队

最近牵头在梳理部门的系统架构合理性,开始工作之前,我首先想到的是如何定义架构合理性? 从研发的角度来看如果系统上下文清晰、应用架构设计简单、应用拆分合理应该称之为架构合理。 基于以上的定义可以从以下三个方面来梳理评估&#xff1…

标签准备——labelIMG工具使用

当我们已经准备了大量用于图片标注所需的图片后,便需要使用labelIMG工具进行打标签的操作了。 1、标签规划 在我们开始打标签之前,首先需要注意的是,打标签是我们开展训练、识别工作的基础,我们需要准确最好标签的规划,明确都有哪些标签,并在venv/Lib/site-packages/la…

怎么压缩视频?一分钟学会视频压缩技巧

现在拍摄的视频文件体积都比较大,如果再加上后期的剪辑处理,动不动就是几个GB起步,这样一来不仅占用空间,还不方便传输,今天就围绕这个问题给大家分享几个压缩视频的方法,需要的朋友可以参考下。 方法一&am…

如何拥有观影氛围感?极米投影仪H6为你打造美好之夜

当前人们对于家庭舒适度的要求越来越高,“仪式感”也被越来越多的人关注起来,对于喜欢看电影的年轻人来说,在家里的观影氛围感当然也不能少。今天,笔者就为大家带来了一款打造观影氛围感好物极米H6。 作为极米H系列首款4K分辨率的…

Docker基本操作命令(一)

Docker基本操作命令 1、搜索镜像 docker search命令搜索存放在 Docker Hub中的镜像,此命令默认Docker会在Docker Hub中搜索镜像,可以配置了其他镜像仓库 [rootzch01 ~]# docker search centos NAME:镜像仓库名称DESCRIPTION:镜像仓库描述STARS:镜像仓…

探索聊天型AI进阶:从ChatGPT到提示工程入门

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 导言 近年来&#xff0…

滑动验证组件---设置movable-view组件的x属性在微信小程序端失效的问题

场景 采用uniapp的movable-view组件实现滑动验证组件。 流程 滑块未滑到最右端时,回弹到原点滑块滑到最右端时,则显示滑动结束,不可再滑动 问题 频繁设置uniapp的movable-view组件的x属性,在H5端正常,但在微信小程…

实时操作系统与非实时操作系统

一、实时操作系统 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务&am…

win10 版本21H2 + vs2022 + Windows 11 版本 22H2 WDK

打开VS,工具–>获取工具和功能–>单个组件。在里面搜索SDK Windows 11 SDK(10.0.22621.0) Windows 11 版本 21H2 WDK 不支持 Visual Studio 2022。 若要使用 Visual Studio 2022 开发和测试驱动程序,请下载 Windows 11 版本 22H2 WDK。 #include…

自定义目录高亮的锚点计算位移

如果可以实现记得给个星星,谢谢老铁~ 一、问题的描述 一个支持目录树形结构,自定义目录高亮的锚点计算位移,且支持选中该目录后锚点对应的内容。这里只提供左边的组件思路,右边展示对应的内容最好自己自定义组件控制更为灵活&am…

MyBatis(一)执行流程概述

目录 一、简介二、MyBatis执行流程1.读取核心配置文件 mybatis-config.xml2.构建会话工厂 SqlSessionFactory3.创建会话 SqlSession4.Executor 执行器5.MappedStatement 对象6.输入参数处理(map,list,String,Integer,pojo)7.操作数据库8.输出结果处理&am…

[C语言]分支语句和循环语句

[C语言]分支语句和循环语句 文章目录 [C语言]分支语句和循环语句C语言语句分类分支语句if语法结构else的匹配规则switch语句switch语句中的breakswitch语句中default 循环语句while循环while循环中的break和continuefor循环for循环中的break和continuefor循环的变种do while循环…

ARM汇编【1】:数据类型

与高级语言类似,ARM支持对不同数据类型的操作。我们可以加载或存储的数据类型可以是有符号和无符号字、半字或字节。这些数据类型的扩展名是:-h或-sh表示半字,-b或-sb表示字节,不表示字的扩展名。有符号数据类型或无符号数据类型之…

二重积分小技巧---交换积分

又一个奇技淫巧。 【例1】 ∫ 0 1 d y ∫ y 1 x 3 1 d x ? \int _0 ^1 dy \int _{\sqrt y} ^ 1 \sqrt{x^3 1} dx ? ∫01​dy∫y ​1​x31 ​dx? 解析: 不说话,看下图: ∫ 0 1 d y ∫ y 1 x 3 1 d x ∫ 0 1 d x ∫ 0 x 2 x 3 1 d…