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

📄 sale.c

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

            case KD_PAGE_LEFT_PLU:          // Page left
            case KD_PAGE_RIGHT_PLU:         // Page right
                Do_Page_PLU();
                break;

            case KD_PAGE_LEFT_CM:           // Page left
            case KD_PAGE_RIGHT_CM:          // Page right
                Do_Page_CM();
                break;

            case KD_DETAIL:
                Do_Table_Detail();
                break;

      	    default:						/* Default key, do error */
                if((ra_flag) || (po_flag))
                {
                    errorType(ERR_KEY_SEQ);
                    break;
                }
                if((InCmd >= KD_DP_ST)&&(InCmd <= KD_DP_END))
                {
                    Idx = getDept();
                    if(Idx >= Max_Dept_No)
                    {
                        errorType(ERR_DEPT_OVER);
                        break;
                    }
                    if(Idx >= MAX_REL_DEPT_CNT)
                    {
                        errorType(ERR_DEPT_LIMIT);
                        break;
                    }
                    Do_Dept(Idx); 
                }
	   			else if ((InCmd >= KD_DPLU_ST) && (InCmd <= KD_DPLU_END))
                {
                    if(numcnt!=0)
                        {errorType(ERR_DIGIT_ILLEGAL);break;}
                    Idx = getDPLU();
                    if(Idx >= MAX_DPLU_NO)
                    {
                        errorType(ERR_DPLU_OVER);
                        break;
                    }
                    Idx = Dplu_Pluno[Idx];
                    if((Idx == 0) || (Idx > Max_Plu_No))
                        {errorType(ERR_DIGIT_ILLEGAL);break;}
                    lnum = Idx;		/* The index number */
                    numcnt = 4;				/* Set a not zero data */
                    InCmd = KD_PLU;
                    Do_PLU(); 
                    lastincmd = KD_NULL;
                }
                else if ((InCmd >= KD_DTABLE_ST) && (InCmd <= KD_DTABLE_END))
                {
                    if (numcnt != 0)
                        {errorType(ERR_DIGIT_ILLEGAL);break;}
                    Idx = InCmd - KD_DTABLE_ST;
                    if (Idx >= Real_Table_No)
                    {
                        errorType(ERR_KEY_ILLEGAL);
                        break;
                    }
                    Do_DTABLE(Idx);
                }
                else if ((InCmd >= KD_TABLE_SHORTCUT_ST) && (InCmd <= KD_TABLE_SHORTCUT_END))
                {
                    // ... 
                }
                else if ((InCmd >= KD_VIRTUAL_ST) && (InCmd <= KD_VIRTUAL_END))
                {
                    Do_Virtual_Key();
                }
                else
                {
                    if(!sysflag->tax_shift_mode)
                        Clr_Tax_Flag();
                    errorType(ERR_KEY_ILLEGAL);
                }
                break;
        } /* end switch */
    } /* end while */
} /* end salemain */

/*-----------------------------------------------------------------*
*  Function:   Input the clerk password operation.
*  Parameter:  void.
*-----------------------------------------------------------------*/
byte clerkpass(void)
{
   byte i;           /* The circular temporary variable */

	DEBUG_SET(currclerk = 1;return (OK);)

   i = 0;

   currclerk = NUL_VLU;    /* Clear the current clerk */
	Clr_Period();
	Disp_Spec_Period();
   while(TRUE)
   {
   	Clr_Dsp_Data();
      VFDDisplay(Disp_Sale_Clerk_Assign,NOTCLEARD,LEFT);		/* Display OP in the left position */

      if(GetIn()==NG)
         continue;
      GetMainMode();
      if(MainMode!=CurrMode)
      {
         return (NG);
      }

      switch(InCmd){
         case KD_CLERK:
            for(i = 0;i < Max_Clerk_No;i ++)
            {
               if(lnum==clerk[i].secret)
                  break;
            }
            if(i==Max_Clerk_No)
            {
            	#ifdef VER_RSNT		/* Support the restaurant function */
            	if(Open_flag)
            	{
						errorType(ERR_PASS_EXIST);
            	}
            	#endif /* End VER_RSNT */
               continue;
            }
            break;

			#ifdef VER_RSNT	/* Support the restaurant function */
			case KD_CASH:
				if(Open_flag)
					return (NG);
				else
					continue;
   		#endif /* End VER_RSNT */

         default:
            continue;
      }
      break;
   }
   currclerk = i + 1;
//   Clr_Dsp_Data();
//   RightDisp(0L,sysflag->sysdots);
	return (OK);
}


#ifdef VER_RSNT 			/* Support the restaurant function */
/*------------------------------------------------------------------------*
 *			Input the waiters password.
 *------------------------------------------------------------------------*/
byte waiterpass(void)
{
	byte i = 0;

	Clr_Period();
	Disp_Spec_Period();
	waiter_input_flag = 1;
	while(TRUE)
	{
		Clr_Dsp_Data();
		VFDDisplay(Disp_Sale_Waiter_Assign, NOTCLEARD, LEFT);

		if(GetIn() == NG)
			continue;
		GetMainMode();
		if(MainMode != CurrMode)
		{
			waiter_input_flag = 0;
			return (NG);
		}

		switch(InCmd)
		{
			case KD_WAITER:
				for(i = 0; i < Max_Waiter_No; i ++)
				{
					if(lnum == waiter[i].secret)
						break;
				}
				if(i == Max_Waiter_No)
				{
					errorType(ERR_PASS_EXIST);
					continue;
				}
				break;

			case KD_CASH:
				waiter_input_flag = 0;
				return (NG);

			default:
				continue;
		}
		break;
	}
	bakwaiterno = i + 1;
	waiter_input_flag = 0;
	return (OK);
}
#endif /* End VER_RSNT */


/**-----------------------------------------------**
 ** Payment processing                            **
 **-----------------------------------------------**/
void Do_Cash(void)
{
	byte bak_cash_flag;
	byte prn_tbl_det_flag = 0;
	static long lcd_subttl = 0;
	static long lcd_cash = 0;
	static long lcd_change = 0;

    if((Void_flag) || (RM_flag) || (Mul_flag))
   	    {errorType(ERR_KEY_SEQ);return;}

    if(!NewTrans)		/* No transaction */
    {
		if(numcnt)		/* Input with the digit, display the virtual change */
		{
			if(lnum > MAXCASH)
			{
				errorType(ERR_DIGIT_ILLEGAL);
				return;
			}
       		if(lnum < NetAmtBak)
       		{
       			errorType(ERR_DIGIT_ILLEGAL);
       			return;
       		}
       		Clr_Dsp_Data();
       		//Insert_Char('C', 0); 
       		Lcm_Disp_Str(Cash_Change ,LCM_LINE_2 , ALIGN_LEFT, FALSE); 
       		RightDisp(lnum - NetAmtBak, sysflag->sysdots);
       		return;
       	}
       	else				/* Input not with the digit */
       	{
  	        DisTime(); 
  	        return; 
	    }
    }
    if(((InCmd == KD_CASH) || (InCmd == KD_MISC)) && numcnt && lnum == 0)	/* Not support the zero pay */
   	    {errorType(ERR_ZERO_PAY);return;}

	bak_cash_flag = Cash_flag;
	if(sysflag->Subt_PressPrn)			/* This case used when press SUBTTL key, whether or not to print the subttl informatin */
	{
		if(Subt_Prn_Flag == 0)
		{
//   		memcpy(prn_Buf+1,Str_Minus_Line,MAX_PRN_LEN);		/* Print one line */
			xtr_strcpy(prn_Buf+1,Str_Minus_Line);				/* Modified on 2004-04-07 17:26 */
			print();
			prn_Tot_Info_Ex(Var_Str_Subttl, tmpvars.netamt, bak_cash_flag);
   	    }
   	    Subt_Prn_Flag = 0;
    }
    else
    {
//   	memcpy(prn_Buf+1,Str_Minus_Line,MAX_PRN_LEN);		/* Print one line */
		xtr_strcpy(prn_Buf+1,Str_Minus_Line);					/* Modified on 2004-04-07 17:25 */
		print();
		prn_Tot_Info_Ex(Var_Str_Subttl, tmpvars.netamt, bak_cash_flag);
    }
	lcd_subttl = tmpvars.netamt;

    if(!Cash_flag)
    {
        Cash_flag = 1;
        NetAmtBak = tmpvars.netamt;	/* Backup the netamt, for the other used */
        #ifdef	VER_RSNT
        if((work_mode == RSNT) && (currtable != NUL_VLU))
        {
			if((sysflag->prn_tab_pre_posi == 2) && (table_awake_len) && (!Disp_Table_List))			/* 表明以前的挂过的台中有交易项 */
			{
				prn_tbl_pre_item();		/* print the previous item */
			}
        }
        #endif

        Get_TVAT();							/* Calculate the VAT or tax value */
        prn_REG_TVAT();				/* Print the tax */
        prn_Line('-');
        if(CurrMode == REGISTER)		/* Update the report */
        {
        	Update_Sale_Rpt();			/* Update the sale report */
        }
   }

   if(numcnt) /** PayIn Process **/
   {
      if((InCmd == KD_CHECK) || (InCmd == KD_CHARGE))		/* If the pressed key is CHECK or CHARGE, go to the equal input sentences */
         goto EQUNOINPUT;
      if(lnum < tmpvars.netamt)  /* not enough */
      {
         trans.amount = lnum;
         tmpvars.netamt -= trans.amount;
         Update_Cash_Rpt();

			Clr_Dsp_Data();
			Lcm_Disp_Str(Cash_Total ,LCM_LINE_2 ,ALIGN_LEFT , FALSE);
			//Insert_Char('T',0);
         RightDisp(tmpvars.netamt, sysflag->sysdots);
         if(InCmd==KD_CASH)
         {
////				memcpy(prn_Buf+1,Var_Str_Cash,strlen(Var_Str_Cash));
//				xtr_strcpy(prn_Buf+1,Var_Str_Cash);		/* Modified on 2004-04-07 17:25 */
//	         LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
//				prn_Cash_Info_Ex(Var_Str_Cash, strlen(Var_Str_Cash)/2, trans.amount, sysflag->sysdots, 1);
				prn_Cash_Info_Ex(Var_Str_Cash, Get_Spec_Len(Var_Str_Cash), trans.amount, sysflag->sysdots, 1);
         }
         else if((InCmd == KD_PCASH1) || (InCmd == KD_PCASH2) || (InCmd == KD_PCASH3) || (InCmd == KD_PCASH4))
         {
         	prn_Cash_Info(PCASH[PCASH_Idx].desc, Get_Desc_Len(PCASH[PCASH_Idx].desc,MAX_DESC_LEN), trans.amount, sysflag->sysdots, 1);
         }
         else if(InCmd == KD_MISC)
         {
////         	memcpy(prn_Buf+1,Var_Str_Misc,strlen(Var_Str_Misc));
//				xtr_strcpy(prn_Buf+1,Var_Str_Misc);		/* Modified on 2004-04-07 17:24 */
//	         LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
//				prn_Cash_Info_Ex(Var_Str_Misc, strlen(Var_Str_Misc)/2, trans.amount, sysflag->sysdots, 1);
				prn_Cash_Info_Ex(Var_Str_Misc, Get_Spec_Len(Var_Str_Misc), trans.amount, sysflag->sysdots, 1);
         }
         #ifdef FCE_FUNC	/* Support the FCE function */
         else if((InCmd == KD_FCE1) || (InCmd == KD_FCE2) || (InCmd == KD_FCE3) || (InCmd == KD_FCE4) || (InCmd == KD_FCE))
         {
//         	memcpy(prn_Buf+1, fce[FCE_Idx].desc, MAX_DESC_LEN);
//         	LongPrnFmt(bak_fce_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
//				prn_Cash_Info(fce[FCE_Idx].desc, Get_Desc_Len(fce[FCE_Idx].desc, MAX_DESC_LEN), bak_fce_input, sysflag->sysdots, 1);
				prnFCErate(FCE_Idx);
				prn_Cash_Info(Str_Pay, strlen(Str_Pay), bak_fce_input, sysflag->sysdots, 1);
         }
         #endif /* End FCE_FUNC */
//         print();
//         #ifdef FCE_FUNC		/* Support the FCE function */
//         if((InCmd == KD_FCE1) || (InCmd == KD_FCE2) || (InCmd == KD_FCE3) || (InCmd == KD_FCE4) || (InCmd == KD_FCE))
//         	InCmd = KD_NULL;	/* This is for the FCE specific operation */
//         #endif /* End FCE_FUNC */
			lcd_cash = trans.amount;
			lcd_change = 0;
			Lcd_Disp_Cash_Info(lcd_subttl, lcd_cash, lcd_change);		/* Display the cash information */
         return;
      }
      else if(lnum == tmpvars.netamt)		/* Equal */
      {
			goto EQUNOINPUT;
		}
		else // lnum > tmpvars.netamt		/* More than */
      {
	      trans.amount = tmpvars.netamt;
         tmpvars.netamt = tmpvars.netamt - lnum;			/* The negative value */
	      Update_Cash_Rpt();
	      _DrawOn();				/* Open the cash drawer */

			Clr_Dsp_Data();

			Lcm_Disp_Str(Cash_Change,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
			//Insert_Char('C',0);
	      RightDisp(-tmpvars.netamt, sysflag->sysdots);	/* Dispaly the positive value */
	      if(InCmd==KD_CASH)
	      {
////				memcpy(prn_Buf+1,Var_Str_Cash,strlen(Var_Str_Cash));
//				xtr_strcpy(prn_Buf+1,Var_Str_Cash);					/* Modified on 2004-04-07 19:06 */
//		      LongPrnFmt(lnum, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
//				prn_Cash_Info_Ex(Var_Str_Cash, strlen(Var_Str_Cash)/2, lnum, sysflag->sysdots, 1);
				prn_Cash_Info_Ex(Var_Str_Cash, Get_Spec_Len(Var_Str_Cash), lnum, sysflag->sysdots, 1);
	      }
	      else if((InCmd == KD_PCASH1) || (InCmd == KD_PCASH2) || (InCmd == KD_PCASH3) || (InCmd == KD_PCASH4))
	      {
	      	prn_Cash_Info(PCASH[PCASH_Idx].desc, Get_Desc_Len(PCASH[PCASH_Idx].desc,MAX_DESC_LEN), lnum, sysflag->sysdots, 1);
	      }
	      else if(InCmd == KD_MISC)
	      {
////	      	memcpy(prn_Buf+1,Var_Str_Misc,strlen(Var_Str_Misc));
//				xtr_strcpy(prn_Buf+1,Var_Str_Misc);			/* Modified on 2004-04-07 17:24 */
//		      LongPrnFmt(lnum, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
//				prn_Cash_Info_Ex(Var_Str_Misc, strlen(Var_Str_Misc)/2, lnum, sysflag->sysdots, 1);
				prn_Cash_Info_Ex(Var_Str_Misc, Get_Spec_Len(Var_Str_Misc), lnum, sysflag->sysdots, 1);
	      }
         #ifdef FCE_FUNC	/* Support the FCE function */

⌨️ 快捷键说明

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