?? 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 + -