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

📄 jcview.cpp

📁 本程序实现了自动平差的功能
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// JcView.cpp : implementation file
//

#include "stdafx.h"
#include "demo_devstudio.h"
#include "JcView.h"
#include "treeviewfile.h"
#include "afxdao.h"
#include "demo_devstudiodoc.h"
#include "mainfrm.h"
#include "childfrm.h"
#include "crack.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define pi 3.1415926
#define po 206265
/////////////////////////////////////////////////////////////////////////////
// CJcView

IMPLEMENT_DYNCREATE(CJcView, CFormView)

CJcView::CJcView()
	: CFormView(CJcView::IDD)
{
	//{{AFX_DATA_INIT(CJcView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CJcView::~CJcView()
{
	ljb.DeleteAllItems();
	for(int b=0;b<=m_myyzarray.GetUpperBound();b++)
	{
		if(m_myyzarray.GetAt(b))
			delete m_myyzarray.GetAt(b);
	}
	m_myyzarray.RemoveAll();
}

void CJcView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CJcView)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CJcView, CFormView)
	//{{AFX_MSG_MAP(CJcView)
	ON_WM_SIZE()
	ON_BN_CLICKED(IDC_NEXT, OnNext)
	ON_BN_CLICKED(IDC_JIESHU, OnJieshu)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CJcView diagnostics

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

void CJcView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CJcView message handlers
	


void CJcView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	CRect rect1;
	if(!GetDlgItem(IDC_NEXT))
		return;
    if(!GetDlgItem(IDC_JIESHU))
		return;
	if(!GetDlgItem(IDC_EDIT1))
		return;
  GetClientRect(rect1);
  GetDlgItem(IDC_NEXT)->SetWindowPos(0,rect1.left+15,rect1.bottom-75,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_SHOWWINDOW);
  GetDlgItem(IDC_JIESHU)->SetWindowPos(0,rect1.left+15,rect1.bottom-40,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_SHOWWINDOW);
  GetDlgItem(IDC_EDIT1)->SetWindowPos(0,0,0,250,rect1.bottom-80,SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
  // TODO: Add your message handler code here
	
}

void CJcView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
	
}
typedef struct jiedian
{
CString dianhao;
bool isknow;
}*jd;
double chazhaojuli(CArray<jl,jl>* parray,CString sd,CString md)
{ 
  for(int r=0;r<=parray->GetUpperBound();r++)
  {if(strcmp(parray->GetAt(r)->shoudian,sd)==0&&strcmp(parray->GetAt(r)->modian,md)==0)
     return parray->GetAt(r)->juli;
   if(strcmp(parray->GetAt(r)->shoudian,md)==0&&strcmp(parray->GetAt(r)->modian,sd)==0)
     return parray->GetAt(r)->juli;
  }
  return -1;
}
extern double liushizshi(double liudata);
extern CString liushiyunsuan(double m_str1,double m_str2);
void CJcView::OnNext() 
{
	// TODO: Add your control notification handler code here
	 
	   CMainFrame* p_mainfrm;
	   p_mainfrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;

		 ASSERT(p_mainfrm);
	   CChildFrame* pchildframe;
	   pchildframe=(CChildFrame*)p_mainfrm->GetActiveFrame();
         ASSERT(pchildframe);
		CDemo_DevStudioDoc *mydoc=(CDemo_DevStudioDoc*)pchildframe->GetActiveDocument();
         ASSERT(mydoc);
	       
	   CString dbname=mydoc->m_workname;

       CString commandstr;
       GetDlgItem(IDC_NEXT)->GetWindowText(commandstr);
	   CDaoDatabase *m_database;
       	 CDaoRecordset *m_recordset;
	
       	m_database=new CDaoDatabase;
      
	   try
	   {   
		 m_database->Open(dbname);
		 m_recordset=new CDaoRecordset(m_database);


	}
	 catch(CDaoException* e)
	 {
        e->ReportError();
		delete m_database;
		m_database=NULL;
		e->Delete();
		return;
	 
	 }		 

	   if(!strcmp(commandstr,"开始"))
	   { GetDlgItem(IDC_NEXT)->SetWindowText("平差");
         
	          
		         if(m_recordset->IsOpen())
			         m_recordset->Close();
					  try
					   {
						   CString strselect(_T("Select * From["));
	                 	 
						   strselect+="水平观测角";
	                 	   strselect+=_T("]");
		                    m_recordset->Open(dbOpenDynaset,strselect);
                           if(!m_recordset->CanUpdate())
			                    return;
				           COleVariant var1,var2,var3;
						   CString czstr=_T("havenoyuanshu");
						   double dxjiao,gcjiao;
		                   while(!m_recordset->IsEOF())
						   {      
			                    
                                var1=m_recordset->GetFieldValue(0);
                                var2=m_recordset->GetFieldValue(1);
                                var3=m_recordset->GetFieldValue(2);
								gcjiao=atof(CCrack::strVARIANT(var3));
                                if(!strcmp(czstr,CCrack::strVARIANT(var1)))
								    	ljb.Addzzdian(CCrack::strVARIANT(var1),CCrack::strVARIANT(var2),atof(liushiyunsuan(gcjiao,dxjiao)));
                                 else
								 {
									 ljb.Addcezhan(CCrack::strVARIANT(var1),CCrack::strVARIANT(var2));
									 dxjiao=atof(CCrack::strVARIANT(var3));
	                                 czstr=CCrack::strVARIANT(var1);							
								 }
								m_recordset->MoveNext();
			                    
						  
						   }

					   }
		               catch(CDaoException* e)
					   {
			                  e->ReportError();
			                  e->Delete();
			                  return;
					   }
					  
                      m_recordset->Close();
					  //把已知信息写入邻接表
				
                       
						CArray<jl,jl> pjlarray;
						
                         
					      try
						  {

		                    CString select(_T("Select * From["));
	                 	    select+="已知点坐标高程";
	                 	    select+=_T("]");
		                    m_recordset->Open(dbOpenDynaset,select);
                            if(!m_recordset->CanUpdate())
			                    return;
                           COleVariant var1,var2,var3;
						   while(!m_recordset->IsEOF())
						   {      
			                    
                                var1=m_recordset->GetFieldValue(0);
								
                                
								    var2=m_recordset->GetFieldValue(1);
								    var3=m_recordset->GetFieldValue(2);
									CString str2=CCrack::strVARIANT(var2);
									CString str1=CCrack::strVARIANT(var1);
								    CString str3=CCrack::strVARIANT(var3);
								    yz newyz=new yizhidian;
								    newyz->dianhao=str1;
									newyz->x=atof(str2);
									newyz->y=atof(str3);
									m_myyzarray.Add(newyz);
								int index =ljb.Findczd(str1);
								if(index!=-1)
								{   
									ljb.m_xian.GetAt(index)->x=atof(str2);
									ljb.m_xian.GetAt(index)->y=atof(str3);

									ljb.m_xian.GetAt(index)->isknow=1;
								}
								m_recordset->MoveNext();
					
						   }
						  }
		               catch(CDaoException* e)
					   {
			                  e->ReportError();
			                  e->Delete();
			                  return;
					   }
                         m_recordset->Close();
						  try
						  {

		                    CString select(_T("Select * From["));
	                 	    select+="距离";
	                 	    select+=_T("]");
		                    m_recordset->Open(dbOpenDynaset,select);
                            if(!m_recordset->CanUpdate())
			                    return;
                           COleVariant var1,var2,var3;
						   while(!m_recordset->IsEOF())
						   {    var1=m_recordset->GetFieldValue(0);
						        var2=m_recordset->GetFieldValue(1);
								var3=m_recordset->GetFieldValue(2);

			                    jl pjl=new cjuli;
								pjl->shoudian=CCrack::strVARIANT(var1);
								pjl->modian=CCrack::strVARIANT(var2);
								pjl->juli=atof(CCrack::strVARIANT(var3));
                                pjlarray.Add(pjl);
								m_recordset->MoveNext();
					
						   }
						  }
		               catch(CDaoException* e)
					   {
			                  e->ReportError();
			                  e->Delete();
			                  return;
					   }
                         m_recordset->Close();
                      //开始求近似值

                        
						 CArray<qsd,qsd> qsdarray;//存放能够起算的数据
						 CArray<hd,hd> hdarray;//存放弧段
						 CString qicstr;
						 CString qidstr;
						 double qicdatax,qicdatay,qiddatax,qiddatay;
						 qicstr.Empty();
						 qidstr.Empty();
                         for(int index=0;index<=ljb.m_xian.GetUpperBound();index++)
						 {
                                if(ljb.m_xian.GetAt(index)->isknow)
								{   qicstr=ljb.m_xian.GetAt(index)->czdian;
									int b;
									
								    CString dxname=ljb.m_xian.GetAt(index)->dxdian;
                                    
									for( b=0;b<=m_myyzarray.GetUpperBound();b++)
									{ 
									 if(!strcmp(dxname,m_myyzarray.GetAt(b)->dianhao))
									{
									       
										  
											qidstr=dxname;
						                     break;			
									}
								    else
									{   zzd p_zzd=ljb.m_xian.GetAt(index)->pzzdian;
                                         while(p_zzd)
										 { CString zzname=p_zzd->dianhao;
										  
										   if(!strcmp(zzname,m_myyzarray.GetAt(b)->dianhao))
										   {   qidstr=zzname;
											  
										      break;
										   }
										   
                                            else
										   
                                            p_zzd=p_zzd->myzzdian;
										 }
                                             
									}
                                   
									}
                                  
								}
                              if(qidstr.IsEmpty()==false)
							  {
				                //qsd p_qsd=new qisuandian;
								//p_qsd->cpoint=qicstr;
								//p_qsd->zpoint=qidstr;
								//qsdarray.Add(p_qsd);
								  break;
							  }
                              
						 }
                          if(qicstr.IsEmpty())
							 MessageBox("已知数据不够,或者本程序不能处理这样的导线网");
        				  if(qidstr.IsEmpty())
							  MessageBox("本软件暂不能处理此导线网");
						  // MessageBox(qicstr);
						   //MessageBox(qidstr);
						        int m_index1=ljb.Findczd(qicstr);
								int m_index2=ljb.Findczd(qidstr);
								qicdatax=ljb.m_xian.GetAt(m_index1)->x;
								qicdatay=ljb.m_xian.GetAt(m_index1)->y;
								 try
								 {

		                           CString select(_T("Select * From["));
	                 	           select+="已知点坐标高程";
	                 	           select+=_T("]");
		                           m_recordset->Open(dbOpenDynaset,select);
                                    if(!m_recordset->CanUpdate())
			                               return;
                                    COleVariant var1,var2,var3;
						            while(!m_recordset->IsEOF())
									{      
			                     
                                        var1=m_recordset->GetFieldValue(0);
								        CString str1=CCrack::strVARIANT(var1);
								        if(!strcmp(str1,qidstr))
										{  var2=m_recordset->GetFieldValue(1);
								           CString str2=CCrack::strVARIANT(var2);
										   var3=m_recordset->GetFieldValue(2);
								           CString str3=CCrack::strVARIANT(var3);
										   qiddatax=atof(str2);
										   qiddatay=atof(str3);
										   break;
										
							           
									  		         
									   }
								       m_recordset->MoveNext();
					
									}
								 }
		                         catch(CDaoException* e)
								 {
			                        e->ReportError();
			                        e->Delete();
			                        return;
								 }
                                 m_recordset->Close();
								
                                double qishifwj=atan2(qiddatay-qicdatay,qiddatax-qicdatax);
								//CString qistr;
							//	qistr.Format("%f",qishifwj);
								//MessageBox(qistr);
                                CArray<jd,jd> jdarray;
						       // 把节点写进数组
                                for(int c=0;c<ljb.m_xian.GetUpperBound();c++)
								{
							     czd pzd=ljb.m_xian.GetAt(c);
							     if(pzd->du>=2)
								 { jd pjd=new jiedian;

⌨️ 快捷键说明

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