题目59 考勤记录(ok)

公司用一个字符串来标识员工的出勤信息
absent:    缺勤
late:      迟到
leaveearly:早退
present:   正常上班

现需根据员工出勤信息,判断本次是否能获得出勤奖,
能获得出勤奖的条件如下:
1.缺勤不超过1次
2.没有连续的迟到/早退
3.任意连续7次考勤 缺勤/迟到/早退 不超过3次

输入描述:
用户的考勤数据字符串记录条数  >=1
输入字符串长度 <10000 ;
不存在非法输入
如:
2
present
present absent present present leaveearly present absent

输出描述:
根据考勤数据字符串
如果能得到考勤奖输出true否则输出false
对于输出示例的结果应为
true false

示例一:
输入:
2
present
present present

输出:
true true

示例二
输入:
2
present
present absent present present leaveearly present absent
输出:
true false
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

enum {
    NUM_ABSENT,
    NUM_LATE,
    NUM_LEAVEEARLY,
    NUM_PRESENT
};

void IsQuan(char *s)
{
    char *token = NULL;
    int list[256] = {0};
    int idx = 0, i, j;
    int absent = 0;
    /*
    absent:    缺勤
    late:      迟到
    leaveearly:早退
    present:   正常上班
    */
    token = strtok(s, " ");
    while (token != NULL) {
        //printf("%s\n", token);
        if (strcmp(token, "absent") == 0) {
            list[idx] = NUM_ABSENT;
            absent++;
            if (absent > 1) {
                printf("false\n");
                return;
            }
        } else if (strcmp(token, "late") == 0) {
            list[idx] = NUM_LATE;
        } else if (strcmp(token, "leaveearly") == 0) {
            list[idx] = NUM_LEAVEEARLY;
        } else if (strcmp(token, "present") == 0) {
            list[idx] = NUM_PRESENT;
        }
        idx++;
        token = strtok(NULL, " ");
    }

    int count;
    for (i = 0; i < idx; i++) {
        count = 0;
        for (j = i ;j < i + 7 && i + 7 <=idx; j++) {
            if (list[j] == NUM_ABSENT || list[j] == NUM_LATE || list[j] == NUM_LEAVEEARLY) {
                count++;
            }
        }
        if (count > 3) {
            printf("false\n");
            return;
        }
    }
    printf("true\n");
}

int main()
{
    int n, i;
    char input[32] = {0};

    scanf("%d", &n);
    getchar();

    for (i = 0; i < n; i++) {
        memset(input, 0, sizeof(input));
        gets(input);
        // printf("%s\n", input);
        IsQuan(input);
    }

    return 0;
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要处理 MySQL 中的考勤记录,您需要创建一个适当的表格来存储考勤数据,并使用合适的字段来表示员工、日期和考勤状态等信息。以下是一个示例表格结构: ```sql CREATE TABLE attendance ( id INT AUTO_INCREMENT PRIMARY KEY, employee_id INT, date DATE, status ENUM('Present', 'Absent', 'Late', 'Leave'), check_in_time DATETIME, check_out_time DATETIME ); ``` 上述示例表格使用了名为`attendance`的表格,其中包含以下字段: - `id`:考勤记录的唯一标识符(自增主键)。 - `employee_id`:员工的唯一标识符,用于关联到员工表格中的员工信息。 - `date`:考勤日期。 - `status`:考勤状态,可选值为'Present'(出席)、'Absent'(缺席)、'Late'(迟到)和'Leave'(请假)等。 - `check_in_time`:签到时间。 - `check_out_time`:签退时间。 您可以根据实际需求进行调整和扩展表格结构。 一旦您创建了考勤记录表格,您就可以使用适当的 SQL 查询语句来处理考勤数据,例如: ```sql -- 统计员工每月的出勤天数 SELECT employee_id, MONTH(date) AS month, COUNT(*) AS attendance_days FROM attendance WHERE YEAR(date) = 2022 GROUP BY employee_id, MONTH(date); -- 查找迟到超过15分钟的员工记录 SELECT employee_id, date, check_in_time FROM attendance WHERE status = 'Late' AND TIMEDIFF(check_in_time, CONCAT(DATE(check_in_time), ' 09:00:00')) > '00:15:00'; ``` 这些只是一些示例查询语句,您可以根据具体需求和表格结构设计更复杂的查询。如果您有更具体的问题或需要更详细的帮助,请随时告诉我!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

羊族的希望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值