📄 datahandle.cpp
字号:
// DataHandle.cpp: implementation of the CDataHandle class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Analyse.h"
#include "DataHandle.h"
#include "StructDef.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ParamSet TempParam[16];
int SetNum; //设置的模块数
int count[16]={0};
int EveryGroupRegNum[16]={0}; //每组中的接入次数
EveryGroupRegisteRate TempRegisteRate[100];
CDataHandle::CDataHandle()
{
/* for(int n=0;n<16;n++)
{
Group[n]=0;
RegisteTotalNumber[n]=0;
RegisteNumber[n]=0;
CallingTotalNumber[n]=0;
ConnectNumber[n]=0;
DropoffNumber[n]=0;
SingleConnectNumber[n]=0;
DuanxuNumber[n]=0;
ConnectTime[n]=0;
DialTime[n]=0;
TotalDialTime[n]=0;
TotalConnectTime[n]=0;
}
IsClosed=true;*/
}
CDataHandle::~CDataHandle()
{
}
void CDataHandle::OpenFile() //
{
char TempRecordFileName[512];
char DialTimeAndConnectTimeFileName[512];
char EveryGroupRegNumFileName[512];
ParamSet TempParam1;
int ModuleNum;
// ParamSet TempParam3;
for(int n=0;n<16;n++)
{
Group[n]=0;
RegisteTotalNumber[n]=0;
RegisteNumber[n]=0;
CallingTotalNumber[n]=0;
ConnectNumber[n]=0;
DropoffNumber[n]=0;
SingleConnectNumber[n]=0;
DuanxuNumber[n]=0;
ConnectTime[n]=0;
DialTime[n]=0;
TotalDialTime[n]=0;
TotalConnectTime[n]=0;
}
IsClosed=true;
if(!ParamFile.Open("D:\\SL400Data\\DataTemp\\ParamSet.prm",CFile::shareDenyNone|CFile::modeRead))
TRACE0("不能打开参数设置文件!!");
ModuleNum=(ParamFile.GetLength()-250)/sizeof(ParamSet);
// SetNum=1;
for(int a=0;a<ModuleNum;a++)
{
ParamFile.Seek(250+a*sizeof(ParamSet),CFile::begin);
ParamFile.Read(&TempParam1,sizeof(ParamSet));
if(TempParam1.Actived==1)
{
ParamFile.Seek(250+a*sizeof(ParamSet),CFile::begin);
ParamFile.Read(&TempParam[SetNum],sizeof(ParamSet));
SetNum+=1;
}
}
if(!ResultFile.Open("D:\\SL400Data\\DataTemp\\TestResult.dat",CFile::shareDenyWrite | CFile::modeCreate | CFile::modeReadWrite))
TRACE0("不能生成测试结果文件!!");
for(int m=0;m<SetNum;m++)
{
// ParamFile.Seek(250+m*sizeof(ParamSet),CFile::begin);
// ParamFile.Read(&TempParam1,sizeof(ParamSet));
sprintf(TempRecordFileName,"D:\\SL400Data\\DataTemp\\TestRecord%02d.dat",TempParam[m].ModuleID);
sprintf(DialTimeAndConnectTimeFileName,"D:\\SL400Data\\DataTemp\\DialDelayConTime%02d.dat",TempParam[m].ModuleID);
sprintf(EveryGroupRegNumFileName,"D:\\SL400Data\\DataTemp\\GroupRegRate%02d.dat",TempParam[m].ModuleID);
// if(!TestFile[TempParam1.ModuleID].Open(TempRecordFileName,CFile::shareDenyNone|CFile::modeCreate|CFile::modeReadWrite))
// AfxMessageBox("不能打开测试记录文件!!");
//TestFile[TempParam1.ModuleID].Open(TempRecordFileName,CFile::shareDenyNone|CFile::modeReadWrite);
//AfxMessageBox("准备打开测试记录文件!!");
while(!TestFile[TempParam[m].ModuleID].Open(TempRecordFileName,CFile::shareDenyNone|CFile::modeReadWrite)) {;}
//AfxMessageBox("已经打开测试记录文件!!");
//DWORD abc=GetLastError();
//CString str;
//str.Format("%d",abc);
//AfxMessageBox(str);
if(TempParam[m].TestItem==0x01)
{
if(!GroupRegNumFile[TempParam[m].ModuleID].Open(EveryGroupRegNumFileName,CFile::shareDenyWrite | CFile::modeCreate | CFile::modeReadWrite))
AfxMessageBox("不能生成每组接入率存储文件!!!");
}
else
{
if(!DialTimeConTimeFile[TempParam[m].ModuleID].Open(DialTimeAndConnectTimeFileName,CFile::shareDenyWrite | CFile::modeCreate | CFile::modeReadWrite))
TRACE0("不能生成拨号后时延与通话时长存储文件");
}
IsClosed=false;
}
ParamFile.Close();
}
void CDataHandle::CloseFile()
{
if(IsClosed==false)
{
// ParamSet TempParam2;
for(int k=0;k<SetNum;k++)
{
/* ParamFile.Seek(250+k*sizeof(ParamSet),CFile::begin);
ParamFile.Read(&TempParam2,sizeof(ParamSet));
TestFile[TempParam2.ModuleID].Close();
if(TempParam2.TestItem==0x01)
GroupRegNumFile[TempParam2.ModuleID].Close();
else
DialTimeConTimeFile[TempParam2.ModuleID].Close();
*/
TestFile[TempParam[k].ModuleID].Close();
if(TempParam[k].TestItem==0x01)
GroupRegNumFile[TempParam[k].ModuleID].Close();
else
DialTimeConTimeFile[TempParam[k].ModuleID].Close();
}
// ParamFile.Close();
ResultFile.Close();
IsClosed=true;
}
else
{
// AfxMessageBox("Files have been closed!!");
return;
}
}
void CDataHandle::FinalResult()
{
ResultType TempResult;
TempResult.ConnectRate=0;
TempResult.ConnectTime=0;
TempResult.DialDelay=0;
TempResult.DropoffRate=0;
TempResult.DuanxuRate=0;
TempResult.RegisteRate=0;
TempResult.SingleConnectRate=0;
for(int j=0;j<SetNum;j++)
{
if(RegisteTotalNumber[TempParam[j].ModuleID]!=0)
{
TempResult.RegisteRate=((double)RegisteNumber[TempParam[j].ModuleID]/(double)RegisteTotalNumber[TempParam[j].ModuleID])*100;
TempResult.TestActualNum=RegisteTotalNumber[TempParam[j].ModuleID];
}
else
{
if(CallingTotalNumber[TempParam[j].ModuleID]!=0)
{
TempResult.ConnectRate=((double)ConnectNumber[TempParam[j].ModuleID]/(double)CallingTotalNumber[TempParam[j].ModuleID])*100;
TempResult.DialDelay=TotalDialTime[TempParam[j].ModuleID]/(double)CallingTotalNumber[TempParam[j].ModuleID];
TempResult.ConnectTime=TotalConnectTime[TempParam[j].ModuleID]/(double)CallingTotalNumber[TempParam[j].ModuleID];
TempResult.TestActualNum=CallingTotalNumber[TempParam[j].ModuleID];
if(ConnectNumber!=0)
{
TempResult.DropoffRate=((double)DropoffNumber[TempParam[j].ModuleID]/(double)ConnectNumber[TempParam[j].ModuleID])*100;
TempResult.DuanxuRate=((double)DuanxuNumber[TempParam[j].ModuleID]/(double)ConnectNumber[TempParam[j].ModuleID])*100;
TempResult.SingleConnectRate=((double)SingleConnectNumber[TempParam[j].ModuleID]/(double)ConnectNumber[TempParam[j].ModuleID])*100;
}
else
{
TRACE0("接通率为0 !!!");
}
}
else
{
TRACE0("测试记录有错!!");
return;
}
}
strncpy(TempResult.CalledNumber,TempParam[j].CalledNumber,20);
strncpy(TempResult.SelfNumber,TempParam[j].CallNumber,20);
TempResult.ModuleID=TempParam[j].ModuleID;
CopyTime(TempResult.TestStartTime,TempStartTime[TempParam[j].ModuleID]);
CopyTime(TempResult.TestEndTime,TempEndTime[TempParam[j].ModuleID]);
ResultFile.Seek(j*sizeof(ResultType),CFile::begin);
ResultFile.Write(&TempResult,sizeof(ResultType));
}
// AfxMessageBox("Analyze is over!!");
}
void CDataHandle::StatisticResult()
{
// char TempTestFileName[512];
int TempFileLen; //临时文件长度
SingleTestRecord TempTestRecord;
// ResultType TempResult;
for(int i=0;i<SetNum;i++)
{
// ParamFile.Seek(250+i*sizeof(ParamSet),CFile::begin);
// ParamFile.Read(&TempParam[i],sizeof(ParamSet));
BYTE AAA=TempParam[i].TestItem;
TempFileLen=TestFile[TempParam[i].ModuleID].GetLength();
// TestNum=(TempTestRecord-sizeof(ParamSet))/sizeof(SingleTestRecord);
if(AAA==0x01) //接入率的的计算,因为接入率和其它六项是互斥的
{
// EveryGroupRegisteRate TempRegisteRate[50];
// RegisteTotalNumber=TestNum; //总的接入率测试次数
for(int l=0;l<20;l++)
{
if((sizeof(ParamSet)+(count[TempParam[i].ModuleID])*sizeof(SingleTestRecord))>=(unsigned)TempFileLen) break;
TestFile[TempParam[i].ModuleID].Seek((sizeof(ParamSet)+count[TempParam[i].ModuleID]*sizeof(SingleTestRecord)),CFile::begin);
TestFile[TempParam[i].ModuleID].Read(&TempTestRecord,sizeof(SingleTestRecord));
if(count[TempParam[i].ModuleID]%TempParam[i].TestTimes==0)
{
if(count[TempParam[i].ModuleID]==0)
{
Group[TempParam[i].ModuleID]=1;
EveryGroupRegNum[TempParam[i].ModuleID]=0;
CopyTime(TempRegisteRate[Group[TempParam[i].ModuleID]].TestStartTime,TempTestRecord.TestStartMoment);
}
else
{
TempRegisteRate[Group[TempParam[i].ModuleID]].GroupNumber=Group[TempParam[i].ModuleID];
TempRegisteRate[Group[TempParam[i].ModuleID]].EveryRegisteRate=((double)EveryGroupRegNum[TempParam[i].ModuleID]/(double)TempParam[i].TestTimes)*100;
GroupRegNumFile[TempParam[i].ModuleID].Seek((Group[TempParam[i].ModuleID]-1)*sizeof(EveryGroupRegisteRate),CFile::begin);
GroupRegNumFile[TempParam[i].ModuleID].Write(&TempRegisteRate[Group[TempParam[i].ModuleID]],sizeof(EveryGroupRegisteRate));
Group[TempParam[i].ModuleID]+=1;
EveryGroupRegNum[TempParam[i].ModuleID]=0;
CopyTime(TempRegisteRate[Group[TempParam[i].ModuleID]].TestStartTime,TempTestRecord.TestStartMoment);//接入率测试的开始时间
}
}
if(count[TempParam[i].ModuleID]==0&&l==0)
CopyTime(TempStartTime[TempParam[i].ModuleID],TempTestRecord.TestStartMoment);//整个测试的开始时间
CopyTime(TempRegisteRate[Group[TempParam[i].ModuleID]].TestEndTime,TempTestRecord.TestEndMoment);//接入率测试的结束时间
CopyTime(TempEndTime[TempParam[i].ModuleID],TempTestRecord.TestEndMoment);//整个测试的结束时间
if(TempTestRecord.IfRegisted==1)
{
EveryGroupRegNum[TempParam[i].ModuleID]+=1;
RegisteNumber[TempParam[i].ModuleID]+=1; //总的接入次数
}
count[TempParam[i].ModuleID]++;
}
TempRegisteRate[Group[TempParam[i].ModuleID]].GroupNumber=Group[TempParam[i].ModuleID];
int residue;
residue=count[TempParam[i].ModuleID]%TempParam[i].TestTimes;
if(residue!=0)
TempRegisteRate[Group[TempParam[i].ModuleID]].EveryRegisteRate=((double)EveryGroupRegNum[TempParam[i].ModuleID]/(double)residue)*100;
else
{
if(count[TempParam[i].ModuleID]!=0)
TempRegisteRate[Group[TempParam[i].ModuleID]].EveryRegisteRate=((double)EveryGroupRegNum[TempParam[i].ModuleID]/(double)TempParam[i].TestTimes)*100;
else TempRegisteRate[Group[TempParam[i].ModuleID]].EveryRegisteRate=0;
}
GroupRegNumFile[TempParam[i].ModuleID].Seek((Group[TempParam[i].ModuleID]-1)*sizeof(EveryGroupRegisteRate),CFile::begin);
GroupRegNumFile[TempParam[i].ModuleID].Write(&TempRegisteRate[Group[TempParam[i].ModuleID]],sizeof(EveryGroupRegisteRate));
RegisteTotalNumber[TempParam[i].ModuleID]=count[TempParam[i].ModuleID];
}
else
{
EveryDialDelayAndConnectTime TempDialDelayAndConnectTime;
// CallingTotalNumber=TestNum; //总的呼叫测试次数
for(int p=0;p<20;p++)
{
if((sizeof(ParamSet)+(count[TempParam[i].ModuleID])*sizeof(SingleTestRecord))>=(unsigned)TempFileLen) break;
TestFile[TempParam[i].ModuleID].Seek((sizeof(ParamSet)+count[TempParam[i].ModuleID]*sizeof(SingleTestRecord)),CFile::begin);
TestFile[TempParam[i].ModuleID].Read(&TempTestRecord,sizeof(SingleTestRecord));
if(TempTestRecord.IsReturnRing==1) ConnectNumber[TempParam[i].ModuleID]+=1;
if(TempTestRecord.IfDropoff==1) DropoffNumber[TempParam[i].ModuleID]+=1;
if(TempTestRecord.IfSingleConnect==1) SingleConnectNumber[TempParam[i].ModuleID]+=1;
if(TempTestRecord.IfDuanXu==1) DuanxuNumber[TempParam[i].ModuleID]+=1;
CopyTime(TempDialDelayAndConnectTime.TestStartTime,TempTestRecord.TestStartMoment);//每次测试的开始时间
CopyTime(TempDialDelayAndConnectTime.ConnectStartTime,TempTestRecord.ReturnOkMoment);//每次通话开始时间
CopyTime(TempDialDelayAndConnectTime.TestEndTime,TempTestRecord.TestEndMoment);//每次测试的结束时间
if(count[TempParam[i].ModuleID]==0)
CopyTime(TempStartTime[TempParam[i].ModuleID],TempTestRecord.TestStartMoment);// 整个测试的开始时间
CopyTime(TempEndTime[TempParam[i].ModuleID],TempTestRecord.TestEndMoment);//整个测试的结束时间
TempDialDelayAndConnectTime.EveryDialDelay=TempTestRecord.DialDelay;//每次呼叫的拨号后时延
TotalDialTime[TempParam[i].ModuleID]+=TempDialDelayAndConnectTime.EveryDialDelay;//拨号后时延的累加 TotalDialTime
TempDialDelayAndConnectTime.EveryConnectTime=TempTestRecord.ConnectTime;//每次的通话时长
TotalConnectTime[TempParam[i].ModuleID]+=TempDialDelayAndConnectTime.EveryConnectTime;//通话时长的累加 TotalConnectTime
TempDialDelayAndConnectTime.TestNum=count[TempParam[i].ModuleID]+1;
DialTimeConTimeFile[TempParam[i].ModuleID].Seek(count[TempParam[i].ModuleID]*sizeof(EveryDialDelayAndConnectTime),CFile::begin);
DialTimeConTimeFile[TempParam[i].ModuleID].Write(&TempDialDelayAndConnectTime,sizeof(EveryDialDelayAndConnectTime));
count[TempParam[i].ModuleID]++;
}
CallingTotalNumber[TempParam[i].ModuleID]=count[TempParam[i].ModuleID]; //总的呼叫测试次数
}
FinalResult();
}
}
void CDataHandle::CopyTime(SYSTEMTIME& TM1,SYSTEMTIME TM2)
{
TM1.wDay=TM2.wDay;
TM1.wDayOfWeek=TM2.wDayOfWeek;
TM1.wHour=TM2.wHour;
TM1.wMilliseconds=TM2.wMilliseconds;
TM1.wMinute=TM2.wMinute;
TM1.wMonth=TM2.wMonth;
TM1.wSecond=TM2.wSecond;
TM1.wYear=TM2.wYear;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -