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

📄 ruledefineview.cpp

📁 实现规则推理 模糊识别 神经网络的专家系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	

	m_RecordSet.Close();
	

	
}

void CRuleDefineView::OnButtonSave() 
{
	//if(m_RecordSet.IsOpen()){
	//	AfxMessageBox("查看状态,不能插入数据!");
	//	return;
	//}
	
	CADORecordset recordset(&GlDataBase);
	CString strQuery;
	
	int nodenum = m_pNtView->GetNodeID();
	if(nodenum == ERR_NOSELETED) return;
	
	switch (nCurStyle){
	case 1:{
		CString strregordernum, strname,strrule,strresult,strdescribe;
		m_cRegPage.GetDlgItemText(IDC_EDIT_REG_ORDERNUM,strregordernum);
		m_cRegPage.GetDlgItemText(IDC_EDIT_REGRULENAME,strname);	
		m_cRegPage.GetDlgItemText(IDC_EDIT_REGRULE,strrule);
		m_cRegPage.GetDlgItemText(IDC_COMBO_outnode,strresult);
		m_cRegPage.GetDlgItemText(IDC_EDIT_DESCRIBE,strdescribe);
		
		strregordernum.TrimRight(); strname.TrimRight();strrule.TrimRight();
		strresult.TrimRight();
		
		if(strregordernum.GetLength()==0||strrule.GetLength()==0||strresult.GetLength()==0){
			AfxMessageBox("请完整输入规则信息");
			return;
		}

		if(CheckRuleFormat(strrule) == false){
		    AfxMessageBox("此规则格式错误!!!");
			return;
		}
		
		//判断是修改原有规则还是新增规则
		strQuery.Format("select * from Rule_Table where RuleSN=%s and nodesn=%d",strregordernum,nodenum);
		recordset.SetQuery(strQuery);
		if(TRUE == recordset.Open()){
			
			if(recordset.GetRecordCount()!=0){
				int nregorder = 0;
		    	recordset.GetFieldValue("RuleSN",nregorder);
				CString str;
				str.Format("确定修改规则%d为当前内容?",nregorder);
				if(IDNO==AfxMessageBox(str,MB_YESNO)){
					
					return;
				}
				else
					recordset.Delete();
			
			}
		}			
			
			strQuery.Format("insert into Rule_Table (RuleSN,NodeSN,RName,RContent,OutNode,RMemo) values(%d,%d,'%s','%s',%d,'%s')",atoi(strregordernum.GetBuffer(0)),nodenum,strname,strrule,atoi(strresult.GetBuffer(0)),strdescribe);
			recordset.SetQuery(strQuery);
			if(recordset.Open() == TRUE){
				AfxMessageBox("精确规则插入成功!!!");
			}
			break;
		}
		
		case 2:{

			CString strblurorder,//模糊规则序号
				strblurname,//模糊规则名
				strrule,//模糊规则内容
				stroutnode,//输出结点号
				stryz;//阈值

  
			m_cBlurPage.GetDlgItemText(IDC_EDIT_BLUR_ORDER,strblurorder);
			m_cBlurPage.GetDlgItemText(IDC_EDIT_BLURNAME,strblurname);
			m_cBlurPage.GetDlgItemText(IDC_EDIT_BLURDESCRIBE,strrule);
			m_cBlurPage.GetDlgItemText(IDC_COMBO_outnode,stroutnode);
			m_cBlurPage.GetDlgItemText(IDC_EDIT_yz,stryz);

			strblurorder.TrimRight(),strblurname.TrimRight(),strrule.TrimRight();
			if(strblurorder.GetLength()==0||strblurname.GetLength()==0||strrule.GetLength()==0){//||ndatatype==CB_ERR||nlshsType==CB_ERR){
				AfxMessageBox("请输入完整信息!!!");
				return;
			}
			
			
			strQuery.Format("select * from blur_rule_Table where brulesn=%s and nodesn=%d",strblurorder,nodenum);
			recordset.SetQuery(strQuery);
			//bool bEdit = false;

			//判断是修改原有规则还是新增规则
			if(TRUE == recordset.Open()){
				
				if(recordset.GetRecordCount()!=0){
					int nregorder = 0;
					recordset.GetFieldValue("brulesn",nregorder);
					CString str;
					str.Format("确定修改规则%d为当前内容?",nregorder);
					if(IDNO==AfxMessageBox(str,MB_YESNO)){
						
						return;
					}
				
					else
						//	bEdit = true;
					recordset.Delete();
				
					
				}
			}

			else
				return;//若无法打开数据集则返回
			strQuery.Format("insert into blur_rule_table (brulesn,nodesn,BRname,BRContent,outnode,svalue) values(%d,%d,'%s','%s',%d,%f)",atoi(strblurorder.GetBuffer(0)),nodenum,strblurname,strrule,atoi(stroutnode.GetBuffer(0)),atof(stryz.GetBuffer(0)));  
				recordset.SetQuery(strQuery);
				if(recordset.Open() == TRUE)
					AfxMessageBox("模糊规则插入成功!!!");
			
			   break;
			   }

		case 3:{
			
			  CString strFRsn,//融合规则序号
				strFRname,//融合规则名
				strFRContent,//融合规则内容
				strFRType,//融合规则类型
				strNodeC,//融合的结点数
				strSensorC,//融合的传感器个数
				strRevise,//融合修正系数K
				strSvalue;//阈值
				int intfrtype;
  
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_rhxh,strFRsn);
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_rhm,strFRname);
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_rhnr,strFRContent);
			//
			intfrtype=m_cBlurMergePage.GetFuseTypeCurSel();
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_jdgs,strNodeC);
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_cgqgs,strSensorC);
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_xzxs,strRevise);
			m_cBlurMergePage.GetDlgItemText(IDC_EDIT_rhyz,strSvalue);

			strFRsn.TrimRight(),strNodeC.TrimRight(),strSensorC.TrimRight();
			
			if(strFRsn.GetLength()==0||strNodeC.GetLength()==0||strSensorC.GetLength()==0){//||ndatatype==CB_ERR||nlshsType==CB_ERR){
				AfxMessageBox("请输入完整信息!!!");
				return;
			}
			
			
			strQuery.Format("select * from Fuse_Rule_Table where FRsn=%s and nodesn=%d",
				strFRsn,nodenum);
			recordset.SetQuery(strQuery);
			bool bEdit = false;
			//判断是修改原有规则还是新增规则
			if(TRUE == recordset.Open()){
				
				if(recordset.GetRecordCount()!=0){
					int nregorder = 0;
					recordset.GetFieldValue("FRsn",nregorder);
					CString str;
					str.Format("确定修改规则%d为当前内容?",nregorder);
					if(IDNO==AfxMessageBox(str,MB_YESNO)){
						
						return;
					}
				
					else
					//	bEdit = true;
						recordset.Delete();
				
					
				}
			}

			else
				return;//若无法打开数据集则返回
//	if (bEdit) 
//strQuery.Format("update Fuse_Rule_Table set  FRname='%s',FRContent='%s',FRType=%d,NodeC=%d,SensorC=%d,Revise=%d,svalue=%d where FRsn=%d and nodesn=%d",strFRname,strFRContent,intfrtype,atoi(strNodeC.GetBuffer(0)),atoi(strSensorC.GetBuffer(0)),atof(strRevise.GetBuffer(0)),atof(strSvalue.GetBuffer(0)),atoi(strFRsn.GetBuffer(0)),nodenum);
//else
strQuery.Format("insert into Fuse_Rule_Table(FRsn,nodesn,FRname,FRContent,FRType,NodeC,SensorC,Revise,svalue)values(%d,%d,'%s','%s',%d,%d,%d,%f,%f)",atoi(strFRsn.GetBuffer(0)),nodenum,strFRname,strFRContent,intfrtype,atoi(strNodeC.GetBuffer(0)),atoi(strSensorC.GetBuffer(0)),atof(strRevise.GetBuffer(0)),atof(strSvalue.GetBuffer(0)));  
				recordset.SetQuery(strQuery);
				if(recordset.Open() == TRUE)
					AfxMessageBox("融合规则插入成功!!!");
			   break;
			   }
		case 4:{
			  ;
			   break;
			   }
		
	}	//end switch
		
	
		if(m_RecordSet.IsOpen())//!=TRUE)
		{
		//	OnButtonNew();

		//else{//刷新当前数据集	
			long savepos =  m_RecordSet.GetAbsolutePosition();
			m_RecordSet.Open();
			m_RecordSet.SetAbsolutePosition(savepos);
		}
		
	
		
		
		
}


void CRuleDefineView::OnKillfocusEditRegrule() 
{
	AfxMessageBox("hello");

	
}

void CRuleDefineView::OnButtonLast() 
{
	
	if(m_RecordSet.IsOpen()&&!m_RecordSet.IsBof()){
		m_RecordSet.MovePrevious();
		if(!m_RecordSet.IsBof()){
			if(nCurStyle == 1)
				ShowRegRules();
			else if(nCurStyle == 2)
				{
				ShowBlurRules();
				GetCurBlurFun();
				ShowBlurFun();
				}
			else if(nCurStyle==3)
				ShowFuseRules();
		}
		else
			//m_RecordSet.MoveLast();
			m_RecordSet.MoveNext();
		
	}
}

void CRuleDefineView::OnButtonNext() 
{
	if(m_RecordSet.IsOpen()&&!m_RecordSet.IsEof()){
		m_RecordSet.MoveNext();
		if(!m_RecordSet.IsEof()){
			if(nCurStyle == 1)
				ShowRegRules();
			else if(nCurStyle == 2)
				ShowBlurRules();
			else if(nCurStyle==3)
				ShowFuseRules();
		}
		else{
			m_RecordSet.MovePrevious();
		}
	}
	
	
}

void CRuleDefineView::OnButtonDelete() 
{
	if(m_RecordSet.IsOpen()){
		if (!m_RecordSet.IsEof()&&!m_RecordSet.IsBof()){ 
			if(IDYES==AfxMessageBox("确定删除当前规则?",MB_YESNO)){
				
				m_RecordSet.Delete();
				m_RecordSet.MoveNext();
			    if(m_RecordSet.IsEof()&&m_RecordSet.GetRecordCount()!=0)
					m_RecordSet.MoveFirst();
				if(m_RecordSet.GetRecordCount()==0)
					m_RecordSet.Close();

				switch (nCurStyle){
				case 1:
					ShowRegRules();
					break;
				case 2:
					ShowBlurRules();
					break;
				case 3:
					ShowFuseRules();
					break;
				}
				
			}
		}
		
		
	}
}
//
	void CRuleDefineView::savefun()
	{			
		
		    int	nlshsType;//隶属函数类型
			CString	strtezhengzhi,//特征值
				strtjcs,//调节参数
				strljxpc,//左极限偏差
				strrjxpc,//右极限偏差
				strlrc,//左容差
				strrrc;//右容差
			CADORecordset recordset(&GlDataBase);
			CString strQuery;
			int nodenum = m_pNtView->GetNodeID();
			if(nodenum == ERR_NOSELETED) return;
			
			nlshsType = m_cBlurPage.GetFuncTypeCurSel();
			switch(nlshsType){
			case 1:
			case 4:
			case 5:
				m_cBlurPage.GetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);
				m_cBlurPage.GetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
				
				strtezhengzhi.TrimRight(),strtjcs.TrimRight();
				if(strtezhengzhi.GetLength()==0||strtjcs.GetLength()==0){
					AfxMessageBox("请输入完整信息!!!");
					return;
				}

				strQuery.Format("insert into rule_unit_sub_table (nodesn,busfun,Para1,Para2) values(%d,%d,%f,%f)",nodenum,nlshsType,atof(strtezhengzhi.GetBuffer(0)),atof(strtjcs.GetBuffer(0)));  
				recordset.SetQuery(strQuery);
				if(recordset.Open() == TRUE)
				switch (nlshsType){
				case 1:
					AfxMessageBox("模糊函数(正态分布)插入成功!!!");
					break;
				case 4:
					AfxMessageBox("模糊函数(升半正态)插入成功!!!");
					break;
				case 5:
					AfxMessageBox("模糊函数(降半正态)插入成功!!!");
					break;
					}

				break;
			case 2:
				m_cBlurPage.GetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);
				m_cBlurPage.GetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);
				m_cBlurPage.GetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);
				
				strtezhengzhi.TrimRight(),strljxpc.TrimRight(),strrjxpc.TrimRight();
				if(strtezhengzhi.GetLength()==0||strljxpc.GetLength()==0||strrjxpc.GetLength()==0){
					AfxMessageBox("请输入完整信息!!!");
					return;
				}

				strQuery.Format("insert into rule_unit_sub_table (nodesn,busfun,Para1,Para2,Para3) values(%d,%d,'%f',%f,%f)",nodenum,nlshsType,atof(strtezhengzhi.GetBuffer(0)),atof(strljxpc.GetBuffer(0)),atof(strrjxpc.GetBuffer(0))); 
				recordset.SetQuery(strQuery)	;
				if(recordset.Open() == TRUE)
					AfxMessageBox("模糊函数(三角分布)插入成功!!!");
				break;
			case 3:
				m_cBlurPage.GetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);
				m_cBlurPage.GetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);
				m_cBlurPage.GetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);
				m_cBlurPage.GetDlgItemText(IDC_EDIT_LRONGCHA,strlrc);
				m_cBlurPage.GetDlgItemText(IDC_EDIT_RRONGCHA,strrrc);
				
				strtezhengzhi.TrimRight(),strljxpc.TrimRight(),strrjxpc.TrimRight(),strlrc.TrimRight(),strrrc.TrimRight();
				if(strtezhengzhi.GetLength()==0||strljxpc.GetLength()==0||strrjxpc.GetLength()==0||strlrc.GetLength()==0||strrrc.GetLength()==0){
					AfxMessageBox("请输入完整信息!!!");
					return;
				}

				strQuery.Format("insert into rule_unit_sub_table (nodesn,busfun,Para1,Para2,Para3,Para4,Para5) values(%d,%d,%f,%f,%f,%f,%f)",nodenum,nlshsType,atof(strtezhengzhi.GetBuffer(0)),atof(strljxpc.GetBuffer(0)),atof(strrjxpc.GetBuffer(0)),atof(strlrc.GetBuffer(0)),atof(strrrc.GetBuffer(0))); 
				recordset.SetQuery(strQuery)	;
				if(recordset.Open() == TRUE)
					AfxMessageBox("模糊函数(梯形分布)插入成功!!!");
				break;
			default:
				AfxMessageBox("请选择模糊函数!!!");
				break;
			}
			
			
		}
	//子结点序号
	void CRuleDefineView::setnodesn(){
	
	int nodenum = m_pNtView->GetNodeID();
	if(nodenum == ERR_NOSELETED) return;

	CADORecordset recordset(&GlDataBase);
	CString str;
	str.Format("select 结点号 from 结点表 where 父结点号=%d",nodenum);
	recordset.SetQuery(str);
	recordset.Open();
	CString strelement;
	
	m_cBlurPage.m_combo_outnode.ResetContent();
	while(recordset.IsEof()!=TRUE){
		recordset.GetFieldValue("结点号",strelement);
		m_cBlurPage.m_combo_outnode.AddString(strelement);
		recordset.MoveNext();
	}
	recordset.Close();
	}
	//子结点序号
	void CRuleDefineView::setoutnode(){
	
	int nodenum = m_pNtView->GetNodeID();
	if(nodenum == ERR_NOSELETED) return;

	CADORecordset recordset(&GlDataBase);
	CString str;
	str.Format("select 结点号 from 结点表 where 父结点号=%d",nodenum);
	recordset.SetQuery(str);
	recordset.Open();
	CString strelement;
	
	m_cRegPage.m_combo_outnode.ResetContent();
	while(recordset.IsEof()!=TRUE){
		recordset.GetFieldValue("结点号",strelement);
		m_cRegPage.m_combo_outnode.AddString(strelement);
		recordset.MoveNext();
	}
	recordset.Close();
	}

⌨️ 快捷键说明

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