📄 db.c
字号:
//*********************************************************************************************
//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 + -