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

📄 datam.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 4 页
字号:
	 q=q/10;                  //转成分
	 if(Param.Sswr[0]=='2')
		SPLists->SPList[1].ssje+=q; //加到第一笔上
	 k+=q;                       //实收变化
	}
	sprintf(value,"%.2f",k);
	SPLists->ysje=atof(value);

	 //商品税额处理
	if(Param.bz[0]=='1'||Param.bz[0]=='2')      //允许税控
	{
		for(i=1;i<=SPLists->RecordCount;i++)
		{
			if(SPLists->SPList[i].spsl==g_sl[0])
				tax[0]+=SPLists->SPList[i].ssje;
			else if(SPLists->SPList[i].spsl==g_sl[1])
				tax[1]+=SPLists->SPList[i].ssje;
			else if(SPLists->SPList[i].spsl==g_sl[2])
				tax[2]+=SPLists->SPList[i].ssje;
			else if(SPLists->SPList[i].spsl==g_sl[3])
				tax[3]+=SPLists->SPList[i].ssje;
		}
		SPLists->sehj=0;
		for(i=0;i<4;i++)
		{
			SPLists->se[i]=tax[i];
			SPLists->sehj+=tax[i]*(g_sl[i]-1);
		}
	}

	sprintf(value,"Total %.2f",SPLists->spje);
	ShowGuXian(value,2,0);
}
//删除一条商品记录
void DeleteRecord(void)
{
	int i;
	if(Param.Yxscjl[0]=='0') return;

	if(!SPLists->RecordCount||SPLists->RecNo>SPLists->RecordCount) return;

	for(i=SPLists->RecNo+1;i<=SPLists->RecordCount;i++) //记录移动
  {
   SPLists->SPList[i].RecNo--;
   memcpy(&(SPLists->SPList[i-1]),&(SPLists->SPList[i]),sizeof(_SPStruct));
  }

  SPLists->RecordCount--;            //记录数减一
  CalculateSum();//计算合计
  InBuffer(-1,0x9904,1,0); //刷新数据显示
}
//
int CheckSpSplb(void)
{
  int i,j;
  for(i=0;i<6;i++)
  {
   if(_SpSplb[i][0]=='\0') return 0;
   j = 0;
   while(_SpSplb[i][j]&&OrigSP.splb[j])
   {
    if(_SpSplb[i][j]!=OrigSP.splb[j])
     break;
    j++;
   }
   if(_SpSplb[i][j]=='\0') return 1;
  }
  return 0;
}
//总是增加在最后
int InsertRecord(void)
{
  int oldNo;
  char value[41];
  if(SPLists->RecordCount>=100)
  {
   MsgBoxEx("每次交易最大商品数不能大于100.",1);
   return 0;//失败
  }
  if(!SPLists->RecNo) SPLists->RecNo=1; //如果无记录时

  oldNo=SPLists->RecNo;                 //保存原来的记录号
  OrigSP.RecNo=oldNo;
  //检查是否能够修改售价及打折
	OrigSP.bz = CheckSpSplb();

  if(Param.Yxscjl[0]=='0'||(SPLists->RecNo<=SPLists->RecordCount&&
     (!MsgBoxEx("覆盖当前的商品吗?",0))))
   {
    SPLists->RecNo=SPLists->RecordCount+1; //加在最后一条记录
    OrigSP.RecNo=SPLists->RecNo;
    InBuffer(-1,0x9904,3,SPLists->RecNo);  //刷新数据显示
   }

  memcpy(&(SPLists->SPList[SPLists->RecNo]),&OrigSP,sizeof(_SPStruct));
  sprintf(value,"%s %.2f",
	  SPLists->SPList[SPLists->RecNo].spbm,
	  SPLists->SPList[SPLists->RecNo].je);
  ShowGuXian(value,1,0);

  if(SPLists->RecNo>SPLists->RecordCount) //当前位置无数据,增加记录
   SPLists->RecordCount++;                //记录数加1

  CalculateSum();//计算合计
  InBuffer(-1,0x9904,3,oldNo);
  //如果不是最后时,记录移动到最后
  if(SPLists->RecNo<SPLists->RecordCount+1)
  {
   SPLists->RecNo=SPLists->RecordCount+1;
   InBuffer(-1,0x9904,3,SPLists->RecNo); //刷新数据显示
  }
}

