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_())