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

📄 query.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
/*-------------------------------------------------------------
功能:查询--商业报表的打印查询和打印清机
说明:符合国家标准GB18240.1-2003和GB18240.2-2003的税控机软件
日期:2003年6月12日
---------------------------------------------------------------*/
#include "include.h"

#define    yisectorqu               7282  //一扇区能写审计记录的条数


uchar    fau_Affairs ;

#ifdef C8_VER
	uchar print_trade_rpt( uchar function);
#endif
/*==================================================================
函数功能:商业报表的打印查询和打印清机
入口参数:mach_initialed--机器是否已初始化
出口参数:
返回值:   ==POWER_OFF,则表示断电,返回
	   ==0,ok
	   ==其他,错误
全局变量:
编制人:     日期:2003-06-18
==================================================================*/
uchar query(uchar mach_initialed)
{
	////////////////////////1、变量说明区///////////////////////////////
	//======================1.1 菜单级变量==============================//	
	uchar switch_mode,layer;//方式锁位置,菜单级别
	uchar last_line,cur_line;//上一级菜单项所在行,当前菜单项所在行(都从1开始)
	uchar menu_num;//某一级中一个子菜单项数
	uchar key;//键值
	uchar over_mode;//某项菜单选择操作结束方式
	#define  NO_CHOOSED	0x0	//未选定任何菜单
	#define  IS_CHOOSED	0x1	//选定某项菜单
	#define  EXIT_CHOOSE	0xfe	//返回上一级菜单
	uchar menu_L1_QY[]={QUERY,0};
	uchar menu_L2_QY[3]={BUSINESS_RPT, BUSINESS_RPT_DEL, 0};//1商业报表(打印)2商业报表(打印并清除)
	#define ITEM_NUM_L2	sizeof(menu_L2_QY)//第2级菜单项数
	//uchar menu_Lmax_QY[ITEM_NUM_L2-1][8]=
	#ifdef C6_VER
	uchar menu_Lmax_QY[ITEM_NUM_L2-1][7]=
	{
		//商业报表(打印)
		{BRANCH_REPORT, PLU_REPORT, PLU_SELL_REPORT, 
		DAY_REPORT, MONTH_REPORT, RECEIVER_REPORT, 0},
     
		//商业报表(打印并清除)
		{BRANCH_REPORT_DEL, PLU_SELL_REPORT_DEL, DAY_REPORT_DEL, 
		MONTH_REPORT_DEL, RECEIVER_REPORT_DEL, 0}
	};  	
	#else
	uchar menu_Lmax_QY[ITEM_NUM_L2-1][8]=
	{
		//商业报表(打印)
		{BRANCH_REPORT, PLU_REPORT, PLU_SELL_REPORT, 
		DAY_REPORT, MONTH_REPORT, RECEIVER_REPORT, TRADE_REPORT, 0},
    
		//商业报表(打印并清除)
		{BRANCH_REPORT_DEL, PLU_SELL_REPORT_DEL, DAY_REPORT_DEL, 
		MONTH_REPORT_DEL, RECEIVER_REPORT_DEL, TRADE_REPORT_DEL, 0}
	}; 
	#endif
	//===================1.2 功能级变量==================================//
	uchar function_no;//功能号
	uchar result;
	uchar buf[50];
	uint plu_start,plu_end;
	uchar is_first_enter;//是否第一次进入当前功能菜单
  
	//////////////2、代码执行区///////////////////////////////
	if(!mach_initialed) return 0;
	//============2.1 操作菜单,选择某个设置功能=================//
	//------------2.1.1 初始化----------//
	switch_mode=QUERY;//查询档
	layer=SND_LAYER_MENU;//初始为第一级菜单
	cur_line=1;//初始为第一行
	last_line=1; 
	//display_menu_page(switch_mode,layer,menu_L1_QY,cur_line);
	menu_num=strlen(menu_L1_QY);
	is_first_enter=1;
	//------------2.1.2 等待按键,选择菜单功能----------//
	while(1)
	{
		openbacklight();
		if(low_pwr) return POWER_OFF;//如果断电了,则exit 
		key = get_key();
		if(!key) //未按下任何键
		{
			if(layer==FST_LAYER_MENU) return 0;//此时若在第1级菜单,则返回主程序,可切换方式锁位置
			if(!is_first_enter) continue;//等待按键
			else is_first_enter=0;
		}
		// else beep(50);
		if(key==PAPER1) //若按下[走纸]键,则走纸1行
		{ 
		#ifdef C6_VER
			Fast_feed_paper_hang(120);// feed_on_line(1);
		#endif
		continue;
		}
    
	    #ifdef HYS620
	    else if(key==BACK_PAPER) //响应C8上的退纸键
	    { 
			back_on_dot(120);
			continue;
	    }
		#endif
    
		else 
			over_mode=choose_menu_line(key,menu_num,&cur_line);//否则选择菜单项,当前行将移到新位置
    switch(over_mode)
    {
      case IS_CHOOSED://若选定某项菜单,
        if(layer<MAX_LAYER_MENU)//在最后菜单级之前,则到其对应下一级的首行开始反显页面 
        {
          last_line=cur_line;//保存此级当前项所在行位置
          cur_line=1;//下一级的首行
        }
        else//若此时为最后菜单级时,则取得相应功能号
          function_no=menu_Lmax_QY[last_line-1][cur_line-1];
        layer++;//指到其对应下一级
      break;
      case EXIT_CHOOSE://若选择返回  
        if(layer>FST_LAYER_MENU)//在第1级菜单之前,则回到其对应的上一级菜单项反显 
        {
          layer--;
          cur_line=last_line;
          if(layer==SND_LAYER_MENU) last_line=1;
        }
      break;
      default://未选定,则继续等待按键
      break;
    }    
    //-------------2.1.3 显示当前菜单级页面-----------------------//
    switch(layer)
    {
   
      case SND_LAYER_MENU:
        display_menu_page(switch_mode,layer,menu_L2_QY,cur_line);
        menu_num=strlen(menu_L2_QY);
      break;
      case MAX_LAYER_MENU:
        display_menu_page(switch_mode,layer,menu_Lmax_QY[last_line-1],cur_line);
        menu_num=strlen(menu_Lmax_QY[last_line-1]);
      break;
      default://若到达功能级,则转到功能设置
      break;
    }
    //===============2.2 功能设置=========================//
    if(layer==FUNCTION_LAYER)//若到达功能级 
    {
		//-----------2.2.1 执行相应功能------------//
		//----------提示当前功能--------------//
		clear_lcd(0,4);
		get_menu_name_qy(MAX_LAYER_MENU,function_no,buf);
		lcd_disp(0,0,buf);
		switch(function_no)
		{
      	#ifdef QY_BRANCH_RPT
        //-------------部门报表-----------//
        case BRANCH_REPORT:
        case BRANCH_REPORT_DEL:
		lcd_disp(0,0,buf);
		//----------提示下一步操作---------------//
		strcpy(buf,"请先换上普通打印纸!!!\r");
		lcd_disp(1,0,buf);
		con_disp(1,0,strlen(buf),buf);
		//----------等待按键,确认则打印---------------//
		result=wait_usal_key(0);
		clear_lcd(1,1);
		if(result==POWER_OFF) return POWER_OFF;
		else if(result==CANCEL) break;
		strcpy(buf,"打印中,请等候...");
		lcd_disp(1,0,buf);
		result=print_branch_rpt(function_no);
		clear_lcd(1,1);
		break;
		#endif
	#ifdef QY_PLU_RPT
	//-------------plu查询报表-----------//
        case PLU_REPORT:
         lcd_disp(0,0,buf);
          //----------提示下一步操作---------------//
          strcpy(buf,"请先换上普通打印纸!!!\r");
          lcd_disp(1,0,buf);
          con_disp(1,0,strlen(buf),buf);
	  //----------等待按键,确认则打印---------------//
  	  result=wait_usal_key(0);
  	  clear_lcd(1,1);
  	  if(result==POWER_OFF) return POWER_OFF;
  	  else if(result==CANCEL) break; 
          //--------取得起止plu号--------------------//
          result=get_plu_no_range(&plu_start,&plu_end);
          if(result==POWER_OFF) return result;//断电,返回 
          if(result==CANCEL) break;
          //----------打印报表-------------//
          strcpy(buf,"打印中,请等候...");
          lcd_disp(2,0,buf);
          result=print_plu_rpt(plu_start,plu_end);
          clear_lcd(2,1);
	break;	
	//-------------plu销售查询报表-----------//
        case PLU_SELL_REPORT:
        case PLU_SELL_REPORT_DEL:
        
          lcd_disp(0,0,buf);
          //----------提示下一步操作---------------//
          strcpy(buf,"请先换上普通打印纸!!!\r");
          lcd_disp(1,0,buf);
          con_disp(1,0,strlen(buf),buf);
	  //----------等待按键,确认则打印---------------//
  	  result=wait_usal_key(0);
  	  clear_lcd(1,1);
  	  if(result==POWER_OFF) return POWER_OFF;
  	  else if(result==CANCEL) break; 
  	  //--------取得起止plu号--------------------//
          result=get_plu_no_range(&plu_start,&plu_end);
          if(result==POWER_OFF) return result;//断电,返回 
          if(result==CANCEL) break;
          //----------打印报表-------------//
          strcpy(buf,"打印中,请等候...");
          lcd_disp(2,0,buf);
	  result=print_plu_trade_rpt(function_no,plu_start,plu_end);
	  clear_lcd(2,1);
	break;
	#endif
	#ifdef QY_DAY_RPT
	//-------------日报表-----------//
        case DAY_REPORT:
        case DAY_REPORT_DEL:
         lcd_disp(0,0,buf);
          //----------提示下一步操作---------------//
          strcpy(buf,"请先换上普通打印纸!!!\r");
          lcd_disp(1,0,buf);
          con_disp(1,0,strlen(buf),buf);
	  //----------等待按键,确认则打印---------------//
  	  result=wait_usal_key(0);
  	  clear_lcd(1,1);
  	  if(result==POWER_OFF) return POWER_OFF;
  	  else if(result==CANCEL) break; 
          strcpy(buf,"打印中,请等候...");
          lcd_disp(1,0,buf);
	  result=print_day_rpt(function_no);
	  clear_lcd(1,1);
	break;	
	#endif
	#ifdef QY_MONTH_RPT
	//-------------月报表-----------//
        case MONTH_REPORT:
        case MONTH_REPORT_DEL:
         lcd_disp(0,0,buf);
          //----------提示下一步操作---------------//
          strcpy(buf,"请先换上普通打印纸!!!\r");
          lcd_disp(1,0,buf);
          con_disp(1,0,strlen(buf),buf);
	  //----------等待按键,确认则打印---------------//
  	  result=wait_usal_key(0);
  	  clear_lcd(1,1);
  	  if(result==POWER_OFF) return POWER_OFF;
  	  else if(result==CANCEL) break; 
          strcpy(buf,"打印中,请等候...");
          lcd_disp(1,0,buf);
	  result=print_month_rpt(function_no);
	  clear_lcd(1,1);
	break;
	#endif
	#ifdef QY_RECEIVER_RPT
	//-----------收款员报表-----------//
        case RECEIVER_REPORT:
        case RECEIVER_REPORT_DEL:
         lcd_disp(0,0,buf);
          //----------提示下一步操作---------------//
          strcpy(buf,"请先换上普通打印纸!!!\r");
          lcd_disp(1,0,buf);
          con_disp(1,0,strlen(buf),buf);
	  //----------等待按键,确认则打印---------------//
  	  result=wait_usal_key(0);
  	  clear_lcd(1,1);
  	  if(result==POWER_OFF) return POWER_OFF;
  	  else if(result==CANCEL) break; 
          strcpy(buf,"打印中,请等候...");
          lcd_disp(1,0,buf);
	  result=print_receiver_rpt(function_no);
	  clear_lcd(1,1);
	break;
	#endif
	#ifdef C8_VER//若是c8机器
	#ifdef QY_TRADE_RPT
	//-----------营业员报表-----------//
        case TRADE_REPORT:
        case TRADE_REPORT_DEL:
         lcd_disp(0,0,buf);
          //----------提示下一步操作---------------//
          strcpy(buf,"请先换上普通打印纸!!!\r");
          lcd_disp(1,0,buf);
          con_disp(1,0,strlen(buf),buf);
	  //----------等待按键,确认则打印---------------//
  	  result=wait_usal_key(0);
  	  clear_lcd(1,1);
  	  if(result==POWER_OFF) return POWER_OFF;
  	  else if(result==CANCEL) break; 
          strcpy(buf,"打印中,请等候...");
          lcd_disp(1,0,buf);
	  result=print_trade_rpt(function_no);
	  clear_lcd(1,1);
	break;
	#endif
	#endif
        default:
        break;
      }//end of "switch(function_no)"	
    //--------2.2.2 提示操作结果----------//
      catch_error_display(result,0);
      //--------2.2.3 回到上一级菜单----------//
      
      
      /*while(1)
      {//等待按键,直到按下"取消"键
        if(low_pwr) return POWER_OFF;//如果断电了,则exit 
    	key = get_key();
    	if(key) beep(100);
        if(key==VOID) break;
      }
      //按下"取消"键,回到上一级菜单*/
      //操作结果完毕后直接退回上一级菜单
      delayms(3000);
      Last_line=0xff;
	  dismode=0;
      layer=MAX_LAYER_MENU;
      display_menu_page(switch_mode,layer,menu_Lmax_QY[last_line-1],cur_line);
    }//end of "FUNCTION_LAYER"
  }//end of "while(1)"   
}//end of "query"


#ifdef QY_PLU_RPT
/*==================================================================
函数功能:取得PLU号范围(模式:输入数+确认+输入数+确认)
入口参数:
出口参数:
返回值:   ==POWER_OFF,则表示断电,返回
	   ==OK,成功
	   ==CANCEL,取消操作
全局变量:g_max_plu_no
编制人:    日期:2003-06-30
==================================================================*/	
uchar get_plu_no_range(uint *plu_start,uint *plu_end)
{
  uchar disp_buf[MAX_LCD_COL*MAX_LCD_NUM+1];//显示缓冲,长度为lcd一页
  uchar key;//键值
  #define MAX_KEY_LEN	10	//数字键字符串最大长度
  uchar numkey_buf[MAX_KEY_LEN];//输入的数字键字符串缓冲区
  uchar point,max_key_num;//是否允许输入小数,最大允许输入键数
  uchar error;//错误类别
  ulong num;//输入数
  uchar step;
  uchar i;
  
  
  //----------初始化----------------//
  *plu_start=0;
  error=0;
  for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
  point=0;
  max_key_num=4;
  //----------提示下一步操作---------------//
  sprintf(disp_buf,"请输入PLU的起始号\r");
  lcd_disp(1,0,disp_buf);
  step=0;
  //----------等待按键---------------//
  while(1)
  {
    if(error) catch_error_display(error,0);//捕获错误
	openbacklight();
    if(low_pwr) return POWER_OFF;//监测到断电了,则exit 
    key = get_key();
    if(!key) continue;
    //beep(50);
    if(error&&key!=CLEAR&&key!=VOID) continue;//出错后,须即时更正或取消操作
    switch(key)    
    {
      case VOID://取消操作
        clear_lcd(1,2);
        return CANCEL;
      break;
      case CLEAR://即时更正
        if(error)//报错时
        {
          clear_lcd(3,1);//清除错误显示
          error=0;//清除错误标志
        }
        if(numkey_buf[0]!=0)//若有数输入 
        {
          numkey_buf[0]=0;//清除数字输入缓冲区
          clear_lcd(2,1);//清除数字显示
        }        
      break;
      //-------取得输入数字键-------//
      case '0' :
      case '1' :
      case '2' :
      case '3' :
      case '4' :
      case '5' :
      case '6' :
      case '7' :
      case '8' :
      case '9' :
      case KEY00://双0
      case POINT://小数点
        //-------取得输入数字键-------//
        error=get_valid_digit(key,point,max_key_num,numkey_buf);
	if(error)//输入非法 
	{
	  error=KEY_ERROR;
	  break;
	}
	//------显示输入数-------//
	clear_lcd(2,1);
	lcd_disp(2,0,numkey_buf);
      break;  	
      case ENTER://最后确定
        if(numkey_buf[0]==0)//未输入任何数字 

⌨️ 快捷键说明

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