打卡机核心功能实现

C语言小项目—上下班打卡机(核心功能实现)

 

项目简介:

 
  应市场需求,某工程师现设计了一款新上下班打卡机,打卡机具有以下功能:
  (1) 上班打卡,员工具有编号(首位为 1 的六位编号),输入编号后,再
输入校验码,校验码生成规则:员工编号除首位反序,再与员工编号
求和,如:员工编号,110086,校验码为 178087。校验码错误即打
卡失败。记录打卡时间
  (2) 下班打卡,只需输入员工编号即可。记录打卡时间,显示该人员今天
上班时长,如果上班时长不够,显示早退 xx 分钟。可以更新下班打
卡时间。无下班打卡显示缺卡。
  (3) 可以设置规定上班时长,如 9 小时
  (4) 测试需要可以规定 6 秒=实际 1 小时,每次测试,输入指令后,开启
打卡机,打卡机开启模拟时间为:周一早上七点。程序运行结束为周
五晚 12 点。
  (5) 实行弹性打卡制,如前一天上班时长超过规定时长 3 小时以上,第
二天迟到 2 小时以内不算迟到。
  (6) 打卡机运行结束之前,每周该打卡机会生成每周考勤周报,显示周平
均上班时长,周迟到,早退,缺卡次数等。

 

任务过程:

 
  1、创建项目
  2、合理定义所需函数,主函数中只允许有 clockin_machine_start()调用
  3、按照任务概述实现函数流程
  4、调试修改

 

测试及部分代码:

 
一、上班时长设置
 

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include "Global.h"

void ClockIn_machine_start();
void ClockIn();
void ClockOut();
int Check();
void ReHours();
void UpDateTime(int pattern);
void WeekChart(int day, int duringTime);



int number;  //员工编号
int pattern = 1;  //打卡模式(1为上班打卡,2为下班打卡)
int startTimes[5] = {
    0 };        //上班打卡次数限制(每日1次)
int stopTimes[5] = {
    0 };	      //下班打卡次数限制(每日3次,允许误打)
clock_t openTime, insert, start, stop;
long duration;   //打卡持续时长
int officeHours = 9;   //上班时间,默认为9小时
int day = 0;       //打卡日期
int hour;      //打卡当天时间(时)
int minute;    //打卡当天时间(分)
int duringTime;   //实际上班时间
int times_1 = 0;   //迟到次数
int times_2 = 0;   //早退次数
int times_3 = 0;   //缺卡次数
int chart[5] = {
    0 };



int main(int argv, char *argc[]) {
   

	ClockIn_machine_start();
	system("PAUSE");
	return 0;

}

void ClockIn_machine_start()
{
   

	//规定上班时间
	ReHours();

	while (1)
	{
   
		//打卡模式选择
		printf("\n***************************************************************\n\n");
		printf("                   1.上班打卡\n");
		printf("                   2.下班打卡\n");
		printf("                   3.当前时间\n");
		printf("\n***************************************************************\n\n");

		printf("输入“3”可获取当前时间\n输入“1”或“2”进行打卡模式选择:\n");
		scanf_s("%d", &pattern);

		if (pattern == 1)
		{
   
			if (startTimes[day] == 0) {
   
				//上班打卡
				ClockIn();
			}
			else
			{
   
				printf("请勿在一天中重复上班打卡\n");
				UpDateTime(0);
			}
		}
		else if (pattern == 2)
		{
   
			if (stopTimes[day] < 3) {
   
				//下班打卡
				ClockOut();
			}
			else
			{
   
				printf("今日下班打卡次数已达上线\n");
				UpDateTime(0);
			}
		}
		else if (pattern == 3)
		{
   
			//显示当前时间
			UpDateTime(0);
		}
		else
		{
   
			printf("打卡失败,请输入正确的指令!!!\n");
		}

	}

}

void ReHours()
{
   
	printf("***************************************************************");
	printf("\n\n                    上班时长设置\n");
	printf("\n***************************************************************\n\n");

	char reFlag = 'n';
	printf("是否自定义上班时长(默认上班时长为 9 小时)  [Y/n]\n");
	reFlag = getchar();

	if (reFlag == 'Y' || reFlag == 'y')
	{
   
		printf("设置上班时长:\n");

		scanf_s("%d", &officeHours);
	}

	printf("打卡机开启\n");
	openTime = clock();     //设置好打卡时长后,打卡机开启

}

 
在这里插入图片描述

 
二、上班打卡
 

void ClockIn()
{
   
	printf("\n***************************************************************");
	printf("\n\n                   上班打卡");
	printf("\n");
	printf("\n***************************************************************\n\n");


	int checkFlag = 0;
	//效验编号
	checkFlag = Check();
	if (checkFlag)
	{
   

		int checkNumber;
		int tempNumber;
		int times = 0;
		checkNumber = number + number % 10 * 10000 + (number % 100 - number % 10) * 100
			+ (number % 1000 - number % 100) + number % 10000 / 1000 * 10 + number % 100000 / 10000;
		printf("效验码:%d\n", checkNumber);
		printf("请输入上述效验码:\n");

		scanf_s("%d", &tempNumber)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值