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

📄 sale1.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 5 页
字号:
                for(i = 0; i < MAX_TAX_NUM; i++)
                {
                    TaxFlag[i] = (((pflag>>i)&0x01)^shift_flag[i]);
                    ltmp += caltax(TaxFlag[i],i,trans.amount);
                }
                //	         Tax1Flag=(pflag&0x01)^shift1_flag;
                //	         Tax2Flag=((pflag>>1)&0x01)^shift2_flag;
                //	         Tax3Flag=((pflag>>2)&0x01)^shift3_flag;
                //	         ltmp=caltax(Tax1Flag,0,trans.amount)+caltax(Tax2Flag,1,trans.amount)+caltax(Tax3Flag,2,trans.amount);
            }
            else
            {
                ltmp = 0;
                for(i = 0; i < MAX_TAX_NUM; i++)
                {
                    TaxFlag[i] = 0;
                }
            }
            if(!sysflag->tax_shift_mode)
                Clr_Tax_Flag();
        }
        else
            ltmp = 0;

        /*** maxcheck  **/
        if(maxcheck(ch,DEPT)==NOTOK)
            return;
        if(Mul_flag)		/* May not to display the department number */
        {
            Item_Mode = MULT;
            Clr_Dsp_Data();

            Lcm_Disp_Desc( dept[ch].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
            Qty_Adjust(tmp_count);
            //			len=LongAndDot2Str(adj_num,adj_dots, qty ,1,0,0,0);
            //			VFDDisplay(qty+MAX_LENGTH_15-len, NOTCLEARD, LEFT);

            RightDisp((RM_flag?-1:1)*trans.amount, sysflag->sysdots);		/* The VOID operation can not execute this sentences */
        }
        else 
        {
            Item_Mode = SNGL;
            repcnt =1;		/* Store the counter */
            Clr_Dsp_Data();
            //Insert_Num((ch+1)/10,0);
            //Insert_Num((ch+1)%10,1);
            Lcm_Disp_Desc( dept[ch].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
            //disp_Num_Str(repcnt, 0);
            Insert_Num( repcnt/10 ,0);
            Insert_Num( repcnt%10 ,1);

            RightDisp((RM_flag?-1:1)*trans.amount, sysflag->sysdots);
            	/* The OVID operation can not execute this sentences */
        }
    }
    else	/** programmed price processing **/
    {
        if(Mul_flag)
        {
            if(tmp_count > MAXQUNTY)
                {errorType(ERR_XTIME_QTY);return;}
            if(get_dept_price(ch)==NOTOK)			/* Get the programmed price */
                return; 
            if(lnum >= getLong(dept[ch].Hdlo))
                {errorType(ERR_HALO);return;}
            tmp = Sale_Mul(lnum, sysflag->sysdots, tmp_count, 3, sysflag->xCount_round, sysflag->sysdots);
            if((tmp>sysflag->HaloNum) || (tmp == MIN_SIGNED_LONG) || (tmp < 0))
                {errorType(ERR_HALO);return;}
            trans.price = lnum;
            trans.count = tmp_count;
            trans.amount = tmp;

        /* this palce will be added Tax Shift Flag processing */
            pflag=dept[ch].pflag;
            if(sysflag->Tax_System)
            {
                if(!Tax_Emp_Flag)
                {
                    ltmp = 0;
                    for(i = 0; i < MAX_TAX_NUM; i++)
                    {
                        TaxFlag[i] = (((pflag>>i)&0x01)^shift_flag[i]);
                        ltmp += caltax(TaxFlag[i],i,trans.amount);
                    }
//                    Tax1Flag=(pflag&0x01)^shift1_flag;
//                    Tax2Flag=((pflag>>1)&0x01)^shift2_flag;
//                    Tax3Flag=((pflag>>2)&0x01)^shift3_flag;
//                    ltmp=caltax(Tax1Flag,0,trans.amount)+caltax(Tax2Flag,1,trans.amount)+caltax(Tax3Flag,2,trans.amount);
                }
                else
                {
                    ltmp = 0;
                    for(i = 0; i < MAX_TAX_NUM; i++)
                    {
                        TaxFlag[i] = 0;
                    }
//                    Tax1Flag = Tax2Flag = Tax3Flag = 0;
//                    ltmp = 0;
                }
                if(!sysflag->tax_shift_mode)
                    Clr_Tax_Flag();
            }
            else
                ltmp = 0;

            if(maxcheck(ch,DEPT)==NOTOK)
                return;
            Item_Mode = MULT;
            Clr_Dsp_Data();

            Lcm_Disp_Desc( dept[ch].desc ,NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
            Lcm_Disp_Desc( dept[ch].desc ,NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
            Qty_Adjust(tmp_count);
            //			len=LongAndDot2Str(adj_num,adj_dots, qty ,1,0,0,0);
            //			VFDDisplay(qty+MAX_LENGTH_15-len, NOTCLEARD, LEFT);

            RightDisp((RM_flag?-1:1)*trans.amount, sysflag->sysdots);
        }
        else /* press dept key only */
        {                                      /*  ________________|----->>> For the indirect department press duplucate */
            if((lastincmd!=InCmd) || (DeptShiftFlag != 0) || (DPLUShiftFlag != 0) || (RM_flag==1) || (TnsBf_Len == 0)
                    ||((transbuff[TnsBf_Len-1].ID&0x1F) == TS_RM_DEPT) 
                    || ((transbuff[TnsBf_Len-1].ID&0x1F) == TS_VD_DEPT))			/* Not press the key repeat */
            {
                if(Void_flag == 0)
                {
                    if(get_dept_price(ch)==NOTOK)
                        return;
                }
                else
                {
                    if(Void_Mode == 0)				/* Used the VOID input price */
                        lnum = tmp_price;
                    else
                    {
                        Void_Mode = 0;
                        if(get_dept_price(ch)==NOTOK)
                            return;
                    }
                }
                if((lnum >= getLong(dept[ch].Hdlo)) || (lnum > sysflag->HaloNum))
                    {errorType(ERR_HALO);return;}
                trans.price = lnum;
                trans.count = 1*1000;
                trans.amount = lnum;

                pflag=dept[ch].pflag;
                if(sysflag->Tax_System)
                {
                    if(!Tax_Emp_Flag)
                    {
                        ltmp = 0;
                        for(i = 0; i < MAX_TAX_NUM; i++)
                        {
                            TaxFlag[i] = (((pflag>>i)&0x01)^shift_flag[i]);
                            ltmp += caltax(TaxFlag[i],i,trans.amount);
                        }
//                        Tax1Flag=(pflag&0x01)^shift1_flag;
//                        Tax2Flag=((pflag>>1)&0x01)^shift2_flag;
//                        Tax3Flag=((pflag>>2)&0x01)^shift3_flag;
//                        ltmp=caltax(Tax1Flag,0,trans.amount)+caltax(Tax2Flag,1,trans.amount)+caltax(Tax3Flag,2,trans.amount);
                    }
                    else
                    {
                        ltmp = 0;
                        for(i = 0; i < MAX_TAX_NUM; i++)
                        {
                            TaxFlag[i] = 0;
                        }
//                        Tax1Flag = Tax2Flag = Tax3Flag = 0;
//                        ltmp = 0;
                    }
                    if(!sysflag->tax_shift_mode)
                        Clr_Tax_Flag();
                }
                else
                    ltmp = 0;

                if(maxcheck(ch,DEPT)==NOTOK)
                    return;
                Item_Mode = SNGL;
                repcnt=1;
                Clr_Dsp_Data();
                //Insert_Num((ch+1)/10,0);
                //Insert_Num((ch+1)%10,1);
                Lcm_Disp_Desc( dept[ch].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
                Insert_Num( repcnt/10 ,0);
                Insert_Num( repcnt%10 ,1);

                RightDisp(((Void_flag||RM_flag)?-1:1)*trans.amount,sysflag->sysdots);
            }
            else /* repeat key pressed */
            {
                if((Item_Mode == SNGL) && ((transbuff[TnsBf_Len - 1].ID&0x1F) == TS_DEPT))
                {
                    ch = transbuff[TnsBf_Len - 1].nth;
                    #ifdef AUTO_PER		/* Support the department auto percent function */
                    if(Auto_Per_Flag == 1)
                        trans.amount = bak_trans_amount;
                    else
                    #endif /* End AUTO_PER */
                        trans.amount = transbuff[TnsBf_Len - 1].price;			/* The amount is equal to the price */
                        trans.count = 1*1000;
                        trans.price = trans.amount;
                    if(sysflag->Tax_System) 
                    {
                        ltmp = 0;
                        for(i =0; i < MAX_TAX_NUM; i++)
                            ltmp += caltax(TaxFlag[i],i,trans.amount);
                    }
                    else
                        ltmp = 0;
                    if(maxcheck(ch,DEPT)==NOTOK)
                        return;
                    repcnt++;
                    //if(repcnt==10)				/*repcnt number add to 100 ok?*/
                    if(repcnt ==100)
                        repcnt=0;
                    Clr_Dsp_Data();
                    //Insert_Num((ch+1)/10,0);
                    //Insert_Num((ch+1)%10,1);
                    Lcm_Disp_Desc( dept[ch].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
                    //Insert_Num(repcnt,2);
                    Insert_Num( repcnt/10 ,0);
                    Insert_Num( repcnt%10 ,1);

                    RightDisp(trans.amount, sysflag->sysdots);
                }
                else
                {
                    ch = transbuff[TnsBf_Len - 1].nth;
                    if(get_dept_price(ch)==NOTOK)
                    return;
                    trans.price = lnum;
                    trans.count = 1*1000;
                    trans.amount = lnum;

                    pflag=dept[ch].pflag;
                    if(sysflag->Tax_System)  
                    {
                        if(!Tax_Emp_Flag)
                        {
                            ltmp = 0;
                            for(i = 0; i < MAX_TAX_NUM; i++)
                            {
                                TaxFlag[i] = (((pflag>>i)&0x01)^shift_flag[i]);
                                ltmp += caltax(TaxFlag[i],i,trans.amount);
                            }
//                            Tax1Flag=(pflag&0x01)^shift1_flag;
//                            Tax2Flag=((pflag>>1)&0x01)^shift2_flag;
//                            Tax3Flag=((pflag>>2)&0x01)^shift3_flag;
//                            ltmp=caltax(Tax1Flag,0,trans.amount)+caltax(Tax2Flag,1,trans.amount)+caltax(Tax3Flag,2,trans.amount);
                        }
                        else
                        {
                            ltmp = 0;
                            for(i = 0; i < MAX_TAX_NUM; i++)
                            {
                                TaxFlag[i] = 0;
                            }
//                            Tax1Flag = Tax2Flag = Tax3Flag = 0;
//                            ltmp = 0;
                        }
                        if(!sysflag->tax_shift_mode)
                            Clr_Tax_Flag();
                    }
                    else
                        ltmp = 0;

                    if(maxcheck(ch,DEPT)==NOTOK)
                        return;
                    Item_Mode = SNGL;
                    repcnt=1;
                    Clr_Dsp_Data();
                    //Insert_Num((ch+1)/10,0);
                    //Insert_Num((ch+1)%10,1);
                    Lcm_Disp_Desc( dept[ch].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
                    Insert_Num( repcnt/10 ,0);
                    Insert_Num( repcnt%10 ,1);

                    RightDisp(trans.amount, sysflag->sysdots);
                }
            }
        }
    }

    /** print and display processing **/
    trans.nth=ch;

    Sale_Prn(transbuff[TnsBf_Len-1]);
    Update_Tmpvars(transbuff[TnsBf_Len-1], POSITIVE);		/* Update the structure variable tmpvars */

    /*-----------------------------------------------------------------------*/

    Void_flag=0;
    RM_flag = 0;
    Mul_flag = 0;

#ifdef AUTO_PER			/* Support the department auto percent function */
    if((dept[ch].per_rate != 0) && (sysflag->Auto_Per_Use_Flag == 1) && (transbuff[TnsBf_Len-1].ID == TS_DEPT))
    /* The percent rate is not zero, do the auto percent function */
    {
        Do_Auto_Per(DEPT, ch);
    }
#endif /* End AUTO_PER */

    if(!NewTrans)
    {
        NewTrans=1;
        pflag=dept[ch].pflag;
        if(pflag&0x10)       /* single item, Do the CASH */
        { /** do cash **/
            InCmd=KD_CASH;
            numcnt=0;
            Do_Cash();
        }
        else
        {
            if(CurrMode != TRAINING)
                continue_sale_flag=0xAA;
        }
    }
}

/*************************************************************/
void Do_PLUcr()				/* The open PLU price get */
{
   if(numcnt)		/* Open PLU price input */
   {
   	if(Void_flag == 1)
   		{errorType(ERR_KEY_SEQ);return;}
		if((lnum >= getLong(PRICENUM)) || (lnum > sysflag->HaloNum))
			{errorType(ERR_HALO);return;}
		if(lnum == 0)
			{errorType(ERR_ZERO_TRANS);return;}

      pluenflag=1;
      tmp_price=lnum;
      //Insert_Char('A',0);
		Lcm_Disp_Str(Input_Price,LCM_LINE_2 , ALIGN_LEFT, FALSE);
      RightDisp(lnum,sysflag->sysdots);
   }
   else              /* Used in the VOID operation */
   {
      if(Void_flag == 1)
      {
			if(tmp_price > sysflag->HaloNum)
				{errorType(ERR_HALO);return;}
			if(tmp_price == 0)
				{errorType(ERR_ZERO_TRANS);Void_Mode = 0;return;}
         pluenflag = 1;
         //Insert_Char('A',0);
         Lcm_Disp_Str( PLU_Void ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
      }
      else
      {
         errorType(ERR_DIGIT_ILLEGAL);
         return;
      }
   }
}

/*****************************************************************/
byte  get_plu_price(word ch)
{
   if(pluenflag)
   { 
   	lnum=tmp_price;  
   	pluenflag=0; 
   }
   else
   {
      lnum=plu[ch].price;
    	if(lnum==0) return(NOTOK);
   }
   return (OK);
}

/*****************************************************************/
/*------------------------------------------------------------------------------------*
 *			Not need judge the error case, for the function 'maxcheck' has judged it.
 *------------------------------------------------------------------------------------*/
byte PLUcheck(word ch)
{
	byte plink;				/* The PLU linked departments number */
    byte i;
	
	if(Chk_Buff_Full() == NG)
		return (NOTOK);
	plink = plu[ch].plink;		/* Get the PLU linked departments number */

⌨️ 快捷键说明

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