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