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

📄 formmain.cs

📁 用C#开发的录井油气识别专家系统
💻 CS
📖 第 1 页 / 共 5 页
字号:
		private void templatereasonsetting_Click(object sender, System.EventArgs e)
		{
			
			

			if(dlgTemplateReasonSetting.ShowDialog()==DialogResult.OK)
			{
			}
			
		}
	
		private void templateReason_Click(object sender, System.EventArgs e)
		{
			TemplateReason();
		}
		//模板推理的方法
	
		public void TemplateReason()
		{
		
			
			
			int idData;
			
			bool suc;
			DataGridCell myDataGridCell = examdg.CurrentCell;
			BindingManagerBase bm = BindingContext[examdg.DataSource, examdg.DataMember];
			for(int i=0;i<bm.Count;i++)
			{
				if(!examdg.IsSelected(i))
					continue;

				examdg.CurrentCell = new DataGridCell(i,1);
				DataRowView drv = (DataRowView) bm.Current;
				idData=Convert.ToInt16(drv["序号"]);
				ShowMessage("对样品 "+ Convert.ToString(idData)+" 进行判断:\r\n");
				
				

				suc=TemplateReasonSingleRow(idData);
				if(!suc)
				{
					ShowMessage("\t模板库不能完全匹配此样品!\r\n");
					
				}
			}
		}//end function


		private bool  TemplateReasonSingleRow(int idData)
		{
  	
			bool ma=false;
			
			//for(int bittoignore=0;bittoignore<=Convert.ToInt16(dlgTemplateReasonSetting.bittoignore.Text);bittoignore++)
			//for(int bittoignore=Convert.ToInt16(dlgTemplateReasonSetting.bittoignore.Text); bittoignore<=Convert.ToInt16(dlgTemplateReasonSetting.bittoignore.Text);bittoignore++)

			int bittoignore=Convert.ToInt16(dlgTemplateReasonSetting.bittoignore.Text);
		{
			if(false)
			{
				ShowMessage("\t忽略参数基因后"+Convert.ToString(bittoignore)+"位进行推理......\r\n");
			
			}

			ma=TemplateReasonSingleRow(idData,bittoignore);
			if(ma)
				return true;

		}//end for

			return false;
		}

	

		private bool  TemplateReasonSingleRow(int idData,int bitstoignore)
		{
			bool ma=false;
			int idTemp=0;
			
			Hashtable scores= new Hashtable();//用来存放实际得分
			Hashtable scoresIdeal= new Hashtable();//用来存放理想得分
			
			double score=0;
			double scoreIdeal=0;
			foreach(DataRow dr in TemplateSet.TemplateTable.Rows)
			{
				idTemp=Convert.ToInt16(dr["序号"]);

				score=0;
				scoreIdeal=0;
				if(TemplateReasonSingleRow(idTemp,idData,bitstoignore,ref score,ref scoreIdeal))
				{
					ma=true;
                    
					
				}
					
				scores.Add(idTemp,score);
				scoresIdeal.Add(idTemp,scoreIdeal);
			}
			
			//以下计算
			if(scores.Count<=0)
				return false;
			IDictionaryEnumerator myEnumerator = scores.GetEnumerator();
			int idMaxTemp=0;
			if( myEnumerator.MoveNext() )
				idMaxTemp=((int)(myEnumerator.Key));
		
			myEnumerator.Reset();
			while ( myEnumerator.MoveNext() )
			{
				
				idTemp=((int)(myEnumerator.Key));
				score=Convert.ToDouble(myEnumerator.Value);
				if(score>Convert.ToDouble(scores[(object)idMaxTemp]))
					idMaxTemp=idTemp;
				
			}
			
			double matchrate=Convert.ToDouble(scores[(object)idMaxTemp]);
			matchrate/=Convert.ToDouble(scoresIdeal[(object)idMaxTemp]);
			matchrate*=100.0f;
			
			DataRow[] drMaxTemplate=TemplateSet.TemplateTable.Select("序号="+Convert.ToString(idMaxTemp));
			string s="";
			

			s+="\ttemplate:"+Convert.ToString(idMaxTemp)+",\tscore:"+Convert.ToString(matchrate)+"%\r\n";
			s+=ma ? "\t完全匹配," : "\t部分匹配,";
			s+="\t结论为:\t"+Convert.ToString(drMaxTemplate[0]["结论"]);
			s+="\r\n";
			ShowMessage(s);

			

			
			AddTemplateReasonResult(idData,Convert.ToString(drMaxTemplate[0]["结论"]),idMaxTemp,matchrate);
			//UpdateTemplateResultinExamSet(idData,Convert.ToString(drMaxTemplate[0]["结论"]),idMaxTemp,matchrate);

			return ma;
		}//end function





		void UpdateTemplateResultinExamSet(int idData,string resulttype,int idTemp,double matchrate)
		{
				
			string select="[序号]=" + Convert.ToString(idData);

			DataRow[] dr1=ResultTableG.Select(select);
			
			DataRow temp;
			if(dr1.Length<=0)
			{
				temp=ResultTableG.NewRow();
				ResultTableG.Rows.Add(temp);
				temp["序号"]=idData;

			}
			else
				temp=dr1[0];

			temp[myExamDataSet.NAME_TEMPLATERESUTL_FIELDNAME]=resulttype;

			temp[myExamDataSet.NAME_TEMPLATERNUM_FIELDNAME]=idTemp;
			temp[myExamDataSet.NAME_TEMPLATER_MATCHDEGREE_FIELDNAME]=matchrate;		
	
		}

		void AddTemplateReasonResult(int idData,string resulttype,int idTemp,double matchrate)
		{
			//生成空的结果表
			//将空的结果表加入到结果数据集中
			if(TemplateResultTable==null)
				TemplateResultTable=ExamSet.CreateTemplateResultTable();

			
			DataRow rowResult=TemplateResultTable.NewRow();
			rowResult["序号"]=idData;
			rowResult["结论"]=resulttype;
			rowResult["匹配模板"]=idTemp;
			rowResult["匹配度"]=matchrate;




			
			DataRow[] drData=ExamTable.Select("序号="+idData);
			
			if(drData.Length<=0)
			{
				ShowMessage("can not find the corresponding source recorde in examdatatable!");
				return;
			}
			
			
			
			
			rowResult["井号"]=drData[0]["井号"];
			rowResult["井段"]=drData[0]["井段"];


			
			TemplateResultTable.Rows.Add(rowResult);
					
		
		}




		private bool TemplateReasonSingleRow(int idTemp,int idData,int bitstoignore,ref double score,ref double scoreIdeal)
		{

			
			string filterTemp="序号="+idTemp;
			string filterData="序号="+idData;
			DataRow[] drTemplate=TemplateSet.TemplateTable.Select(filterTemp);
			DataRow[] drTemplateMax=TemplateSet.TemplateMaxTable.Select(filterTemp);
			DataRow[] drTemplateMin=TemplateSet.TemplateMinTable.Select(filterTemp);
			DataRow[] drData=ExamTable.Select(filterData);
			if(drTemplate.Length<=0)
				return false;
			if(drData.Length<=0)
				return false;
			if(drTemplateMin.Length<=0)
				return false;
			if(drTemplateMax.Length<=0)
				return false;
			
			
			bool b=MatchRow(drData[0],drTemplate[0],drTemplateMin[0],drTemplateMax[0],bitstoignore,ref score,ref scoreIdeal);
			
			return b;
		}//enf fuction

		#endregion

		private void Application_Idle(object sender, EventArgs e)
		{

		}

		private void autocreatetemplatemdb_Click(object sender, System.EventArgs e)
		{

			if(SampleTable==null)
			{
				ShowMessage("请先打开标准样本数据库");
				return;
			}
			string mbDb="";//模板数据库
			OpenFileDialog openFileDialog1 = new OpenFileDialog();

			//openFileDialog1.InitialDirectory = "c:\\" ;
			openFileDialog1.Filter = "access文件(*.mdb)|*.mdb|All files (*.*)|*.*" ;
			openFileDialog1.FilterIndex = 2 ;
			openFileDialog1.RestoreDirectory = true ;
			
			
			openFileDialog1.Title="打开模板数据库";


			if(openFileDialog1.ShowDialog() == DialogResult.OK)
				mbDb= openFileDialog1.FileName;
			else
				return ;

			string s="";
			s+=@";Provider=Microsoft.Jet.OLEDB.4.0";
			s+=@";Prompt=Complete";
			s+=@";Password=""""";
			s+=@";User ID=Admin";
			s+=@";Mode=ReadWrite|Share Deny None";
			s+=@";Extended Properties=""""";
			s+=@";Jet OLEDB:System database=""""";
			s+=@";Jet OLEDB:Registry Path=""""";
			s+=@";Jet OLEDB:Database Password=""""";
			s+=@";Jet OLEDB:Engine Type=5";
			s+=@";Jet OLEDB:Database Locking Mode=1";
			s+=@";Jet OLEDB:Global Partial Bulk Ops=2";
			s+=@";Jet OLEDB:Global Bulk Transactions=1";
			s+=@";Jet OLEDB:New Database Password=""""";
			s+=@";Jet OLEDB:Create System Database=False";
			s+=@";Jet OLEDB:Encrypt Database=False";
			s+=@";Jet OLEDB:Don't Copy Locale on Compact=False";
			s+=@";Jet OLEDB:Compact Without Replica Repair=False";
			s+=@";Jet OLEDB:SFP=False";

			s+=";Data Source="+mbDb;
			
			OleDbConnection cnnexpert=new OleDbConnection(s);
			cnnexpert.Open();

			OleDbCommand cmm=new OleDbCommand();
			cmm.Connection=cnnexpert;


	
			string sqlcmd="";











			//************get template database scheme 
			//
			DataTable schemaTable = cnnexpert.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
				new object[] {null, null, myTemplateDataSet.NAME_TEMPLATETABLENAME, null});
	
			//*********************


			foreach(DataColumn col in this.SampleTable.Columns)
			{
				//此字段是否为判断参数字段
				if(!myCriDataSet.IsCriField(col))
					continue;

				//此字段是否已存在于模板库中
			
				DataRow[] dr=schemaTable.Select("COLUMN_NAME like  "+"\'"+col.ColumnName+"\'");
				if(dr.Length >=3)
					continue;



				//在模板库的三个表中加入相应的字段
				try
				{
					sqlcmd=		"ALTER TABLE ";
					sqlcmd+=	myTemplateDataSet.NAME_TEMPLATETABLENAME;
					sqlcmd+=	" ADD  ["	+col.ColumnName+	"] ";
					sqlcmd+=	"TEXT(50)";
					cmm.CommandText=sqlcmd;
					cmm.ExecuteNonQuery();
				}
				catch(Exception ex)
				{
					ShowMessage(ex.Message);

				}

				try
				{
				
					sqlcmd=		"ALTER TABLE ";
					sqlcmd+=	myTemplateDataSet.NAME_TEMPLATE_MIN_TABLENAME;
					sqlcmd+=	" ADD  ["	+col.ColumnName+	"] ";
					sqlcmd+=	"FLOAT";
					cmm.CommandText=sqlcmd;
					cmm.ExecuteNonQuery();
				}
				catch(Exception ex)
				{
					ShowMessage(ex.Message);

				}
				try
				{
				
					sqlcmd=		"ALTER TABLE ";
					sqlcmd+=	myTemplateDataSet.NAME_TEMPLATE_MAX_TABLENAME;
					sqlcmd+=	" ADD  ["	+col.ColumnName+	"] ";
					sqlcmd+=	"FLOAT";
					cmm.CommandText=sqlcmd;
					cmm.ExecuteNonQuery();
				}
				catch(Exception ex)
				{
					ShowMessage(ex.Message);

				}

				
			}



			cnnexpert.Close();
		}

		private void menuSETTING_Click(object sender, System.EventArgs e)
		{

		

			//use fileopendialog to get the setting file;
		
			OpenFileDialog openFileDialog1 = new OpenFileDialog();

			//openFileDialog1.InitialDirectory = "c:\\" ;
			openFileDialog1.Filter = "XML文件(*.xml)|*.xml|All files (*.*)|*.*" ;
			openFileDialog1.FilterIndex =1 ;
			openFileDialog1.RestoreDirectory = true ;
			openFileDialog1.Title ="打开用户定义设置文件";


			if(openFileDialog1.ShowDialog() != DialogResult.OK)
				return ;
			
				
			SettingFile=openFileDialog1.FileName;
					
			XMLConfig();
			
			

		}
		void XMLConfig()
		{
				

			try
			{
				FileStream astream=File.Open(SettingFile,System.IO.FileMode.Open);
				SettingXmlDoc = new XmlDocument();
				SettingXmlDoc.Load(astream);
				TablenameSetting();
				FieldnameSetting();
				myDataSet.FieldSetting=FieldDomainSetting();
				tableFuzzyKbfResultType =FuzzyKbfResultTypeSetting();
				strKbfSuperFile =FuzzyKbfSuperSetting();
			
				astream.Close(); 
				DatabaseAutoOpen();
			}
		
			catch(Exception ex)
			{

				ShowMessage("设置文件操作错误!",ex.ToString());
				

			}
		}

		private void auotTablenameAndFieldsSetting()
		{
			
		
			DirectoryInfo dirinfo=Directory.GetParent(Application.ExecutablePath).Parent;
			DirectoryInfo[] dirs = dirinfo.GetDirectories("database");
			FileInfo[] files;


			
			
			if(dirs.Length<=0)
			{
				ShowMessage("找不到database 目录!");

				return;
			}
			files=dirs[0].GetFiles("EXPERTSETTING.xml");
			if(files.Length<=0)
			{
				MessageBox.Show("在指定的路径下没有找到设置文件:"+files[0].FullName);


				return;
			}
			SettingFile=files[0].FullName;

			XMLConfig();
		}
		private void TablenameSetting()
		{
			
			
			XmlElement root=SettingXmlDoc["YQExpert_SETTING"];
			
			root=root["表名定义"];
			XmlElement ele;
			ele=root["标准样本表"];
			if(ele!=null)
				myCriDataSet.NAME_SAMPLE_TABLENAME=ele.InnerText;
			ele=root["模板串表"];
			if(ele!=null)
				myTemplateDataSet.NAME_TEMPLATETABLENAME=ele.InnerText;
			ele=root["模板下限值表"];
			if(ele!=null)
				myTemplateDataSet.NAME_TEMPLATE_MIN_TABLENAME=ele.InnerText;
			ele=root["模板上限值表"];
			if(ele!=null)
				myTemplateDataSet.NAME_TEMPLATE_MAX_TABLENAME=ele.InnerText;
			ele=root["参数统计表"];
			if(ele!=null)
				myCriDataSet.NAME_PARAM_TABLENAME=ele.InnerText;

			ele=root["待测数据表"];
			if(ele!=null)
				myExamDataSet.NAME_EXAM_TABLENAME=ele.InnerText;

			ele=root["推理结论表"];
			if(ele!=null)
				myExamDataSet.NAME_RESULT_TABLENAME=ele.InnerText;

			ele=root["直接打印的表"];
			if(ele!=null)
				myDataSet.NAME_ALL_DIRECTPRINT_TABLENAME=ele.InnerText;
	
	
		

			return;
			


		}

		private void FuzzySetting()
		{
			
			
			XmlElement root=SettingXmlDoc["YQExpert_SETTING"];
			
			root=root["模糊推理设置"];
			XmlElement ele;
			ele=root["分类结果知识库"];
			

			return;

⌨️ 快捷键说明

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