C++实现考勤管理系统
简介
考勤管理系统是一种可以对员工的出勤情况进行统计和分析的工具,它可以帮助企业更加有效地管理其员工,并且提高员工出勤率。本文将介绍如何用C++实现考勤管理系统。
设计思路
考勤管理系统需要满足以下功能:
- 输入员工的考勤信息。
- 对员工的考勤记录进行存储和管理。
- 统计员工的出勤情况,并给出相应的报告。
为了实现这些功能,我们需要设计以下几个类:
Employee
类:用于表示每个员工的基本信息和考勤记录。AttendanceRecord
类:用于表示每个员工每天的考勤记录。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技术站