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

📄 commucationview.cpp

📁 一个可以控制单片机根据通话时间和所拨地区进行计费的软件!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		for(j=0;j<number;j++)
		{
			temp="0"+temp;
		}
		pDC->TextOut(1097,450,temp);
		pDC->SelectObject(pOldFont);
		for(j=0;j<7;j++)
		{
			file.Seek(j*35,CFile::begin);
			file.Write("0000 00000000 000000.00 000000.00",33);
		}
		file.Seek(402,CFile::begin);
		file.Write("000",3);
		file.Close();
	}
	else if(m_Report==2)
	{
		//打印房号   	
    	str=m_Result.m_Room.Left(2);
    	str=str+"号话亭";
     	pDC->TextOut(120,50,str);
    	pDC->TextOut(905,50,str);
		//打印附加费
		str=m_Result.m_Add;
		str="话单附加费:  "+str+"元";
		pDC->TextOut(300,50,str);
    	pDC->TextOut(1085,50,str);
		//打印日期
    	pDC->TextOut(480,0,m_Result.m_Date);
    	pDC->TextOut(1265,0,m_Result.m_Date);
		//打印流水号
    	pDC->TextOut(80,0,m_Result.m_Serial);
    	pDC->TextOut(865,0,m_Result.m_Serial);
		//打印被叫号
		str=m_Result.m_Phone;
		str.TrimRight("_");
    	pDC->TextOut(120,110,str);
    	pDC->TextOut(905,110,str);
	 	//打印起始时间
		pDC->TextOut(120,170,m_Result.m_StTime);
    	pDC->TextOut(905,170,m_Result.m_StTime);
    	//打印通话时间
    	temp=m_Result.m_SpTime;
    	pDC->TextOut(530,170,temp);
    	pDC->TextOut(1315,170,temp);
    	//打印话价
		temp=m_Result.m_Price.Left(5);
		temp.TrimLeft();
		str=temp+"元/";
		temp=m_Result.m_Price.Right(3);
		temp.TrimLeft();
		str=str+temp+"秒";
		pDC->TextOut(120,230,str);
    	pDC->TextOut(905,230,str);
	 	//打印总价
    	str=m_Result.m_Cost;
    	pDC->TextOut(500,230,str);
    	pDC->TextOut(1285,230,str);
		//打印工号
		str=m_Result.m_Duty+"号";
		pDC->TextOut(395,280,str);
		pDC->TextOut(1180,280,str);
	}
	else if(m_Report==3)
	{
		str="营业员:  "+m_Statistic.name+"  工号:  "+m_Statistic.gonghao+"     日期: "+m_Statistic.Day;
		pDC->TextOut(0,100,str);
		pDC->TextOut(0,150,"类别                 通话数(次)        金额(元)");     
		pDC->TextOut(0,200,"本地电话");
		str.Format("%4d",m_Statistic.local1);
		pDC->TextOut(280,200,str);
		str.Format("%6.2f",m_Statistic.local2);
		pDC->TextOut(500,200,str);
		pDC->TextOut(0,250,"国内长途电话");
		str.Format("%4d",m_Statistic.china1);
		pDC->TextOut(280,250,str);
		str.Format("%6.2f",m_Statistic.china2);
		pDC->TextOut(500,250,str);
		pDC->TextOut(0,300,"港、澳、台电话");
		str.Format("%4d",m_Statistic.hongkong1);
		pDC->TextOut(280,300,str);
		str.Format("%6.2f",m_Statistic.hongkong2);
		pDC->TextOut(500,300,str);
		pDC->TextOut(0,350,"国际长途电话");
		str.Format("%4d",m_Statistic.inter1);
		pDC->TextOut(280,350,str);
		str.Format("%6.2f",m_Statistic.inter2);
		pDC->TextOut(500,350,str);
		pDC->TextOut(0,400,"合计");
		int iCount;
		double iSum;
		iCount=m_Statistic.local1+m_Statistic.china1+m_Statistic.hongkong1+m_Statistic.inter1;
		str.Format("%4d",iCount); 
		pDC->TextOut(280,400,str);
		iSum=m_Statistic.local2+m_Statistic.china2+m_Statistic.hongkong2+m_Statistic.inter2;
		str.Format("%6.2f",iSum);
		pDC->TextOut(500,400,str);
	}
	else if(m_Report==4)
	{
		int account;
		pDC->TextOut(0,0,m_Statis.dates);
		pDC->TextOut(0,70,"营业员  话单数  本地电话  国内长途电话  港澳台电话  国际长途电话");
		account=m_Statis.num;
		for(int i=1;i<=m_Statis.num;i++)
		{			
			account-=1;
			str=m_Statis.name.Left(8);
			m_Statis.name=m_Statis.name.Right(account*8);
			str.TrimRight();
			pDC->TextOut(0,50*i+70,str);

			str=m_Statis.huadan.Left(5);
			m_Statis.huadan=m_Statis.huadan.Right(account*5);
			pDC->TextOut(100,50*i+70,str);

			str=m_Statis.local.Left(8);
			m_Statis.local=m_Statis.local.Right(account*8);
			pDC->TextOut(200,50*i+70,str);

			str=m_Statis.china.Left(8);
			m_Statis.china=m_Statis.china.Right(account*8);
			pDC->TextOut(350,50*i+70,str);

			str=m_Statis.gat.Left(8);
			m_Statis.gat=m_Statis.gat.Right(account*8);
			pDC->TextOut(510,50*i+70,str);

			str=m_Statis.internal.Left(8);
			m_Statis.internal=m_Statis.internal.Right(account*8);
			pDC->TextOut(680,50*i+70,str);
		}
	}
	else
	{
		//打印房号   	
    	int RoomNo;
    	str=NumFlag.Left(2);
    	number=NumFlag.GetLength();
    	NumFlag=NumFlag.Right(number-2);
     	sscanf(str,"%d",&RoomNo);
    	str=str+"号话亭";
     	pDC->TextOut(120,50,str);
    	pDC->TextOut(905,50,str);
		//打印附加费
		str.Format("%5.2f",AddFee[RoomNo-1]);
		str="话单附加费:  "+str+"元";
		pDC->TextOut(300,50,str);
    	pDC->TextOut(1085,50,str);
		//打印日期
    	pDC->TextOut(450,0,PhoneDate[RoomNo-1]);
    	pDC->TextOut(1235,0,PhoneDate[RoomNo-1]);
		//打印流水号
    	pDC->TextOut(80,0,SerialNo[RoomNo-1]);
    	pDC->TextOut(865,0,SerialNo[RoomNo-1]);
		//打印被叫号
    	pDC->TextOut(120,110,PhoneNo[RoomNo-1]);
    	pDC->TextOut(905,110,PhoneNo[RoomNo-1]);
	 	//打印起始时间
		pDC->TextOut(120,170,BeginChat[RoomNo-1]);
    	pDC->TextOut(905,170,BeginChat[RoomNo-1]);
    	//打印通话时间
    	temp.Format("%d",timetotal[RoomNo-1]);
    	for(i=0;i<(5-temp.GetLength());i++)
		{
	    	temp=" "+temp;
		}
		temp+="秒";
    	pDC->TextOut(530,170,temp);
    	pDC->TextOut(1315,170,temp);
    	//打印话价
		temp=PhonePrice[RoomNo-1].Left(5);
		temp.TrimLeft();
		str=temp+"元/";
		temp=PhonePrice[RoomNo-1].Right(3);
		temp.TrimLeft();
		str=str+temp+"秒";
		pDC->TextOut(120,230,str);
    	pDC->TextOut(905,230,str);
	 	//打印总价
    	str.Format("%5.2f",backup[RoomNo-1]);
    	str+="元";
    	pDC->TextOut(500,230,str);
    	pDC->TextOut(1285,230,str);
		//打印工号
		str=duty+"号";
		pDC->TextOut(395,280,str);
		pDC->TextOut(1180,280,str);
		
	}
    CView::OnPrint(pDC,pInfo);
}

/////////////////////////////////////////////////////////////////////////////
// CCommucationView diagnostics

#ifdef _DEBUG
void CCommucationView::AssertValid() const
{
	CFormView::AssertValid();
}

void CCommucationView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CCommucationDoc* CCommucationView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCommucationDoc)));
	return (CCommucationDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCommucationView message handlers

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


void CCommucationView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default	
	int i;
    if(ComIsOpen==TRUE)
	{
		//校验收到的数据是否正确
		check_sum=0;
		check_addend=1;
		if(info.GetLength()==690)
		{
    		for(i=0;i<16;i++)
			{
    			for(j=0;j<14;j++)
				{
	    			sscanf(info.Mid(43*i+3*j,2),"%x",&check_addend);
	    			check_sum+=check_addend;
				}
			}
			check_sum=check_sum % 256;
	    	sscanf(info.Mid(688,2),"%x",&check_addend);
		}
		//察看数据
		if(m_IsView)
		{
			m_IsView=m_IsView-1;
            AfxMessageBox(info);
		}
		
		//如果是刚启动,则给单片机赋时间
		if(m_Initial)
		{
			CTime t=CTime::GetCurrentTime();
			if(t.GetSecond()==0)
			{
				m_Initial=FALSE;
				SendStr[0]='A';
				SendStr[1]='T';
				SendStr[2]='T';
				SendStr[3]=t.GetHour()/10;
				SendStr[4]=t.GetHour() % 10;
				SendStr[5]=t.GetMinute()/10;
				SendStr[6]=t.GetMinute() % 10;
				SendStr[7]='\r';
				SendStr[8]='\0';
				m_serial.Send(
         			SendStr,	// buffer to send
     				8		// length of buffer to send
    				);
			}
		}
		else
		{
			//发送ATF等信号
			SendStr[SendLen]='A';
			SendStr[SendLen+1]='T';
			SendStr[SendLen+2]='F';
			SendStr[SendLen+3]='\r';
			SendStr[SendLen+4]='\0';
			SendLen+=5;
			m_serial.Send(
         		SendStr,	// buffer to send
     			SendLen-1		// length of buffer to send
    			);
			SendLen=0;

			//判断收到的数据是否正确
			if(check_sum!=check_addend)
				m_IsRece=0;

			//如果收到的数据正确,开始执行
    		if(m_IsRece)
			{
				SetDlgItemText(IDC_STATUS,"状态");
				for(i=0;i<16;i++)
				{
     				if(info.Mid(43*i,2)=="00")
					{
						switch(i)
						{
							case 0:m_Bitmap1.SetBitmap(hClose);
							case 1:m_Bitmap2.SetBitmap(hClose);
							case 2:m_Bitmap3.SetBitmap(hClose);
							case 3:m_Bitmap4.SetBitmap(hClose);
							case 4:m_Bitmap5.SetBitmap(hClose);
							case 5:m_Bitmap6.SetBitmap(hClose);
							case 6:m_Bitmap7.SetBitmap(hClose);
							case 7:m_Bitmap8.SetBitmap(hClose);
							case 8:m_Bitmap9.SetBitmap(hClose);
							case 9:m_Bitmap10.SetBitmap(hClose);
							case 10:m_Bitmap11.SetBitmap(hClose);
							case 11:m_Bitmap12.SetBitmap(hClose);
							case 12:m_Bitmap13.SetBitmap(hClose);
							case 13:m_Bitmap14.SetBitmap(hClose);
							case 14:m_Bitmap15.SetBitmap(hClose);
							case 15:m_Bitmap16.SetBitmap(hClose);
						}
						
	//	    	           	SetDlgItemText(iButton[i],"断开");
		        		Code[i]="";
					}
					if(info.Mid(43*i,2)=="01")
					{
						switch(i)
						{
							case 0:m_Bitmap1.SetBitmap(hOpen);
							case 1:m_Bitmap2.SetBitmap(hOpen);
							case 2:m_Bitmap3.SetBitmap(hOpen);
							case 3:m_Bitmap4.SetBitmap(hOpen);
							case 4:m_Bitmap5.SetBitmap(hOpen);
							case 5:m_Bitmap6.SetBitmap(hOpen);
							case 6:m_Bitmap7.SetBitmap(hOpen);
							case 7:m_Bitmap8.SetBitmap(hOpen);
							case 8:m_Bitmap9.SetBitmap(hOpen);
							case 9:m_Bitmap10.SetBitmap(hOpen);
							case 10:m_Bitmap11.SetBitmap(hOpen);
							case 11:m_Bitmap12.SetBitmap(hOpen);
							case 12:m_Bitmap13.SetBitmap(hOpen);
							case 13:m_Bitmap14.SetBitmap(hOpen);
							case 14:m_Bitmap15.SetBitmap(hOpen);
							case 15:m_Bitmap16.SetBitmap(hOpen);
						}

	//	       	    		SetDlgItemText(iButton[i],"接通");
					}
            		if(info.Mid(43*i,2)=="43")
					{
	            		switch(i)
						{
							case 0:m_Bitmap1.SetBitmap(hDial);
							case 1:m_Bitmap2.SetBitmap(hDial);
							case 2:m_Bitmap3.SetBitmap(hDial);
							case 3:m_Bitmap4.SetBitmap(hDial);
							case 4:m_Bitmap5.SetBitmap(hDial);
							case 5:m_Bitmap6.SetBitmap(hDial);
							case 6:m_Bitmap7.SetBitmap(hDial);
							case 7:m_Bitmap8.SetBitmap(hDial);
							case 8:m_Bitmap9.SetBitmap(hDial);
							case 9:m_Bitmap10.SetBitmap(hDial);
							case 10:m_Bitmap11.SetBitmap(hDial);
							case 11:m_Bitmap12.SetBitmap(hDial);
							case 12:m_Bitmap13.SetBitmap(hDial);
							case 13:m_Bitmap14.SetBitmap(hDial);
							case 14:m_Bitmap15.SetBitmap(hDial);
							case 15:m_Bitmap16.SetBitmap(hDial);
						}
						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;
							}
						}
          				SetDlgItemText(iTele[i],Num);
	        			Code[i]=Num.Left(11);
						m_Retry[i]=TRUE;
						m_Rept[i]=FALSE;
					}
             		if(info.Mid(43*i,2)=="63")
					{
						//重取电话号码
						if(m_Retry[i])
						{
							m_Retry[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];
							Clear[i]=TRUE;
							//取出统计级
							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]=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);

						if((m_Rept[i])||(m_Force[i]))
						{
							m_Force[i]=FALSE;
							m_Rept[i]=FALSE;
							ProcessTotal(i);
							total[i]=backup[i];
						}
						else
						{
							//累加通话费用  
							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;

⌨️ 快捷键说明

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