📄 main.c
字号:
#include "590.h"
#include "var.h"
void main()
{
char ret ;
int i ;
/* 程序首次下装 进行相关初始化 */
if(getproflag()==NO)
{
pfinit(sizeof(struct KQ_REC)+2);
setup_first();
first_flag=NO ;
systemsound(500);
}
/* 按键以正常键码 */
keyon();
/* 亮背光15秒
cdlight_manage ( 15 ) ;
*/
enable_lcd_light();
init_rs232(4,'N',8,1);
/* 清除流水文件中已上传的记录,以腾出空间 */
kq_dataClear();
/* 进行系统维护,保证有足够的空间 */
do
{
kq_displogo();
//检查内存空间是否足够,当记录数少于20条时,强行进入维护
if(pfreerec()<=MIN_REC_NUM)
{
cls();
display_inv(1,"====警告====");
display(2,"可用内存不足");
display(3,"请先上传数据");
display(4,"按任意键继续");
inkey(0);
}
else break ;
}
while(1);
/* 检查打印机状态 */
if(print_flag==YES)
while(get_printer_status())
{
cls();
display_inv(1,"====警告====");
display(3,"请安装好打印纸");
systemsound(500);
if(get_printer_status()==1)
semiautoloadpaper();
if(inkey(3)==CANCEL)
break ;
}
/* POS与主机握手 */
cls();
display_inv(1,"实达外设考勤");
display_cen(3,"正在与主机握手");
if(handshake_to_host()==FAIL)
{
offline_flag=YES ;
display_clear(4);
display_cen(4,"与主机握手失败");
systemsound(500);
delay(1);
}
else
{
display_clear(4);
display_cen(4,"与主机握手成功");
delay(1);
}
/* 开始采集数据 */
memset(track2,0,sizeof(track2));
memset(track3,0,sizeof(track3));
do
{
cls();
display_inv(1,"实达外设考勤");
display_cen(2,"按任意键刷卡->");
do
{
kq_dispNow();
}
while(!kbhit());
if(inkey(1)==CANCEL)
{
kq_displogo();
continue ;
}
display_clear(3);
display_clear(4);
ret=recard(track2,track3,0);
/* 有读到卡号,只用2道数据。*/
if(ret!=0||track2[0]==0xff)
{
display_cen(3,"读卡出错");
display_cen(4,"按任意键继续");
delay(1);
continue ;
}
/*判卡号长是否为8*/
i=0 ;
while(track2[i+1]!='\0')i++;
if(i<8)
{
display_cen(3,"读卡出错");
display_cen(4,"按任意键继续");
inkey(2);
continue ;
}
/* 只取前8位 */
i=0 ;
if(track2[i]<'0'||track2[i]>'9')
while(i<8)
{
track2[i]=track2[i+1];
i++;
}
track2[i]='\0' ;
/* 在本机存放的卡号文件card中查找,以确认是不是合法记录 */
if(kq_searchCardno(track2)!=SUCC)continue ;
/* 获取当前的日期和时间 */
kq_getDateTime();
/* 在第三行显示卡号 */
display_clear(3);
display_cen(3,track2);
/* 往后台送本次刷卡记录,offline_flag=NO,即是联机交易 */
upload_flag='-' ;
if(offline_flag==NO)
{
display_clear(4);
if(kq_dataUpload_now()==SUCC)
{
display_cen(4,"上送成功");
upload_flag='+' ;
}
else
{
display_cen(4,"上送失败");
}
delay(1);
}
/*print_flag=YES, 立即打印出本次刷卡记录*/
if(print_flag==YES)
{
display_clear(4);
if(kq_dataPrint_now()==SUCC)
display_cen(4,"打印成功");
else
{
display_cen(4,"打印失败");
}
delay(1);
}
display_clear(4);
if(kq_dataSave()==SUCC)
{
display_cen(4,"保存成功");
}
else
{
display_cen(4,"保存失败");
}
delay(1);
}
while(1);
}
/**************************************
函数名称:kq_searchCardno
函数功能:下载卡号文件
函数参数: char * card_no
函数返回: SUCC/FAIL
**************************************/
int kq_searchCardno(char*card_no)
{
char fd ;
int i,ret ;
struct KQ_REC cardRec ;
/*打开卡号文件*/
fd=pfopen("card",'R');
if(fd==0||fd=='E')
{
return(FAIL);
}
for(i=1;;i++)
{
ret=pfread(fd,i,1,(char*)&cardRec);
if(ret==0)
{
break ;
}
if(memcmp(cardRec.card_no,card_no,8)==0)return(SUCC);
}
return(FAIL);
}
/**************************************
函数名称:kq_downCardno
函数功能:下载卡号文件
函数参数: 无
函数返回: SUCC/FAIL
**************************************/
int kq_downCardno(void)
{
char fd ;
struct CARD_REC cardRec ;
int i,ret ;
char buffer[21];
char h_char ;
cls();
display_inv(1,"实达外设考勤");
display_cen(2,"card");
display_cen(3,"正在接收数据");
/* 与主机握手 */
if(handshake_to_host()==FAIL)
{
display_clear(4);
display_cen(4,"握手失败");
delay(1);
return(FAIL);
}
fd=pfopen("card",'W');
if(fd==0)
{
display_clear(4);
display_cen(4,"打开card失败");
delay(1);
return(FAIL);
}
/* 清除原来的所有记录 */
for(i=1;;i++)
{
ret=pfdelrec(fd,i);
if(ret==0)
{
i--;
}
else
{
display_clear(4);
display_cen(4,"原记录删除完");
delay(1);
break ;
}
}
memset(buffer,0,sizeof(buffer));
do
{
display_clear(4);
display_cen(4,"............");
/*
if ( read_from_host( ) == FAIL ) {
display_clear( 4 );
display_cen ( 4 , "接收记录错" );
delay ( 1 );
return ( FAIL );
}
*/
/* =============调试时打印 =============*/
strcpy(buffer,"");
ret=readrs232(buffer,5,20);
buffer[21]=0x0 ;
feed_printer(1);
printer("@ %d-%s-",ret,buffer);
delay(1);
h_char=0x06 ;
sendrs232(1,&h_char);
/* =============调试时打印 =============*/
if(memcmp(readstr,"999999999999999999",readlen)==0||ret==0)
{
display_clear(4);
display_cen(4,"接收完毕");
delay(2);
return(SUCC);
}
for(i=0;i<8;i++)
cardRec.card_no[i]=readstr[i];
for(i=10;i<6;i++)
cardRec.name[i-10]=readstr[i];
cardRec.valid=readstr[17];
ret=pfwrite(fd,0,(char*)&cardRec,sizeof(struct CARD_REC));
if(ret!=0)
{
display_clear(4);
display_cen(4,"写入文件失败");
delay(1);
return(FAIL);
}
else
{
display_clear(4);
display_cen(4,"写入文件成功");
delay(1);
}
/* 发ACK给主机,提示发送下条一记录 */
h_char=0x06 ;
sendrs232(1,&h_char);
}
while(1);
}
/**************************************
函数名称:kq_dataUpload_all
函数功能:成批上送全部考勤记录
函数参数: 无
函数返回: SUCC/FAIL
**************************************/
int kq_dataUpload_all(void)
{
int i,ret ;
char fd ;
struct KQ_REC kqRec ;
char upStr[25];
cls();
display_inv(1,"实达外设考勤");
display_cen(3,"正在上传");
fd=pfopen("water",'R');
if(fd==0||fd=='E')
{
display_clear(3);
display_cen(3,"无数据可上传");
delay(1);
return(FAIL);
}
/* POS与主机握手 */
if(handshake_to_host()==FAIL)
{
offline_flag=YES ;
display_clear(3);
display_cen(3,"与主机握手失败");
systemsound(500);
delay(1);
return(FAIL);
}
else
{
display_clear(3);
display_cen(3,"与主机握手成功");
}
for(i=1;;i++)
{
ret=pfread(fd,i,1,(char*)&kqRec);
if(ret==0)
{
display_clear(4);
display_cen(4,"全部数据传完");
break ;
}
if(kqRec.upload_flag=='+')
{
if(pfdelrec(fd,i)==0)
{
display_clear(3);
display(3,"删除已上传记录");
i--;
}
continue ;
}
sprintf(upStr,"C%8.8sD20%6.6sT%6.6s*",kqRec.card_no,kqRec.date,kqRec.time);
send_to_host(sizeof(upStr),upStr);
/* 加入主机返回的校验结果判断 */
if(kq_result()==SUCC)
{
display_clear(3);
display_cen(3,"数据上传成功");
if(pfdelrec(fd,i)==0)
{
display_clear(3);
display_cen(3,"删除已上传记录");
i--;
}
}
else
{
display_clear(3);
display_cen(3,"数据上送失败");
delay(1);
return(FAIL);
}
}
return(SUCC);
}
/**************************************
函数名称:kq_dataUpload_now
函数功能:实时上送考勤记录
函数参数: 无
函数返回: SUCC/FAIL
**************************************/
int kq_dataUpload_now(void)
{
char upStr[25];
memset(upStr,'\0',sizeof(upStr));
sprintf(upStr,"C%8.8sD20%6.6sT%6.6s",track2,kq_date,kq_time);
/* POS与主机握手 */
display_clear(4);
display_inv(4,"正在与主机握手");
if(handshake_to_host()==FAIL)
{
offline_flag=YES ;
display_clear(4);
display_cen(4,"与主机握手失败");
systemsound(500);
delay(1);
return(FAIL);
}
else
{
display_clear(4);
display_cen(4,"与主机握手成功");
}
send_to_host(sizeof(upStr),upStr);
/*加入主机返回的检验结果判断*/
return(kq_result());
}
/**************************************
函数名称:kq_dataSave
函数功能:保存一条考勤记录
函数参数: 无
函数返回:SUCC/FAIL
**************************************/
int kq_dataSave(void)
{
char fd,ret ;
struct KQ_REC kqRec ;
fd=pfopen("water",'W');
if(fd==0||fd=='E')
{
return(FAIL);
}
kqRec.upload_flag=upload_flag ;
strcpy(kqRec.card_no,track2);
strcpy(kqRec.date,kq_date);
strcpy(kqRec.time,kq_time);
ret=pfwrite(fd,0,(char*)&kqRec,sizeof(struct KQ_REC));
if(ret!=0)
return(FAIL);
else
return(SUCC);
}
/**************************************
函数名称:kq_dataPrint_all
函数功能:打印流水文件中全部的考勤记录
函数参数: 无
函数返回: SUCC/FAIL
**************************************/
int kq_dataPrint_all(void)
{
int i,ret ;
char fd ;
struct KQ_REC kqRec ;
char title ;
cls();
display_inv(1,"实达外设考勤");
display_cen(3," 正在打印");
fd=pfopen("water",'R');
if(fd==0||fd=='E')
{
display_cen(3,"无数据可打印");
delay(1);
return(FAIL);
}
while(get_printer_status())
{
display_inv(3,"请装好打印纸");
systemsound(50);
semiautoloadpaper();
if(inkey(3)==CANCEL)return(FAIL);
}
title=NO ;
for(i=1;;i++)
{
ret=pfread(fd,i,1,(char*)&kqRec);
if(ret==0)
{
display_clear(3);
display_cen(3,"数据已经打完");
delay(1);
break ;
}
if(title==NO)
{
feed_printer(1);
printer("******Print All******");
feed_printer(1);
printer("U+:data had sent!");
feed_printer(1);
printer("U-:data hadn't sent!");
title=YES ;
}
feed_printer(1);
printer("U%c %8.8s %6.6s %6.6s",kqRec.upload_flag,kqRec.card_no,kqRec.date,kqRec.time);
}
return(SUCC);
}
/**************************************
函数名称: kq_dataPrint_now
函数功能: 打印一条记录
函数参数: (struct KQ_REC * kqRec)
函数返回: SUCC/FAIL
**************************************/
int kq_dataPrint_now(void)
{
while(get_printer_status())
{
display_clear(4);
display_inv(4,"请装好打印纸");
systemsound(50);
semiautoloadpaper();
if(inkey(3)==CANCEL)
{
return(FAIL);
}
}
feed_printer(1);
printer("U%c %8.8s %6.6s %6.6s",upload_flag,track2,kq_date,kq_time);
return(SUCC);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -