⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 读写dbf文件.cpp

📁 在linux 下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -