📄 读写dbf文件.cpp
字号:
#include <io.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h> /* For _MAX_PATH definition */
#define BOOL int
#define TRUE 1
#define FALSE 0
// 函数功能:
// 实现BCD向字符类型数据的转化
// 函数参数:
// 输入:
// pBCD —— 等待转化的BCD码
// iLen —— 等待转化的BCD码长度
// 输出:
// pChar —— 转化得到的字符数组
// 函数返回值:
// 成功位ture,否则位false
BOOL BCDToChar( unsigned char* pBCD, int iLen, unsigned char* pChar )
{
int i = 0;
unsigned char chHigh; // 保存BCD码中的高位
unsigned char chLow; // 保存BCD码中的低位
for (i = 0; i < iLen; i ++)
{
chLow = pBCD[i] & 0x0f;
chHigh = (pBCD[i] & 0xf0) >> 4;
if ((chHigh > 15) || (chLow > 15))
{
return false;
}
// 转化得到第一个字符
if (chHigh<=9)
{
pChar[i * 2] = chHigh + '0';
}
else
{
pChar[i * 2] = chHigh + 'A' - 10;
}
// 转化得到第二个字符
if (chLow<=9)
{
pChar[i * 2+1] = chLow + '0';
}
else
{
pChar[i * 2+1] = chLow + 'A' - 10;
}
}
return true;
}
// 函数功能:
// 实现字符类型数据向BCD的转化
// 函数参数:
// 输入:
// pChar —— 等待转化的字符数组
// iLen —— 等待转化的字符数据的长度
// 输出:
// pBCD —— 转化得到的BCD码
// 函数返回值:
// 成功位ture,否则位false
BOOL CharToBCD( unsigned char* pChar, int iLen, unsigned char* pBCD )
{
int i;
int iBCDNum = iLen / 2;
for (i = 0; i < iBCDNum; i ++)
{
if ((pChar[2 * i]>='0') && (pChar[2 * i] <= '9'))
{
pBCD[i] = pChar[2 * i]-'0';
}
else if ((pChar[2 * i]>='A') && (pChar[2 * i] <= 'F'))
{
pBCD[i] = pChar[2 * i]-'A'+10;
}
if ((pChar[2*i+1]>='0') && (pChar[2*i+1] <= '9'))
{
pBCD[i] = (pBCD[i]<<4) | (pChar[2*i+1]-'0');
}
else if ((pChar[2*i+1]>='A') && (pChar[2*i+1] <= 'F'))
{
pBCD[i] = (pBCD[i]<<4) | (pChar[2*i+1]-'A'+10);
}
}
return true;
}
//DBF表头格式
typedef struct{
unsigned char Version; // version character
unsigned char UpdateYear; // date of last update - year (-1900)
unsigned char UpdateMon; // date of last update - month
unsigned char UpdateDay; // date of last update - day
unsigned long Records; // number of records in dbf
unsigned short HeaderLen; // length of header structure
unsigned short RecordLen; // length of a record
} DBF_HEAD;
#define POSNO_LEN 6 //收款机号长度
#define DATE_LEN 10 //收款日期长度
#define TIME_LEN 8 //收款时间长度
#define SERIALNO_LEN 8 //流水号长度
#define PAGENO_LEN 2 //页号长度
#define ITEMNO_LEN 2 //行号长度
#define CSHCODE_LEN 6 //收款员号长度
#define CLERKCODE_LEN 6 //营业员号长度
#define PLUCODE_LEN 20 //商品内码长度
#define BARCODE_LEN 20 //商品条码长度
#define PLUNAME_LEN 40 //商品名称长度
#define DEPCODE_LEN 6 //部门编码长度
#define CLSCODE_LEN 6 //品类编码长度
#define PLUQTY_LEN 9 //数量长度
#define MONEY_LEN 19 //金额长度
#define ACCDATE_LEN 10 //记账日期长度
#define PAYID_LEN 20 //支付方式号码长度
#define CUSTCODE_LEN 20 //顾客编码长度
#define AUTHNUM_LEN 10 //授权人代号长度
#define MEMOSTR_LEN 10 //摘要长度
#define VENDORCODE_LEN 15 //供应商编码
#define JTAXRATE_LEN 10 //进项税率长度
#define STAXRATE_LEN 10 //销项税率长度
#define YEAR_LEN 6 //年长度
#define MONTH_LEN 16 //月长度
#define PLUMN_LEN 15 //商品助记符长度
#define UNIT_LEN 4 //包装单位长度
#define SPEC_LEN 10 //规格长度
#define CARGONO_LEN 20 //货号长度
#define SEAT_LEN 10 //商品货位长度
#define PRODAREA_LEN 10 //产地长度
#define GRADE_LEN 8 //等级长度
#define BRAND_LEN 10 //品牌长度
#define SHOPCODE_LEN 6 //店号长度
#define SEASON_LEN 10 //季节长度
#define TAXRATE_LEN 5 //税率长度
#define DAY_LEN 10 //天数长度
#define STOCK_LEN 10 //库存长度
#define CNT_LEN 10 //笔数长度
////////////////////////////////////////
// 销售明细流水文件结构
typedef struct{
char DelFlag; //开始标记
char PosNo[POSNO_LEN]; //收款机号
char Sdate[DATE_LEN]; //收款日期
char Stime[TIME_LEN]; //收款时间
char SerialNo[SERIALNO_LEN]; //流水号
char PageNo[PAGENO_LEN]; //页号
char ItemNo[ITEMNO_LEN]; //行号
char TranType; //交易类型
char CshCode[CSHCODE_LEN]; //收款员号
char ClerkCode[CLERKCODE_LEN]; //营业员号
char ItemType; //单品类型
char PluCode[PLUCODE_LEN]; //商品内码
char BarCode[BARCODE_LEN]; //商品条码
char PluName[PLUNAME_LEN]; //商品名称
char DepCode[DEPCODE_LEN]; //部门编码
char ClsCode[CLSCODE_LEN]; //品类编码
char PluPrice[MONEY_LEN]; //发生单价
char PluQty[PLUQTY_LEN]; //数量
char PluDsc[MONEY_LEN]; //优惠金额
char PluTotal[MONEY_LEN]; //实收金额
char PluDscType; //优惠类型
char AccDate[ACCDATE_LEN]; //记账日期
char Tag; // 标记
} DBF_ITEM;
////////////////////////////////////////
// 销售付款流水文件结构
typedef struct{
char DelFlag; //开始标记
char PosNo[POSNO_LEN]; //收款机号
char Sdate[DATE_LEN]; //收款日期
char Stime[TIME_LEN]; //收款时间
char SerialNo[SERIALNO_LEN]; //流水号
char ItemNo[ITEMNO_LEN]; //序号
char PayFlag; //付款方式编码
char TranType; //交易类型
char CshCode[CSHCODE_LEN]; //收款员号
char Amount[MONEY_LEN]; //支付金额
char PayID[PAYID_LEN]; //支付方式号码
char PayAmount[MONEY_LEN]; //非本位支付金额
char AccDate[ACCDATE_LEN]; //记账日期
char Tag; // 标记
} DBF_PAY;
////////////////////////////////////////
// 销售收款流水文件结构
typedef struct{
char DelFlag; //开始标记
char PosNo[POSNO_LEN]; //收款机号
char Sdate[DATE_LEN]; //收款日期
char Stime[TIME_LEN]; //收款时间
char SerialNo[SERIALNO_LEN]; //流水号
char TranType; //交易类型
char CshCode[CSHCODE_LEN]; //收款员号
char TotalDsc[MONEY_LEN]; //优惠金额
char Total[MONEY_LEN]; //实收金额
char TotalPay[MONEY_LEN]; //实付金额
char Change[MONEY_LEN]; //找零
char CustFlag; //顾客类型
char CustCode[CUSTCODE_LEN];//顾客编码
char AuthNum[AUTHNUM_LEN]; //授权人代号
char MemoStr[MEMOSTR_LEN]; //摘要
char AccDate[ACCDATE_LEN]; //记账日期
char Customer[5]; //顾客
char Tag; // 标记
} DBF_TOTAL;
////////////////////////////////////////
// 商品销售汇总文件结构
typedef struct{
char DelFlag; //开始标记
char AccDate[DATE_LEN]; //记账日期
char PluCode[PLUCODE_LEN]; //商品编码
char DepCode[DEPCODE_LEN]; //部门编码
char VendorCode[VENDORCODE_LEN];//供应商编码
char Counts[PLUQTY_LEN]; //销售数量
char Cost[MONEY_LEN]; //含税成本
char NetCost[MONEY_LEN]; //无税成本
char Total[MONEY_LEN]; //售价金额
char Amount[MONEY_LEN]; //含税销售收入
char NetAmount[MONEY_LEN]; //无税销售收入
char NormalDsc[MONEY_LEN]; //普通优惠
char VipDsc[MONEY_LEN]; //会员优惠
char PriceDsc[MONEY_LEN]; //价格优惠
char GrossProfit[MONEY_LEN]; //含税毛利
char NetProfit[MONEY_LEN]; //净毛利
char AdjustProfit[MONEY_LEN]; //含税毛利调整
char NetAdjustProfit[MONEY_LEN];//无税毛利调整
char JtaxRate[TAXRATE_LEN]; //进项税率
char StaxRate[TAXRATE_LEN]; //销项税率
char PluType; //商品类型
char Tag; //标记
} DBF_GOODSALE;
////////////////////////////////////////
// 部门销售汇总文件结构
typedef struct{
char DelFlag; //开始标记
char AccDate[DATE_LEN]; //结账日期
char DepCode[DEPCODE_LEN]; //部门编码(柜组)
char Counts[MONEY_LEN]; //销售数量
char Cost[MONEY_LEN]; //含税销售成本
char NetCost[MONEY_LEN]; //无税销售成本
char Total[MONEY_LEN]; //含税销售应收
char Amount[MONEY_LEN]; //含税销售实收
char NetAmount[MONEY_LEN]; //无税销售实收
char NormalDsc[MONEY_LEN]; //普通顾客优惠金额
char VipDsc[MONEY_LEN]; //会员顾客优惠金额
char PriceDsc[MONEY_LEN]; //调价变动金额=Total-Amount-NormalDsc-VipDsc
char GrossProfit[MONEY_LEN]; //毛利金额
char NetProfit[MONEY_LEN]; //净毛利金额
char AdjustProfit[MONEY_LEN]; //调整毛利金额(含税)
char NetAdjustProfit[MONEY_LEN];//调整毛利金额(无税)
char DepCount[MONEY_LEN]; //其他销售数量
char DepAmount[MONEY_LEN]; //其他销售收入(含税)
char DepNetAmount[MONEY_LEN]; //其他销售收入(无税)
char DepNormalDsc[MONEY_LEN]; //其他优惠
char DepVipDsc[MONEY_LEN]; //其他会员优惠
char Tag; //标记
} DBF_DEPSALE;
////////////////////////////////////////
// 收款员报表文件结构
typedef struct{
char DelFlag; //开始标记
char AccDate[DATE_LEN]; //记账日期
char ShopCode[SHOPCODE_LEN]; //店号
char PosNo[POSNO_LEN]; //收款台号
char CashierCode[CSHCODE_LEN]; //收款员代号
char SaleCnt[CNT_LEN]; //销售笔数
char SaleAmt[MONEY_LEN]; //销售金额
char ReturnCnt[CNT_LEN]; //退货笔数
char ReturnAmt[MONEY_LEN]; //退货金额
char VoidCnt[CNT_LEN]; //作废笔数
char VoidAmt[MONEY_LEN]; //作废金额
char DscCnt[CNT_LEN]; //普通优惠笔数
char DscAmt[MONEY_LEN]; //普通优惠金额
char VipCnt[CNT_LEN]; //会员笔数
char VipDscAmt[MONEY_LEN]; //会员优惠金额
char VipAmt[MONEY_LEN]; //会员金额
char CkAmt[MONEY_LEN]; //长款金额
char Tend0Amt[MONEY_LEN]; //现金金额
char Tend1Amt[MONEY_LEN]; //支付方式1金额
char Tend2Amt[MONEY_LEN]; //支付方式2金额
char Tend3Amt[MONEY_LEN]; //支付方式3金额
char Tend4Amt[MONEY_LEN]; //支付方式4金额
char Tend5Amt[MONEY_LEN]; //支付方式5金额
char Tend6Amt[MONEY_LEN]; //支付方式6金额
char Tend7Amt[MONEY_LEN]; //支付方式7金额
char Tend8Amt[MONEY_LEN]; //支付方式8金额
char Tend9Amt[MONEY_LEN]; //支付方式9金额
char TendyAmt[MONEY_LEN]; //储值卡金额
char TendzAmt[MONEY_LEN]; //长款金额
char PluCnt[MONEY_LEN]; //品种数
char SaleCount[MONEY_LEN]; //销售数量
char Tag; //标记
} DBF_CSHSUM;
////////////////////////////////////////
// 商品信息文件结构
typedef struct{
char DelFlag; //开始标记
char PluCode[PLUCODE_LEN]; //商品编码
char BarCode[BARCODE_LEN]; //商品条码
char PluName[PLUNAME_LEN]; //商品名称
char PluMN[PLUMN_LEN]; //商品助记符
char DepCode[DEPCODE_LEN]; //所属部门编码
char ClsCode[CLSCODE_LEN]; //品类编码
char Spec[SPEC_LEN]; //规格
char CargoNo[CARGONO_LEN]; //货号
char Seat[SEAT_LEN]; //商品货位
char Unit[UNIT_LEN]; //计量单位
char ProdArea[PRODAREA_LEN]; //产地
char VendorCode[VENDORCODE_LEN];//供应商
char Unit1[UNIT_LEN]; //小包装单位
char ItemCnt1[MONEY_LEN]; //小包装细数
char Unit2[UNIT_LEN]; //小包装单位
char ItemCnt2[MONEY_LEN]; //小包装细数
char Grade[GRADE_LEN]; //等级
char Brand[BRAND_LEN]; //品牌
char KeepDays[DAY_LEN]; //保质天数
char JhCycle[DAY_LEN]; //进货周期
char TopStock[STOCK_LEN]; //最高库存
char LowStock[STOCK_LEN]; //最低库存
char NetJPrice[MONEY_LEN]; //无税进价
char Jprice[MONEY_LEN]; //含税进价
char Price[MONEY_LEN]; //售价
char VipPrice[MONEY_LEN]; //会员价
char PackPrice[MONEY_LEN]; //商品包的零售价
char PFPrice[MONEY_LEN]; //批发价
char PsPrice[MONEY_LEN]; //价
char DkRate[MONEY_LEN]; //倒扣率
char JtaxRate[TAXRATE_LEN]; //进项税率
char StaxRate[TAXRATE_LEN]; //销项税率
char PluType; //商品类型
char IsWeight; //称重类型
char IsXs; //允许销售
char IsTh; //允许退货
char IsCg; //允许采购
char IsAsk; //允许要货
char AskCnt[MONEY_LEN]; //要货数量
int Season[SEASON_LEN]; //季节
char StatusDate[DATE_LEN]; //状态日期
char Tag; //标记
} DBF_GOODS;
////////////////////////////////////////
// 会计月设置文件结构
typedef struct{
char DelFlag; //开始标记
char AccYear[YEAR_LEN]; //会计年
char AccMonth[MONTH_LEN]; //会计月
char BgnDate[DATE_LEN]; //开始日期
char EndDate[DATE_LEN]; //结束日期
char Tag; //标记
} DBF_ACCMONTH;
///////////////////////////////////////
//收款机保存销售流水结构
/////////////////////////////////////
#define PLU_CODE_LEN 13 // PLU编号长度
#define PLU_NAME_LEN 20 // PLU名称长度
#define INV_DATE_LEN 7 //发票日期的长度,
#define TELLER_ID_LEN 4 // 收款员ID长度
typedef struct{
float fSaleNum; // 销售数量
double dwPrice; // 销售单价
double dwSaleSum; // 销售金额
char psCode[PLU_CODE_LEN+1]; // PLU号
char psName[PLU_NAME_LEN+1]; //PLU名称
char psDepCode[PLU_CODE_LEN+1]; // 部门号
}BUSINESS_ITEM;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -