#ifndef ATTENDANCE_SYSTEM_CHECKIN_HPP #define ATTENDANCE_SYSTEM_CHECKIN_HPP #include #include #include namespace AttendanceSystem { // 打卡方式枚举 enum class CheckInMethod { FACE_RECOGNITION, // 人脸识别 GPS_LOCATION, // GPS定位 CARD_SWIPE // 工牌刷卡 }; // 位置信息结构 struct Location { double latitude; // 纬度 double longitude; // 经度 Location() : latitude(0.0), longitude(0.0) {} Location(double lat, double lng) : latitude(lat), longitude(lng) {} bool isValid() const { return latitude >= -90.0 && latitude <= 90.0 && longitude >= -180.0 && longitude <= 180.0; } }; class CheckInRecord { public: CheckInRecord(); CheckInRecord(const std::string& recordId, const std::string& employeeId, CheckInMethod method, time_t timestamp, const Location& location); // Getter方法 std::string getRecordId() const { return recordId_; } std::string getEmployeeId() const { return employeeId_; } CheckInMethod getMethod() const { return method_; } time_t getTimestamp() const { return timestamp_; } Location getLocation() const { return location_; } std::vector getFaceFeature() const { return faceFeature_; } // Setter方法 void setRecordId(const std::string& id) { recordId_ = id; } void setEmployeeId(const std::string& empId) { employeeId_ = empId; } void setMethod(CheckInMethod method) { method_ = method; } void setTimestamp(time_t ts) { timestamp_ = ts; } void setLocation(const Location& loc) { location_ = loc; } void setFaceFeature(const std::vector& feature) { faceFeature_ = feature; } // 验证记录是否有效 bool isValid() const; // 获取打卡方式字符串 std::string getMethodString() const; // 获取格式化时间字符串 std::string getFormattedTime() const; // 显示打卡记录 void display() const; // 判断是否迟到(相对于指定时间) bool isLate(int expectedHour, int expectedMinute) const; // 判断是否早退(相对于指定时间) bool isEarlyLeave(int expectedHour, int expectedMinute) const; private: std::string recordId_; // 记录ID std::string employeeId_; // 员工ID CheckInMethod method_; // 打卡方式 time_t timestamp_; // 时间戳 Location location_; // 位置信息 std::vector faceFeature_; // 人脸特征数据(二进制) }; } // namespace AttendanceSystem #endif // ATTENDANCE_SYSTEM_CHECKIN_HPP