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

📄 shotparaview.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:

void CShotParaView::OnButtonModify() 
{
	// TODO: Add your control notification handler code here
	long lTemp = m_ctrlListDate.GetSelectionMark ();
	if(lTemp < 0 ) return;
	
	char strTemp[6];

	UpdateData();
	m_structDate[lTemp].fLimitDate = m_fLimitDate;
	m_structDate[lTemp].fDate = m_fDate;
	UpdateData(FALSE);
	sprintf(strTemp,"%3.1f",m_structDate[lTemp].fLimitDate);
	m_ctrlListDate.SetItemText (lTemp,1,strTemp);
	sprintf(strTemp,"%3.1f",m_structDate[lTemp].fDate);
	m_ctrlListDate.SetItemText (lTemp,2,strTemp);	
}

void CShotParaView::OnClickListDate(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int iTemp = m_ctrlListDate.GetSelectionMark ();
	if(iTemp < 0 ) return;
	
	UpdateData(TRUE);
	m_cstrModel = m_structDate[iTemp].strModel;
	m_fDate = m_structDate[iTemp].fDate;
	m_fLimitDate = m_structDate[iTemp].fLimitDate;
	UpdateData(FALSE);	
	*pResult = 0;
}

void CShotParaView::OnButtonComput() 
{
	// TODO: Add your control notification handler code here
	if(m_fAngle == 0.0f || m_fAngle == 180.0f)
	{
		MessageBox("角度不能为0或180度 !" ,"错误" );
		return;
	}
	if(m_structSD.fFilter == 0)
	{
		MessageBox("渗透率为0将引起零除错误 !" ,"错误" );
		return;
	}
	if(m_bWellState)					//油井
	{
		ComputOil();
	}
	else								//气井
	{
		ComputGas();
	}
	ComputShotDepth();				//深度校正
	ComputPP();						//计算校正系数	

}

void CShotParaView::ComputOil()
{
	float fTemp1,fTemp2,fTemp3;
	UpdateData(TRUE);
	fTemp1 = m_structSD.fFilter  * 1000;
	fTemp2 = m_structSD.fPress ;
	fTemp3 = (float)(17.24 / (pow(fTemp1,0.3)));
	if(fTemp3 >= (0.7 * fTemp2))
		fTemp3 = (float)(0.7 * fTemp2);
	m_fShotPress = (-fTemp3*100)/100;
	UpdateData(FALSE);
	m_fPressDiff = m_fShotPress;
}

void CShotParaView::ComputGas()
{
	float fTemp1,fTemp2,fTemp3;
	UpdateData(TRUE);
	fTemp1 = m_structSD.fFilter  * 1000;
	fTemp2 = m_structSD.fPress ;
	if(fTemp1 <10)
	{
		fTemp3 = (float)(17.24 / fTemp1);
	}
	else
	{
		fTemp3 = (float)(17.24 / (pow(fTemp1,0.18)));
	}
	if(fTemp3 >= (0.7 * fTemp2))
		fTemp3 = (float)(0.7 * fTemp2);
	m_fShotPress = (-fTemp3*100)/100;
	m_fPressDiff = m_fShotPress;
	UpdateData(FALSE);
}

void CShotParaView::ComputShotDepth()
{
	float c1,c2,c3,c4,c5,c6;
	float fTemp1;
	UpdateData(TRUE);
	
	c1 = (float)1;
	c6 = (float)1;
	fTemp1 = m_fGun;			//枪管间隙(毫米)
	if(fTemp1 >14 && fTemp1 <= 24)
		c1 = (float)0.95;
	else if(fTemp1 >24 && fTemp1 <=34)
		c1 = (float)0.9;
	else if(fTemp1 >34)
		c1 = (float)0.85;

	fTemp1 = m_fPressDiff + m_structSD.fPress ;		//射孔压差+地层压力
	if(fTemp1 < 7 )
		c2 = (float)1.1;
	else if(fTemp1 >=7 && fTemp1 <13)
		c2 = (float)1;
	else if(fTemp1 >=13 && fTemp1 <20)
		c2 = (float)0.95;
	else if(fTemp1 >=20 && fTemp1 <30)
		c2 = (float)0.9;
	else if(fTemp1 >=30)
		c2 = (float)0.85;

	fTemp1 = m_fLong;						//射孔段套管层数
	if(fTemp1 <=1)
		c3 = (float)1;
	else if(fTemp1 >1 && fTemp1 <=2)
		c3 = (float)0.6;
	else if(fTemp1 >2)
		c3 = (float)0.4;

	c5 = (float)0.9;
	CString cstrTemp;
	cstrTemp = m_structSD.cstrModel ;
	if(cstrTemp.Compare ("J-55") == 0 ||
		cstrTemp.Compare ("j-55") == 0 ||
		cstrTemp.Compare ("J55") == 0 ||
		cstrTemp.Compare ("j55") == 0 )
		c5 = (float)1.0;
	else if(
		cstrTemp.Compare ("P-110") == 0 ||
		cstrTemp.Compare ("p-110") == 0 ||
		cstrTemp.Compare ("P110") == 0 ||
		cstrTemp.Compare ("p110") == 0 )
		c5 = (float)0.75;
	else if(cstrTemp.Compare ("N80") == 0)
		c5 = (float)0.85;

	float timeTemp;
	float faib[255],ksl[255],faif;
	for(int i = 0;i<m_structTTPTable.lNum ;i++)
	{
		timeTemp = m_structDate[i].fDate  - m_structDate[i].fLimitDate  ;
		if(timeTemp <= 3)
			c4 = (float)1;
		else if(timeTemp > 3 && timeTemp <= 6)
			c4 = (float)0.9;
		else if(timeTemp > 6 && timeTemp <=12)
			c4 = (float)0.85;
		else if(timeTemp >12 )
			c4 = (float)0.8;
		faif = m_structSD.fHole ;
		faib[i] = m_structDate[i].fPortion  ;
		if(faib[i] < 0.15)
			faib[i] = (float)0.15;
		else if(faib[i] >0.22)
			faib[i] = (float)0.22;
		if(faif < 0.15)
			faif = (float)0.15;
		else if(faif >0.22)
			faif = (float)0.22;
		fTemp1 = faif/faib[i];
		ksl[i] = m_structDate[i].fShotDepth  * (float)pow(fTemp1,1.5);
		if(fTemp1 <1)
			ksl[i] = ksl[i] * (float)sqrt(0.19/faib[i]);
		else if(fTemp1 >1 && faib[i] < 0.19)
			ksl[i] = ksl[i] * (float)sqrt(faib[i]/0.19);

		c6 = ksl[i]/m_structDate[i].fShotDepth ;
		m_fPP[i] = c1*c2*c3*c4*c5*c6;
	}

	UpdateData(FALSE);
}

void CShotParaView::ComputPP()
{
	double pi = 3.1415926535;
	char strTemp[10];
	for(int iTemp=0 ;iTemp<m_structTTPTable.lNum ;iTemp++)
	{
		if(m_bAngle)
		{
			m_fPDepth[iTemp] = (float)(m_fPP[iTemp] * m_structDate[iTemp].fShotDepth * sin(m_fAngle*pi/180)); 
			m_fPDiameter[iTemp] = (float)(m_fPP[iTemp] * m_structDate[iTemp].fDiameter / pow(sin(m_fAngle*pi/180),0.5));
		}
		else
		{
			m_fPDepth[iTemp] = m_fPP[iTemp] * m_structDate[iTemp].fShotDepth ; 
			m_fPDiameter[iTemp] = m_fPP[iTemp] * m_structDate[iTemp].fDiameter ;
		}
		UpdateData();
		sprintf(strTemp,"%5.4f",m_fPP[iTemp]);
		m_ctrlShotPara.SetItemText (iTemp,3,strTemp);
		sprintf(strTemp,"%5.4f",m_fPDepth[iTemp]);
		m_ctrlShotPara.SetItemText (iTemp,4,strTemp);
		sprintf(strTemp,"%5.4f",m_fPDiameter[iTemp]);
		m_ctrlShotPara.SetItemText (iTemp,5,strTemp);
		UpdateData(FALSE);
	}
}

void CShotParaView::OnButtonTtpSave() 
{
	// TODO: Add your control notification handler code here
	if(MessageBox("本操作将计算结果保存于工程中,\n数据改变将对以后的某些计算产生影响,\n确定修改 ?",
		"工程信息",MB_ICONQUESTION|MB_YESNO)==IDNO)
	{return;}
	m_bComputeSave = TRUE;
	m_bComputeState = TRUE;
//	MessageBox("修改将在对话框关闭之后进行!","工程信息");
	CMainFrame*	pMainWnd = (CMainFrame*)AfxGetMainWnd();

	pMainWnd->m_structTTPTable.bState = m_bComputeState ;
	pMainWnd->m_structTTPTable.fGun = m_fGun ;
	pMainWnd->m_structTTPTable.fLong = m_fLong ;
	pMainWnd->m_structTTPResult.bState = TRUE;
	pMainWnd->m_structTTPResult.fPressDiff = m_fPressDiff ;
	pMainWnd->m_structTTPResult.lNum = pMainWnd->m_structTTPTable.lNum;
	for(int iTemp=0;iTemp<pMainWnd->m_structTTPResult.lNum;iTemp++)
	{
		pMainWnd->m_structTTPShotPara[iTemp] = m_structDate [iTemp];
		pMainWnd->m_structTTPResult.fPP[iTemp] = m_fPP[iTemp];
		pMainWnd->m_structTTPResult.fPDepth[iTemp] = m_fPDepth[iTemp];
		pMainWnd->m_structTTPResult.fPDiameter[iTemp] = m_fPDiameter[iTemp];
	}
	MessageBox("参数校正结果已经写入工程!","工程信息");
}

void CShotParaView::OnCheckAngle() 
{
	UpdateData();
	if(m_bAngle)
		m_ctrlAngleEdit.EnableWindow(true);
		
	else
		m_ctrlAngleEdit.EnableWindow(false);
	UpdateData(FALSE);
}

int CShotParaView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	GetParentFrame()->SetWindowText(_T("射孔参数校正"));

	
	return 0;
}

void CShotParaView::OnSpdCacl() 
{
	// TODO: Add your command handler code here
	OnButtonComput();
}

void CShotParaView::OnContextMenu(CWnd*, CPoint point)
{
	// CG: This block was added by the Pop-up Menu component	{		if (point.x == -1 && point.y == -1){			//keystroke invocation			CRect rect;			GetClientRect(rect);			ClientToScreen(rect);			point = rect.TopLeft();			point.Offset(5, 5);		}		CMenu menu;		VERIFY(menu.LoadMenu(IDR_POPUP_SPD));		CMenu* pPopup = menu.GetSubMenu(5);		ASSERT(pPopup != NULL);		CWnd* pWndPopupOwner = this;//		while (pWndPopupOwner->GetStyle() & WS_CHILD)//			pWndPopupOwner = pWndPopupOwner->GetParent();		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,			pWndPopupOwner);	}
}

⌨️ 快捷键说明

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