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

📄 weightinput.cpp

📁 基于专家系统应用的程序代码 使用vc编程,access为数据库的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// WeightInput.cpp : implementation file
//

#include "stdafx.h"
#include "mineDabse.h"
#include "WeightInput.h"

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

extern CMineDabseApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CWeightInput dialog


CWeightInput::CWeightInput(CWnd* pParent /*=NULL*/)
: CDialog(CWeightInput::IDD, pParent)
{
	//{{AFX_DATA_INIT(CWeightInput)
	m_fengYa = 0.0f;
	m_xieLv = 0.0f;
	m_fengLiang = 0.0f;
	m_strVexHead = _T("");
	m_strVexTail = _T("");
	m_fengZu = 0.0f;
 //   inputCount=0;
	current_sel=0;
	m_hdmc = _T("");
	//}}AFX_DATA_INIT
}


void CWeightInput::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWeightInput)
	DDX_Control(pDX, IDINSERT, m_insert);
	DDX_Control(pDX, IDCACULATE, m_caculate);
	DDX_Control(pDX, IDC_VEXHEAD, m_vexHead);
	DDX_Control(pDX, IDC_BUTTON_MODIFY, m_modify);
	DDX_Control(pDX, IDC_BUTTON_DEL, m_delete);
	DDX_Control(pDX, IDC_LIST, m_list);
	DDX_Control(pDX, IDC_VEXTAIL, m_vexTail);
	DDX_Text(pDX, IDC_EDIT_FENGYA, m_fengYa);
	DDX_Text(pDX, IDC_EDIT_XIELV, m_xieLv);
	DDX_Text(pDX, IDC_FENGLIANG, m_fengLiang);
	DDX_Text(pDX, IDC_VEXHEAD, m_strVexHead);
	DDX_Text(pDX, IDC_VEXTAIL, m_strVexTail);
	DDX_Text(pDX, IDC_WEIGHT, m_fengZu);
	DDX_Text(pDX, IDC_HDBIANHAO, m_hdmc);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CWeightInput, CDialog)
