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

📄 salemang.cpp

📁 IP电话计费管理系统本地版
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			{
				nSaleCutLevelFlag[nLine]=1;
				bSaleCutIsValid[nLine]=FALSE;
				fSaleCutRate=atof(Idlg->strCutRate[nLine]);
				nTimeBetweenCount[nLine]++;//进入优惠时段,优惠时段计数器加加
			}
			else
			{
				fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
				nNoSaleCutCount[nLine]++;
				nSaleCutLevelFlag[nLine]=0;
			}
	   break;
   case 0:
       fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
	   nNoSaleCutCount[nLine]++;
	   nSaleCutLevelFlag[nLine]=0;
	   break;
   default:
	   break;
   }

	if(nCountMoneyTimes[nLine]<=nOFTimeLen)
	{
		fTotalORate[nLine]=fORate*nCountMoneyTimes[nLine];
		strTotalORate[nLine].Format("%.2f",fTotalORate[nLine]);
    }

	f5[nLine][nSaleCutLevelFlag[nLine]]=atof(str5)*fSaleCutRate;//折扣后的费率,不包括附加费率

	f5[nLine][nSaleCutLevelFlag[nLine]]=f5[nLine][nSaleCutLevelFlag[nLine]]*nMulti;

	CString strFee;
    strFee.Format("%.2f",(f5[nLine][3]*nHolidayCount[nLine]+f5[nLine][2]*nWeekCount[nLine]+f5[nLine][1]*nTimeBetweenCount[nLine]+f5[nLine][0]*nNoSaleCutCount[nLine]+fTotalORate[nLine]*nMulti)/nMulti);

    m_SaleGrid.SetTextMatrix(nLine+1,6,strFee);

	CString str6="";
	str6.Format("%.1f",f5[nLine][nSaleCutLevelFlag[nLine]]);
	int n5=atoi(str6);
 
	if(!str8.IsEmpty())//如果押金为空,不需计算剩余话费
	{
		double f8=atof(str8);
		f8=f8*nMulti;
		CString str9="";
		str9.Format("%.1f",f8);
		int n8=atoi(str9);
		CString strOFeeRate="";
		strOFeeRate.Format("%.1f",fORate*nMulti);
		
		int nRemain;
		if(nCountMoneyTimes[nLine]<=nOFTimeLen)
		{
			nRemain=n8-n5-atoi(strOFeeRate);
		}
		else
			nRemain=n8-n5;
		
		if(nRemain<0)//此处应改为费率
		{
			nRemain=n8;
			
			CString strHour="";
			CString strMin="";
			strHour=str4.Mid(0,2);
			strMin=str4.Mid(3,2);
			strRestoreTime=strHour+":"+strMin+":00";//恢复到0秒
			
			nCountMoneyTimes[nLine]=nCountMoneyTimes[nLine]-1;
			//自动切断通话
			Idlg->ShutDownLine(nLine);
			Idlg->bTalking[nLine]=FALSE;
			Idlg->bClosed[nLine]=TRUE;
			Idlg->AddToDb(nLine); //写记录信息
			
			CString strShowLine="";
			strShowLine.Format("%d",nLine);
			m_SaleGrid.SetTextMatrix(nLine+1,1,"结束");
		}

    div_t nResult2;
	nResult2=div(nRemain,nMulti);

	int nYuan=0;
	int nJiao=0;
	nYuan=nResult2.quot;
	nJiao=nResult2.rem;
	CString strYuan;
	strYuan.Format("%d",nYuan);
	CString strJiao;
	strJiao.Format("%d",nJiao);
    if(strJiao.GetLength()==1)
		strJiao="0"+strJiao;
    CString strRemain;
	strRemain=strYuan+"."+strJiao;
	m_SaleGrid.SetTextMatrix(nLine+1,8,strRemain);
	}

}
*/
void CSaleMang::CountMoney(int nLine)
{
	UpdateData(TRUE);
	strRestoreTime="";//初始话为空
	CIPCountDlg *Idlg;
	Idlg=(CIPCountDlg *)GetParent();
	if(Idlg==NULL)
		return ;
  
	CTime t=CTime::GetCurrentTime();
	CString strCurTime=t.Format("%Y-%m-%d %H:%M:%S");
    CString strCurYear=strCurTime.Mid(0,4);
    CString strCurMon=strCurTime.Mid(5,2);
	CString strCurDay=strCurTime.Mid(8,2);
	CString strCurHour=strCurTime.Mid(11,2);
	CString strWeek;
	strWeek.Format("%d",t.GetDayOfWeek()-1);
	if(strcmp(strWeek,"0")==0)
	    strWeek="7";

	CString str4=m_SaleGrid.GetTextMatrix(nLine+1,4);//时长

    CString str5=strGFeeRate[nLine];//费率
	CString str8=m_SaleGrid.GetTextMatrix(nLine+1,8);//押金
	if(str4.IsEmpty())
		str4="00:00:00";
    nCountMoneyTimes[nLine]++;//附加费率计数器

    double fSaleCutRate=0;//折扣率
	fSaleCutRate=atof(Idlg->strCutRate[nLine]);
    if(fSaleCutRate==0)
		fSaleCutRate=1;

    double fORate=atof(strSFeeRate[nLine]);//附加费率
	int nOFTimeLen=atoi(strOFTimeLen[nLine]);//附加费率时长
	int nStartTLen=atoi(strStartTLen[nLine]);//起计时长 for xiamen
    
   switch(Idlg->nCutLevelFlag[nLine])
   {
   case 3:
   if((atoi(strCurYear)>=atoi(Idlg->strStartCutYear[nLine]))&&(atoi(strCurYear)<=atoi(Idlg->strEndCutYear[nLine])))
   {
		if((atoi(strCurMon)>=atoi(Idlg->strStartCutMon[nLine]))&&(atoi(strCurMon)<=atoi(Idlg->strEndCutMon[nLine])))
		{
			if((atoi(strCurDay)>=atoi(Idlg->strStartCutDay[nLine]))&&(atoi(strCurDay)<=atoi(Idlg->strEndCutDay[nLine])))
			{  
				nSaleCutLevelFlag[nLine]=3;
				bSaleCutIsValid[nLine]=FALSE;
				nHolidayCount[nLine]++;//节假日计数器加加
				break;
			}
			else
				bSaleCutIsValid[nLine]=TRUE;//过期
		}
		else
			bSaleCutIsValid[nLine]=TRUE;//过期
	}
    else
		bSaleCutIsValid[nLine]=TRUE;//过期
	//过期则判断是否进入下一优惠时段
	if(bSaleCutIsValid[nLine])
	{
		if((strcmp(strWeek,Idlg->strStartCutWeek[nLine])==0)||(strcmp(strWeek,Idlg->strEndCutWeek[nLine])==0))
		{
			
			bSaleCutIsValid[nLine]=FALSE;
			fSaleCutRate=atof(Idlg->strLowCutRate[nLine]);
			nSaleCutLevelFlag[nLine]=2;
			nWeekCount[nLine]++;//进入周末优惠,周末优惠计数器加加
		}
		else
		{
			if((atoi(strCurHour)>=atoi(Idlg->strStartCutHour[nLine]))&&(atoi(strCurHour)<=atoi(Idlg->strEndCutHour[nLine])))
			{
				bSaleCutIsValid[nLine]=FALSE;
				fSaleCutRate=atof(Idlg->strLowestCutRate[nLine]);
				nTimeBetweenCount[nLine]++;//进入优惠时段,优惠时段计数器加加
				nSaleCutLevelFlag[nLine]=1;
			}
			else
			{
				fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
				nNoSaleCutCount[nLine]++;
				nSaleCutLevelFlag[nLine]=0;
			}
		}
	}
	break;
   case 2:
		if((strcmp(strWeek,Idlg->strStartCutWeek[nLine])==0)||(strcmp(strWeek,Idlg->strEndCutWeek[nLine])==0))
		{
			bSaleCutIsValid[nLine]=FALSE;
			fSaleCutRate=atof(Idlg->strCutRate[nLine]);
			nSaleCutLevelFlag[nLine]=2;
			nWeekCount[nLine]++;//进入周末优惠,周末优惠计数器加加
		}
		else
		{
			if((atoi(strCurHour)>=atoi(Idlg->strStartCutHour[nLine]))&&(atoi(strCurHour)<=atoi(Idlg->strEndCutHour[nLine])))
			{
				bSaleCutIsValid[nLine]=FALSE;
				fSaleCutRate=atof(Idlg->strLowestCutRate[nLine]);
				nTimeBetweenCount[nLine]++;//进入优惠时段,优惠时段计数器加加
				nSaleCutLevelFlag[nLine]=1;
			}
			else
			{
				fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
				nNoSaleCutCount[nLine]++;
				nSaleCutLevelFlag[nLine]=0;
			}
		}
	   break;
   case 1:
			if((atoi(strCurHour)>=atoi(Idlg->strStartCutHour[nLine]))&&(atoi(strCurHour)<=atoi(Idlg->strEndCutHour[nLine])))
			{
				nSaleCutLevelFlag[nLine]=1;
				bSaleCutIsValid[nLine]=FALSE;
				fSaleCutRate=atof(Idlg->strCutRate[nLine]);
				nTimeBetweenCount[nLine]++;//进入优惠时段,优惠时段计数器加加
			}
			else
			{
				fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
				nNoSaleCutCount[nLine]++;
				nSaleCutLevelFlag[nLine]=0;
			}
	   break;
   case 0:
       fSaleCutRate=1;//没有折扣时段,无折扣计数器加加
	   nNoSaleCutCount[nLine]++;
	   nSaleCutLevelFlag[nLine]=0;
	   break;
   default:
	   break;
   }

    if(nStartTLen>1)
	{
	    if(nCountMoneyTimes[nLine]>nStartTLen)//小于起计时长时
		{
		    fTotalORate[nLine]=fORate;
			str5=strSFeeRate[nLine];//费率等于所设的附加费率
			nNoSaleCutCount[nLine]=nCountMoneyTimes[nLine];//将计数器回复
		}
	    else
		{
			fTotalORate[nLine]=fORate;
			nNoSaleCutCount[nLine]=1;//计数器不发生变化
		}
		strTotalORate[nLine].Format("%.2f",fTotalORate[nLine]);            
	}
	else
	{
	    if(nCountMoneyTimes[nLine]<=nOFTimeLen)
		{
		    fTotalORate[nLine]=fORate*nCountMoneyTimes[nLine];
		    strTotalORate[nLine].Format("%.2f",fTotalORate[nLine]);
		}
	}

	f5[nLine][nSaleCutLevelFlag[nLine]]=atof(str5)*fSaleCutRate;//折扣后的费率,不包括附加费率

	f5[nLine][nSaleCutLevelFlag[nLine]]=f5[nLine][nSaleCutLevelFlag[nLine]]*nMulti;

	CString strFee;//话费
    strFee.Format("%.2f",(f5[nLine][3]*nHolidayCount[nLine]+f5[nLine][2]*nWeekCount[nLine]+f5[nLine][1]*nTimeBetweenCount[nLine]+f5[nLine][0]*nNoSaleCutCount[nLine]+fTotalORate[nLine]*nMulti)/nMulti);

    m_SaleGrid.SetTextMatrix(nLine+1,6,strFee);

	CString str6="";
	str6.Format("%.1f",f5[nLine][nSaleCutLevelFlag[nLine]]);
	int n5=atoi(str6);
 
	if(!str8.IsEmpty())//如果押金为空,不需计算剩余话费
	{
	double f8=atof(str8);
	f8=f8*nMulti;
	CString str9="";
	str9.Format("%.1f",f8);
	int n8=atoi(str9);
	CString strOFeeRate="";
	strOFeeRate.Format("%.1f",fORate*nMulti);

	int nRemain;
	if(nStartTLen>1)//起计时长大于一分钟
    {
		if(nCountMoneyTimes[nLine]<=nStartTLen)
		{
		    //n8=nInitCount*nMulti;
            if(nCountMoneyTimes[nLine]<2)//前三分钟话费不变
			    nRemain=n8-n5-atoi(strOFeeRate);
			else
				nRemain=n8;
		}
	    else
		{
			nRemain=n8-atoi(strOFeeRate);
		}

	}
    else
	{
	    if(nCountMoneyTimes[nLine]<=nOFTimeLen)
		{
	        nRemain=n8-n5-atoi(strOFeeRate);
		}
	    else
	        nRemain=n8-n5;
	}
    if(nRemain<0)//此处应改为费率
	{
		nRemain=n8;

		CString strHour="";
		CString strMin="";
		strHour=str4.Mid(0,2);
		strMin=str4.Mid(3,2);
		strRestoreTime=strHour+":"+strMin+":00";//恢复到0秒
 
		nCountMoneyTimes[nLine]=nCountMoneyTimes[nLine]-1;
		//自动切断通话
		Idlg->ShutDownLine(nLine);
		Idlg->bTalking[nLine]=FALSE;
		Idlg->bClosed[nLine]=TRUE;
		Idlg->AddToDb(nLine); //写记录信息

		CString strShowLine="";
		strShowLine.Format("%d",nLine);
		m_SaleGrid.SetTextMatrix(nLine+1,1,"结束");
	}

    div_t nResult2;
	nResult2=div(nRemain,nMulti);

	int nYuan=0;
	int nJiao=0;
	nYuan=nResult2.quot;
	nJiao=nResult2.rem;
	CString strYuan;
	strYuan.Format("%d",nYuan);
	CString strJiao;
	strJiao.Format("%d",nJiao);
    if(strJiao.GetLength()==1)
		strJiao="0"+strJiao;
    CString strRemain;
	strRemain=strYuan+"."+strJiao;
	m_SaleGrid.SetTextMatrix(nLine+1,8,strRemain);
	}
	
}
//依据被叫号从文件中获得该次通话的费率

//2002-09-13 修改费率获取代码
void CSaleMang::GetFeeRate(CString strCalledNum,int nLineNum)
{
	
	CIPCountDlg *Ipdlg;
	Ipdlg=(CIPCountDlg *)GetParent();
    strGFeeRate[nLineNum]="";
	strSFeeRate[nLineNum]="";//附加费率
	strOFTimeLen[nLineNum]="";//附加费率时长
	strStartTLen[nLineNum]="";//起计时长
	Ipdlg->strAreaName[nLineNum]="";
    CString strCalledNo[8];
	for(int nCalledNum=7;nCalledNum>=0;nCalledNum--)
	{
	   if(strCalledNum.GetLength()>=nCalledNum)
	   {
		  strCalledNo[nCalledNum]=strCalledNum.Mid(0,nCalledNum);
		  for(int nCmpFee=0;nCmpFee<Ipdlg->nFeeNum+1;nCmpFee++)
		  {
		  	  if(strcmp(strCalledNo[nCalledNum],Ipdlg->strFeeType[nCmpFee])==0)
			    {
				    strGFeeRate[nLineNum]=Ipdlg->strFeeMoney[nCmpFee];//v12.03.05
					
					strSFeeRate[nLineNum]=Ipdlg->strOFeeMoney[nCmpFee];
					strOFTimeLen[nLineNum]=Ipdlg->strOFeeTimeLen[nCmpFee];
					strStartTLen[nLineNum]=Ipdlg->strStartTLen[nCmpFee];//for xiamen
					switch(nCalledNum)
					{
					case 1:
	                     if(strcmp(strCalledNo[nCalledNum],"0")==0)
		                     Ipdlg->strAreaName[nLineNum]="国内";
						 else
							 Ipdlg->strAreaName[nLineNum]="本地";
						 break;
					case 2:
	                     if(strcmp(strCalledNo[nCalledNum],"00")==0)
		                     Ipdlg->strAreaName[nLineNum]="国际";
						 else
						 {
							 if(strcmp(strCalledNo[nCalledNum].Mid(0,1),"0")==0)
                                 Ipdlg->strAreaName[nLineNum]="国内";
							 else
							     Ipdlg->strAreaName[nLineNum]="本地";
						 }
						 break;
					case 3:
	                     if(strcmp(strCalledNo[nCalledNum],"001")==0)
		                     Ipdlg->strAreaName[nLineNum]="美加";
						 else
						 {
							 if(strcmp(strCalledNo[nCalledNum].Mid(0,2),"00")==0)
							      Ipdlg->strAreaName[nLineNum]="国际";
							 else
							 {
							     if(strcmp(strCalledNo[nCalledNum].Mid(0,1),"0")==0)
                                     Ipdlg->strAreaName[nLineNum]="国内";
							     else
							         Ipdlg->strAreaName[nLineNum]="本地";
							 }
						 }
						 break;
					case 4:
						 if(strcmp(strCalledNo[nCalledNum].Mid(0,3),"001")==0)
							 Ipdlg->strAreaName[nLineNum]="美加";
						 else
						 {
							 if(strcmp(strCalledNo[nCalledNum].Mid(0,2),"00")==0)
							      Ipdlg->strAreaName[nLineNum]="国际";
							 else
							 {
							     if(strcmp(strCalledNo[nCalledNum].Mid(0,1),"0")==0)
                                     Ipdlg->strAreaName[nLineNum]="国内";
							     else
							         Ipdlg->strAreaName[nLineNum]="本地";

⌨️ 快捷键说明

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