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

📄 sale1.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 5 页
字号:

	    Clr_Dsp_Data();
	   //Insert_Sect(SECT_PO,0);
	    Lcm_Disp_Str(PO_Check ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
	    RightDisp(-po_input, sysflag->sysdots);
       
	    _DrawOn();
	    Head_Prn_Flag = 0;				/* Not print the flush print head */
	    Logo_Prn_Flag = 0;				/* Not print the logo */
	    Prn_InsFmtStr(Var_Str_PO, 1, Get_Spec_Len(Var_Str_PO), FLUSH_LEFT);
	    Print_Ex(1);
		memcpy(prn_Buf+1, check[0], MAX_DESC_LEN);
		LongPrnFmt(-po_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
		print();
	    prn_Line('-');
	    prn_Stamp();
	    Logo_Prn_Flag = 1;
	   Flag_Prn_Head = FALSE;
	   #ifdef	RCPT_REPRN			/* Support the receipt reprint function */
	   Rcpt_RePrn_Cnt = 0;
	   #endif /* End RCPT_REPRN */
       
       Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, PO_Check, ALIGN_LEFT);
       LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, 15, -po_input, sysflag->sysdots, ALIGN_LEFT);
       Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);  
	}
	else if(InCmd == KD_CHARGE)
	{
      report.POCrg1Amt +=po_input;
      report.POCrg1Cnt ++;
      PTD_report.POCrg1Amt +=po_input;
      PTD_report.POCrg1Cnt ++;

      report.Crg1Total -=po_input;
      PTD_report.Crg1Total -=po_input;
      report.GrandTotal -= po_input;
      PTD_report.GrandTotal -= po_input;
      DL_Add(&report.NRGT, -po_input, sysflag->sysdots);
      DL_Add(&PTD_report.NRGT, -po_input, sysflag->sysdots);
		Set_Rpt_Flag(RPT_FULL_DAILY);
		Set_Rpt_Flag(RPT_FULL_PTD);
		Set_Rpt_Flag(RPT_NRGT);

	   Clr_Dsp_Data();
	   //Insert_Sect(SECT_PO,0);
	   Lcm_Disp_Str(PO_Charge ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
	   RightDisp(-po_input, sysflag->sysdots);

	   _DrawOn();
	   Head_Prn_Flag = 0;				/* Not print the flush print head */
	   Logo_Prn_Flag = 0;				/* Not print the logo */
	   Prn_InsFmtStr(Var_Str_PO, 1, Get_Spec_Len(Var_Str_PO), FLUSH_LEFT);
	   Print_Ex(1);
		memcpy(prn_Buf+1, charge[0], MAX_DESC_LEN);
		LongPrnFmt(-po_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
		print();
	   prn_Line('-');
	   prn_Stamp();
	   Logo_Prn_Flag = 1;
	   Flag_Prn_Head = FALSE;
	   #ifdef	RCPT_REPRN			/* Support the receipt reprint function */
	   Rcpt_RePrn_Cnt = 0;
	   #endif /* End RCPT_REPRN */

       Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, PO_Charge, ALIGN_LEFT);
       LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, 15, -po_input, sysflag->sysdots, ALIGN_LEFT);
       Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);  
	}
	else if(InCmd == KD_MISC)
	{
      report.POMISCAmt +=po_input;
      report.POMISCCnt ++;
      PTD_report.POMISCAmt +=po_input;
      PTD_report.POMISCCnt ++;

      report.MiscTotal -=po_input;
      PTD_report.MiscTotal -=po_input;
      report.GrandTotal -= po_input;
      PTD_report.GrandTotal -= po_input;
      DL_Add(&report.NRGT, -po_input, sysflag->sysdots);
      DL_Add(&PTD_report.NRGT, -po_input, sysflag->sysdots);
		Set_Rpt_Flag(RPT_FULL_DAILY);
		Set_Rpt_Flag(RPT_FULL_PTD);
		Set_Rpt_Flag(RPT_NRGT);

	   Clr_Dsp_Data();
	   //Insert_Sect(SECT_PO,0);
	   Lcm_Disp_Str(PO_Misc ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
	   RightDisp(-po_input, sysflag->sysdots);
       
	   _DrawOn();
	   Head_Prn_Flag = 0;				/* Not print the flush print head */
	   Logo_Prn_Flag = 0;				/* Not print the logo */
	   Prn_InsFmtStr(Var_Str_PO, 1, Get_Spec_Len(Var_Str_PO), FLUSH_LEFT);
	   Print_Ex(1);
	   Prn_Adj_Ex(Var_Str_Misc,-po_input,sysflag->sysdots,RPOSI, DESC_NEW);
	   prn_Line('-');
	   prn_Stamp();
	   Logo_Prn_Flag = 1;
	   Flag_Prn_Head = FALSE;
	   #ifdef	RCPT_REPRN			/* Support the receipt reprint function */
	   Rcpt_RePrn_Cnt = 0;
	   #endif /* End RCPT_REPRN */

       Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, PO_Misc, ALIGN_LEFT);
       LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, 15, -po_input, sysflag->sysdots, ALIGN_LEFT);
       Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);  
	}
	po_flag = 0;
}


 /**---------------------------------------------------**
 ** processing index number printing and open drawer  **
 **---------------------------------------------------**/
