pyqt5圖書管理系統--3、管理員頁面設計
阿新 • • 發佈:2022-12-12
本節主要分為兩個部分;一個為管理員介面設計,另一個為新增書籍介面。
主要流程:1、通過進入管理員介面,設定三個按鈕(新增書籍、使用者管理、淘汰書籍);
2、當管理員點選新增書籍,即轉到新增書籍介面;
3、新增書籍介面顯示出可操作的標籤輸入框和按鈕,進行新增相應書籍資訊;
4、對比新增的資訊進行相應設定和提示;
5、連線資料庫,將所獲取的輸入框文字內容新增進資料庫,並更新新增書籍的相應資訊。
一、管理員介面
- 模組:
import sys
from PyQt5.QtWidgets import *
import 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()
(二)頁面佈局
1、介面基礎佈局
self.resize(900,600)
self.setWindowTitle("歡迎進入管理員主頁")
self.layout = QHBoxLayout()
self.buttonlayout = QVBoxLayout()
self.setLayout(self.layout)
2、新增標籤
self.userManageButton = QPushButton("使用者管理")
self.addBookButton = QPushButton("新增書籍")
self.dropBookButton = QPushButton("淘汰書籍")
3、設定字型
font = QFont()
font.setPixelSize(16)
self.userManageButton.setFont(font)
self.addBookButton.setFont(font)
self.dropBookButton.setFont(font)
4、設定寬高
self.userManageButton.setFixedWidth(100)
self.userManageButton.setFixedHeight(42)
self.addBookButton.setFixedWidth(100)
self.addBookButton.setFixedHeight(42)
self.dropBookButton.setFixedWidth(100)
self.dropBookButton.setFixedHeight(42)
5、新增至垂直佈局
self.buttonlayout.addWidget(self.addBookButton)
self.buttonlayout.addWidget(self.userManageButton)
self.buttonlayout.addWidget(self.dropBookButton)
# 將以上三個按鈕佈局新增到垂直佈局中
self.layout.addLayout(self.buttonlayout)
(三)傳送訊號
self.addBookButton.clicked.connect(self.addBookButtonClicked)
- 通過傳送的訊號呼叫模組函式。
from addBookDialog import addBookDialog
- 啟動新視窗呼叫新增書籍介面對話方塊。
def addBookButtonClicked(self):
addDialog = addBookDialog()
addDialog.show()
addDialog.exec_()
二、新增書籍介面
- 模組:
import sys
from PyQt5.QtWidgets import *
import qdarkstyle
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
import time
(一)類基礎設定
class addBookDialog(QDialog):
接受訊號
add_book_success_sign = pyqtSignal()
def __init__(self):
super(addBookDialog,self).__init__()
self.setWindowModality(Qt.WindowModal)
self.setWindowTitle("新增書籍")
self.setUpUI()
(二)新增書籍介面佈局
1、頁面大小布局
self.resize(300,400)
self.layout = QFormLayout()
self.setLayout(self.layout)
2、新增書籍的標籤及大小
(1)新增書籍標籤
self.titleLabel = QLabel("新增書籍")
self.bookNameLabel = QLabel("書 名:")
self.bookIdLabel = QLabel("書 號:")
self.authNameLabel = QLabel("作 者:")
self.categoryLabel = QLabel("分 類:")
self.publisherLabel = QLabel("出 版 社:")
self.publisherDateLabel = QLabel("出版日期:")
self.addNameLabel = QLabel("數 量:")
# 新增的按鈕標籤
self.addBookButton = QPushButton("新增")
(2)設定書籍標籤字型的大小
# 設定驗證
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.addNameLabel.setFont(font)
(3)設定按鈕大小
# 設定button
font.setPixelSize(16)
self.addBookButton.setFont(font)
self.addBookButton.setFixedHeight(32)
self.addBookButton.setFixedWidth(140)
3、新增相對應的輸入框
- 選項輸入框型別
BookCategory = ["哲學","教育","生物學","社會科學","政治", "法律","軍事","經濟","文化","體育","語言文字","地理","天文學","醫療衛生","農業"]
# lineEdit控制元件
self.bookNameEdit = QLineEdit()
self.bookIdEdit = QLineEdit()
self.authNameEdit = QLineEdit()
# 分類建立的QComboBox,儲存整個分類的列表
# QComboBox 以佔用最少螢幕控制元件的方式向用戶呈現選項列表的方法
self.categoryEdit = QComboBox()
self.categoryEdit.addItems(BookCategory)
self.publisherEdit = QLineEdit()
# QDateTime 時間控制元件
# setDisplayFormat 設定顯示的格式 yyyy-MM-dd 年-月-日
self.publisherTime = QDateTimeEdit()
self.publisherTime.setDisplayFormat("yyyy-MM-dd")
self.addNumEdit = QLineEdit()
4、設定輸入框輸入的方法和規則
(1)輸入框長度設定
# 限制輸入的長度
self.bookNameEdit.setMaxLength(10)
self.bookIdEdit.setMaxLength(6)
self.authNameEdit.setMaxLength(10)
self.publisherEdit.setMaxLength(10)
self.addNumEdit.setMaxLength(12)
self.addNumEdit.setValidator(QIntValidator())
(2)輸入框間距設定
# 標題間距
self.titleLabel.setMargin(8)
# 輸入框垂直佈局上下行之間的間距
self.layout.setVerticalSpacing(10)
(三)連線資料庫
1、傳送訊號
-
點選新增按鈕進行訊號觸發。
-
訊號觸發後呼叫函式。
self.addBookButton.clicked.connect(self.addBookButtonCicked)
2、獲取訊號
-
在連線資料庫函式內,接受訊號,進行訊號處理。
(1)獲取輸入框內容
bookName = self.bookNameEdit.text()
bookId = self.bookIdEdit.text()
authName = self.authNameEdit.text()
bookCategory = self.categoryEdit.currentText()
publisher = self.publisherEdit.text()
publisherTime = self.publisherTime.text()
addBookNum = self.addNumEdit.text()
(2)邏輯判斷
-
若獲取輸入框文字內容時,發現輸入框為空時,進行提醒。
-
若不為空則執行else語句
if (bookName == "" or bookId == "" or authName=="" or bookCategory==""
or publisher=="" or publisherTime=="" or addBookNum==""):
print(QMessageBox.warning(self, "警告", "輸入框不可為空!",QMessageBox.Yes, QMessageBox.Yes))
-
else語句:連線資料庫
# 將新增的書籍數量轉為整數型別
addBookNum = int(addBookNum)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName('./db/LibraryManagement.db')
db.open()
query = QSqlQuery()
-
查詢書號bookId
sql = "select * from Book where BookID='%s'" % (bookId)
# 持續執行查詢語句
query.exec_(sql)
-
若書號bookId存在則直接新增庫存量和可借閱量的值。
if (query.next()):
# 新增到庫存量和可借閱量
sql = "update Book set NumStorage=NumStorage+%d,NumCanBorrow +%d where BooId='%s'" %(addBookNum)
-
若書號bookId不存在則建立新的書名和書號及相關資料
else:
sql = "insert into Book values ('%s','%s','%s','%s','%s','%s',%d,%d,0)" % (
bookName, bookId, authName, bookCategory, publisher, publisherTime, addBookNum, addBookNum)
query.exec_(sql)
db.commit()
-
同時,開啟圖書新增資訊表
-
將新增的圖書書號、新增時的時間、新增書籍的數量進行更新插入
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()
-
最後,提交新增書籍後的訊號,關閉並清空輸入框。
self.add_book_success_sign.emit()
self.close()
self.clearEdit()
def clearEdit(self):
self.bookNameEdit.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_())
三、完整程式碼
(一)管理員介面完整程式碼
import sys
from PyQt5.QtWidgets import *
import 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.userManageButton)
self.buttonlayout.addWidget(self.dropBookButton)
# 將按鈕佈局新增到垂直佈局中
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
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import time
"""
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.addNameLabel = 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()
# QDateTime 時間控制元件
# setDisplayFormat 設定顯示的格式 yyyy-MM-dd 年-月-日
self.publisherTime = QDateTimeEdit()
self.publisherTime.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.publisherTime)
self.layout.addRow(self.addNameLabel,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.addNameLabel.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()
publisherTime = self.publisherTime.text()
addBookNum = self.addNumEdit.text()
if (bookName == "" or bookId == "" or authName=="" or bookCategory==""
or publisher=="" or publisherTime=="" or addBookNum==""):
print(QMessageBox.warning(self, "警告", "輸入框不可為空!",QMessageBox.Yes, QMessageBox.Yes))
else:
addBookNum = int(addBookNum)
db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName('./db/LibraryManagement.db')
db.open()
query = QSqlQuery()
# 如果已存在,則更新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 +%d where BooId='%s'" %(addBookNum)
else:
sql = "insert into Book values ('%s','%s','%s','%s','%s','%s',%d,%d,0)" % (
bookName, bookId, authName, bookCategory, publisher, publisherTime, addBookNum, addBookNum)
query.exec_(sql)
db.commit()
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.bookNameEdit.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_())
四、效果展示
(一)管理員頁面效果展示
初始佈局有點醜,待後續進行介面優化......
(二)新增書籍頁面展示
1、點選新增書籍
2、新增書籍資訊
3、提交資訊
4、資料庫書籍資訊
5、書籍書號、新增時間及數量的修改。
待後續更新....