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

📄 trade.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
                    strcpy(buf,"发票的打印项数已满请结算");
					lcd_disp(3,0,buf);
				    if(trade_info.menu_num>PAGE_ITEM_NUM)
					{
						menu[trade_info.menu_num].quantity=0;
						menu[trade_info.menu_num].money=0;
						menu[trade_info.menu_num].branch=0;
						trade_info.menu_num=PAGE_ITEM_NUM;
						continue;
					}
				}
			}
			if(trade_info.menu_num>PAGE_ITEM_NUM)trade_info.menu_num=PAGE_ITEM_NUM;//不能超过最大的打印项数
			num=0;
			set_value0(numkey,(uint)sizeof(numkey));
            //if(trade_info.menu_num==1)total_moneybuf=0;
            //total_moneybuf+=menu[trade_info.menu_num-1].money;//原价
			//2005.11.26
			if(is_fushu==0xaa)
			{
				trade_info.total_money=0;
				for(i=0;i<trade_info.menu_num;i++)
				{
					trade_info.total_money+=menu[i].money;
				}
			}
			else
				trade_info.total_money+=menu[trade_info.menu_num-1].money;
				
			trade_info.subtotal_money=0;			
			
			//显示
			rlt=disp_trade(ALL_AREA,&menu,"营业中...",MONEY_AREA,&trade_info);
			if(rlt)
			{
				error=rlt;
				continue;
			}
		#ifdef GS
			if(trade_info.menu_num%PAGE_ITEM_NUM==0) //该张发票已满
			{
				if(is_trade==YES)
				{
					//检查发票是否已用完
					if(invoice_roll_info.invoice_curr_no+
						trade_info.menu_num/PAGE_ITEM_NUM==invoice_roll_info.invoice_end_no)
					{
						//显示
						rlt=disp_trade(ALL_AREA,&menu,"票完请先结算",TOTAL_AREA,&trade_info);
						if(rlt)
						{
							error=rlt;
							continue;
						}
						trade_info.trade_status=WAITPAY; //等待结算
						continue;
					}
				}
			}
			else
			{
				#ifdef GS //国税(边输边打印)
					if(customer_name[0]==0) //没有顾客名称
					{
						trade_info.trade_status=WAITPYINPUT //等待拼音输入
						continue;
					}
                    else
					{
						//打印当前项
						rlt=print_invoice_GS(&menu,&record,&class_money,&trade_info,is_trade);
						if(rlt)
						{
							error=rlt;
							continue;
						}
					}
				#endif
			}
		#endif
			trade_info.trade_status=TRADEING; //营业中
			
			continue;
		/*case SUBTOTAL: //小计键/出帐键(C8)/废票(C6)
		     
			 if(trade_info.trade_status==TRADEING)
			 {
				 if( trade_info.menu_num==0 ||
					 menu[trade_info.menu_num-1].money==0 ||
					 numkey[0]!=0)
				 {	
					error=KEY_ERROR;
					continue;
				 }
				
				 trade_info.subtotal_money=0;
				 if(trade_info.subtotal_menunum==0)  //第一次小计
					 i=0;
				 else
					 i=trade_info.subtotal_menuno+trade_info.subtotal_menunum;
				 trade_info.subtotal_menuno=i;
				  trade_info.subtotal_menunum=0;
				 for(;i<trade_info.menu_num;i++)
				 {
					trade_info.subtotal_money+=menu[i].money;
					trade_info.subtotal_menunum++; //本次小计菜单数
				 }
				 //显示
				sprintf(buf,"小计%lu.%02u",trade_info.subtotal_money/100,
					(uint)(trade_info.subtotal_money%100));
				rlt=disp_trade(ALL_AREA,&menu,buf,INPUT_AREA,&trade_info);
				if(rlt)
				{
					error=rlt;
					continue;
				}
			 }
			 else
			#ifdef C8_VER
			if(trade_info.trade_status==READYTRADE)//出帐键
			{
				if(numkey[0]==0 || num==0)
				{
					error=KEY_ERROR;
					continue;
				}
				strcpy(buf,"出帐...");
				clear_lcd(3,1);
				lcd_disp(3,0,buf);
				if(is_trade==YES)
				{
					//收款员报表更新到EEPROM
					if(read_eeprom(RECEIVER_ADDR+(trade_info.receiver_no-1)*(uint)sizeof(receiver_report),
						(uint)sizeof(receiver_report),&receiver_report))
						return(READ_EEPROM_FAIL);
					if(lrcdata((uint)sizeof(receiver_report)-1,0,&receiver_report))
						return(LRC_ERROR);
					receiver_report.not_sell_defray+=num;
					receiver_report.lrc=lrcdata((uint)sizeof(receiver_report)-1,1,
						&receiver_report);
					if(write_eeprom(RECEIVER_ADDR+
						(trade_info.receiver_no-1)*(uint)sizeof(receiver_report),
						(uint)sizeof(receiver_report),&receiver_report))
					{
						error=WRITE_EEPROM_FAIL;
						continue;
					}
					//日报表
					if(read_eeprom(DAY_ADDR,(uint)sizeof(day_report),&day_report))
						return(READ_EEPROM_FAIL);
					if(day_report.lrc!=lrcdata((uint)sizeof(day_report)-1,1,&day_report))
					//if(lrcdata((uint)sizeof(day_report)-1,0,&day_report))
						return(LRC_ERROR);
					//月报表
					if(read_eeprom(MONTH_ADDR,(uint)sizeof(month_report),&month_report))
						return(READ_EEPROM_FAIL);
					if(lrcdata((uint)sizeof(month_report)-1,0,&month_report))
						return(LRC_ERROR);
					//日报表更新到EEPROM
					day_report.not_sell_defray+=num;
					day_report.lrc=lrcdata((uint)sizeof(day_report)-1,1,&day_report);
					if(write_eeprom(DAY_ADDR,(uint)sizeof(day_report),&day_report))
					{
						error=WRITE_EEPROM_FAIL;
						continue;
					}
					//月报表更新到EEPROM
					month_report.not_sell_defray+=num;
					month_report.lrc=lrcdata((uint)sizeof(month_report)-1,1,&month_report);
					if(write_eeprom(MONTH_ADDR,(uint)sizeof(month_report),&month_report))
					{
						error=WRITE_EEPROM_FAIL;
						continue;
					}
				}
				num=0;
				set_value0(numkey,sizeof(numkey));
				trade_info.trade_status=WAITTRADE;first=1;
			}
			#endif
			/*
			#else//废票(C6)
			if(trade_info.trade_status==READYTRADE)
			{				
			  //num为废票的截止号,该票号做废票处理,添加笔交易记录
			 tmp=invoice_roll_info.invoice_curr_no;
			  if(num==0 || num<tmp ||
				num>invoice_roll_info.invoice_end_no)
			  {
				//无效票号
				error=INVO_NO_ERROR;
				continue;
			  }
			  sprintf(buf,"%lu",num);
			  if(strlen(buf)>MAX_INVOICE_LENGTH)
			  {
				//无效票号
				error=INVO_NO_ERROR;
				continue;
			  }
			  //废连续票号
			  for(i=0;i+tmp<=num;i++)
			  {
				trade_info.menu_num=0;
				trade_info.invoice_type=RESCISSORY_INVOICE;
				trade_info.total_money=0;
				trade_info.trade_end=1; //本次交易结束
				trade_info.invoice_no=i+tmp;
				#ifdef DS
					rlt=save_data_DS(&menu,&trade_info,is_trade);
				#endif
				if(rlt)
				{
					error=rlt;
					continue;
				}
			  }
			  num=0;
			  set_value0(numkey,(uint)sizeof(numkey));
			  trade_info.trade_status=WAITTRADE;first=1;
			  if(is_trade==YES)
			  {
				//从税控卡获得发票卷的信息
				rlt=get_invoice_roll_info(&invoice_roll_info);
				if(rlt)
					return(rlt);
			  }
			}
			
			
			#endif
            
			else
			{
				error=KEY_ERROR;
				continue;
			}*/
				/*if(trade_info.trade_status!=WAITPYINPUT ||
					py[0]=0)
				{
					error=KEY_ERROR;
					continue;
				}
				//根据拼音查汉字
				trade_info.trade_status=WAITHZSELECT;*/
			 
			 //continue;
		case TOTAL: //合计键
		    
			if(trade_info.trade_status!=TRADEING ||
				trade_info.menu_num==0 || 
				menu[trade_info.menu_num-1].money==0 ||
				numkey[0]!=0)
			{
				error=KEY_ERROR;
				continue;
			}
			//显示
			rlt=disp_trade(ALL_AREA,&menu,"等待结算...",MONEY_AREA,&trade_info);//disp_trade(ALL_AREA,&menu,"等待结算...",TOTAL_AREA,&trade_info);
			if(rlt)
			{
				error=rlt;
				continue;
			}
            
			trade_info.trade_status=WAITPAY;
            //total_moneybuf=trade_info.total_money;
			continue;
/******************************************************************/
		case PLU: //PLU键/计算器键
			#ifdef CALCULATION//计算器功能
			if(trade_info.trade_status==WAITTRADE)//计算器键
			{
				calculate();
				first=1;
				continue;
			}
			#endif
			if(num==0 || (num>g_max_plu_no&&(!input_plu_barcode)))//num作为PLU号
			{
				error=KEY_ERROR;
				continue;
			}
            if((input_plu_barcode)&&(!in_plubarcode_hand))
			 {
			  i=strlen(numkey);
			  strncpy(buf,numkey,i);
			  buf[i]=0;
			  num=0;
			  set_value0(numkey,(uint)sizeof(numkey));
			  in_plubarcode_hand=1;
			  key_tmp=0;
              trade_info.trade_status=WAITTRADE;
			  continue;
			  }
			else {in_plubarcode_hand=0;}
			//num作为PLU号
			//send_str(30,testbuf);
			
			plu_no=num;
			num=0;
			set_value0(numkey,(uint)sizeof(numkey));
			goto plu_branch_comm;
		case BIT:
		    if(trade_info.trade_status==WAITPAY ||
				trade_info.trade_status==HZSELECTED)//辅币键
			{
				if(numkey[0]!=0 && num==0 || num>4 || 
					trade_info.pay_way>0)
				{
					error=KEY_ERROR;
					continue;
				}
				if(num==0) //没输入辅币代号(1-4)
					num=1;
				trade_info.pay_way=num;
				trade_info.bit_money_no=num;
				sprintf(buf,"辅币%u",(uint)num);
				rlt=disp_trade(INPUT_AREA,menu,buf,INPUT_AREA,&trade_info);
				if(rlt)
				{
					error=rlt;
					continue;
				}
				num=0;
				set_value0(numkey,sizeof(numkey));
				continue;
			}
		  else
		     {
					error=KEY_ERROR;
					continue;
				}
			 break;
		case BRANCH: //部门/辅币键
		    //send_char(trade_info.trade_status);
			/*if(trade_info.trade_status==WAITPAY ||
				trade_info.trade_status==HZSELECTED)//辅币键
			{
				if(numkey[0]!=0 && num==0 || num>4 || 
					trade_info.pay_way>0)
				{
					error=KEY_ERROR;
					continue;
				}
				if(num==0) //没输入辅币代号(1-4)
					num=1;
				trade_info.pay_way=num;
				trade_info.bit_money_no=num;
				sprintf(buf,"辅币%u",(uint)num);
				rlt=disp_trade(INPUT_AREA,menu,buf,INPUT_AREA,&trade_info);
				if(rlt)
				{
					error=rlt;
					continue;
				}
				num=0;
				set_value0(numkey,sizeof(numkey));
				continue;
			}
			*/
			//部门键
			if(numkey[0]==0 || num==0 || num >MAX_BRANCH_NUM)
			{
			    //send_char(0xaa);
				error=KEY_ERROR;
				continue;
			}
			branch_no=num;
			num=0;
			set_value0(numkey,(uint)sizeof(numkey));
			goto plu_branch_comm;
		case BRANCH1:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=1;
			 }
			 else
			 {
				branch_no=1;
			 }
			 goto plu_branch_comm;
		case BRANCH2:
		//send_char(0xaa);
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=2;
			 }
			 else
			 {
				branch_no=2;
			 }
			 goto plu_branch_comm;
		case BRANCH3:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=3;
			 }
			 else
			 {
				branch_no=3;
			 }
			 goto plu_branch_comm;
		case BRANCH4:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=4;
			 }
			 else
			 {
				branch_no=4;
			 }
			 goto plu_branch_comm;
		case BRANCH5:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=5;
			 }
			 else
			 {
				branch_no=5;
			 }
			 goto plu_branch_comm;
		case BRANCH6:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=6;
			 }
			 else
			 {
				branch_no=6;
			 }
			 goto plu_branch_comm;
		case BRANCH7:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=7;
			 }
			 else
			 {
				branch_no=7;
			 }
			 goto plu_branch_comm;
		case BRANCH8:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=8;
			 }
			 else
			 {
				branch_no=8;
			 }
			 goto plu_branch_comm;
		case BRANCH9:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=9;
			 }
			 else
			 {
				branch_no=9;
			 }
			 goto plu_branch_comm;
			 
		case NS: //开钱箱键
			OpenMomneyBox();
			continue;
			 			 
			 
		#ifdef C8_VER
		
		case BRANCH10:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=10;
			 }
			 else
			 {
				branch_no=10;
			 }
			 goto plu_branch_comm;
		case BRANCH11:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=11;
			 }
			 else
			 {
				branch_no=11;
			 }
			 goto plu_branch_comm;
		case BRANCH12:
			 if(g_branch_plu_switch==1) //PLU
			 {
				plu_no=12;
			 }
			 else
			 {
				branch_no=12;
			 }
			 goto plu_branch_comm;
		#endif
		
		plu_branch_comm: //PLU、部门的公共处理代码
			if(!(trade_info.trade_status==WAITTRADE||
				 trade_info.trade_status==READYTRADE ||
			     trade_info.trade_status==TRADEING))
			{
				error=KEY_ERROR;
				continue;
			}
			//if(branch_no!=1)dis_area=1;
			if(trade_info.menu_num==0 || menu[trade_info.menu_num-1].money)
			//上一个商品已经有金额或是第一笔,若为PLU且该商品没有PLU号则开始一个新的商品,若为部门该更改部门
			{

⌨️ 快捷键说明

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