使用PYQT制作人才交流管理系统

利用使用PYQT制作一个人才交流管理系统,先使用QT designer.exe设计好人才交流管理系统的各个UI界面,然后利用pyuic把生成的ui界面编译为py文件,在主函数文件内创建一个类继承ui.py界面的类,即可完成数据库逻辑与 GUI 代码分离,以提高可维护性和可重用性。

源码:

https://github.com/MOYANINK/talent-management-system 

1.系统简介

        系统采用PyCharm作为开发语言,采用Qt Designer来设计图形化界面,该工具有助于开发者加快开发PyQt程序的速度,并采用Qt里的一个强大的GUI库PyQt5进行开发,本系统连接MySql数据库,具备注册登录功能,以及对数据库的增、删、查、改功能。

        基于上述开发工具和技术,本系统具有新用户的注册登录功能,用户在注册登录时选择好是求职者用户还是公司用户还是管理员用户的身份,然后根据登入的身份来进入不同的界面。公司用户可以查看所有求职者简历信息、查看投递到本公司的简历信息并选择心仪的简历、查看统计共选择了多少份简历的功能,以及增删改查本公司的招聘信息;求职者可以投递简历,查阅公司发布的岗位信息,查阅公司信息,查询简历状态,增删改查自己的信息;管理员用户可以管理员可以查看所有求职者的简历信息、公司的基本信息、招聘信息以及所有的账号密码信息,具有删除指定用户、修改用户密码、直接添加新用户、对注册公司进行审核的功能,同时还可以统计平台的用户人数以及通过该平台成功就职的总人数。

2.需求分析

2.1 功能需求    

使用PYQT制作人才交流管理系统_第1张图片

 系统功能表

使用PYQT制作人才交流管理系统_第2张图片

业务流程图

3.数据库设计

表3.2.5公司信息表:com_infor

数据项名称

数据类型

允许非空

默认值

描述

c_id

int

N

公司编号

c_name

varchar(100)

N

公司名称

c_type

varchar(50)

Y

公司类型

work_addr

varchar(100)

Y

公司地址

c_tele

varchar(20)

Y

公司联系电话

c_email

varchar(50)

Y

公司联系电子邮箱

表3.2.6公司招聘消息表:recruit

数据项名称

数据类型

允许非空

默认值

描述

c_id

int

N

公司编号

company_type

varchar(50)

N

公司类型

company

varchar(100)

N

公司名称

position

varchar(50)

N

工作名称

position_require

varchar(100)

N

工作需求

job_duty

varchar(100)

N

工作职责

money

decimal(10,2)

N

薪资

job_place

varchar(100)

N

工作地点

表3.2.7求职者信息表:jobseeker

数据项名称

数据类型

允许非空

默认值

描述

id

int

N

求职者注册时获得的编号

name

varchar(50)

N

姓名

sex

varchar(10)

N

性别

email

varchar(50)

N

电子邮箱

phone

varchar(20)

N

联系电话

address

varchar(100)

N

地址

education

varchar(50)

N

学历

graduate_institutions

varchar(50)

N

毕业院校

work_experience

varchar(100)

Y

工作经验

skills

varchar(100)

Y

专业技能

intention

varchar(50)

N

就业意向

status

 tinyint(1)

Y

0

录取结果(1为已录,0为未录

创建表的sql语句 

一、公司招聘信息表
CREATE TABLE `recruit` (
  `c_id` int unsigned NOT NULL,
  `company_type` varchar(50) NOT NULL DEFAULT '无',
  `company` varchar(100) NOT NULL DEFAULT '无',
  `position` varchar(50) NOT NULL DEFAULT '无',
  `position_require` varchar(100) NOT NULL DEFAULT '无',
  `job_duty` varchar(100) NOT NULL DEFAULT '无',
  `money` decimal(10,2) NOT NULL DEFAULT '0.00',
  `job_place` varchar(100) NOT NULL DEFAULT '无'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1.增加一条信息
INSERT INTO `recruit` (`c_id`, `company_type`, `company`, `position`, `position_require`, `job_duty`, `money`, `job_place`) VALUES
('1', 'IT', 'ABC公司', 'Java开发工程师', '本科及以上学历,精通Java编程,熟悉Spring、MyBatis等框架', '负责公司项目的开发和维护工作', '10000.0', '北京市海淀区'),
('2', '金融', '2000.0', '信用卡销售代表', '大专及以上学历,有销售经验者优先考虑', '负责银行信用卡的销售和推广工作', '底薪+提成', '上海市浦东新区'),
('3', '教育', 'EFG培训机构', '英语教师', '本科及以上学历,英语专业优先,有教学经验者优先考虑', '负责英语课程的教学和管理工作', '3000.0', '广州市天河区');

2.更新一条招聘信息
UPDATE `recruit` SET `position_require`='本科及以上学历,有3年以上的工作经验' WHERE `c_id`=1;

3.删除一条招聘信息
DELETE FROM `recruit` WHERE `c_id`=1;
4.查询所有招聘信息
SELECT * FROM `recruit`;
5.按公司名称查询招聘信息
SELECT * FROM `recruit` WHERE `company`='ABC公司';
6.按职位名称和薪资范围查询招聘信息
SELECT * FROM `recruit` WHERE `position`='销售代表' AND `money`>=4000.00 AND `money`<=6000.00;


二、公司信息表
CREATE TABLE `com_infor` (
  `c_id` int unsigned NOT NULL,
  `c_name` varchar(100) NOT NULL,
  `c_type` varchar(50) DEFAULT '无',
  `work_addr` varchar(100) DEFAULT '无',
  `c_tele` varchar(20) DEFAULT '无',
  `c_email` varchar(50) DEFAULT '无',
  PRIMARY KEY (`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
以下是增删改查的 SQL 语句:

1. 添加一家公司信息
INSERT INTO `com_infor` (`c_id`, `c_name`, `c_type`, `work_addr`, `c_tele`, `c_email`) 
VALUES (1, 'ABC公司', '私营企业', '北京市朝阳区', '010-12345678', '[email protected]');
2. 更新一家公司信息
UPDATE `com_infor` SET `work_addr`='北京市海淀区' WHERE `c_id`=1;
3. 删除一家公司信息
DELETE FROM `com_infor` WHERE `c_id`=1;
4. 查询所有公司信息
SELECT * FROM `com_infor`;
5. 按公司名称查询公司信息
SELECT * FROM `com_infor` WHERE `c_name`='ABC公司';
6. 按公司类型和工作地点查询公司信息
SELECT * FROM `com_infor` WHERE `c_type`='外资企业' AND `work_addr`='北京市朝阳区';



三、求职者回应的招聘表
CREATE TABLE `applications` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `company` varchar(50) NOT NULL,
  `position` varchar(50) NOT NULL,
  `resume_status` varchar(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3

以下是增删改查的 SQL 语句:
1. 添加一份简历投递记录
INSERT INTO `applications` (`name`, `company`, `position`, `resume_status`) 
VALUES ('张三', 'ABC公司', '销售代表', '已投递');
2. 更新一份简历投递记录的状态
UPDATE `applications` SET `resume_status`='已面试' WHERE `id`=1;
3. 删除一份简历投递记录
DELETE FROM `applications` WHERE `id`=1;
4. 查询所有简历投递记录
SELECT * FROM `applications`;
5. 按姓名查询简历投递记录
SELECT * FROM `applications` WHERE `name`='张三';
6. 按公司和职位查询简历投递记录
SELECT * FROM `applications` WHERE `company`='ABC公司' AND `position`='销售代表';


求职者信息表
CREATE TABLE `jobseeker` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `sex` varchar(10) NOT NULL,
  `email` varchar(50) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `address` varchar(100) NOT NULL,
  `education` varchar(50) NOT NULL,
  `graduate_institutions` varchar(50) NOT NULL,
  `work_experience` varchar(100) DEFAULT NULL,
  `skills` varchar(100) DEFAULT NULL,
  `intention` varchar(50) NOT NULL,
  `status` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb3



四、管理员账户密码表
CREATE TABLE `admins` (
  `id` int NOT NULL,
  `type` varchar(10) DEFAULT '管理员',
  `username` text NOT NULL,
  `password` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
以下是增删改查的 SQL 语句:
1. 添加一个管理员账户
INSERT INTO `admins` (`id`, `type`, `username`, `password`) 
VALUES (1, '管理员', 'admin', 'password123');
2. 更新管理员账户的密码
UPDATE `admins` SET `password`='newpassword123' WHERE `id`=1;
3. 删除一个管理员账户
DELETE FROM `admins` WHERE `id`=1;
4. 查询所有管理员账户
SELECT * FROM `admins`;
5. 按用户名查询管理员账户
SELECT * FROM `admins` WHERE `username`='admin';
6. 按账户类型查询管理员账户
SELECT * FROM `admins` WHERE `type`='管理员';


五、求职者账户密码表
CREATE TABLE `user_job_seekers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `type` varchar(10) DEFAULT '求职者',
  `job_seeker_name` varchar(50) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username_unique` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3
以下是增删改查的 SQL 语句:
1. 添加一份求职者信息
INSERT INTO `jobseeker` (`name`, `sex`, `email`, `phone`, `address`, `education`, `graduate_institutions`, `work_experience`, `skills`, `intention`, `status`) 
VALUES ('张三', '男', '[email protected]', '13812345678', '北京市朝阳区', '本科', '清华大学', '3年工作经验', '熟练掌握Java编程', '软件开发工程师', 0);
2. 更新一份求职者信息
UPDATE `jobseeker` SET `work_experience`='5年工作经验' WHERE `id`=1;
3. 删除一份求职者信息
DELETE FROM `jobseeker` WHERE `id`=1;
4. 查询所有求职者信息
SELECT * FROM `jobseeker`;
5. 按姓名查询求职者信息
SELECT * FROM `jobseeker` WHERE `name`='张三';
6. 按学历和求职意向查询求职者信息
SELECT * FROM `jobseeker` WHERE `education`='本科' AND `intention`='软件测试工程师';

六、公司HR用户账户密码表
CREATE TABLE `user_hrs` (
  `id` int NOT NULL AUTO_INCREMENT,
  `type` varchar(10) DEFAULT '公司HR',
  `username` varchar(255) NOT NULL,
  `password` text NOT NULL,
  `company_name` varchar(50) NOT NULL,
  `status` int DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username_unique` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3

以下是增删改查的 SQL 语句:

1. 添加一个公司 HR 账户
INSERT INTO `user_hrs` (`type`, `username`, `password`, `company_name`, `status`) 
VALUES ('公司HR', '[email protected]', 'password123', 'ABC公司', 1);
2. 更新公司 HR 账户的密码
UPDATE `user_hrs` SET `password`='newpassword123' WHERE `id`=1;
3. 删除一个公司 HR 账户
DELETE FROM `user_hrs` WHERE `id`=1;
4. 查询所有公司 HR 账户
SELECT * FROM `user_hrs`;
5. 按用户名查询公司 HR 账户
SELECT * FROM `user_hrs` WHERE `username`='[email protected]';
6. 按状态和公司名查询公司 HR 账户
SELECT * FROM `user_hrs` WHERE `status`=1 AND `company_name`='ABC公司';





4. 详细的设计与实现

4.1登入界面主界面

使用PYQT制作人才交流管理系统_第3张图片

4.1.1定义初始化方法 

首先通过pyqt5来使用python中的gui框架,定义一个login类,继承mainwindow和login_ui_form,用self.textEdit.toPlainText()去接收user,获取用户输入框中的用户名内容,用self.textEdit.text()去接收pwd,获取密码输入框中的密码内容,用user_type去选择用户类型是求职者,公司HR,还是管理员。

部分登入代码:towin.py

具体完整代码因为太长,会放在资源处,需修改代码中的数据库名称,用户名称和密码才可以运行

https://gitee.com/ink-ink0/hrm.git

#登入功能----------------------------------------------------------------
class Login(QMainWindow,login_Ui_Form):
    def __init__(self):
        super(Login, self).__init__()
        self.setupUi(self)
        self.buttonGroupuser_type.buttonClicked.connect(self.afterClickButton)#单选按钮设置
        self.pushButton.clicked.connect(self.login_btn)
        self.resign_first_win = None
        self.pushButton_2.clicked.connect(self.Open_resign_first)
        self.main_window =None
        self.jobseeker_change_win=None
        self.admin_main_window = None
        self.company_window=None

    def Open(self):
        self.show()
    def Open_resign_first(self):
        if not self.resign_first_win:
            self.resign_first_win=Resigin_first_Ui_Form()
        self.resign_first_win.Open()


    def jobseeker_login(self):
        pass
    def afterClickButton(self):
        btn=self.buttonGroupuser_type.checkedButton()
        type=btn.text()
        #print(type)
        return type

    def resign(self):
        print("注册")

    def login(self):
        print("login")
        conn = pymysql.connect(host='localhost',
                                user='root',
                                password='123456',
                                database='myhrms',
                                charset='utf8')
        user = self.lineEdit.text()
        pwd = self.lineEdit_2.text()
        user_type = self.afterClickButton()
        print(user_type)
        # 创建一个md5对象
        md5 = hashlib.md5()
        # 更新要加密的内容
        md5.update(pwd.encode('utf-8'))
        # 获取加密后的十六进制字符串
        pwd_md5 = md5.hexdigest()

        cur = conn.cursor()  # 生成游标对象
        result = None
        if user_type == '求职者':
            sql = "SELECT * FROM user_job_seekers WHERE username = %s AND password = %s "
            params = (user,pwd_md5)
            cur.execute(sql, params)
            result = cur.fetchone()
        elif user_type == '公司HR':
            sql = "SELECT * FROM user_hrs WHERE username = %s AND password = %s "
            params = (user,pwd_md5)
            cur.execute(sql, params)
            result = cur.fetchone()
        elif user_type == '管理员':
            sql = "SELECT * FROM admins WHERE username = %s AND password = %s "
            params = (user,pwd_md5)
            cur.execute(sql, params)
            result = cur.fetchone()

        cur.close()
        conn.close()
        return result, user_type

    def login_btn(self):
        try:
            result, user_type = self.login()
            print("login_btn_result", result)
            if result:
                print("成功登入")
                login.hide()
                type = result[1]
                user = result[3]
                print("result",result)
                print("type,user", type, user)
                if type == "求职者":
                    user = result[3]
                    self.Open_jobseeker(user)
                elif type == "公司HR":
                    user = result[2]
                    conn = pymysql.connect(host='localhost',
                                           user='root',
                                           password='123456',
                                           database='myhrms',
                                           charset='utf8')
                    cur = conn.cursor()  # 生成游标对象
                    sql1 = "select * from user_hrs where username =%s "
                    params = (user)
                    cur.execute(sql1, params)
                    data = cur.fetchall()  # 通过fetchall方法获得数据
                    stu = data[0][6]
                    print("公司HR",data[0][6])
                    # 打开公司HR界面
                    if stu ==1:
                        print("公司HR登入")
                        self.Open_company(user)
                    else:
                        print("管理员还未同意账号登入")
                        QMessageBox.warning(self, '错误', '管理员还未同意账号登入')

                elif type == "管理员":  # 打开管理员界面
                    self.Open_admin()
                    print("管理员登入")
                return type, user
            else:
                # self.textBrowser.setText("登录失败,请重试")
                QMessageBox.warning(self, '错误', '用户名或密码错误!')
                return None
        except Exception as e:
            print("登录失败,错误信息为:", e)
            QMessageBox.warning(self, '错误', '登录失败,请重试!')
            return None

login.py:此文件为设计登入界面的UI后编译成py文件 

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class login_Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(905, 496)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(440, 350, 111, 61))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(170, 350, 111, 61))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(90, 130, 72, 15))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(100, 210, 72, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(90, 290, 72, 15))
        self.label_3.setObjectName("label_3")
        self.radioButton = QtWidgets.QRadioButton(Form)
        self.radioButton.setGeometry(QtCore.QRect(200, 290, 115, 19))
        self.radioButton.setObjectName("radioButton")
        self.buttonGroupuser_type = QtWidgets.QButtonGroup(Form)
        self.buttonGroupuser_type.setObjectName("buttonGroupuser_type")
        self.buttonGroupuser_type.addButton(self.radioButton)
        self.radioButton_2 = QtWidgets.QRadioButton(Form)
        self.radioButton_2.setGeometry(QtCore.QRect(350, 290, 115, 19))
        self.radioButton_2.setObjectName("radioButton_2")
        self.buttonGroupuser_type.addButton(self.radioButton_2)
        self.radioButton_3 = QtWidgets.QRadioButton(Form)
        self.radioButton_3.setGeometry(QtCore.QRect(520, 290, 115, 19))
        self.radioButton_3.setObjectName("radioButton_3")
        self.buttonGroupuser_type.addButton(self.radioButton_3)
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(190, 120, 341, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(190, 200, 341, 31))
        self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
        self.lineEdit_2.setObjectName("lineEdit_2")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "登入界面"))
        self.pushButton.setText(_translate("Form", "登入"))
        self.pushButton_2.setText(_translate("Form", "注册"))
        self.label.setText(_translate("Form", "用户名"))
        self.label_2.setText(_translate("Form", "密码"))
        self.label_3.setText(_translate("Form", "用户类型"))
        self.radioButton.setText(_translate("Form", "求职者"))
        self.radioButton_2.setText(_translate("Form", "公司HR"))
        self.radioButton_3.setText(_translate("Form", "管理员"))

5.效果演示

5.1求职者模块

使用PYQT制作人才交流管理系统_第4张图片

使用PYQT制作人才交流管理系统_第5张图片

使用PYQT制作人才交流管理系统_第6张图片

使用PYQT制作人才交流管理系统_第7张图片

5.2公司HR用户模块

使用PYQT制作人才交流管理系统_第8张图片

使用PYQT制作人才交流管理系统_第9张图片

使用PYQT制作人才交流管理系统_第10张图片

使用PYQT制作人才交流管理系统_第11张图片

使用PYQT制作人才交流管理系统_第12张图片

5.3管理员模块

使用PYQT制作人才交流管理系统_第13张图片

使用PYQT制作人才交流管理系统_第14张图片

使用PYQT制作人才交流管理系统_第15张图片

你可能感兴趣的:(pyqt,开发语言,python,后端,数据库)