系统具有以下功能:
员工考勤记录的删除和查询:管理员可以通过系统删除和查询员工的考勤记录。删除功能可以根据员工ID和日期删除指定的考勤记录,查询功能可以根据员工ID查询员工的考勤记录。
公司策略设定:管理员可以设定公司的上下班时间,即公司的考勤策略。通过系统的界面,管理员可以输入上班时间和下班时间,并进行保存。
当日迟到和缺勤明细的显示:系统可以显示当日的迟到和缺勤明细。管理员可以在系统中选择指定日期范围,系统会根据设定的范围查询当日存在迟到或缺勤情况的员工,并显示其相应的考勤记录。
这些功能主要通过系统的可视化界面来实现,包括考勤管理窗体、考勤设置窗体、当日缺勤明细窗体等。用户可以通过界面上的按钮进行相应的操作,例如删除员工考勤记录、查询员工考勤记录、设定公司的考勤策略等。
通过这些功能,考勤管理系统可以帮助公司管理员工的考勤记录,提高工作效率,规范考勤政策,并为管理者提供数据分析和决策支持。
SQL语句进行表格的创建,和数据的插入:
CREATE TABLE 考勤记录表 (
ID INT IDENTITY(1, 1) PRIMARY KEY,
员工ID VARCHAR(50) NOT NULL,
日期 DATE NOT NULL,
迟到 VARCHAR(2) NOT NULL,
缺勤 VARCHAR(2) NOT NULL
);
CREATE TABLE 公司策略表 (
上班时间 TIME NOT NULL,
下班时间 TIME NOT NULL
);
INSERT INTO 考勤记录表 (员工ID, 日期, 迟到, 缺勤)
VALUES ('1001', '2023-06-17', '是', '否'),
('1002', '2023-06-17', '否', '是'),
('1003', '2023-06-18', '否', '否');
INSERT INTO 公司策略表 (上班时间, 下班时间)
VALUES ('09:00:00', '18:00:00');
import pyodbc
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QLabel, QLineEdit, QPushButton, QVBoxLayout, \
QMessageBox, QTableWidget, QTableWidgetItem,QWidget
# 连接到 SQL Server 数据库
conn = pyodbc.connect('Driver={SQL Server};Server=LAPTOP-G76L8H0V;Database=attendance_management;Trusted_Connection=yes;')
class AttendanceManagementWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('考勤管理系统')
self.resize(400, 300)
self.delete_record_button = QPushButton('删除员工考勤记录', self)
self.delete_record_button(self.delete_record)
self.query_record_button = QPushButton('查询员工考勤记录', self)
self.query_record_button.clicked.connect(self.query_record)
self.set_policy_button = QPushButton('公司策略设定', self)
self.set_policy_button.clicked.connect(self.set_policy)
self.show_absences_button = QPushButton('显示当日迟到、缺勤明细', self)
self.show_absences_button.clicked.connect(self.show_absences)
layout = QVBoxLayout()
layout.addWidget(self.delete_record_button)
layout.addWidget(self.query_record_button)
layout.addWidget(self.set_policy_button)
layout.addWidget(self.show_absences_button)
central_widget = QWidget(self)
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def delete_record(self):
dialog = DeleteRecordDialog(self)
if dialog.exec_():
employee_id = dialog.employee_id_line_edit.text()
# 执行数据库删除操作
cursor = conn.cur()
cursor.execute(f"DELETE FROM 考勤记录表 WHERE 员工ID = '{employee_id}'")
conn.commit()
QMessageBox.information(self, '删除成功', '已成功删除员工考勤记录。')
def query_record(self):
dialog = QueryRecordDialog(self)
if dialog.exec_():
employee_id = dialog.employee_id_line_edit.text()
# 执行数据库查询操作
cursor = conn.cursor()
cursor.execute(f"SELECT * FROM 考勤记录表 WHERE 员工ID = '{employee_id}'")
records = cursor.fet()
if records:
QMessage.information(self, '查询结果', f'员工 {employee_id} 的考勤记录如下:\n\n' +
'\n'.join([str(record) for record in records]))
else:
QMessageBox.warning(self, '查询结果', '未找到该员工的考勤记录。')
def set_policy(self):
dialog = SetPolicyDialog(self)
if dialog.exec_():
start_time = dialog.start_time_line_edit.text()
end_time = dialog.end_time_line_edit.text()
# 执行数据库更新操作,更新公司策略
cursor = conn.cursor()
cursor.execute("UPDATE 公司策略表 SET 上班时间 = ?, 下班时间 = ?", (start_time, end_time))
conn.commit()
QMessageBox.information(self, '策略设定成功', '公司策略已成功设定。')
def show_absences(self):
dialog = DateRangeDialog(self)
if dialog.exec_():
start_date = dialog.start_date_line_edit.text()
end_date =end_date_line_edit.text()
# 执行数据库查询操作,获取当日迟到、缺勤明细
cursor = conn.cursor()
cursor.execute(f"SELECT * FROM 考勤记录表 WHERE 日期 BETWEEN '{start_date}' AND '{end_date}' "
f"AND (迟到 = '是' OR 缺勤 = '是')")
records = cursor.fetchall()
if records:
table = QTable(len(records), 4)
table.setHorizontalHeaderLabels(['日期', '员工ID', '迟到', '缺勤'])
for i, record in enumerate(records):
for j in range(4):
table.setItem(i, j, QTableWidgetItem(str(record[j])))
table.setWindowTitle('当日迟到、缺勤明细')
table.resize(400, 300)
table.show()
else:
QMessageBox.information(self, '无迟到、缺勤记录', '在指定日期范围内没有迟到或缺勤记录。')
class DeleteRecordDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('删除员工考勤记录')
self.resize(300, 100)
self.employee_id_label = QLabel('员工ID:', self)
self.employee_id_line = QLineEdit(self)
self.delete_button = QPushButton('删除', self)
self.delete_button.clicked.connect(self.accept)
layout = QVBoxLayout()
layout.addWidget(self.employee_id_label)
layout.addWidget(self.employee_id_line_edit)
layout.addWidget(self.delete_button)
self.setLayout(layout)
class QueryRecordDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindow('查询员工考勤记录')
self.resize(300, 100)
self.employee_id_label = QLabel('员工ID:', self)
self.employee_id_line_edit = QLineEdit(self)
self.query_button = QPushButton('查询', self)
self.query_button.clicked.connect(self.accept)
layout = QVBoxLayout()
layout.addWidget(self.employee_id_label)
layout.addWidget(self.employee_id_line_edit)
layout.addWidget(self.query_button)
self.setLayout(layout)
class SetPolicyDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('公司策略设定')
self.resize(300, 150)
self.start_time_label = QLabel('上班时间:', self)
self.start_time_line_edit = QLineEdit(self)
self.end_time_label = QLabel('下班时间:', self)
self.end_time_line_edit = QLineEdit(self)
self.set_policy_button = QPushButton('设定', self)
self.set_policy_button.clicked.connect(self.accept)
layout = QVBoxLayout()
layout.addWidget(self.start_time_label)
layout.addWidget(self.start_time_line_edit)
layout.addWidget(self.end_time_label)
layout.addWidget(self.end_time_line_edit)
layout.addWidget(self.set_policy_button)
self.setLayout(layout)
class DateRangeDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('设定查询范围')
self.resize(300, 150)
self.start_date_label = QLabel('起始日期:', self)
self.start_date_line_edit = QLineEdit(self)
self.end_date_label = QLabel('结束日期:', self)
self.end_date_line_edit = QLineEdit(self)
self.set_date_range_button = QPushButton('设定', self)
self.set_date_range_button.clicked.connect(self.accept)
layout = QVBoxLayout()
layout.addWidget(self.start_date_label)
layout.addWidget(self.start_date_line_edit)
layout.addWidget(self.end_date_label)
layout.addWidget(self.end_date_line_edit)
layout.addWidget(self.set_date_range_button)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication([])
main_window = AttendanceManagementWindow()
main_window.show()
app.exec_()