📄 weightinput.cpp
字号:
// 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 + -