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

📄 db.c

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 C
📖 第 1 页 / 共 2 页
字号:
		p_client_menu_rec = (tab_client_menu *)DB_jump_to_record(ID_TAB_CLIENT_MENU,i,&flag);   //
		if(!flag) counter1++;
	}
	if(p_total) *p_total = counter1;
	return SUCCESSFUL;
}
// 梅海华 2005/06/06
//Ouput: p_total    -- 所有有效数据的条数 
//       p_total_all -- 所有数据的条数,包括被删除的
short counter_client_disk_total1(unsigned long *p_total,unsigned long *p_total_all)
{
	unsigned long counter,counter1;
	unsigned long i;
	tab_client_menu *p_client_menu_rec;
	char flag;
	
	counter = DB_count_records(ID_TAB_CLIENT_MENU);
	for(i=0,counter1=0;i<counter;i++)
	{
		p_client_menu_rec = (tab_client_menu *)DB_jump_to_record(ID_TAB_CLIENT_MENU,i,&flag);   //
		if(!flag) counter1++;
	}
	if(p_total) *p_total = counter1;
	if(p_total_all) *p_total_all = counter;
	return SUCCESSFUL;
}

short counter_client_dish(unsigned long *p_total,unsigned long *p_total_money,unsigned long *p_num_cool,unsigned long *p_num_hot)
{
	unsigned long counter,counter1;
	tab_client_menu *p_client_menu_rec;
	char flag;
	tab_menu *p_menu_rec;
	unsigned long i;
	short ret;
        int num_cool=0,num_hot=0;
    
	if(p_total_money) *p_total_money = 0;
	counter = DB_count_records(ID_TAB_CLIENT_MENU);
	for(i=0,counter1=0;i<counter;i++)
	{
		p_client_menu_rec = (tab_client_menu *)DB_jump_to_record(ID_TAB_CLIENT_MENU,i,&flag);   //
		if(flag) continue;
		ret = get_dish_info_by_NO(p_client_menu_rec->menu_NO,&p_menu_rec);
		if(ret!=SUCCESSFUL) return ret;
		if(p_total_money) *p_total_money +=  p_client_menu_rec->menu_quant * p_menu_rec->price;
		ret = memcmp(p_client_menu_rec->menu_NO,"3",1); //1:凉菜
		if(ret==0)
		{
			num_cool++;
		} else {
			num_hot++;
		}
		counter1++;
	}

	if(p_total)  *p_total = counter1;
	if(p_num_cool) *p_num_cool = num_cool;
	if(p_num_hot) *p_num_hot = num_hot;
	return SUCCESSFUL;
}
//------------------------------------------------------------------------------------------------
//台号缩写   人数     服务员工号   手持机编号   记录数   时间
// 4          1         4             1           4      040709 120000
//------------------------------------------------------------------------------------------------
#define LEN_BACKUP_DATA_HEAD   26

//上传成功以后,备份客户的点菜信息
short backup_client_data()
{
	//删除原有数据
	int ret;
        if(ret=DB_erase_filesys(ID_TAB_CLIENT_MENU))
        {
	        DispStr_CE(0,2,"删除点菜数据出错",DISP_CENTER|DISP_CLRSCR);	
        	delay_and_wait_key( 0, EXIT_KEY_ALL, 0 );
        	return FAILURE;	
        }
	//DispStr_CE(0,2,"备份成功!",DISP_CENTER|DISP_CLRSCR);
	//delay_and_wait_key(3,EXIT_KEY_ALL,0);
	return SUCCESSFUL;
}

 //d_type -- 0: 当前记录 1:客户历史备份记录 2:客户暂存数据
unsigned long DB_count_records_client_data(int d_type,int seq_backup,unsigned short fsid)
{
	if(d_type == 0)
		return DB_count_records(ID_TAB_CLIENT_MENU);
	else if(d_type==1){ //历史数据
	   return *(unsigned long*)(CLIENT_DATA_BACKUP_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+10);
	}else if(d_type==2){//暂存数据
	   return *(unsigned long*)(CLIENT_DATA_TMP_SAVE_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+10);
	} 
}
// d_type -- 0: 当前记录 1:客户历史备份记录 2:客户暂存数据
void* DB_jump_to_record_client_data(int d_type,int seq_backup,unsigned long rec_num,char *p_flag)
{
	if(d_type == 0)
		return DB_jump_to_record(ID_TAB_CLIENT_MENU,rec_num,p_flag);
	else if(d_type==1){//历史数据
		*p_flag = 0;
		return (void*)(CLIENT_DATA_BACKUP_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+
					LEN_BACKUP_DATA_HEAD+(sizeof(tab_client_menu)+2)*rec_num );
	}else if(d_type==2){//暂存数据
		*p_flag = 0;
		return (void*)(CLIENT_DATA_TMP_SAVE_START_ADDR+seq_backup*LEN_BLOCK_CLIENT_BACKUP+
					LEN_BACKUP_DATA_HEAD+(sizeof(tab_client_menu)+2)*rec_num );
	}
}

int read_addr_com(unsigned char *addr_com) //读取手持的通讯地址
{
	info_handset info;
	
	memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info_handset));
	*addr_com = info.addr_com;
	return 0;
}
int read_num_floor(unsigned short *num_floor) //读取手持的楼层数量
{
	info_handset info;
	
	memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info_handset));
	*num_floor = info.num_floor;
	return 0;
}

//修改手持机上的手持机的无线通讯地址记录
//输入参数: addr_com 无线手持机的无线通讯地址
//输出参数: 无
int modify_addr_com(unsigned char addr_com) //修改手持的通讯地址
{
	unsigned char buf[1024];
	FLASH_wr_param f_w_p;
        info_handset  *info;
	
	//read 
	memcpy(buf,(char*)ADDR_HANDSET_INFO,sizeof(buf));
        if(FLASH_erase_block((char*)ADDR_HANDSET_INFO)!=0x80) return FAILURE;
	
	//write
	info = (info_handset*)buf;
	info->addr_com = addr_com;
	f_w_p.ptr_buffer = buf;
	f_w_p.ptr_FLASH_addr = (char*)ADDR_HANDSET_INFO;
	f_w_p.data_length = sizeof(buf)/2;
	if(FLASH_write_record(&f_w_p)==0x80) return SUCCESSFUL;
	else return FAILURE;
}

//修改flash上楼层层数记录
//输入参数:num_floor 楼层的总数
//输出函数:无
int modify_num_floor(unsigned short num_floor)
{
	unsigned char buf[1024];
	FLASH_wr_param f_w_p;
        info_handset  *info;
	//read 
	memcpy(buf,(char*)ADDR_HANDSET_INFO,sizeof(buf));
        if(FLASH_erase_block((char*)ADDR_HANDSET_INFO)!=0x80) return FAILURE;
        
	//write
	info = (info_handset*)buf;
	info->num_floor = num_floor;
	f_w_p.ptr_buffer = buf;
	f_w_p.ptr_FLASH_addr = (char*)ADDR_HANDSET_INFO;
	f_w_p.data_length = sizeof(buf)/2;
	if(FLASH_write_record(&f_w_p)==0x80) return SUCCESSFUL;
	else return FAILURE;
}

//在flash上存放一条楼层信道设置记录
int add_floor_channel_info(floor_channels  channel)//存放楼层的信道信息
{
	unsigned char buf_null[4] = {0xff,0xff,0xff,0xff};
	int i = 0;
	FLASH_wr_param f_w_p;
	
	for(i=0;i<100;i++) {
		if(!memcmp((char*)ADDR_HANDSET_INFO + sizeof(info_handset) + i*sizeof(floor_channels),buf_null,4)) 
			break;
	}
	if(i>=100) return FAILURE;
	
	f_w_p.ptr_buffer = &channel;
	f_w_p.ptr_FLASH_addr = (char*)(ADDR_HANDSET_INFO+4+i*sizeof(floor_channels));
	f_w_p.data_length = sizeof(floor_channels)/2;
	if(FLASH_write_record(&f_w_p)==0x80){
//		clr_scr();
//		dump_memory((char*)ADDR_HANDSET_INFO,10,0);
//		dump_memory((char*)DDR_HANDSET_INFO+10,10,1);
//		dump_memory((char*)ADDR_HANDSET_INFO+20,10,2);
//		dump_memory((char*)ADDR_HANDSET_INFO+30,10,3);
//		delay_and_wait_key(0,EXIT_KEY_ALL,0);
	 return SUCCESSFUL;
	}else return FAILURE;
	
}
//读取flash上的楼层设置数据
//输入参数:无
//输出参数: num_floor flash上的楼层设置记录的个数,如果有五层,将返回5
//          floors 楼层的编号数组,长度为num_floor返回
int read_floor_channel_info(int *num_floor,unsigned char *floors)
{
	info_handset info;
	unsigned char buf_null[4] = {0xff,0xff,0xff,0xff};
	int i;
	floor_channels ch;
	
	memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info));
	for(i=0;i<100;i++) {
		if(!memcmp((char*)ADDR_HANDSET_INFO + sizeof(info_handset) + i*sizeof(floor_channels),buf_null,4)) 
			break;
	}
	if(i>=100)
	{
		TRACE("AAA ERROR");
		return FAILURE;
	}
	
	if(i!=info.num_floor) 
	{
		TRACE("BBB ERROR");
		return FAILURE;
	}
	*num_floor = info.num_floor;
	for(i=0;i<info.num_floor;i++)
	{
		memcpy(&ch,(char*)ADDR_HANDSET_INFO + sizeof(info_handset) + i*sizeof(floor_channels),sizeof(floor_channels));
		*(floors+i) = ch.floor_id;
	}
	return SUCCESSFUL;
}

//存放服务器来的信道消息
//服务器传送的数据的格式:
//该数据采用十六进制数据: 
//        1. 每一层楼信道为:楼层号 + 楼层的信道号列表(变长).
//        2. 楼层间采用0xFF隔开 
//输入参数:paths: 服务器传来的数据
//         len  : paths 的长度
//输出参数:无
int save_info_path_set(unsigned char *paths,int len)
{
	unsigned char *pStart,*pEnd;
	floor_channels channels;
	int i;
	int count;
	FLASH_wr_param f_w_p;
	
	info_handset  info;

	for(count=0,i=0;i<len;i++)
	{
		if(*(paths+i) == 0xff) count++;
	}
	if(count==0) return FAILURE;
	//dump_memory(&count,4,0);
	//delay_and_wait_key(0,EXIT_KEY_ALL,0);
	memcpy(&info,(char*)ADDR_HANDSET_INFO,sizeof(info_handset));
	info.num_floor = count; //修改楼层的数量
	info.LCD_contrast = 30;
	if(FLASH_erase_block((char*)ADDR_HANDSET_INFO)!=0x80) return FAILURE;
	f_w_p.ptr_buffer = &info;
	f_w_p.ptr_FLASH_addr = (char*)ADDR_HANDSET_INFO;
	f_w_p.data_length = sizeof(info)/2;
	if(FLASH_write_record(&f_w_p)!=0x80) return FAILURE; //写头信息
	
	pEnd = paths-1;
	for(i=0;i<count;i++)
	{
		pStart = pEnd+1;
		while(*(++pEnd)!=0xff);
		if(pEnd-pStart>16) 
		{
			TRACE("GGG ERROR");
			return FAILURE;
		}
		memset(channels.channels,0,sizeof(channels.channels));
		channels.floor_id = *pStart;
		channels.channel_num = pEnd - pStart - 1;
		memcpy(channels.channels,pStart+1,channels.channel_num);
		if(add_floor_channel_info(channels)!=SUCCESSFUL) 
		{
			TRACE("add f i 0 err");
			return FAILURE;
		}
	}
	return SUCCESSFUL;
}

//---------------------------------------------------------------------------------------------
//End
//---------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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