2021年4月,为了简化班级早自习考勤签到流程,我利用校园卡,独立制作了一个简易考勤打卡系统。整个打卡系统一共花了我32元人民币。

首先我在网购软件上购买了一个能读取IC卡卡号的读卡器(现在网购软件上随手一找最便宜的那种就行了,现在好像20元左右就可以了,我的主要是不确定我们校园卡的ID号长度所以买的读取长度长),将所有同学的校园卡卡号存储到CSV文件中并与学号和姓名一一对应。

然后是程序的编写——通过C++文件流对CSV文件读取得到学生信息并存储到结构体中,运用标志数组判断每个同学是否已考勤……反正实现其实很简单,主要是知道读卡器上刷卡相当于在电脑在编辑的文件or程序框里面输入卡号并换行。
之后的早自习考勤,我只需要将读卡器连上电脑并运行程序,班级同学在读卡器刷一下校园卡或输入学号就可以进行考勤。

在考勤过程中,我还可以通过自己的查询命令,实时查询当次还没打卡的同学名单。同时,考勤程序实时将考勤信息输出到CSV文件,考勤结束后我可以通过输出的文件得知各位同学考勤的具体时间。

以下给出具体代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<windows.h>
#include<time.h>
using namespace std;
struct Student{string CardNum,StudentID,Name;int Class,Num;bool Sex;
}student[10000];
bool IsBeated[5050];
bool Checked[5050];
static string GetCurrentDateStr()
{time_t t = time(NULL);char ch[64] = {0};strftime(ch, sizeof(ch) - 1, "%Y%m%d%p", localtime(&t));return ch;
}
static string GetCurrentTimeStr()
{time_t t = time(NULL);char ch[64] = {0};strftime(ch, sizeof(ch) - 1, "%H:%M:%S", localtime(&t));return ch;
}
int main(){cout<<"----------------------------------------------------------"<<endl;cout<<"Welcome to AA Grade 2020,Class 1 of UESTC BeatCard System!"<<endl;cout<<"----------------------------------------------------------"<<endl<<endl;cout<<"--------------------------------------------"<<endl;cout<<"Loading data..."<<endl;freopen("data.csv","r",stdin);// freopen("datatry.csv","r",stdin);string temp;int num1=0;while(cin>>temp){student[num1].CardNum=temp.substr(1,18);student[num1].StudentID=temp.substr(21,13);student[num1].Name=temp.substr(37,temp.length());if(temp.substr(35,1).compare("b")==0)student[num1].Sex=1;else student[num1].Sex=0;char* ID=(char*)student[num1].StudentID.substr(8,5).c_str();student[num1].Class=(ID[0]-'0')*10+(ID[1]-'0');student[num1].Num=(ID[3]-'0')*10+(ID[4]-'0');num1++;}// for(int i=0;i<num1;i++)cout<<student[i].Name<<' '<<student[i].StudentID<<' '<<student[i].CardNum<<endl;cin.clear();for(int i=0;i<num1;i++){IsBeated[student[i].Class*100+student[i].Num]=0;}cout<<"Data loading sucessfully! Ready to BeatCard!"<<endl;cout<<"--------------------------------------------"<<endl<<endl;cout<<"---------------------------------------------"<<endl;cout<<"Just put your student ID card on the machine."<<endl;cout<<"Enter \"quit\" / \"exit\" to exit the system."<<endl;cout<<"---------------------------------------------"<<endl<<endl;cout<<"------------------"<<endl;freopen("CON","r",stdin);string Filename;string Time=GetCurrentDateStr();Filename="log//"+Time+".csv";freopen(Filename.c_str(),"a",stdout);cout<<"StudentID"<<','<<"Class"<<','<<"Num"<<','<<"Name"<<','<<"EnterTime"<<endl;flag:while(cin>>temp){Time=GetCurrentTimeStr();if(temp.compare("exit")==0||temp.compare("quit")==0)break;bool IsFound=0;// cout<<temp<<endl;for(int i=0;i<num1&&!IsFound;i++){if(temp.compare(student[i].CardNum)==0||temp.compare(student[i].StudentID)==0){IsFound=1;if(IsBeated[student[i].Class*100+student[i].Num]==1){freopen("CON","w",stdout);cout<<"You had beat the card!"<<endl<<endl;freopen(Filename.c_str(),"a",stdout);break;}IsBeated[student[i].Class*100+student[i].Num]=1;cout<<"#"+student[i].StudentID<<','<<student[i].Class<<','<<student[i].Num<<','<<student[i].Name<<','<<Time<<endl;freopen("CON","w",stdout);string Adj;if(student[i].Sex)Adj="handsome ";else Adj="beautiful ";cout<<"The time is "+Time<<endl;cout<<"Welcome "+Adj+student[i].Name<<" !"<<endl<<endl;freopen(Filename.c_str(),"a",stdout);}}if(IsFound==0){freopen("CON","w",stdout);cout<<"Error, please change another card!"<<endl<<endl;freopen(Filename.c_str(),"a",stdout);}}freopen("CON","w",stdout);cout<<"------------------"<<endl;cout<<endl<<"-------------------------------------"<<endl;memset(Checked,0,sizeof(Checked));int NoHereNum=0;for(int i=0;i<num1;i++){if(IsBeated[student[i].Class*100+student[i].Num]==0&&Checked[student[i].Class*100+student[i].Num]==0){NoHereNum++;cout<<"Class."<<student[i].Class<<" NO.";if(student[i].Num<10)cout<<'0';cout<<student[i].Num;if(student[i].Name.length()==4)cout<<" ";cout<<' '<<student[i].Name;if(student[i].Name.length()==4)cout<<" ";cout<<" is not here!"<<endl;Checked[student[i].Class*100+student[i].Num]=1;// IsBeated[student[i].Class][student[i].Num]=1;}}if(NoHereNum==0)cout<<"Congratulations! All people are here!"<<endl;cout<<"-------------------------------------"<<endl<<endl;cout<<"--------------------------------------------------------------"<<endl;cout<<"Enter \"quit\" / \"exit\" to quit or enter \"continue\" to continue."<<endl;cout<<"--------------------------------------------------------------"<<endl<<endl;cout<<"------------------"<<endl;while(cin>>temp){if(temp.compare("exit")==0||temp.compare("quit")==0)break;if(temp.compare("continue")==0){cout<<"------------------"<<endl<<endl;cout<<"------------------"<<endl;freopen(Filename.c_str(),"a",stdout);goto flag;}}cout<<"------------------"<<endl;return 0;
}

小彩蛋~看看当时学期始末的考勤签到情况表!绿色是请假,黄色是迟到,红色是缺勤。有坏蛋一直不来!!!

教你30元自制考勤打卡系统!相关推荐

  1. Springboot毕设项目考勤打卡系统 k0e7rjava+VUE+Mybatis+Maven+Mysql+sprnig)

    Springboot毕设项目考勤打卡系统 k0e7rjava+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql ...

  2. c语言之学生考勤打卡系统

    1.引言 在如今随着社会的反展和信息技术的进步.全球信息化的趋势越来越明显.几乎没有一个学校不在走信息化的路子.都在用自己的智慧将工作效率一步一步的提升.在现在的高校中.由于学生的分布式教学.造成了教 ...

  3. Vue+Springboot 自制规划打卡系统【明日计划】(一)

    目录 简介 预览 初衷 设计思路 代码逻辑 技术栈 注册相关 注册用户 密码修改 邮件激活 随机昵称生成器 尾声 简介 预览 自制的一套规划打卡系统,上效果图 初衷 首先讲讲我开发这套系统的初衷,想直 ...

  4. 微信小程序班级考勤打卡系统丨可以android studio运行

    <微信小程序班级打卡系统+后台管理系统|前后分离VUE>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序前台和Java做的后台管理系统,该后台采 ...

  5. 同步考勤数据 钉钉_作为学校,我为何选择微校wxiao考勤打卡?

    随着移动互联网的兴起,越来越多的中小学摒弃了传统纸质考勤方式,采用智能考勤. 目前,最常用的智能考勤方式可分为基于非移动端和移动端两种. 其中,基于非移动端的包括人脸识别.指纹识别.虹膜识别考勤方式, ...

  6. 设计考勤打卡的心得体会

    在今年8-10份,独自一个人担任促销管理系统的考勤系统的开发.从需求理解.到表设计.到API接口的输出,bug的修复到最后的完工.今天停下脚步总结一下. 在整个过程中,给我最深刻的时最开始的表设计.考 ...

  7. 上海公布公交卡成本 押金拟从30元调至20元

    人民网上海6月20日专电(记者 沈文敏)曾因押金过高而备受质疑的上海公共交通卡,其押金式普通卡成本和押金使用情况的审计结论近日正式公布.根据审计情况,上海在今年底前拟对交通卡的押金由目前的30元调低至 ...

  8. 不到30元,教你硬核送出圣诞祝福!

    一年一度的圣诞节(直男送礼物大赛)快要来了,还在为选礼物全网寻找线索吗? 各路营销号都在教大家怎么买礼物,不过这年头,花钱买礼物一点都不稀奇了,但是愿意花时间花心思去准备一份礼物的人却越来越少,因为大 ...

  9. C语言期末大作业15个(附源码)成绩管理系统、图书馆管理系统、学生打卡系统、超市信息管理系统、学生考勤系统、职工信息管理系统源码、歌曲信息管理系统、超市收款系统等等

    C语言期末作业15个(上) 1.C语言学生成绩管理系统 2.C语言图书馆管理系统(复杂版) 3.C语言图书馆管理系统(简洁版) 4.C语言停车管理系统(两个版本) 5.C语言学生考勤系统 6.C语言班 ...

最新文章

  1. ural 1014. Product of Digits
  2. 关于WebView 控件,你了解多少?
  3. poj 2112 Optimal Milking(二分+Floyd+最大流)
  4. 听说版本会说话,你相信吗?
  5. 欢迎使用Java 8之前要重温的10个JDK 7功能
  6. Yii 1.0 伪静态即Yii配置Url重写(转)
  7. nginx +php-fpm 发挥更大的php作用
  8. RabbitMQ 与 Erlang 安装与配置
  9. git log和reflog
  10. 定积分计算(谭浩强c语言第5版p272)
  11. cad自动填写页码lisp_CAD图纸页码的自动生成-农夫也玩CAD
  12. 001_iBase4J学习之环境搭建
  13. 微信小程序短信倒计时60s功能
  14. Markdown基本语法(摘录)
  15. 单龙芯3A3000-7A1000PMON研究学习-(1)硬件原理图
  16. 做了5年研发效能度量,我的6点思考
  17. [BZOJ1864][CODEVS2462]三色二叉树
  18. r语言做断轴_手把手教你用R语言做回归后的残差分析
  19. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?
  20. Exchange 2013管理员账号登录ecp登陆不了

热门文章

  1. XX健康:预约管理-套餐管理图片上传与预览Redis实现定时清理垃圾图片
  2. 银河麒麟桌面操作系统V10创建热点
  3. Windows Phone周岁背后的喜和忧
  4. JavaScript 设计模式之发布-订阅模式(上)
  5. Android launcher 桌面抽屉切换动画
  6. python自走棋_GitHub - pumpkye/AutoChess: 自走棋战斗模拟器,搭配双方阵容然后模拟战斗,得到战斗结果,希望借此探索更加平衡的棋子设定...
  7. uni-app开发社区交友类项目
  8. 5G的主要业务场景:eMBB、URLLC、mMTC
  9. 系统集成项目管理工程师——挣值管理(PV、EV、AC、SV、CV、SPI、CPI)
  10. 利用Python3开发一款小工具(界面的设计)