📄 total.cpp
字号:
float fData;
nPos = y*nCol;
if(nDataType == ftInteger){//整数类型
nData = 0;
for(i=0;i<nCol;i++)
nData += ((int *)pTotal)[nPos+i];
sprintf(pszText,"%d",nData);
}
else if(nDataType==ftFloat){//浮点数
fData =0.0f;
for(i=0;i<nCol;i++)
fData += ((float *)pTotal)[nPos+i];
sprintf(pszText,"%5.2f",fData);
}
else pszText[0]=FALSE;
return(pszText);
}
//获取列合计内容
char *GetTotalColSumText(void *pTotal,int nDataType,
int nCol,int nRow, int x,char *pszText)
{
int i,nData;
float fData;
if(nDataType == ftInteger){//整数类型
nData = 0;
for(i=0;i<nRow;i++)
nData += ((int *)pTotal)[i*nCol+x];
sprintf(pszText,"%d",nData);
}
else if(nDataType==ftFloat){//浮点数
fData =0.0f;
for(i=0;i<nRow;i++)
fData += ((float *)pTotal)[i*nCol+x];
sprintf(pszText,"%5.2f",fData);
}
else pszText[0]=FALSE;
return(pszText);
}
//获取总计内容
char *GetTotalSumText(void *pTotal,int nDataType,
int nCol,int nRow,char *pszText)
{
int i,j,nData;
float fData;
if(nDataType == ftInteger){//整数类型
nData = 0;
for(i=0;i<nRow;i++)
for(j=0;j<nCol;j++)
nData += ((int *)pTotal)[i*nCol+j];
sprintf(pszText,"%d",nData);
}
else if(nDataType==ftFloat){//浮点数
fData =0.0f;
for(i=0;i<nRow;i++)
for(j=0;j<nCol;j++)
fData += ((float *)pTotal)[i*nCol+j];
sprintf(pszText,"%5.2f",fData);
}
else pszText[0]=FALSE;
return(pszText);
}
//设置出场报表
int SetOutParkFluxReport(TOTALREPORT *pReport)
{
static char pszColField[]="OUTROADNO",
pszRowField[]="OUTTIME",
pszTitle[]="车辆出场流量统计",
pszTextTitle[]="日期";
DWORD nDate1,nDate2;
int nRow,nCol,nMode;
int nTotalSize,nRowFixSize,nColFixSize;
void *pHead,*pTotal,*pColFix,*pRowFix;
ZeroMemory(pReport,sizeof(TOTALREPORT));
GetTotalDate(&nDate1,&nDate2);
nMode = GetTotalMode();
if(nMode == TOTAL_DAY || nMode==TOTAL_MONTH)
nRow = GetDateDiff(nDate2,nDate1)+1;
else if(nMode == TOTAL_QUARTER)nRow=3;
else if(nMode == TOTAL_YEAR)nRow=12;
else nRow=0;
pHead = GetRoadwayList();
nCol = GetRoadNumWithType(pHead,ROADTYPE_OUT); //获取外出车道数量
nTotalSize=sizeof(int)*nCol*nRow;
nRowFixSize = nRow*sizeof(FIX_TDATETIME);
nColFixSize = nCol*sizeof(FIX_DWORD);
if(nRow>0 && nCol>0){
pTotal = (void *)GlobalAlloc(GPTR,nTotalSize+nRowFixSize+nColFixSize);
if(pTotal==NULL)//显示内存不够信息
ShowNotMemory(GetMainTitle());
}
else pTotal=NULL;
if(pTotal==NULL)return(FALSE);
pRowFix = ((char *)pTotal+nTotalSize);
pColFix = ((char *)pTotal+nTotalSize+nRowFixSize);
SetDateFix((FIX_TDATETIME *)pRowFix,nDate1,nDate2,nMode,nRow);
SetRoadwayFix((FIX_DWORD *)pColFix,pHead,nCol,ROADTYPE_OUT);
pReport->pRowFix = pRowFix;//报表固定行
pReport->pColFix = pColFix;
pReport->pTotal = pTotal;
pReport->nRow=nRow; pReport->nCol=nCol; //行数,列数
//行比较的字段名
lstrcpyn(pReport->szRowField,pszRowField,sizeof(pReport->szRowField));
//列比较的字段名
lstrcpyn(pReport->szColField,pszColField,sizeof(pReport->szColField));
//报表标题
lstrcpyn(pReport->szTitle,pszTitle,sizeof(pReport->szTitle));
//报表条件
GetTotalText(pReport->szCondition);
//固定行列交叉处标题
lstrcpyn(pReport->szTextTitle,pszTextTitle,sizeof(pReport->szTextTitle));
pReport->nRowType = ftDate; //日期类型
pReport->nRowStatus = TOTALDATA_INC; //数值递增
pReport->nColType = ftInteger; //整数类型
pReport->nRowStatus = TOTALDATA_EQUAL; //数值相等
pReport->nTotalType = ftInteger; //整数类型
return(TRUE);
}
//设置停车收费报表
int SetParkPriceReport(TOTALREPORT *pReport)
{
static char pszColField[]="OUTROADNO",
pszTotalField[]="PARKPRICE",
pszRowField[]="OUTTIME",
pszTitle[]="停车收费统计",
pszTextTitle[]="日期";
DWORD nDate1,nDate2;
int nRow,nCol,nMode;
int nTotalSize,nRowFixSize,nColFixSize;
void *pHead,*pTotal,*pColFix,*pRowFix;
ZeroMemory(pReport,sizeof(TOTALREPORT));
GetTotalDate(&nDate1,&nDate2);
nMode = GetTotalMode();
if(nMode == TOTAL_DAY || nMode==TOTAL_MONTH)
nRow = GetDateDiff(nDate2,nDate1)+1;
else if(nMode == TOTAL_QUARTER)nRow=3;
else if(nMode == TOTAL_YEAR)nRow=12;
else nRow=0;
pHead = GetRoadwayList();
nCol = GetRoadNumWithType(pHead,ROADTYPE_OUT); //获取外出车道数量
nTotalSize=sizeof(int)*nCol*nRow;
nRowFixSize = nRow*sizeof(FIX_TDATETIME);
nColFixSize = nCol*sizeof(FIX_DWORD);
if(nRow>0 && nCol>0){
pTotal = (void *)GlobalAlloc(GPTR,nTotalSize+nRowFixSize+nColFixSize);
if(pTotal==NULL)//显示内存不够信息
ShowNotMemory(GetMainTitle());
}
else pTotal=NULL;
if(pTotal==NULL)return(FALSE);
pRowFix = ((char *)pTotal+nTotalSize);
pColFix = ((char *)pTotal+nTotalSize+nRowFixSize);
SetDateFix((FIX_TDATETIME *)pRowFix,nDate1,nDate2,nMode,nRow);
SetRoadwayFix((FIX_DWORD *)pColFix,pHead,nCol,ROADTYPE_OUT);
pReport->pRowFix = pRowFix;//报表固定行
pReport->pColFix = pColFix;
pReport->pTotal = pTotal;
pReport->nRow=nRow; pReport->nCol=nCol; //行数,列数
//行比较的字段名
lstrcpyn(pReport->szRowField,pszRowField,sizeof(pReport->szRowField));
//列比较的字段名
lstrcpyn(pReport->szColField,pszColField,sizeof(pReport->szColField));
//报表标题
lstrcpyn(pReport->szTitle,pszTitle,sizeof(pReport->szTitle));
//报表条件
GetTotalText(pReport->szCondition);
//固定行列交叉处标题
lstrcpyn(pReport->szTextTitle,pszTextTitle,sizeof(pReport->szTextTitle));
pReport->nRowType = ftDate; //日期类型
pReport->nRowStatus = TOTALDATA_INC; //数值递增
pReport->nColType = ftInteger; //整数类型
pReport->nRowStatus = TOTALDATA_EQUAL; //数值相等
pReport->nTotalType = ftFloat; //浮点数类型
//统计的字段名
lstrcpyn(pReport->szTotalField,pszTotalField,sizeof(pReport->szTotalField));
return(TRUE);
}
//设置用户交费报表
int SetUserPaidReport(TOTALREPORT *pReport)
{
static char pszColField[]="USERTYPE",
pszTotalField[]="MONEY",
pszRowField[]="PAYTIME",
pszTitle[]="用户交费统计",
pszTextTitle[]="日期";
DWORD nDate1,nDate2;
int nRow,nCol,nMode;
int nTotalSize,nRowFixSize,nColFixSize;
void *pHead,*pTotal,*pColFix,*pRowFix;
ZeroMemory(pReport,sizeof(TOTALREPORT));
GetTotalDate(&nDate1,&nDate2);
nMode = GetTotalMode();
if(nMode == TOTAL_DAY || nMode==TOTAL_MONTH)
nRow = GetDateDiff(nDate2,nDate1)+1;
else if(nMode == TOTAL_QUARTER)nRow=3;
else if(nMode == TOTAL_YEAR)nRow=12;
else nRow=0;
pHead = GetPriceList();
nCol = LookCount(pHead); //用户类型数量
nTotalSize=sizeof(int)*nCol*nRow;
nRowFixSize = nRow*sizeof(FIX_TDATETIME);
nColFixSize = nCol*sizeof(FIX_DWORD);
if(nRow>0 && nCol>0){
pTotal = (void *)GlobalAlloc(GPTR,nTotalSize+nRowFixSize+nColFixSize);
if(pTotal==NULL)//显示内存不够信息
ShowNotMemory(GetMainTitle());
}
else pTotal=NULL;
if(pTotal==NULL)return(FALSE);
pRowFix = ((char *)pTotal+nTotalSize);
pColFix = ((char *)pTotal+nTotalSize+nRowFixSize);
SetDateFix((FIX_TDATETIME *)pRowFix,nDate1,nDate2,nMode,nRow);
SetPriceFix((FIX_DWORD *)pColFix,pHead,nCol);
pReport->pRowFix = pRowFix;//报表固定行
pReport->pColFix = pColFix;
pReport->pTotal = pTotal;
pReport->nRow=nRow; pReport->nCol=nCol; //行数,列数
//行比较的字段名
lstrcpyn(pReport->szRowField,pszRowField,sizeof(pReport->szRowField));
//列比较的字段名
lstrcpyn(pReport->szColField,pszColField,sizeof(pReport->szColField));
//报表标题
lstrcpyn(pReport->szTitle,pszTitle,sizeof(pReport->szTitle));
//报表条件
GetTotalText(pReport->szCondition);
//固定行列交叉处标题
lstrcpyn(pReport->szTextTitle,pszTextTitle,sizeof(pReport->szTextTitle));
pReport->nRowType = ftDate; //日期类型
pReport->nRowStatus = TOTALDATA_INC; //数值递增
pReport->nColType = ftInteger; //整数类型
pReport->nRowStatus = TOTALDATA_EQUAL; //数值相等
pReport->nTotalType = ftFloat; //浮点数类型
//统计的字段名
lstrcpyn(pReport->szTotalField,pszTotalField,sizeof(pReport->szTotalField));
return(TRUE);
}
//根据统计日期查询一个表
int QueryTableWithTotalDate(TADOQuery *pQuery,char *pszTable,char *pszField)
{
int rc;
char szBuf[100];
DWORD nDate1,nDate2;
TDateTime t1,t2;
GetTotalDate(&nDate1,&nDate2);
t1 = DWORDToTDate(nDate1);
t2 = DWORDToTDate(nDate2);
wsprintf(szBuf,"%s>=%d AND %s<%d",pszField,int(t1),pszField,int(t2)+1);
rc=QueryOneADOTable(pQuery,pszTable,szBuf,NULL);
return(rc);
}
//统计入场流量
int TotalInparkFlux(TTotalFrame *pFrame,int nMode)
{
int rc;
TADOQuery *pQuery;
TOTALREPORT Report;
rc = ReworkTotalCondition(pFrame,nMode);
if(rc){
rc=SetInParkFluxReport(&Report);
if(rc){ //用OtherADOQuery元件查询一个表中记录
pQuery = (TADOQuery *)GetOtherQuery();
QueryTableWithTotalDate(pQuery,GetParkrecTableName(),"INTIME");
TotalOneReport(pQuery,&Report);
ShowOneReport(pFrame,&Report);
FreeOneReport(&Report);
}
}
return(rc);
}
//统计出场流量
int TotalOutparkFlux(TTotalFrame *pFrame,int nMode)
{
int rc;
TADOQuery *pQuery;
TOTALREPORT Report;
rc = ReworkTotalCondition(pFrame,nMode);
if(rc){
rc=SetOutParkFluxReport(&Report);
if(rc){ //用OtherADOQuery元件查询一个表中记录
pQuery = (TADOQuery *)GetOtherQuery();
QueryTableWithTotalDate(pQuery,GetParkrecTableName(),"OUTTIME");
TotalOneReport(pQuery,&Report);
ShowOneReport(pFrame,&Report);
FreeOneReport(&Report);
}
}
return(rc);
}
//统计停车收费
int TotalParkPrice(TTotalFrame *pFrame,int nMode)
{
int rc;
TADOQuery *pQuery;
TOTALREPORT Report;
rc = ReworkTotalCondition(pFrame,nMode);
if(rc){
rc=SetParkPriceReport(&Report);
if(rc){//用OtherADOQuery元件查询一个表中记录
pQuery = (TADOQuery *)GetOtherQuery();
QueryTableWithTotalDate(pQuery,GetParkrecTableName(),"OUTTIME");
TotalOneReport(pQuery,&Report);
ShowOneReport(pFrame,&Report);
FreeOneReport(&Report);
}
}
return(rc);
}
//统计用户交费
int TotalUserPaid(TTotalFrame *pFrame,int nMode)
{
int rc;
TADOQuery *pQuery;
TOTALREPORT Report;
rc = ReworkTotalCondition(pFrame,nMode);
if(rc){
rc=SetUserPaidReport(&Report);
if(rc){//用OtherADOQuery元件查询一个表中记录
pQuery = (TADOQuery *)GetOtherQuery();
QueryTableWithTotalDate(pQuery,GetMoneyTableName(),"PAYTIME");
TotalOneReport(pQuery,&Report);
ShowOneReport(pFrame,&Report);
FreeOneReport(&Report);
}
}
return(rc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -