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

📄 statinfo.cpp

📁 高速公路收费系统车道软件. 功能: 1 检测公路过往车辆 2 收费过程控制和数据采集 3 车辆信息和图片上传服务器.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// StatInfo.cpp: implementation of the CStatInfo class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "lane_new.h"
#include "StatInfo.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

extern CLane_newApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//	以下信息只需要保存到内存,掉电或程序退出后无须恢复
static UCHAR chCrReason;			//身份卡被拒绝原因
static UCHAR chAkStatus;			//文件下传状态
static UCHAR chAkIndex;				//文件下传索引
static ULONG nDeviceStatus;			//保存车道外设的状态
//	设备重新上电后许多故障应当消失,因此掉电时无须保存故障状态

//	以下定义需要长久保存的统计(保存到磁盘中以防止掉电丢失)

//	以下定义MH消息中用到的信息
struct MH_Data{
	//缩进为唐勇军加
	UINT nMhTotalCount;				//小时内总车流
	UINT nMhViolateCount;			//小时内违章车车流
	UINT nMhModifyCount;			//小时内修改次数
	UINT nMhLoopCount;				//小时内感应车流数
	UINT nMhTypeCount[9];			//小时内分车类统计的总车流//
	UINT nMhClassTypeCount[9][9];	//小时内分车型、车类统计的总车流
    UINT nMhBadInvoiceCount;		//小时内的产生的废票数
	UINT nMhClassBadInvoiceCount[9];//小时内分车型统计的废票数
    ULONG nMhTotalMoney;			//小时内总金额
	ULONG nMhBadMoney;				//小时内废票总金额
	ULONG nMhClassMoney[10];		//小时内分车型统计的各型车金额
	UINT nMhNormalClassCount[10];	//小时内分车型统计正常车车流
	UINT nMhClassCount[10];			//小时内分车型统计车流
};
static struct MH_Data MhData;

//	以下定义ES消息需要的信息
struct ES_Data{
	UINT nEsTotalCount;				//班次内总车流
	UINT nEsViolateCount;			//班次内违章车流
	UINT nEsModifyCount;			//班次内更改次数
	UINT nEsLoopCount;				//班次内感应车流数
	UINT nEsTypeCount[9];			//班次内分车类统计的总车流
	UINT nEsClassTypeCount[9][9];	//班次内分车型、车类统计的总车流
    UINT nEsBadInvoiceCount;		//班次内产生的废票数
	UINT nEsClassBadInvoiceCount[9];//班次内分车型统计的废票数
    ULONG nEsTotalMoney;			//班次内总金额
	ULONG nEsClassMoney[9];			//班次内分车型统计的人民币收入
	ULONG nEsBadMoney;				//班次内废票总金额
	ULONG nEsBadClassMoney[9];		//班次内分车型统计的废票金额
	UINT nEsNormalClassCount[10];	//班次内分车型统计正常车车流
	UINT nEsClassCount[10];			//班次内分车型统计车流
};
static struct ES_Data EsData;

//	以下定义车道数据
struct Lane_Data{
	UINT nCollectNO;				//操作员号码
	BOOL nCollectType;				//操作员类型(TRUE:收费员)
	UCHAR chShiftNO;				//班次号
	UCHAR chLastShiftNO;			//上个班次的班次号
	UCHAR chLaneStatus;				//车道状态
	UCHAR chWorkMode;				//车道工作模式
	ULONG nShiftTime;				//开班时间:dddhhmmss
	__int64 nEndTime;				//交班时间:yymmddhhmmss
	long nInvoiceStart[7];		//发票起号
	long nInvoiceEnd[7];			//发票止号
	long nInvoiceNow[7];			//当前发票号码
	BOOL bHasPreFlag;				//已经预打印发票
};
static struct Lane_Data LaneData;

//	以下定义保护现场信息
struct Postevs_Info{
	UINT nYear;
	UINT nMonth;
	UINT nDay;
	UINT nHour;
	UINT nStatDate;
	UINT nDayCountOfYear;
    UINT nMinuteOfDay;
//	UINT nLaneNO;
};
static struct Postevs_Info PostevsInfo;

CStatInfo::CStatInfo()
{
}

//	统计信息初始化:从文件中读取已保存的数据
void CStatInfo::Initial()
{
	ReadPostevs();
}

//	车流++
//	特别地:只有正常收费时才统计MH消息,以下同
void CStatInfo::IncBusCount()
{
	CLaneInfo m_clsLane;
	CTransInfo m_clsTrans;
	int nBusClass=m_clsTrans.BusClass()-'1';//车型从1开始,数组从0开始
	int nBusType=m_clsTrans.BusType()-'1';	//车类从1开始,数组从0开始
	EsData.nEsTotalCount++;					//总车流++
	if (LaneData.nCollectType)
		MhData.nMhTotalCount++;
//	对违章车,统计违章车流;否则,分情况统计各种车流
	if(m_clsTrans.ViolateType()=='1')
	{
		EsData.nEsViolateCount++;
		if (LaneData.nCollectType)
		MhData.nMhViolateCount++;
	} else {
//	以下分车类统计车流,对违章车,不统计该车流
		if((nBusType>=0)&&(nBusType<=9))
		{
		    EsData.nEsTypeCount[nBusType]++;	//分车类统计车流++
			if(LaneData.nCollectType){
				MhData.nMhTypeCount[nBusType]++;
			}
			if((nBusClass>=0)&&(nBusClass<=9)){   //	以下分车型、车情统计车流
				EsData.nEsClassTypeCount[nBusClass][nBusType]++;
				if(LaneData.nCollectType)
					MhData.nMhClassTypeCount[nBusClass][nBusType]++;
			}
		}	
	}
	SavePostevs();
}


//	更改次数++
void CStatInfo::IncModifyCount()
{
	EsData.nEsModifyCount++;
	if(LaneData.nCollectType)
		MhData.nMhModifyCount++;	
	SavePostevs();
}

//	废发票数++
void CStatInfo::IncBadInvoice()
{
	CTransInfo m_clsTrans;
	int nBusClass=m_clsTrans.BusClass()-'1';	//车型从1开始,数组从0开始
	EsData.nEsBadInvoiceCount++;
	if(LaneData.nCollectType)
		MhData.nMhBadInvoiceCount++;
    EsData.nEsClassBadInvoiceCount[nBusClass]++;//分车型累计废票数
	if(LaneData.nCollectType)
		MhData.nMhClassBadInvoiceCount[nBusClass]++;
//	累计废票金额
    int momey=m_clsTrans.Fare();
	EsData.nEsBadMoney+=momey;
	EsData.nEsBadClassMoney[nBusClass]+=momey;
	if (LaneData.nCollectType)
		MhData.nMhBadMoney+=momey;
	SavePostevs();
}

//	累计金额:非正常收费模式下不累计金额
void CStatInfo::IncMoney()
{
//	分车型统计各型车收入
	CTransInfo m_clsTrans;
	int nBusClass=m_clsTrans.BusClass()-'1';//车型从'1'开始,数组从0开始
	EsData.nEsTotalMoney+=m_clsTrans.Fare();
	if(LaneData.nCollectType)
		MhData.nMhTotalMoney+=m_clsTrans.Fare();
//	分车型统计金额
	if((nBusClass>=0)&&(nBusClass<=9))
		EsData.nEsClassMoney[nBusClass]+=m_clsTrans.Fare();
	SavePostevs();
}

//	感应车流++
void CStatInfo::IncLoopBusCount()
{
	EsData.nEsLoopCount++;
	if(LaneData.nCollectType)
		MhData.nMhLoopCount++;
	SavePostevs();
}

//	设置下传文件索引
void CStatInfo::AkIndex(UCHAR nIndex)
{
	chAkIndex=nIndex;	
}

//	返回下传文件索引
UCHAR CStatInfo::AkIndex()
{
	return chAkIndex;
}

//	设置下传文件状态
void CStatInfo::AkStatus(UCHAR status)
{
	chAkStatus=status;
}

//	返回下传文件状态(0:失败;1:成功)
UCHAR CStatInfo::AkStatus()
{
	return chAkStatus;
}

//	获取身份卡被拒绝的原因
UCHAR CStatInfo::CrReason()
{
	return chCrReason;
}

//	设置身份卡被拒绝的原因(1:黑名单;2:非法卡)
void CStatInfo::CrReason(UCHAR value)
{
	chCrReason=value;
}

//	获取总车流数
UINT CStatInfo::EsTotalCount()
{
	return EsData.nEsTotalCount;
}

//	获取按车型统计的车辆车流
UINT CStatInfo::EsClassCount(UCHAR nClass)
{
	int i=nClass;
	if((i>='1')&&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return EsData.nEsClassCount[i];
}

//	获取按车型统计的正常车车流
UINT CStatInfo::EsNormalClassCount(UCHAR nClass)
{
	int i=nClass;
	if((i>='1')&&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return EsData.nEsNormalClassCount[i];
}

//	获取违章车数目
UINT CStatInfo::EsViolateCount()
{
	return EsData.nEsViolateCount;
}

//	获取修改次数
UINT CStatInfo::EsModifyCount()
{
	return EsData.nEsModifyCount;
}

//	获取总金额
ULONG CStatInfo::EsTotalMoney()
{
	return EsData.nEsTotalMoney;
}

//	获取班次内感应车流数
UINT CStatInfo::EsLoopCount()         //班次内感应车流数
{
	return EsData.nEsLoopCount;
}

//	获取班次内分车型统计的车流数
UINT CStatInfo::EsTypeCount(UCHAR nClass)       //班次内分车类统计的总车流
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return EsData.nEsTypeCount[i];
}

//	获取班次内分车型、车情统计的车流数
UINT CStatInfo::EsClassTypeCount(UCHAR nClass,UCHAR nType) //班次内分车型、车类统计的总车流
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	int j=nType;
	if ((j>='1') &&(j<='9')){
		j=j-'1';
	} else {
		j=j-1;
	}
	return EsData.nEsClassTypeCount[i][j];
}

//	获取班次内废票数
UINT CStatInfo::EsBadInvoiceCount()      //班次内的废票数
{
	return EsData.nEsBadInvoiceCount;
}

//	获取班次内分车型统计的废票数
UINT CStatInfo::EsClassBadInvoiceCount(UCHAR nClass) //班次内分车型统计的废票数 
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return EsData.nEsClassBadInvoiceCount[i];
}

//	获取班次内分车型统计的金额
ULONG CStatInfo::EsClassMoney(UCHAR nClass)     //班次内分车型统计的人民币收入
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return EsData.nEsClassMoney[i];
}

//	获取班次内废票总金额
ULONG CStatInfo::EsBadMoney()          //班次内废票总金额
{
	return EsData.nEsBadMoney;
}

//	获取班次内分车型统计的废票金额
ULONG CStatInfo::EsClassBadMoney(UCHAR nClass)  //班次内分车型统计的废票金额
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return EsData.nEsBadClassMoney[i];
}

//	获取小时内感应车流
UINT CStatInfo::MhLoopCount()           //班次内感应车流数
{
	return MhData.nMhLoopCount;
}

//	获取小时内分车型统计的车流数
UINT CStatInfo::MhTypeCount(UCHAR nClass)        //班次内分车类统计的总车流
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return MhData.nMhTypeCount[i];
}

//	获取小时内分车型、车情统计的车流数
UINT CStatInfo::MhClassTypeCount(UCHAR nClass,UCHAR nType)//班次内分车型、车类统计的总车流
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	int j=nType;
    if ((j>='1') &&(j<='9')){
	  	j=j-'1';
	} else {
		j=j-1;
	}
	return MhData.nMhClassTypeCount[i][j];
}

//	获取小时内废票数
UINT CStatInfo::MhBadInvoiceCount()      //班次内的废票数
{
	return MhData.nMhBadInvoiceCount;
}

//	获取小时内分车型统计的废票数
UINT CStatInfo::MhClassBadInvoiceCount(UCHAR nClass)  //班次内分车型统计的废票数
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return MhData.nMhClassBadInvoiceCount[i];
}

//	获取小时内总金额
ULONG CStatInfo::MhTotalMoney()			//总金额
{
	return MhData.nMhTotalMoney;
}

//	获取小时内废票总金额
ULONG CStatInfo::MhBadMoney()          //班次内废票总金额
{
	return MhData.nMhBadMoney;
}

//	获取小时总车流
UINT CStatInfo::MhTotalCount()
{
	return MhData.nMhTotalCount;
}

//	获取按车型统计的车辆车流
UINT CStatInfo::MhClassCount(UCHAR nClass)
{
	int i=nClass;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -