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

📄 savefundlg.cpp

📁 实现规则推理 模糊识别 神经网络的专家系统
💻 CPP
字号:
// savefunDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AcquireKlg.h"
#include "AcquireKlgDoc.h"
#include "MainFrm.h"
#include "RuleDefineView.h"
#include "Global.h"
#include <math.h>


#include "savefunDlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CsavefunDlg dialog
extern CADODatabase GlDataBase;
CADORecordset recordset(&GlDataBase);
CsavefunDlg::CsavefunDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CsavefunDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CsavefunDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CsavefunDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CsavefunDlg)
	DDX_Control(pDX, IDC_STATIC5, m_stRRongCha);
	DDX_Control(pDX, IDC_STATIC4, m_stLRongCha);
	DDX_Control(pDX, IDC_STATIC3, m_stRjxpc);
	DDX_Control(pDX, IDC_EDIT_RRONGCHA, m_etRRongCha);
	DDX_Control(pDX, IDC_EDIT_RJXPC, m_etRjxpc);
	DDX_Control(pDX, IDC_EDIT_LRONGCHA, m_etLRongCha);
	DDX_Control(pDX, IDC_EDIT1_TJPARA, m_etTJPara);
	DDX_Control(pDX, IDC_EDIT1_LJXPC, m_etLjxpc);
	DDX_Control(pDX, IDC_COMBO_FUNTYPE, m_cmFunType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CsavefunDlg, CDialog)
	//{{AFX_MSG_MAP(CsavefunDlg)
	ON_BN_CLICKED(IDC_BUTTON_savefun, OnBUTTONsavefun)
	ON_CBN_SELCHANGE(IDC_COMBO_FUNTYPE, OnSelchangeComboFuntype)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CsavefunDlg::showRongCha(bool bShow){
	DWORD dwShow = bShow?SW_SHOW:SW_HIDE;
	m_stLRongCha.ShowWindow(dwShow);
	m_stRRongCha.ShowWindow(dwShow);
	m_etLRongCha.ShowWindow(dwShow);
	m_etRRongCha.ShowWindow(dwShow);

}
//获得指定的视图类指针
CView* CsavefunDlg::GetView(CRuntimeClass* pClass) 
{ 
	CAcquireKlgDoc* pDoc=(CAcquireKlgDoc*)GetParentFrame()->GetActiveView()->GetDocument();
	ASSERT(pDoc);
	CView* pView = NULL; 
	POSITION pos=pDoc->GetFirstViewPosition(); 
	while(pos!=NULL){ 
		pView=pDoc->GetNextView(pos); 
		if(pView->IsKindOf(pClass)) 
			break;
	} 
	if(!pView->IsKindOf(pClass)){ 
		AfxMessageBox("Can't Locate the View."); 
		return NULL;
	} 
	return pView;
} 
/////////////////////////////////////////////////////////////////////////////
// CsavefunDlg message handlers

BOOL CsavefunDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_pNtView = (CNodeTreeView*)GetView(RUNTIME_CLASS(CNodeTreeView));
	m_pRDView=(CRuleDefineView*)GetView(RUNTIME_CLASS(CRuleDefineView));
	int ftype=m_pRDView->m_cBlurPage.funtype;
	SetFuncTypeCurSel(ftype);
	GetCurFun();
	ShowFun();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
//获得当前的模糊函数
void CsavefunDlg::GetCurFun(){
	int nodenum = m_pNtView->GetNodeID();
	int funnum=m_cmFunType.GetCurSel()+1;
	if(nodenum == ERR_NOSELETED) return;
	CString strQuery;
	strQuery.Format("select * from rule_unit_sub_table where nodesn=%d and busfun=%d",nodenum,funnum);
	recordset.SetQuery(strQuery);
	if(TRUE == recordset.Open()){	
		if(0 == recordset.GetRecordCount())
			recordset.Close();
	}
	
}
//savefun显示一条完整的模糊函数
bool CsavefunDlg::ShowFun(){

	int	nlshsType;//隶属函数类型
	CString	strtezhengzhi,//特征值
		strtjcs,//调节参数
		strljxpc,//左极限偏差
		strrjxpc,//右极限偏差
		strlrc,//左容差
		strrrc;//右容差
   

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


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

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

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

		recordset.GetFieldValue("Para2",strljxpc);
		SetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);

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

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

		recordset.GetFieldValue("Para1",strtezhengzhi);
		SetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);

		recordset.GetFieldValue("Para2",strljxpc);
		SetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);

		recordset.GetFieldValue("Para3",strrjxpc);
		SetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);

		recordset.GetFieldValue("Para4",strlrc);
		SetDlgItemText(IDC_EDIT_LRONGCHA,strlrc);

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

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

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


	return true;
}

void CsavefunDlg::SetZhenTai(){
	SetDlgItemText(IDC_STATIC2,"调节参数(k):");
	m_etLjxpc.ShowWindow(false);
	m_etTJPara.ShowWindow(true);
	m_stRjxpc.ShowWindow(false);
	m_etRjxpc.ShowWindow(false);
	showRongCha(false);
	m_pRDView->ShowImage("zhengtai1.bmp");
	
}


void CsavefunDlg::SetSanJiao(){
	SetDlgItemText(IDC_STATIC2,"左极限偏差(b):");
	m_etLjxpc.ShowWindow(true);
	m_etTJPara.ShowWindow(false);
	m_stRjxpc.ShowWindow(true);
	m_etRjxpc.ShowWindow(true);
	showRongCha(false);
	m_pRDView->ShowImage("sanjiao1.bmp");
}

void CsavefunDlg::SetTiXing(){
	SetDlgItemText(IDC_STATIC2,"左极限偏差(b):");
	m_etLjxpc.ShowWindow(true);
	m_etTJPara.ShowWindow(false);
	m_stRjxpc.ShowWindow(true);
	m_etRjxpc.ShowWindow(true);
	showRongCha(true);
	m_pRDView->ShowImage("tixing1.bmp");
}
void CsavefunDlg::SetShengBan(){
	SetDlgItemText(IDC_STATIC2,"调节参数(k):");
	m_etLjxpc.ShowWindow(false);
	m_etTJPara.ShowWindow(true);
	m_stRjxpc.ShowWindow(false);
	m_etRjxpc.ShowWindow(false);
	showRongCha(false);
	m_pRDView->ShowImage("6_1.bmp");
	
}
void CsavefunDlg::SetJiangBan(){
	SetDlgItemText(IDC_STATIC2,"调节参数(k):");
	m_etLjxpc.ShowWindow(false);
	m_etTJPara.ShowWindow(true);
	m_stRjxpc.ShowWindow(false);
	m_etRjxpc.ShowWindow(false);
	showRongCha(false);
	m_pRDView->ShowImage("8_1.bmp");
	
}

void CsavefunDlg::SetFuncTypeCurSel(int nCur){
	m_cmFunType.SetCurSel(nCur-1);
}


int CsavefunDlg::GetFuncTypeCurSel(){
    int nCur = m_cmFunType.GetCurSel();

	if(nCur!=CB_ERR) 
		nCur++;
	return nCur;
}

void CsavefunDlg::OnBUTTONsavefun() 
{
	savefun();
	
}

void CsavefunDlg::OnSelchangeComboFuntype() 
{
  int nSelected = m_cmFunType.GetCurSel();
	switch(nSelected){
	case 0:
		SetZhenTai();
		break;
	case 1:
		SetSanJiao();
		break;
	case 2:
		SetTiXing();
		break;
	case 3:
		SetShengBan();
		break;
	case 4:
		SetJiangBan();
		break;
	default:break;
	
	}
	GetCurFun();
	ShowFun();
	
}

	void CsavefunDlg::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 = GetFuncTypeCurSel();
			switch(nlshsType){
			case 1:
			case 4:
			case 5:
				GetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);
				GetDlgItemText(IDC_EDIT1_TJPARA,strtjcs);
				
				strtezhengzhi.TrimRight(),strtjcs.TrimRight();
				if(strtezhengzhi.GetLength()==0||strtjcs.GetLength()==0){
					AfxMessageBox("请输入完整信息!!!");
					return;
				}
		//删除现有模糊函数
		strQuery.Format("delete from rule_unit_sub_table where busfun=%d and nodesn=%d",nlshsType,nodenum);
		recordset.SetQuery(strQuery);
		if(recordset.Open()==false){
			AfxMessageBox("数据删除有错误!");
			return;
		}
		recordset.Close();
		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:
				GetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);
				GetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);
				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("delete from rule_unit_sub_table where busfun=%d and nodesn=%d",nlshsType,nodenum);
			recordset.SetQuery(strQuery);
			if(recordset.Open()==false){
				AfxMessageBox("数据删除有错误!");
				return;
			}
			recordset.Close();
				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:
				GetDlgItemText(IDC_EDIT_TEZHEZHI,strtezhengzhi);
				GetDlgItemText(IDC_EDIT1_LJXPC,strljxpc);
				GetDlgItemText(IDC_EDIT_RJXPC,strrjxpc);
				GetDlgItemText(IDC_EDIT_LRONGCHA,strlrc);
				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("delete from rule_unit_sub_table where busfun=%d and nodesn=%d",nlshsType,nodenum);
				recordset.SetQuery(strQuery);
				if(recordset.Open()==false){
				AfxMessageBox("数据删除有错误!");
					return;
				}
				recordset.Close();
				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;
			}
			
			
		}

⌨️ 快捷键说明

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