📄 loaddbf.cpp
字号:
#if !defined( __STRING_H )
#include <String.h>
#endif // __STRING_H
#if !defined( __STDIO_H )
#include <StdIO.h>
#endif // __STDIO_H
#if !defined( __STDLIB_H )
#include <StdLib.h>
#endif // __STDLIB_H
#if !defined( __DOS_H )
#include <Dos.h>
#endif // __DOS_H
#if !defined( __IO_H )
#include <IO.h>
#endif // __IO_H
#define Uses_DBase
#define Uses_Blood
#include <ly.h>
#include "sj.h"
#include "sjdbf.h"
#include "sjcfg.h"
char fnTelIdx[] = "TEL.IDX";
int LCmp( const void *p1, const void *p2 )
{
long l1 = 0, l2 = 0;
memcpy( &l1, p1, 3 );
memcpy( &l2, p2, 3 );
long l = l1 - l2;
if( l < 0 ) return -1;
else if( l > 0 ) return 1;
else return 0;
}
void SJ::MakeIndex()
{
unsigned uRecNum = dbfSJ->GetRecordNum(),
uIdxLen = uRecNum * 5;
szTelIdx = new char[ uIdxLen ];
char *pTel = szTelIdx;
Blood *blood = new Blood( "正在生成索引", uRecNum );
for( unsigned i = 0; i < uRecNum; i ++ )
{
blood->Increase();
char szTel[ flTel + 1 ];
dbfSJ->GetField( i, fdTel, szTel );
szTel[ flTel ] = 0;
long lTel = atol( szTel );
memcpy( pTel, &lTel, 3 );
pTel += 3;
*( ( unsigned * )pTel ) = i;
pTel += 2;
}
qsort( szTelIdx, uRecNum, 5, LCmp );
FILE *fp = fopen( fnTelIdx, "wb" );
fwrite( szTelIdx, uIdxLen, 1, fp );
fclose( fp );
delete szTelIdx;
delete blood;
}
static BOOL IsFree( long lNo )
{
for( int j = 0; j < 5; j ++ )
if( lNo >= config.lFree[ j ][ 0 ] &&
lNo <= config.lFree[ j ][ 1 ] ) return TRUE;
return FALSE;
}
static char szDbfName[ 13 ];
#if defined( ShiZhu )
static void SetDbfName()
{
strcpy( szDbfName, "MONBU.DBF" );
}
#elif defined( XiTuo )
static void SetDbfName()
{
strcpy( szDbfName, "MONBU.DBF" );
}
#elif defined( YouYang ) || defined( PengShui )
static void SetDbfName()
{
strcpy( szDbfName, "MONBU.DBF" );
}
#else
static void SetDbfName()
{
struct date d;
getdate( &d );
sprintf( szDbfName, "YHF%02u%02u.DBF", d.da_year - 1900, d.da_mon );
}
#endif
//#if !defined( XiTuo )
void SJ::TransferData()
{
DBase *dbfYHF = new DBase( szDbfName, tpNoLoad );
dbfSJ->DeleteAll();
unsigned uCount = dbfYHF->GetRecordNum(),
uIdxLen = uCount * 5;
char *szCNoIdx = new char[ uIdxLen ];
char *pIdx = szCNoIdx;
Blood *blood = new Blood( "正在生成临时索引", uCount );
for( unsigned i = 0; i < uCount; i ++ )
{
blood->Increase();
long lCNo = dbfYHF->GetLong( i, fdCNo );
memcpy( pIdx, &lCNo, 3 );
pIdx += 3;
*( ( unsigned * )pIdx ) = i;
pIdx += 2;
}
qsort( szCNoIdx, uCount, 5, LCmp );
delete blood;
blood = new Blood( "正在建立系统数据库", uCount );
pIdx = szCNoIdx;
for( i = 0; i < uCount; i ++, pIdx += 2 )
{
blood->Increase();
char szRecord[ rlSJ ];
long lCNo = 0;
memcpy( &lCNo, pIdx, 3 );
pIdx += 3;
memset( szRecord, ' ', rlSJ );
unsigned uRec = *( unsigned * )pIdx;
#if defined( PengShui )
/*char szLB[ 1 ];
dbfYHF->GetField( uRec, fdLB, szLB );
if( *szLB != 'A' && *szLB != 'B' &&
*szLB != 'C' && *szLB != 'D' ) continue;*/
#elif defined( ShiZhu )
/*char szCNo[ 8 ];
dbfYHF->GetField( uRec, fdCNo, szCNo );
char ch = szCNo[ 1 ];
if( ch == '0' || ch == '1' || ch == '2' ||
ch == '3' || ch == '9' ) continue;*/
#else
if( lCNo == 0 || IsFree( lCNo ) ) continue;
#endif
dbfYHF->GetRecord( uRec, szRecord );
szRecord[ rlSJ - 1 ] = 'F';
dbfSJ->AppendRecord( szRecord );
/*#if defined( PengShui )
long lRec = dbfSJ->GetRecordNum() - 1;
double dTmp = dbfSJ->GetDouble( lRec, fdSHJC ) +
dbfSJ->GetDouble( lRec, fdXXFY );
dbfSJ->Replace( lRec, fdSHJC, dTmp );
dbfSJ->Replace( lRec, fdXXFY, 0.0 );
#endif*/
}
delete szCNoIdx;
delete dbfYHF;
dbfSJ->SaveData();
delete blood;
}
//#else
//#if defined( XiTuo )
// #define lOTChg lChg[ 0 ]
// #define lBNChg lChg[ 1 ]
// #define lMLTChg lChg[ 2 ]
// #define lTGTChg lChg[ 3 ]
//#elif defined( YouYang )
// #define lOTChg lChg[ 0 ]
// #define lBNChg lChg[ 3 ]
// #define lMLTChg lChg[ 2 ]
// #define lTGTChg lChg[ 1 ]
//#endif
/*const nameLen = 30;
struct HJD04
{
long lTel;
char szUserName[ nameLen ];
char szAdd[ 30 ];
int nType;
int nMask1;
int nMask2;
long lZero[ 4 ];
long lChg[ 4 ];
long lLCTChg;
long lLCTAdd;
long lLCTTimes1;
long lLCTTimes2;
long lSBTChg;
long lSBTAdd;
long lSBTSc;
long lSBTTimes;
long lLDTChg;
long lLDTAdd;
long lLDTSc;
long lLDTTimes;
long lNewChg;
long lRChg;
};
static void GetName( char *pDst, char *pSrc )
{
for( int i = 0; i < nameLen; i ++ )
if( pSrc[ i ] == 0 ) pSrc[ i ] = ' ';
memcpy( pDst, pSrc, nameLen );
for( i = 0; i < nameLen; i ++ ) //Cut the Tel. at end of name
if( pSrc[ i ] == ' ' ) break;
char ch = pDst[ i + 1 ];
if( ch >= '0' && ch <= '9' ) pDst[ i ] = 0;
}
void SJ::TransferData()
{
const hjd04Size = sizeof( HJD04 );
FILE *fp = fopen( szDbfName, "rb" );
long lCount = filelength( fileno ( fp ) ) / hjd04Size;
Blood *blood = new Blood( "正在建立系统数据库", lCount );
dbfSJ->DeleteAll();
HJD04 hjd04;
long lNo = 0;
for( long i = 0; i < lCount; i ++ )
{
blood->Increase();
fread( &hjd04, hjd04Size, 1, fp );
if( hjd04.lTel == 0 ) continue;
long lCNo = atof(hjd04.szAdd);
if( lCNo == 0 || IsFree( lCNo ) ) continue;
//if( hjd04.szAdd[0] != '0' || hjd04.szAdd[1] == '0' ||
// hjd04.szAdd[1] == '1' || hjd04.szAdd[1] == '9' ) continue;
dbfSJ->AppendRecord();
char str[nameLen + 1];
sprintf( str, "%lx", hjd04.lTel ); // Tel.
dbfSJ->Replace(lNo, fdTel, str);
dbfSJ->Replace(lNo, fdCNo, hjd04.szAdd); // ADD or CountNo
GetName( str, hjd04.szUserName ); // NAME
dbfSJ->Replace(lNo, fdName, str); // ADD or CountNo
double dLCTChg = ( double )( hjd04.lLCTChg + hjd04.lLCTAdd ) / 100.0, // SHF
dSBTChg = ( double )( hjd04.lSBTChg + hjd04.lSBTAdd ) / 100.0, // SBT
dLDTChg = ( double )( hjd04.lLDTChg + hjd04.lLDTAdd ) / 100.0, // CKCH
dTGTChg = ( double )hjd04.lTGTChg / 100.0, // DBF
dNewChg = ( double )hjd04.lNewChg / 100.0, // XywF
dMLTChg = ( double )hjd04.lMLTChg / 100.0, // RGCH
dOTChg = ( double )hjd04.lOTChg / 100.0, // QTF
dBNChg = ( double )hjd04.lBNChg / 100.0, // BNF
dRChg = ( double )hjd04.lRChg / 100.0, // ZFY
dYZChg = dRChg - dLCTChg - dSBTChg - dLDTChg - dTGTChg
- dNewChg - dMLTChg - dOTChg - dBNChg;
dbfSJ->Replace(lNo, fdChg11, dYZChg);
dbfSJ->Replace(lNo, fdChg05, dLCTChg);
dbfSJ->Replace(lNo, fdChg06, dSBTChg);
dbfSJ->Replace(lNo, fdChg03, dLDTChg);
dbfSJ->Replace(lNo, fdChg12, dTGTChg);
dbfSJ->Replace(lNo, fdChg13, dNewChg);
dbfSJ->Replace(lNo, fdChg14, dMLTChg);
dbfSJ->Replace(lNo, fdChg15, dOTChg);
dbfSJ->Replace(lNo, fdChg16, dBNChg);
dbfSJ->Replace(lNo, fdRChg, dRChg);
dbfSJ->Replace(lNo, fdOk, "F");
lNo ++;
}
fclose( fp );
dbfSJ->SaveData();
delete blood;
}
#endif*/
static char *szHelp[] =
{ //⑼
"下面将要自动完成所有的数据维护工作,",
" 这包括: ",
" ⑴从软盘装入下个月的交费数据 ",
" ⑵汇总这个月的交费数据库 ",
" ⑶汇总欠费数据 ",
" ⑷生成催缴电话薄(供催缴系统使用) ",
" ⑸生成本系统下个月的交费数据 ",
" ⑹建立交费数据索引表 ",
" ⑺生成查询电话薄(供查询系统使用) ",
" ⑻发送催缴和查询电话薄给语音系统 ",
" 整个过程无需人工干预,花费时间不",
"到10分钟而且不是太枯燥。 ",
" 按Esc或选择〔错〕放弃…… ",
NULL
};
static BOOL IsRightDate()
{
struct date d;
getdate( &d );
if( d.da_day < config.nDayEnd )
{
char str[ 44 - 22 - 2 + 2 + 1 ];
sprintf( str, "请在每月%u日后装入数据", config.nDayEnd );
ShowError( str );
return FALSE;
}
return TRUE;
}
static BOOL CopyFile()
{
SetDbfName();
char szSrc[ 16 ], szDst[ 19 ];
sprintf( szSrc, "A:\\%s", szDbfName );
//sprintf( szDst, "\\SJ\\%s", szDbfName );
strcpy( szDst, szDbfName );
if( !FileCopy( szSrc, szDst ) )
{
ShowError( "文件拷贝失败,请重试" );
return FALSE;
}
/*#if defined( ShiZhu )
MessageBox( "正在进行解压缩... " );
system( "PKUNZIP -o MONBU.ZIP >NUL" );
system( "arj e -y monbu.arj >nul" );
DeleteMsgBox();
#endif*/
return TRUE;
}
void SJ::LoadDbf()
{
if( !IsRightDate() ) return;
struct date d;
getdate( &d );
if( d.da_mon == config.nDataMonth )
{
ShowError( "本月数据已装入,您可以选择[重装当月数据]" );
return;
}
static char szTytle[] = "装入数据";
if( !Query( szTytle, szHelp ) ) return;
SetFree();
if( !CopyFile() ) return;
config.nDataMonth = d.da_mon;
config.nDataYear = d.da_year;
SaveConfig();
if( dbfSJ->GetRecordNum() != 0 ) TotalDbf();
TransferData();
MakeIndex();
MakeCxDbf();
SendYyDbf();
if( Query( "打印", "打印停机号码吗?" ) ) PrintStop();
}
void SJ::ReloadDbf()
{
if( !IsRightDate() ) return;
struct date d;
getdate( &d );
if( d.da_mon != config.nDataMonth )
{
ShowError( "本月数据未装入,不能重装" );
return;
}
SetFree();
if( !CopyFile() ) return;
TransferData();
MakeIndex();
MakeCxDbf();
SendYyDbf();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -