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

任务描述

一款记录员工上下班打卡时间的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 和 break
  • retuen 是跳出整个函数体,break跳出循环体执行下一行代码
  • goto 它本身有一个label 用来标记从循环体跳出后去哪里执行,有可能是循环体的下一行代码或者是函数体的某个位置

常用的函数及库函数

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

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

设置QT添加注释

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值