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

📄 db.c

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 C
📖 第 1 页 / 共 2 页
字号:
//*********************************************************************************************
//File    : db.c
//Function: define database table struct and size
//          format database and give some simple data for test
//          backup data manage, handset parameters manage
//*********************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
#include <database.h>

#include "db.h"
#include "hd_dt_wl.h"
#include "ExEH0218.h"

extern char FLASH_DB_START;
extern unsigned char g_price_type;
//how many blocks of every db table 
short g_blocknum[NUMOFDBTABLE] = {4,1,1};

//every record's size of db table          
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 char g_id_self;            
extern unsigned char g_id_server;          
                                           
unsigned short g_rec_size[NUMOFDBTABLE] = {sizeof(TAB1_STRUCT),
					   sizeof(TAB2_STRUCT),
					   sizeof(TAB3_STRUCT)};

unsigned char *g_strTableName[NUMOFDBTABLE] = {"主料表",
					       "点菜信息",
					       "附加项"};//建议四个字
short clear_all_backup_data();

//-----------------------------------------------------------------------------
//Function   : init_tab1() <--> init_tab5() and init_data()
//Description: give some simple data for test
//-----------------------------------------------------------------------------
int init_tab1()
{
	
}

int init_tab2()
{

}

int init_tab3()
{
}

int init_tab4()
{
		
}

int init_tab5()
{
	
}

void init_data()
{
	int i;
	unsigned char str_dsp[100];
	unsigned long count;
	char *recwfbuf;
	char fsid;
	char flag;
	
	DispStr_CE(0,0,"初始化表1",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab1();
    
	DispStr_CE(0,0,"初始化表2",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab2();
    
	DispStr_CE(0,0,"初始化表3",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab3();
	
	DispStr_CE(0,0,"初始化表4",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab4();
	
	DispStr_CE(0,0,"初始化表5",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"......",DISP_CENTER);
	init_tab5();
	
	clr_scr();
	for(i=0;i<NUMOFDBTABLE;i++)
	{
		count = DB_count_records(i);
		sprintf(str_dsp,"tab%d:%d",i,count);
		DispStr_CE(0,i,str_dsp,DISP_POSITION|DISP_5x7);
		getch();
	}
	for(fsid=0;fsid<NUMOFDBTABLE;fsid++)
	{
		for(i=0;i<NUMOFDBTABLE;i++)
		{
			clr_scr();
		    	recwfbuf = (char*)DB_jump_to_record(fsid, i, &flag);	
			sprintf(str_dsp,"tab%d:%d",fsid,i);
			DispStr_CE(0,0,str_dsp,DISP_POSITION|DISP_5x7);
			dump_memory(recwfbuf,10,1);
			dump_memory(recwfbuf+10,10,2);
			dump_memory(recwfbuf+20,10,3);
			dump_memory(recwfbuf+30,10,4);
			dump_memory(recwfbuf+40,10,5);
			dump_memory(recwfbuf+50,10,6);
			dump_memory(recwfbuf+60,10,7);
			dump_memory(recwfbuf+70,10,8);
			getch();
		}
	}
}

//-------------------------------------------------------------------------------
//Function     : init_db
//Descritiption: format database
//Input	       : None
//Output       : None
//Return       :
//Note         : Please format your database followed this function one by one
//-------------------------------------------------------------------------------
int init_db()
{
	int ret;
	int i;
	char strDsp[80];
	typ_RTC_time_rec dRec;
		
//	if(get_flash_size()<2)
//	{
//		DispStr_CE(0,1,"Flash空间不够",DISP_CENTER|DISP_CLRSCR);
//		DispStr_CE(0,3,"无法初始化数据库",DISP_CENTER);
//		delay_and_wait_key( 0, EXIT_KEY_ALL, 0 ); 
//		return FAILURE;
//	}
	clr_scr();
	get_db_sys_param(&dsp);
	DispStr_CE(0,0,"初始化数据库",DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,2,"可能需要较长时间",DISP_CENTER);
	DispStr_CE(0,4,"稍后......",DISP_CENTER);
    	dRec.l_word =RTC_read_time();
	erase_db_sys();
	for (i =0; i < NUMOFDBTABLE; i++)
	{
		ret = DB_format_db(i, g_blocknum[i], g_rec_size[i]);
		if(ret)
		{
			DispStr_CE(0,0,"DB_format_db 错误!",DISP_CENTER|DISP_CLRSCR);
			dump_memory((unsigned char*)&ret,sizeof(ret),2);
			dump_memory((unsigned char*)&i,sizeof(i),4);
			while(1);
		}
	}
	file_sys_cnt=DB_check_db(filesys); 
//	init_data();
	DispStr_CE(0,2,"初始化成功",DISP_CENTER|DISP_CLRSCR);
        sprintf( strDsp, "Start:%04d:%02d:%02d",dRec.fields.hour,dRec.fields.minute,dRec.fields.second);
	DispStr_E(0,6,strDsp,DISP_5x7|DISP_CENTER);
        dRec.l_word =RTC_read_time();
        sprintf( strDsp, "  End:%04d:%02d:%02d",dRec.fields.hour,dRec.fields.minute,dRec.fields.second);
	DispStr_E(0,7,strDsp,DISP_5x7|DISP_CENTER);
	delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
	return 0;
}
//------------------------------------------------------------------------------------------
//Function  : DB_tab_check
//Desciption: check the database's data validity by CRC
//-------------------------------------------------------------------------------------------
int DB_tab_check(int fsid)
{
	long count;
	int i;
	short ret;
	unsigned char str_dsp[100];
	short flag = 0;

	count = DB_count_records(fsid);
	sprintf(str_dsp,"校验%s",g_strTableName[fsid]);
	DispStr_CE(0,0,str_dsp,DISP_POSITION|DISP_CLRSCR);
	sprintf(str_dsp,"共%d条,稍候...",count);
	DispStr_CE(0,2,str_dsp,DISP_POSITION);
	for(i=0;i<count;i++)
	{
		ret = DB_check_record(fsid,i);
		if(!ret) {
			sprintf(str_dsp,"检验表%d出错%d",fsid,i);
			DispStr_CE(0,4,str_dsp,DISP_POSITION);
			flag = 1;
			if(delay_and_wait_key( 0, EXIT_KEY_ALL, 0 ) == EXIT_KEY_F1)
			  return FAILURE;
		}
		sprintf(str_dsp,"%d",i+1);
		DispStr_CE(2,4,str_dsp,DISP_POSITION);
	}
	if(flag) 
		return FAILURE;
	else 
	{
		DispStr_CE(0,6,"校验成功!",DISP_POSITION);
	        return 	SUCCESSFUL;
	}
}
//------------------------------------------------------------------------------------------------------
//Function     : chk_sys_db_format
//Descritiption: check the handset database struct, and decide whether to format the handset database or not
//		 用于手持机第一次启功时判断是否需要初始化数据库
//Input	       : None
//Output       : None
//Return       :
//Note         : Please apply the function when handset reset. two functions:get_db_sys_param and DB_check_db 
//		 must be applied when handset reset, otherwise problem will occur when to read and write database
//---------------------------------------------------------------------------------------------------------------
int chk_sys_db_format()
{
	// init for database 
	int ret,i;
	int db_flag = 0;
	char str_dsp[80];
	
	get_db_sys_param(&dsp);
	if(!(file_sys_cnt = DB_check_db(filesys))) 
	{
		DispStr_CE(0,0,"数据库未初始化",DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,2,"Enter - 初始化",DISP_CENTER);
		DispStr_CE(0,4,"其他  - 取消",DISP_CENTER);
		ret = delay_and_wait_key(0,EXIT_KEY_ALL,0);
		if(ret == EXIT_KEY_ENTER) {
		   BEEPER_sound(0);
	           init_db();
	        }
	}
	if(file_sys_cnt != NUMOFDBTABLE) {
		sprintf(str_dsp,"cnt:%d",file_sys_cnt);
		DispStr_CE(0,0,str_dsp,DISP_CENTER|DISP_CLRSCR);
		delay_and_wait_key(0,EXIT_KEY_ALL,0);
		db_flag	= 1;
	} else {
		for(i=0;i<NUMOFDBTABLE;i++)
		{
			if(filesys[i].block_cnt != g_blocknum[i]-1) 
			{
				sprintf(str_dsp,"db error:%d,%d,%d",filesys[i].block_cnt,
								    g_blocknum[i]-1,
								    i);
		        	DispStr_CE(0,0,str_dsp,DISP_CENTER|DISP_CLRSCR);
		        	delay_and_wait_key(0,EXIT_KEY_ALL,0);
				db_flag = 1;
				break;	
			}
		}
	}
	if(db_flag) {
		DispStr_CE(0,0,"数据库格式不对",DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,2,"需要重新初始化",DISP_CENTER);
		DispStr_CE(0,4,"Enter - 初始化",DISP_CENTER);
		DispStr_CE(0,6,"其他  - 取消",DISP_CENTER);
		ret = delay_and_wait_key(0,EXIT_KEY_ALL,0);
		if(ret == EXIT_KEY_ENTER) {
		   BEEPER_sound(0);
	           init_db();
	        }				
	}
	return SUCCESSFUL;
}
//-------------------------------------------------------------------------------------------------------
//济南辰生的数据库应用部分
//统计客户点菜:p_total:总数 所有有效数据的条数 
//              p_total_money:总金额
//              p_num_cool:凉菜
//              p_num_hot:热菜
//              p_num_upld:已经上传个数
//注意:如果传入的指针为0,将不作该项的统计
//--------------------------------------------------------------------------------------------------------
short counter_client_disk_total(unsigned long *p_total)
{
	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++)
	{

⌨️ 快捷键说明

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