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

📄 laneinfo.cpp

📁 高速公路收费系统车道软件. 功能: 1 检测公路过往车辆 2 收费过程控制和数据采集 3 车辆信息和图片上传服务器.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	memmove(tmpStr,strDelayList+PICTURE_DELAY_LOOP,2);
	return atoi(tmpStr);
}

//	本函数判断价格表文件状态:若文件不存在,返回FALSE;
//	若文件存在,将文件内容读入内存。
//	价格文件格式:
//	LINE 1:		年(4 byte)、月(2 byte)、日(2 byte)
//	LINE 2:			时(2 byte)、分(2 byte)
//	LINE 3 - 11:	XXXX(四位数的价格)
BOOL CLaneInfo::CheckRMB_File()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(TFRMB_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
		if(FileInfo.size==0) return FALSE;	//价格表文件不允许为空
		UINT nLen=FileInfo.size+2;
		if((strRMB=new char[nLen])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strRMB,0,nLen);
		_findclose(hFile);
		FILE *fp1;
		if((fp1=fopen(TFRMB_FILE,"r"))==NULL) return FALSE;
//	读出生效日期时间
		if(fgets(strRMB,12,fp1)==NULL) return FALSE;		
		nLen=strlen(strRMB)-1;		
//	读取生效时间
		if(fgets(strRMB+nLen,6,fp1)==NULL) return FALSE;
		nLen=strlen(strRMB)-1;
		int nReadLength=4;	//每种车型价格为4 byte
		while(1){
			if(fgets(strRMB+nLen,nReadLength+2,fp1)==NULL) break;
			nLen=strlen(strRMB)-1;
		}
		if(strRMB[nLen]==0xa) strRMB[nLen]=0;	//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckRMB_File()出现异常\n");
	}
	return FALSE;
}

//	检查收费站名称文件是否存在:若存在,将文件内容读入内存并返回
//	TRUE;否则返回FALSE
BOOL CLaneInfo::CheckPlazaName()
{
	try{
		char pFullPath[130];
		memset(pFullPath,0,130);
		theApp.GetFullPath(pFullPath);
		strcat(pFullPath,"PLAZANAM");
		memset(strPlazaName,' ',MAX_PLAZANAME);
		FILE *fp1;
		if((fp1=fopen(pFullPath,"r"))==NULL) return FALSE;
		char tmpStr[18];		//收费站文件最大允许16个字符
		for(int i=0;i<MAX_PLAZANAME_NUMBER;i++){
			memset(tmpStr,0,18);
			if(fgets(tmpStr,18,fp1)==NULL) break;
			memset(tmpStr+strlen(tmpStr),' ',17-strlen(tmpStr));
			memmove(strPlazaName+i*16,tmpStr,16);
		}
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckPlazaName()出现异常\n");
	}
	return FALSE;
}

//	本函数检查延迟表文件是否存在:若存在,将文件内容读取内存并返
//	回TRUE;若不存在返回FALSE
BOOL CLaneInfo::CheckDelaysFile()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(DELAYS_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
//	延迟表文件格式:每个延迟项目(2 byte)占一行
		if(FileInfo.size==0) return FALSE;	//延迟表不允许为空
		if((strDelayList=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strDelayList,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;
		if((fp1=fopen(DELAYS_FILE,"r"))==NULL) return FALSE;
		UINT nLen=0;
		while(1){
			if(fgets(strDelayList+nLen,4,fp1)==NULL) break;
			nLen=strlen(strDelayList)-1;
		}
		if(strDelayList[nLen]==0xa) strDelayList[nLen]=0;
									//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckCollectFile()出现异常\n");
	}
	return FALSE;
}

//	本函数检查操作员文件是否存在:若存在,将文件内容读入内存并返
//	回TRUE;若不存在,返回FALSE
BOOL CLaneInfo::CheckCollectFile()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(COLLECOD_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
//	操作员文件格式:操作员工号(5 byte) + 密码(6 byte)+操作员类型(1byte)
		if(FileInfo.size==0) return FALSE;	//操作员表不允许为空
		if((strCollectList=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strCollectList,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;		
		if((fp1=fopen(COLLECOD_FILE,"r"))==NULL) return FALSE;
		UINT nLen=0;
		while(1){
			if(fgets(strCollectList+nLen,14,fp1)==NULL) break;
			nLen=strlen(strCollectList)-1;
		}
		if(strCollectList[nLen]==0xa) strCollectList[nLen]=0;
									//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckCollectFile()出现异常\n");
	}
	return FALSE;
}

//	本函数检查黑名单文件是否存在:若存在,将文件内容读入内存并返
//	回TRUE;否则返回FALSE
BOOL CLaneInfo::CheckBlackFile()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(BLACKCOL_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
//	黑名单文件每行5个字节表示列入黑名单的操作员号码
		if(FileInfo.size==0) return TRUE;	//黑名单文件允许为空
		if((strBlackList=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strBlackList,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;
		if((fp1=fopen(BLACKCOL_FILE,"r"))==NULL) return FALSE;
		UINT nLen=0;
		while(1){
			if(fgets(strBlackList+nLen,7,fp1)==NULL) break;
			nLen=strlen(strBlackList)-1;
		}
		if(strBlackList[nLen]==0xa)	strBlackList[nLen]=0;
									//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckBlackFile()出现异常\n");
	}
	return FALSE;
}

//	本函数检查黑名单车文件是否存在:若存在,将文件内容读入内存并返
//	回TRUE;否则返回FALSE
BOOL CLaneInfo::CheckBlackCarFile()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(BLACKCAR_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
//	黑名单车文件每行10个字节表示列入黑名单的车辆号码
		if(FileInfo.size==0) return TRUE;	//黑名单文件允许为空
		if((strBlackCarList=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strBlackCarList,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;
		if((fp1=fopen(BLACKCAR_FILE,"r"))==NULL) return FALSE;
		UINT nLen=0;
		while(1){
			if(fgets(strBlackCarList+nLen,12,fp1)==NULL) break;
			nLen=strlen(strBlackCarList)-1;
		}
		if(strBlackCarList[nLen]==0xa)	strBlackCarList[nLen]=0;
									//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckBlackFile()出现异常\n");
	}
	return FALSE;
}

//	本函数检查月票车文件是否存在:若存在,将文件内容读入内存并返
//	回TRUE;否则返回FALSE
BOOL CLaneInfo::CheckMonthCarFile()
{
	char tmpCarList[20];
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(MONTHCAR_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
//每行16个字节表示列入月票名单的车辆,前10字节为车牌号,6字节为结束日期
		if(FileInfo.size==0) return TRUE;	//黑名单文件允许为空
		if((strMonthCarList=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strMonthCarList,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;
		if((fp1=fopen(MONTHCAR_FILE,"r"))==NULL) return FALSE;
		UINT nLen=0;
		while(1){
//	特别地:虽然月票车文件中包含到期日期,但核对其合法性时并不判断
//			到期日期,因为只有在有效期内的月票车车牌才会下发到车道
			memset(tmpCarList,0,20);
			if(fgets(tmpCarList,18,fp1)==NULL) break;
			nLen=strlen(strMonthCarList);
//	内存中只保存月票车的前10个字节(车牌字节)
			if(strlen(tmpCarList)<10) continue;
			memmove(strMonthCarList+nLen,tmpCarList,10);			
		}		
		if(strMonthCarList[nLen]==0xa)	strMonthCarList[nLen]=0;
									//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckBlackFile()出现异常\n");
	}
	return FALSE;
}

//	本函数检查免征车文件是否存在:若存在,将文件内容读入内存并返
//	回TRUE;否则返回FALSE
BOOL CLaneInfo::CheckFreeCarFile()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(FREECAR_FILE,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
//每行16个字节表示列入免征车名单的车辆,前10字节为车牌号,6字节为结束日期
		if(FileInfo.size==0) return TRUE;	//黑名单文件允许为空
		if((strFreeCarList=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strFreeCarList,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;
		char tmpCarList[20];
		if((fp1=fopen(FREECAR_FILE,"r"))==NULL) return FALSE;
		UINT nLen=0;
		while(1){
//	特别地:虽然免费车文件中包含到期日期,但核对其合法性时并不判断
//			到期日期,因为只有在有效期内的免费车车牌才会下发到车道
			memset(tmpCarList,0,20);
			if(fgets(tmpCarList,18,fp1)==NULL) break;
			nLen=strlen(strFreeCarList);
//	内存中只保存月票车的前10个字节(车牌字节)
			if(strlen(tmpCarList)<10) continue;
			memmove(strFreeCarList+nLen,tmpCarList,10);						
		}
		if(strFreeCarList[nLen]==0xa)	strFreeCarList[nLen]=0;
									//删除末尾的回车、换行符
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckBlackFile()出现异常\n");
	}
	return FALSE;
}

//	本函数检查新价格表文件状态:若存在,将文件内容读入内存并返回
//	TRUE;否则返回FALSE
//	价格文件格式:
//	LINE 1:		年(4 byte)、月(2 byte)、日(2 byte)
//	LINE 2:			时(2 byte)、分(2 byte)
//	LINE 3-8:		XXXX(四位数的价格)
BOOL CLaneInfo::CheckRMB_NEW()
{
	try{
		struct _finddata_t FileInfo;
		long hFile;
		if((hFile=_findfirst(TFRMB_NEW,&FileInfo))==-1L)
			return FALSE;		//文件不存在,返回FALSE
		if(FileInfo.size==0) return FALSE;	//价格表不允许为空
		if((strRMB_New=new char[FileInfo.size+2])==NULL){
			PostMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL_QUIT,ERROR_NO_ENOUGH_MEMORY,0);
			return FALSE;
		}
		memset(strRMB_New,0,FileInfo.size+2);
		_findclose(hFile);
		FILE *fp1;
		if((fp1=fopen(TFRMB_NEW,"r"))==NULL) return FALSE;
		if(fgets(strRMB_New,12,fp1)==NULL) return FALSE;
		int nLen=strlen(strRMB_New)-1;	//读出生效日期
		if(fgets(strRMB_New+nLen,6,fp1)==NULL) return FALSE;
		nLen=strlen(strRMB_New)-1;		//读出生效时间
		int nReadLength=4;
		while(1){
			if(fgets(strRMB_New+nLen,nReadLength+2,fp1)==NULL) break;
			nLen=strlen(strRMB_New)-1;					
		}
		//删除末尾的回车、换行符
		if(strRMB_New[nLen]==0xa) strRMB_New[nLen]=0;								
		fclose(fp1);
		return TRUE;
	}
	catch(...){
		SendMessage(AfxGetMainWnd()->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CLaneParam::CheckRMB_New()出现异常\n");
	}
	return FALSE;
}

//	获取全部车道参数:只用于参数设置窗口下,其他时候禁止使用
void CLaneInfo::GetLaneParam(char *pRetStr)
{
	memmove(pRetStr,strLaneParam,PARAM_LENGTH);
}

//	设置全部车道参数:只用于参数设置窗口下,其他时候禁止使用
void CLaneInfo::SetLaneParam(char *pStr)
{
	memmove(strLaneParam,pStr,PARAM_LENGTH);
	SaveLaneParam();
}

//	存储车道配置参数:为了增加可读性,存储车道配置参数时对每个参数
//	的含义作简短的说明
void CLaneInfo::SaveLaneParam()
{
	try{
	FILE *fp1;
	if((fp1=fopen(PARAMVS,"w"))!=NULL){
		char tmpStr[40];
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_LANE_NO,2);		
		strcat(tmpStr,"              LaneNO\n");
		fputs(tmpStr,fp1);					//车道号码
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_LANE_ADDR,2);
		strcat(tmpStr,"              LaneAddr\n");
		fputs(tmpStr,fp1);					//车道地址
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_PLAZA_NO,2);
		strcat(tmpStr,"              PlazaNO\n");
		fputs(tmpStr,fp1);					//收费站代码
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_LOCAL_PORT,4);
		strcat(tmpStr,"            LocalPort\n");
		fputs(tmpStr,fp1);					//本地端口号
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_MESSAGE_IP,15);
		strcat(tmpStr," MessageIP\n");
		fputs(tmpStr,fp1);					//消息服务器IP地址
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_MESSAGE_PORT,4);
		strcat(tmpStr,"            MessagePort\n");
		fputs(tmpStr,fp1);					//消息服务器端口号
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_PICTURE_IP,15);
		strcat(tmpStr," PictureIP\n");
		fputs(tmpStr,fp1);					//图像服务器IP地址
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_COMPRESS_QUALITY,3);
		strcat(tmpStr,"             PictureQuality\n");
		fputs(tmpStr,fp1);					//图象压缩质量
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_INPUT_INVOICE])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               InputInvoiceNO\n");
		fputs(tmpStr,fp1);					//是否输入发票号码
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_SHIFT_NO])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               InputShiftNO\n");
		fputs(tmpStr,fp1);					//是否输入班次
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_SHUT_DOWN])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               AllowShutDown\n");
		fputs(tmpStr,fp1);					//是否允许自动关机
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_RAM_DISK])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"              RAM Disk\n");
		fputs(tmpStr,fp1);					//定义是否使用电子盘
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_CHECK_INVOICE]){
			tmpStr[0]='Y';
		} else {
			tmpStr[0]='N';
		}
		strcat(tmpStr,"              CheckInvoice\n");
		fputs(tmpStr,fp1);					//是否检查发票起、止号
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_PRE_PRINT]){
			tmpStr[0]='Y';
		} else {
			tmpStr[0]='N';
		}
		strcat(tmpStr,"              PrePrint\n");
		fputs(tmpStr,fp1);					//是否预打印发票
		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_BACKUP_TIME,2);
		strcat(tmpStr,"            BackupTime\n");
		fputs(tmpStr,fp1);					//车道备份数据保留时间
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_REPEAT_INVOICE])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               RepeatInvoice\n");
		fputs(tmpStr,fp1);					//是否允许重打发票
		
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_VIOLATE_MODE])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               ViolateMode\n");
		fputs(tmpStr,fp1);					//违章模式

		memset(tmpStr,0,40);
		memmove(tmpStr,strLaneParam+PARAM_FOUR_SHIFT_TIME,16);
		strcat(tmpStr," ShiftTime\n");
		fputs(tmpStr,fp1);					//四个班次上班交班时间
		
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_MONTH_CAR_NO])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               MonthCarNo\n");
		fputs(tmpStr,fp1);					//月票车是否输入车牌
		
		memset(tmpStr,0,40);
		if(strLaneParam[PARAM_NORMAL_CAR_PICTURE])
			tmpStr[0]='Y';
		else
			tmpStr[0]='N';
		strcat(tmpStr,"               NORMAL_CAR_PICTURE\n");

⌨️ 快捷键说明

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