📄 main_func.c
字号:
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 + -