//{{AFX_MSG_MAP(CWeightInput)
ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify)
ON_NOTIFY(NM_CLICK, IDC_LIST, OnClickList)
ON_BN_CLICKED(IDINSERT, OnInsert)
ON_BN_CLICKED(IDCACULATE, OnCaculate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWeightInput message handlers
CString CWeightInput::getVex(int i)
{
	return Net.vexs[i];
}

//DEL CString CWeightInput::getVexTail()
//DEL {
//DEL   return "";
//DEL }


int CWeightInput::getVexNum()
{
	return Net.vexNum;
}
/////////////////////////////
void CWeightInput::setVex(int i,CString str)
{
	Net.vexs[i]=str;
	G.vexs[i]=str;
}
/////////////////
void CWeightInput::setArcs(int row, int column,float fengZu,float fengLiang, int type,float fengYa,float xieLv)
{   Net.arcs[row][column].hdmc="";
	Net.arcs[row][column].fengZu=fengZu;
	Net.arcs[row][column].fengLiang=fengLiang;
	Net.arcs[row][column].intArcType=type;
	Net.arcs[row][column].fengYa=fengYa;
	Net.arcs[row][column].xieLv=xieLv;
	G.arcs[row][column].fengZu=0;
	G.arcs[row][column].intArcType=type;   
}
/////////////
void CWeightInput::setVexNum(int vexNum)
{
	Net.vexNum=vexNum;
	G.vexNum=vexNum;
}
/////////////////
void CWeightInput::setArcNum(int arcNum)
{
	Net.arcNum=arcNum;
	G.arcNum=arcNum;
}
////////////////
BOOL CWeightInput::OnInitDialog() 
{
	CDialog::OnInitDialog();
    m_modify.EnableWindow(false);
	m_delete.EnableWindow(false);
	CheckRadioButton(IDC_RADIOFJ,IDC_RADIOYB,IDC_RADIOYB);
	//	m_list.InsertColumn(0,"序号",LVCFMT_LEFT,60);
	m_list.InsertColumn(0,"巷道名称",LVCFMT_LEFT,120);
	m_list.InsertColumn(1,"弧尾",LVCFMT_LEFT,60);
	m_list.InsertColumn(2,"弧头",LVCFMT_LEFT,100);
	m_list.InsertColumn(3,"风阻",LVCFMT_LEFT,60);
	m_list.InsertColumn(4,"风量",LVCFMT_LEFT,100);
	m_list.InsertColumn(5,"风压",LVCFMT_LEFT,60);
	m_list.InsertColumn(6,"类型",LVCFMT_LEFT,100);
	m_list.InsertColumn(7,"斜率",LVCFMT_LEFT,60);
	//////////读取数据库中的信息添加到列表控件///////////
	int nItem;	
	try
	{
		m_pRecordset.CreateInstance("ADODB.Recordset");
		m_pRecordset->Open("SELECT * FROM netDiagram",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		//	m_bSuccess = TRUE;	
		while(!m_pRecordset->adoEOF)
		{
			vHDName=m_pRecordset->GetCollect("laneWayName");
			vArcTail = m_pRecordset->GetCollect("arcTail");
			vArcHead = m_pRecordset->GetCollect("arcHead");
			vFengLiang = m_pRecordset->GetCollect("fengLiang");
			vFengYa = m_pRecordset->GetCollect("fengYa");
			vFengZu=m_pRecordset->GetCollect("fengZu");
			vLeiXing = m_pRecordset->GetCollect("leiXing");
			vXieLv=m_pRecordset->GetCollect("xieLv");		
			nItem=m_list.InsertItem(0xffff,(_bstr_t)vHDName);	
			m_list.SetItem(nItem,1,1,(_bstr_t)vArcTail,NULL,0,0,0);
			m_list.SetItem(nItem,2,1,(_bstr_t)vArcHead,NULL,0,0,0);
			m_list.SetItem(nItem,3,1,(_bstr_t)vFengZu,NULL,0,0,0);
			m_list.SetItem(nItem,4,1,(_bstr_t)vFengLiang,NULL,0,0,0);
			m_list.SetItem(nItem,5,1,(_bstr_t)vFengYa,NULL,0,0,0);			
			m_list.SetItem(nItem,6,1,(_bstr_t)vLeiXing,NULL,0,0,0);
			m_list.SetItem(nItem,7,1,(_bstr_t)vXieLv,NULL,0,0,0);
			m_pRecordset->MoveNext();
		}
		m_pRecordset->Close();
		m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
	}
	catch(_com_error e)///捕捉异常
	{
		CString	str=e.ErrorMessage();
		str=str+"读取数据库失败!";
		AfxMessageBox(str);///显示错误信息
	}
/////////////////////////////////////////
	//初始化顶点个数
	try
	{
		m_pRecordset->Open("SELECT * FROM vexAcrNum",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		//	m_bSuccess = TRUE;	
		_variant_t  vVexNum,vAcrNum;
		while(!m_pRecordset->adoEOF)
		{
			vVexNum=m_pRecordset->GetCollect("vexNum");
			vAcrNum = m_pRecordset->GetCollect("arcNum");
            m_vexNum=vVexNum.iVal;
			m_arcNum=vAcrNum.iVal;					
			m_pRecordset->MoveNext();
		}
		m_pRecordset->Close();	
	}
	catch(_com_error e)///捕捉异常
	{
		CString	str=e.ErrorMessage();
		str=str+"读取数据库失败!";
		AfxMessageBox(str);///显示错误信息
	}
	//if (countLine<=vexnum)??????????出错
	int row_int,column_int;
	CString strName;
	row_int=column_int=0;
	setVexNum(m_vexNum);//设置顶点数目
	setArcNum(m_arcNum);//设置弧的个数
	Net.visited=new bool[m_vexNum];//顶点访问标志
	//Net.windDirection=new bool[m_arcNum];//风流方向标志,初始化true,表示与拟定方向相同
   // for(int i=0;i<m_arcNum;i++){
//		Net.windDirection[i]=true;	
//	}

	
///提取顶点的值
	try
	{
		m_pRecordset->Open("SELECT * FROM vexTable",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		//	m_bSuccess = TRUE;	
		_variant_t  vName;
		CString str_id;
		while(!m_pRecordset->adoEOF&&row_int<m_vexNum)
		{
			vName=m_pRecordset->GetCollect("vexName");
			str_id=vName.bstrVal;
			setVex(row_int,str_id);//设置顶点名称
			Net.visited[row_int]=false;
			row_int++;
			m_pRecordset->MoveNext();
		}
		m_pRecordset->Close();	
	}
	catch(_com_error e)///捕捉异常
	{
		CString	str=e.ErrorMessage();
		str=str+"读取数据库失败!";
		AfxMessageBox(str);///显示错误信息
	}
/////////////////////////////////////////////////
	int fengZuInit=-1;
	for( row_int=0;row_int<m_vexNum;row_int++)
		for(column_int=0;column_int<m_vexNum;column_int++)
		{
			setArcs(row_int,column_int,fengZuInit,0,2,0,0);//网络初始化 
			//setArcs(int row_int, int column_int,float fengZu,float fengLiang, int type)
		}
//////////////////////////////////////////////////////////
	if(m_list.GetItemCount()==Net.arcNum)
	{
		m_insert.EnableWindow(false);
		m_caculate.EnableWindow(true);
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

////////////////////
int CWeightInput::getArcNum()
{
	return Net.arcNum;
}
/////////////////
int CWeightInput::getType(int row,int column)
{
	return Net.arcs[row][column].intArcType;
}
////////////////////
int CWeightInput::locateVex(MGraph Net, CString u)
{
	int i; 
	for(i=0;i<Net.vexNum;i++)
		if(u.Compare(Net.vexs[i])==0)
			return i;
		return -1;
}
////////////////////////
void CWeightInput::setNull(int row, int column)
{
	G.arcs[row][column].fengZu=G.arcs[column][row].fengZu=0;
}
//////////////////////////
int CWeightInput::getGraghValue(int row, int column)
{
	return G.arcs[row][column].fengZu;
}
////////////////////////////
float CWeightInput::getFuZu(int row, int column)
{
	return Net.arcs[row][column].fengZu;
	
}
///////////////////////////////////////
int CWeightInput::locateGVex( CString u)
{
	int i;
	for(i=0;i<G.vexNum;i++)
		if(u.Compare(G.vexs[i])==0)
			return i;
		return -1;
}



float CWeightInput::getNetFengLiang(int row,int column)
{
	return Net.arcs[row][column].fengLiang;
}

void CWeightInput::setNetFengLiang(int row, int column, float xiuZheng)
{
	Net.arcs[row][column].fengLiang+=xiuZheng;
	if(Net.arcs[row][column].fengLiang<0)
	{
		Net.arcs[column][row].fengLiang=-Net.arcs[row][column].fengLiang;
		Net.arcs[row][column].fengLiang=0;
		Net.arcs[column][row].fengZu=Net.arcs[row][column].fengZu;
		Net.arcs[row][column].fengZu=-1;
		//Net.windDirection[row]=false;
		Net.arcs[column][row].hdmc=Net.arcs[row][column].hdmc;
		Net.arcs[row][column].hdmc="";
		//风量正负代表着风流方向,值为正表示分支风流方向和回路相同,否则值为-1
	}
}


float CWeightInput::getFengYa(int row,int column)
{
    return Net.arcs[row][column].fengYa;
}

float CWeightInput::getXieLv(int row,int column)
{
	return Net.arcs[row][column].xieLv;
}

void CWeightInput::setXieLv(int row,int column,float xieLiu)
{
	Net.arcs[row][column].xieLv=xieLiu;
}

void CWeightInput::setFengYa(int row,int column,float fengYa)
{
	Net.arcs[row][column].fengYa=fengYa;   
}

void CWeightInput::OnButtonDel() 
{
	// TODO: Add your control notification handler code here
	CString str,strSql;
	str="delete * from netDiagram where arcTail='%s' and arcHead='%s'";
    strSql.Format(str,m_strVexTail,m_strVexHead);
	theApp.m_pConnection->Execute(strSql.AllocSysString(),NULL,adOptionUnspecified);
	m_list.DeleteItem(current_sel);
	m_strVexHead="";	
	m_strVexTail="";
	m_fengZu=0;
	m_fengLiang=0;
	m_fengYa=0;
	m_leiXing=0;
	m_xieLv=0;
	UpdateData(false);
	m_delete.EnableWindow(false);
}

void CWeightInput::OnButtonModify() 
{
	// TODO: Add your control notification handler code here
	CString strTempTail=m_strVexTail,strTempHead=m_strVexHead;
	UpdateData(true);
	initNet();
	CString str,strSql;
	str="update netDiagram set arcTail='%s',arcHead='%s',fengLiang=%f,fengYa=%f,fengZu=%f,leiXing=%d,xieLv=%f where arcTail='%s' and arcHead='%s'";
    strSql.Format(str,m_strVexTail,m_strVexHead,m_fengLiang,m_fengYa,m_fengZu,m_leiXing,m_xieLv,strTempTail,strTempHead);
	theApp.m_pConnection->Execute(strSql.AllocSysString(),NULL,adOptionUnspecified);
	vArcTail =m_strVexTail;
	vArcHead =m_strVexHead;
	vFengLiang =m_fengLiang;
	vFengYa =m_fengYa;
	vFengZu=m_fengZu;
	vLeiXing=long(m_leiXing);
	vXieLv=m_xieLv;
	m_list.SetItem(current_sel,0,1,(_bstr_t)vArcTail,NULL,0,0,0);		
	m_list.SetItem(current_sel,1,1,(_bstr_t)vArcHead,NULL,0,0,0);
	m_list.SetItem(current_sel,2,1,(_bstr_t)vFengZu,NULL,0,0,0);
	m_list.SetItem(current_sel,3,1,(_bstr_t)vFengLiang,NULL,0,0,0);
	m_list.SetItem(current_sel,4,1,(_bstr_t)vFengYa,NULL,0,0,0);			
	m_list.SetItem(current_sel,5,1,(_bstr_t)vLeiXing,NULL,0,0,0);
	m_list.SetItem(current_sel,6,1,(_bstr_t)vXieLv,NULL,0,0,0);
	m_modify.EnableWindow(false);
	UpdateData(false);
}

void CWeightInput::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
    editList();
	*pResult = 0;
}



void CWeightInput::editList()
{
	CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_LIST);
	ASSERT(pListCtrl != NULL);
		
	//POSITION pos = pListCtrl->GetFirstSelectedItemPosition();
	//	if (pos == NULL)
	//	TRACE0("No items were selected!\n");
	//	else
	{
		// while (pos)
		//{
		//	current_sel = pListCtrl->GetNextSelectedItem(pos);
		
		current_sel=pListCtrl->GetSelectionMark();
		m_hdmc=m_list.GetItemText(current_sel,0);
		m_strVexTail=m_list.GetItemText(current_sel,1);
		m_strVexHead=m_list.GetItemText(current_sel,2);	
		m_fengZu=atof(m_list.GetItemText(current_sel,3));
		m_fengLiang=atof(m_list.GetItemText(current_sel,4));
		m_fengYa=atof(m_list.GetItemText(current_sel,5));
		m_leiXing=atoi(m_list.GetItemText(current_sel,6));
		m_xieLv=atof(m_list.GetItemText(current_sel,7));

		if (0==m_leiXing)//风机
			CheckRadioButton (IDC_RADIOFJ,IDC_RADIOYB,IDC_RADIOFJ);
		else 
			if (1==m_leiXing)//固定分支
				CheckRadioButton (IDC_RADIOFJ,IDC_RADIOYB,IDC_RADIOGD);
			else 
				CheckRadioButton (IDC_RADIOFJ,IDC_RADIOYB,IDC_RADIOYB);
		UpdateData(false);
		//  TRACE1("Item %d was selected!\n", nItem);
		// you could do your own processing on nItem here
		//}
	}	
	/*	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	int current_sel= pNMListView->iItem;	
	if(m_list.GetItemState(current_sel,LVIS_SELECTED)==LVIS_SELECTED)
	{
	m_strVexTail=m_list.GetItemText(current_sel,1);
	m_strVexHead=m_list.GetItemText(current_sel,2);	
	UpdateData(false);
}*/
	m_modify.EnableWindow(true);
	m_delete.EnableWindow(true);
}

void CWeightInput::initNet()
{
	/*CString strId;
	try{
		//	m_pRecordset.CreateInstance("ADODB.Recordset");
		CString str="SELECT id FROM vexTable where vexName='%s'",strSql;

⌨️ 快捷键说明

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