C++实现考勤管理系统

C++实现考勤管理系统

简介

考勤管理系统是一种可以对员工的出勤情况进行统计和分析的工具,它可以帮助企业更加有效地管理其员工,并且提高员工出勤率。本文将介绍如何用C++实现考勤管理系统。

设计思路

考勤管理系统需要满足以下功能:

  1. 输入员工的考勤信息。
  2. 对员工的考勤记录进行存储和管理。
  3. 统计员工的出勤情况,并给出相应的报告。

为了实现这些功能,我们需要设计以下几个类:

  1. Employee类:用于表示每个员工的基本信息和考勤记录。
  2. AttendanceRecord类:用于表示每个员工每天的考勤记录。
  3. AttendanceManager类:用于管理所有员工的考勤信息和生成报告。

类设计

Employee

Employee类需要包含以下成员变量:

class Employee {
public:
    string name; //姓名
    string id; //工号
    string department; //所属部门
    vector<AttendanceRecord> attendanceRecords; //考勤记录
}

Employee类还需要包含以下方法:

class Employee {
public:
    void addAttendanceRecord(AttendanceRecord record); //添加考勤记录
}

AttendanceRecord

AttendanceRecord类需要包含以下成员变量:

class AttendanceRecord {
public:
    string date; //日期
    int signInHour; //上班签到小时
    int signInMinute; //上班签到分钟
    int signOutHour; //下班签退小时
    int signOutMinute; //下班签退分钟
}

AttendanceManager

AttendanceManager类需要包含以下成员变量:

class AttendanceManager {
private:
    vector<Employee> employees; //所有员工的考勤信息
public:
    void addEmployee(Employee e); //添加员工
    void addAttendanceRecord(string id, AttendanceRecord record); //为指定员工添加考勤记录
    void generateReport(); //生成考勤报告
}

代码实现

Employee类实现

class Employee {
public:
    string name;
    string id;
    string department;
    vector<AttendanceRecord> attendanceRecords;

    void addAttendanceRecord(AttendanceRecord record) {
        attendanceRecords.push_back(record);
    }
};

AttendanceRecord类实现

class AttendanceRecord {
public:
    string date;
    int signInHour;
    int signInMinute;
    int signOutHour;
    int signOutMinute;
};

AttendanceManager类实现

class AttendanceManager {
private:
    vector<Employee> employees;

public:
    void addEmployee(Employee e) {
        employees.push_back(e);
    }

    void addAttendanceRecord(string id, AttendanceRecord record) {
        for (int i = 0; i < employees.size(); ++i) {
            if (employees[i].id == id) {
                employees[i].addAttendanceRecord(record);
                break;
            }
        }
    }

    void generateReport() {
        cout << "部门\t姓名\t日期\t上班签到时间\t下班签退时间\t迟到\t早退\n";
        cout << "--------------------------------------------------------------\n";
        for (int i = 0; i < employees.size(); ++i) {
            for (int j = 0; j < employees[i].attendanceRecords.size(); ++j) {
                AttendanceRecord record = employees[i].attendanceRecords[j];
                int late = (record.signInHour * 60 + record.signInMinute) - (9 * 60 + 0);
                int early = (18 * 60 + 0) - (record.signOutHour * 60 + record.signOutMinute);
                if (late < 0) {
                    late = 0;
                }
                if (early < 0) {
                    early = 0;
                }
                cout << employees[i].department << "\t" << employees[i].name << "\t" << record.date << "\t"
                     << record.signInHour << ":" << record.signInMinute << "\t"
                     << record.signOutHour << ":" << record.signOutMinute << "\t"
                     << late << "\t" << early << "\n";
            }
        }
    }
};

示例说明

假设我们有两个员工A、B,他们都在同一个部门,需要记录他们的考勤信息。以下是代码示例:

AttendanceManager manager;

Employee e1;
e1.name = "张三";
e1.id = "10001";
e1.department = "研发一部";

AttendanceRecord r1;
r1.date = "2022-01-01";
r1.signInHour = 8;
r1.signInMinute = 50;
r1.signOutHour = 17;
r1.signOutMinute = 30;
e1.addAttendanceRecord(r1);

manager.addEmployee(e1);
manager.addAttendanceRecord("10001", r1);

Employee e2;
e2.name = "李四";
e2.id = "10002";
e2.department = "研发一部";

AttendanceRecord r2;
r2.date = "2022-01-01";
r2.signInHour = 9;
r2.signInMinute = 10;
r2.signOutHour = 18;
r2.signOutMinute = 15;
e2.addAttendanceRecord(r2);

manager.addEmployee(e2);
manager.addAttendanceRecord("10002", r2);

manager.generateReport();

执行完毕后,将会输出一份考勤报告,如下所示:

部门  姓名  日期  上班签到时间  下班签退时间  迟到  早退
--------------------------------------------------------------
研发一部    张三  2022-01-01  8:50    17:30   0   30
研发一部    李四  2022-01-01  9:10    18:15   10  0

考勤报告中,包含两个员工的考勤记录情况,以及他们当天的迟到和早退情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现考勤管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C 标准库 errno.h

    让我们来详细讲解一下 C 标准库 errno.h 的使用攻略。 什么是 errno? errno 是 C 标准库中的一个全局变量,其类型为 int,用于表达函数或操作的错误码(错误编号)。如果一个函数或操作执行出错,其返回值可能无法明显地反映错误的信息,此时可以通过 errno 变量获取更详细的错误信息。errno 的具体取值由库函数或系统调用设置。 系统调…

    C 2023年5月10日
    00
  • JavaScript解构赋值详解

    JavaScript解构赋值详解 JavaScript解构赋值是一种简洁、快速、易读的语法,允许您从数组或对象中提取值并将它们赋值给变量。在本篇文章中,我们将详细探讨解构赋值的语法、使用方法和技巧。 什么是解构赋值? 解构赋值是ES6中的一种语法,它允许我们从数组、对象或函数参数中提取值,并将这些值赋给独立的变量。 对象解构 我们可以使用对象字面量来定义一个…

    C 2023年5月23日
    00
  • Qt实现UDP多线程数据处理及发送的简单实例

    下面我详细讲解一下“Qt实现UDP多线程数据处理及发送的简单实例”的完整攻略。 1. 确定需求 首先需要明确我们的需求,这里我们需要实现一个UDP多线程的数据处理及发送的示例程序,用于实现UDP数据包的接收、处理和发送功能。 2. 环境搭建 接着,我们需要搭建Qt的开发环境,即安装Qt Creator和Qt库。这里我们使用Qt Creator 4.14.0和…

    C 2023年5月22日
    00
  • Ajax和Comet技术总结

    Ajax和Comet技术总结 Ajax是Asynchronous JavaScript and XML(异步JavaScript和XML)的缩写。它是一种利用JavaScript和XML在Web服务器上异步传输数据的技术。它可以在不重新加载整个网页的情况下,更新某个特定部分的内容。Ajax能够在不干扰客户端的情况下,优化Web应用的性能。 Ajax的优点 网…

    C 2023年5月23日
    00
  • C语言实现通讯录

    一、通讯录准备 1. 通讯录信息的准备 2. 通讯录功能的框架 3. 文件安排 二、实现通讯录的功能 1. 添加功能 2. 删除功能 3. 展示功能 4. 更改功能 5. 查找功能 6. 排序功能 三、总结 1.在main函数中,采用&的原因 2.在使用scanf函数时,为何某些参数不需要&,而有一些参数需要使用& 3.在添加功能中,…

    C语言 2023年4月18日
    00
  • C语言使用函数指针数组

    使用函数指针数组是C语言中一种非常灵活的编程技巧,可以在代码中实现更加复杂的逻辑,提高代码的可读性和可维护性。本文将详细讲解如何使用函数指针数组,包含以下几个方面的内容: 函数指针数组的定义和初始化 函数指针数组的使用方法 示例演示 函数指针数组的定义和初始化 函数指针数组是由多个函数指针组成的数组,其定义形式为: returnType (*arrayNam…

    C 2023年5月9日
    00
  • 数据转换冲突及转换过程中大对象的处理

    数据转换冲突及转换过程中大对象的处理 在进行数据转换时,可能会出现数据类型不匹配或者数据格式不兼容等问题,这会导致数据转换失败。同时,数据转换过程中可能会涉及到大对象(如图片、视频等),如何处理这些大对象也是值得关注的问题。 在处理数据转换中的冲突问题时,我们需要注意以下几点: 确定数据类型 在进行数据转换之前,首先需要明确源数据和目标数据的类型。如果类型不…

    C 2023年5月22日
    00
  • QT连接Mysql数据库的实现步骤

    好的。首先,我们需要安装 Qt 和 mysql 的相关驱动程序。安装完后,我们可以开始进行以下步骤: 步骤一:加载 mysql 驱动 在 Qt 中连接 mysql 数据库之前,我们需要在程序中先加载 mysql 驱动。在通常情况下,mysql 驱动是通过插件的方式来实现的。我们需要在项目的.pro 文件中加入以下代码: QT += sql QT += sql…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部