📄 dosj.cpp
字号:
extern int LCmp( const void *p1, const void *p2 );
unsigned uCount = dbfSJ->GetRecordNum();
char *p = ( char * )bsearch( &lTel, szTelIdx, uCount, 5, LCmp );
if( p != NULL ) return *( ( unsigned * )( p + 3 ) );
else return 0xffff;
}
BOOL SJ::DoSJ()
{
if( !CheckIn() ) return FALSE;
Window *winDoSJ = new Window( winTop, winWidth, winHeight, NULL, tpNoSave );
ShowBill( TRUE );
winDoSJ->DrawTytle( ttTelLeft, ttTelTop, "电话号码或合同号", 0 );
const flNumber = 16;
static char szNumber[ flNumber + 1 ];
memset( szNumber, ' ', flNumber );
szNumber[ flNumber ] = 0;
Field *fdNumber = new Field( fdTelLeft, fdTelTop, fdTelWidth, szNumber, flNumber );
const flOk = 6;
char szOk[ flOk + 1 ];
memset( szOk, ' ', flOk );
szOk[ flOk ] = 0;
Field *fdOkFlag = new Field( fdOkLeft, fdOkTop, fdOkWidth, szOk, flOk );
winDoSJ->DrawTytle( ttInputLeft, ttInputTop, "现收到", 0 );
char szInput[ flRChg + 1 ];
memset( szInput, ' ', flRChg );
szInput[ flRChg ] = 0;
Field *fdInput = new Field( fdInputLeft, fdInputTop, fdInputWidth, szInput, flRChg );
winDoSJ->DrawTytle( fdInputLeft + fdInputWidth + 2, fdInputTop + 4, "元", 0 );
winDoSJ->DrawTytle( ttOutputLeft, ttOutputTop, "应找出", 0 );
char szOutput[ flRChg + 1 ];
memset( szOutput, ' ', flRChg );
szOutput[ flRChg ] = 0;
Field *fdOutput = new Field( fdOutputLeft, fdOutputTop, fdOutputWidth, szOutput, flRChg );
winDoSJ->DrawTytle( fdOutputLeft + fdOutputWidth + 2, fdOutputTop + 4, "元", 0 );
const WORD cmDoSJ = 0x9999;
Button *btnOk = new Button( btnOkLeft, btnOkTop, "", cmDoSJ, btnOkWidth, btnOkHeight );
HideCursor();
extern char okIcon[];
putimage( btnOkLeft + btnOkWidth / 2 - 28, btnOkTop + btnOkHeight / 2 - 11, okIcon, 0 );
setcolor( 0, 7 );
outtextxy( btnOkLeft + btnOkWidth / 2 - 2, btnOkTop + btnOkHeight / 2 - 7, "收讫" );
ShowCursor();
winDoSJ->Insert( fdNumber, fdInput, btnOk, NULL );
unsigned uRecNum = dbfSJ->GetRecordNum();
char str[ flNumber ];
dbfSJ->GetField( uRecNum / 2, fdTel, str );
nTelLen = FieldLen( str, flTel );
szHelp[ 2 ][ 13 ] = '0' + nTelLen;
dbfSJ->GetField( uRecNum / 2, fdCNo, str );
nCNoLen = FieldLen( str, flCNo );
if( nCNoLen == 0 ) nCNoLen = 4;
szHelp[ 2 ][ 30 ] = '0' + nCNoLen;
LoadIndex();
DBase *dbfCj = new DBase( fnCjDbf, tpNoLoad );
ShowSJStatus();
unsigned uCurRec = 0xffff,
uTotSjRec = 1;
char bOk[ flBool ];
BOOL bResult = FALSE;
dInput = 0.0;
for(;;)
{
Event event;
while( !GetEvent( event ) );
winDoSJ->HandleEvent( event );
sjWin->HandleEvent( event );
if( event.what == evKeyboard )
{
if( event.key == kbF2 )
{
Shift();
ShowSJStatus();
}
else if( event.key == kbF3 )
{
bResult = TRUE;
break;
}
else if( event.key == kbF4 && *bOk == 'T' )
{
szReprint = "[补]";
PrintBill();
}
}
else if( event.what == evCommand )
{
szReprint = " ";
if( event.command == cmOk )
{
if( winDoSJ->object == fdInput )
{
if( *szInput == ' ' || uCurRec == 0xffff ) continue;
dInput = atof( szInput );
dOutput = dInput - dTotChg;
if( dInput == 0.0 ) ShowError( "现收到金额输入错误" );
else if( dOutput < -0.005 )
{
#if defined( ShiZhu ) || defined( PengShui ) || defined( XiTuo )
ShowError( "现收到金额少于应收金额" );
bGetPart = FALSE;
#else
if( dInput - dTotRChg < -0.005 )
{
char szError[ 76 - 41 - 5 + 9 + 1 ];
sprintf( szError, "现收到金额少于当月应收金额(%1.2lf元)", dTotRChg );
ShowError( szError );
bGetPart = FALSE;
}
else bGetPart = Query( "收缴", "现收到金额少于应收金额,确定收取吗?" );
#endif
}
else bGetPart = FALSE;
if( dOutput >= 0.0 || bGetPart )
{
char szMoney[ flRChg + 1 ];
sprintf( szMoney, "%1.2lf", dOutput );
fdOutput->Update( szMoney );
winDoSJ->Reselect( btnOk );
}
continue;
}
else if( *szNumber == ' ' ) continue;
uCurRec = 0xffff;
unsigned nLen = CheckNumber( szNumber );
if( nLen == nCNoLen
#if defined( ShiZhu )
&& ( *szNumber == '4' || *szNumber == '8' ||
( *szNumber == '9' && ( szNumber[1] == '6' || szNumber[1] == '8' ) ) )
#elif defined( XiTuo )
&& ( *szNumber == '0' || *szNumber == '1' )
#elif !defined( PengShui )
|| nLen == nCNoLen + 1
#else
#endif
)
{
long lRec = dbfSJ->Search( szNumber, fdCNo );
if( lRec >= 0 )
{
uCurRec = lRec;
long lTmp = lRec + 1;
while( lTmp < dbfSJ->GetRecordNum() )
{
dbfSJ->GetField( lTmp, fdCNo, str );
if( memcmp( szNumber, str, flCNo ) != 0 ) break;
lTmp ++;
}
uTotSjRec = lTmp - uCurRec;
}
}
else if( nLen == nTelLen || nLen == 6
#if defined( ShiZhu ) || defined( XiTuo )
|| nLen == 3 || nLen == 4 || nLen == 5 || nLen == 6 || nLen == 7 || nLen == 8
#elif defined( YouYang )
|| nLen == 7
#endif
)
{
uCurRec = SearchTel( szNumber );
if( uCurRec != 0xffff )
{
char szCNo[ flCNo + 1 ];
dbfSJ->GetField( uCurRec, fdCNo, szCNo );
long lRec = dbfSJ->Search( szCNo, fdCNo );
if( lRec >= 0 )
{
long lTmp = lRec + 1;
while( lTmp < dbfSJ->GetRecordNum() )
{
dbfSJ->GetField( lTmp, fdCNo, str );
if( memcmp( szCNo, str, flCNo ) != 0 ) break;
lTmp ++;
}
lRec = lTmp - lRec;
if( lRec > 1 ) ShowMessage( "该电话号码的合同号下有多个用户" );
}
}
if( uCurRec == 0xffff &&
dbfQf->Search( szNumber, fdQfTel ) >= 0 )
{
dbfSJ->AppendRecord();
dbfSJ->Replace( uRecNum, fdTel, szNumber );
dbfSJ->Replace( uRecNum, fdCNo, "不知道" );
dbfSJ->Replace( uRecNum, fdOk, "F" );
uCurRec = uRecNum;
uRecNum ++;
LoadIndex( TRUE );
}
uTotSjRec = 1;
}
else ShowError( "错误的电话号码或合同号" );
if( uCurRec != 0xffff )
{
FillBill( uCurRec, uTotSjRec );
dbfSJ->GetField( uCurRec, fdOk, bOk );
fdOkFlag->Update( *bOk == 'T' ? szTrue : szFalse );
if( *bOk == 'F' ) winDoSJ->Reselect( fdInput );
continue;
}
else if( nLen == nTelLen || nLen == nCNoLen
|| nLen == nCNoLen + 1
)
ShowError( "本局没有这个电话号码或合同号" );
fdNumber->Clear();
winDoSJ->Reselect( fdNumber );
}
else if( event.command == cmDoSJ )
{
if( uCurRec != 0xffff )
{
if( *bOk == 'T' ) ShowError( "该用户已交费" );
else
{
fdOkFlag->Update( szTrue );
*bOk = 'T';
if( dInput == 0 || dOutput > 0 ) dOutput = 0;
double dAverySub = dOutput / ( double )uTotSjRec,
dGetQf = dInput - dTotRChg;
long *lCjRec = new long[ uTotSjRec ];
unsigned uTotCjRec = 0;
for( unsigned i = 0; i < uTotSjRec; i ++, uCurRec ++ )
{
dbfSJ->Replace( uCurRec, fdOk, "T" );
AddLog( uCurRec, dAverySub );
char szTel[ flTel ];
dbfSJ->GetField( uCurRec, fdTel, szTel );
long lRec = dbfCj->Search( szTel, fdCjTel );
if( lRec >= 0 )
{
dbfCj->DeleteRecord( lRec );
lCjRec[ uTotCjRec ++ ] = lRec;
}
for( unsigned j = 0; j < uTotQfRec[ i ]; j ++, lQfRec[ i ] ++ )
{
long lRec = lQfRec[ i ];
if( !bGetPart ) dbfQf->DeleteRecord( lRec );
else
{
double dQf = dbfQf->GetDouble( lRec, fdQfRChg );
if( dGetQf >= dQf )
{
dGetQf -= dQf;
dbfQf->DeleteRecord( lRec );
}
else if( dGetQf > 0 )
{
dQf -= dGetQf;
dGetQf = 0.0;
dbfQf->Replace( lRec, fdQfRChg, dQf );
}
}
}
}
ChangeYyCjDbf( lCjRec, uTotCjRec );
delete lCjRec;
dbfSJ->SaveData();
dbfQf->SaveData();
dbfCj->SaveData();
PrintBill();
config.lBillNo ++;
}
fdNumber->Clear();
fdInput->Clear();
dInput = 0.0;
fdOutput->Clear();
winDoSJ->Reselect( fdNumber );
}
}
else if( event.command == cmHelp ) ShowHelp( szHelp );
else if( event.command == cmCancel ) break;
else if( event.command == cmClose )
{
bResult = TRUE;
break;
}
}
}
DelQfPara();
CloseIndex();
delete dbfCj;
delete fdOkFlag;
delete fdOutput;
delete winDoSJ;
sjMenu->Draw();
ClearDutyNum();
if( bRequireSend )
ShowError( "网络故障,要求检查后重新启动并发送语音数据" );
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -