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

📄 laneinfo.cpp

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

#include "stdafx.h"
#include "lane_new.h"
#include "LaneInfo.h"

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

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

//	以下信息保存到内存(掉电或程序退出后无须恢复)
BOOL CLaneInfo::bFileReadyFlag[FILE_NUMBER];
char CLaneInfo::strErrorInfo[80];
char CLaneInfo::strLaneParam[PARAM_LENGTH];
char * CLaneInfo::strRMB;
char * CLaneInfo::strPlazaCode;
char * CLaneInfo::strDelayList;
char * CLaneInfo::strBlackList;
char * CLaneInfo::strCollectList;
char * CLaneInfo::strRMB_New;
char CLaneInfo::strPlazaName[MAX_PLAZANAME];
char * CLaneInfo::strBlackCarList;
char * CLaneInfo::strMonthCarList;
char * CLaneInfo::strFreeCarList;

CLaneInfo::CLaneInfo()
{
}

//	车道信息初始化:将车道参数及运行参数文件读入内存
//	特别地:本函数必须再网络类初始化前被调用,否则网络类获取的将是
//			错误的信息
void CLaneInfo::Initial()
{
	strPlazaCode=strRMB=strCollectList=strBlackList=NULL;
	strBlackCarList=strMonthCarList=strFreeCarList=strRMB_New=NULL;
	strDelayList=NULL;
	memset(strLaneParam,0,PARAM_LENGTH);
	ReadLaneParam();			//读车道参数
	bFileReadyFlag[TFRMB_INDEX]=CheckRMB_File();
	bFileReadyFlag[DELAYS_INDEX]=CheckDelaysFile();
	bFileReadyFlag[COLLECOD_INDEX]=CheckCollectFile();
	bFileReadyFlag[BLACKCOL_INDEX]=CheckBlackFile();
	bFileReadyFlag[TFRMB_NEW_INDEX]=CheckRMB_NEW();
	bFileReadyFlag[BLACKCAR_INDEX]=CheckBlackCarFile();
	bFileReadyFlag[MONTHCAR_INDEX]=CheckMonthCarFile();	
	bFileReadyFlag[FREECAR_INDEX]=CheckFreeCarFile();
	bFileReadyFlag[PLAZANAM_INDEX]=CheckPlazaName();
}

//	将运行参数文件重新读入内存:收到上位机下发的更新参数文件命令
//	后会调用本函数,首先释放以前分配的内存
void CLaneInfo::RepeatReadFile()
{
	FreeMemory();
	bFileReadyFlag[TFRMB_INDEX]=CheckRMB_File();
	bFileReadyFlag[DELAYS_INDEX]=CheckDelaysFile();
	bFileReadyFlag[COLLECOD_INDEX]=CheckCollectFile();
	bFileReadyFlag[BLACKCOL_INDEX]=CheckBlackFile();
	bFileReadyFlag[TFRMB_NEW_INDEX]=CheckRMB_NEW();
	bFileReadyFlag[BLACKCAR_INDEX]=CheckBlackCarFile();
	bFileReadyFlag[MONTHCAR_INDEX]=CheckMonthCarFile();	
	bFileReadyFlag[FREECAR_INDEX]=CheckFreeCarFile();
	bFileReadyFlag[PLAZANAM_INDEX]=CheckPlazaName();
}

//	程序退出前释放内存
void CLaneInfo::FreeMemory()
{
	if(strRMB!=NULL){
		delete [] strRMB;
		strRMB=NULL;
	}
	if(strPlazaCode!=NULL){
		delete [] strPlazaCode;
		strPlazaCode=NULL;
	}
	if(strBlackList!=NULL){
		delete [] strBlackList;
		strBlackList=NULL;
	}
	if(strBlackCarList!=NULL){
		delete [] strBlackCarList;
		strBlackCarList=NULL;
	}
	if(strMonthCarList!=NULL){
		delete [] strMonthCarList;
		strMonthCarList=NULL;
	}
	if(strCollectList!=NULL){
		delete [] strCollectList;
		strCollectList=NULL;
	}
	if(strDelayList!=NULL){
		delete [] strDelayList;
		strDelayList=NULL;
	}
	if(strRMB_New!=NULL){
		delete [] strRMB_New;
		strRMB_New=NULL;
	}
	if(strFreeCarList!=NULL){
		delete [] strFreeCarList;
		strFreeCarList=NULL;
	}
}

//	设置视频信号工作模式
void CLaneInfo::DisplayVideo(BOOL value)
{
//	strLaneParam[PARAM_DISPLAY_VIDEO]=value;
}

//	设置视频捕获方式
void CLaneInfo::CaptureStatus(BOOL value)
{
//	strLaneParam[PARAM_CAPTURE]=value;
}

//	设置字符叠加模式
void CLaneInfo::OverlayStatus(BOOL value)
{
//	strLaneParam[PARAM_OVERLAY_SYMBOL]=value;
}

//	设置字符叠加器安装位置
void CLaneInfo::OverlayAtLane(BOOL value)
{
//	strLaneParam[PARAM_OVERLAY_AT_LANE]=value;
}

//	设置重打发票模式
void CLaneInfo::RepeatInvoice(BOOL value)
{
	strLaneParam[PARAM_REPEAT_INVOICE]=value;
}

//	获取是否允许重打发票
BOOL CLaneInfo::bRepeatInvoice()
{
	return strLaneParam[PARAM_REPEAT_INVOICE];
}

//	设置发票号输入模式
void CLaneInfo::InputInvoice(BOOL value)
{
	strLaneParam[PARAM_INPUT_INVOICE]=value;
}

//	获取是否输入发票号码
BOOL CLaneInfo::bInputInvoice()
{
	return strLaneParam[PARAM_INPUT_INVOICE];
}

//	设置输入班次模式
void CLaneInfo::InputShiftNO(BOOL value)
{
	strLaneParam[PARAM_SHIFT_NO]=value;
}

//	获取是否输入班次号
BOOL CLaneInfo::bInputShiftNO()
{
	return strLaneParam[PARAM_SHIFT_NO];
}

//	设置自动关机模式
void CLaneInfo::ShutDown(BOOL value)
{
	strLaneParam[PARAM_SHUT_DOWN]=value;
}

//	获取是否允许自动关机
BOOL CLaneInfo::bShutDown()
{
	return strLaneParam[PARAM_SHUT_DOWN];
}

//	设置图片压缩质量
void CLaneInfo::PictureQuality(char *pStr)
{
	memmove(strLaneParam+PARAM_COMPRESS_QUALITY,pStr,3);
}

//	获取希望的图象压缩质量
int CLaneInfo::PictureQuality()
{
	if(strLaneParam[PARAM_COMPRESS_QUALITY]==0) return 85;
	char tmpStr[4];
	memset(tmpStr,0,4);
	memmove(tmpStr,strLaneParam+PARAM_COMPRESS_QUALITY,3);
	return atoi(tmpStr);
}

//	设置是否检查发票起、止号:设置为是时操作员输入的发票止号必须
//	大于等于发票起号,设置为否时不检查
void CLaneInfo::bCheckInvoice(BOOL value)
{	
	strLaneParam[PARAM_CHECK_INVOICE]=value;	
}

//	返回是否检查发票起、止号
BOOL CLaneInfo::bCheckInvoice()
{
	return strLaneParam[PARAM_CHECK_INVOICE];
}

//	设置是否预打印发票:预打印发票可减少车辆在车道停留时间,在操
//	作员输入车辆信息前先将发票的固定部分预先打印出来
void CLaneInfo::bPrePrint(BOOL value)
{	
	strLaneParam[PARAM_PRE_PRINT]=value;	
}

//	是否预打印发票
BOOL CLaneInfo::bPrePrint()
{
	return strLaneParam[PARAM_PRE_PRINT];
}

//	设置违章模式
void CLaneInfo::SetViolateModeFlag(BOOL value)
{	
	strLaneParam[PARAM_VIOLATE_MODE]=value;
}

//	返回违章模式
BOOL CLaneInfo::GetViolateModeFlag()
{
	return strLaneParam[PARAM_VIOLATE_MODE];
}
//以下获取四个班次上班交班时间
	int CLaneInfo::GetShiftTime(int NO)
	{
		int i=NO,ShiftTime=0;
		if ((i<1)||(i>4)) return -1;
		i=(i-1)*2;
        char TempNO[2];
		memset(TempNO,0,2);
		memmove(TempNO,strLaneParam+PARAM_FOUR_SHIFT_TIME+i,2);
        ShiftTime=(TempNO[0]-'0')*10+(TempNO[1]-'0');
		return ShiftTime;
	}
//以下获取月票车是否输入车牌?
	BOOL CLaneInfo::GetInputMonthCarNOFlag()
	{		
	    return	strLaneParam[PARAM_MONTH_CAR_NO];
	}
//以下获取收费车图象是否上传?
	BOOL CLaneInfo::GetNormalCarPictureFlag()
	{	
		return strLaneParam[PARAM_NORMAL_CAR_PICTURE];
	}
//以下获取电脑票收费员是否可修改?
	BOOL CLaneInfo::GetChangeComputerInvoiceFlag()
	{		
		return strLaneParam[PARAM_COMPUTER_INVOICE_CHANGE];
	}
//以下获取自动栏杆是否自动下落?
    BOOL CLaneInfo::GetAutoRailShutDownFlag()
	{
		return strLaneParam[PARAM_AUTORAIL_AUTO_SHUTDOWN];
	}
			

//	设置车道数据备份时间
void CLaneInfo::BackupTime(char *pStr)
{
	memmove(strLaneParam+PARAM_BACKUP_TIME,pStr,2);
}

//	返回车道数据备份时间
UINT CLaneInfo::BackupTime()
{
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strLaneParam+PARAM_BACKUP_TIME,2);
	return atoi(tmpStr);
}

//	设置图像服务器IP地址
void CLaneInfo::SetPictureIP(char *pStr)
{
	memmove(strLaneParam+PARAM_PICTURE_IP,pStr,15);
}

//	获取图象服务器IP地址
void CLaneInfo::GetPictureIP(char *pRetStr)
{
	if(strLaneParam[PARAM_PICTURE_IP]==0)
		memmove(pRetStr,"202.202.202.109",15);
	else
		memmove(pRetStr,strLaneParam+PARAM_PICTURE_IP,15);
}

//	设置消息服务器端口号
void CLaneInfo::MessagePort(char *pStr)
{
	memmove(strLaneParam+PARAM_MESSAGE_PORT,pStr,4);
}

//	获取消息服务器端口号
int CLaneInfo::MessagePort()
{
	if(strLaneParam[PARAM_MESSAGE_PORT]==0) return 6768;
	char tmpStr[5];
	memset(tmpStr,0,5);
	memmove(tmpStr,strLaneParam+PARAM_MESSAGE_PORT,4);
	return atoi(tmpStr);
}

//	设置消息服务器IP地址
void CLaneInfo::SetMessageIP(char *pStr)
{
	memmove(strLaneParam+PARAM_MESSAGE_IP,pStr,15);
}

//	获取消息服务器IP地址
void CLaneInfo::GetMessageIP(char *pRetStr)
{
	if(strLaneParam[PARAM_MESSAGE_IP]==0){
		memmove(pRetStr,"202.202.202.108",15);
	} else {
		memmove(pRetStr,strLaneParam+PARAM_MESSAGE_IP,15);
	}
}

//	设置本地通讯端口号
void CLaneInfo::LocalPort(char *pStr)
{
	memmove(strLaneParam+PARAM_LOCAL_PORT,pStr,4);
}

//	获取本地通讯端口号
int CLaneInfo::LocalPort()
{
	if(strLaneParam[PARAM_LOCAL_PORT]==0) return 6767;
	char tmpStr[5];
	memset(tmpStr,0,5);
	memmove(tmpStr,strLaneParam+PARAM_LOCAL_PORT,4);
	return atoi(tmpStr);
}

//	设置车道地址
void CLaneInfo::LaneAddr(char *pStr)
{
	memmove(strLaneParam+PARAM_LANE_ADDR,pStr,2);
}

//	获取车道地址
int CLaneInfo::LaneAddr()
{
	if(strLaneParam[PARAM_LANE_ADDR]==0) return 1;
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strLaneParam+PARAM_LANE_ADDR,2);
	return atoi(tmpStr);
}
	
//	设置车道编码
void CLaneInfo::SetLaneNO(char *pStr)
{
	memmove(strLaneParam+PARAM_LANE_NO,pStr,2);
}

//	获取本车道编码
UINT CLaneInfo::LaneNO()
{
	if(strLaneParam[PARAM_LANE_NO]==0) return 1;
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strLaneParam+PARAM_LANE_NO,2);
	return atoi(tmpStr);
}

//	设置业主编码
void CLaneInfo::OwnNO(char *pStr)
{
//	memmove(strLaneParam+PARAM_OWN_NO,pStr,2);
}

//	收费站编码(2 byte)
void CLaneInfo::SetPlazaNO(char *pStr)
{
	memmove(strLaneParam+PARAM_PLAZA_NO,pStr,2);
}

// 收费站编码(2 byte)
ULONG CLaneInfo::PlazaNO()
{
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strLaneParam+PARAM_PLAZA_NO,2);
	return (ULONG)atol(tmpStr);
}

//	设置是否允许使用电子盘
void CLaneInfo::RAM_Disk(BOOL value)
{
	strLaneParam[PARAM_RAM_DISK]=value;
}

//	获取是否允许使用电子盘
BOOL CLaneInfo::RAM_Disk()
{
	return strLaneParam[PARAM_RAM_DISK];
}

//	获取本车道的车道名称
void CLaneInfo::GetPlazaName(char *pRetStr)
{
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strLaneParam+PARAM_PLAZA_NO,2); //站代码
	
	UINT nIndex=atoi(tmpStr)-1;
	if((nIndex>=0)&&(nIndex<MAX_PLAZANAME_NUMBER)&&(strlen(strPlazaName)>nIndex*16)){
		memmove(pRetStr,strPlazaName+nIndex*16,16);
	} else {
		memmove(pRetStr,"陌生站          ",16);
	}
//	将回车符转换为空格
	for(int i=0;i<16;i++){
		if(pRetStr[i]==0xa) pRetStr[i]=0x20;
		if(pRetStr[i]==0xd) pRetStr[i]=0x20;
	}
}

//	获取通行卡有效期
int CLaneInfo::TicketDelays()
{
	if(strDelayList==NULL) return 24;
	if(strlen(strDelayList)<DELAY_TICKET+2) return 24;
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strDelayList+DELAY_TICKET,2);
	return atoi(tmpStr);
}

//	获取检测线圈占用超时的时间
int CLaneInfo::LeaveLoopDelays()
{
	if(strDelayList==NULL) return 30;
	if(strlen(strDelayList)<LEAVE_DELAY_LOOP+2) return 30;
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strDelayList+LEAVE_DELAY_LOOP,2);
	return atoi(tmpStr);
}

//	获取报警灯报警持续时间
int CLaneInfo::AmberDelays()
{
	if(strDelayList==NULL) return 15;
	if(strlen(strDelayList)<DELAY_AMBER+2) return 15;
	char tmpStr[3];
	memset(tmpStr,0,3);
	memmove(tmpStr,strDelayList+DELAY_AMBER,2);
	return atoi(tmpStr);
}

//	获取抓拍线圈占用超时的时间
int CLaneInfo::PictureLoopDelays()
{
	if(strDelayList==NULL) return 99;
	if(strlen(strDelayList)<PICTURE_DELAY_LOOP+2) return 99;
	char tmpStr[3];
	memset(tmpStr,0,3);

⌨️ 快捷键说明

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