数据库课程设计:考勤管理系统

系统具有以下功能:

员工考勤记录的删除和查询:管理员可以通过系统删除和查询员工的考勤记录。删除功能可以根据员工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_()

 

  • 12
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
某单位考勤管理系统的课程设计需要使用SQL Server来进行数据库管理。SQL Server是一种由Microsoft开发的关系型数据库管理系统。该系统具有稳定性高、安全性好、性能优越、可扩展性强等特点,非常适合用于大型企业的数据管理。 在考勤管理系统中,利用SQL Server可以方便地存储、管理和查询员工的考勤数据。我们可以设计一个名为"attendance"的数据表来存储考勤记录,其中包括字段如下: - "id":考勤记录的唯一标识,采用自增长的方式生成; - "employee_id":员工的唯一标识,方便与员工信息表进行关联; - "date":考勤日期; - "attendance_status":考勤状态,可以是"正常"、"迟到"、"早退"、"旷工"等; - "time_in":上班打卡时间; - "time_out":下班打卡时间。 除此之外,还可以设计一个名为"employees"的数据表来存储员工的相关信息,包括字段如下: - "id":员工的唯一标识,采用自增长的方式生成; - "name":员工姓名; - "department":员工所属部门; - "position":员工职位; - "salary":员工工资等。 通过在SQL Server中创建这些数据表,并建立合适的索引和关联,我们可以实现对考勤数据的快速查询和分析。同时,可以使用SQL Server提供的丰富的功能和语法,编写存储过程和触发器等来实现一些复杂的业务逻辑,如自动生成考勤统计报表、提醒迟到早退等。 总之,使用SQL Server来设计某单位考勤管理系统数据库,可以实现员工考勤数据的高效管理和查询,提高考勤工作的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哭哭啼啼的小天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值