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

📄 userdatadlg.cpp

📁 vc编程实现bp神经网络
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			m_set.Close();
		}
		if(td.IsOpen())
		{
			td.Close();
		}
		return;
	}
}

void CUserDataDlg::ShowTable(HTREEITEM hi)
{
	//读取表名:
	int i;
//	CString tn;
    tn=m_UsDataTree.GetItemText(hi);
	m_UsDataList.SetRedraw(FALSE);
	m_UsDataList.DeleteAllItems ();
    while(m_UsDataList.DeleteColumn(0));

	CDaoTableDef td(&m_Db);
	CDaoFieldInfo fi;
	td.Open(tn);
	m_set.Open(&td);
//1. 添加列:
	LV_COLUMN lc;
	lc.mask = LVCF_FMT | LVCF_WIDTH |
		      LVCF_TEXT | LVCF_SUBITEM;
	lc.fmt = LVCFMT_CENTER;
	lc.cx = 100;
	lc.iSubItem = 0;
	for(i=0;i<m_set.GetFieldCount();i++)
	{
		m_set.GetFieldInfo(i,fi);
		lc.pszText = fi.m_strName.GetBuffer(fi.m_strName.GetLength());
		m_UsDataList.InsertColumn(i, &lc);
	}

//2. 添加各个项目(各行):
	LVITEM Item;
	CString str;
	long nItem;
	COleVariant var;
	m_set.MoveFirst();
	nItem=0;
	while(!m_set.IsEOF())
	{
		Item.mask=LVIF_TEXT;
		Item.iItem=nItem;
		Item.iSubItem=0;
		m_set.GetFieldValue(0,var);
		str=GetVariantString(var);
		Item.pszText=str.GetBuffer(str.GetLength());
		m_UsDataList.InsertItem(&Item);
		for(i=1;i<m_set.GetFieldCount();i++)
		{
//3. 设置各个子项的字符串:
			m_set.GetFieldValue(i,var);
			str=GetVariantString(var);
			m_UsDataList.SetItemText(nItem,i,str);
		}
		m_set.MoveNext();
		nItem++;
	}
	m_set.Close();
	m_UsDataList.SetRedraw();
	m_UsDataList.Invalidate();
}

void CUserDataDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	m_ModelName=_T("");
	m_RowEnd=0;
	m_RowStart=0;
	m_ColNum=0;
	UpdateData(false);
	CDialog::OnCancel();
}

BOOL CUserDataDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
    m_UsDataList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	((CButton*)GetDlgItem(IDC_RD_INPUT))->SetCheck(TRUE);//变量属性缺省情况为输入变量

    m_VList.InsertColumn(0,"变量名",LVCFMT_LEFT,80);
    m_VList.InsertColumn(1,"变量说明",LVCFMT_LEFT,275);
	m_VList.SetExtendedStyle(LVS_EX_FULLROWSELECT);//设置选中一个位置,则改行均高亮
	UpdateVList();

	m_ModelVList.InsertColumn(0,"模型名",LVCFMT_LEFT,60);
    m_ModelVList.InsertColumn(1,"变量名",LVCFMT_LEFT,60);
    m_ModelVList.InsertColumn(2,"是否输入变量",LVCFMT_LEFT,120);
    m_ModelVList.InsertColumn(3,"变量说明",LVCFMT_LEFT,180);
	m_ModelVList.InsertColumn(4,"对应样本数据列名",LVCFMT_LEFT,150);
	m_ModelVList.SetExtendedStyle(LVS_EX_FULLROWSELECT);//设置选中一个位置,则改行均高亮
	m_ModelVList.DeleteAllItems();
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUserDataDlg::UpdateVList()
{
	int i=0;
	CString strSQL;
	m_VList.DeleteAllItems();
    UpdateData();

//	if(!m_Db.IsOpen()) return;
	if(!m_recordset) return;
	if(m_recordset->IsOpen()) m_recordset->Close();

	strSQL.Format ("select * from tab_VariableInfo where Us_Name='%s' and Model_Name is null",username);
    m_recordset->Open(dbOpenDynaset,strSQL);
	if (!m_recordset->IsEOF())
	{
		while(!m_recordset->IsEOF())
		{
			m_VList.InsertItem(i,"");
            COleVariant var;
			m_recordset->GetFieldValue(2,var);
		    m_VList.SetItemText(i,0,(LPCTSTR)var.bstrVal);
			m_recordset->GetFieldValue(4,var);
		    m_VList.SetItemText(i,1,(LPCTSTR)var.bstrVal);
		    m_recordset->MoveNext();
    		i++;
		}
	}
	m_recordset->Close();
}

void CUserDataDlg::UpdateModelVList()
{
    int i=0;
//	CString strID;
	CString strSQL;
	m_ModelVList.DeleteAllItems();
    UpdateData();
//	CVariInfoRS *m_recordset=new CVariInfoRS(&m_database); 
	if(!m_database->IsOpen()) return;
	if(!m_recordset) return;
	if(m_recordset->IsOpen()) m_recordset->Close();

	strSQL.Format ("select * from tab_VariableInfo where Model_Name='%s' ",m_ModelName);
    m_recordset->Open(dbOpenDynaset,strSQL);
	if (!m_recordset->IsEOF())
	{
		VariInCnt=0;
		VariOutCnt=0;
		while(!m_recordset->IsEOF())
		{
			m_ModelVList.InsertItem(i,"");
		    COleVariant var;
			m_recordset->GetFieldValue(1,var);
		    m_ModelVList.SetItemText(i,0,(LPCTSTR)var.bstrVal);
			m_recordset->GetFieldValue(2,var);
		    m_ModelVList.SetItemText(i,1,(LPCTSTR)var.bstrVal);
			m_recordset->GetFieldValue(3,var);
		    m_ModelVList.SetItemText(i,2,(var.boolVal==0)?"FALSE":"TRUE");
			if(var.boolVal==0)
				VariOutCnt++;
			else VariInCnt++;
			m_recordset->GetFieldValue(4,var);
		    m_ModelVList.SetItemText(i,3,(LPCTSTR)var.bstrVal);
			m_recordset->GetFieldValue(5,var);
		    m_ModelVList.SetItemText(i,4,(LPCTSTR)var.bstrVal);
		    m_recordset->MoveNext();
    		i++;
		}
	}
	m_recordset->Close();
}

void CUserDataDlg::OnBtnRefresh() 
{
	// TODO: Add your control notification handler code here
	UpdateModelVList();
}


void CUserDataDlg::OnBtnMvnext() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	if(!m_ModelName.IsEmpty())
	{ 
		//CVariInfoRS *rs_vinfo=new CVariInfoRS(&m_database); 
		CString strSQL;
		int ItemSel;
		COleVariant var;
        POSITION pos=m_VList.GetFirstSelectedItemPosition();
        if (pos==NULL)
		{
        	AfxMessageBox("没有选择变量!");
       		return;
		}
       	else 
		{
       		ItemSel=m_VList.GetNextSelectedItem(pos);
			if(!m_database->IsOpen()) return;
        	if(!m_recordset) return;
        	if(m_recordset->IsOpen()) m_recordset->Close();
       		strSQL.Format("select * from tab_VariableInfo where Variable_Name='%s'",m_VList.GetItemText(ItemSel,0));
       		m_recordset->Open(dbOpenDynaset,strSQL);
			while(!m_recordset->IsEOF())
			{
				m_recordset->GetFieldValue(1,var);
				CString str;
				str=(LPCTSTR)var.bstrVal;
		    	if(!str.IsEmpty() && str==m_ModelName)
				{
					AfxMessageBox("该变量已存在于此模型中!");
		    	    return;
				}
   					m_recordset->MoveNext();
			}	
			//rs_vinfo->AddNew();
   		    //rs_vinfo->m_Model_Name=m_ModelName;
			//bool strVari_In;
   		    if(((CButton*)GetDlgItem(IDC_RD_INPUT))->GetCheck())
			{
				var.boolVal=true;
			//	VariInCnt++;
			}
	        else
			{
				var.boolVal=false;
			//	VariOutCnt++;
			}
			//rs_vinfo->m_Us_Name=username;
			//rs_vinfo->m_Variable_Name=m_VList.GetItemText(ItemSel,0);
			//rs_vinfo->m_Variable_Remarks=m_VList.GetItemText(ItemSel,1);
			HTREEITEM hi=m_UsDataTree.GetSelectedItem();
//          	CString tn;
            tn=m_UsDataTree.GetItemText(hi);
           	CDaoTableDef td(&m_Db);
            CDaoFieldInfo fi;
	   		td.Open(tn);
			if(m_set.IsOpen())
				m_set.Close();
            m_set.Open(&td);
		//	int i;
//			i=;
			CString strBind_Data;
			CString str;
			//strBind_Data=tn;
			if (m_ColNum>=0 && m_ColNum<(unsigned)m_set.GetFieldCount())//zdh
			{
				m_set.GetFieldInfo(m_ColNum,fi);
				//CString strBind_Data;
				strBind_Data=fi.m_strName;
				str.Format("对应数据列名:%s",strBind_Data);
				AfxMessageBox(str);
			}
			else 
			{
				AfxMessageBox("不存在此列号!");
				return;
			}
			strSQL.Format("insert into tab_VariableInfo(Us_Name,Model_Name,\
					Variable_Name,Variable_Remarks,Bind_Data)\
					Values('%s','%s','%s','%s','%s')",\
					username,m_ModelName,m_VList.GetItemText(ItemSel,0),\
					m_VList.GetItemText(ItemSel,1),strBind_Data);
			try
			{
				if(m_database->CanUpdate())
				{
					m_database->Execute(strSQL);
					if(var.boolVal)
					{
						if(m_recordset->IsOpen()) m_recordset->Close();
       		            strSQL.Format("select * from tab_VariableInfo where Us_Name='%s'\
							and Model_Name='%s' and Variable_Name='%s'",\
							username,m_ModelName,m_VList.GetItemText(ItemSel,0));
       		            m_recordset->Open(dbOpenDynaset,strSQL);
						m_recordset->Edit();
				        m_recordset->SetFieldValue(3,var.boolVal);
					    m_recordset->Update();
					}
				}
			}
			catch(CDaoException* e)
			{
				e->ReportError();
				e->Delete();
				return;
			}
	        //rs_vinfo->Update();

	        m_recordset->Close();
		}
        UpdateModelVList();
	}
	else AfxMessageBox("没有输入模型名!");

	UpdateData();
}

void CUserDataDlg::OnClickVlist1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int i=m_VList.GetSelectionMark();
	if (i==-1)
		AfxMessageBox("请先选择一条记录!");
	else
	m_VList.SetHotItem(i);	
	*pResult = 0;
}

void CUserDataDlg::OnClickModelvlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int i=m_ModelVList.GetSelectionMark();
	if (i==-1)
		AfxMessageBox("请先选择一条记录!");
	else
	m_ModelVList.SetHotItem(i);
	*pResult = 0;
}

void CUserDataDlg::OnClickUsdatalist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int i=m_UsDataList.GetSelectionMark();
	if (i==-1)
		AfxMessageBox("请先选择一条记录!");
	else
	m_UsDataList.SetHotItem(i);
	*pResult = 0;
}