void Do_NS(void)
{
    byte i;
    char tmp_str[MAX_TEXT];
    byte len = 0;

    memset(tmp_str, 0x20, MAX_TEXT);

	#ifndef VER_RSNT
    if(Cash_flag){errorType(ERR_PAY_NO_END);return;}
    #else
    if((work_mode == RETAIL) && (Cash_flag))
   	    {errorType(ERR_PAY_NO_END);return;}
    #endif /* End VER_RSNT */
    if((Void_flag) || (RM_flag) || (Mul_flag))
   	    {errorType(ERR_KEY_SEQ);return;}

    if(numcnt)
    {
      //Insert_Char('N',0);
        Lcm_Disp_Str( Note_Number ,LCM_LINE_2,ALIGN_LEFT, FALSE);

        len = strlen(Note_Number);
		memcpy(tmp_str, Note_Number, len); 
        prn_Buf[1] = '#';
        memcpy(prn_Buf+1+1,In_Buff,numcnt);
        for(i = 0;i < numcnt; i++)			/* Adjust with ASCII code */
        	prn_Buf[i+1+1] += '0';
        
		memcpy(tmp_str+len+2, prn_Buf+1, 1+numcnt); 
        len += 2+ 1 +numcnt;
        print();
        if(NewTrans == 0)
        {
        	NewTrans = 1;
        	Update_TVAT_Buff();
        }
        tmp_str[len] = '\0';
        Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, tmp_str, ALIGN_LEFT); 
        Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
        
   }

   else if(!NewTrans) 
   {
		
        _DrawOn();
        if(CurrMode == REGISTER)			/* Update the no sale report */
        {
           report.NScount++;
           PTD_report.NScount++;
        }
//      #ifndef VER_RSNT
        if(sysflag->NS_switch)
        {
        	Head_Prn_Flag = 0;				/* Not print the flush print head */
        	Logo_Prn_Flag = 0;				/* Not print the logo */
//      	memcpy(prn_Buf+1,Var_Str_NS,strlen(Var_Str_NS));
//			xtr_strcpy(prn_Buf+1,Var_Str_NS);	/* Modified on 2004-04-07 17:30 */
//			Prn_InsFmtStr(Var_Str_NS, 1, strlen(Var_Str_NS)/2, FLUSH_LEFT);
			Prn_InsFmtStr(Var_Str_NS, 1, Get_Spec_Len(Var_Str_NS), FLUSH_LEFT);
//      	print();
			Print_Ex(1);
        	prn_Line('-');
        	prn_Stamp();

            Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_NS, ALIGN_LEFT); 
            Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
        	Logo_Prn_Flag = 1;
        }
		#ifdef RCPT_REPRN					/* Support the receipt reprint function */
		Rcpt_RePrn_Cnt = 0;
		#endif /* End RCPT_REPRN */
        DisTime();

		//Lcm_Disp_Str(Reg_mode ,LCM_LINE_2,ALIGN_LEFT);
		
//      #endif /* End VER_RSNT */
   }
   else
     { errorType(ERR_SALE_NO_END);return; }

}

/*************************************************************/
/**------------------------------------------------**
 ** process X-count and display date and time      **
 **------------------------------------------------**/
void Do_xTime(void)
{
	if(Cash_flag)	/* The payment not end */
		{errorType(ERR_PAY_NO_END);return;}
	if((Void_flag) || (Mul_flag))
		{errorType(ERR_KEY_SEQ);return;}
		
   if(numcnt) 
   {
		Lcm_Disp_Str( X_count ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
   	if(lnum == 0)
   		{errorType(ERR_DIGIT_ILLEGAL);return;}

		if(dec_flag == 0)
		{
			#ifdef VER_RSNT	/* Support the restaurant function */
			if(lnum > (MAX_TABLE_LOGI_NO))
				{errorType(ERR_DIGIT_ILLEGAL);return;}
			#endif /* End VER_RSNT */
	   	VFDSetPeriod(MAX_LCD_NUM - sysflag->sysdots - 1,CLR); /* Clear the period when the price has inputed */
	   	lnum *= 1000;
	   	#ifndef	VER_RSNT				/* Not support restaurant function */
			if(lnum > (MAXQUNTY))
				{errorType(ERR_XTIME_QTY);return;}
	   	#endif /* End VER_RSNT */
	   }
	   else
	   {
	   	lnum *= getLong(3-dec_cnt);			/* Adjust, for the 3 percent decimal points */
	   	if(lnum > MAXQUNTY)
	   		{errorType(ERR_XTIME_QTY);return;}
	   }
		Mul_flag = 1;
	   tmp_count=lnum;
		Qty_Adjust(lnum);
		Clr_Dsp_Data();
		RightDisp(adj_num, adj_dots);
	}
	else
	{
		if(!sysflag->tax_shift_mode)
			Clr_Tax_Flag();
		if(NewTrans)
			{ errorType(ERR_SALE_NO_END); return; }
		DisTime();
	}
	#ifdef VER_RSNT 			/* Support the restaurant function */
	bak_dec_flag = dec_flag;		/* When in the restaurant mode, save the decimal point key pressed status */
	#endif /* End VER_RSNT */
}

/**-------------------------------------------------------**
 ** checking and calculating max or min value of          **
 ** count and amount etc. of dept1 and dept2              **
 **-------------------------------------------------------**/
byte maxcheck(byte ch, byte flag)
{
    byte i;

    if(Chk_Buff_Full() == NG)
        return (NOTOK);

    if(Void_flag)
    {
        if(flag == DEPT)
        {
            if(trans.amount > calPrtAmt(DEPT,ch))			/* Judge the VOID amount is larger than the buffer amount or not */
                { errorType(ERR_VOID_OVER); return (NOTOK);}
        }
        transbuff[TnsBf_Len].ID = TS_VD_DEPT;				/* Department VOID operation */
        transbuff[TnsBf_Len].price = -trans.price;		/* Set it a negative value */
        transbuff[TnsBf_Len].quantity = 1*1000;			/* Set it 1 quantity */
    }
    else if(RM_flag)			/* In the Return Merchandise mode, don't need any judge */
    {
        transbuff[TnsBf_Len].ID = TS_RM_DEPT;				/* Department Return Merchandise operation */
        transbuff[TnsBf_Len].price = -trans.price;		/* Set it a negative value */
        transbuff[TnsBf_Len].quantity = trans.count;		/* The quantity is always positive */
    }
    else				/* The normal press DEPT mode */
    {
        if(labs(ltmp + trans.amount + tmpvars.netamt) > (unsigned long )MAXCASH) 	/* Reach to the max total */
            { errorType(ERR_TRANS_AMT);return (NOTOK); }
        if((calTotQty(transbuff, TnsBf_Len) + trans.count)/1000 > MAXTCNT)			/* Reach to the max quantity */
            {errorType(ERR_TRANS_QTY);return (NOTOK);}
        if((dept[ch].pflag2>>4) != 0)//age limit
        {
//            if(Warning(WARN_AGE1) != OK)
//                return NOTOK;
        }
        transbuff[TnsBf_Len].ID = TS_DEPT;
        transbuff[TnsBf_Len].price = trans.price;			/* Positive value */
        transbuff[TnsBf_Len].quantity = trans.count;
    }
    transbuff[TnsBf_Len].nth = ch;
    transbuff[TnsBf_Len].flag = (sysflag->xCount_round)<<4;
    if(sysflag->Tax_System)			/* Tax mode */
    {
        for(i = 0; i < MAX_TAX_NUM; i++)
            transbuff[TnsBf_Len].flag |= (TaxFlag[i]<<i);
    }
    else				/* VAT mode */
        transbuff[TnsBf_Len].flag |= (dept[ch].pflag) & (0x0F);
    TnsBf_Len ++;
    if(!NewTrans)	/* Is the new transaction, store the tax/VAT rate and the tax/VAT mode */
        Update_TVAT_Buff();
    if(CurrMode == REGISTER)
    {
        Set_Rpt_Flag(RPT_FULL_DAILY);
        Set_Rpt_Flag(RPT_FULL_PTD);
    }
#ifdef AUTO_PER			/* Support the auto percent function */
    Auto_Per_Flag = 0;
#endif /* End AUTO_PER */
    return (OK);	/* Normal return */
}


/**----------------------------------------------------**
** computing programmed price of departments          **
**----------------------------------------------------**/
byte get_dept_price(byte ch)
{
   lnum = dept[ch].price;
   if(lnum ==0L)
      { errorType(ERR_ZERO_TRANS); return (NOTOK); }
   return (OK);
}

/**---------------------------------------------------**
 ** Processing department operation                   **
 **---------------------------------------------------**/
void Do_Dept(byte ch)
{
    byte pflag;		/* Store the department structure flag */
    long tmp;		/* temporary variable */
    byte qty[MAX_LENGTH_15+1];
    byte len;
    byte i;

    if(Cash_flag)				/* The payment is not end */
        {errorType(ERR_PAY_NO_END); return;}

    #if COUNTRY == HONGKONG
    if (!dept[ch].sale)     // 不允许直接销售, 表明是管理PLU的. 
    {
        curr_dept = ch;
        Do_Dept_Ex(ch);       // 部门的额外处理, 刷新PLU及Cooking Message的显示
        
        return;
    }
    #endif

    if(numcnt)  	/** manual price processing **/
    {
        if((lnum >= getLong(dept[ch].Hdlo)) || (lnum > sysflag->HaloNum))
            {errorType(ERR_HALO);return;}
        if((lnum == 0) && (sysflag->zero_trans_flag == 0))			/* Not support the zero transaction */
            {errorType(ERR_ZERO_TRANS);return;}
        if(Void_flag == 1)
            {errorType(ERR_DIGIT_ILLEGAL);return;}

        if(Mul_flag)			/* Has press the XTIME key */
        {
            if(tmp_count > MAXQUNTY)
                {errorType(ERR_XTIME_QTY);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;}
            /* The trans.count has do in the function Do_xTime */
            trans.price = lnum;
            trans.count = tmp_count;
            trans.amount = tmp;
        }
        else 
        {
            trans.price = lnum;
            trans.count = 1*1000;		/* For the quantity has 3 dots */
            trans.amount = lnum;
        }

        /* this palce will be added Tax Shift Flag processing */
        pflag=dept[ch].pflag;
        if(sysflag->Tax_System)
        {
            if(!Tax_Emp_Flag)
            {
                ltmp = 0;

⌨️ 快捷键说明

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