?? fuheshuizhundlg.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 + -