PYQT5开发图书管理系统 (二)

import sys
from PyQt5.QtWidgets import *
import qdarkstyle  # pip install qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *


# QDialog
"""
对话框
"""

class addBookDialog(QDialog):
    def __init__(self):
        super(addBookDialog, self).__init__()
        # 设置主界面的标题及初始化大小
        self.setWindowTitle("Dialog例子")
        self.resize(500,300)

        # 创建按钮
        self.btn = QPushButton(self)

        # 设置按钮的属性,文本,移动的位置,连接
        self.btn.setText("弹出对话框")
        self.btn.move(50,50)
        self.btn.clicked.connect(self.showdialog)

    def showdialog(self):
        dialog = QDialog()

        # 创建按钮到创建的QDialog对象
        btn = QPushButton("ok", dialog)

        btn.move(50,50)
        dialog.setWindowTitle("你好呀Dia")
        # 设置窗口的属性位Applactionmodal模态,用户点击关闭弹窗时,才能关闭窗口
       # NonModal 非模态,可以和程序的其他窗口进行交互
        # Qt.windowModel 窗口模态,程序在未处理完当前的对话框时,将阻止和对话框的父窗口进行交互

        dialog.setWindowModality(Qt.Applactionmodal)
        dialog.exec_()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    am = addBookDialog()
    am.show()
    sys.exit(app.exec_())

import sys
from PyQt5.QtWidgets import *
import qdarkstyle  # pip install qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
import hashlib


class SignUpWidet(QWidget):
    student_signup_signal = pyqtSignal(str)
    def __init__(self):
        super().__init__()
        self.setUpUI()

    def setUpUI(self):
        self.resize(900, 600)
        self.setWindowTitle("欢迎登录图书管理系统!")
        self.signUPLabel = QLabel("注  册")
        # QLabel居中
        self.signUPLabel.setAlignment(Qt.AlignCenter)
        self.signUPLabel.setFixedHeight(100)
        font = QFont()
        font.setPixelSize(36)
        lineEditFont = QFont()
        lineEditFont.setPixelSize(16)
        self.signUPLabel.setFont(font)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.signUPLabel, Qt.AlignCenter)
        self.setLayout(self.layout)

        #         表单,包括学号,姓名,密码,确认密码
        self.formlayout = QFormLayout()
        font.setPixelSize(18)
        #        rows1
        self.studentIDLable = QLabel("学 号:")
        self.studentIDLable.setFont(font)
        self.studentIDLineEdit = QLineEdit()
        self.studentIDLineEdit.setFixedWidth(180)
        self.studentIDLineEdit.setFixedHeight(32)
        self.studentIDLineEdit.setFont(lineEditFont)
        self.studentIDLineEdit.setMaxLength(10)
        self.formlayout.addRow(self.studentIDLable, self.studentIDLineEdit)

        #        rows2
        self.studentNameLable = QLabel("姓 名:")
        self.studentNameLable.setFont(font)
        self.studentNameLineEdit = QLineEdit()
        self.studentNameLineEdit.setFixedWidth(180)
        self.studentNameLineEdit.setFixedHeight(32)
        self.studentNameLineEdit.setFont(lineEditFont)
        self.studentNameLineEdit.setMaxLength(10)
        self.formlayout.addRow(self.studentNameLable, self.studentNameLineEdit)

        #        rows3
        self.passwordLable = QLabel("密 码:")
        self.passwordLable.setFont(font)
        self.passwordLineEdit = QLineEdit()
        self.passwordLineEdit.setFixedWidth(180)
        self.passwordLineEdit.setFixedHeight(32)
        self.passwordLineEdit.setFont(lineEditFont)
        self.passwordLineEdit.setMaxLength(10)
        self.formlayout.addRow(self.passwordLable, self.passwordLineEdit)

        #        rows4
        self.passwordConfirmLable = QLabel("确 认:")
        self.passwordConfirmLable.setFont(font)
        self.passwordConfirmLineEdit = QLineEdit()
        self.passwordConfirmLineEdit.setFixedWidth(180)
        self.passwordConfirmLineEdit.setFixedHeight(32)
        self.passwordConfirmLineEdit.setFont(lineEditFont)
        self.passwordConfirmLineEdit.setMaxLength(10)
        self.formlayout.addRow(self.passwordConfirmLable, self.passwordConfirmLineEdit)

        #  rows5
        self.signUPbutton = QPushButton("注 册")
        self.signUPbutton.setFixedWidth(120)
        self.signUPbutton.setFixedHeight(30)
        self.signUPbutton.setFont(font)
        self.formlayout.addRow("", self.signUPbutton)

        # 调整表单布局
        widget = QWidget()

        widget.setLayout(self.formlayout)

        widget.setFixedWidth(300)
        widget.setFixedHeight(250)

        self.Hlayout = QHBoxLayout()
        self.Hlayout.addWidget(widget, Qt.AlignCenter)

        widget = QWidget()
        widget.setLayout(self.Hlayout)
        self.layout.addWidget(widget, Qt.AlignHCenter)

        # 设置验证
        reg = QRegExp("PB[0-9]{8}") # 匹配PB + 8位数字
        # QRegExpValidator 根据正则表达式检测字符串
        pValidator = QRegExpValidator(self)
        pValidator.setRegExp(reg)
        self.studentIDLineEdit.setValidator(pValidator)

        reg = QRegExp("[a-zA-Z0-9]+$")
        pValidator.setRegExp(reg)
        self.passwordLineEdit.setValidator(pValidator)
        self.signUPbutton.clicked.connect(self.SignUp)
        self.studentIDLineEdit.returnPressed.connect(self.SignUp)
        self.studentNameLineEdit.returnPressed.connect(self.SignUp)
        self.passwordLineEdit.returnPressed.connect(self.SignUp)
        self.passwordConfirmLineEdit.returnPressed.connect(self.SignUp)

    def SignUp(self):
        studentID = self.studentIDLineEdit.text()
        studentName = self.studentNameLineEdit.text()
        password = self.passwordLineEdit.text()
        confirmPassword = self.passwordConfirmLineEdit.text()
        if (studentID == "" or studentName == "" or password == "" or confirmPassword == ""):
            print(QMessageBox.warning(self, "警告", "输入的内容不能为空, 请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            return
        else:
            # 进行逻辑处理 1.账号已存在,2.密码不匹配; 3.插入user表
            db = QSqlDatabase.addDatabase("QSQLITE")
            db.setDatabaseName("./db/LibraryManagement.db")
            db.open()
            query = QSqlQuery()
            if (confirmPassword != password):
                print(QMessageBox.warning(self, "警告", "两次输入的密码不一致,请重新输入", QMessageBox.Yes,
                                          QMessageBox.Yes))
                return
            elif (confirmPassword == password):
                # md5编码
                h1 = hashlib.md5()
                h1.update(password.encode(encoding="utf-8"))
                md5password = h1.hexdigest()
                sql = "select * from user where StudentId='%s'" % (studentID)
                query.exec_(sql)
                if (query.next()):
                    print(QMessageBox.warning(self, "警告", "该账号已经存在, 请重新输入", QMessageBox.Yes,
                                              QMessageBox.Yes))
                    return
                else:
                    sql = "insert into user values ('%s', '%s', '%s', 0,0,0)" % (studentID, studentName, md5password)
                    db.exec_(sql)
                    db.commit()
                    print(QMessageBox.information(self, "提醒", "您已成功注册账号!", QMessageBox.Yes, QMessageBox.Yes))
                    self.student_signup_signal.emit(studentID)
                db.close()
                return

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("./iron-man.png"))
    app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
    m = SignUpWidet()
    m.show()
    sys.exit(app.exec_())

"""
管理员主页设计
    --添加书本
    --淘汰书本
    --查看库存
"""
import sys
from PyQt5.QtWidgets import *
import qdarkstyle  # pip install qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
from addBookDialog import addBookDialog

class AdminHome(QWidget):
    def __init__(self):
        super(AdminHome, self).__init__()
        self.setUpUi()

    def setUpUi(self):
        self.resize(900, 600)
        self.setWindowTitle("欢迎进入管理员主页")
        self.layout = QHBoxLayout()
        self.buttonlayout = QVBoxLayout()
        self.setLayout(self.layout)

        font = QFont()
        font.setPixelSize(16)

        self.userManageButton = QPushButton("用户管理")
        self.addBookButton = QPushButton("添加书籍")
        self.dropBookButton = QPushButton("淘汰书籍")

        self.userManageButton.setFont(font)
        self.addBookButton.setFont(font)
        self.dropBookButton.setFont(font)
        # 按钮的高度和宽度是控件的设置
        self.userManageButton.setFixedWidth(100)
        self.userManageButton.setFixedHeight(42)

        self.addBookButton.setFixedWidth(100)
        self.addBookButton.setFixedHeight(42)

        self.dropBookButton.setFixedWidth(100)
        self.dropBookButton.setFixedHeight(42)
        # 将三个按钮添加到垂直布局中
        self.buttonlayout.addWidget(self.addBookButton)
        self.buttonlayout.addWidget(self.dropBookButton)
        self.buttonlayout.addWidget(self.userManageButton)
        # 将按钮布局添加到水平布局中
        self.layout.addLayout(self.buttonlayout)

        self.addBookButton.clicked.connect(self.addBookButtonClicked)

    def addBookButtonClicked(self):
        addDialog = addBookDialog()

        addDialog.show()
        addDialog.exec_()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    mianMindow = AdminHome()
    mianMindow.show()
    sys.exit(app.exec_())

这里是添加书籍对话框

import sys
import time

from PyQt5.QtWidgets import *
import qdarkstyle  # pip install qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *

# QDialog
"""
对话框
"""


class addBookDialog(QDialog):
    add_book_success_sign = pyqtSignal()

    def __init__(self):
        super(addBookDialog, self).__init__()

        self.setWindowModality(Qt.WindowModal)

        self.setWindowTitle("添加书籍")

        self.setUpUI()

    def setUpUI(self):
        BookCategory = ["哲学", "教育", "生物学", "社会科学", "政治",
                        "法律", "军事", "经济", "文化", "体育", "语言文字", "地理", "天文学", "医学卫生", "农业"]

        self.resize(300, 400)
        self.layout = QFormLayout()
        self.setLayout(self.layout)

        # 添加书籍的 标签
        self.titleLabel = QLabel(" 添加书籍")
        self.bookNameLabel = QLabel("书 名:")
        self.bookIdLabel = QLabel("书 号:")
        self.authNameLabel = QLabel("作 者:")
        self.categoryLabel = QLabel("分 类:")
        self.publisherLabel = QLabel("出 版 社:")
        self.publisherDateLabel = QLabel("出版日期:")
        self.addNumLabel = QLabel("数 量:")

        # button控件
        self.addBookButton = QPushButton("添加")

        # lineEdit控件
        self.bookNameEdit = QLineEdit()
        self.bookIdEdit = QLineEdit()
        self.authNameEdit = QLineEdit()
        # 分类创建的QComboBox,存储整个分类的列表
        # QComboBox 以占用最少屏幕控件的方式向用户呈现选项列表的方法
        self.categoryEdit = QComboBox()
        self.categoryEdit.addItems(BookCategory)
        self.publisherEdit = QLineEdit()

        # QDateTimeEdit时间控件
        # setDisplayFormat 设置显示的格式 yyyy-MM-dd 年-月-日
        self.publishTime = QDateTimeEdit()
        self.publishTime.setDisplayFormat("yyyy-MM-dd")
        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())

        # 添加进Formlayout
        self.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.categoryEdit)
        self.layout.addRow(self.publisherLabel, self.publisherEdit)
        self.layout.addRow(self.publisherDateLabel, 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.publisherDateLabel.setFont(font)
        self.addNumLabel.setFont(font)

        font.setPixelSize(18)
        self.bookNameEdit.setFont(font)
        self.bookIdEdit.setFont(font)
        self.authNameEdit.setFont(font)
        self.publisherEdit.setFont(font)
        self.publishTime.setFont(font)
        self.categoryEdit.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.categoryEdit.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))
            return
        else:
            addBookNum = int(addBookNum)
            db = QSqlDatabase.addDatabase("QSQLITE")
            db.setDatabaseName('./db/LibraryManagement.db')
            db.open()
            query = QSqlQuery()
            print("a")
            # 如果已存在,则更新 Book的现存量,剩余可借量, 不存在,则添加到 book表,同时更新采购表 采购1 淘汰0
            sql = "select * from Book where BookId='%s'" % (bookId)

            query.exec_(sql)
            if (query.next()):
                # 添加到库存量和可借阅量
                sql = "update Book set NumStorage=NumStorage+%d, NumCanBorrow=NumCanBorrow+%d  where BooId='%s'" % (
                    addBookNum, addBookNum, bookId)

            else:

                sql = "insert into Book values('%s','%s','%s','%s','%s','%s',%d,%d,0)" % (
                    bookName, bookId, authName, bookCategory, publisher, publishTime, addBookNum, addBookNum)

            query.exec_(sql)
            db.commit()
            # 插入buyordrop表
            timenow = time.strftime('%Y-%m-%d', time.localtime(time.time()))
            sql = "insert into buyordrop values ('%s', '%s', 1, '%d')" % (bookId, timenow, addBookNum)
            query.exec_(sql)
            db.commit()
            print(QMessageBox.information(self, "提示", "添加书籍成功!", QMessageBox.Yes, QMessageBox.Yes))
            self.add_book_success_sign.emit()
            self.close()
            self.clearEdit()
        return

    # 清空
    def clearEdit(self):
        self.bookIdEdit.clear()
        self.bookIdEdit.clear()
        self.authNameEdit.clear()
        self.addNumEdit.clear()
        self.publisherEdit.clear()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    am = addBookDialog()
    am.show()
    sys.exit(app.exec_())

你可能感兴趣的:(PYQT5开发图书管理系统,qt,python,开发语言)