//商品处理
int ProcessSP(void)
{
  int Result;
  char value[41];
  Result=sql_tm(&OrigSP,1);
  switch(Result)
  {
   case 1:
   case 2:
   case 3:
   case 4:break;
   case 33: InsertRecord(); //新商品增加记录
	    Result=0;
	    break;
   default:if(Result>100)
	    {
	     CalculateSum();//计算合计
	     InBuffer(-1,0x9904,3,Result-100);
	     sprintf(value,"%s %.2f",
		     SPLists->SPList[Result-100].spbm,
		     SPLists->SPList[Result-100].je);
	     ShowGuXian(value,1,0);
	     InBuffer(-1,0x9904,3,SPLists->RecNo);
	     Result=0;        //已经存在的商品
	    }
	    break;
  }
  return Result;
}
//改变商品数量
void ChangeSPSL(int RecNo,char *sl,int Att)
{
  double fsl;
  char value[31];
  if(RecNo>SPLists->RecordCount)
   RecNo=SPLists->RecordCount;

  fsl=atof(sl);           //要改变的数量
  if(!Att)                //改变数量
  {
   /*fsl=(fsl>1000.0)?1000.0:fsl;  //控制数量的范围
   fsl=(fsl<-1000.0)?-1000.0:fsl;  */

   if(fsl!=SPLists->SPList[RecNo].sl)
   {
    SPLists->SPList[RecNo].sl=fsl;  //设置数量
    SPLists->SPList[RecNo].je=SPLists->SPList[RecNo].sj*fsl;    //商品金额
    SPLists->SPList[RecNo].ssje=SPLists->SPList[RecNo].sjsj*fsl;//应收金额
   }
  }
  else                    //改变售价
  {
	 if(SPLists->SPList[RecNo].bz)
   {
    MsgBoxEx("此商品不能够修改售价!",1);
    return;
   }
   if(Param.Xgsjfs[0]=='0'||(Param.Xgsjfs[0]=='1'&&
     (!strcmp(SPLists->SPList[RecNo].jyfs,"10"))))
   {
    if(SPLists->SPList[RecNo].yhl==0)
     SPLists->SPList[RecNo].yhl = 1.0;

    SPLists->SPList[RecNo].sj=fsl;
    SPLists->SPList[RecNo].yhj=SPLists->SPList[RecNo].yhl*fsl;
    if(SPLists->fklp.yhk.kh[0]!='\0')  //已刷优惠卡
     {
      SPLists->SPList[RecNo].sjsj=SPLists->SPList[RecNo].yhj;  //设置优惠价
      SPLists->SPList[RecNo].ssje=SPLists->SPList[RecNo].yhj*SPLists->SPList[RecNo].sl;//实收金额
     }
    else
     {
      SPLists->SPList[RecNo].sjsj=SPLists->SPList[RecNo].sj;
      SPLists->SPList[RecNo].ssje=SPLists->SPList[RecNo].sj*
				  SPLists->SPList[RecNo].sl;//实收金额
     }
    SPLists->SPList[RecNo].je=SPLists->SPList[RecNo].sj*SPLists->SPList[RecNo].sl;
   }
   else
    if(fsl!=SPLists->SPList[RecNo].sjsj)
    {
     SPLists->SPList[RecNo].sjsj=fsl;  //设置售价
     SPLists->SPList[RecNo].ssje=SPLists->SPList[RecNo].sl*fsl;//应收金额
    }
  }
  CalculateSum();//计算合计
  sprintf(value,"%s %.2f",
	  SPLists->SPList[RecNo].spbm,
	  SPLists->SPList[RecNo].je);
  ShowGuXian(value,1,0);
  InBuffer(-1,WM_PAINTGRID,3,RecNo);  //显示某行
  if(Att)
  {
   SPLists->RecNo=SPLists->RecordCount+1; //记录移动到最后
   InBuffer(-1,WM_PAINTGRID,3,SPLists->RecNo);  //显示某行
  }
}
//打折处理
void DaZhe(double zk,int Att) //Att  打折类型 0--单品,1--全部
{
  int i;
  if(zk>0)
  {
   zk=(zk>10)?10.0:zk;
   zk=(zk<1)?1.0:zk;
   zk=zk/10.0;
  }
  if(Att)                              //全部打折
	{
   if(zk<0)
   {
    zk=-zk;   //变为正数
    zk=zk/SPLists->spje;  //计算折率
   }
   for(i=1;i<=SPLists->RecordCount;i++)
   {
    SPLists->SPList[i].zkl=zk;
    SPLists->SPList[i].yhj=GetRound(SPLists->SPList[i].sj*zk);
    SPLists->SPList[i].sjsj=SPLists->SPList[i].yhj;
    SPLists->SPList[i].ssje=GetRound(SPLists->SPList[i].sjsj*
				     SPLists->SPList[i].sl);
    SPLists->SPList[i].state=4;  //设置打折商品标记
		//InBuffer(-1,0x9904,3,i);  //显示某行
    }
   CalculateSum();//计算合计
   InBuffer(-1,0x9904,1,0);  //显示某行
  }
	else
  {
	 if(SPLists->SPList[SPLists->RecNo].bz)
   {
    MsgBoxEx("此商品不能够打折!",1);
    return;
   }
   if(zk>0)
   {
    SPLists->SPList[SPLists->RecNo].zkl=zk;
    SPLists->SPList[SPLists->RecNo].yhj=
	     GetRound(SPLists->SPList[SPLists->RecNo].sj*zk);//zh

    SPLists->SPList[SPLists->RecNo].sjsj=
	     GetRound(SPLists->SPList[SPLists->RecNo].sj*zk);
    SPLists->SPList[SPLists->RecNo].ssje=
	     GetRound(SPLists->SPList[SPLists->RecNo].sjsj*
		      SPLists->SPList[SPLists->RecNo].sl);
   }
	 else
    if(SPLists->SPList[SPLists->RecNo].sl>0)
     SPLists->SPList[SPLists->RecNo].ssje=0-zk;
    else
     SPLists->SPList[SPLists->RecNo].ssje=zk;
   SPLists->SPList[SPLists->RecNo].state=4;  //设置打折商品标记
   CalculateSum();//计算合计
   InBuffer(-1,0x9904,3,SPLists->RecNo);  //显示某行
  }
}
//优惠处理
//void RemoveValidChar(
void YouHuiChuLi(char *skh)
{
  int i;
  char kh[11],mm[7],Mark;
  Mark = SPLists->fklp.yhk.kh[0];
  if(Mark=='\0')
  {
	 uf_strmidEx(skh,skh);
   uf_strmid(kh,skh,0,10);   //卡号
   uf_strmid(mm,skh,10,6);   //密码
   strcpy(SPLists->fklp.yhk.kh,kh);
   strcpy(SPLists->fklp.yhk.mm,mm);
  }
  if(Mark!='\0'||sql_yhk(&(SPLists->fklp.yhk))) //是否有效优惠卡
   {
    strcpy(kh,SPLists->fklp.yhk.kh);
    for(i=1;i<=SPLists->RecordCount;i++)
     if(kh[0]==g_VIPsw[0]&&Param.Gbksy[0]!='0') //使用贵宾卡
      {
       if(SPLists->fklp.yhk.yhl==0)
	 SPLists->fklp.yhk.yhl=atof(g_VIPyhl);
       SPLists->fklp.yhk.VIP=1;

       if(Param.Gbksy[0]=='1'||SPLists->SPList[i].yhl>SPLists->fklp.yhk.yhl)
	 SPLists->SPList[i].yhl=SPLists->fklp.yhk.yhl;

			 SPLists->SPList[i].sjsj=SPLists->SPList[i].sj*
			       SPLists->SPList[i].yhl;  //实际售价
       SPLists->SPList[i].ssje=SPLists->SPList[i].sjsj*
			       SPLists->SPList[i].sl;
      }
     else
      if(SPLists->SPList[i].state<3||SPLists->SPList[i].state>5)       //优惠处理
       {
	SPLists->SPList[i].sjsj=SPLists->SPList[i].yhj;  //实际售价等于优惠价
	SPLists->SPList[i].ssje=SPLists->SPList[i].sjsj*
				SPLists->SPList[i].sl;
       }
	//g_hyxf=1;//zh***
     CalculateSum();                        //计算合计
	//显示顾显
     InBuffer(-1,0x9904,1,0);  //显示某行
   };
}
//信用卡
int GetFreeXYK(void)
{
  int k;
  for(k=0;k<_MAXXYK;k++)
   if(SPLists->fklp.xyk[k].km[0]=='\0')
    return k;
  return -1;
}

//提货卡管理
double TiHuoKa(char *skh,double fkce,int *xh)
{
  int k,Mark=1;
  double Result=0,ce;
  char kh[11],mm[7];

  if(!fkce) return 0;

  uf_strmidEx(skh,skh);     //去掉字符串开头的特殊字符
	uf_strmid(kh,skh,0,10);   //卡号
  uf_strmid(mm,skh,10,6);   //密码

  k=sql_checkthk(kh);       //检查提货卡是否已经存在
  if(k!=-1)                 //提货卡未存在,k是第一个提货卡空结构的索引
  {
   strcpy(SPLists->fklp.thk[k].kh,kh);
   strcpy(SPLists->fklp.thk[k].mm,mm);
   if(!sql_thk(&(SPLists->fklp.thk[k]))) //查询提货卡
    SPLists->fklp.thk[k].kh[0]='\0';     //提货卡查询失败
   else
   {
    SPLists->fklp.thk[k].xh=k+1;
    *xh=k;
    if(fkce<0)                          //是退货
    {
     if(Param.Thk[1]=='1')              //限制退货金额
      {
       ce=SPLists->fklp.thk[k].dqye-SPLists->fklp.thk[k].fkje;
			 if(ce>=0) Result=0;
       else if(ce<fkce)                 //余额必须小于发卡金额
	     Result=fkce;
       else Result=ce;                  //退货金额
      }
     else Result=fkce;
     if(Result&&Param.Thk[2]=='1')
      if(!InPutPassWord(g_cashcode))
       Result=0;
    }
    else
    {
     ce=SPLists->fklp.thk[k].dqye;
     if(ce>fkce) Result=fkce;
     else Result=ce;
    }
    if(Result)
    {
     Result = uf_round(Result,2);
		 SPLists->fklp.thk[k].xzje=Result;   //下帐金额
     SPLists->fklp.thk[k].xye=SPLists->fklp.thk[k].dqye-Result;
     if(Param.Thk[3]=='2'||(Param.Thk[3]=='1'&&Result<-0.01))
      if(!ShowTiHuoKa(&(SPLists->fklp.thk[k])))
       Result=0;
      else
       Result=SPLists->fklp.thk[k].xzje;
    }
    if(!Result)
     SPLists->fklp.thk[k].kh[0]='\0';
   }
  }
  return Result;
}

//提货卡查询
void QueryTHK(char *skh)
{
  double Result=0;
	char kh[11],mm[7];
  THK tempthk;

  uf_strmidEx(skh,skh);
  uf_strmid(kh,skh,0,10);   //卡号
  uf_strmid(mm,skh,10,6);   //密码

  strcpy(tempthk.kh,kh);
  strcpy(tempthk.mm,mm);
  if(sql_thk(&tempthk)) 	//查询提货卡
   ShowTiHuoKaEx(&tempthk);
  sql_thkclose();
  return;
}

//结帐
int JieZhang(char *Value)
{
  double je;
	if(!strcmp(Value,"")) return 1;   //未付款
  je=atof(Value);
  if(je<SPLists->ysje) return 2;    //付款不足

  SPLists->fklp.xjje=je;
  SPLists->fklp.ssje=je;
  SPLists->fklp.zbje=je-SPLists->ysje;
  InBuffer(-1,0x9907,0,0);          //金额找零
  return 0;
}
//挂起检查
int GuaQiCheck(void)
{
  if(_SPListCount>=__WorkBuffer) return 2;  //挂起数不能超过规定笔数
  if(!SPLists->RecordCount) return 1;       //当前无销售商品,不用挂起
  return 0;
}

int GuaQi(char *GqName)
{
 // FILE *stream;
  int i;
  FILE *fp;
  char FileName[51];

  for(i=0;i<__WorkBuffer;i++)
   if(__GQList[i].lsh==0)             //找一个空闲的挂起区
   {
     sprintf(FileName,"DATA\\GQ%d.DAT",i+1);
     fp = fopen(FileName,"wb+");
     if(fp==NULL) return -1;
     //  g_lsh++;                     //流水号加1
     //保存到磁盘
     fwrite((char *)SPLists,sizeof(_SPLists),1,fp);
     fclose(fp);
      //
     if(Param.Gqjg[0]=='2')
      if(!sql_insertgq(i+1,SPLists->RecordCount,SPLists->spje,SPLists->ysje))
			 return -1;

     __GQList[i].lsh=i+1;

⌨️ 快捷键说明

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