def __init__(self, parent=None):
        super(changePasswordDialog, self).__init__(parent)

        # 设置该窗口为一个当以层次的模态窗口,阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息,此时能够在弹出来的对话框中接收输入法信息。
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle("修改密码")
        self.setUpUI()
        self.userdb = UserDbManager()
Example #2
0
 def __init__(self, userID, parent=None):
     super(BorrowBookDialog, self).__init__(parent)
     self.userID = userID
     self.setUpUI()
     self.setWindowModality(Qt.WindowModal)
     self.setWindowTitle("借阅书籍")
     self.userbookdb = UserBookManager()  # 借书记录
     self.bookdb = BookDbManager()  # 书籍管理
     self.userdb = UserDbManager()  # 用户管理
 def __init__(self, userid, parent=None):
     super(ReturnBookDialog, self).__init__(parent)
     self.userid = userid
     self.setUpUI()
     # 设置该窗口为一个当以层次的模态窗口,阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息,此时能够在弹出来的对话框中接收输入法信息。
     self.setWindowModality(Qt.WindowModal)
     self.setWindowTitle("归还书籍")
     self.userbookdb = UserBookManager()  # 借书记录
     self.bookdb = BookDbManager()  # 书籍管理
     self.userdb = UserDbManager()  # 用户管理
Example #4
0
    def initDBdata(self):
        if not os.path.exists(dbpath):
            self.userdb = UserDbManager()
            self.bookdb = BookDbManager()
            self.userbookdb = UserBookManager()
            self.addordropdb = AddOrDropManager()

            self.userdb.initDatabase()
            self.bookdb.initDatabase()
            self.addordropdb.initDatabase()
class ReturnBookDialog(QDialog):
    return_book_success_signal = pyqtSignal()

    def __init__(self, userid, parent=None):
        super(ReturnBookDialog, self).__init__(parent)
        self.userid = userid
        self.setUpUI()
        # 设置该窗口为一个当以层次的模态窗口,阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息,此时能够在弹出来的对话框中接收输入法信息。
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle("归还书籍")
        self.userbookdb = UserBookManager()  # 借书记录
        self.bookdb = BookDbManager()  # 书籍管理
        self.userdb = UserDbManager()  # 用户管理

    def setUpUI(self):
        # 书名,书号,作者,分类,添加数量.出版社,出版日期
        # 书籍分类:哲学类、社会科学类、政治类、法律类、军事类、经济类、文化类、教育类、体育类、语言文字类、艺术类、历史类、地理类、天文学类、生物学类、医学卫生类、农业类
        BookCategory = [
            "哲学", "社会科学", "政治", "法律", "军事", "经济", "文化", "教育", "体育", "语言文字",
            "艺术", "历史", "地理", "天文学", "生物学", "医学卫生", "农业"
        ]
        self.resize(300, 400)
        self.layout = QFormLayout()
        self.setLayout(self.layout)

        # Label控件
        self.returnStudentLabel = QLabel("还 书 人:")
        self.returnuseridLabel = QLabel(self.userid)
        self.titlelabel = QLabel("  归还书籍")
        self.bookNameLabel = QLabel("书    名:")
        self.BookIDLabel = QLabel("书    号:")
        self.authNameLabel = QLabel("作    者:")
        self.categoryLabel = QLabel("分    类:")
        self.publisherLabel = QLabel("出 版 社:")
        self.publishDateLabel = QLabel("出版日期:")

        # button控件
        self.returnBookButton = 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.bookNameEdit.setMaxLength(10)
        self.BookIDEdit.setMaxLength(6)
        self.authNameEdit.setMaxLength(10)
        self.publisherEdit.setMaxLength(10)

        # 添加进formlayout
        self.layout.addRow("", self.titlelabel)
        self.layout.addRow(self.returnStudentLabel, self.returnuseridLabel)
        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.returnBookButton)

        # 设置字体
        font = QFont()
        font.setPixelSize(20)
        self.titlelabel.setFont(font)
        font.setPixelSize(16)
        self.returnuseridLabel.setFont(font)
        # font.setPixelSize(14)
        self.returnStudentLabel.setFont(font)
        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.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.setReadOnly(True)
        self.publishTime.setStyleSheet("background-color:#363636")

        self.categoryComboBox.setFont(font)  # QComboBox没有readonly属性
        self.categoryComboBox.setStyleSheet("background-color:#363636")

        # button设置
        font.setPixelSize(16)
        self.returnBookButton.setFont(font)
        self.returnBookButton.setFixedHeight(32)
        self.returnBookButton.setFixedWidth(140)

        # 设置间距
        self.titlelabel.setMargin(8)  # 距离窗体的间距
        self.layout.setVerticalSpacing(10)  # 控件之间的距离
        self.returnBookButton.clicked.connect(self.returnButtonClicked)
        self.BookIDEdit.textChanged.connect(self.BookIDEditChanged)  # 监控输入框
        # self.BookIDEdit.returnPressed.connect(self.BookIDEditChanged)

    def returnButtonClicked(self):
        # 获取书号,书号为空或并未借阅,则弹出错误
        # 更新Book_User表User表以及Book表
        BookID = self.BookIDEdit.text()
        # BookID为空的处理
        if (BookID == ""):
            print(
                QMessageBox.warning(self, "警告", "你所要还的书不存在,请查看输入",
                                    QMessageBox.Yes, QMessageBox.Yes))
            return

        # 如果未借阅
        borrowbook = self.userbookdb.borrowStatus(self.userid, BookID)
        if (not borrowbook[0][0]):
            print(
                QMessageBox.information(self, "提示", "您并未借阅此书,故无需归还",
                                        QMessageBox.Yes, QMessageBox.Yes))
            return

        # 更新User表
        self.userdb.borrowOrReturnBook(self.userid, borrow=0)

        # 更新Book表
        self.bookdb.borrowOrReturnBook(BookID, borrowflag=0)

        # 更新User_Book表
        timenow = time.strftime('%Y-%m-%d', time.localtime(time.time()))
        self.userbookdb.borrowOrReturnBook(self.userid,
                                           BookID,
                                           timenow,
                                           borrowflag=0)

        print(
            QMessageBox.information(self, "提示", "归还成功!", QMessageBox.Yes,
                                    QMessageBox.Yes))
        self.return_book_success_signal.emit()
        self.close()
        return

    def BookIDEditChanged(self):
        BookID = self.BookIDEdit.text()
        if (BookID == ""):
            self.bookNameEdit.clear()
            self.publisherEdit.clear()
            self.authNameEdit.clear()
            self.publishTime.clear()

        # 在User_Book表中找借阅记录,如果存在借阅,则更新form内容
        borrowbook = self.userbookdb.borrowStatus(self.userid, BookID)
        if (borrowbook[0][0]):
            # 根据BookID查询书籍信息,更新form内容

            # 查询对应书号,如果存在就更新form
            bookinfo = self.bookdb.querybyBookID(BookID)
            if (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])
            return
Example #6
0
 def __init__(self):
     super().__init__()
     self.resize(900, 600)
     self.setWindowTitle("欢迎使用图书馆管理系统")
     self.setUpUI()
     self.userdb = UserDbManager()
Example #7
0
class SignInWidget(QWidget):
    is_admin_signal = pyqtSignal()
    is_student_signal = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.resize(900, 600)
        self.setWindowTitle("欢迎使用图书馆管理系统")
        self.setUpUI()
        self.userdb = UserDbManager()

    def setUpUI(self):
        self.Vlayout = QVBoxLayout(self)
        self.HlayoutTitle = QHBoxLayout()  #标题
        self.HlayoutWidgetForm = QHBoxLayout()
        self.formlayout = QFormLayout()

        self.labelAccount = QLabel("帐  号:")
        labelFont = QFont()
        labelFont.setPixelSize(18)
        lineEditFont = QFont()
        lineEditFont.setPixelSize(16)
        self.labelAccount.setFont(labelFont)
        self.lineEditAccount = QLineEdit()
        self.lineEditAccount.setFixedHeight(32)
        self.lineEditAccount.setFixedWidth(180)
        self.lineEditAccount.setFont(lineEditFont)
        self.lineEditAccount.setMaxLength(10)

        self.formlayout.addRow(self.labelAccount, self.lineEditAccount)

        self.labelPassword = QLabel("密  码:")
        self.labelPassword.setFont(labelFont)
        self.lineEditPassword = QLineEdit()
        self.lineEditPassword.setFixedHeight(32)
        self.lineEditPassword.setFixedWidth(180)
        self.lineEditPassword.setMaxLength(16)

        # 设置验证
        reg = QRegExp("PB[0~9]{8}")
        pValidator = QRegExpValidator(self)
        pValidator.setRegExp(reg)
        self.lineEditAccount.setValidator(pValidator)

        reg = QRegExp("[a-zA-z0-9]+$")
        pValidator.setRegExp(reg)
        self.lineEditPassword.setValidator(pValidator)

        passwordFont = QFont()
        passwordFont.setPixelSize(16)
        self.lineEditPassword.setFont(passwordFont)

        self.lineEditPassword.setEchoMode(QLineEdit.Password)  # 输入后就显示为星号
        self.lineEditPassword.setEchoMode(
            QLineEdit.PasswordEchoOnEdit)  # 输入时为字符,失去焦点为星号
        self.formlayout.addRow(self.labelPassword, self.lineEditPassword)

        self.signIn = QPushButton("登 录")
        self.signIn.setFixedWidth(70)
        self.signIn.setFixedHeight(30)
        self.signIn.setFont(labelFont)

        self.signCancle = QPushButton("重 置")
        self.signCancle.setFixedWidth(70)
        self.signCancle.setFixedHeight(30)
        self.signCancle.setFont(labelFont)
        self.signCancle.setStyleSheet(
            'background-color: #505F69;border: 1px solid #32414B;color: #F0F0F0;border-radius: 4px;padding: 3px;outline: none;'
        )

        self.testlayout = QHBoxLayout()
        self.testlayout.addWidget(self.signIn)
        self.testlayout.addWidget(self.signCancle)
        self.testwidget = QWidget()
        self.testwidget.setLayout(self.testlayout)  #包含登录,取消两个按钮
        self.formlayout.addRow('', self.testwidget)  #把testwidget加入到formlayout
        #formlayout 两个label, 两个LineEdit,两个按钮

        self.labelTitle = QLabel("欢迎使用图书馆管理系统")
        fontlabel = QFont()
        fontlabel.setPixelSize(30)
        self.labelTitle.setFixedWidth(390)
        # pixmap=QPixmap('index.jpg').scaled(self.labelTitle.width(), self.labelTitle.height())
        # self.labelTitle.setPixmap(pixmap)
        # self.labelTitle.setStyleSheet("QLabel{background-image:url(index.jpg)}")
        # self.labelTitle.setFixedHeight(80)                                            #不设置宽度了
        self.labelTitle.setFont(fontlabel)
        self.HlayoutTitle.addWidget(self.labelTitle, Qt.AlignCenter)  #标题
        self.widgetTitle = QWidget()
        self.widgetTitle.setLayout(self.HlayoutTitle)  #标题
        self.widgetForm = QWidget()
        self.widgetForm.setFixedWidth(300)
        self.widgetForm.setFixedHeight(150)
        self.widgetForm.setLayout(self.formlayout)
        self.widgetForm.setStyleSheet(
            ".QWidget{border-image:url(./images/baise.png)}")  #设置widgets背景色
        #widgetForm上存放6个控件

        self.HlayoutWidgetForm.addWidget(self.widgetForm, Qt.AlignCenter)
        self.widget = QWidget()
        self.widget.setLayout(self.HlayoutWidgetForm)

        # background-image,当背景图片宽度高度小于窗口的宽度高度时,则会加载多个背景图片
        # background-image,当背景图片的宽度高度大于窗口的宽度高度时,背景图片会平铺整个背景
        # self.widget1.setStyleSheet("QWidget{background-image:url(index.jpg);}")       #设置背景图片
        self.widget.setStyleSheet(
            ".QWidget{border-image:url(./images/lasa.jpg)}"
        )  #加.号表示只对当前控件有效,否则对子控件也有效
        self.widgetTitle.setStyleSheet("color:green")  #设置字体颜色
        #self.widgetTitle.setStyleSheet("color:red; background:yellow")                 #设置字体颜色和背景颜色
        self.Vlayout.addWidget(self.widgetTitle)  #Vlayout层包含两个Widget垂直布局
        self.Vlayout.addWidget(self.widget, Qt.AlignTop)
        #self.Vlayout.addWidget(self.widgetForm, Qt.AlignTop)

        self.signIn.clicked.connect(self.signInCheck)
        self.signCancle.clicked.connect(self.signInCancleReset)
        self.lineEditPassword.returnPressed.connect(self.signInCheck)
        self.lineEditAccount.returnPressed.connect(self.signInCheck)

    def signInCancleReset(self):
        self.lineEditAccount.clear()
        self.lineEditPassword.clear()

    def signInCheck(self):
        studentId = self.lineEditAccount.text()
        password = self.lineEditPassword.text()
        if (studentId == "" or password == ""):
            print(
                QMessageBox.warning(self, "警告", "学号和密码不可为空!", QMessageBox.Yes,
                                    QMessageBox.Yes))
            return

        hl = hashlib.md5()  # md5加密对象
        hl.update(password.encode(encoding='utf-8'))  # 将密码更新为MD5加密对象

        userdata = self.userdb.querybyUserid(studentId)
        print(userdata)
        if (not userdata):
            # QMessageBox.information()返回值是一个整形变量,是点击按钮所代表的值
            # QMessageBox.Yes       =   16384
            # QMessageBox.No        =   65536
            # QMessageBox.Close     =   2097152
            # QMessageBox.Abort     =   262144
            # QMessageBox.Help     =   16777216
            print(
                QMessageBox.information(self, "提示", "该账号不存在,请重新输入!",
                                        QMessageBox.Yes))
            self.signInCancleReset()
        else:
            # 将输入的密码经过MD5加密之后,重新跟数据库中的值对比
            print(userdata[0][0])
            print(userdata[0][1])
            print(userdata[0][2])
            print(userdata[0][3])
            print(userdata[0][4])
            if (studentId == userdata[0][0]
                    and hl.hexdigest() == userdata[0][2]):
                # 如果是管理员, 再在数据库中,第三项代表是否是管理员,1为管理员,0不是
                if (userdata[0][3] == 1):
                    self.is_admin_signal.emit()
                    print('admin login success')
                    QMessageBox.information(self, "提示", studentId + " 管理员登录成功",
                                            QMessageBox.Yes, QMessageBox.Yes)
                else:
                    self.is_student_signal.emit(studentId)
                    print(studentId + ' login success')
                    QMessageBox.information(self, "提示", studentId + " 登录成功",
                                            QMessageBox.Yes, QMessageBox.Yes)
            else:
                print(
                    QMessageBox.information(self, "提示", "密码错误!",
                                            QMessageBox.Yes, QMessageBox.Yes))
        return
Example #8
0
class Main(QMainWindow):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.initDBdata()
        self.layout = QHBoxLayout()
        self.widget = SignInWidget()
        self.resize(900, 600)
        self.setWindowTitle("欢迎登陆图书馆管理系统")
        self.setCentralWidget(self.widget)
        bar = self.menuBar()
        self.Menu = bar.addMenu("菜单栏")
        self.signUpAction = QAction("注册", self)
        self.changePasswordAction = QAction("修改密码", self)
        self.signInAction = QAction("登录", self)
        self.quitSignInAction = QAction("退出登录", self)
        self.quitAction = QAction("退出", self)
        self.Menu.addAction(self.signUpAction)
        self.Menu.addAction(self.changePasswordAction)
        self.Menu.addAction(self.signInAction)
        self.Menu.addAction(self.quitSignInAction)
        self.Menu.addAction(self.quitAction)
        self.signUpAction.setEnabled(True)
        self.changePasswordAction.setEnabled(True)
        self.signInAction.setEnabled(False)
        self.quitSignInAction.setEnabled(False)
        self.widget.is_admin_signal.connect(self.adminSignIn)
        self.widget.is_student_signal[str].connect(self.studentSignIn)
        self.Menu.triggered[QAction].connect(self.menuTriggered)

    def initDBdata(self):
        if not os.path.exists(dbpath):
            self.userdb = UserDbManager()
            self.bookdb = BookDbManager()
            self.userbookdb = UserBookManager()
            self.addordropdb = AddOrDropManager()

            self.userdb.initDatabase()
            self.bookdb.initDatabase()
            self.addordropdb.initDatabase()

    def adminSignIn(self):
        sip.delete(self.widget)
        self.widget = AdminHome()
        self.setCentralWidget(self.widget)
        self.changePasswordAction.setEnabled(False)
        self.signUpAction.setEnabled(True)
        self.signInAction.setEnabled(False)
        self.quitSignInAction.setEnabled(True)

    def studentSignIn(self, studentId):
        sip.delete(self.widget)
        self.widget = StudentHome(studentId)
        self.setCentralWidget(self.widget)
        self.changePasswordAction.setEnabled(False)
        self.signUpAction.setEnabled(True)
        self.signInAction.setEnabled(False)
        self.quitSignInAction.setEnabled(True)

    def menuTriggered(self, q):
        if (q.text() == "修改密码"):
            changePsdDialog = changePasswordDialog(self)
            changePsdDialog.show()
            changePsdDialog.exec_()
        if (q.text() == "注册"):
            sip.delete(self.widget)
            self.widget = SignUpWidget()
            self.setCentralWidget(self.widget)
            self.widget.student_signup_signal[str].connect(self.studentSignIn)
            self.signUpAction.setEnabled(False)
            self.changePasswordAction.setEnabled(True)
            self.signInAction.setEnabled(True)
            self.quitSignInAction.setEnabled(False)
        if (q.text() == "退出登录"):
            sip.delete(self.widget)
            self.widget = SignInWidget()
            self.setCentralWidget(self.widget)
            self.widget.is_admin_signal.connect(self.adminSignIn)
            self.widget.is_student_signal[str].connect(self.studentSignIn)
            self.signUpAction.setEnabled(True)
            self.changePasswordAction.setEnabled(True)
            self.signInAction.setEnabled(False)
            self.quitSignInAction.setEnabled(False)
        if (q.text() == "登录"):
            sip.delete(self.widget)
            self.widget = SignInWidget()
            self.setCentralWidget(self.widget)
            self.widget.is_admin_signal.connect(self.adminSignIn)
            self.widget.is_student_signal[str].connect(self.studentSignIn)
            self.signUpAction.setEnabled(True)
            self.changePasswordAction.setEnabled(True)
            self.signInAction.setEnabled(False)
            self.quitSignInAction.setEnabled(False)
        if (q.text() == "退出"):
            qApp = QApplication.instance()
            qApp.quit()
        return
Example #9
0
class BorrowBookDialog(QDialog):
    borrow_book_success_signal = pyqtSignal()

    def __init__(self, userID, parent=None):
        super(BorrowBookDialog, self).__init__(parent)
        self.userID = userID
        self.setUpUI()
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle("借阅书籍")
        self.userbookdb = UserBookManager()  # 借书记录
        self.bookdb = BookDbManager()  # 书籍管理
        self.userdb = UserDbManager()  # 用户管理

    def setUpUI(self):
        # 书名,书号,作者,分类,添加数量.出版社,出版日期
        # 书籍分类:哲学类、社会科学类、政治类、法律类、军事类、经济类、文化类、教育类、体育类、语言文字类、艺术类、历史类、地理类、天文学类、生物学类、医学卫生类、农业类
        BookCategory = ["哲学", "社会科学", "政治", "法律", "军事", "经济", "文化", "教育", "体育", "语言文字", "艺术", "历史"
            , "地理", "天文学", "生物学", "医学卫生", "农业"]
        self.resize(300, 400)
        self.layout = QFormLayout()
        self.setLayout(self.layout)

        # Label控件
        self.borrowStudentLabel = QLabel("借 阅 人:")
        self.borrowuserIDLabel = QLabel(self.userID)
        self.titlelabel = QLabel("  借阅书籍")
        self.bookNameLabel = QLabel("书    名:")
        self.BookIDLabel = QLabel("书    号:")
        self.authNameLabel = QLabel("作    者:")
        self.categoryLabel = QLabel("分    类:")
        self.publisherLabel = QLabel("出 版 社:")
        self.publishDateLabel = QLabel("出版日期:")

        # button控件
        self.borrowBookButton = 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.bookNameEdit.setMaxLength(10)
        self.BookIDEdit.setMaxLength(6)
        self.authNameEdit.setMaxLength(10)
        self.publisherEdit.setMaxLength(10)

        # 添加进formlayout
        self.layout.addRow("", self.titlelabel)
        self.layout.addRow(self.borrowStudentLabel, self.borrowuserIDLabel)
        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.borrowBookButton)

        # 设置字体
        font = QFont()
        font.setPixelSize(20)
        self.titlelabel.setFont(font)
        font.setPixelSize(16)
        self.borrowuserIDLabel.setFont(font)
        font.setPixelSize(14)
        self.borrowStudentLabel.setFont(font)
        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.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")

        # button设置
        font.setPixelSize(16)
        self.borrowBookButton.setFont(font)
        self.borrowBookButton.setFixedHeight(32)
        self.borrowBookButton.setFixedWidth(140)

        # 设置间距
        self.titlelabel.setMargin(8)
        self.layout.setVerticalSpacing(10)
        self.borrowBookButton.clicked.connect(self.borrowButtonClicked)
        self.BookIDEdit.textChanged.connect(self.BookIDEditChanged)
        self.BookIDEdit.returnPressed.connect(self.borrowButtonClicked)

    def borrowButtonClicked(self):
        # 获取书号,书号为空或不存在库中,则弹出错误
        # 向Book_User表插入记录,更新User表以及Book表
        BookID = self.BookIDEdit.text()
        # BookID为空的处理
        if (BookID == ""):
            print(QMessageBox.warning(self, "警告", "你所要借的书不存在,请查看输入", QMessageBox.Yes, QMessageBox.Yes))
            return

        bookinfo = self.bookdb.querybyBookID(BookID)
        if (not bookinfo):
            print(QMessageBox.warning(self, "警告", "你所要借的书不存在,请查看输入", QMessageBox.Yes, QMessageBox.Yes))
            return

        # 借书上限5本
        borrowNum = self.userbookdb.countBorrowNum(self.userID)
        if (borrowNum):
            print('節約了几本書= %d' % borrowNum[0][0])
            borrowNum = borrowNum[0][0]
            if (borrowNum >= 5):
                QMessageBox.warning(self, "警告", "您借阅的书达到上限(5本),借书失败!", QMessageBox.Yes, QMessageBox.Yes)
                return

        # 不允许重复借书
        borrowNum = self.userbookdb.borrowStatus(self.userID, BookID)
        print(borrowNum[0][0])
        if (borrowNum[0][0]):
            QMessageBox.warning(self, "警告", "您已经借阅了本书并尚未归还,借阅失败!", QMessageBox.Yes, QMessageBox.Yes)
            return

        # 更新User表
        self.userdb.borrowOrReturnBook(self.userID, borrow=1)

        # 更新Book表
        self.bookdb.borrowOrReturnBook(BookID, borrowflag=1)

        # 插入User_Book表
        timenow = time.strftime('%Y-%m-%d', time.localtime(time.time()))
        self.userbookdb.borrowOrReturnBook(self.userID, BookID, timenow, borrowflag=1)

        print(QMessageBox.information(self, "提示", "借阅成功!", QMessageBox.Yes, QMessageBox.Yes))
        self.borrow_book_success_signal.emit()
        self.close()
        return

    def BookIDEditChanged(self):
        BookID = self.BookIDEdit.text()
        if (BookID == ""):
            self.bookNameEdit.clear()
            self.publisherEdit.clear()
            self.authNameEdit.clear()
            self.publishTime.clear()

        bookinfo = self.bookdb.querybyBookID(BookID)
        # 查询对应书号,如果存在就更新form
        if (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])

        return
class changePasswordDialog(QDialog):
    def __init__(self, parent=None):
        super(changePasswordDialog, self).__init__(parent)

        # 设置该窗口为一个当以层次的模态窗口,阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息,此时能够在弹出来的对话框中接收输入法信息。
        self.setWindowModality(Qt.WindowModal)
        self.setWindowTitle("修改密码")
        self.setUpUI()
        self.userdb = UserDbManager()

    def setUpUI(self):
        self.resize(300, 280)
        self.layout = QFormLayout()
        self.setLayout(self.layout)

        self.titlelabel = QLabel(" 修改密码")
        self.userIDLabel = QLabel("账    号:")
        # self.studentNameLabel=QLabel("姓    名:")
        self.oldPasswordLabel = QLabel("旧 密 码:")
        self.passwordLabel = QLabel("新 密 码:")
        self.confirmPasswordLabel = QLabel("确认密码:")

        self.userIDEdit = QLineEdit()
        # self.studentNameEdit=QLineEdit()
        self.oldPasswordEdit = QLineEdit()
        self.passwordEdit = QLineEdit()
        self.confirmPasswordEdit = QLineEdit()

        self.changePasswordButton = QPushButton("确认修改")
        self.changePasswordButton.setFixedWidth(140)
        self.changePasswordButton.setFixedHeight(32)

        self.layout.addRow("", self.titlelabel)
        self.layout.addRow(self.userIDLabel, self.userIDEdit)
        # self.layout.addRow(self.studentNameLabel,self.studentNameEdit)
        self.layout.addRow(self.oldPasswordLabel, self.oldPasswordEdit)
        self.layout.addRow(self.passwordLabel, self.passwordEdit)
        self.layout.addRow(self.confirmPasswordLabel, self.confirmPasswordEdit)
        self.layout.addRow("", self.changePasswordButton)

        font = QFont()
        font.setPixelSize(20)
        self.titlelabel.setFont(font)

        font.setPixelSize(16)
        self.userIDLabel.setFont(font)
        self.userIDEdit.setFont(font)
        # self.studentNameLabel.setFont(font)
        # self.studentNameEdit.setFont(font)
        self.oldPasswordLabel.setFont(font)
        self.oldPasswordEdit.setFont(font)
        self.passwordLabel.setFont(font)
        self.passwordEdit.setFont(font)
        self.confirmPasswordLabel.setFont(font)
        self.confirmPasswordEdit.setFont(font)
        self.changePasswordButton.setFont(font)

        self.titlelabel.setMargin(8)  # 控件与窗体的左右边距为8
        self.layout.setVerticalSpacing(10)  # 控件与控件的边距为8,Layout拥有得属性

        # 设置长度
        self.userIDEdit.setMaxLength(10)
        self.oldPasswordEdit.setMaxLength(16)
        self.passwordEdit.setMaxLength(16)
        self.confirmPasswordEdit.setMaxLength(16)
        # 设置密码掩膜
        # QLineEdit.Password输入字符后就立马显示为星号
        # QLineEdit.PasswordEchoOnEdit为输入时为字符,失去焦点为星号

        ##self.oldPasswordEdit.setEchoMode(QLineEdit.Password)
        ##self.passwordEdit.setEchoMode(QLineEdit.Password)
        ##self.confirmPasswordEdit.setEchoMode(QLineEdit.Password)

        self.oldPasswordEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
        self.passwordEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
        self.confirmPasswordEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)

        # 设置校验
        reg = QRegExp("PB[0~9]{8}")
        pValidator = QRegExpValidator(self)
        pValidator.setRegExp(reg)
        self.userIDEdit.setValidator(pValidator)

        reg = QRegExp("[a-zA-z0-9]+$")
        pValidator.setRegExp(reg)
        self.oldPasswordEdit.setValidator(pValidator)
        self.passwordEdit.setValidator(pValidator)
        self.confirmPasswordEdit.setValidator(pValidator)

        # 设置信号与槽
        self.changePasswordButton.clicked.connect(self.changePasswordButtonClicked)

    def changePasswordButtonClicked(self):
        userID = self.userIDEdit.text()
        oldPassword = self.oldPasswordEdit.text()
        password = self.passwordEdit.text()
        confirmPassword = self.confirmPasswordEdit.text()
        if (userID == "" or oldPassword == "" or password == "" or confirmPassword == ""):
            print(QMessageBox.warning(self, "警告", "输入不可为空,请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            return

        # 密码与确认密码不同
        if (password != confirmPassword):
            print(QMessageBox.warning(self, "警告", "两次输入密码不同,请确认输入", QMessageBox.Yes, QMessageBox.Yes))
            self.passwordEdit.clear()
            self.confirmPasswordEdit.clear()
            return

        userinfo = self.userdb.querybyUserid(userID)

        # 如果用户不存在
        if (not userinfo):
            print(QMessageBox.warning(self, "警告", "该用户不存在,请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            self.userIDEdit.clear()
            return
            # 如果密码错误
        hl = hashlib.md5()
        hl.update(oldPassword.encode(encoding='utf-8'))
        md5password = hl.hexdigest()
        if (md5password != userinfo[0][2]):
            print(QMessageBox.warning(self, "警告", "原密码输入错误,请重新输入", QMessageBox.Yes, QMessageBox.Yes))
            self.oldPasswordEdit.clear()
            return

        # 修改密码
        hl = hashlib.md5()
        hl.update(password.encode(encoding='utf-8'))
        newmd5password = hl.hexdigest()

        self.userdb.updatePassword(newmd5password, userID)
        QMessageBox.information(self, "提醒", "修改密码成功,请登录系统!", QMessageBox.Yes, QMessageBox.Yes)
        self.close()
        return