📄 datam.c
字号:
__GQList[i].sps=SPLists->RecordCount;
Reset(SPLists); //清空工作区域
SPLists->lsh=g_lsh;
InBuffer(-1,0x9904,1,0); //显示数据
break;
}
_SPListCount++; //挂起数加1
return 0;
}
//解挂
void JieGua(int Index)
{
FILE *fp;
char FileName[51];
//从磁盘读入数据
sprintf(FileName,"DATA\\GQ%d.DAT",__GQList[Index].lsh);
fp = fopen(FileName,"rb");
if(fp==NULL) return;
_SPListCount--; //挂起数加1
fread((char *)SPLists,sizeof(_SPLists),1,fp);
fclose(fp);
remove(FileName);
if(Param.Gqjg[0]=='2')
sql_removegq(__GQList[Index].lsh,SPLists->RecordCount,SPLists->spje,SPLists->ysje);
SPLists->lsh = g_lsh;
__GQList[Index].lsh = 0;
InBuffer(-1,0x9904,1,0); //显示数据
}
//延时函数
void Sleep(clock_t nDelay)
{
clock_t s,e;
s=clock();
e=s+nDelay;
for(;s<e;)
s=clock();
}
//延时函数
void SleepEx(clock_t nDelay)
{
clock_t s,e;
s=clock();
e=s+nDelay;
for(;s<e;)
{
if(_bios_keybrd(_KEYBRD_READY))
{
_bios_keybrd(0);
break;
}
s=clock();
}
}
//*******************************************************************//
//打开钱箱
void smz_opencd(void)
{
_asm{
mov ah,0x40
mov dx,0x310
in al,dx
or al,ah
out dx,al
}
}
//转换金额大小写
void num_upper(double je,char *upper_je)
{
long mod,i=0;
long je_i;
char je_s[31],tmp[31]=" ";
je*=100.00;
sprintf(je_s,"%.0f",je);
je_i=atol(je_s);
do
{
mod=je_i%10;
je_i=floor(je_i/10);
if(mod||(mod==0&&(i==2||i==6)))
uf_strfcat(upper_je,NumUnit[i]);
else if(mod==0&&i==0)
uf_strfcat(upper_je,"整");
;
uf_strmid(tmp,upper_je,0,2);
if(mod==0&&(!strcmp(tmp,"整")||!strcmp(tmp,"元")||!strcmp(tmp,"万")))
;
else
uf_strfcat(upper_je,NumUpper[mod]);
i++;
} while(je_i>0);
}
//税控打印
void dyfile_tax(double a_se[],double a_ysje,double a_yhje)
{
char cmd[121]="unitexe 1_Balance_#@A";
char value[121];
double se[4];
int i;
for(i=0;i<4;i++)
{
se[i]=fabs(a_se[i])*100;
if(se[i]!=0.00)
{
sprintf(value,"%c%.0f",'a'+i,se[i]);
strcat(cmd,value);
}
}
sprintf(value,"@y%.2f",a_yhje);
strcat(cmd,value);
if(a_ysje<0)
strcat(cmd,"@E2");
strcpy(value,"");
num_upper(fabs(a_ysje),value);
uf_strfcat(value,"@e");
strcat(cmd,value);
sprintf(value,"@g%s@l%d@b%s@s%.2f@k个人消费",Syy_Name,g_lsh,g_bc,SPLists->sehj);
strcat(cmd,value);
if(Param.bz[1]=='1')
printf("%s\n",cmd);
if(Param.bz[0]=='2')
TaxLogStart(cmd);
system(cmd);
if(Param.bz[0]=='2')
TaxLogEnd();
}
void dyfile(char *FileName,char *afxStr)
{
int j=0,k=0,g=0,i;
int c;
char Buffer[81],afxBuf[50];
FILE *fPrn,*fFile;
strcpy(afxBuf,afxStr);
if(_PortType==0) //直接写打印端口
{
fFile=fopen(FileName,"r");
if(!fFile)
{ strcpy(Buffer,"不能打开文件:");
strcat(Buffer,FileName);
MsgBoxEx(Buffer,1);
return;}
while(!feof(fFile))
{
if(k==0)
{
k=1;
fPrn = fopen(Param.Port,"w");
if(!fPrn)
{
MsgBoxEx("打印失败,打开端口错误!",1);
fclose(fFile);
return;
}
if(afxBuf[0]!='\0')
{
fprintf(fPrn,afxBuf);
if(Param.Qz[0]<='1') fprintf(fPrn,"\n");
afxBuf[0]='\0';
}
}
i=0;
while(1) //读取数据
{
c=fgetc(fFile);
if(c==EOF||c=='\n') //读取一行后中止
{
Buffer[i]='\0';
break;
}
Buffer[i++]=(char)c;
}
g = strcmp(Buffer,"Pause"); //检查是否是暂停控制字符串
if(g)
{
fprintf(fPrn,"%s",Buffer);
//if(Param.Dysyt[0]=='1')
// 换行 不换行
// 切纸 1 2
//不切纸 0 3
if(Param.Qz[0]<='1') fprintf(fPrn,"\n");
}
j++;
if(j%_Dyjg==0||c==EOF||g==0)
{
fclose(fPrn);
Sleep(g_dyys);
if(g==0) MsgBoxEx("按回车键继续打印...",1);
k=0;
j=0;
}
}
fclose(fFile);
}
else //调用外部打印程序
{
if(_PortType==1)
sprintf(Buffer,"type %s>%s",FileName,Param.Port);
else
sprintf(Buffer,"%s %s",Param.Port,FileName);
system(Buffer);
}
}
//打印收银条
void dysyt(int MaxLines)
{
int i;
FILE *f_dj;
if(Param.Dysyt[0]=='0') return; //禁止打印
if(Param.SyjLx[0]=='4') //富士通
f_dj=fopen("dj1.txt","w");
else
f_dj=fopen("syt.txt","w");
if(!f_dj){MsgBoxEx("不能打开文件syt.txt!",1);return;}
for(i=0;i<MaxLines;i++)
fprintf(f_dj,__Preview[i]);
if(Param.Tjfs[0]=='0')
fprintf(f_dj, _pFeedLine);
fclose(f_dj);
if(Param.SyjLx[0]=='4')
fst_dyzb("dj1.txt","syt.txt");
if(Param.bz[0]=='1'||Param.bz[0]=='2')
dyfile_tax(SPLists->se,SPLists->ysje,SPLists->spje-SPLists->ysje); //税控打印
else
dyfile("syt.txt","");
return;
}
//打印未确认收银条
void dywqr(int MaxLines)
{
int i;
FILE *f_dj;
if(Param.Dysyt[0]=='0') return;
f_dj=fopen("wqr.txt","w");
if(!f_dj){MsgBoxEx("不能打开文件wqr.txt!",1);return;}
for(i=0;i<MaxLines;i++)
fprintf(f_dj,__Preview[i]);
if(Param.Tjfs[0]=='0')
fprintf(f_dj, _pFeedLine);
fclose(f_dj);
if(Param.SyjLx[0]=='4')
{
fst_dyzb("wqr.txt","dj3.txt");
dyfile("dj3.txt","");
}
else dyfile("wqr.txt","");
return;
}
//
//打印信用卡对帐单
void dyxyk(void) //zh****
{
int k=2,i=0;
FILE *xyk_dj;
if(SPLists->fklp.xykje==0) return;
if((xyk_dj=fopen("xyk.txt","w"))==NULL)
{ MsgBoxEx("不能打开文件xyk.txt!",1);return; }
k=2;
rdxykfh();
while(k)
{
for(i=0;i<_MAXXYK;i++)
if(SPLists->fklp.xyk[i].kh[0]!='\0'&&
SPLists->fklp.xyk[i].km[0]!='\0')
{
fprintf(xyk_dj,"\n%s 银行卡销售凭证\n",g_scmc);
if(k==2)
fprintf(xyk_dj," (顾客联)\n");
else
fprintf(xyk_dj," (银行对帐联)\n");
if (SPLists->fklp.xykje<0)
fprintf(xyk_dj,"交易类型:冲正 时间:%s\n",g_now);
else
fprintf(xyk_dj,"交易类型:消费 时间:%s\n",g_now);
fprintf(xyk_dj,"---------------------------------------\n");
fprintf(xyk_dj,"银行卡卡名: %s\n",xyk_fhxx.CardName);
fprintf(xyk_dj,"银行卡卡号: %s\n",xyk_fhxx.CardNo);
fprintf(xyk_dj," 发卡银行: %s\n",xyk_fhxx.BankName);
fprintf(xyk_dj,"本次交易额: %s\n",xyk_fhxx.Amount);
fprintf(xyk_dj,"银行流水号: %s\n",xyk_fhxx.PosSer);
fprintf(xyk_dj," 授权号: %s\n",xyk_fhxx.AuthNo);
fprintf(xyk_dj,"系统参考号: %s\n",xyk_fhxx.HostSer);
fprintf(xyk_dj,"收银机:%s 收银员:%s 班次:%s\n",Param.SyjNo,Syy_No,g_bc);
fprintf(xyk_dj,"---------------------------------------\n");
fprintf(xyk_dj,"持卡人签名:\n");
fprintf(xyk_dj,"身份证号码:\n");
fprintf(xyk_dj,"收银员:\n");
fprintf(xyk_dj,"欢迎使用银行卡!请妥善保存此凭证\n");
}
fprintf(xyk_dj,"\n\n\n");
k--;
if(k) fprintf(xyk_dj,"Pause"); //暂停标记
}
fclose(xyk_dj);
if(Param.SyjLx[0]=='4')
{
fst_dyzb("xyk.txt","dj2.txt");
dyfile("dj2.txt","");
}
else
dyfile("xyk.txt","");
}
//打印提货卡对帐单
void dythk(void)
{
int k=2,i=0;
FILE *thk_dj;
if(SPLists->fklp.thkje==0||Param.Dysyt[1]=='0') return;
if((thk_dj=fopen("thk.txt","w"))==NULL)
{ MsgBoxEx("不能打开文件thk.txt!",1);return; }
if(Param.PFeed[7]=='0') k = 1;
while(k)
{
fprintf(thk_dj,"\n%s提货卡销售凭证\n",g_scmc);
if(Param.PFeed[7]!='0')
{
if(k==2) fprintf(thk_dj," (顾客联)\n");
else fprintf(thk_dj," (收银联)\n");
}
fprintf(thk_dj,"流水号:%-4d 时间:%s\n",SPLists->lsh,g_now);
fprintf(thk_dj,"-------------------------------------\n");
fprintf(thk_dj,"卡号 原 余 额 本次消费 现 余 额\n");
for(i=0;i<_MAXTHK;i++)
if(SPLists->fklp.thk[i].kh[0]!='\0')
fprintf(thk_dj,"%10s%8.2f%8.2f%8.2f\n",SPLists->fklp.thk[i].kh,
SPLists->fklp.thk[i].dqye,SPLists->fklp.thk[i].xzje,
SPLists->fklp.thk[i].xye);
fprintf(thk_dj,"-------------------------------------\n");
fprintf(thk_dj,"收银机:%s 收银员:%s 班次:%s\n",
Param.SyjNo,Syy_No,g_bc);
fprintf(thk_dj,"谢谢光临!请妥善保存此凭证\n");
fprintf(thk_dj,"\x1b\x64%c\n",8);
fprintf(thk_dj, _pFeedLine);
k--;
if(k) fprintf(thk_dj,"Pause");
// MsgBoxEx("按回车键继续打印提货卡收银联.",1);
}
fclose(thk_dj);
if(Param.SyjLx[0]=='4')
{
fst_dyzb("thk.txt","dj2.txt");
dyfile("dj2.txt","");
}
else
dyfile("thk.txt","");
}
//------------------------------------------------------------------
//清除付款
void ResetFK(_FKStruct *fklp)
{
int i;
fklp->xjje=0;
fklp->thkje=0;
fklp->xykje=0;
fklp->qtje=0;
fklp->zpje=0;
fklp->ssje=0;
fklp->zbje=0;
//清空信用卡数据
for(i=0;i<_MAXXYK;i++)
{
fklp->xyk[i].km[0]='\0';
fklp->xyk[i].yh[0]='\0';
fklp->xyk[i].mc[0]='\0';
fklp->xyk[i].je=0;
}
//清空提货卡数据
for(i=0;i<_MAXTHK;i++)
{
fklp->thk[i].kh[0]='\0';
fklp->thk[i].mm[0]='\0';
fklp->thk[i].cklx[0]='\0';
fklp->thk[i].fkje=0;
fklp->thk[i].dqye=0;
fklp->thk[i].xzje=0;
}
}
//
void ResetYHK(_FKStruct *fklp)
{
//清空优惠卡数据
fklp->yhk.kh[0]='\0';
fklp->yhk.mm[0]='\0';
fklp->yhk.xm[0]='\0';
fklp->yhk.yhl=0;
fklp->yhk.ljss=0;
fklp->yhk.ljys=0;
fklp->yhk.VIP=0; //lijing
}
//复位数据
void Reset(_SPLists *lp)
{
//全部成功提交,清空数据
int i;
lp->RecNo=0;
lp->RecordCount=0;
lp->state=0;
lp->spje=0;
lp->ysje=0;
lp->lsh=g_lsh;
lp->sl=0;
lp->SPList[1].sswr = 0;
ResetYHK(&(lp->fklp));
ResetFK(&(lp->fklp));
lp->sehj=0;
for(i=0;i<4;i++)
lp->se[i]=0;
}
void ResetAll(void)
{
int i;
Reset(&__SPLists[0]);
for(i=0;i<__WorkBuffer;i++)
__GQList[i].lsh=0;
}
//
void FormatPreview(_SPStruct *_SP,int *_Index,int Fixed)
{
int i,j,Index;
char value[9][35],c,_Blank[31];
Index = *_Index;
strcpy(value[0],_SP->spbm); //商品编码
strcat(value[0]," ");
strcpy(value[1],_SP->sptm); //商品条码
strcat(value[1]," ");
if(Fixed&&Param.Dyspbm[9]=='1')
strcpy(value[2],_SP->spbm);
else
value[2][0]='\0';
strcat(value[2],_SP->spmc);
__process(value[2]); //处理商品名称
strcpy(value[3],_SP->jldw); //单位
GetDec(value[4],_SP->sl,_xsdws,1); //处理数量小数
GetJE(value[5],_SP->sj,Param.Dyspbm[5], "",5);
GetJE(value[6],_SP->sjsj,Param.Dyspbm[6],"",6);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -