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

📄 main_func.c.bak

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 BAK
📖 第 1 页 / 共 3 页
字号:
				break;
				}
		}                        		
	memset(p_client_rec->serial_menu_NO,'0',sizeof(p_client_rec->serial_menu_NO));
	p_client_rec->serial_menu_quant = 0;
	memcpy(p_client_rec->menu_NO,p_menu_rec->id,sizeof(p_menu_rec->id));
	p_client_rec->menu_quant = menu_quant;
	if(k==2) {
		select_appenda(arr_dish_namelzm,p_client_rec,&lPtr,&cPtr,k++);
		k--;
		}
	//if(k<MAX_APPEND_PERMIT) {
		if(k==0) memset(p_client_rec->append[k],0,16);
		if(k==2) {
			memset(p_client_rec->append[2],0,16);
			memset(p_client_rec->append[3],0,16);
			memset(p_client_rec->append[4],0,16);
			}
		if(k==3) {memset(p_client_rec->append[3],0,16);memset(p_client_rec->append[4],0,16);}
		if(k==4) memset(p_client_rec->append[4],0,16);
		for(++k;k<MAX_APPEND_PERMIT;k++){
			memset(p_client_rec->append[k],0,16);
			//DispStr_CE(0,2,"没错",DISP_CENTER|DISP_CLRSCR);
			//delay_and_wait_key(0,EXIT_KEY_ALL,0); 
		}
	//}
	for(i=0;i<MAX_APPEND_PERMIT;i++)
	{
		if(ac_wage>=100) memset(p_client_rec->append[i],0,16);
	}

	return SUCCESSFUL;
}

//-------------------------------------------------------------------------------------
//Function   : get_new_start_item_dish
//Description: 选择菜品时,当用户输入字符串时,调节显示位置,返回新的显示位置
//Input      : p_arr_ids     在表(ID_TAB_MENU)中的位置数组,非id号
//             num_ids - p_arr_ids长度   ac_wage还不是很好
//             method - 0:编号 1:拼音
//             str_input - 客户输入的字符串
//             len_str_input - 客户输入的字符串长度
//Output     : p_new_start_item 新的显示位置,以p_arr_ids起点为0
//Return     : FAILURE 没有找到
//             SUCCESSFUL 找到
//-------------------------------------------------------------------------------------
short get_new_start_item_dish(const unsigned long *p_arr_ids,unsigned long num_ids,int method,
			 const unsigned char *str_input,int len_str_input,unsigned long *p_new_start_item)
{
	int i;
	char flag;
	tab_menu *p_menu_rec;
	int pos_start=0,pos_end=num_ids-1,pos_m;
	short ret;
	//二分法,此处为顺序排列,从小到大
/*	TRACE(str_input);
	sprintf(str_dsp,"len:%d:%d:%d",len_str_input,num_ids,method);
	TRACE(str_dsp);
	sprintf(str_dsp,"%d:%d:%d",p_arr_ids[0],p_arr_ids[1],p_arr_ids[2]);
	TRACE(str_dsp);
	getch();*/
	if(len_str_input<=0) 
	{
		*p_new_start_item = 0;
		return SUCCESSFUL;
	}
	if(num_ids<=0) return FAILURE;
	pos_start = 0;
	pos_end=num_ids-1;
	pos_m = (pos_start+pos_end)/2;
	while(1)
	{
			p_menu_rec = (tab_menu*)DB_jump_to_record(ID_TAB_MENU,p_arr_ids[pos_m],&flag);
			if(method==0) ////编号
			{
				ret = memcmp(p_menu_rec->id,str_input,len_str_input);
			}else {   //拼音
				ret = memcmp(p_menu_rec->abbr,str_input,len_str_input);
			}
			if(ret>0) 
			{
				pos_end = pos_m;
			} else if(ret<0){
				pos_start = pos_m;
			} else {
				if(pos_m>0)
				{
					for(i=pos_m-1;i>=0;i--)
					{
						p_menu_rec = (tab_menu*)DB_jump_to_record(ID_TAB_MENU,p_arr_ids[i],&flag);
						if(method==0) ////编号
						{
							ret = memcmp(p_menu_rec->id,str_input,len_str_input);
						}else {   //拼音
							ret = memcmp(p_menu_rec->abbr,str_input,len_str_input);
						}
						if(ret == 0) 
						{
							pos_m = i;
						} else break;
					}
				}
				*p_new_start_item = pos_m;
				return SUCCESSFUL;
			}
			pos_m = (pos_start+pos_end)/2;
			if(pos_m==pos_start||pos_m==pos_end)
			{
				p_menu_rec = (tab_menu*)DB_jump_to_record(ID_TAB_MENU,p_arr_ids[pos_start],&flag);
				if(method==0) ////编号
				{
					ret = memcmp(p_menu_rec->id,str_input,len_str_input);
				}else {   //拼音
					ret = memcmp(p_menu_rec->abbr,str_input,len_str_input);
				}
				if(ret == 0)
				{
					*p_new_start_item = pos_start;
					return SUCCESSFUL;
				}
				p_menu_rec = (tab_menu*)DB_jump_to_record(ID_TAB_MENU,p_arr_ids[pos_end],&flag);
				if(method==0) ////编号
				{
					ret = memcmp(p_menu_rec->id,str_input,len_str_input);
				}else {   //拼音
					ret = memcmp(p_menu_rec->abbr,str_input,len_str_input);
				}
				if(ret == 0)
				{
					*p_new_start_item = pos_end;
					return SUCCESSFUL;
				}
				//TRACE("No find err");
				//getch();
				return FAILURE;
			}
			//sprintf(str_dsp,"%d:%d:%d,%d",pos_start,pos_m,pos_end,p_arr_ids[pos_m]);
			//TRACE(str_dsp);
			//getch();
	}	
	return FAILURE;
}

//---------------------------------------------------------------------------------------------
//Function   : order_dish
//Description: 点单个菜
//Input      : None
//Output     : None
//Return     : SUCCESSFUL,-1
//---------------------------------------------------------------------------------------------
short order_dish()
{
	int cur_start_item_addr=0,cur_sel_line=1,cur_method=0;
	int new_start_item_addr,new_sel_line,new_method;
	short ret;
	tab_client_menu rec;
	unsigned long selected_dish_pos=0;
	int counter;
	unsigned char str_dsp[100];
	
	new_start_item_addr = cur_start_item_addr;
	new_sel_line = cur_sel_line;
	new_method = cur_method;

	while(1)
	{	
		//update the parameters
		cur_start_item_addr = new_start_item_addr;
		cur_sel_line = new_sel_line;
		cur_method = new_method;
		
		//1.select disk name
		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 ret;
	
		//2.input dish quant and append items
		ret = input_dish_rec_info(selected_dish_pos,&rec);
		if(ret!=SUCCESSFUL) continue;
		
		//3.add a record to database 
		counter_client_disk_total(&counter);	
		if(counter>=MAX_CLIENT_DISH)
		{
			DispStr_CE(0,3,"已点菜超过最大值",DISP_CENTER|DISP_CLRSCR);
			sprintf(str_dsp,"现有菜%d个",counter);
			DispStr_CE(0,5,str_dsp,DISP_CENTER);
			delay_and_wait_key(3,EXIT_KEY_ALL,0);
			return FAILURE;
		}
		
		if(!DB_add_record(ID_TAB_CLIENT_MENU,&rec))
		{
			DispStr_CE(0,2,"添加点菜纪录失败",DISP_CENTER|DISP_CLRSCR);
			delay_and_wait_key(0,EXIT_KEY_ALL,0);
			return -1;
		}
	}
	return SUCCESSFUL;			      
}
//---------------------------------------------------------------------------------------------
//Function   : disp_client_counter_result
//Description: 显示客户已经点菜的统计结果,此时按F3键加公共附加项
//Input      : None
//Output     : None
//Return     : SUCCESSFUL
//---------------------------------------------------------------------------------------------
short disp_client_counter_result()
{
	short ret;
	unsigned long total,total_money,num_cool,num_hot;
	unsigned char strbuf[50];
	
	//1.统计结果
	ret = counter_client_dish(&total,&total_money,&num_cool,&num_hot);
	if(ret != SUCCESSFUL ) return ret;
	//2.显示
	sprintf(strbuf,"共%d个菜",total);
	DispStr_CE(0,0,strbuf,DISP_POSITION|DISP_CLRSCR);
	sprintf(strbuf,"合计%d.%02d元",total_money/10000,total_money/100%100);
	DispStr_CE(0,2,strbuf,DISP_POSITION);
	sprintf(strbuf,"凉菜:%d  热菜:%d",num_cool,num_hot);
	DispStr_CE(0,4,strbuf,DISP_POSITION);
//	sprintf(strbuf,"已上传%d个菜",num_upld);
//	DispStr_CE(0,6,strbuf,DISP_POSITION);
	//3.按F3键加公共附加项
	if(delay_and_wait_key(0,EXIT_KEY_ALL,0)==EXIT_KEY_F3)
	{
	}
	return SUCCESSFUL;
}

//---------------------------------------------------------------------------------------------
//Function   : get_a_client_dish_rec_disp_str
//Description: 读取客户点菜记录的字符串
//Input      : d_type -- 记录的类型 0: 当前记录表 1:历史备份数据 2.暂存数据
//             seq_backup -- 备份数据,备份序号
//             pos_rec_db -- 在数据库客户点菜记录表(tab_client_dish或备份数据)中的位置序号
//             seq_disp -- 显示序号 example: 1.xxxxxxxxxxx 中的 1
//Output     : p_disp_str -- 返回的32个字节长指针
//Return     : FAILURE
//             SUCCESSFUL
//---------------------------------------------------------------------------------------------
short get_a_client_dish_rec_disp_str(int d_type,int seq_backup,unsigned long pos_rec_db,
                                    unsigned long seq_disp,unsigned char *p_disp_str)
{
	unsigned long ret,j;
	tab_client_menu *p_client_menu_rec;
	tab_menu *p_menu_rec;
	char flag;
	char strbuf[60],strTmp[60];
	int money;
		
	p_client_menu_rec = (tab_client_menu*)DB_jump_to_record_client_data(d_type,seq_backup,pos_rec_db,&flag); //read form client dish table
	if(!flag)	
	{   
		ret = get_dish_info_by_NO(p_client_menu_rec->menu_NO,&p_menu_rec);			
		if(ret==SUCCESSFUL)
		{
			memset(strbuf,0,sizeof(strbuf));
			memcpy(strbuf,p_menu_rec->name,sizeof(p_menu_rec->name));
			if(p_client_menu_rec->serial_menu_quant)
				sprintf(strTmp,"%d#%s",seq_disp,strbuf);
			else
				sprintf(strTmp,"%d.%s",seq_disp,strbuf);
			
			memset(p_disp_str,' ',16);
			memcpy(p_disp_str,strTmp,strlen(strTmp));
			memset(strTmp,0,sizeof(strTmp));
			for(j=0;j<MAX_APPEND_PERMIT;j++)
			{
				if(memcmp(p_client_menu_rec->append[j],strTmp,16))
				{
					add_puls(p_disp_str);
					break;
				}
			}
			memset(strbuf,0,sizeof(strbuf));
			memcpy(strbuf,p_menu_rec->unit,sizeof(p_menu_rec->unit));
			
			money = p_menu_rec->price*p_client_menu_rec->menu_quant;
			if(p_client_menu_rec->menu_quant%100)
				sprintf(strTmp,"  %d.%02d%s%d.%02d",p_client_menu_rec->menu_quant/100,p_client_menu_rec->menu_quant%100,strbuf,money/10000,money%10000);
			else
				sprintf(strTmp,"  %d%s%d.%02d",p_client_menu_rec->menu_quant/100,strbuf,money/10000,money%10000);
			
			memset(p_disp_str+16,' ',16);
			memcpy(p_disp_str+16,strTmp,strlen(strTmp));
			return SUCCESSFUL;
		} else {
			memset(strbuf,0,sizeof(strbuf));
			memcpy(strbuf,p_client_menu_rec->menu_NO,6);
			if(p_client_menu_rec->serial_menu_quant)
				sprintf(strTmp,"%d#%s",seq_disp,strbuf);
			else
				sprintf(strTmp,"%d.%s",seq_disp,strbuf);
			memset(p_disp_str,' ',16);
			memcpy(p_disp_str,strTmp,strlen(strTmp));  //first 16bytes
			
			if(p_client_menu_rec->menu_quant%100)
				sprintf(strTmp,"  数量:%d.%02d",p_client_menu_rec->menu_quant/100,p_client_menu_rec->menu_quant%100);
			else
				sprintf(strTmp,"  数量:%d",p_client_menu_rec->menu_quant/100);
			memset(strbuf,' ',sizeof(strbuf));
			memcpy(strbuf,strTmp,strlen(strTmp));
			memcpy(p_disp_str+16,strbuf,16);  //second 16 bytes
			//TRACE("g_c_d_d_s:err g_d_i_no");
			//getch();
			return SUCCESSFUL;
		}
	} else {
		//TRACE("g_c_d_d_s:err del");
		//getch();
		return FAILURE;
	}		
}
//---------------------------------------------------------------------------------------------
//Function   : upld_client_dish
//Description: 上传,备份数据
//Input      : None
//Output     : None
//Return     : 
//---------------------------------------------------------------------------------------------
short upld_client_dish()
{
	short ret,ret1;
	char tMenu[3*16+2] = "1.上传数据      2.暂时保存      3.删除数据       \0"; 
	char	desk_NO[10],waiter_NO[10],person_num,waiter_PWD[10];
        int lPtr=0,cPtr=0;
        unsigned char sinput[30];
        char strTmp[20];
        int rev=0,rev1=0;
        char  flag;
        char strbuf[20];
        int tag=0,tag1=0;
        
        
    //1.选择上传类型
    	DispStr_CE(0,0,"请选择上传类型:",DISP_POSITION|DISP_CLRSCR);
	ret = browse_menu(1,tMenu,&cPtr,&lPtr );
	if(ret<0) return ret;
	//if(ret==0||ret==1||ret==2)
	if(ret==0||ret==1)
	{ 
		//2.输入: 台号,工号,密码,人数
		g_upld_client_mode = ret;
		memset(desk_NO,0,sizeof(desk_NO));
		memset(waiter_NO,0,sizeof(waiter_NO));
		person_num = 0;
		memset(waiter_PWD,0,sizeof(waiter_PWD));
		
		memcpy(desk_NO,g_desk_NO,sizeof(g_desk_NO));
		person_num = g_person_num;
		memcpy(waiter_NO,g_waiter_NO,sizeof(g_waiter_NO));
		memcpy(waiter_PWD,g_waiter_PWD,sizeof(g_waiter_PWD));
		ret1 = input_desk_info(desk_NO,&person_num, waiter_NO,waiter_PWD);
		if(ret1!=0) return ret1;
		if(ret==0) //3.上传通讯
		{
			ret = comm_upld_client_dish();//上传■■■■■■■■■■■■■■■■■■■■■■■■■■
			if(ret == SUCCESSFUL)
			{

				ret = backup_client_data();
			}
		}else if(ret==1){//暂时保存
			backup_client_data();
		}		
	}	//■■■■■■■■■■■■■■■■■■■■■■■■■■
	else if(ret==2){//删除数据
			rev1=delete_mode();
			if(rev1==0||rev1==1)
			{
				if(rev1==0)
				{
					//browse_client_dish(0,0,0);
					rev=delete_client_menu();
					//sprintf(strbuf,"%d",rev);
					//DispStr_CE(0,4,strbuf,DISP_POSITION|DISP_CLRSCR);
					//delay_and_wait_key(2,EXIT_KEY_ALL,0);
					if(rev>-1)
					{
						clr_scr();
						for(tag=0,tag1=0;tag1<=rev;tag++)
						{
							DB_jump_to_record(ID_TAB_CLIENT_MENU,tag,&flag);
							if(tag1==rev&&flag==0) break;
							if(flag==2){
								continue;
							}
							if(flag==1)
							{	
								break;
							}
							if(flag==0){
								if(tag1==rev) break;//可以不要
								tag1++;
								continue;
								}
						}
						if(flag==1)
						{
							DispStr_CE(0,2,"记录为空!",DISP_POSITION|DISP_CLRSCR);
							delay_and_wait_key(2,EXIT_KEY_ALL,0);
						}
						if(flag==0)
						{
							ret = input_waiter_NO_PWD(0,0,waiter_NO,waiter_PWD);
							if(ret == SUCCESSFUL)
							if(tag1==rev){
							DB_delete_record(ID_TAB_CLIENT_MENU,tag);
							DispStr_CE(0,2,"删除成功!",DISP_POSITION|DISP_CLRSCR);
							delay_and_wait_key(2,EXIT_KEY_ALL,0);
							}
						}
					}
				}
				if(rev1==1)
				{
					clr_scr();
					ret = input_waiter_NO_PWD(0,0,waiter_NO,waiter_PWD);
					if(ret == SUCCESSFUL)
					ret = backup_client_data();
						if(ret == SUCCESSFUL)
						{
							DispStr_CE(0,2,"数据删除成功!",DISP_POSITION|DISP_CLRSCR);
							delay_and_wait_key(2,EXIT_KEY_ALL,0);	
						}
				}
			}
		}	//■■■■■■■■■■■■■■■■■■■■■■■■■■
	return ret;	//■■■■■■■■■■■■■■■■■■■■■■■■■■
}
//------------------------------------------------------------------------------
//删除方式选择
int delete_mode()
{
		int ret;
		int cPtr = 0;
		int lPtr = 0;
		char dMenu[2*16+2] = "1.单条删除      2.全部删除      \0"; 
		//clr_scr();
		ret=2;
		DispStr_CE(0,0,"请选择删除方式:",DISP_POSITION|DISP_CLRSCR);
		//delay_and_wait_key(0,EXIT_KEY_ALL,0);
		ret = browse_menu(1,dMenu,&cPtr,&lPtr );
		

⌨️ 快捷键说明

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