基于Python+mysql+pyqt5开发社区门禁管理系统

一、所用开发工具、开发语言、数据库

基于MySQL+Python+PyQt5设计和实现的社区门禁物业管理系统。本系统使用QtDesigner和PyCharm进行开发,旨在提高社区安全性和物业管理效率。 Python的execute()方法执行参数化查询,可以有效防止SQL注入,有很高的安全性。

二、需求分析

1.住户管理:记录住户的信息,包括姓名、联系方式、住址等。一个住户可以有多条门禁记录。

2.物业管理员管理:记录物业管理员的信息,包括姓名、联系方式、工号等。

3.访客管理:记录访客的信息,包括姓名、联系方式、来访日期等。区分不同类型用户。一个访客可以有多条门禁记录。

4.门禁设备管理:记录社区门禁设备的信息,包括设备类型、安装位置、状态等。跟踪门禁设备的状态和运行情况,包括在线/离线状态、故障报告。

5.车辆管理:记录社区内车辆的信息,包括车牌号、车主信息、车辆类型等。一台车辆可以有多条门禁记录。

6.权限设置:管理住户、访客对门禁设备的访问权限。

7.门禁记录:记录住户的门禁访问记录,便于快速查找对应记录。提供对访问记录的查询和报表功能,以便安全管理和监控。

三、关系模式

住户(住户编号,姓名,性别,电话,住址,状态)

门禁设备(设备编号,设备位置,设备类型,设备状态)

物业管理员(职工编号,姓名,电话,状态)

车辆(车牌,车主编号,车主姓名,状态)

访客预约表(访客编号,预约住户编号,访客姓名,访客电话,来访人数,来访时间,来访方式,状态)

门禁访问记录(记录编号,ID,访问时间,访问类型)

四、功能实现图

五、具体实现

登录功能

首先进入登录界面,通过不同的用户名和密码进行相应的身份识别,登录成功后跳转对应的功能界面

保安功能

根据访客提供的住户编号查询预约表,对比表中预留的手机号和访客提供的手机号,用来确认访客身份,确认身份后查看状态

住户功能

可以查看自己的个人信息与修改个人登录密码

可以填入预约信息并查看和对其修改

维修人员功能页面

查看所有设备的运行状态,进行故障报告,修改维护时间

六、具体代码

连接数据库时需要读取配置文件

登录界面为主窗口,打开其他窗口时隐藏

import sys
from PyQt5.QtWidgets import QMainWindow
import pymysql
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from baoan import Ui_MainWindow as Ui_baoan
from text1 import Ui_MainWindow as Ui_weixiu
from text2 import Ui_MainWindow as Ui_zhuhu
import hashlib
from PyQt5.QtWidgets import QApplication
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
db_host = config.get('database', 'host')
db_port = config.getint('database', 'port')
db_user = config.get('database', 'user')
db_password = config.get('database', 'password')
db_name = config.get('database', 'db')
connection = pymysql.connect(host=db_host, port=db_port, user=db_user, password=db_password, db=db_name)


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(369, 237)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(60, 70, 54, 20))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(70, 110, 54, 20))
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(120, 70, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(120, 110, 113, 20))
        self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(130, 160, 75, 23))
        self.pushButton.setStyleSheet("background-color: rgb(85, 170, 255);")
        self.pushButton.setObjectName("pushButton")

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        self.pushButton.clicked.connect(self.log_on)  # type: ignore
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "用户名:"))
        self.label_2.setText(_translate("MainWindow", "密码:"))
        self.pushButton.setText(_translate("MainWindow", "登录"))

    def log_on(self):
        user = self.lineEdit.text()
        password = self.lineEdit_2.text()
        sale = password[:3]
        md = hashlib.md5((password+sale).encode('utf8'))
        password = md.hexdigest()
        cur = connection.cursor()
        sql = "SELECT * FROM 用户 WHERE 用户名 = %s"
        try:
            cur.execute(sql,user)
            results = cur.fetchall()
            if results == ():
                msg_box = QMessageBox(QMessageBox.Warning, "错误提示", "用户名错误!")
                msg_box.exec_()
                self.lineEdit.clear()
            for row in results:
                if row[4] == '有效':
                    if row[3] == '住户':
                        if row[0] == user and row[1] == password:
                            print('登录成功')
                            msg_box = QMessageBox(QMessageBox.Information, "提示", "登录成功!")
                            msg_box.exec_()
                            MainWindow.hide(login_window)
                            self.home_window = zhuhu()
                            self.home_window.re(user)
                            self.home_window.show()  # 显示主窗口
                        else:
                            msg_box = QMessageBox(QMessageBox.Warning, "错误提示", "密码错误!")
                            msg_box.exec_()
                            self.lineEdit_2.clear()
                    elif row[3] == '维修人员':
                        if row[0] == user and row[1] == password:
                            print('登录成功')
                            msg_box = QMessageBox(QMessageBox.Information, "提示", "登录成功!")
                            msg_box.exec_()
                            MainWindow.hide(login_window)
                            self.home_window = weixiu()
                            self.home_window.show()  # 显示主窗口
                        else:
                            msg_box = QMessageBox(QMessageBox.Warning, "错误提示", "密码错误!")
                            msg_box.exec_()
                            self.lineEdit_2.clear()
                    elif row[3] == '保安':
                        if row[0] == user and row[1] == password:
                            print('登录成功')
                            msg_box = QMessageBox(QMessageBox.Information, "提示", "登录成功!")
                            msg_box.exec_()
                            MainWindow.hide(login_window)
                            self.home_window = baoan()
                            self.home_window.show()  # 显示主窗口
                        else:
                            msg_box = QMessageBox(QMessageBox.Warning, "错误提示", "密码错误!")
                            msg_box.exec_()
                            self.lineEdit_2.clear()
                else:
                    msg_box = QMessageBox(QMessageBox.Warning, "错误提示", "用户已冻结!")
                    msg_box.exec_()
                    self.lineEdit.clear()
                    self.lineEdit_2.clear()
        except pymysql.Error as e:
            print(str(e))
            msg_box = QMessageBox(QMessageBox.Warning, "错误提示", "登录失败!")
            msg_box.exec_()


class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)


class baoan(QMainWindow, Ui_baoan):
    def __init__(self, parent=None):
        super(baoan, self).__init__(parent)
        self.setupUi(self)

    def Open(self):
        self.show()


class weixiu(QMainWindow, Ui_weixiu):
    def __init__(self, parent=None):
        super(weixiu, self).__init__(parent)
        self.setupUi(self)

    def Open(self):
        self.show()


class zhuhu(QMainWindow, Ui_zhuhu):
    def __init__(self, parent=None):
        super(zhuhu, self).__init__(parent)
        self.setupUi(self)


    def Open(self):
        self.show()
        self.parent().send_data.connect(self.showAllData)


app = QApplication(sys.argv)
login_window = Main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值