📄 salewin4.cpp
字号:
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include "salewin.h"
#include "sysinfo.h"
//写本地数据库。
int
SaleWin::WriteLDB()
{
if(WriteSales()==L_ERROR)
{
return L_ERROR;
}
if(WriteTotal()==L_ERROR)
{
return L_ERROR;
}
return L_OK;
}
//写本地SALES.DAT数据文件.
int
SaleWin::WriteSales()
{
//缓冲中的数据.
struct FDATA data;
char DBBuf[160], *buf;
FILE *fp;//网格临时文件指针.
FILE *fp1;//数据文件指针.
//打开文件.
if((fp = fopen(".\\Gridtemp.$$$","rb")) == NULL)
{
return L_ERROR;
}
for(int i=0; i < filelength(fileno(fp))/sizeof(FDATA); i++)
{
buf = DBBuf;
//从文件读取数据.
if(fread(&data, sizeof(FDATA), 1, fp) == 0)
{
fclose(fp);
return L_ERROR;
}
//款台.
sprintf(buf, "%03d|", atoi(data.Term));
//收款员.
buf += 4;
sprintf(buf, "%05ld|", atol(data.Operator));
//营业员.
buf += 6;
sprintf(buf, "%05ld|", atol(data.Saler));
//部门.
buf += 6;
sprintf(buf, "%06ld|", atol(data.Group));
//流水号.
buf += 7;
sprintf(buf, "%06ld|", atol(data.SeqNumber));
//货品编码.
buf += 7;
sprintf(buf, "%12s |", Trim(data.Code));
//数量.
buf += 14;
sprintf(buf, "%6.2f|", atof(data.Number));
//单价.
buf += 7;
sprintf(buf, "%9.2f|", atof(data.Price));
//应收.
buf += 10;
sprintf(buf, "%10.2f|", atof(data.Number)*atof(data.Price));
//会员卡号.
buf += 11;
sprintf(buf, "%6s|", "");
//会员折扣额.
buf += 7;
sprintf(buf, "%8.2f|", atof("0"));
//会员应收额.
buf += 9;
sprintf(buf, "%10.2f|", atof(data.Number)*atof(data.Price));
// sprintf(buf, "%10.2f|", atof(dfsales.SVipAccount));
//折扣额.
buf += 11;
sprintf(buf, "%8.2f|", atof(data.Discount));
//实收.
buf += 9;
sprintf(buf, "%10.2f|", atof(data.Money));
//日期.
buf += 11;
buf[0]=data.Date[5];
buf[1]=data.Date[6];
buf[2]='/';
buf[3]=data.Date[8];
buf[4]=data.Date[9];
buf[5]='/';
buf[6]=data.Date[0];
buf[7]=data.Date[1];
buf[8]=data.Date[2];
buf[9]=data.Date[3];
buf[10]='|';
//时间.
buf += 11;
sprintf(buf, "%08s|", Trim(data.Time));
//子流水号.
buf += 9;
sprintf(buf, "%03d|", atoi(data.ID));
//单号.
buf += 4;
sprintf(buf, "%02d|", data.CheckNum);
//退货标志.
buf += 3;
if(atof(data.Number) >= 0)
{
//销售.
sprintf(buf, "%1s\r\n", "I");
}
else
{
//退货.
sprintf(buf, "%1s\r\n", "O");
}
//1--------------------------------------------
//打开本地Sales数据文件.
if((fp1=fopen(".\\data\\sales.dat", "a+b")) == NULL)
{
fclose(fp);
return L_ERROR;
}
//写本地Sales数据文件.
if(fwrite(DBBuf, strlen(DBBuf), 1, fp1)==0)
{
fclose(fp);
fclose(fp1);
return L_ERROR;
}
fclose(fp1);
//2--------------------------------------------
//如果不要求备份网络数据则返回。
if(sys->NetTempSW != L_YES)
{
return L_OK;
}
//打开网络Sales.dat缓冲数据文件<文件在本地>.
if((fp1=fopen(".\\data\\sales.tmp", "a+b")) == NULL)
{
fclose(fp1);
return L_ERROR;
}
//写网络Sales.dat数据文件.
if(fwrite(DBBuf, strlen(DBBuf), 1, fp1)==0)
{
fclose(fp);
fclose(fp1);
return L_ERROR;
}
fclose(fp1);
}
//关闭文件.
fclose(fp);
return L_OK;
}
//写本地Total.DAT数据文件.
int
SaleWin::WriteTotal()
{
char DBBuf[110];
char *buf;
int ItemNum = 0;
//汇总文件指针。
FILE *fp1;
//缓冲临时文件的数据结构.
struct TOTALDATA TotalData;
//定义临时分组文件。
FileIO *IOTmp = new FileIO();
//自动分组。
ItemNum = GroupByGroup(IOTmp);
if(ItemNum == -1)
{
delete IOTmp;
return L_ERROR;
}
//写汇总文件缓冲字符串。
for(int i=0; i<ItemNum; i++)
{
buf = DBBuf;
//读取内存临时文件的数据.
if(IOTmp->Read((char *)&TotalData, i*sizeof(TOTALDATA), sizeof(TOTALDATA))==L_ERROR)
{
delete IOTmp;
return L_ERROR;
}
//款台.
sprintf(buf, "%03d|", atoi(TotalData.Term));
//收款员.
buf += 4;
sprintf(buf, "%05ld|", atol(TotalData.Operator));
//营业员.
buf += 6;
sprintf(buf, "%05ld|", atol(TotalData.Saler));
//部门.
buf += 6;
sprintf(buf, "%06ld|", atol(TotalData.Group));
//流水号.
buf += 7;
sprintf(buf, "%06ld|", atol(TotalData.SeqNumber));
//应收金额.
buf += 7;
sprintf(buf, "%10.2f|", atof(TotalData.ShouldPay));
//会员应收金额.
buf += 11;
sprintf(buf, "%10.2f|", atof(TotalData.VipShouldPay));
// sprintf(buf, "%10.2f|", atof(dftotal.TVipAccount));
//会员折扣金额.
buf += 11;
sprintf(buf, "%10.2f|", atof(TotalData.Discount));
//实收金额.
buf += 11;
sprintf(buf, "%10.2f|", atof(TotalData.RealAccount));
//多单号.
buf += 11;
sprintf(buf, "%02d|", TotalData.CheckNumber);
//日期.
buf += 3;
buf[0]=TotalData.Date[5];
buf[1]=TotalData.Date[6];
buf[2]='/';
buf[3]=TotalData.Date[8];
buf[4]=TotalData.Date[9];
buf[5]='/';
buf[6]=TotalData.Date[0];
buf[7]=TotalData.Date[1];
buf[8]=TotalData.Date[2];
buf[9]=TotalData.Date[3];
buf[10]='|';
//时间.
buf += 11;
sprintf(buf, "%8s|", Trim(TotalData.Time));
buf += 9;
sprintf(buf, "%1s\r\n", "0");
//1--------------------------------------------
//打开本地Total.dat数据文件.
if((fp1=fopen(".\\data\\Total.dat", "a+b")) == NULL)
{
delete IOTmp;
return L_ERROR;
}
//写本地Total.dat数据文件.
if(fwrite(DBBuf, strlen(DBBuf), 1, fp1)==0)
{
delete IOTmp;
fclose(fp1);
return L_ERROR;
}
fclose(fp1);
//2--------------------------------------------
//如果不要求备份网络数据则返回。
if(sys->NetTempSW != L_YES)
{
return L_OK;
}
//打开网络Total.dat缓冲数据文件<文件在本地>.
if((fp1=fopen(".\\data\\Total.tmp", "a+b")) == NULL)
{
delete IOTmp;
return L_ERROR;
}
//写网络Total.dat缓冲数据文件.
if(fwrite(DBBuf, strlen(DBBuf), 1, fp1)==0)
{
delete IOTmp;
fclose(fp1);
return L_ERROR;
}
fclose(fp1);
}
//关闭文件.
delete IOTmp;
return L_OK;
}
//自动分组程序,返回分的组数。
int
SaleWin::GroupByGroup(FileIO *FIOTmp)
{
//网格缓冲的数据结构.
struct FDATA data;
//缓冲临时文件的数据结构.
struct TOTALDATA TotalData;
int ItemNum = 0, i, j, GroupExistFlag = L_NO;
//网格临时文件指针.
FILE *fp;
//打开文件.
if((fp = fopen(".\\Gridtemp.$$$","rb")) == NULL)
{
return -1;
}
//从网格临时文件依次读取所有数据。
for(i=0; i < filelength(fileno(fp))/sizeof(FDATA); i++)
{
//从文件读取数据.
if(fread(&data, sizeof(FDATA), 1, fp)==0)
{
fclose(fp);
return -1;
}
//查看分组文件中是否存在指定柜组。
GroupExistFlag = L_NO;
for(j=0; j<ItemNum; j++)
{
//读取内存临时文件的数据.
if(FIOTmp->Read((char *)&TotalData, j*sizeof(TOTALDATA), sizeof(TOTALDATA))==L_ERROR)
{
fclose(fp);
return -1;
}
//比较两个柜组文件是否一致。
if(strcmp(data.Group, TotalData.Group)==0)
{
//累计应付。
sprintf(TotalData.ShouldPay, "%10.2f", atof(TotalData.ShouldPay) + atof(data.Number)*atof(data.Price));
//会员应收额。
sprintf(TotalData.VipShouldPay, "%10.2f", atof(TotalData.VipShouldPay) + atof(data.Number)*atof(data.Price));
//折扣额。
sprintf(TotalData.Discount, "%10.2f", atof(TotalData.Discount) + atof(data.Number)*atof(data.Price) - atof(data.Money));
//实收额。
sprintf(TotalData.RealAccount, "%10.2f", atof(TotalData.RealAccount) + atof(data.Money));
//存在数据。
GroupExistFlag = L_YES;
//覆盖原来的数据。
if(FIOTmp->Write((char *)&TotalData, j*sizeof(TOTALDATA), sizeof(TOTALDATA))==L_ERROR)
{
fclose(fp);
return -1;
}
break;
}
}
//如果在分组文件中不存在指定柜组的话。
if(GroupExistFlag == L_NO)
{
//将此柜组作为新项目加入分组文件。
//收款台
strcpy(TotalData.Term, data.Term);
//操作员
strcpy(TotalData.Operator, data.Operator);
//营业员
strcpy(TotalData.Saler, data.Saler);
//柜组
strcpy(TotalData.Group, data.Group);
//流水号
strcpy(TotalData.SeqNumber, data.SeqNumber);
//应付金额
sprintf(TotalData.ShouldPay, "%10.2f", atof(data.Number)*atof(data.Price));
//会员应付金额
sprintf(TotalData.VipShouldPay, "%10.2f", atof(data.Number)*atof(data.Price));
//折扣额
sprintf(TotalData.Discount, "%10.2f", atof(data.Number)*atof(data.Price) - atof(data.Money));
//实收金额
strcpy(TotalData.RealAccount, data.Money);
//多单号
TotalData.CheckNumber = data.CheckNum;
//日期
strcpy(TotalData.Date, data.Date);
//时间
strcpy(TotalData.Time, data.Time);
//写内存临时文件
if(FIOTmp->Write((char *)&TotalData, ItemNum*sizeof(TOTALDATA), sizeof(TOTALDATA))==L_ERROR)
{
fclose(fp);
return -1;
}
//项目数加一
ItemNum++;
}
}
fclose(fp);
return ItemNum;
}
//写多重付款Mulpay.dat。
//写Mulpay.dat是由结帐时单独调用的,运行时如果是多重付款将被多次调用。
//日期时间是按当时时间计算的。
int
SaleWin::WriteMulpay(char *realaccount, char *paytype, char *cardnum1, char *cardnum2)
{
char DBBuf[110];
char *buf;
char nowDate[11], nowTime[9];
//网格缓冲的数据结构.
struct FDATA data;
//网格临时文件指针.
FILE *fp;
//付款文件Mulpay.dat指针.
FILE *fp1;
//打开网格临时文件.
if((fp = fopen(".\\Gridtemp.$$$","rb")) == NULL)
{
return L_ERROR;
}
//读取第一条记录.
if(fread(&data, sizeof(FDATA), 1, fp)==0)
{
fclose(fp);
return L_ERROR;
}
fclose(fp);
//取得当前日期和时间.
strcpy(nowDate, GetDate());
strcpy(nowTime, GetTime());
buf = DBBuf;
//款台.
sprintf(buf, "%03d|", atoi(data.Term));
//收款员.
buf += 4;
sprintf(buf, "%05ld|", atol(data.Operator));
//流水号.
buf += 6;
sprintf(buf, "%06ld|", atol(data.SeqNumber));
//实收金额.
buf += 7;
sprintf(buf, "%10.2f|", atof(realaccount));
//付款方式.
buf += 11;
sprintf(buf, "%02d|", atoi(paytype));
//卡号1.
buf += 3;
sprintf(buf, "%20s|", cardnum1);
//卡号2.
buf += 21;
sprintf(buf, "%20s|", cardnum2);
//日期.
buf += 21;
buf[0] = nowDate[5];
buf[1] = nowDate[6];
buf[2] = '/';
buf[3] = nowDate[8];
buf[4] = nowDate[9];
buf[5] = '/';
buf[6] = nowDate[0];
buf[7] = nowDate[1];
buf[8] = nowDate[2];
buf[9] = nowDate[3];
buf[10] = '|';
//时间.
buf += 11;
sprintf(buf, "%08s|", Trim(nowTime));
buf += 9;
sprintf(buf, "%1s\r\n", "0");
//1--------------------------------------------
//打开本地Mulpay数据文件.
if((fp1=fopen(".\\data\\Mulpay.dat", "a+b")) == NULL)
{
return L_ERROR;
}
//写本地Mulpay数据文件.
if(fwrite(DBBuf, strlen(DBBuf), 1, fp1)==0)
{
fclose(fp1);
return L_ERROR;
}
fclose(fp1);
//2--------------------------------------------
//如果不要求备份网络数据则返回。
if(sys->NetTempSW != L_YES)
{
return L_OK;
}
//打开网络Mulpay.dat缓冲数据文件<文件在本地>.
if((fp1=fopen(".\\data\\Mulpay.tmp", "a+b")) == NULL)
{
return L_ERROR;
}
//写网络Mulpay.dat缓冲数据文件.
if(fwrite(DBBuf, strlen(DBBuf), 1, fp1)==0)
{
fclose(fp1);
return L_ERROR;
}
fclose(fp1);
return L_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -