📄 main_func.c
字号:
//*********************************************************************************************************
//File : main_func.c
//Function: main function
//**********************************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
#include <database.h>
#include "ExEH0218.h"
#include "db.h"
#include "common.h"
#include "hd_dt_wl.h"
extern unsigned char g_desk_NO[4+1];
extern unsigned char g_person_num;
extern unsigned char g_waiter_NO[4+1];
extern unsigned char g_waiter_PWD[4+1];
extern unsigned int ac_time;
extern unsigned int ac_wage=0;
extern unsigned char g_id_self;
extern unsigned char g_id_server;
extern unsigned char g_comm_current_id;
extern unsigned char g_menu_set_float_percent;
tab_client_menu *p_client_rec_Temp_lzm;
int Temp;
unsigned long append_count_count;
unsigned long append_count_count1;
unsigned char g_upld_client_mode = 0;
short select_append(unsigned char *p_menu,tab_client_menu *p_client_rec,int *p_cPtr,int *p_lPtr,int k);//定义--0610-LZM
short select_appenda(unsigned char *p_menu,tab_client_menu *p_client_rec,int *p_cPtr,int *p_lPtr,int k);//
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);
short get_new_start_item_append(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);
short get_dish_info_by_NO(unsigned char *p_dish_NO,tab_menu **p_rec);
short browse_client_dish(int d_type,int seq_backup,int flag_last);
//const char mMenu_append[8*16+2] = "1.忌糖 2.低糖 3.低辣 4.忌辣 5.忌盐 6.低盐 7.忌油 8.少油 \0";
int delete_client_menu();//删除
int delete_mode();//删除方式
short browse_append(unsigned char *p_menu_namelzm,unsigned long *p_arr_idlzm);
Temp=0;
//-----------------------------------------------------------------------------------------------
//Function : get_menu_str
//Description: 获取菜单列表中所有的菜品名称的显示字符串
//Input :
// method =〉0:编号 1:拼音
//Output : p_menu_names 每个菜品16字节
// p_arr_ids: 表(ID_TAB_MENU)中的位置,非id号
// p_total : 菜品的数量
//Return : SUCCESSFUL
// -1
// -2
//-----------------------------------------------------------------------------------------------
short get_menu_str(unsigned char *p_menu_names,unsigned long *p_arr_ids,int method,unsigned long *p_total)
{
unsigned long counter,i,j;
tab_menu *p_menu_rec;
char flag;
counter = DB_count_records(ID_TAB_MENU);
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_MENU_ITEM)
{
DispStr_CE(0,1,"菜谱超过最大值",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key(0,EXIT_KEY_ALL,0);
return -2;
}
if(method==0) //编号
{
for(i=0;i<counter;i++)
{
p_menu_rec = DB_jump_to_record(ID_TAB_MENU,i,&flag);
memcpy(p_menu_names+i*16,p_menu_rec->name,16);
for(j=0;j<16;j++)
{
if(*(p_menu_names+i*16+j)==0)
*(p_menu_names+i*16+j) = ' ';
}
*(p_arr_ids+i) = i;
}
} else { //1:拼音
for(i=0;i<counter;i++)
{
p_menu_rec = DB_jump_to_record(ID_TAB_MENU,i,&flag);
if(p_menu_rec->abbr_seq>=MAX_MENU_ITEM)
{
DispStr_CE(0,2,"缩写编号有错误",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key(0,EXIT_KEY_ALL,0);
return FAILURE;
}
memcpy(p_menu_names+p_menu_rec->abbr_seq*16,p_menu_rec->name,16);
for(j=0;j<16;j++)
{
if(*(p_menu_names+p_menu_rec->abbr_seq*16+j)==0)
*(p_menu_names+p_menu_rec->abbr_seq*16+j) = ' ';
}
*(p_arr_ids+p_menu_rec->abbr_seq) = i;
}
}
memset(p_menu_names+counter*16,0,1);//clear the end of string
*p_total = counter;
return SUCCESSFUL;
}
//-------------------------------------------------------------------------------------
//Function : select_dish
//Description: 点菜,从菜单类表中选择一个菜品
//Input : cur_start_item_addr, 画面显示的当前第一行,以第一个菜品为起点,起点为0
// cur_sel_line,反写行,选择行,以画面的第一行为起点,起点为1
// cur_method,0:编号 1:拼音
//Output : p_new_start_item_addr:返回的新的画面显示的当前第一行,以第一个菜品为起点,起点为0
// p_new_sel_line:返回的反写行,选择行,以画面的第一行为起点,起点为1
// p_new_method:返回的方法 0:编号 1:拼音
// p_selected_dish_pos: 所选择的菜品在数据库菜单表(tab_menu)中的位置,序号,
//-------------------------------------------------------------------------------------
short select_dish(int cur_start_item_addr,int cur_sel_line,int cur_method,int *p_new_start_item_addr,
int *p_new_sel_line,int *p_new_method,unsigned long *p_selected_dish_pos)
{
typ_msg_word msg;
char pressch; //cjb
int charptr=0,chflag=0,ptr,maxNum; //cjb
char keytochar[25]="*0*978564123**********"; //cjb
char key_char[10][5] = { " ",
" ",
"ABC ",
"DEF ",
"GHI ",
"JKL ",
"MNO ",
"PQRS",
"TUV ",
"WXYZ" }; //cjb
int hitkey=0,dupkey=0;
short ch,ret;
unsigned char arr_dish_name[(MAX_MENU_ITEM+1)*16];
unsigned long arr_dish_id[MAX_MENU_ITEM];
unsigned char str_input[30];
int start_item=0,sel_line=1,line_num=3;
unsigned long new_start_item = 0;
unsigned long total;
unsigned char dispbuf[100];
int method;
int flag_chr_pressed;
int temp;//
//init by current value
start_item = cur_start_item_addr;
sel_line = cur_sel_line;
method = cur_method;
maxNum=6;
ptr = 0;
//ch='h';//
temp=0;//
memset(str_input,0,sizeof(str_input));
ret = get_menu_str(arr_dish_name,arr_dish_id,method,&total);
if(ret) return ret;
if(total<3) line_num = total;
SPT_set(4);
if(method==0)
{
sprintf( dispbuf, "编号:%s_", str_input );
}else {
sprintf( dispbuf, "拼音:%s_", str_input );
}
DispStr_CE( 0, 0, dispbuf, DISP_POSITION|DISP_CLRSCR );
disp_menu_item(arr_dish_name,start_item,2,sel_line,line_num);
while(1)
{
flag_chr_pressed = 0;
msg.s_word = sys_msg(SM_GOTO_SLEEP);
if (msg.bits.time_out)
{
hitkey++;
dupkey++;
SPT_set(4);
if ( dupkey>12 )
{
dupkey = chflag = charptr = 0;
}
if ( hitkey>=(ac_time*16) ) // 自动退出
{
return -44;
}
}
/*if(!(temp)){
if((sel_line<3)&&(sel_line<line_num)) sel_line++;
else if((sel_line==3)&&((start_item+line_num)<total))
{
start_item++;
}
temp++;
}*/
if (msg.bits.key_available)
{
hitkey = dupkey = 0;
ch = KEY_read();
switch( ch )
{
case KEY_COMM:
if(method) method= 0;
else method = 1;
while(ptr>0) str_input[--ptr] = 0; //清除搜索字符
ret = get_menu_str(arr_dish_name,arr_dish_id,method,&total);
if(ret) return ret;
if(total<3) line_num = total;
sel_line = 1;
start_item = 0;
break;
case KEY_UP:
if(sel_line>1) sel_line--;
else if((sel_line==1)&&(start_item>0))
{
start_item--;
if(line_num<3) line_num++;
}
break;
case KEY_DOWN:
if((sel_line<3)&&(sel_line<line_num)) sel_line++;
else if((sel_line==3)&&((start_item+line_num)<total))
{
start_item++;
}
break;
//cjb
case KEY_0:
case KEY_1:
if(method) break;
case KEY_2:
case KEY_3:
case KEY_4:
case KEY_5:
case KEY_6:
case KEY_7:
case KEY_8:
case KEY_9:
if (pressch!=ch) chflag = charptr = 0; // 重复按键标志与字符指针复位
pressch = ch;
if ((ptr<maxNum)||(chflag))
{
if (method)
{ //拼音方式
if (chflag)
{ //重复按键
if ( ch==KEY_7||ch==KEY_9 )
charptr = (charptr<3) ? charptr+1 : 0;
else
charptr = (charptr<2) ? charptr+1 : 0;
ch = key_char[keytochar[ch]-'0'][charptr];
if (ptr>0)
{
str_input[--ptr] = 0;
}
}
else
{
ch = key_char[keytochar[ch]-'0'][0];
chflag = 1;
}
} else {
ch = keytochar[ch];
}
str_input[ptr++] = ch;
str_input[ptr] = 0;
if (method)
sprintf( dispbuf, "拼音:%s_", str_input);
else
sprintf( dispbuf, "编号:%s_", str_input);
DispStr_CE( 0, 0, dispbuf, DISP_POSITION|DISP_CLRLINE );
}
flag_chr_pressed = 1;
break;
//cjb
case KEY_F1:
return -1;
break;
//CJB
case KEY_F3:
pressch = ch;
chflag = charptr = 0; // 重复按键标志与字符指针复位
if (ptr>0) str_input[--ptr] = 0;
if (method)
{
sprintf( dispbuf, "拼音:%s_", str_input );
}else {
sprintf( dispbuf, "编号:%s_", str_input );
}
DispStr_CE( 0, 0, dispbuf, DISP_POSITION|DISP_CLRLINE );
flag_chr_pressed = 1;
break;
case KEY_ENTER:
*p_new_start_item_addr = start_item;
*p_new_sel_line = sel_line;
*p_new_method = method;
*p_selected_dish_pos = arr_dish_id[start_item+sel_line-1];
return SUCCESSFUL;
break;
case KEY_F2:
browse_client_dish(0,0,1);
default:
break;
}
if(flag_chr_pressed)
{
ret = get_new_start_item_dish(arr_dish_id,total,method,str_input,strlen(str_input),&new_start_item);
if(ret==SUCCESSFUL)
{
start_item = new_start_item;
disp_menu_item(arr_dish_name,start_item,2,sel_line,line_num);
}
else {
DispStr_CE( 0, 4, "没有这个菜", DISP_CENTER|DISP_CLRSCR);
}
}else {
disp_menu_item(arr_dish_name,start_item,2,sel_line,line_num);
}
if(method==0)
{
sprintf( dispbuf, "编号:%s_", str_input );
}else {
sprintf( dispbuf, "拼音:%s_", str_input );
}
DispStr_CE( 0, 0, dispbuf, DISP_POSITION|DISP_CLRLINE );
}
}
}
//---------------------------------------------------------------------------------------------
//Function : input_dish_rec_info
//Description: 点菜时输入菜品数量和附加项
//Input : pos -- 准备加入的菜品在菜品表中的位置
//Output : p_client_rec 客户表记录指针
//Return :
// -1
// FAILURE
// SUCCESSFUL
//---------------------------------------------------------------------------------------------
short input_dish_rec_info(int pos,tab_client_menu *p_client_rec)
{
unsigned long counter;
tab_menu *p_menu_rec;
char flag ;
unsigned char str_dsp[100];
unsigned char str_tmp[100];
//GETSTR_PARAM gs;
int menu_quant;
unsigned long i;
short ret,ret2;
unsigned char arr_append[16*MAX_APPEND_PERMIT];
unsigned char arr_dish_namelzm[MAX_APPEND_ITEM*16+1];
unsigned char arr_dish_idlzm[MAX_APPEND_ITEM];
int append_num;
//加的
int lPtr=0,cPtr=0;//临时测试
int k;
int ret1=0;
k=0;
memset(arr_append,0,16*MAX_APPEND_PERMIT);
//完毕
if(!Temp++) p_client_rec_Temp_lzm=p_client_rec;
counter = DB_count_records(ID_TAB_MENU);
if(pos>=counter){
DispStr_CE(0,2,"选择编号有错误",DISP_CENTER|DISP_CLRSCR);
delay_and_wait_key(0,EXIT_KEY_ALL,0);
return FAILURE;
}
p_menu_rec = DB_jump_to_record(ID_TAB_MENU,pos,&flag);
memset(str_dsp,0,sizeof(str_dsp));
memcpy(str_dsp,p_menu_rec->name,sizeof(p_menu_rec->name));
DispStr_CE(0,0,str_dsp,DISP_POSITION|DISP_CLRSCR);
memset(str_tmp,0,sizeof(str_tmp));
memcpy(str_tmp,p_menu_rec->unit,sizeof(p_menu_rec->unit));
sprintf(str_dsp,"每%s%d.%02d元",str_tmp,p_menu_rec->price/100,p_menu_rec->price%100);
DispStr_CE(0,2,str_dsp,DISP_POSITION);
while(1)
{
menu_quant = 100;
ret = input_number(0,4,&menu_quant,"数量:");
if(ret) return ret;
//if(menu_quant) break;
break;
}
memset(arr_append,0,sizeof(arr_append));
append_num = 0;
while(1)
{
memset(str_dsp,0,sizeof(str_dsp));
memcpy(str_dsp,p_menu_rec->name,sizeof(p_menu_rec->name));
DispStr_CE(0,0,str_dsp,DISP_POSITION|DISP_CLRSCR);
memset(str_tmp,0,sizeof(str_tmp));
memcpy(str_tmp,p_menu_rec->unit,sizeof(p_menu_rec->unit));
sprintf(str_dsp,"每%s%d.%02d元",str_tmp,p_menu_rec->price/100,p_menu_rec->price%100);
DispStr_CE(0,2,str_dsp,DISP_POSITION);
if(menu_quant%100)
sprintf(str_tmp,"数量:%d.%02d",menu_quant/100,menu_quant%100);
else
sprintf(str_tmp,"数量:%d",menu_quant/100);
DispStr_CE(0,4,str_tmp,DISP_POSITION);
ret = sure(2,6,"保存","附加项F3");
if(ret==-1||ret==-2) return ret; //EXIT_KEY_POWER and EXIT_AUTO_QUIT return F1
else if(ret == -4) //key F3
{
ret = 1;
}
if(ret==1&&++ac_wage)
{
ret1=0;
ret2=0;
ret2=browse_append(arr_dish_namelzm,arr_dish_idlzm);
if(ret2==-1||ret2==-2) break;
while(!ret1)
{
if(k>=MAX_APPEND_PERMIT) break;//k大于或者等于5
//DispStr_CE(0,4,arr_dish_namelzm,DISP_POSITION);
//delay_and_wait_key(0,EXIT_KEY_ALL,0);
ret1=select_append(arr_dish_namelzm,p_client_rec,&lPtr,&cPtr,k++);
//改变上面这句啦!
//这里是为了更改附加项
if(ret1==0) k--;
if(ret1==-3) break;
if(ret1==-2) //F2
{
k--;//不成功
break;
}
}
} else if(ret==0)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -