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

📄 fuheshuizhundlg.cpp

📁 附合水准平差计算程序 附合水准平差计算程序
💻 CPP
字号:
// FuheshuizhunDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PingCha.h"
#include "FuheshuizhunDlg.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFuheshuizhunDlg dialog

#include "PingChaView.h" 
#include "Mainfrm.h"

CFuheshuizhunDlg::CFuheshuizhunDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFuheshuizhunDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFuheshuizhunDlg)
	m_dlgNum = 0;
	m_fkm = 0.0f;
	
	//}}AFX_DATA_INIT
	m_bFileState=FALSE;
	m_nNum=0;
}


void CFuheshuizhunDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFuheshuizhunDlg)
	DDX_Text(pDX, IDC_EDIT1, m_dlgNum);
	DDX_Text(pDX, IDC_EDIT2, m_fkm);
	DDV_MinMaxFloat(pDX, m_fkm, 0.f, 100.f);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFuheshuizhunDlg, CDialog)
	//{{AFX_MSG_MAP(CFuheshuizhunDlg)
	ON_BN_CLICKED(IDC_CREATEFILE, OnCreatefile)
	ON_BN_CLICKED(IDC_OPENFILE, OnOpenfile)
	ON_BN_CLICKED(IDC_JISUAN, OnJisuan)
	ON_BN_CLICKED(IDC_DISPLAY, OnDisplay)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFuheshuizhunDlg message handlers

void CFuheshuizhunDlg::OnCreatefile() 
{
	if(m_bFileState==TRUE)  //设置文件名为空
	{	
		m_NewFileName="";
	    hwnd=NULL;
	}

	TCHAR szPathFile[MAX_PATH]; //文件名
	GetModuleFileName(NULL,szPathFile,MAX_PATH); 
    int i;
	int n=strlen(szPathFile); 
 	for(i=n;szPathFile[i]!=92;i--)   
		szPathFile[i]='\0';
    CString sFilename=szPathFile;

	FILE *fp;
	CString str[31]; 
	for(i=1;i<=30;i++)
		str[i].Format("%s附合水准数据载入%d.txt",sFilename,i);
	m_nNum++;
	m_NewFileName=str[m_nNum];

	if((fp=fopen(m_NewFileName,"w"))==NULL)
	{
		AfxMessageBox("无法打开文件");
		return;
	}	
	fclose(fp);
	ShellExecute(NULL, "open", m_NewFileName, NULL, sFilename,SW_SHOWNORMAL);	//文件打开,待输入	
	m_bFileState=true;
}

void CFuheshuizhunDlg::OnOpenfile() 
{
	CFileDialog shuizhunDlg(TRUE,"txt",".txt");
	if(shuizhunDlg.DoModal()==IDOK)
	{
		m_NewFileName=shuizhunDlg.GetPathName();
		ShellExecute(hwnd,NULL,m_NewFileName,NULL,NULL,SW_SHOWNORMAL);
	}
	m_bFileState=TRUE;	
}

void CFuheshuizhunDlg::OnJisuan() 
{
    UpdateData(true);
	if(m_dlgNum<=0||m_dlgNum>50)
	{
		AfxMessageBox("请先键入A,B之间站点(转点Pi)个数!");
		return;
	}
	if(m_bFileState==FALSE)
	{
		AfxMessageBox("请先创建一个新的数据文本文件,或打开一个创建好的的数据文本文件,再进行平差计算!");
		return;
	}

	FILE *fp;
    fp=fopen(m_NewFileName,"r");
	fscanf(fp,"%f %f",&m_fStartA,&m_fEndB);
    //读入高差,距离
	int i;
	for(i=0;i<=m_dlgNum;i++)  
        fscanf(fp,"%f",&m_fh[i]);
    for(i=0;i<=m_dlgNum;i++)   
		fscanf(fp,"%f",&m_fs[i]);
	fclose(fp);
    //数据处理
    float fBihecha;
	float fXiancha;
	float fSumh=0.0;
	float fSums=0.0;
	m_fH[0]=m_fStartA;
    for(i=0;i<=m_dlgNum;i++)
		fSumh+=m_fh[i];
	fBihecha=fSumh-(m_fStartA-m_fEndB);
	for(i=0;i<=m_dlgNum;i++)
		fSums+=m_fs[i];
    fXiancha=40*(float)sqrt(fSums);//求限差
	if(fabs((double)fBihecha)>fabs((double)fXiancha))
	{ 
		AfxMessageBox("闭合差超限!");
	}
	for(i=0;i<=m_dlgNum;i++)  //求改正数
		m_fv[i]=-fBihecha*(m_fs[i]/fSums);
	for(i=0;i<=m_dlgNum;i++)   //平差得到高程
        m_fH[i+1]=m_fH[i]+m_fh[i]+m_fv[i];
    for(i=0;i<=m_dlgNum;i++)   //各段高差的方差
		m_fskm[i]=m_fs[i]*m_fkm*m_fkm;
	float s1=0;
	float s2=0;
	float c1=0;
	float c2=0;
	float sum1;
	float sum2;
    for(i=1;i<=m_dlgNum;i++)
	{
       for(int j=0;j<i;j++)
       {
           s1+=m_fs[i];
		   c1+=m_fskm[i];
	   }
	   sum1=(1-s1/fSums)*(1-s1/fSums)*c1;
	   for(j=i;j<=m_dlgNum;j++)
	   {
           s2+=m_fs[i];
		   c2+=m_fskm[i];
	   }
	   sum2=(1-s2/fSums)*(1-s2/fSums)*c2;
	   m_fHkm[i]=sum1+sum2;  //各段高程的方差

	}
    
    CString str="附合水准计算与平差结果.txt";
    FILE *fpt;
    fpt=fopen(str,"w+");
    fprintf(fpt," %40s\n\n\n","附合水准计算与平差结果表");    	
	fprintf(fpt,"%3s        %10s   %5s  %10s  %11s %10s\n ", "站点点名","站点间高差(m)","站点间距离(km)","高差改正数(mm)","改正后高程(m)","各站点高程的方差(mm平方)");
	fprintf(fpt,"%s\n","***************************************************************");
	fprintf(fpt,"%s   %60f \n","A",m_fStartA);
	fprintf(fpt,"%s\n ","***************************************************************");
	for(i=0; i <=m_dlgNum; i++) 
		fprintf(fpt," %d %10f   %5f    %10d     %11f     %10f\n",i+1,m_fh[i],m_fs[i],m_fv[i]*1000,m_fH[i+1],m_fHkm[i+1]);
	fprintf(fpt,"%s\n ","*****************************************************************");
	fprintf(fpt,"%s   %60f \n","B",m_fEndB);
	fclose(fpt);
	ShellExecute(hwnd,NULL,str,NULL,NULL,SW_SHOWNORMAL);

}

void CFuheshuizhunDlg::OnDisplay() 
{
	UpdateData();

	CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
    CPingChaView *pView = (CPingChaView*)pFrame->GetActiveView();

	pView->DrawLine(m_dlgNum,m_fs);
//	CDialog::OnCancel();
}

⌨️ 快捷键说明

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