📄 ipcountdlg.cpp
字号:
//pDC->SetBkColor(RGB(20,110,165));
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CIPCountDlg::OnOK()
{
// TODO: Add extra validation here
OnLogin();
// CDialog::OnOK();
}
void CIPCountDlg::OnCancel()
{
// TODO: Add extra cleanup here
if(!sdlg->bCanQuit)
{
sdlg->OnCancel();
if(!sdlg->bCanQuit)
return;
}
if(!bChgAndCount)
{
int nQuitFlag=mdlg->GetQuitFlag();
if(nQuitFlag==1)
{
AfxMessageBox("请先扎帐");
}
else
{
if(bOpenCom[0])
{
SendData("exit",nGwCom[0]);//退到sinovoip>目录下
}
if(bOpenCom[1])
{
SendData("exit",nGwCom[1]);//退到sinovoip>目录下
}
CDialog::OnCancel();
}
}
else
{
if(bOpenCom[0])
{
SendData("exit",nGwCom[0]);//退到sinovoip>目录下
}
if(bOpenCom[1])
{
SendData("exit",nGwCom[1]);//退到sinovoip>目录下
}
CDialog::OnCancel();
}
}
void CIPCountDlg::OnComm2()
{
// TODO: Add your control notification handler code here
int nRxPort = m_ctrlComm2.GetCommPort();
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm2.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm2.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
n=m_ctrlComm2.GetInBufferCount();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData[1]+=strtemp; //加入接收编辑框对应字符串
//下面代码判断是否是回车符
char str2[2];
char tempchar[2];
tempchar[0] = (char)bt;
tempchar[1] ='\0';
sprintf(str2,"%c",'\r');//回车符
if(strcmp(tempchar,str2)==0)
{
OnRecvDTMF2(nGwCom[1]);
int nFind=0;
nFind=m_strRXData[1].Find('#',0);
if(nFind!=-1)
{
strSaveInfo.Format("%s", m_strRXData[1].Mid(nFind+1));
m_strRXData[1]="";
MidInfo(strSaveInfo,nGwCom[1]);
}
}
}
}
DealReboot(nGwCom[1]);
}
CString CIPCountDlg::GetMachineCode()
{
DWORD dwIDESerial = 19790103;//Default Value
::GetVolumeInformation("C:\\", NULL, NULL, &dwIDESerial, NULL, NULL, NULL, NULL);
CString sCode;//机器码
sCode.Format("%dMPVQLVOBQRTYUITT", dwIDESerial);//至少有16位
char Mask[17] = {"CHINAXLZCHINAXLZ"};
for (int i = 0 ; i < 16 ; i++)
{
if (sCode.GetLength() > i)
sCode.SetAt(i, (sCode.GetAt(i)|65)&0x7F);
if (sCode.GetAt(i) == 0 || sCode.GetAt(i) > 122)
sCode.SetAt(i, Mask[i]);//保证为常用字符
}
sCode.MakeUpper();
CString sMachineCode;
sMachineCode.GetBufferSetLength(16);//16位序列号码
for (int j = 0 ; j < 16 ; j++)
sMachineCode.SetAt(j, sCode.GetAt(j));
return sMachineCode;//保证一个十六位机器序列号
}
CString CIPCountDlg::SetRegCode(CString strGetCode)
{
CString sDCode;//机器码
CString sChCode[19];
if(strGetCode.GetLength()<16)
return "";
for(int k=1;k<17;k++)
sChCode[k]=strGetCode.Mid(k-1,1);
sDCode=sChCode[5]+sChCode[9]+sChCode[1]+sChCode[7]+sChCode[3]+sChCode[15]+sChCode[4]+sChCode[11]+sChCode[2]+sChCode[10]+sChCode[12]+sChCode[6]+sChCode[12]+sChCode[14]+sChCode[8]+sChCode[16];
char Mask[17] = {"HUNANXLZSICHUXLZ"};
for (int i = 0 ; i < 16 ; i++)
{
if (sDCode.GetLength() > i)
sDCode.SetAt(i, (sDCode.GetAt(i)|65)&0x4E);
if (sDCode.GetAt(i) == 0 || sDCode.GetAt(i) > 122)
sDCode.SetAt(i, Mask[i]);//保证为常用字符
}
sDCode.MakeUpper();
CString sRegCode;
sRegCode.GetBufferSetLength(16);//16位序列号码
for (int j = 0 ; j < 16 ; j++)
sRegCode.SetAt(j, sDCode.GetAt(j));
return sRegCode;//保证一个十六位机器序列号
}
BOOL CIPCountDlg::bIsValid()
{
UpdateData(TRUE);
CString strMacCode="";
strMacCode=GetMachineCode();
char sREGISTERCODE[17];
memset(sREGISTERCODE, 0, 17);
CFile sProductIDFile;
CString sDesCode="";
//获得文件的当前路径
TCHAR pFileName[MAX_PATH];
GetModuleFileName(NULL,pFileName,MAX_PATH);
if(strchr(pFileName,'\\'))
*strrchr(pFileName,'\\')='\0';
strcat(pFileName,"\\CIP.DAT");
if (sProductIDFile.Open(pFileName, CFile::modeRead))
{
sProductIDFile.Read(sREGISTERCODE, 16);
sDesCode= sREGISTERCODE;//目的注册码
sProductIDFile.Close();
}
CString sSorCode=SetRegCode(strMacCode);
if(strcmp(sSorCode,sDesCode)==0)
return TRUE;
else
{
CFile File;
if (File.Open(pFileName, CFile::modeRead))
{
File.Close();
CFile::Remove(pFileName);
}
}
CRegConf rdlg;
rdlg.m_strMacCode=GetMachineCode();
if (rdlg.DoModal() == IDOK)
{
sDesCode=SetRegCode(rdlg.m_strMacCode);
if(strcmp(rdlg.m_strRegCode,sDesCode)==0)
{
AfxMessageBox("恭喜,您注册成功了!");
bValidUser=TRUE;
CFile File;//保存产品号
if (File.Open(pFileName, CFile::modeCreate | CFile::modeWrite))
File.Write((LPCTSTR)rdlg.m_strRegCode, rdlg.m_strRegCode.GetLength());
return TRUE;
}
else
{
AfxMessageBox("错误的注册码!");
return FALSE;
}
}
else
{
AfxMessageBox("请先注册");
return FALSE;
}
}
void CIPCountDlg::ShowCInfo()
{
SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
BOOL bIsConnected = FALSE;
SQLHSTMT hstmt = NULL;
SQLRETURN rc;
SWORD sMsgNum = 0;
SDWORD pfNative=0;
if (SQL_SUCCESS == (rc =::SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv)))
{
if (SQL_SUCCESS == (rc = ::SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER)))
{
if (SQL_SUCCESS == (rc =::SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc)))
{
rc = ::SQLConnect(hdbc,(SQLCHAR*)"IPCount",SQL_NTS,(SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS);
if ((SQL_SUCCESS == rc)|| (SQL_SUCCESS_WITH_INFO == rc))
{
bIsConnected = TRUE;
if (SQL_SUCCESS == (rc =::SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt)))
{
CString strChar='\'';
CString strCDay="";
strCDay=sdlg->m_strCTime.Mid(0,10);
CString strCY,strCM,strCD;
strCY=strCDay.Mid(0,4);
strCM=strCDay.Mid(5,2);
strCD=strCDay.Mid(8,2);
CString strSQL="";
strSQL="SELECT [话费],[日期],[当前操作员] FROM huafei";
LPCSTR szSQL =strSQL;
if (SQL_SUCCESS == (rc = ::SQLPrepare(hstmt,(unsigned char*)szSQL, SQL_NTS)))
{
if (SQL_SUCCESS == (rc = ::SQLExecute(hstmt)))
{
SDWORD cb;
CString strDay="";
CString strOper="";
char szCount[PERSON_INFO]="";//话费
char szDay[PERSON_INFO]="";
char szOper[PERSON_INFO]="";
SQLBindCol(hstmt,1,SQL_C_CHAR,szCount,PERSON_INFO,&cb);
SQLBindCol(hstmt,2,SQL_C_CHAR,szDay,PERSON_INFO,&cb);
SQLBindCol(hstmt,3,SQL_C_CHAR,szOper,PERSON_INFO,&cb);
rc = SQLFetch(hstmt);
double nOperDayCount=0;
double nOperBCount=0;
while (SQL_SUCCESS == rc)
{
strDay=szDay;
strOper=szOper;
int nFindSpace=-1;
nFindSpace=strDay.Find(' ',0);
strDay=strDay.Mid(0,nFindSpace);
int nEnd=0;
int nCols=0;
int nStart=0;
CString iItems[10];
int i;
char tmp[256];
while(true)
{
nEnd=strDay.Find('-',nStart);
if (nEnd==-1)
break;
if (nStart==strDay.GetLength())
break;
memset(tmp,'\0',256);
for( i=nStart;i<nEnd;i++)
tmp[i-nStart]=LOBYTE(strDay[i]);
nStart=nEnd;
nStart++;
if(nCols<3)
{
nCols++;
iItems[nCols]=tmp;
}
iItems[3]=strDay.Mid(nEnd+1);;
}
if((strcmp(strCY,iItems[1])==0)&&(strcmp(strCM,iItems[2])==0)&&(strcmp(strCD,iItems[3])==0))
{
if(strcmp(sdlg->m_strCName,strOper)==0)
nOperBCount+=atof(szCount);
nOperDayCount+=atof(szCount);
}
//重新初始化每一个变量
strcpy((char *)szCount,LPCTSTR(""));
strcpy((char *)szDay,LPCTSTR(""));
strcpy((char *)szOper,LPCTSTR(""));
rc = SQLFetch(hstmt);
}
CString strOperDayCount="";
CString strOperBCount="";
strOperDayCount.Format("%.2f",nOperDayCount);
strOperBCount.Format("%.2f",nOperBCount);
sdlg->m_strCBCount=strOperBCount;
sdlg->m_strCDCount=strOperDayCount;
sdlg->UpdateData(FALSE);
}
}
}
}
}
}
}
if (henv)
{
if (hdbc)
{
if (bIsConnected)
{
if (hstmt)
{
::SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
::SQLDisconnect(hdbc);
bIsConnected = FALSE;
}
::SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
hdbc = NULL;
}
::SQLFreeHandle(SQL_HANDLE_ENV, henv);
henv = NULL;
}
}
void CIPCountDlg::AddToTemp(int nLineNum)
{
CTempRecordSet m_TSet(&m_database);
//获得文件的当前路径
TCHAR pFileName[MAX_PATH];
GetModuleFileName(NULL,pFileName,MAX_PATH);
if(strchr(pFileName,'\\'))
*strrchr(pFileName,'\\')='\0';
strcat(pFileName,"\\IPCount.mdb");
CString strChar="";
try
{
CString sDSN="ODBC;DRIVER=Microsoft Access Driver (*.mdb);DSN='';DBQ="+strChar+pFileName+strChar;
if(!m_database.IsOpen())
{
if(!m_database.Open(NULL,FALSE,FALSE,sDSN,FALSE))//打开数据库是否成功
{
CDialog::EndDialog(0);
GetParent()->PostMessage(WM_CLOSE);
}
}
CString strSQL="select * from Temp";
m_TSet.Open(CTempRecordSet::dynaset,strSQL);//打开数据表是否成功
}
catch(CDBException* pEx)//丢出异常处理
{
pEx->ReportError();
m_TSet.Close();
m_database.Close();
pEx->Delete();
}
if(m_TSet.CanAppend())//是否能够添加或修改
{
m_TSet.AddNew();
m_TSet.m_RNum=strStreamNum[nLineNum];//v12.03.08
m_TSet.m_RLine=m_RecodeInfo[nLineNum].m_Line;
m_TSet.m_RCalledNum=m_RecodeInfo[nLineNum].m_CalledNum;
m_TSet.m_RStartTime=m_RecodeInfo[nLineNum].m_CDay;
m_TSet.m_RTLen=m_RecodeInfo[nLineNum].m_RTLen;
if(m_TSet.m_RTLen.IsEmpty())
m_TSet.m_RTLen="00:00:01";//修改没读到时长时,写数据库为空
m_TSet.m_RFeeRate=m_RecodeInfo[nLineNum].m_Rate;
m_TSet.m_RFeeCount=m_RecodeInfo[nLineNum].m_RCount;
m_TSet.m_RPreMoney=m_RecodeInfo[nLineNum].m_PrePay;
m_TSet.m_RRemain=m_RecodeInfo[nLineNum].m_Remain;
m_TSet.m_RAreaName=strAreaName[nLineNum];
m_TSet.m_RORate=sdlg->strTotalORate[nLineNum];
m_TSet.Update();
}
m_TSet.Close();
}
void CIPCountDlg::OnTitle()
{
// TODO: Add your control notification handler code here
CTitleSet tsdlg;
tsdlg.DoModal();
UpdateData(FALSE);
}
CString CIPCountDlg::SetStreamNum()
{
CString strDay1=mdlg->GetCurDay();
CTime t=CTime::GetCurrentTime();
CString strT=t.Format("%y%m%d");
CString strDay2=strT.Mid(4,2);
CString strIndex=mdlg->GetTelIndex();
int nIndexCount=0;
nIndexCount=atoi(strIndex);
if(strcmp(strDay1,strDay2)==0)
{
nIndexCount=nIndexCount+1;
}
else
nIndexCount=1;
strIndex.Format("%d",nIndexCount);
if(strIndex.GetLength()==1)
strIndex="0000"+strIndex;
else if(strIndex.GetLength()==2)
strIndex="000"+strIndex;
else if(strIndex.GetLength()==3)
strIndex="00"+strIndex;
else if(strIndex.GetLength()==4)
strIndex="0"+strIndex;
mdlg->SetTelIndex(strIndex);
mdlg->SetCurDay(strDay2);
strT=strT+strIndex;
sdlg->m_strCDStream=strT;//显示流水号
sdlg->UpdateData(FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -