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

📄 sale.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 4 页
字号:
         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();
//	      prn_Adj(Var_Str_Change,-tmpvars.netamt,sysflag->sysdots,RPOSI);			/* Print it with positive value */
	      Prn_Adj_Ex(Var_Str_Change,-tmpvars.netamt,sysflag->sysdots,RPOSI,DESC_NEW);			/* Print it with positive value */
			lcd_cash = lnum;
			lcd_change = -tmpvars.netamt;
			Lcd_Disp_Cash_Info(lcd_subttl, lcd_cash, lcd_change);		/* Display the cash information */
	   }
   }
   else
   {
EQUNOINPUT:
      trans.amount = tmpvars.netamt;
      tmpvars.netamt = 0;
      Update_Cash_Rpt();
      _DrawOn();

		Clr_Dsp_Data();
      if(numcnt && (InCmd != KD_CHARGE) && (InCmd != KD_CHECK))
      {
			Lcm_Disp_Str(Cash_Change,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
			//Insert_Char('C',0);
         RightDisp(0, sysflag->sysdots);
      }
      else
      {
			Lcm_Disp_Str(Cash_Total,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
			//Insert_Char('T',0);
         RightDisp(trans.amount, 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:23 */
//	      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_CHECK)
      {
//         memcpy(prn_Buf+1,check[Check_Idx],MAX_DESC_LEN);
//	      LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
			prn_Cash_Info(check[Check_Idx], Get_Desc_Len(check[Check_Idx], MAX_DESC_LEN), trans.amount, sysflag->sysdots, 1);
      }
      else if(InCmd == KD_CHARGE)
      {
//         memcpy(prn_Buf+1,charge[Charge_Idx],MAX_DESC_LEN);
//	      LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
			prn_Cash_Info(charge[Charge_Idx], Get_Desc_Len(charge[Charge_Idx], 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);
//	      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();
      if(numcnt && (InCmd != KD_CHARGE) && (InCmd != KD_CHECK))
//         Prn_Adj_Ex(Var_Str_Change,0L,sysflag->sysdots,RPOSI);
         Prn_Adj_Ex(Var_Str_Change,0L,sysflag->sysdots,RPOSI,DESC_NEW);
		lcd_cash = trans.amount;
		lcd_change = 0;
		Lcd_Disp_Cash_Info(lcd_subttl, lcd_cash, lcd_change);		/* Display the cash information */

   }
	#ifdef ELEC_JRNL		/* Support the electronic journal function */
	if((CurrMode == REGISTER) && (sysflag->Log_Atv_Flag))
		Update_Elec_Jrnl();			/* Update the electronic journal function */
	#endif /* End ELEC_JRNL */
   Update_Hour_Rpt();		/* Update the hour report */
	Update_Clerk_Rpt();	/* Update the clerk report */
	prn_Tot_Qty(transbuff, TnsBf_Len);				/* Print the total quantity */
   prn_Stamp();				/* Print the sale stamp */

   #ifdef VER_RSNT			/* Support the Restaurant function */
   if((work_mode == RSNT) && (currtable != NUL_VLU))
   {
   	if(KP_Prn_Head == TRUE)
   	{
   		Ack_Send_KP = 1;
   		prn_KP_Stamp();
   	}
		Clr_Table(currtable - 1);
		currtable = NUL_VLU;
		prn_tbl_det_flag = 1;
   }
   #endif /* End VER_RSNT */
	#ifdef RCPT_REPRN			/* Support the receipt reprint function */
	memcpy(BakTnsBf, transbuff, MAX_TNSBF_LEN*sizeof(TRANSBUFFDEF));
	BakTnsBf_Len = TnsBf_Len;
	#endif /* End RCPT_REPRN */
//	#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 */

   InitTrans();
   continue_sale_flag=0x55;
   Lcd_Clr_Text_Btn(BUF_ID_LCD_TEXT, 0);
   Lcd_Clr_Text_Btn(BUF_ID_TL_SUB, 0);

	// Check the total cash in drawer is override
	#ifdef	VER_RSNT			/* Support the restaurant function */
	if((prn_tbl_det_flag) && (sysflag->prn_table_detail))		/* Reprint the receipt */
	{
		Rcpt_RePrn_Cnt ++;
		RePrn_Rcpt(0);
	}
	#endif /* End VER_RSNT */
	if(report.CashTotal >(sysflag->top_cash_ttl))
	{
		errorType(ERR_CID);
	}

    #if COUNTRY == HONGKONG
    Lcd_Init_Sys_ID(SYS_ID_SALE_MAIN);      // 说明: 这是一种取巧的做法,在正式版本中不能够采用这种形式
    #endif
}


#ifdef FCE_FUNC		/* Suppor the FCE function */
/**********************************************************/
void Do_FCE(void)
{
	byte				tmp_idx;
	word				bak_incmd;
	long				tmp;
	static long		bak_fce_crg;			/* Backup the FCE charge */
	byte				len;

   if((Void_flag) || (RM_flag) || (Mul_flag))
   	{errorType(ERR_KEY_SEQ);return;}
   if(!NewTrans)		/* No new transaction, error */
   	{errorType(ERR_SALE_FNSH);return;}
   if(fce[FCE_Idx].rate == 0)
   	{errorType(ERR_FCE_RATE_ZERO);return;}

	bak_incmd = InCmd;
	while(TRUE)
	{
		if(fce[FCE_Idx].flag == 0)		/* rate */
			tmp = Sale_Mul(tmpvars.netamt, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
		else
			tmp = Sale_Div(tmpvars.netamt, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
		if((tmp == MIN_SIGNED_LONG) || (tmp > MAX_FCE_XCH) || (tmp < 0))
		{
			errorType(ERR_DIGIT_ILLEGAL);
			return;
		}
		Clr_Dsp_Data();
		Lcm_Disp_Desc( fce[FCE_Idx].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
//		disp_Char_Str(Str_FCE_Cash, 0);
//		len = strlen(Str_FCE_Cash);
		len = 0;
		Insert_Num(FCE_Idx+1, len);
		Insert_Char('=', len + 1);
		RightDisp(tmp, sysflag->sysdots);

		if(GetIn() == NG)
			continue;
		GetMainMode();						/* 在目前的情况下面, 这种情况不会发生 */
		if(MainMode != CurrMode)
		{
			 Clr_Dsp_Data();
			 RightDisp(0, sysflag->sysdots);
			 return;
		}

		switch(InCmd)
		{
			case	KD_CLEAR:				/* Clear the just input data */
				break;

			case	KD_FCE1:
			case	KD_FCE2:
			case	KD_FCE3:
			case	KD_FCE4:
	      	if(numcnt)
	      	{
	      		errorType(ERR_DIGIT_ILLEGAL);
	      		break;
	      	}
	      	tmp_idx = getFCE();
	      	if(fce[tmp_idx].rate == 0)
	      		{errorType(ERR_FCE_RATE_ZERO);break;}
	      	FCE_Idx = tmp_idx;
				break;

			case	KD_FCE:
	      	if(numcnt)
	      	{
	      		if((lnum > MAX_FCE_CNT) || (lnum == 0))
	      		{
	      			errorType(ERR_DIGIT_ILLEGAL);
	      			break;
	      		}
	      		tmp_idx = getFCE();
	      	}
	      	else
	      	{
//	      		tmp_idx = 0;
					tmp_idx = (FCE_Idx+1)%MAX_FCE_CNT;
	      	}
			   if(fce[tmp_idx].rate == 0)
			   	{errorType(ERR_FCE_RATE_ZERO);break;}
			   FCE_Idx = tmp_idx;
				break;

//			case	KD_SUBTTL:				/* Return the FCE mode */
//				Do_Subttl();
//				return;
//
			case	KD_CASH:
				if(numcnt)
				{
					if(lnum == 0)
					{
						errorType(ERR_DIGIT_ILLEGAL);
						break;
					}
					bak_fce_crg = tmp;
					if(fce[FCE_Idx].flag == 0)		/* rate */
						tmp = Sale_Div(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
					else
						tmp = Sale_Mul(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
					if((tmp == MIN_SIGNED_LONG) || (tmp > MAXCASH) || (tmp < 0))
					{
						errorType(ERR_FCE_OVER);
						break;
					}
					bak_fce_input = lnum;
					if(bak_fce_input == bak_fce_crg)		/* Equal */
						lnum = tmpvars.netamt;
					else
						lnum = tmp;
				}
				else							/* 直接按下了CASH键, 表明直接以显示的价格进行付款 */
				{
					bak_fce_input = tmp;
					lnum = tmpvars.netamt;
				}
				InCmd = bak_incmd;			/* Revert the command type */
				Do_Cash();
				return;

			default:
				Clr_Dsp_Data();
				RightDisp(0, sysflag->sysdots);
				return;
		}
	}
}

/* Exchange the foreign currency to the local currency */
void	Do_XCH(void)
{
	byte	break_flag = 0;
	long	tmp = 0;

   if((Void_flag) || (RM_flag) || (Mul_flag))
   	{errorType(ERR_KEY_SEQ);return;}
   if(fce[FCE_Idx].rate == 0)
   	{errorType(ERR_FCE_RATE_ZERO);return;}
	while(TRUE)
	{
		Clr_Dsp_Data();
		Lcm_Disp_Str( Str_Xch_Amount, LCM_LINE_2 ,ALIGN_LEFT, FALSE);
		//Insert_Num(FCE_Idx+1, 0);				/* Dispaly the FCE index number */
		//disp_Char_Str(Disp_Sale_XCH, 1);		/* The exchange flag */
		Insert_Char('F' ,0);
		Insert_Char('C' ,1);
		Insert_Char('E' ,2);
		Insert_Num(FCE_Idx+1, 0+3);
		Insert_Char('=', 1+3);
		RightDisp(0, sysflag->sysdots);

		if(GetIn() == NG)		/* Get a item from keyboard */
			continue;
		GetMainMode();
		if(MainMode != CurrMode)
			return;

		switch(InCmd)
		{
			case	KD_CLEAR:
				break;

			case	KD_CASH:
				if(numcnt)
				{
					if(fce[FCE_Idx].flag == 0)		/* rate */
						tmp = Sale_Div(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
					else // CE_Idx].flag == 1)		/* 1/rate */
						tmp = Sale_Mul(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
					if((tmp == MIN_SIGNED_LONG) || (tmp > MAX_FCE_XCH) || (tmp < 0))
					{
						errorType(ERR_FCE_XCH_BIG);
						break;
					}
					Clr_Dsp_Data();
					Lcm_Disp_Desc( fce[FCE_Idx].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
					//Insert_Num(FCE_Idx+1, 0);
					//disp_Char_Str(Disp_Sale_XCH, 1);
					Lcm_Disp_Str( Str_Xch_Local, LCM_LINE_1, ALIGN_LEFT, FALSE);
					RightDisp(tmp, sysflag->sysdots);
					break_flag = 1;
				}
				else
				{
					Clr_Dsp_Data();
					RightDisp(0, sysflag->sysdots);
				}
				break;

			default:
				Clr_Dsp_Data();
				RightDisp(0, sysflag->sysdots);
				return;
		}
		if(break_flag)
			break;
	}
	if(GetKey() == KD_SUBTTL)
	{
		report.CashTotal -= tmp;					/* Update the report */
		PTD_report.CashTotal -= tmp;
		fce[FCE_Idx].count ++;
		fce[FCE_Idx].PTD_count ++;
		fce[FCE_Idx].ttlindwr += lnum;
		fce[FCE_Idx].PTD_ttlindwr += lnum;
		Set_Rpt_Flag(RPT_FULL_DAILY);
		Set_Rpt_Flag(RPT_FULL_PTD);

	   _DrawOn();
	   Clr_Dsp_Data();
		Insert_Num(FCE_Idx+1, 0);
		disp_Char_Str(Disp_Sale_XCH, 1);
		RightDisp(tmp, sysflag->sysdots);
		Head_Prn_Flag = 0;				/* Not print the flush print head */
		xtr_strcpy(prn_Buf+1, Str_FCE_XCH);
		print();
		prnFCErate(FCE_Idx);
		LongPrnFmt(lnum, sysflag->sysdots, 1, LEFTFLUSH);
		xtr_strcpy(prn_Buf+14, Str_FCE_Direct);
		print();
		LongPrnFmt(tmp, sysflag->sysdots, RPOSI, RIGHTFLUSH);
		print();
	   prn_Line('-');
	   prn_Stamp();
	   #ifdef	RCPT_REPRN			/* Support the receipt reprint function */
	   Rcpt_RePrn_Cnt = 0;
	   #endif /* End RCPT_REPRN */
	}
	else
	{
		Clr_Dsp_Data();
		RightDisp(0, sysflag->sysdots);
	}
}
#endif /* End FCE_FUNC */

⌨️ 快捷键说明

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