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

📄 ruledefineview.cpp

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

		m_RecordSetfun.GetFieldValue("Para3",strrjxpc);
		m_cBlurPage.SetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);

		m_RecordSetfun.GetFieldValue("Para4",strlrc);
		m_cBlurPage.SetDlgItemText(IDC_EDIT_LRONGCHA,strlrc);

		m_RecordSetfun.GetFieldValue("Para5",strrrc);
		m_cBlurPage.SetDlgItemText(IDC_EDIT_RRONGCHA,strrrc);
    
    }
	 else if(nlshsType == 4){
		m_cBlurPage.SetZhenTai();
		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_cBlurPage.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strtjcs);
		m_cBlurPage.SetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
    }
	else if(nlshsType == 5){
		m_cBlurPage.SetZhenTai();
		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_cBlurPage.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strtjcs);
		m_cBlurPage.SetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
    }


	return true;
}
//
//savefun显示一条完整的模糊函数
bool CRuleDefineView::ShowFun(){
	
	int	nlshsType;//隶属函数类型
	CString	strtezhengzhi,//特征值
		strtjcs,//调节参数
		strljxpc,//左极限偏差
		strrjxpc,//右极限偏差
		strlrc,//左容差
		strrrc;//右容差
   

	if(m_RecordSetfun.IsOpen()==false||m_RecordSetfun.IsEOF()){
		
		//m_csavefunDlg.SetDlgItemText(IDC_COMBO_DATATYPE,"");
		m_csavefunDlg.SetDlgItemText(IDC_COMBO_FUNTYPE,"");
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_TEZHEZHI,"");
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_TJPARA,"");
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_LJXPC,"");	
	 	m_csavefunDlg.SetDlgItemText(IDC_EDIT_RJXPC,"");	
	 	m_csavefunDlg.SetDlgItemText(IDC_EDIT_LRONGCHA,"");
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_RRONGCHA,"");
		return false;
		
	}


	m_RecordSetfun.GetFieldValue("busfun",nlshsType);
	m_csavefunDlg.SetFuncTypeCurSel(nlshsType);
    if(nlshsType == 1){
		m_csavefunDlg.SetZhenTai();
		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strtjcs);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
    }

    else if(nlshsType == 2){
		m_csavefunDlg.SetSanJiao();
		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strljxpc);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);

		m_RecordSetfun.GetFieldValue("Para3",strrjxpc);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);
    }

	else if (nlshsType == 3){
		m_csavefunDlg.SetTiXing();

		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strljxpc);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);

		m_RecordSetfun.GetFieldValue("Para3",strrjxpc);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);

		m_RecordSetfun.GetFieldValue("Para4",strlrc);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_LRONGCHA,strlrc);

		m_RecordSetfun.GetFieldValue("Para5",strrrc);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_RRONGCHA,strrrc);
    
    }
	 else if(nlshsType == 4){
		m_csavefunDlg.SetZhenTai();
		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strtjcs);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
    }
	else if(nlshsType == 5){
		m_csavefunDlg.SetZhenTai();
		m_RecordSetfun.GetFieldValue("Para1",strtezhengzhi);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		m_RecordSetfun.GetFieldValue("Para2",strtjcs);
		m_csavefunDlg.SetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
    }


	return true;
}

//


//在编辑框中动态显示当前编辑的规则

bool CRuleDefineView::SetRegRule(CString str){

	
	m_cRegPage.SetDlgItemText(IDC_EDIT_REGRULE,str);
	
	return true;
};
bool CRuleDefineView::SetBlurRule(CString str){

	
	m_cBlurPage.SetDlgItemText(IDC_EDIT_BLURDESCRIBE,str);
	
	return true;
};
//设置模糊函数
bool CRuleDefineView::SetBlurFun(int ntype){
	
	m_cBlurPage.SetFuncTypeCurSel(ntype);
	m_cBlurPage.OnSelchangeComboFuntype();
	return true;
};
//设置模糊函数
bool CRuleDefineView::SetFun(int ntype){
	
	m_csavefunDlg.SetFuncTypeCurSel(ntype);
	m_csavefunDlg.OnSelchangeComboFuntype();
	return true;
};
CString CRuleDefineView::GetRegRule(){
	CString strrule;
	m_cRegPage.GetDlgItemText(IDC_EDIT_REGRULE,strrule);
	return strrule;
}
CString CRuleDefineView::GetBlurRule(){
	CString strbrule;
	m_cBlurPage.GetDlgItemText(IDC_EDIT_BLURDESCRIBE,strbrule);
	return strbrule;
}

bool CRuleDefineView::SetRegDefaultOrder(int order){

	
	m_cRegPage.SetDlgItemInt(IDC_EDIT_REG_ORDERNUM,order);
	
	return true;
};


bool CRuleDefineView::ClearEditBox(){
	if(nCurStyle == 1){
		m_cRegPage.SetDlgItemText(IDC_EDIT_REGRULE,"");
		m_cRegPage.SetDlgItemText(IDC_EDIT_REG_ORDERNUM,"");
		m_cRegPage.SetDlgItemText(IDC_EDIT_REGRULENAME,"");
		m_cRegPage.SetDlgItemText(IDC_EDIT_REGRULERESULT,"");//规则结论
		//m_cRegPage.SetDlgItemText(IDC_EDIT_RELIEBILITY,"");
		m_cRegPage.SetDlgItemText(IDC_COMBO_outnode,"");
	}

	else if(nCurStyle == 2){
		m_cBlurPage.SetDlgItemText(IDC_EDIT_BLUR_ORDER,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT_BLURNAME,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT_BLURDESCRIBE,"");
		m_cBlurPage.SetDlgItemText(IDC_COMBO_outnode,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT_yz,"");
//		m_cBlurPage.SetDataTypeCurSel(1);
		m_cBlurPage.SetFuncTypeCurSel(1);
		
		m_cBlurPage.SetDlgItemText(IDC_EDIT_TEZHEZHI,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT1_TJPARA,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT1_LJXPC,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT_RJXPC,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT_LRONGCHA,"");
		m_cBlurPage.SetDlgItemText(IDC_EDIT_RRONGCHA,"");

		m_cBlurPage.SetZhenTai();

	}
	else if(nCurStyle == 3){
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_rhxh,"");
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_rhm,"");
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_rhnr,"");
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_jdgs,"");
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_cgqgs,"");
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_xzxs,"");
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_rhyz,"");
	 	m_cBlurMergePage.SetFuseTypeCurSel(1);
		m_cBlurMergePage.SetDlgItemText(IDC_EDIT_cgqqk,"单击按钮输入->");
	    m_cBlurMergePage.SetDlgItemText(IDC_EDIT_mhhsqk,"单击按钮输入->");
	}
	else if(nCurStyle == 4){;}

	return true;
}

void CRuleDefineView::SetDefaultOrderNo(){
	
	int nodenum = m_pNtView->GetNodeID();
	if(nodenum == ERR_NOSELETED) return;
	
	
	//求出推荐的规则序号
	CString str;
	CADORecordset recordset(&GlDataBase);
	if(nCurStyle == 1)
		str.Format("select max(RuleSN) 最大序号 from Rule_Table where NodeSN=%d",nodenum);
	else if(nCurStyle == 2)
		str.Format("select max(brulesn) 最大序号 from blur_rule_table where nodesn=%d",nodenum);
	else if(nCurStyle == 3)
		str.Format("select max(FRsn) 最大序号 from Fuse_Rule_Table where nodesn=%d",nodenum);
	else if(nCurStyle == 4)
		;
	recordset.SetQuery(str);
	recordset.Open();
	int nMaxOrder = 0;
	
	if(!recordset.IsEOF()) {  
		recordset.GetFieldValue("最大序号",nMaxOrder);
	}
	
		nMaxOrder++;

		
	if(nCurStyle == 1)
		m_cRegPage.SetDlgItemInt(IDC_EDIT_REG_ORDERNUM,nMaxOrder);
	else if(nCurStyle == 2)
		m_cBlurPage.SetDlgItemInt(IDC_EDIT_BLUR_ORDER,nMaxOrder);
	else if(nCurStyle == 3)
		m_cBlurMergePage.SetDlgItemInt(IDC_EDIT_rhxh,nMaxOrder);
	else if(nCurStyle == 4)
		;

}


void CRuleDefineView::ShowImage(CString strName){
	m_pRwView->ShowImage(strName);
}


bool CRuleDefineView::CheckRuleFormat(CString str){
	int num = str.GetLength();

	//先检查括号是否成对
	int bracketnum = 0;
	for(int k = 0;k<num;k++){
		if(str[k] == '(') bracketnum++;
		else if(str[k] == ')') bracketnum--;
		else continue;
	}
	if(bracketnum!=0)
		return false;

	for(int i = 0;i<num;i++){
		//一个关系子表达式开始前不应该有数字
		if(isdigit(str[i]))
			return false;
		
		//如不是关系表达式组成,按原样保存
		else	if(!isalpha(str[i]))
			continue;
		
		
		
		//若是关系表达式,分离计算并保存结果t或f
		else{
			//关系表达式左边符号:只能为一个字符
			if(isalpha(str[i+1]))
				return false;
			
			//关系运算符
			CString op;
			char opn;
			op = str[++i];
			//操作符的第一个必须为以下几个:
			if(op!=">"&&op!="<"&&op!="="&&op!="!"){
				return false;
			}
            //等号操作符为:==,而不是=
			if(str[i]=='='&&str[i+1]!='='){
				return false;
			}
			
			//若下个为=,说明该操作符由两个符号组成,读入该=
			opn = str[i+1];
			
			if(opn == '='){
				op+= '=';
				i++;
			}
			
			//如果第一个关系符号后不是数字或=或-,错!
			if(!(isdigit(opn)||opn=='='||opn=='-')){
				return false;
			}
			
			
			//关系表达式右边的值
			char data[20];
			data[0]= str[++i];
			if(!isdigit(data[0])&&data[0]!='-'){
				
				return false;
			}
			int k = 1;
			do{
				if(i<num-1)
					data[k] = str[++i];
				else
					return true;
				k++;
			}while(isdigit(str[i])||str[i] == '.');
			
			if(k>20) return false;//位数太多
			
			data[--k] = '\0';//k 和  i 都已经读过头
			//数据之后必须有一定的格式规定
			if(str[i]!='&'&&str[i]!='|'&&str[i]!='!'&&str[i]!=')'&&str[i]!='\0'){
				return false;
			}
			i--;
		}
		
	}
	return true;
}

void CRuleDefineView::SetRegEditSel(){
    m_cRegPage.SelectRegEdit();
}

////////////////////////////消息函数//////////////////////////////////////////////

int CRuleDefineView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	//edit.Create(WS_VISIBLE|WS_SIZEBOX,CRect(140,200,220,220),this,3);
		
	//m_cTabSheets.AddPage("规则推理",&m_cRegPage,IDD_DIALOG_REGULARRULE);
	//m_cTabSheets.AddPage("模糊规则",&m_cBlurPage,IDD_DIALOG_BLURRULE);
	//m_cTabSheets.Show();
		
	return 0;
}

BOOL CRuleDefineView::PreCreateWindow(CREATESTRUCT& cs) 
{
	
	
	
	return CFormView::PreCreateWindow(cs);
	
}



void CRuleDefineView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	//m_cTabSheets.OnLButtonDown(nFlags,point);
	//int index = m_cTabSheets.GetCurSel();
    //m_pRwView->SetCurStyle(index);
	
	CFormView::OnLButtonDown(nFlags, point);
}

void CRuleDefineView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
    m_cTabSheets.AddPage("规则推理",&m_cRegPage,IDD_DIALOG_REGULARRULE);
	m_cTabSheets.AddPage("模糊规则",&m_cBlurPage,IDD_DIALOG_BLURRULE);
	m_cTabSheets.AddPage("信息融合",&m_cBlurMergePage,IDD_DIALOG_BLURMERGE);
	m_cTabSheets.AddPage("神经网络" ,&m_cNetWorkPage,IDD_DIALOG_NETWORK);
	m_cTabSheets.Show();
	
	m_pRwView = (CRuleWizardView*)GetView(RUNTIME_CLASS(CRuleWizardView)); 
	//m_pRdView = (CRuleDefineView*)GetView(RUNTIME_CLASS(CRuleDefineView)); 
	m_pNtView = (CNodeTreeView*)GetView(RUNTIME_CLASS(CNodeTreeView));
	m_pTipView = (CTipView*)GetView(RUNTIME_CLASS(CTipView));
	
	m_pMainWnd = (CMainFrame*)AfxGetMainWnd();
	
}

void CRuleDefineView::OnSelchangeTab4sheets(NMHDR* pNMHDR, LRESULT* pResult) 
{
	int index = m_cTabSheets.GetCurSel();  //tablesheet的下标从0开始
    m_pRwView->SetCurStyle(index+1);
	SetCorMenu(index+1);
	
	
	*pResult = 0;
}


//********************本类中的按钮事件*********************************
void CRuleDefineView::OnButtonNew() 
{
	
	ClearEditBox();
	m_pRwView->ClearRegRule();//清空代表规则的CString变量
	SetDefaultOrderNo();//	//求出推荐的规则序号

⌨️ 快捷键说明

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