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

📄 main_func.c

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 C
📖 第 1 页 / 共 3 页
字号:
		return ret;
}
//-------------------------------------------------------------------------------------------
//Function   : get_client_dish_str
//Description: get all client disk record names that had selected from the tab_menu table.
//Input      : d_type -- 记录的类型 0: 当前记录表 1:历史备份数据 2:暂存数据
//             seq_backup -- 备份数据,备份序号
//Output     : p_str_menu_name -- 
//	       p_rec_num -- 返回记录个数
//             p_arr_record_pos -- 位置数组,在数据库表位置,由于客户表中数据有删除记录所以需要该参数
//-------------------------------------------------------------------------------------------
short get_client_dish_str(int d_type,int seq_backup,unsigned char *p_str_menu_name,
                          unsigned long *p_rec_num,unsigned long *p_arr_record_pos)
{
	unsigned long counter,i,m;
	short ret;
	unsigned char dispbuf[50];
	
	counter = DB_count_records_client_data(d_type,seq_backup,ID_TAB_CLIENT_MENU);
	//sprintf(dispbuf,"counter:%d",counter);
	//TRACE(dispbuf);
	//getch();
	for(i=0,m=0;i<counter;i++)
	{
		//record the pos of current record in the table
		ret = get_a_client_dish_rec_disp_str(d_type,seq_backup,i,m+1,dispbuf);
		if(ret==SUCCESSFUL)
		{
			*(p_arr_record_pos+m) = i;
			memcpy(p_str_menu_name+32*m,dispbuf,32);
			m++;
		}
	}
	if(m==0)
	{
		DispStr_CE(0,1,"请先点菜!",DISP_CENTER|DISP_CLRSCR);
		delay_and_wait_key(0,EXIT_KEY_ALL,0);
		return -1;
        }	
	memset(p_str_menu_name+m*32,0,1);//clear
	*p_rec_num = m;
	return SUCCESSFUL;
}
//---------------------------------------------------------------------------------------------
//Function   :
//Description:
//Input      :
//Output     :
//Return     :
//---------------------------------------------------------------------------------------------
short select_a_new_dish(tab_client_menu *p_new_dish)
{
	int cur_start_item_addr=0,cur_sel_line=1,cur_method=0;
	int new_start_item_addr,new_sel_line,new_method;
	unsigned long selected_dish_pos;
	short ret;
			
	while(1)
	{
		//1.select dish//选菜
		ret = select_dish(cur_start_item_addr,cur_sel_line,cur_method,
				  &new_start_item_addr,&new_sel_line,&new_method,&selected_dish_pos);
		if(ret != SUCCESSFUL) return;
		//2.input dish quant and append items//输入菜的附加信息
		ret = input_dish_rec_info(selected_dish_pos,p_new_dish);
		if(ret == SUCCESSFUL) break;

		cur_start_item_addr = new_start_item_addr;
		cur_sel_line = new_sel_line;
		cur_method = new_method;
	}
	return SUCCESSFUL;
	
}

//---------------------------------------------------------------------------------------------
//Function   : get_dish_info_by_NO
//Description: 根据菜品序号在菜品表中查找菜品的记录
//Input      : p_dish_NO
//Output     : rec
//Return     : SUCCESSFUL,FAILURE
//---------------------------------------------------------------------------------------------
short get_dish_info_by_NO(unsigned char *p_dish_NO,tab_menu **p_rec)
{
	tab_menu *p_menu_rec;
	char flag;
	unsigned long j,k,l;
	unsigned long counter;
	short ret;
	
//二分法,此处为顺序排列,从小到大		
	counter = DB_count_records(ID_TAB_MENU);
        //TRACE("gggg:%d",counter);

	if(counter<=0) return FAILURE;
	j = 0;				//start position
	k = counter-1;     //end position
	l = (j + k)/2;      //medium position
       // TRACE("gggg:%d,k=%d",counter,k);
       // getch();
	while(1)
	{
		p_menu_rec = (tab_menu *)DB_jump_to_record(ID_TAB_MENU,l,&flag);   //
	       // sprintf(strbuf,"j=%d,k=%d,l=%d",j,k,l);
	       // TRACE(strbuf);
	       // dump_memory(p_menu_rec->id,6,4);
	       // getch();
		ret = memcmp(p_dish_NO,p_menu_rec->id,sizeof(p_menu_rec->id));
		if(ret>0)
		{
			j = l;
		} else if(ret<0){
			k = l;
		} else {							//just this item
			*p_rec = p_menu_rec;
			return SUCCESSFUL;
		}
		if(j==k) 
		{
			//DispStr_CE(0,1,"没有找到菜品1",DISP_POSITION|DISP_CLRSCR);
			//dump_memory(p_dish_NO,6,4);
			//TRACE("%d,%d,%d",j,k,l);
			//delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return FAILURE;
		}
		l = (j+k)/2;
		if(j==l||k==l)
		{
			p_menu_rec = (tab_menu *)DB_jump_to_record(ID_TAB_MENU,j,&flag);   //
			ret = memcmp(p_dish_NO,p_menu_rec->id,sizeof(p_menu_rec->id));
			if(ret==0)
			{
				*p_rec = p_menu_rec;
				return SUCCESSFUL;
			}
			p_menu_rec = (tab_menu *)DB_jump_to_record(ID_TAB_MENU,k,&flag);   //
			ret = memcmp(p_dish_NO,p_menu_rec->id,sizeof(p_menu_rec->id));
			if(ret==0)
			{
				*p_rec = p_menu_rec;
				return SUCCESSFUL;
			}
			//DispStr_CE(0,1,"没有找到菜品2",DISP_POSITION|DISP_CLRSCR);
			//dump_memory(p_dish_NO,6,4);
			//TRACE("%d,%d,%d",j,k,l);
			//delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return FAILURE;
		}
	}
}
//---------------------------------------------------------------------------------------------
//Function   : browse_client_dish
//Description: 浏览和修改当前客户记录,浏览客户备份记录
//Input      : d_type -- 0: 当前记录 1:客户历史备份记录 2:客户暂存数据
//             seq_backup -- 备份序号
//             flag_last -- 0:从第一条记录开始显示 1:从最后一条记录开始显示
//Output     : None
//Return     :
//---------------------------------------------------------------------------------------------
short browse_client_dish(int d_type,int seq_backup,int flag_last)
{
#define   MENU_DISP_LINES   4
	int ch;
	short ret;
	unsigned char arr_dish_name[MAX_CLIENT_DISH*32];
	unsigned long arr_record_pos[MAX_CLIENT_DISH];
	unsigned char str_input[30];
	int start_item=0,sel_line=1,line_num=MENU_DISP_LINES;
	unsigned long total;
	
	DispStr_CE(0,2,"正在查找,稍侯!",DISP_CENTER|DISP_CLRSCR);
	memset(str_input,0,sizeof(str_input));
	ret = get_client_dish_str(d_type,seq_backup,arr_dish_name,&total,arr_record_pos);
	if(ret) return ret;
	total = total * 2;	
	if(total<MENU_DISP_LINES) line_num = total;
	if(flag_last==1) 
	{
		start_item = total-2;
		sel_line = 1;
		line_num = 2;
	}
	while(1)
	{
		clr_scr();
		disp_menu_item(arr_dish_name,start_item,0,sel_line,line_num);
		ch = delay_and_wait_key(0,EXIT_KEY_ALL,0);
		switch( ch )
		{
			case EXIT_KEY_UP:
				if(sel_line>1)	sel_line--;
				if((sel_line==1)&&(start_item>0)) 
				{
					start_item--;
					if(line_num<MENU_DISP_LINES) line_num++;
				}
				break;
			case EXIT_KEY_DOWN:
				if((sel_line<MENU_DISP_LINES)&&(sel_line<line_num)) sel_line++;
				else if((sel_line==MENU_DISP_LINES)&&((start_item+line_num)<total))
				{
					start_item++;
				}
				break;
			case EXIT_KEY_F1:
				return -1;
				break;
			case EXIT_KEY_F3:
				if(!d_type)
				{
				    upld_client_dish();
				    return 0;
				}
				break;
			case EXIT_KEY_F2:
				disp_client_counter_result();
				ret = get_client_dish_str(d_type,0,arr_dish_name,&total,arr_record_pos);
				if(ret) return ret;
				total = total * 2;	
				if(total<MENU_DISP_LINES) line_num = total;
				else line_num = MENU_DISP_LINES;
				start_item = 0;
				sel_line = 1;
				break;
			default:
				break;
		}
	}		
}
//---------------------------------------------------------------------------------------------
//Function   : browse_client_cur_rec
//Description: 查看修改客户当前点菜记录
//Input      : None
//Output     : None
//Return     : None
//---------------------------------------------------------------------------------------------
void browse_client_cur_rec()
{
	//browse and modify current client records,from the first record browse.
	int d_type = 0;     //data type ==> current record
	int seq_backup = 0; //null
	int flag_last = 0;  //display from the first record
	browse_client_dish(d_type,seq_backup,flag_last);
}
short browse_append(unsigned char *p_menu_namelzm,unsigned long *p_arr_idlzm)
{
		unsigned long counter,i,j;
		tab_append *p_menu_recs;
		char flag;
		
		unsigned long arr_dish_idlzm[MAX_APPEND_ITEM];
		
		
		char str_dsp[100];
		
		memcpy(p_menu_namelzm,0,sizeof(p_menu_namelzm));
		counter = DB_count_records(ID_TAB_APPEND);
		if(counter<=0)
		{
			DispStr_CE(0,1,"请下载附加项!",DISP_CENTER|DISP_CLRSCR);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return -1;
		}
		if(counter>=MAX_APPEND_ITEM)
		{
			DispStr_CE(0,1,"附加项超过最大值",DISP_CENTER|DISP_CLRSCR);
			sprintf(str_dsp,"现有附加项%d个",counter);
			DispStr_CE(0,3,str_dsp,DISP_CENTER);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return -2;
		}
		for(i=0;i<counter;i++)
		{
			p_menu_recs = DB_jump_to_record(ID_TAB_APPEND,i,&flag);
			if(flag==0)
			{
				memcpy(p_menu_namelzm+i*16,p_menu_recs->append_namelzm,16);
				for(j=0;j<16;j++)
				{
					if(*(p_menu_namelzm+i*16+j)==0)
					 	*(p_menu_namelzm+i*16+j) = ' ';
				}
				*(p_arr_idlzm+i) = i;
			}
		}
		/* //附加项排错特别代码
		for(i=counter-1;i>=0;i--)
		{
			for(j=0;j<16;j++)
				{
					if(*(p_menu_namelzm+i*16+j)==' ')
					 	*(p_menu_namelzm+i*16+j) = 0;
				}
				*(p_arr_idlzm+i) = 0;
		}//附加项排错特别代码end
		*/
			clr_scr();
			return 1;
			//sprintf(str_dsp,"现有%d,%d个附加项",counter,sizeof(p_menu_namelzm));
			//DispStr_CE(0,3,str_dsp,DISP_CENTER);
			//delay_and_wait_key(0,EXIT_KEY_ALL,0);
		//if(sizeof(p_menu_namelzm))
		//browse_menu2(0,p_menu_namelzm,0,0,counter);
		//browse_str(p_menu_namelzm);
}


//************************************************************************************************


//************************************************************************************************
//Function   : 添加附加项
//Description: 
//Input      : p_client_rec当前菜的存储地址,
//		p_menu附加想菜单
//		k 第k个附加项
//Output     : none
//Return     : 返回0失败,返回非0成功
//************************************************************************************************
void append_count_count_count(unsigned long k)
{
	 append_count_count1=k;
}
short select_append(unsigned char *p_menu,tab_client_menu *p_client_rec,int *p_cPtr,int *p_lPtr,int k)//
{	
	short ret=-2;
	int i=0;
	
	char str11[16];	
	if(k>=5) return -3;
	memset(p_client_rec->append[k],0,16);
		
	DispStr_CE(0,0,"请选择附加项",DISP_POSITION|DISP_CLRSCR);
	//append_count_count=append_count_count_count(); 
	ret=browse_menu2(1,p_menu,p_cPtr,p_lPtr,append_count_count1);
	//上一句是无线手持机
	//ret=browse_menu(1,p_menu,p_cPtr,p_lPtr);//这句是有线的
	if(ret==-2) return -2;//F1返回
	if(ret>=8&&ret<=-1) return 0;//如果附加项目的菜单变了,这个8也要跟着变。
	
	sprintf(p_client_rec->append[k],"%d",++ret); //++ret不要0
	//为了增加查找数据库
	//未写完
	//这里的ret 要改成arr_dish_idlzm+ret;
	return 1;
}
short select_appenda(unsigned char *p_menu,tab_client_menu *p_client_rec,int *p_cPtr,int *p_lPtr,int k)//
{	
	short ret=-2;
	int i=0;
	//char str11[16];	
	if(k>=5) return -3;
	memset(p_client_rec->append[k],0,16);
	ret = 0;
	sprintf(p_client_rec->append[k],"%d",ret); //++ret不要0
	
	

	//DispStr_CE( 0, 4,p_client_rec->append[k], DISP_CENTER|DISP_CLRSCR);
	//delay_and_wait_key(2,EXIT_KEY_ALL,0);
	return 1;
}
//---------------------------------------------------------------------------------------------
//删除一条点菜信息

int delete_client_menu()
{
	int d_type;//0
	int conub;
	int seq_backup;//0
	int flag_last;//1
	#define   MENU_DISP_LINES   4
	int ch;
	short ret;
	unsigned char arr_dish_name[MAX_CLIENT_DISH*32];
	unsigned long arr_record_pos[MAX_CLIENT_DISH];
	unsigned char str_input[30];
	int start_item=0,sel_line=1,line_num=MENU_DISP_LINES;
	unsigned long total;
	int conn=1;
	
	
	d_type=seq_backup=0;
	flag_last=0;
	DispStr_CE(0,2,"正在查找,稍侯!",DISP_CENTER|DISP_CLRSCR);
	memset(str_input,0,sizeof(str_input));
	ret = get_client_dish_str(d_type,seq_backup,arr_dish_name,&total,arr_record_pos);
	if(ret) return ret;
	total = total * 2;	
	if(total<MENU_DISP_LINES) line_num = total;
	if(flag_last==1) 
	{
		start_item = total-2;
		sel_line = 1;
		line_num = 2;
	}
	
	DispStr_CE(0,2,"选择删除数据:",DISP_POSITION|DISP_CLRSCR);
	while(1)
	{
		clr_scr();
		disp_menu_item(arr_dish_name,start_item,0,sel_line,line_num);
		ch = delay_and_wait_key(0,EXIT_KEY_ALL,0);
		switch( ch )
		{
			case EXIT_KEY_UP:
				if(sel_line>1)
				{
					sel_line--;
					if(conn>0) conn--;
				}
				if((sel_line==1)&&(start_item>0)) 
				{
					start_item--;
					if(line_num<MENU_DISP_LINES) line_num++;
					if(conn>0) conn--;
				}				
				break;
			case EXIT_KEY_DOWN:
				if((sel_line<MENU_DISP_LINES)&&(sel_line<line_num)) {
					sel_line++;
					if(conn>0) conn++;
				}
				else if((sel_line==MENU_DISP_LINES)&&((start_item+line_num)<total))
				{
					start_item++;	
					if(conn>0) conn++;			
				}
				break;
			case EXIT_KEY_F1:
				return -1;
				break;
			case EXIT_KEY_ENTER:
				//conn /=2;
				conub=conn%2+(conn-conn%2)/2;
				return  conub-1;
				break;
			default:
				
				break;
		}
	}		
}
//************************************************************************************************
//************************************************************************************************
//End

⌨️ 快捷键说明

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