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

📄 dlgfgw.cpp

📁 一个有VC++开发的计算建筑工程行业软件 可以计算挖孔桩的方量,方格网的计算,支持保存和加载数据
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//删除当前列表框中的记录数据
void CDLGFGW::OnDelitem() 
{
  int PreSelIndex;
  int n=0;
  n=m_pelist.GetItemCount();
  if(n==0)
  {    SaveData();
	    return;
  }
	  else if(m_pelist.GetSelectedCount()==0 && m_countlist.GetSelectedCount()==0)  //两个列表框中均无被选择的列表项
  {
	      MessageBox("请再两个列表中的任何一个选择要删除的记录","警告");
          return;
  }
  else if(m_countlist.GetSelectedCount()!=0)
     PreSelIndex=m_pelist.GetSelectionMark(); 
  else if(m_pelist.GetSelectedCount()!=0)
     PreSelIndex=m_countlist.GetSelectionMark(); 
  m_pelist.DeleteItem(PreSelIndex); 
  m_countlist.DeleteItem(PreSelIndex); 
  OnRecount();

}
//重新计算原始数据列表框中的所有条目并把结果写入结果框中
void CDLGFGW::OnRecount() 
{
	DOUBLE resultwf=0;
    DOUBLE resulttf=0;
	DOUBLE result=0;
	CString str="0";
    BG prebg;
   ClearSum();
   m_countlist.DeleteAllItems(); 
   int n=m_pelist.GetItemCount();
   if(n==0)  
   {m_sumwf=0;  m_sumtf=0;}
   for(int i=0;i<n;i++)
   {
	   str=m_pelist.GetItemText(i,0);
	   m_countlist.InsertItem(i,str);   //方格号

       prebg.b=atof(m_pelist.GetItemText(i,1)); 
       prebg.h=atof(m_pelist.GetItemText(i,2)); 
       prebg.bg0=atof(m_pelist.GetItemText(i,3)); 
       prebg.lefttop=atof(m_pelist.GetItemText(i,4)); 
       prebg.righttop=atof(m_pelist.GetItemText(i,5)); 
       prebg.rightbuttom=atof(m_pelist.GetItemText(i,6)); 
       prebg.leftbuttom=atof(m_pelist.GetItemText(i,7)); 

		INT styleid=GetCountStyle(prebg);
		if(m_countstyle==0)  //四棱柱体积法
		{
			resultwf=CountValue(prebg);
			resulttf=CountValueTF(prebg);
		}
		else 
		{
			result=CountValueAVE(prebg);
			if(result>=0) {resultwf=result; resulttf=0;}
			else          {resultwf=0;resulttf=result; }
		}

		if(styleid==0) str="四挖";
		  else if(styleid==1)  str="三挖一填";
		  else if(styleid==2)  str="两挖两填(边)";
		  else if(styleid==3)  str="两挖两填(角)";
		  else if(styleid==4)  str="三填一挖";
		  else if(styleid==5)  str="四填";
		  else if(styleid==-1)  str="未知";
		  m_countlist.SetItem(i,1,LVIF_TEXT,str,0,0,0,0); //计算方法

		  if(resultwf>0 && resulttf==0)
		  {
			  str="挖方";
              sumwf=sumwf+resultwf;
			  m_sumwf=sumwf;
		  }
		  else   if(resulttf<0 && resultwf==0) 
		  {
			   str="填方";
			   sumtf=sumtf+resulttf;
			   m_sumtf=sumtf;
		  }
		  else   if(resulttf<0 && resultwf>=0) 
		  {
			   str="挖填方";
			   sumtf=sumtf+resulttf;
			   sumwf=sumwf+resultwf;
			   m_sumtf=sumtf;
			   m_sumwf=sumwf;
		  }
		  else  str="无挖填";

		  m_countlist.SetItem(i,2,LVIF_TEXT,str,0,0,0,0); //挖填方

		  str.Format("%6.2f",resultwf);
		  m_countlist.SetItem(i,3,LVIF_TEXT,str,0,0,0,0); //挖方量 
  		  str.Format("%6.2f",resulttf);
		  m_countlist.SetItem(i,4,LVIF_TEXT,str,0,0,0,0); //填方量 
  
		  str="已再计算";
		  m_countlist.SetItem(i,5,LVIF_TEXT,str,0,0,0,0); //备注


   }//end for
     m_sumitems=m_pelist.GetItemCount();
	 CDLGFGW::UpdateData(FALSE); 
	
}
//从文件中导入已保存的数据内容并写入列表框中
void CDLGFGW::ImporData()
{  
	int n=0;
	CString str="";
	ifstream readdata;
    FGWDATA gcitems;
	char ch[60]="";
	//m_pelist.DeleteAllItems(); 
	try
	{
		readdata.open("fgwdata",ios::in);
		if(!readdata)
			MessageBox("打开文件fgwdata用于读取方格网原始数据值时出错","错误",MB_OK);
		else 
		{
			 while(!readdata.eof())
			 {
				readdata>>gcitems.ID;
				readdata>>gcitems.fgw.b>>gcitems.fgw.h>>gcitems.fgw.bg0>>gcitems.fgw.lefttop>>gcitems.fgw.righttop>>gcitems.fgw.rightbuttom>>gcitems.fgw.leftbuttom;
				readdata>>ch;
                gcitems.strdemo=ch;
				if(gcitems.strdemo=="")  break;
			      n=m_pelist.GetItemCount();
				  str.Format("%4d",gcitems.ID); 

				  m_pelist.InsertItem(n,str);   //方格号
				  str.Format("%6.3f",gcitems.fgw.b); 
				  m_pelist.SetItem(n,1,LVIF_TEXT,str,0,0,0,0); //方格长
				  
				  str.Format("%6.3f",gcitems.fgw.h); 
				  m_pelist.SetItem(n,2,LVIF_TEXT,str,0,0,0,0); //方格宽
				  str.Format("%6.3f",gcitems.fgw.bg0); 
				  m_pelist.SetItem(n,3,LVIF_TEXT,str,0,0,0,0); //平基标高
				  str.Format("%6.3f",gcitems.fgw.lefttop); 
				  m_pelist.SetItem(n,4,LVIF_TEXT,str,0,0,0,0); //方格左上角标高
				  str.Format("%6.3f",gcitems.fgw.righttop); 
				  m_pelist.SetItem(n,5,LVIF_TEXT,str,0,0,0,0); //方格右上角标高
				  str.Format("%6.3f",gcitems.fgw.rightbuttom); 
				  m_pelist.SetItem(n,6,LVIF_TEXT,str,0,0,0,0); //方格右下角标高
				  str.Format("%6.3f",gcitems.fgw.leftbuttom); 
				  m_pelist.SetItem(n,7,LVIF_TEXT,str,0,0,0,0); //方格左下角标高
				  if(gcitems.strdemo=="")  gcitems.strdemo="备注"; 
	        	  m_pelist.SetItem(n,8,LVIF_TEXT,gcitems.strdemo,0,0,0,0); //方格左上角标高
		  

			}
			readdata.close(); 
		}
	}
		catch(...)
		{
			MessageBox("打开文件fgwdata用于读取方格网原始数据值时出错","错误",MB_OK);
		}

}
//重新计算原始数据表中的数据并写入结果列表框中
void CDLGFGW::CountList()
{

}
//将当前的原始数据列表框中的内容保存到列表框中
void CDLGFGW::SaveData()
{
   ofstream writedata;
    FGWDATA gcitems;
  //退出时保存各值
CString Prev=_T("");
int n=m_pelist.GetItemCount();
///if(n==0)
//if(n==0) return;
try
{
	writedata.open("fgwdata",ios::out);
	if(!writedata)
		MessageBox("打开文件fgwdata用于保存新设置的参数值时出错","错误",MB_OK);
	else 
	{
		for( int i=0;i<n;i++)
		{	gcitems.ID=atoi(m_pelist.GetItemText(i,0));
            gcitems.fgw.b=atof(m_pelist.GetItemText(i,1));
			gcitems.fgw.h=atof(m_pelist.GetItemText(i,2)); 
			gcitems.fgw.bg0= atof(m_pelist.GetItemText(i,3));
			gcitems.fgw.lefttop=atof(m_pelist.GetItemText(i,4));
			gcitems.fgw.righttop= atof(m_pelist.GetItemText(i,5));
			gcitems.fgw.rightbuttom= atof(m_pelist.GetItemText(i,6));
			gcitems.fgw.leftbuttom=atof(m_pelist.GetItemText(i,7));
			gcitems.strdemo=m_pelist.GetItemText(i,8);
				if(gcitems.strdemo=="")  gcitems.strdemo="备注";

			writedata<<gcitems.ID<<"\n";
			writedata<<gcitems.fgw.b<<"   "<<gcitems.fgw.h<<"  ";
			writedata<<gcitems.fgw.bg0<<"  "<<gcitems.fgw.lefttop<<"  ";
			writedata<<gcitems.fgw.righttop<<"  "<<gcitems.fgw.rightbuttom<<"  ";
            writedata<<gcitems.fgw.leftbuttom<<"\n";
		    writedata<<gcitems.strdemo;
			if(i<n-1)
			    writedata<<"\n";
		}//end for

		}
		writedata.close(); 
	}
	catch(...)
	{
		MessageBox("打开文件fgwdata用于保存新设置的参数值时出错","错误",MB_OK);
	}

}

//计算当前方格方量值(仅挖方),返回负为填方,返回正为挖方参数为方格有关参数结构体
DOUBLE CDLGFGW::CountValue(BG Prebg)
{
	DOUBLE V=0;
	CString str="";
    int style=0;
	DOUBLE id1=Prebg.lefttop-Prebg.bg0 ;
	DOUBLE id2=Prebg.righttop-Prebg.bg0 ;
	DOUBLE id3=Prebg.rightbuttom-Prebg.bg0;
	DOUBLE id4=Prebg.leftbuttom-Prebg.bg0 ;
	if(fabs(id1)+fabs(id2)+fabs(id3)+fabs(id4)<0.0001)  return 0;
   if(m_countstyle==0)   //四棱柱体积法
   {
	   style=GetCountStyle(Prebg);
       switch(style)
	   {
	   case 0:  //四挖
           V=((Prebg.lefttop+Prebg.righttop+Prebg.rightbuttom+Prebg.leftbuttom)/4-Prebg.bg0)*Prebg.b*Prebg.h;  
		   break;
	   case 1:  //三挖一填
           {
			   if(id1<0) V=(Prebg.b*Prebg.h/4)*(id2+id3+id4)*(id2+id3+id4)/(fabs(id1)+id2+id3+id4);
			   else if(id2<0) V=(Prebg.b*Prebg.h/4)*(id1+id3+id4)*(id1+id3+id4)/(id1+fabs(id2)+id3+id4);
			   else if(id3<0) V=(Prebg.b*Prebg.h/4)*(id1+id2+id4)*(id1+id2+id4)/(id1+id2+fabs(id3)+id4);
			   else if(id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id2+id3)*(id1+id2+id3)/(id1+id2+id3+fabs(id4));
                V=fabs(V);
			    break;
		   }
	   case 2:  //两挖两填(边)
		   if(id1<0 && id2<0) V=(Prebg.b*Prebg.h/4)*(id3+id4)*(id3+id4)/(fabs(id1+id2)+id3+id4);
           else if(id1<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id2+id4)*(id2+id4)/(fabs(id1)+id2+fabs(id3)+id4);
           else if(id1<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id2+id3)*(id2+id3)/(fabs(id1)+id2+id3+fabs(id4));
           else if(id2<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id1+id4)*(id1+id4)/(id1+fabs(id2)+fabs(id3)+id4);
           else if(id2<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id3)*(id1+id3)/(id1+fabs(id2)+id3+fabs(id4));
           else if(id3<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id2)*(id1+id2)/(id1+id2+fabs(id3)+fabs(id4));
		   V=fabs(V);
		   break;
	   case 3:  //两挖两填(角)
		   if(id1<0 && id2<0) V=(Prebg.b*Prebg.h/4)*(id3+id4)*(id3+id4)/(fabs(id1+id2)+id3+id4);
           else if(id1<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id2+id4)*(id2+id4)/(fabs(id1)+id2+fabs(id3)+id4);
           else if(id1<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id2+id3)*(id2+id3)/(fabs(id1)+id2+id3+fabs(id4));
           else if(id2<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id1+id4)*(id1+id4)/(id1+fabs(id2)+fabs(id3)+id4);
           else if(id2<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id3)*(id1+id3)/(id1+fabs(id2)+id3+fabs(id4));
           else if(id3<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id2)*(id1+id2)/(id1+id2+fabs(id3)+fabs(id4));
		   V=fabs(V);
		   break;
	   case 4: //三填一挖
		   if(id1>0) V=(Prebg.b*Prebg.h/4)*(id1)*(id1)/(id1+fabs(id2+id3+id4));
			 else if(id2>0) V=(Prebg.b*Prebg.h/4)*(id2)*(id2)/(fabs(id1+id3+id4)+id2);
			 else if(id3>0) V=(Prebg.b*Prebg.h/4)*(id3)*(id3)/(fabs(id1+id2+id4)+id3);
			 else if(id4>0) V=(Prebg.b*Prebg.h/4)*(id4)*(id4)/(fabs(id1+id2+id3)+id4);
             V=fabs(V);
		   break;
	   case 5:  //四填
			V=0;
		   break;
	   case 6:  //未知计算方法
			V=((Prebg.lefttop+Prebg.righttop+Prebg.rightbuttom+Prebg.leftbuttom)/4-Prebg.bg0)*Prebg.b*Prebg.h;  
             V=fabs(V);
		   break;
	   default:
		   break;

	   }//end switch

   }//end if(countstyle==0)
   
    str.Format("%9.3f",V);
	V=atof(str);
	return V;
}
//使累加方量回原0
void CDLGFGW::ClearSum()
{
	m_sumwf=0; 
	m_sumtf=0; 
	sumtf=0;
	sumwf=0;
}
//得到当前方格的计算方法:
//返回值:0:四挖,1:三挖一填;2:两挖两填(边);3:两挖两填(对角);4:三填一挖;5:四挖
INT CDLGFGW::GetCountStyle(BG PreBg)
{
	DOUBLE id1=PreBg.lefttop-PreBg.bg0 ;
	DOUBLE id2=PreBg.righttop-PreBg.bg0 ;
	DOUBLE id3=PreBg.rightbuttom-PreBg.bg0;
	DOUBLE id4=PreBg.leftbuttom-PreBg.bg0 ;
	if(id1>=0 &&  id2>=0 &&  id3>=0 &&  id4>=0 )  return 0;
	else if((id1>=0 &&  id2>=0 &&  id3>=0 &&  id4<0)||
		    (id1>=0 &&  id2>=0 &&  id3<0 &&  id4>=0)||
            (id1>=0 &&  id2<0 &&  id3>=0 &&  id4>=0)||
            (id1<0 &&  id2>=0 &&  id3>=0 &&  id4>=0))
			return 1;
	else if((id1>=0 &&  id2>=0 &&  id3<0 &&  id4<0)||
		    (id2>=0 &&  id3>=0 &&  id1<0 &&  id4<0)||
			(id3>=0 &&  id4>=0 &&  id1<0 &&  id2<0)||
		    (id1>=0 &&  id4>=0 &&  id2<0 &&  id3<0))
			return 2;
	else if((id1>=0 &&  id2<0 &&  id3>=0 &&  id4<0)||
		    (id1<0 &&  id2>=0 &&  id3<0 &&  id4>=0))
			return 3;
	else if((id1<0 &&  id2<0 &&  id3<0 &&  id4>=0)||
		    (id1<0 &&  id2<0 &&  id3>=0 &&  id4<0)||
            (id1<0 &&  id2>=0 &&  id3<0 &&  id4<0)||
            (id1>=0 &&  id2<0 &&  id3<0 &&  id4<0))
            return 4;
    else if(id1<0 &&  id2<0 &&  id3<0 &&  id4<0 )  return 5;
    else 
	{
		MessageBox("没有判断出当前方格的计算方法","提示");
		return 6;
	}
}
//退出时提示是否保存当前值
void CDLGFGW::OnOK() 
{
	ofstream writedata;

⌨️ 快捷键说明

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