void CUserDataDlg::OnBtnDelete() 
{
	// TODO: Add your control notification handler code here
	POSITION pos=m_UsDataList.GetFirstSelectedItemPosition();
	if (pos==NULL)
	{
		AfxMessageBox("没有选择记录!");
		return;
	}
	if(!m_Db.IsOpen()) return;
	if(m_set.IsOpen()) m_set.Close();
	UINT i, uSelectedCount=m_UsDataList.GetSelectedCount();
	int ItemSel=-1;
	if(uSelectedCount>0)
	{//获取所选样本
		for(i=0;i<uSelectedCount;i++)
			ItemSel=m_UsDataList.GetNextItem(ItemSel,LVNI_SELECTED);
	    HTREEITEM hi=m_UsDataTree.GetSelectedItem();
//    	CString tn;
        tn=m_UsDataTree.GetItemText(hi);

		CDaoTableDef td(&m_Db);
	    CDaoFieldInfo fi;
	    td.Open(tn);
     	td.GetFieldInfo(0,fi);
		
        CString strField;
	    strField=fi.m_strName;
    	CString strData;
	    strData=m_UsDataList.GetItemText(ItemSel,0);
    	CString strSQL ;
    	strSQL.Format("select * from %s where %s=%s",tn,strField,strData);
	    m_set.Open(AFX_DAO_USE_DEFAULT_TYPE,strSQL);
		try
		{
			m_set.Delete(); 
		}
		catch(CDaoException* e){
			e->ReportError();
			e->Delete();
			return;
		}
		m_UsDataList.DeleteItem(ItemSel);
	}
}

void CUserDataDlg::OnBtnVdelete() 
{
	// TODO: Add your control notification handler code here
	CString strSQL;
	int ItemSel;
	POSITION pos=m_ModelVList.GetFirstSelectedItemPosition();
	if (pos==NULL)
	{
		AfxMessageBox("没有选择记录!");
		return;
	}
	else while (pos)
	{
		ItemSel=m_ModelVList.GetNextSelectedItem(pos);
		strSQL.Format("delete from tab_VariableInfo where Model_Name='%s' and Variable_Name='%s'",m_ModelVList.GetItemText(ItemSel,0),m_ModelVList.GetItemText(ItemSel,1));
//		if(m_ModelVList.GetItemText(ItemSel,2)=="true")
//			VariInCnt--;
//		else VariOutCnt--;
		m_database->Execute(strSQL);
	}
	UpdateModelVList();	
}

void CUserDataDlg::OnOK() 
{
	// TODO: Add extra validation here
	CString ModelMethod;
	UpdateData();
	if(m_RowStart>=m_RowEnd||m_RowStart==0)
	{
		AfxMessageBox("请按要求选择建模数据!");
		return;
	}
    if(m_set.IsOpen())
		m_set.Close();

	CDaoTableDef td(&m_Db);
	td.Open(tn);
	m_set.Open(&td);
	m_set.MoveLast();
	if(m_RowEnd>(unsigned) m_set.GetRecordCount())
	{
		AfxMessageBox("超过数据集大小!");
		return;
	}
    SampleStart=m_RowStart;
	SampleEnd=m_RowEnd;
	if(VariInCnt==0||VariOutCnt==0)
	{
		AfxMessageBox("您尚未完成模型变量定义!");
		return;
	}
   	
	CString str;
	switch(m_nModelMethod)
	{
		case(0):
	    	ModelMethod="神经网络";
	    	str.Format("您已经选用%s方法开始建模,其中输入变量数目:%d、输出变量数目:%d",\
			ModelMethod,VariInCnt,VariOutCnt);
            AfxMessageBox(str);
	    	break;
		case(1):
			ModelMethod="线性回归";
			if (VariOutCnt>1)
			{
				AfxMessageBox("输出变量数目〉1,不能采用线性回归方法建模!");
				return;
			}
			str.Format("您已经选用%s方法开始建模,其中输入变量数目:%d、输出变量数目:%d",\
			ModelMethod,VariInCnt,VariOutCnt);
            AfxMessageBox(str);
			break;
		default:
			AfxMessageBox("请选择建模方法!");
			return;
	}
	nModelMethod=m_nModelMethod;

    CString strSQL;	
	strSQL.Format ("select * from tab_ModelInfo where Us_Name='%s' and Model_Name='%s'\
		and Model_Method='%s'",username,m_ModelName,ModelMethod);
	if(m_recordset->IsOpen())
		m_recordset->Close();
    m_recordset->Open (AFX_DAO_USE_DEFAULT_TYPE,strSQL);
    if(!m_recordset->IsEOF())
	{
		AfxMessageBox("此模型已存在!");	
		return;
	}
	ModelName=m_ModelName;
	CDialog::OnOK();
}

⌨️ 快捷键说明

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