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

📄 qtsylib.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 5 页
字号:
      Orig->sl = 1.0;
      Orig->je+=CurrSP->je;
      Orig->ssje+=CurrSP->ssje;
      Orig->sj = Orig->je;
			Orig->sjsj = Orig->ssje;
     }
     else
     {
      Orig->sl+=CurrSP->sl;  //计算数量
      if(!CurrSP->state)     //金额
      {
       Orig->je=Orig->sj*Orig->sl;
       Orig->ssje=Orig->sjsj*Orig->sl;
      }
      else
      {
       Orig->je+=CurrSP->je;
       Orig->ssje+=CurrSP->ssje;
      }
     }
     return 100+Orig->RecNo;
    }
	return 0;
}
//根据条码取商品明细(条码串,商品明细指针)
int Check_TM(char *tm)
{
  int m=0,n=0,i,k;
  for(i=0;i<12;i+=2)
  {
   m+=tm[i]-'0';    //奇数位之和
   n+=tm[i+1]-'0';  //偶数位之和
  }
  m+=n*3;
  m%=10;
  m=(10-m)%10;
  k=tm[12]-'0';
  if(m!=k)
  {
   MsgBoxEx("条码校验错误!",1);
	 return 0;
  }
  return 1;
}
int sql_tm(_SPStruct *CurrSP,int Att)
//
{
  DBCHAR  spbm[9];
  DBFLT8  pack,sj,yhj;
  char    tm[20],_spbm[9],_buf[21],tmsw;
//double tmppack,tmpsj;
  double value;
  int bMark=0,nLen,Result=2;

  CurrSP->state=0;               //设置状态为0
  CurrSP->mark = 0;
  CurrSP->bzsl=1.0;

	strcpy(tm,CurrSP->sptm);
  nLen = strlen(CurrSP->sptm);   //输入的编码长度

  if(nLen>=8)                    //假设是条码
  {
   tmsw = CurrSP->sptm[0];
   //允许条码称表,假设是条码称表
   if(Param.Xzbm[0]!='0'&&nLen>=13&&
     (tmsw==Param.Xzbm[1]||tmsw==Param.Xzbm[2]||tmsw==Param.Xzbm[3]))
   {
     if(Param.Xzbm[4]=='1'&&!Check_TM(tm)) return 1;

     uf_strmid(_spbm,CurrSP->sptm,1,6);  //取6位
     bMark=!sql_spbm(CurrSP,_spbm);      //从条码称中查询商品
     if(bMark)
      {
       if(CurrSP->sj==0) CurrSP->sj=1;
       //求金额
			 uf_strmid(_spbm,CurrSP->sptm,7,5);      //取5位金额
       value=atof(_spbm);                      //转换成实数

       if(Param.Xzbm[0]=='1')
       {
	CurrSP->je=uf_round(value,2)/100;       //取两位小数
	CurrSP->sl=CurrSP->je/CurrSP->sj;       //计算数量
       }
       else
       {
	CurrSP->sl=value;
	CurrSP->je=CurrSP->sj*CurrSP->sl;
       }
       CurrSP->sjsj=CurrSP->sj;                //实际售价等于售价
       CurrSP->ssje=CurrSP->je;
       CurrSP->state=1;                        //设置条码秤商品标记
       CurrSP->mark = 1;
      }
	 }
   if((!bMark)&&Param.Scan[0]=='1')   //允许多条码表
   {
     //从多条码表中查询商品
     //tmppack=0;
     //tmpsj=0;
     if(!__syfs||dbproc==NULL||DBDEAD(dbproc)) //单机多条码
     {
      Result=GetDataFromDbf(&_DTMDataSet,_DTMFields,"tm",tm);
      if(!Result)
      {
       GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"spbm",spbm,NULL);
       GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"sl",_buf,&pack);
       GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"sj",_buf,&sj);
       GetDataFromField(_DTMDataSet.FieldCount,_DTMFields,"yhj",_buf,&yhj);
       yhj=(yhj==0)?sj:yhj;
      }
     }
		 else
     {
      dbfreebuf(dbproc);
      dbcmd(dbproc,"  select spbm,isnull(sl,1),isnull(sj,1),isnull(yhj,1)");
      dbcmd(dbproc, " from jxc_dtmb ");
      dbfcmd(dbproc," where tm='%s' ",tm);
      dbsqlexec(dbproc);
      while((result_code=dbresults(dbproc))!=NO_MORE_RESULTS)
       if(result_code==SUCCEED)
	{
	 dbbind(dbproc, 1, NTBSTRINGBIND, (DBINT) 0, spbm);
	 dbbind(dbproc, 2, FLT8BIND, (DBINT) 0,(BYTE *) &pack);
	 dbbind(dbproc, 3, FLT8BIND, (DBINT) 0,(BYTE *) &sj);
	 dbbind(dbproc, 4, FLT8BIND, (DBINT) 0,(BYTE *) &yhj);
	 while(dbnextrow(dbproc)!=NO_MORE_ROWS);
	 if(DBCOUNT(dbproc)) //无该商品
	   Result=0;
	}
			 else break;
     }
     if(!Result)
     {
      bMark = 1;
      strcpy(CurrSP->spbm,spbm);
      CurrSP->sl=1;    //数量
      sj=(sj==0)?1.0:sj;
      pack=(pack==0)?1.0:pack;
      yhj=sj;
      CurrSP->bzsl=pack;  //包装数量
      if(pack>1)
      {
       CurrSP->je=sj;      //金额默认等于售价
       CurrSP->ssje=sj;
       CurrSP->sj=sj;
       CurrSP->sjsj=CurrSP->sj;
       CurrSP->yhj=yhj;
			 CurrSP->state=2;    //设置多条码销售商品
       CurrSP->mark = 2;
      }
     }
   }
  }
  //bMark=1时,已经成功根据条码查询出商品
  Result=0;
  if(Att)
   Result=sql_spexists(CurrSP);  //检查商品是否存在
  if(!Result)                    //商品尚未存在
   return sql_spxx(CurrSP);
  else
   return Result;
}
//更改收银员密码
int sql_changpw(char *PW)
{
	dbfreebuf(dbproc);
  dbfcmd(dbproc," update jxc_syyb set mm='%s'",PW);
  dbfcmd(dbproc," where  syybm='%s' ",Syy_No);
  dbsqlexec(dbproc);
  while ((result_code = dbresults(dbproc)) != NO_MORE_RESULTS)
   if(result_code==FAIL)
   {
    MsgBoxEx("更改密码失败!",1);
    return 0;
   }
  return 1;
}

// 交班
int sql_jbdata(void)
{
  char DateTime[21];
  if(dbproc==NULL||DBDEAD(dbproc))
	{
   MsgBoxEx("网络未连通,不能够进行交班!",1);
   return -4;
  }
  dbfreebuf(dbproc);
  dbfcmd(dbproc," update jxc_syjb set jbsyy='%s',jbsj=getdate() ",Syy_No);
  dbfcmd(dbproc," where syjh='%s' ",Param.SyjNo);
  dbsqlexec(dbproc);
  while ((result_code = dbresults(dbproc)) != NO_MORE_RESULTS)
   if(result_code==FAIL)
   {
    MsgBoxEx("不能够成功交班!",1);
    return -4;
   }
  GetlocalTime(DateTime,NULL,NULL);
  Dbf_jb(DateTime);  //写人本地表
	ResetAll();        //复位所有数据
  return 0;
}
//取YTPOS系统的设置值(返回串,设置变量名)
int sql_global(char *value,char *var_name)
{
	DBCHAR  var_save[81];
	int Result=2;
	if(!__syfs||dbproc==NULL||DBDEAD(dbproc)) //取单机的全局变量
	{
	 Result=GetDataFromDbf(&_SYSDataSet,_SYSFields,"var_name",var_name);
	 if(!Result) //找到
		GetDataFromField(_SYSDataSet.FieldCount,
				 _SYSFields,"var_save",var_save,NULL);
	}
	else
	{
	 dbfreebuf(dbproc);
	 dbcmd(dbproc," select var_save from ytsys_globle ");
	 dbfcmd(dbproc," where var_name='%s' ",var_name);
	 dbsqlexec(dbproc);
	 while((result_code=dbresults(dbproc))!=NO_MORE_RESULTS)
		if(result_code == SUCCEED)
		{
		 dbbind(dbproc, 1, NTBSTRINGBIND, (DBINT) 0, var_save);
		 while (dbnextrow(dbproc) != NO_MORE_ROWS);
		 if(DBCOUNT(dbproc)==0)
			Result = 1;
		 else
			Result = 0;
		}
		else break;
	}
	if(!Result)		//!Result
	 strcpy(value,var_save);
	return (Result==0)?1:0;  //1:0
}

// 初始化前台收银系统变量
void sql_initglobal()
{
	char g_temp[61];
	Printf("\n\n取前台收银变量: ",clWhite);
	Printf("\n  管理员密码:g_user_sh...OK",clSilver);
	if(sql_global(g_cashcode ,"g_qt_cash")!=1)
	 strcpy(g_cashcode,"ytpos");

	Printf("\n 商场名称",clSilver);
	sql_global(g_scmc,"g_qt_head");

/*  Printf("\n  购货凭证脚注",clSilver);
	sql_global(g_qt_foot,"g_qt_foot");

	Printf("\n  条码秤商品时点打折标记",clSilver);
	sql_global(g_qt_tmsd,"g_qt_tmsd");

	Printf("\n  条码秤商品类别打折标记",clSilver);
	sql_global(g_qt_tmlb,"g_qt_tmlb");

	if(Param.Title[0]!='\0')
	 strcpy(g_scmc,Param.Title);
	else
	 strcpy(g_scmc,g_qt_head);
	strcpy(g_scmc,g_qt_head);  */

	if(sql_global(g_VIPsw,"g_VIPsw")!=1)		//VIP卡首位 默认为空
		 strcpy(g_VIPsw,"");
	if(sql_global(g_VIPyhl,"g_VIPyhl")!=1)    //VIP卡优惠率 默认为1
     strcpy(g_VIPyhl,"1");
	if(sql_global(g_xyksy,"g_qt_xyksy")!=1) //无的话,默认为0
   strcpy(g_xyksy,"1");

  g_lsdhex[0]='\0';
	sql_global(g_lsdhex,"g_lsdh");

	if(sql_global(g_temp,"g_qt_cap")&&g_temp[0]!='\0')
   sprintf(p_Formats[1],"%s\n",g_temp);

  if(sql_global(g_temp,"g_qt_title")&&g_temp[0]!='\0')
   sprintf(p_Formats[2],"%s\n",g_temp);

	if(sql_global(g_temp,"g_qt_t1")&&g_temp[0]!='\0')
	{
	 sprintf(p_Formats[_nFormat++],"%s\n",g_temp);
	 _nFormatx++;
	}

	if(sql_global(g_temp,"g_qt_t2")&&g_temp[0]!='\0')
	{
	 sprintf(p_Formats[_nFormat++],"%s\n",g_temp);
	 _nFormatx++;
	}

	if(sql_global(g_temp,"g_qt_gg1")&&g_temp[0]!='\0')
	 sprintf(p_Formats[_nFormatx++],"%s\n",g_temp);

	if(sql_global(g_temp,"g_qt_gg2")&&g_temp[0]!='\0')
	 sprintf(p_Formats[_nFormatx++],"%s\n",g_temp);

	if(sql_global(g_temp,"g_qt_gg3")&&g_temp[0]!='\0')
	 sprintf(p_Formats[_nFormatx++],"%s\n",g_temp);
	if(Param.bz[0]=='1'||Param.bz[0]=='2')      //允许税控
	{
		if(sql_global(g_temp,"g_qt_sl1")&&g_temp[0]!='\0')  //取税率1
			g_sl[0]=atof(g_temp);
		if(sql_global(g_temp,"g_qt_sl2")&&g_temp[0]!='\0')  //取税率2
			g_sl[1]=atof(g_temp);
		if(sql_global(g_temp,"g_qt_sl3")&&g_temp[0]!='\0')  //取税率3
			g_sl[2]=atof(g_temp);
		if(sql_global(g_temp,"g_qt_sl4")&&g_temp[0]!='\0')  //取税率4
			g_sl[3]=atof(g_temp);
	}
}
//初始化当前班次的存储目录和文件
void dbf_InitFile(void)
{
	//数据存储目录
	char _g_bc[5];  //班次的前4位
	char _Path[40]; //工作路径
  FILE *fp;
  char buf[1024];

  uf_strmid(_g_bc,g_bc,0,4); //取班次的前4位
  strcpy(_Path,"Data\\");
  strcat(_Path,_g_bc);       //设置数据存储路径

  strcpy(_OrigXsd,_Path);
  strcat(_OrigXsd,"\\X");
  strcat(_OrigXsd,g_bc);
  strcat(_OrigXsd,".dbf");   //当前使用的销售单文件,包含路径

  strcpy(_OrigWqb,_Path);
  strcat(_OrigWqb,"\\W");
  strcat(_OrigWqb,g_bc);
  strcat(_OrigWqb,".dbf");   //当前使用的未确认交易文件,包含路径

  if(!FileExists(_OrigXsd))  //检查文件是否存在
  {
   mkdir(_Path);             //建立目录
   fp=fopen("Data\\jxc_xsdb.dbf","rb");
   fread(&buf,866,1,fp);
   fclose(fp);
   fp=fopen(_OrigXsd,"wb+");
   fwrite(&buf,866,1,fp);
   fclose(fp);
   fp=fopen(_OrigWqb,"wb+");
   fwrite(&buf,866,1,fp);
   fclose(fp);
  }
}
// 初始化班次
//   g_scjbsj:上次交班时间
void sql_initbc()
{
  char    tmpjbsj[9],tmp[9]="00:00:00",nDate[11];
  DBINT   xsbs=0,maxlsh=0;
  DBCHAR  tmp_scjbsj[30],dMaxTime[21],bcMax[7];

  //提示
  Printf("\n\n取收银机上次交班时间: ",clSilver);
  sprintf(__bvalue," select jbsj from jxc_syjb where syjh=%s ... ",Param.SyjNo);
  Printf(__bvalue,clSilver);

  sql_time(g_now);                    //取当前日期时间
  sql_time(g_now);
  uf_strmid(nDate,g_now,0,10);        //分离日期

  strcpy(dMaxTime,g_now);

  if(__syfs==0||dbproc==NULL||DBDEAD(dbproc))
  {
   GetDataFromDbf(&_SYJDataSet,_SYJFields,"syjh",Param.SyjNo);
   GetDataFromField(_SYJDataSet.FieldCount,_SYJFields,"jbsj",g_scjbsj,NULL);
   bcMax[0] = '\0';
  }
  else
  {
   //求上次交班时间
   dbfreebuf(dbproc);
   dbcmd(dbproc," select convert(char(10),jbsj,102)+' '+convert(char(8),jbsj,8) ");
   dbfcmd(dbproc," from jxc_syjb where syjh='%s' ",Param.SyjNo);
   dbsqlexec(dbproc);
   while((result_code=dbresults(dbproc)) != NO_MORE_RESULTS)
    if(result_code==SUCCEED)
     {
      dbbind(dbproc,1,NTBSTRINGBIND,(DBINT)0,tmp_scjbsj);
      while(dbnextrow(dbproc)!=NO_MORE_ROWS)
       strcpy(g_scjbsj,tmp_scjbsj);  //g_scjbsj 上次交班时间
     }
    else break;

   //求销售单表中该收银机的最大时间及相应的班次
   dbfreebuf(dbproc);
   dbfcmd(dbproc," select max(convert(char(10),dtime,102)+' '+convert(char(8),dtime,8)),max(bc) from %s",_jxc_xsdb);
   dbfcmd(dbproc," where  dtime>='%s' and syjh='%s' ",nDate,Param.SyjNo);
   dbsqlexec(dbproc);
   while((result_code=dbresults(dbproc))!=NO_MORE_RESULTS)
   {
    if(result_code==SUCCEED)
     {
      dbbind(dbproc,1,NTBSTRINGBIND,(DBINT)0,dMaxTime);
      dbbind(dbproc,2,NTBSTRINGBIND,(DBINT)0,bcMax);
      while(dbnextrow(dbproc)!=NO_MORE_ROWS);
     }
     else break;
   }
  }
  sprintf(__bvalue,"%s..%s..OK",g_scjbsj,Param.SyjNo);
  Printf(__bvalue,clSilver);
  SleepEx(100);
  //
  // g_qt_jbsj 前台交班时间
  Printf("\n取前台统一交班时间: g_qt_jbsj=",clSilver);
  if(sql_global(tmpjbsj,"g_qt_jbsj")!=1)
   strcpy(tmpjbsj,"13:25:00");
  sprintf(__bvalue,"%s ... OK",tmpjbsj);
  Printf(__bvalue,clSilver);
  SleepEx(200);

  uf_strmid(tmp,g_now,11,8);          //析取时间
  //处理班次
  /*
    Tjfs[1]=1时,一天一个班次
    tmp         现在的时间
    tmpjbsj     系统设定的交班时间
    g_scjbsj    本台收银机上次交班时间
    dMaxTime    本台收银机销售的最大时间
  */
  switch(Param.Tjfs[1])
  {
   case '2':if(__syfs>0&&strcmp(tmp,tmpjbsj)>=0)
	    {
	     g_bc[0]=g_now[2];
	     g_bc[1]=g_now[3];
	     g_bc[2]=g_now[5];
	     g_bc[3]=g_now[6];
	     g_bc[4]=g_now[8];
	     g_bc[5]=g_now[9];
	    }
	    else
	    {
	     sql_anyday(dMaxTime);
	     g_bc[0]=dMaxTime[2];
	     g_bc[1]=dMaxTime[3];
	     g_bc[2]=dMaxTime[5];
	     g_bc[3]=dMaxTime[6];
	     g_bc[4]=dMaxTime[8];
	     g_bc[5]=dMaxTime[9];
	    }
	    break;
   default:if(Param.Tjfs[1]=='1'||(__syfs=

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -