【IT】关于Code打卡机时遇到的问题及解决

tech2025-07-30  11

用C语言编写打卡机

任务描述开发环境代码结构在Code过程中遇到的问题和解决C语言里没有class的,可以写 .c 和 .h 把代码从main() 里分离出来static 和 extern 定义的变量的使用指针和数组的使用goto跳出循环的使用常用的函数及库函数QT Creator 设置编辑好的注释块添加注释格式

任务描述

一款记录员工上下班打卡时间的C语言程序。首先输入员工的编号以及验证码。验证码的输入有三次机会。输入正确的验证码,程序会询问员工是否要打卡。

每天要记录上班和下班的打卡时间。是否迟到以及加班时间长短也要同时记录到员工当天的信息里去。实行弹性工作制,迟到的计算要考虑到上一天的加班时长。

下班的时候打卡会记录当天的工作时长,如果没有达到规定的上班时长,程序会询问是否要重新打卡,获得员工的输入之后再记录。

每周五下班之后生成本周的考勤记录,记录里包括本周上班的平均时长、迟到和早退的次数以及缺卡次数。

开发环境

Windows 10 QT Creator 4.11.1(Community)

代码结构

打卡机flowchart的流程图:

Created with Raphaël 2.2.0 提示输入用户信息 员工编号、验证码 判断验证码是否正确 确认? 结束 yes no

在Code过程中遇到的问题和解决

C语言里没有class的,可以写 .c 和 .h 把代码从main() 里分离出来

C语言仅仅支持的容器时原生数组,字符串是用原生字符数组来实现的可以用struct存储不同类型的数据项[^1] #include <stdio.h> 2#include <time.h> 3 4int main(int argc, char *argv[]) { 5 char len[20] = {0}; 6 7 time_t timep; 8 time(&timep); 9 10 struct tm *p; 11 p = gmtime(&timep); 12 13 snprintf(len, 20, "%d-%d-%d %d:%d:%d", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday, 8 + p->tm_hour, p->tm_min, p->tm_sec); 14 15 printf("\n%s\n", len); 16 return 0; 17}

运行结果

1baoshaohua:test bao$ ./test 2 32020-3-25 9:51:42 4baoshaohua:test bao$

static 和 extern 定义的变量的使用

在程序中按照星期的每一天定义了两个一维int数组,在每个数组里存储了打卡的时间、星期一到星期五分别以数字1 - 5来代替、加班时长和是否早退的信息。这十个int类型的一维数组定义为static在包含main()方法的main.c里, 其它文件里使用extern关键字来获取这些变量。 main.c int WEEKDAY_DATA_IN[10]; calculatorAndWriteData.c extern int WEEKDAY_DATA_IN[10]; static 和 extern的区别 staticextern只能在本文件中访问,写在方法外部用来获取全局变量的值只有一份内存不能用于定义变量所有文件共享extern联合使用先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找

指针和数组的使用

在转换系统当前时间为一个 int 类型的数组时,返回值用了指针,因为在C语言里是不能返回数组的。int 类型的数组用来存放关于时间的信息,包括 {second, minute, hour, day in month, month, year, day in week, amount of extra work, if late to work}指针在使用前必须先赋值

goto跳出循环的使用

和 goto 有同样功能可以跳出循环的有 return 和 breakretuen 是跳出整个函数体,break跳出循环体执行下一行代码goto 它本身有一个label 用来标记从循环体跳出后去哪里执行,有可能是循环体的下一行代码或者是函数体的某个位置

常用的函数及库函数

在代码里用到的函数有 scanf, printf, sort, fopen, getchar, putchar, malloc, free, abs, pow等UTF-8的编码格式输出不了中文,应采用GBK系列的编码

QT Creator 设置编辑好的注释块添加注释格式

最新回复(0)