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

本文介绍了考勤管理系统的关键功能,如删除和查询员工考勤记录、设定公司策略,以及使用SQL操作数据库创建和管理考勤表格。还展示了如何通过可视化界面进行操作,以提升管理员效率和考勤管理的规范性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统具有以下功能:

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

 

自己做的 一个 考勤信息管理系统 第一章 可行性分析 1 1.1 引言 1 1.1.1 编写目的 1 1.1.2 项目背景 1 1.2 可行性研究的前提 2 1.2.1 要求及目标 2 1.2.2 条件假定和限制 3 1.3 技术可行性分析 3 1.3.1 技术的支持能力 3 1.3.2 技术的优势 3 1.3.3 技术的难点 4 1.4 经济可行性分析 4 1.4.1 投资 4 1.4.2 效益 4 1.5 社会可行性分析 5 1.5.1 法律因素 5 1.5.2 用户可行性 5 1.6 结论意见 5 第二章 需求分析 6 2.1 系统需求 6 2.2 功能需求 6 2.3 数据流图 7 2.3.1 系统顶层图 7 2.3.2 数据流程图一层分解图 8 2.3.3 数据流程图二层分解图 10 2.4 数据字典 14 2.4.1 数据流条目 14 2.4.2 数据项 16 2.4.2 加工条目 18 第三章 概念设计 22 3.1 实体之间的联系 22 3.2 E-R图 22 3.2.1 局部E-R图 22 3.2.2 整体E-R图 25 第四章 逻辑设计 26 4.1 概念模型向关系模型的转换 26 4.1.1 1:N联系的转化的关系模式 26 4.1.2 M:N联系的转化的关系模式 26 4.2 关系模式的优化 27 4.2.1 确定范式级别 27 4.2.2 实施规范化处理 27 第五章 物理设计 29 5.1 数据库的存储结构 29 5.1.1 数据库 29 5.1.2 数据库表结构 29 5.1.3 数据的存放位置设计 32 5.1.4 系统配置 32 5.2 关系模式的存取方法 33 第六章 实现运行与维护 34 6.1 数据库的建立 34 6.2 表的创建 34 6.3 视图的设计 37 6.4 存储过程的设计 38 6.5 触发器的设计 40 6.6 运行与维护 41 总结 42 参考文献 43
设计一个基于SQL Server的服装销售系统时,课程设计可能包含以下几个关键部分: 1. **需求分析**:首先,明确系统的功能需求,比如库存管理、订单处理、顾客信息管理、销售统计等。这将决定数据库架构和表设计。 2. **概念设计**:创建E-R图(实体-联系模型),定义主要实体如客户、产品、订单、库存等,以及它们之间的关系。 3. **逻辑设计**:使用SQL Server设计模式,将E-R模型转换为关系型数据库模式,例如创建表格,并确定字段、主键、外键等。 4. **创建数据库和表**: - 创建`Customers`表,存储客户信息(如ID、姓名、联系方式)。 - 创建`Products`表,存储产品信息(如ID、名称、价格、库存量)。 - 创建`Orders`表,记录订单信息(如ID、客户ID、产品ID、数量、订单日期)。 - 可能还需要`OrderDetails`表来存储更详细的订单明细。 5. **数据表结构设计**: - 包括字段类型(如INT、VARCHAR、DATE)、索引和约束(如UNIQUE、FOREIGN KEY)。 6. **编写SQL脚本**:创建表、插入初始数据、定义触发器和存储过程以支持库存管理和订单处理等业务逻辑。 7. **数据操作**:编写用于查询、添加、删除和修改数据的SQL语句,如查询库存、处理销售订单等。 8. **安全性考虑**:设置用户权限,确保只有授权用户才能访问特定数据。 9. **性能优化**:对查询执行计划进行分析,可能涉及分区、索引优化等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哭哭啼啼的小天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值