📄 qtsylib.c
字号:
/******************************************
qtsylib.c
前台收银程序的 DB-Library 函数库
****************************************** */
#define DBMSDOS
#include <sqlfront.h>
#include <sqldb.h>
#include <dos.h>
#include <errno.h>
#include <bios.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <fcntl.h>
#include <stdarg.h>
#include <user.h>
#include <publ.h>
#include "direct.h"
//
/*全局变量定义*/
char Syy_No[5]; //收银员代码
char Syy_mm[7]; //收银员密码
char Syy_Name[9]="于小蓉"; //收银员名称
char Bc_Name[11]="01"; //班次
int g_lsh=1; //流水号
int g_jycs=0; //交易次数
int g_xsbs=0; //销售笔数
int g_dyys=1000; //打印延时
char g_lsdh[5]; //连锁店号
char g_lsdhex[5];
char g_qt_lsdh[3]; //缺省连锁店号前两位
char g_gzrq[6]="00"; //工作日期
char g_scjbsj[30]; //上次交班时间
char g_fkfs[2],g_bc[7],g_now[30],g_tm[2]; // 付款方式,班次,时间变量
char g_pos[2]="1"; //收银机类型
//1-普通 (兼容机,串口打印机)
//2-普通 (兼容机,并口打印机)
//3-IBM收银机
//4-富士通收银机
double g_bx; //补现
double g_flhj[5]; //分类合计
char g_xyksy[2];
XYKLB _XykLb[20];
char *g_sjwj="s";
char g_gz_mode[2]="0"; //工作方式
char g_gz_modeex[5];
char g_cashcode[11]="ytpos"; //管理员密码
char g_scmc[81]=""; //用户简称
char g_server_thk[21]; //远程提货卡
char g_customer[2]; //商场类型
char g_VIPsw[2]; //VIP卡首位
char g_VIPyhl[5]; //VIP卡优惠率
double g_sl[4]={1.00,1.00,1.00,1.00}; //四种税率
char __LoginUser[11]; //登录数据库的用户
char __bvalue[300];
//本地销售单记录格式化字符串
char __pxsd[120]="%7d.00%8s%-20s%14.3f%19.4f%19.4f%19.4f%19.4f%1s%19.4f%6s"
"%3s%6s%4s%4s%2s%1s%2s%5s%3s%1s%1s%4s%8s%8.2f%4s ";
char __xsdbuf[300]; //本地销售单记录缓冲区
int _hour,_minute,_second; //当前时,小时、分、秒
long __prostart,__pronow;
short __sqlerrormark=0; // sql错误标记,当出现网络错误是置为1
short __sqlok=0; // 0-不连SQL,1-已连SQL,3-并且已连远程提货卡
short __syfs=2; // 收银方式,0-单机,1-半单机,2-联机
char _jxc_xsdb[10]="jxc_xsdb"; // 提交表
char _OrigXsd[80]; // 当前数据存储路径
// 等于Data\\班次前4位\\x班次.dbf
char _OrigWqb[80]; // ...\\w班次.dbf
char Yyy_No[5]; // 当前营业员编码
extern char p_Formats[31][61];
extern char _pFeedLine;
extern void Trim(char *s);
//bank
long recno = 0;
//字段结构
typedef struct
{
char FieldName[11]; //字段名称
char DataType[2]; //字段类型
int Size; //字段宽度
int Dec; //小数位数
int xOff; //在记录缓冲中的偏余量
} TField;
//数据集结构
typedef struct
{
char TableName[40]; //表名称
int hLen; //文件头长度
int rLen; //记录长度
int FieldCount; //字段数
long int RCount; //记录数
int xOff; //关键字段在记录缓冲中的偏余量
int fLen; //关键字段长度
char *buffer; //记录缓冲指针
} TDataSet;
char _tbuffer[220]; //公共记录缓冲
PTOH ptoh;
HTOP htop;
extern int _spmcws;
extern int _nFormat;
extern int _nFormatx;
//
extern TOption Param;
/*商品数据结构*/
extern _SPLists *SPLists;
extern _SPLists __SPLists[];
//
extern int MsgBoxEx(char *,int);
extern void ResetAll(void);
extern void Reset(_SPLists *lp);
extern void SleepEx(clock_t nDelay);
extern void Printf(char *String,unsigned char Co);
extern void dbf_TranToServer(char *File1,char *File2,
int hLen1,int rLen1,int hLen2,int rLen2);
extern int CreateXspz(_SPLists *_SPList,int Att,char *_Time,int Fixed);
extern void ShowBc_Name(void);
extern int ValidCheck(char *s);
//
DBPROCESS *dbproc,*dbproc_thk; // 与SQL Server的联结
RETCODE result_code; // SQL命令执行的结果代码
int sql_connectdb(char *user,char *pass,char *server,int flag);
//单机收银系列函数
TField _SPBFields[12];
TDataSet _SPBDataSet;
TField _SYSFields[2];
TDataSet _SYSDataSet;
TField _SDBFields[10];
TDataSet _SDBDataSet;
TField _SYJFields[16];
TDataSet _SYJDataSet;
TField _SYYFields[12];
TDataSet _SYYDataSet;
TField _DTMFields[7];
TDataSet _DTMDataSet;
TField _LBBFields[3];
TDataSet _LBBDataSet;
TField _TMCFields[9];
TDataSet _TMCDataSet;
TField _WQBFields[26];
TDataSet _WQBDataSet;
TField _XSDFields[26]; //销售单表
TDataSet _XSDDataSet;
TField _XSBFields[10]; //销售单简表,
TDataSet _XSBDataSet; //用来存储从服务器下载的销售单关键词,
//以决定需要上传的本地数据
double uf_round(double num,double dig) // 四舍五入(数,位数),返回舍入后的数
{
char buf[30];
sprintf(buf,"%.2f",num);
return atof(buf);
}
void __process(char *sour)
{
int i,j=0;
char value[81];
unsigned char c;
strcpy(value,sour);
for(i=0;i<=(int)strlen(value);i++)
{
if(value[i]=='%')
{
sour[j++]=0xa3;
sour[j++]=0xa5;
}
else
sour[j++]=value[i];
}
j=0;
for(i=0;i<=(int)strlen(sour);i++)
{
c = (unsigned char)sour[i];
if(c>=0xa0) // 是汉字
if(!j) // 高8位
j++;
else // 低8位
j=0;
if(i>=_spmcws)
{
if(j) sour[i]=' ';
sour[i+1]='\0';
break;
}
}
for(i=(int)strlen(sour);i<=_spmcws;i++)
{
sour[i]=' ';
sour[i+1]='\0';
}
}
int uf_strmidEx(char *dest,char *sour)
{
int i,l,j=0;
l = strlen(sour);
for(i=0;i<l;i++)
if((sour[i]>='0'&&sour[i]<='9')||
(sour[i]>='A'&&sour[i]<='Z')||
(sour[i]>='a'&&sour[i]<='z'))
break;
if(i>=l) return 0;
for(j=i;j<l;j++)
dest[j-i]=sour[j];
dest[j-i]='\0';
return 1;
}
int uf_strmid(char *dest,char *sour,int from,int count)
// 截取字符串(返回串,原串,起始位,截取位数)
{
int i,l,j=0;
dest[0]='\0';
l=strlen(sour);
if(from<0||from>=l) return 0;
for(i=from;i<l&&j<count;i++)
dest[j++]=sour[i];
dest[j]='\0';
return 1;
}
int uf_strmidex(char *dest,char *sour,char c)
// 截取字符串(返回串,原串,起始位,截取位数)
{
int i,l,j=0;
l=strlen(sour);
for(i=0;i<l;i++)
if(sour[i]==c)
{
i++;
break;
}
if(i>=l) return 0;
for(j=i;j<=l;j++)
dest[j-i]=sour[j];
return 1;
}
int uf_strfcat(char *dest,char *sour)
// 在字符串前加入串(返回串,要加上的串)
{
char tmpstr[81];
strcpy(tmpstr,sour);
strcat(tmpstr,dest);
strcpy(dest,tmpstr);
return 1;
}
void CopyStr(char *d,char *s,int nfrom,int nlen,int Blank)
{
int i,j;
j = nfrom;
for(i=0;i<nlen;i++)
d[i]=s[j++];
d[i]='\0';
for(i=nlen;i>=0&&Blank&&(d[i]=='\0'||d[i]==' ');i--)
d[i]='\0';
}
void StrToLower(char *s)
{
int i;
for(i=0;i<(int)strlen(s);i++)
s[i] = (char)tolower(s[i]);
}
void ClearBuffer(char *s,int rLen)
{
int i;
for(i=0;i<rLen;i++)
s[i]='\0';
}
//检查某个文件是否存在
//存在时返回非0
int FileExists(const char *FileName)
{
int Han;
unsigned _nError;
_nError = _dos_open(FileName,O_RDONLY|O_BINARY,&Han);
/*printf("_nError:%d ENOENT:%d EMFILE:%d EACCES:%d\n",
_nError,ENOENT,EMFILE,EACCES);
getchar(); */
if(_nError==0)
{
_dos_close(Han);
return 1;
}
else return 0;
}
//初始化某个表
int OpenTable(const char *TableName,TDataSet *DataSet,TField TStr[],
const char *KeyField)
{
FILE *fp;
int i;
char buffer[33],_Size[2],_Dec[2];
unsigned char a[4];
strcpy(DataSet->TableName,TableName);
DataSet->buffer = _tbuffer;
//读取表的结构
fp = fopen(TableName,"rb");
if(fp)
{
fseek(fp,4,0); //记录数
fread(&a,4,1,fp);
DataSet->RCount = a[0]+(long int)a[1]*0x100+(long int)a[2]*0x100*0x100;
fseek(fp,8,0); //库结构说明长度
fread(&a,2,1,fp);
DataSet->hLen = a[0]+a[1]*0x100+1;
fseek(fp,10,0); //记录长度
fread(&a,2,1,fp);
DataSet->rLen = a[0]+a[1]*0x100;
DataSet->FieldCount = DataSet->hLen/32-1; //字段数
//读取库结构
for(i=0;i<DataSet->FieldCount;i++)
{
fseek(fp,32+i*32,0); //读取记录描述
fread(&buffer,32,1,fp);
CopyStr(TStr[i].FieldName,buffer,0,10,1);
StrToLower(TStr[i].FieldName);
CopyStr(TStr[i].DataType, buffer,11,1,1);
CopyStr(_Size,buffer,16,1,0);
CopyStr(_Dec,buffer,17,1,0);
TStr[i].Size=(int)_Size[0];
TStr[i].Dec=(int)_Dec[0];
if(i)
TStr[i].xOff=TStr[i-1].xOff+TStr[i-1].Size;
else
TStr[i].xOff=0;
if(!strcmp(TStr[i].FieldName,KeyField))
{
DataSet->xOff = TStr[i].xOff;
DataSet->fLen = TStr[i].Size;
}
}
fclose(fp);
return 1;
}
return 0;
}
//
void OpenAllDataSet(void)
{
OpenTable("DATA\\JXC_SPB.DBF", &_SPBDataSet,_SPBFields,"spbm");
OpenTable("DATA\\JXC_SYS.DBF", &_SYSDataSet,_SYSFields,"var_name");
OpenTable("DATA\\JXC_SDDZ.DBF",&_SDBDataSet,_SDBFields,"bm");
OpenTable("DATA\\JXC_SYJB.DBF",&_SYJDataSet,_SYJFields,"syjh");
OpenTable("DATA\\JXC_SYYB.DBF",&_SYYDataSet,_SYYFields,"syybm");
OpenTable("DATA\\JXC_DTMB.DBF",&_DTMDataSet,_DTMFields,"tm");
OpenTable("DATA\\JXC_LBB.DBF", &_LBBDataSet,_LBBFields,"lbbm");
OpenTable("DATA\\JXC_TMCB.DBF",&_TMCDataSet,_TMCFields,"tplu");
OpenTable("DATA\\JXC_XSDB.DBF",&_XSDDataSet,_XSDFields,"spbm");
OpenTable("DATA\\SER_XSJB.DBF",&_XSBDataSet,_XSBFields,"syjh");
}
//分表从服务器下载数据到本地表中JXC_SPB
long int GetSPBFromServer(char *pWhere,int rLen)
{
FILE *fpt;
long int RecordCount=0;
char tmpbuf[500];
DBCHAR spbm[9],spmc[33],ggxh[11],jldw[5],jyfs[3],csbm[7],splb[7],gzbm[5];
DBFLT8 jj,sj,yhj,spsl;
char *pFor="%-8s%-32s%-10s%-4s%-2s%-6s%10.2f%10.2f%10.2f%-6s%-4s%6.2f";
dbfreebuf(dbproc);
dbcmd(dbproc,"select spbm,spmc,ggxh,jldw,jyfs,csbm,jj,sj,yhj,splb,gzbm,spsl\n");
dbcmd(dbproc,"from jxc_spb\n");
if(pWhere[0]!='\0')
dbfcmd(dbproc,"where %s\n",pWhere);
dbcmd(dbproc,"order by spbm");
dbsqlexec(dbproc);
while((result_code=dbresults(dbproc))!= NO_MORE_RESULTS)
if (result_code == SUCCEED)
{
fpt = fopen("temp.dat","wb+");
dbbind(dbproc, 1, NTBSTRINGBIND, (DBINT)0,spbm);
dbbind(dbproc, 2, NTBSTRINGBIND, (DBINT)0,spmc);
dbbind(dbproc, 3, NTBSTRINGBIND, (DBINT)0,ggxh);
dbbind(dbproc, 4, NTBSTRINGBIND, (DBINT)0,jldw);
dbbind(dbproc, 5, NTBSTRINGBIND, (DBINT)0,jyfs);
dbbind(dbproc, 6, NTBSTRINGBIND, (DBINT)0,csbm);
dbbind(dbproc, 7, FLT8BIND, (DBINT) 0,(BYTE *) &jj);
dbbind(dbproc, 8, FLT8BIND, (DBINT) 0,(BYTE *) &sj);
dbbind(dbproc, 9, FLT8BIND, (DBINT) 0,(BYTE *) &yhj);
dbbind(dbproc,10, NTBSTRINGBIND, (DBINT)0,splb);
dbbind(dbproc,11, NTBSTRINGBIND, (DBINT)0,gzbm);
dbbind(dbproc,12, FLT8BIND, (DBINT) 0,(BYTE *) &spsl);
while(dbnextrow(dbproc)!=NO_MORE_ROWS)
{
sprintf(tmpbuf,pFor,spbm,spmc,ggxh,jldw,jyfs,csbm,jj,sj,yhj,splb,gzbm,spsl);
fwrite(&tmpbuf,rLen,1,fpt);
RecordCount++;
}
fclose(fpt);
}
return RecordCount;
}
//系统表JXC_SYS
long int GetSYSFromServer(int rLen)
{
FILE *fpt;
long int RecordCount=0;
char tmpbuf[100];
DBCHAR varname[11],varsave[81];
char *pFor="%-10s%-80s";
dbfreebuf(dbproc);
dbcmd(dbproc,"select var_name,var_save\n");
dbcmd(dbproc,"from ytsys_globle\n");
dbcmd(dbproc,"order by var_name");
dbsqlexec(dbproc);
while((result_code=dbresults(dbproc))!= NO_MORE_RESULTS)
if (result_code == SUCCEED)
{
fpt = fopen("temp.dat","wb+");
dbbind(dbproc, 1, NTBSTRINGBIND, (DBINT)0,varname);
dbbind(dbproc, 2, NTBSTRINGBIND, (DBINT)0,varsave);
while(dbnextrow(dbproc)!=NO_MORE_ROWS)
{
sprintf(tmpbuf,pFor,varname,varsave);
fwrite(&tmpbuf,rLen,1,fpt);
RecordCount++;
}
fclose(fpt);
}
return RecordCount;
}
//时点打折表JXC_SDDZ
long int GetSDDZFromServer(char *pWhere,int rLen)
{
FILE *fpt;
long int RecordCount=0;
char tmpbuf[200];
DBCHAR bm[9],stime[21],etime[21],srr[9],srtime[21],qfr[9],qftime[21],qfbz[2],dzlx[2];
DBFLT8 yhl;
char *pFor="%-8s%-20s%-20s%12.4f%-8s%-20s%-8s%-20s%-1s%-1s";
dbfreebuf(dbproc);
dbcmd(dbproc,"select bm,stime=convert(char(11),stime,102)+convert(char(9),stime,8),\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -