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

📄 statinfo.cpp

📁 高速公路收费系统车道软件. 功能: 1 检测公路过往车辆 2 收费过程控制和数据采集 3 车辆信息和图片上传服务器.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return MhData.nMhClassCount[i];
}

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

//	获取小时内违章车数目
UINT CStatInfo::MhViolateCount()
{
	return MhData.nMhViolateCount;
}

//	获取小时内修改次数
UINT CStatInfo::MhModifyCount()
{
	return MhData.nMhModifyCount;
}

//	获取小时内分车型统计金额
ULONG CStatInfo::MhClassMoney(UCHAR nClass)
{
	int i=nClass;
	if ((i>='1') &&(i<='9')){
		i=i-'1';
	} else {
		i=i-1;
	}
	return MhData.nMhClassMoney[i];
}

//	设置当前上岗的操作员号码
void CStatInfo::CollectNO(UINT nValue)
{
	LaneData.nCollectNO=nValue;
	SavePostevs();
}

//	返回当前上岗的操作员号码
UINT CStatInfo::CollectNO()
{
//	若未上岗,收费员号返回0;否则返回当前收费员号码
//	更改密码需要工号,但此时上班状态没置位
	int nValue;
	if(LaneData.chLaneStatus!=LANE_STATUS_CLOSE)
		nValue=LaneData.nCollectNO;
	else
		nValue=0;
	return nValue;
}

//	设置当前上岗操作员类型
void CStatInfo::CollectType(BOOL value)
{
	LaneData.nCollectType=value;
	SavePostevs();
}

//	返回当前上岗操作员类型
BOOL CStatInfo::CollectType()
{
	return LaneData.nCollectType;
}

//	设置当前上岗班次
void CStatInfo::ShiftNO(UCHAR value)
{
	char ch=value;
	if((ch>='0')&&(ch<='9'))
		ch=ch-'0';		//如果传进来是ASCII码,转为二进制
	LaneData.chShiftNO=ch;
	SavePostevs();
}

//	返回当前上岗的班次
UCHAR CStatInfo::ShiftNO()
{
	return LaneData.chShiftNO+'0';	//将二进制转为ASCII码
}

//	设置上个班次的班次号
void CStatInfo::LastShiftNO(UCHAR value)
{
	char ch=value;
	if((ch>='0')&&(ch<='9'))
		ch=ch-'0';		//如果传进来是ASCII码,转为二进制
	LaneData.chLastShiftNO=value;
//	该函数只在产生上班信息时调用,由于产生上班信息后会改写保护
//	现场文件,为了减少写盘次数,下面一行被注解
//	SavePostevs();
}

//	返回上个班次的班次号
UCHAR CStatInfo::LastShiftNO()
{
	return LaneData.chLastShiftNO+'0';	//将二进制转为ASCII码
}

//	设置当前车道状态
void CStatInfo::LaneStatus(UCHAR status)
{
	LaneData.chLaneStatus=status;
	SavePostevs();
}

//	返回当前车道状态
UCHAR CStatInfo::LaneStatus()
{
	return LaneData.chLaneStatus;
}

//	设置当前车道工作模式
void CStatInfo::WorkMode(UCHAR value)
{
	LaneData.chWorkMode=value;
	SavePostevs();
}

//	返回当前车道工作模式
UCHAR CStatInfo::WorkMode()
{
	return LaneData.chWorkMode;
}

//	设置上岗时间
void CStatInfo::SetShiftTime()
{
//	此处保存的上岗时间格式  DDDHHMMSS,其中DDD为天数,HH为当前
//	小时,MM为当前分,SS为当前秒
	CTimeInfo m_clsTime;
	LaneData.nShiftTime=
		m_clsTime.GetDayCount()*1000000L+
		m_clsTime.GetHour()*10000L
		+m_clsTime.GetMinute()*100L+m_clsTime.GetSecond();
	SavePostevs();
}

//	获取上岗时间
ULONG CStatInfo::ShiftTime()
{
//	判断上班时记录的日期是否等于当前日期,若相等,本班次位跨天;
//	否则,本班次跨天
	UINT nStatDate=LaneData.nShiftTime/1000000L;
	CTimeInfo m_clsTime;
	long nShiftTime=0;
	if(nStatDate!=m_clsTime.GetDayCount()){
		nShiftTime=1000000L;
	} else {
		nShiftTime=0;
	}
	nShiftTime+=(LaneData.nShiftTime%1000000L);
	return nShiftTime;
}

//	设置下班时间
void CStatInfo::EndTime(char *pStr)
{
	LaneData.nEndTime=_atoi64(pStr);
	SavePostevs();
}

//	获取下班时间
__int64 CStatInfo::EndTime()
{
	return LaneData.nEndTime;
}

//	返回发票起号
long CStatInfo::InvoiceStart(int type)
{
	 int i=type;
	 if ((i>='0')&&(i<='9'))
		 i=i-'0';
     return LaneData.nInvoiceStart[i];
}
  	
//	返回发票止号
long CStatInfo::EsInvoiceEnd(int type)
{
	 int i=type;
	 if ((i>='0')&&(i<='9'))
		 i=i-'0';
	return LaneData.nInvoiceEnd[i];
}

//	返回当前发票号码
long CStatInfo::GetInvoiceNow(int type)
{
	int i=type;
	if ((i>='0') && (i<='6'))
		i=i-'0';	//如果传来ASCII字符就转换为数值型;
	return LaneData.nInvoiceNow[i];
}

//	当前发票号码++
void CStatInfo::IncInvoiceNow(int type)
{
	int i=type;
	if ((i>='0') && (i<='9'))
		i=i-'0';  //如果传来字符就转换为数值型;
	LaneData.nInvoiceNow[i]++;
	SavePostevs();
//	若电脑票号码更新,更新屏幕显示
	if(i==0){
		CScreen m_clsScreen;
		m_clsScreen.DrawInvoiceWindow((long)LaneData.nInvoiceNow[0]);
	}
}

//	设置发票起号
void CStatInfo::SetInvoiceStart(int type,long nValue)
{
	int i=type;
	if ((i>='0') && (i<='6'))
		i=i-'0';  //如果传来字符就转换为数值型;
	LaneData.nInvoiceStart[i]=nValue;
//	设置发票起号时的发票起号就为当前发票号码
	LaneData.nInvoiceNow[i]=LaneData.nInvoiceStart[i];
	SavePostevs();
//	若电脑票号码更新,更新屏幕显示
	if(i==0){
		CScreen m_clsScreen;
		m_clsScreen.DrawInvoiceWindow((long)LaneData.nInvoiceNow[0]);
	}
}

//	设置当前发票号码:禁止直接设置当前发票号码
void CStatInfo::SetInvoiceNow(int type,long nValue)
{
}

//	设置发票止号
void CStatInfo::SetInvoiceEnd(int type,long nValue)
{
	LaneData.nInvoiceEnd[type]=nValue;
	SavePostevs();
}

//	预打印发票状态
void CStatInfo::HasPrePrint(BOOL value)
{
	LaneData.bHasPreFlag=value;
	SavePostevs();
}

//	获取预打印发票状态
BOOL CStatInfo::HasPrePrint()
{
	return LaneData.bHasPreFlag;
}

//	存储要永久记录的信息
void CStatInfo::SavePostevs()
{
	try{
		FILE *fp1;
//	若设置为使用RAM盘,则使用文件POSTEVS存储,否则使用POSTEVS_1存储
//	使用RAM盘存储时若存储失败,自动转为禁止使用RAM盘
		CLaneInfo m_clsLane;
		if(m_clsLane.RAM_Disk()){
			if((fp1=fopen(POSTEVS,"wb"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"记录文件POSTEVS失败\n");
				m_clsLane.RAM_Disk(FALSE);
				return;
			}
		} else {
			if((fp1=fopen(POSTEVS_1,"wb"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"记录文件POSTEVS失败\n");
				return;
			}
		}
		BOOL bSuccessFlag=TRUE;
	
		if(fwrite(&LaneData,sizeof(Lane_Data),1,fp1)!=1){
			bSuccessFlag=FALSE;
		}
		if(fwrite(&EsData,sizeof(ES_Data),1,fp1)!=1){
			bSuccessFlag=FALSE;
		}
		if(fwrite(&MhData,sizeof(MH_Data),1,fp1)!=1){
			bSuccessFlag=FALSE;
		}
		CTimeInfo m_clsTime;
		PostevsInfo.nYear=m_clsTime.GetYear();
		PostevsInfo.nMonth=m_clsTime.GetMonth();
		PostevsInfo.nDay=m_clsTime.GetDay();
		PostevsInfo.nHour=m_clsTime.GetHour();
		PostevsInfo.nDayCountOfYear=m_clsTime.GetDayCount(); //tyj add
        PostevsInfo.nMinuteOfDay=m_clsTime.GetMinute()+m_clsTime.GetHour()*60; //tyj add
//		PostevsInfo.nLaneNO=m_clsLane.LaneNO();
		if(fwrite(&PostevsInfo,sizeof(Postevs_Info),1,fp1)!=1){
			bSuccessFlag=FALSE;
		}
		fclose(fp1);
		if(!bSuccessFlag){
			m_clsLane.RAM_Disk(FALSE);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"记录文件POSTEVS出错\n");
			return;
		}
	}
	catch(...){
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CStatInfo::SavePostevs()中出现异常\n");
	}
}

//	读取已经存储的信息
void CStatInfo::ReadPostevs()
{
	BOOL bSuccessFlag=TRUE;
	try{
		FILE *fp1;
//	若设置为使用RAM盘,则读取文件POSTEVS,否则读取POSTEVS_1
		CLaneInfo m_clsLane;
		if(m_clsLane.RAM_Disk()){
			fp1=fopen(POSTEVS,"rb");
		} else {
			fp1=fopen(POSTEVS_1,"rb");
		}
		if(fp1==NULL){
			bSuccessFlag=FALSE;
		} else {
			if(fread(&LaneData,sizeof(Lane_Data),1,fp1)!=1){
				bSuccessFlag=FALSE;
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"Postevs文件中LaneData出错\n");
			}
			if(fread(&EsData,sizeof(ES_Data),1,fp1)!=1){
				bSuccessFlag=FALSE;
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"Postevs文件中EsData出错\n");
			}
			if(fread(&MhData,sizeof(MH_Data),1,fp1)!=1){
				bSuccessFlag=FALSE;
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"Postevs文件中MhData出错\n");
			}
			if(fread(&PostevsInfo,sizeof(Postevs_Info),1,fp1)!=1){
				bSuccessFlag=FALSE;
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"Postevs文件中EsData出错\n");
			}
			fclose(fp1);
//	若当前车道不是记录时的车道,所有数据作废
//			if(m_clsLane.LaneNO()!=PostevsInfo.nLaneNO){
//				bSuccessFlag=FALSE;
//				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"Postevs文件中车道号不匹配\n");
//			}
			if(!bSuccessFlag){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"文件POSTEVS中的数据被丢弃\n");
				if(m_clsLane.RAM_Disk()){
					remove(POSTEVS);
				} else {
					remove(POSTEVS_1);
				}
			}
		}
	}
	catch(...){
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CStatInfo::ReadPostevs()出现异常\n");
		bSuccessFlag=FALSE;
	}
	if(!bSuccessFlag){
		memset(&LaneData,0,sizeof(Lane_Data));
		memset(&EsData,0,sizeof(ES_Data));
		memset(&MhData,0,sizeof(MH_Data));
		memset(&PostevsInfo,0,sizeof(Postevs_Info));
	}
//	更新屏幕上的发票号码
	CScreen m_clsScreen;
	m_clsScreen.DrawInvoiceWindow((long)LaneData.nInvoiceNow[0]);
	return;
}

//	获取记录保护现场文件时的年份
UINT CStatInfo::PostevsYear()
{
	return PostevsInfo.nYear;
}

//	获取记录保护现场文件时的月份
UINT CStatInfo::PostevsMonth()
{
	return PostevsInfo.nMonth;
}

//	获取记录保护现场文件时的日期
UINT CStatInfo::PostevsDay()
{
	return PostevsInfo.nDay;
}

//	获取记录保护现场文件时的小时
UINT CStatInfo::PostevsHour()
{
	return PostevsInfo.nHour;
}

//	获取记录保护现场文件时的统计日期
UINT CStatInfo::PostevsStatDate()
{
	return PostevsInfo.nStatDate;
}

//	获取保护现场时的分钟数
UINT CStatInfo::PostevsMinuteOfDay()
{
	return PostevsInfo.nMinuteOfDay;
}

//	获取保护现场时的天数
UINT CStatInfo::PostevsDayCount()
{ 
	return PostevsInfo.nDayCountOfYear;
}

//	清除交班信息记录的数据
void CStatInfo::ClearEs()
{
	memset(&EsData,0,sizeof(ES_Data));
	SavePostevs();
}

//	清除时报表信息记录的数据
void CStatInfo::ClearMh()
{
	memset(&MhData,0,sizeof(MH_Data));
	SavePostevs();
}

⌨️ 快捷键说明

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