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

📄 commucationview.cpp

📁 一个可以控制单片机根据通话时间和所拨地区进行计费的软件!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
										backup[i]+=(float)intValue/100;
									}
									else
									{
										intValue=m_Data[i].unitprice3*pos/100;
										backup[i]+=(float)intValue/100;
									}
									accumulator[i]+=1;
								}
							}
						}
						m_Remain[i]=m_Money[i]-backup[i];
						price.Format("%6.2f",backup[i]);
						SetDlgItemText(iSpend[i],price);
						price.Format("%6.2f",m_Remain[i]);
						SetDlgItemText(iRemain[i],price);
	            		switch(i)
						{
							case 0:m_Bitmap1.SetBitmap(hChat);
							case 1:m_Bitmap2.SetBitmap(hChat);
							case 2:m_Bitmap3.SetBitmap(hChat);
							case 3:m_Bitmap4.SetBitmap(hChat);
							case 4:m_Bitmap5.SetBitmap(hChat);
							case 5:m_Bitmap6.SetBitmap(hChat);
							case 6:m_Bitmap7.SetBitmap(hChat);
							case 7:m_Bitmap8.SetBitmap(hChat);
							case 8:m_Bitmap9.SetBitmap(hChat);
							case 9:m_Bitmap10.SetBitmap(hChat);
							case 10:m_Bitmap11.SetBitmap(hChat);
							case 11:m_Bitmap12.SetBitmap(hChat);
							case 12:m_Bitmap13.SetBitmap(hChat);
							case 13:m_Bitmap14.SetBitmap(hChat);
							case 14:m_Bitmap15.SetBitmap(hChat);
							case 15:m_Bitmap16.SetBitmap(hChat);
						}

						
						//获取一秒后的通话费用
						timetotal[i]+=1;
						if((m_Data[i].time1==0)||((timetotal[i]-1)<time1[i]))
						{
							counter=(timetotal[i]-1)/m_Data[i].unittime1+1;
							CString x;
							x.Format("%d",counter);
							TRACE(x);
							if(counter>accumulate[i])
							{								
								int pos=GetDiscount(BeginTime[i]+timetotal[i],m_Data[i].location,m_Data[i].ip);
								if(m_Data[i].surcharge1!=0)
								{
									intValue=m_Data[i].unitprice1*pos/100+m_Data[i].surcharge1;
									total[i]+=(float)intValue/100;
								}
								else
								{
									intValue=m_Data[i].unitprice1*pos/100;
									total[i]+=(float)intValue/100;
								}
								accumulate[i]+=1;												
							}
							
						}
						else if((m_Data[i].time2==0)||((timetotal[i]-1)<time2[i]))
						{
							counter=m_Data[i].time1+(timetotal[i]-1-time1[i])/m_Data[i].unittime2+1;
							if(counter>accumulate[i])
							{
								int pos=GetDiscount(BeginTime[i]+timetotal[i],m_Data[i].location,m_Data[i].ip);
								if(m_Data[i].surcharge2!=0)
								{
									intValue=m_Data[i].unitprice2*pos/100+m_Data[i].surcharge2;
									total[i]+=(float)intValue/100;
								}
								else
								{
									intValue=m_Data[i].unitprice2*pos/100;
									total[i]+=(float)intValue/100;
								}
								accumulate[i]+=1;
							}
						}
						else
						{
							counter=m_Data[i].time1+m_Data[i].time2+(timetotal[i]-1-time1[i]-time2[i])/m_Data[i].unittime2+1;
							if(counter>accumulate[i])
							{
								int pos=GetDiscount(BeginTime[i]+timetotal[i],m_Data[i].location,m_Data[i].ip);
								if(m_Data[i].surcharge3!=0)
								{
									intValue=m_Data[i].unitprice3*pos/100+m_Data[i].surcharge3;
									total[i]+=(float)intValue/100;
								}
								else
								{
									intValue=m_Data[i].unitprice3*pos/100;
									total[i]+=(float)intValue/100;
								}
								accumulate[i]+=1;
							}
						}
						//减去其它费用
						m_IsShut[i]=m_Money[i]-total[i];
						if(m_Data[i].billcharge!=0)
						{
    						m_IsShut[i]-=(float)m_Data[i].billcharge/100;
						}
						else if(m_Data[i].percharge!=0)
						{
							m_IsShut[i]-=m_Data[i].percharge*total[i];
						}
						//判断是否断开
		    			if(m_IsShut[i]<0)
						{
							SendStr[SendLen]='A';
							SendStr[SendLen+1]='T';
							SendStr[SendLen+2]='C';
							SendStr[SendLen+3]=48+i;
							SendStr[SendLen+4]='\r';
							SendLen+=5;
						}
						m_Repeat[i]=FALSE;
					}
            		if(info.Mid(43*i,2)=="30")
					{
						//如果有意外情况,则执行以下操作
			    		if(m_Repeat[i])
						{
							m_Repeat[i]=FALSE;
							//取电话号码
							Num="";
                			for(j=1;j<24;j++)
							{
             					if((info.Mid(43*i+2+j,1)!="f")&&(info.Mid(43*i+2+j,1)!=" "))
								{
	                    			Bit=info.Mid(43*i+2+j,1);
		                 			Num+=Bit;
								}
							}
							PhoneNo[i]=Num;
          	        		SetDlgItemText(iTele[i],Num);
				    		Code[i]=Num.Left(11);
							
							//取出电话号码对应的数据
							m_Data[i]=GetFeeInfo(Code[i]);
							time1[i]=m_Data[i].time1*m_Data[i].unittime1;
							time2[i]=m_Data[i].time2*m_Data[i].unittime2+time1[i];							

							iLevel[i]=m_Data[i].countlevel;

							//取出通话起始时间
	             			BeginChat[i]="";
	            			for(j=0;j<8;j++)
							{
			            		if(info.Mid(43*i+33+j,1)==" ")
								{
						    		Bit=":";
								}
			            		else
								{
				            		Bit=info.Mid(43*i+33+j,1);
								}
	        	    			BeginChat[i]+=Bit;
							}
							//将通话起始时间赋给三个变量
							sscanf(BeginChat[i].Left(2),"%d",&sHour);
							sscanf(BeginChat[i].Mid(3,2),"%d",&sMin);
							sscanf(BeginChat[i].Mid(6,2),"%d",&sSec);
							//显示通话起始时间
							SetDlgItemText(iStart[i],BeginChat[i]);
							//将通话起始时间赋给BeginTime[i]变量
							BeginTime[i]=CTime::GetCurrentTime();
							int Year=BeginTime[i].GetYear();
							int Month=BeginTime[i].GetMonth();
							int Day=BeginTime[i].GetDay();
							BeginTime[i]=CTime::CTime(Year,Month,Day,sHour,sMin,sSec);

							timetotal[i]=GetSpendTime(i);
				    		hour=timetotal[i]/3600;
				    		second=timetotal[i] % 60;
				    		minute=(timetotal[i] % 3600)/60;

							//显示通话时间
			     			CodeView.Format("%d",hour);
							if(CodeView.GetLength()<2)
								CodeView="0"+CodeView;
							CodeView+=":";
							Num.Format("%d",minute);
							if(Num.GetLength()<2)
								Num="0"+Num;
							CodeView+=Num;
							CodeView+=":";
							Num.Format("%d",second);
							if(Num.GetLength()<2)
								Num="0"+Num;
							CodeView+=Num;
	            			SetDlgItemText(iTime[i],CodeView);
							//特殊话费处理
							ProcessTotal(i);

							//计算附加费
    						if(m_Data[i].billcharge!=0)
							{
								AddFee[i]=(float)m_Data[i].billcharge/100;
								backup[i]+=AddFee[i];
							}
							else if(m_Data[i].percharge!=0)
							{
								AddFee[i]=backup[i]*m_Data[i].percharge/100;
								backup[i]+=AddFee[i];
							}
							else
							{
								AddFee[i]=0;
							}
							m_Remain[i]=m_Money[i]-backup[i];
							//显示话费
							price.Format("%6.2f",backup[i]);
							SetDlgItemText(iSpend[i],price);
							//显示余额
							price.Format("%6.2f",m_Remain[i]);
							SetDlgItemText(iRemain[i],price);
				     		
							//求余额
		        			m_Money[i]-=backup[i];

							CString add;
							add.Format("%d",i+1);
							if(add.GetLength()<2)
							{
				     			add="0"+add;
							}
							NumFlag+=add;
							m_Report=0;

							ProcessFile(i);
							ProcessData(i);
							if(m_Data[i].IsPrint)
								OnFilePrint();

							//计数值还原
							total[i]=0;
							backup[i]=0;
							accumulator[i]=0;
							accumulate[i]=0;
							SetDlgItemText(iTele[i],"");
							SetDlgItemText(iStart[i],"");
							SetDlgItemText(iSpend[i],"");
							SetDlgItemText(iTime[i],"");
							SetDlgItemText(iRemain[i],"");
						}

	            		switch(i)
						{
							case 0:m_Bitmap1.SetBitmap(hCounter);
							case 1:m_Bitmap2.SetBitmap(hCounter);
							case 2:m_Bitmap3.SetBitmap(hCounter);
							case 3:m_Bitmap4.SetBitmap(hCounter);
							case 4:m_Bitmap5.SetBitmap(hCounter);
							case 5:m_Bitmap6.SetBitmap(hCounter);
							case 6:m_Bitmap7.SetBitmap(hCounter);
							case 7:m_Bitmap8.SetBitmap(hCounter);
							case 8:m_Bitmap9.SetBitmap(hCounter);
							case 9:m_Bitmap10.SetBitmap(hCounter);
							case 10:m_Bitmap11.SetBitmap(hCounter);
							case 11:m_Bitmap12.SetBitmap(hCounter);
							case 12:m_Bitmap13.SetBitmap(hCounter);
							case 13:m_Bitmap14.SetBitmap(hCounter);
							case 14:m_Bitmap15.SetBitmap(hCounter);
							case 15:m_Bitmap16.SetBitmap(hCounter);
						}
    					
						//发送结账命令
						SendStr[SendLen]='A';
						SendStr[SendLen+1]='T';
						SendStr[SendLen+2]='P';
						SendStr[SendLen+3]=48+i;
						SendStr[SendLen+4]='\r';
						SendLen+=5;

	    				if(Clear[i])
						{
							//关闭费率计算按钮
							Clear[i]=FALSE;
							//获取通话时间
				    		timetotal[i]=GetSpendTime(i);
				    		hour=timetotal[i]/3600;
				    		second=timetotal[i] % 60;
				    		minute=(timetotal[i] % 3600)/60;

							//显示通话时间
			     			CodeView.Format("%d",hour);
							if(CodeView.GetLength()<2)
								CodeView="0"+CodeView;
							CodeView+=":";
							Num.Format("%d",minute);
							if(Num.GetLength()<2)
								Num="0"+Num;
							CodeView+=Num;
							CodeView+=":";
							Num.Format("%d",second);
							if(Num.GetLength()<2)
								Num="0"+Num;
							CodeView+=Num;
	            			SetDlgItemText(iTime[i],CodeView);

							//累加通话费用  
							if((m_Data[i].time1==0)||((timetotal[i]-1)<time1[i]))
							{
								counter=(timetotal[i]-1)/m_Data[i].unittime1+1;
								if(counter>accumulator[i])
								{								
									int pos=GetDiscount(BeginTime[i]+timetotal[i],m_Data[i].location,m_Data[i].ip);
									if(m_Data[i].surcharge1!=0)
									{
										intValue=m_Data[i].unitprice1*pos/100+m_Data[i].surcharge1;
										backup[i]+=(float)intValue/100;
									}
									else
									{
										intValue=m_Data[i].unitprice1*pos/100;
										backup[i]+=(float)intValue/100;
									}
									accumulator[i]+=1;												
								}
								
							}
							else if((m_Data[i].time2==0)||((timetotal[i]-1)<time2[i]))
							{
								counter=m_Data[i].time1+(timetotal[i]-1-time1[i])/m_Data[i].unittime2+1;
								if(counter>accumulator[i])
								{
									int pos=GetDiscount(BeginTime[i]+timetotal[i],m_Data[i].location,m_Data[i].ip);
									if(m_Data[i].surcharge2!=0)
									{
										intValue=m_Data[i].unitprice2*pos/100+m_Data[i].surcharge2;
										backup[i]+=(float)intValue/100;
									}
									else
									{
										intValue=m_Data[i].unitprice2*pos/100;
										backup[i]+=(float)intValue/100;
									}
									accumulator[i]+=1;
								}
							}
							else
							{
								counter=m_Data[i].time1+m_Data[i].time2+(timetotal[i]-1-time1[i]-time2[i])/m_Data[i].unittime2+1;
								if((timetotal[i]-m_Data[i].time2*m_Data[i].unitprice2-m_Data[i].time1*m_Data[i].unittime1-1)/m_Data[i].unittime3==0)
								{
									int pos=GetDiscount(BeginTime[i]+timetotal[i],m_Data[i].location,m_Data[i].ip);
									if(m_Data[i].surcharge3!=0)
									{
										intValue=m_Data[i].unitprice3*pos/100+m_Data[i].surcharge3;
										backup[i]+=(float)intValue/100;
									}
									else
									{
										intValue=m_Data[i].unitprice3*pos/100;
										backup[i]+=(float)intValue/100;
									}
									accumulator[i]+=1;
								}
							}

							//计算附加费
    						if(m_Data[i].billcharge!=0)
							{
								AddFee[i]=(float)m_Data[i].billcharge/100;
								backup[i]+=AddFee[i];
							}
							else if(m_Data[i].percharge!=0)
							{
								AddFee[i]=backup[i]*m_Data[i].percharge/100;
								backup[i]+=AddFee[i];
							}
							else
							{
								AddFee[i]=0;
							}
							m_Remain[i]=m_Money[i]-backup[i];
							//显示话费
							price.Format("%6.2f",backup[i]);
							SetDlgItemText(iSpend[i],price);
							//显示余额
							price.Format("%6.2f",m_Remain[i]);
							SetDlgItemText(iRemain[i],price);
				     		
							//求余额
		        			m_Money[i]-=backup[i];

							CString add;
							add.Format("%d",i+1);
							if(add.GetLength()<2)
							{
				     			add="0"+add;
							}
							NumFlag+=add;
							m_Report=0;

							ProcessFile(i);
							ProcessData(i);
							if(m_Data[i].IsPrint)
								OnFilePrint();

							//计数值还原
							total[i]=0;
							backup[i]=0;
							accumulator[i]=0;
							accumulate[i]=0;
							SetDlgItemText(iTele[i],"");
							SetDlgItemText(iStart[i],"");
							SetDlgItemText(iSpend[i],"");
							SetDlgItemText(iTime[i],"");
							SetDlgItemText(iRemain[i],"");
						}
					}
				}
				test=2;
			}
			else
			{
				if(test==0)
				{
					SetDlgItemText(IDC_STATUS,"串口告警");

					m_Bitmap1.SetBitmap(hAlarm);
					m_Bitmap2.SetBitmap(hAlarm);
					m_Bitmap3.SetBitmap(hAlarm);
					m_Bitmap4.SetBitmap(hAlarm);
					m_Bitmap5.SetBitmap(hAlarm);
					m_Bitmap6.SetBitmap(hAlarm);
					m_Bitmap7.SetBitmap(hAlarm);
					m_Bitmap8.SetBitmap(hAlarm);
					m_Bitmap9.SetBitmap(hAlarm);
					m_Bitmap10.SetBitmap(hAlarm);
					m_Bitmap11.SetBitmap(hAlarm);
					m_Bitmap12.SetBitmap(hAlarm);
					m_Bitmap13.SetBitmap(hAlarm);
					m_Bitmap14.SetBitmap(hAlarm);
					m_Bitmap15.SetBitmap(hAlarm);
					m_Bitmap16.SetBitmap(hAlarm);

					for(int d=0;d<16;d++)
					{
						m_Rept[d]=TRUE;
						m_Repeat[d]=TRUE;
						accumulate[d]=0;
						accumulator[d]=0;
						backup[d]=0;
						total[d]=0;
					}
				}
				else
				{
					test=test-1;
				}
			}
    		m_IsRece=0;
		}
	}

	CFormView::OnTimer(nIDEvent);
}

LRESULT CCommucationView::OnNewMessage(UINT wParam) 
{
	m_IsRece=wParam;
	info=m_serial.GetValue();
	return 0L;
}

void CCommucationView::OnButton2() 
{
	// TODO: Add your control notification handler code here
	if(info.GetLength()==690)
	{
		SignalProcess(1);
	}
}

void CCommucationView::OnButton3() 
{
	// TODO: Add your control notification handler code here
	if(info.GetLength()==690)
	{
		SignalProcess(2);
	}
}

void CCommucationView::OnButton4() 
{
	// TODO: Add your control notification handler code here
	if(info.GetLength()==690)
	{
		SignalProcess(3);
	}
}

void CCommucationView::OnPriceSet() 
{
	// TODO: Add your command handler code here
	CStdioFile file;
	CPriceDialog m_Dlg;
	CString str;
	CString filename;
	filename="Phone.txt";
	if(file.Open(filename,CFile::modeReadWrite|CFile::typeText)==0)
	{
		AfxMessageBox("failure");
	}
	str.Format("余额:%6.2f元",m_Money[0]);
	m_Dlg.m_sta1=str;
	str.Format("余额:%6.2f元",m_Money[1]);
	m_Dlg.m_sta2=str;
	str.Format("余额:%6.2f元",m_Money[2]);
	m_Dlg.m_sta3=str;
	str.Format("余额:%6.2f元",m_Money[3]);
	m_Dlg.m_sta4=str;

⌨️ 快捷键说明

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