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

📄 total.cpp

📁 停车场用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  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 + -