大四课程设计之基于RFID技术的考勤管理系统(二)读取COM口数据

原创 2017年09月12日 22:27:12

----------------------------------------------------------------------------------------

源码下载地址:

http://download.csdn.net/download/qq78442761/9971770

----------------------------------------------------------------------------------------


一开始写了一个控制台的,如下图所示:


核心代码如下:

#ifdef _msc_ver
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"maincrtstartup\"" )
#endif

#define  _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <windows.h>
#include "Serial.h"


char dataRecv[512] = { '\0' };
AfSerial com3;
char IDChar[128] = { '/0' };
char DataChar[128] = { '/0' };

void SaveData()	//保存文件
{
	FILE *fp = fopen("RFID_R", "w");
	for (int i = 0; i < strlen(IDChar); i++)
	{  
		fprintf(fp, "%c", IDChar[i]);
	}
	fprintf(fp, "\n");
	for (int i = 0; i < strlen(DataChar); i++)
	{
		fprintf(fp, "%c", DataChar[i]);
	}
	fclose(fp);
}

void SaveData2()	//保存文件
{
	//FILE *fp = fopen("./Data/RFID_R", "w");
	//for (int i = 0; i < strlen(IDChar); i++)
	//{
	//	fprintf(fp, "%c", IDChar[i]);
	//}
	//fclose(fp);
	char temp4[5];
	int j = 0;
	for (int i = strlen(IDChar)-1; j<4; i--,j++)
	{
		temp4[3-j] = IDChar[i];		//最后一位和最后一位对应
	}
	temp4[4] = '\0';
	printf_s("\n%s", temp4);

	FILE *fp = fopen("./Data/RFID_R", "w");
	for (int i = 0; i < strlen(temp4); i++)
	{
		fprintf(fp, "%c", temp4[i]);
	}
	fclose(fp);

}

void GetData()//得到数据
{
	int k = 0;	//冒号数量
	int j = 0;
	for (int i = 120; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
			k++;

		if (k == 2)
		{
			DataChar[j] = dataRecv[i];
			printf_s("%c", dataRecv[i]);
			j++;
		}
	}
}
void GetID()//得到ID
{
	int k = 0;
	//得到第一个冒号后的数字:
	for (int i = 0; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
		{
			for (int j = i; j < strlen(dataRecv) && j < 120; j++)	//提取ID
			{
				if (dataRecv[j] >= 48 && dataRecv[j] <= 57)
				{
					IDChar[k] = dataRecv[j];
					printf_s("%c", dataRecv[j]);
					k++;
				}
			}
		}
	}
}

int main()
{
	com3.Open("COM3", 9600, 'N', 8, 1);
	while (1)
	{
		if (com3.Recv(dataRecv, 512) != -1)
		{
			printf_s("%s\n", dataRecv);

			GetID();
			GetData();

			printf_s("\n%s", IDChar);
			//printf_s("\n%s", DataChar);

			//SaveData();
			system("pause");
			SaveData2();
			return 0;
		}
	}
	return 0;
}


随和做成了一个WIn32项目,就一个消息框,流程图如下所示:


如下所示:

注意:这里只有关键代码,本程序源码在文章开头有提供下载:

#define  _CRT_SECURE_NO_WARNINGS
#include <Windows.h>  
#include <stdio.h>
#include <windows.h>
#include "Serial.h"

char dataRecv[4096] = { '/0' };
AfSerial com3;
char IDChar[128] = { '/0' };
char DataChar[128] = { '/0' };

void SaveData()	//保存文件
{
	FILE *fp = fopen("RFID_R", "w");
	for (int i = 0; i < strlen(IDChar); i++)
	{
		fprintf(fp, "%c", IDChar[i]);
	}
	fprintf(fp, "\n");
	for (int i = 0; i < strlen(DataChar); i++)
	{
		fprintf(fp, "%c", DataChar[i]);
	}
	fclose(fp);
}

void SaveData2()	//保存文件
{
	//FILE *fp = fopen("./Data/RFID_R", "w");
	//for (int i = 0; i < strlen(IDChar); i++)
	//{
	//	fprintf(fp, "%c", IDChar[i]);
	//}
	//fclose(fp);
	char temp4[5];
	int j = 0;
	for (int i = strlen(IDChar) - 1; j < 4; i--, j++)
	{
		temp4[3 - j] = IDChar[i];		//最后一位和最后一位对应
	}
	temp4[4] = '\0';
	printf_s("\n%s", temp4);

	FILE *fp = fopen("./Data/RFID_R", "w");
	for (int i = 0; i < strlen(temp4); i++)
	{
		fprintf(fp, "%c", temp4[i]);
	}
	fclose(fp);

}

void GetData()//得到数据
{
	int k = 0;	//冒号数量
	int j = 0;
	for (int i = 120; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
			k++;

		if (k == 2)
		{
			DataChar[j] = dataRecv[i];
			printf_s("%c", dataRecv[i]);
			j++;
		}
	}
}
void GetID()//得到ID
{
	int k = 0;
	//得到第一个冒号后的数字:
	for (int i = 0; i <= strlen(dataRecv); i++)
	{
		if (dataRecv[i] == ':')
		{
			for (int j = i; j < strlen(dataRecv) && j < 120; j++)	//提取ID
			{
				if (dataRecv[j] >= 48 && dataRecv[j] <= 57)
				{
					IDChar[k] = dataRecv[j];
					printf_s("%c", dataRecv[j]);
					k++;
				}
			}
		}
	}
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	if (com3.Open("COM4", 9600, 'N', 8, 1) == 0)
	{
		while (1)
		{
			if (com3.Recv(dataRecv, 4096) != -1)
			{
				printf_s("%s\n", dataRecv);

				GetID();
				GetData();

				printf_s("\n%s", IDChar);
				//printf_s("\n%s", DataChar);

				//SaveData();
				SaveData2();

				com3.Close();
				MessageBox(NULL, TEXT("卡读取中"), TEXT("com4"), MB_OK);
				break;
			}
		}

	}
	return 0;
}

他会把读取到的数据存储在Data文件夹里面,如下图所示:



这里,只把卡号的后六位提取了出来,并没有对卡数据进行写入!



上一篇博文:

大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍

http://blog.csdn.net/qq78442761/article/details/77916313


下一篇博文:

大四课程设计之基于RFID技术的考勤管理系统(三)数据库设计

http://blog.csdn.net/qq78442761/article/details/77951377

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Spring Web Flow 远程代码执行漏洞分析

1. 漏洞描述 漏洞编号: CVE-2017-4971 漏洞简述: 由于Spring的框架越来越多,而且后面引入了SpringEl作为默认的表达式解析方式,所以一旦引入了类似于OGNL的表达式,很可能...

一篇博客让你了解Material Design的使用

Material Design的基本概念Material Design是Google设计的一套视觉语言,将优先的经典的设计原理与科技创新相结合,为开发者提供一套完成视觉和交互设计规范。移动设备是这套设...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Android Studio发布项目到jcenter,一行代码引入Module

前面我们使用自己封装的okhttp项目时候,只需要app/build.gradle文件中加一行代码就能使用项目。compile 'com.ansen.http:okhttpencapsulation:...

大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍

大四课程设计之基于RFID技术的考勤管理系统(一)项目介绍

GitChat · 软件工程 | 一小时教你学会 Maven 项目的构建与管理

GitChat 作者:梁鹏举 关注公众号:GitChat 技术杂谈,一本正经的讲技术 Maven翻译成中文是“专家、内行”。Maven是Apache组织中一个颇为成功的开源项目,Maven主要服...

Centos 7安装完成后需要做的事情

添加第三方源Centos作为REDHAT的社区版本,本身追求稳定性。因此,官方源中自带的软件并不多,添加一些第三方的源对我们以后安装一些软件非常方便。常用的有 EPEL、ATrpms、ELRepo、N...

Android Gradle学习记录4 Gradle概念及工作流程

Gradle概念及工作流程

Android检查更新下载安装

检查更新是任何app都会用到功能,任何一个app都不可能第一个版本就能把所有的需求都能实现,通过不断的挖掘需求迭代才能使app变的越来越好。检查更新自动下载安装分以下几个步骤: 请求服务器判断是否有最...

如何将数据库的表导出生成Excel?

本篇博客知识点 1.如何通过元数据拿到数据库的信息? 2.如何用Java生成Excel表? 3.将数据库中的表导出生成Excel案例如何通过元数据拿到数据库的信息 元数据:描述数据的数据 J...

android studio打包以及gradle配置构建

通过浏览这篇文章,可以学习以下内容: 生成签名文件手动打包 通过配置自动打包 隐藏签名文件敏感信息 通过设置风味实现不同风味包的资源替换 多渠道打包生成签名文件,手动打包首先生成签名文件,点击 Bui...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)