📄 laneinfo.cpp
字号:
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 + -