比如有下面的一棵树
E[1]
E[1]{1}
E[1]{1-1}
E[1]{1-2}
E[1]{1-1}-2
编码成10位数
编码以后是
0100000000
0101000000
0101010000
0101020000
0101012000
怎么设计一个算法实现上面的功能呢?请教各位老师们?
E[1]
E[1]{1}
E[1]{1-1}
E[1]{1-2}
E[1]{1-1}-2
编码成10位数
编码以后是
0100000000
0101000000
0101010000
0101020000
0101012000
怎么设计一个算法实现上面的功能呢?请教各位老师们?
{ // TODO: Add your control notification handler code here std::vector<HTREEITEM> vecRootItem; //一级结点根目录
CString strVal=_T("");
CString strFormat = _T("");
CString strSQL = _T("");
std::vector<CString> vecString; //一级结点根内容
HTREEITEM hItem;
int nIndex = 1;
long lStdStratID = 0; //当前分层版本号 int index=0;
long lStratId;
CString cstr;
index = m_comb1.GetCount();
index=m_comb1.GetCurSel();
m_comb1.GetLBText(index,cstr);
lStdStratID=atol(cstr); //lNO=111
m_AdoConn.OnInitADOConn();
//一级结点
hItem = m_wndTree.GetRootItem();
strVal = m_wndTree.GetItemText(hItem);
vecString.push_back(strVal);
while (hItem!=NULL)
{
vecRootItem.push_back(hItem);
hItem = m_wndTree.GetNextSiblingItem(hItem);
strVal = m_wndTree.GetItemText(hItem);
vecString.push_back(strVal);
}
////////
for(std::vector<CString>::iterator iter = vecString.begin(); iter != vecString.end()-1; iter ++)
{
strFormat.Format("%d",nIndex); //nIndex=1
if (1 == lstrlen(strFormat))
{
strVal.Format("0%d00000000",nIndex);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'" //ID!!!=0
,strVal
,lStdStratID
,*iter);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
else
{
strVal.Format("%d00000000",nIndex);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
nIndex ++;
}
// m_AdoConn.ExitConnect(); //add
vecString.clear(); //二级结点
for (std::vector<HTREEITEM>::iterator iter2 = vecRootItem.begin(); iter2 != vecRootItem.end(); iter2 ++)
{
HTREEITEM hItem2;
std::vector<HTREEITEM> vecRoot2; //二级结点根目录
std::vector<CString> vecString2; //二级结点根内容
long nIndex2 = 1; hItem2 = m_wndTree.GetChildItem(*iter2);
strVal = m_wndTree.GetItemText(hItem2);
vecString2.push_back(strVal); //strVal=E[1]{1-1}
while (NULL != hItem2)
{
vecRoot2.push_back(hItem2);
hItem2 = m_wndTree.GetNextSiblingItem(hItem2);
strVal = m_wndTree.GetItemText(hItem2);
vecString2.push_back(strVal);
} for (std::vector<CString>::iterator iter3 = vecString2.begin(); iter3 != vecString2.end()-1; iter3 ++)
{
strVal = m_wndTree.GetItemText(*iter2);
strFormat.Format("SELECT STRATLEVEL FROM SYS_STDSTRATDESC WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,lStdStratID
,strVal);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
while(!m_AdoConn.m_pRecordset->adoEOF)
{
m_AdoConn.m_pRecordset->GetCollect("STRATLEVEL");
m_AdoConn.m_pRecordset->MoveNext();
}
std::string str = "";
str = (LPCTSTR)(strVal);
str = str.substr(0,2); //!!! str='E['返回一个从指定位置(0)开始,并具有指定长度(2)的子字符串
strFormat.Format("%d",nIndex2);
if (1 == lstrlen(strFormat))
{
strVal.Format("%s0%d000000",str.c_str(),nIndex2); //int i = atoi(str.c_str());
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter3);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
else
{
strVal.Format("%s%d000000",nIndex2);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter3);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat); m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
nIndex2 ++;
}
// m_AdoConn.ExitConnect(); //add
vecString2.clear(); //三级结点
for (std::vector<HTREEITEM>::iterator iter4 = vecRoot2.begin(); iter4 != vecRoot2.end(); iter4 ++)
{
HTREEITEM hItem3;
std::vector<HTREEITEM> vecRoot3; //三级结点根目录
std::vector<CString> vecString3; //三级结点跟内容
long lIndex3 = 1; hItem3 = m_wndTree.GetChildItem(*iter4);
strVal = m_wndTree.GetItemText(hItem3);
vecString3.push_back(strVal); while (hItem3!=NULL)
{
vecRoot3.push_back(hItem3);
hItem3 = m_wndTree.GetNextSiblingItem(hItem3);
strVal = m_wndTree.GetItemText(hItem3);
vecString3.push_back(strVal);
} for (std::vector<CString>::iterator iter5 = vecString3.begin(); iter5 != vecString3.end()-1; iter5 ++)
{
strVal = m_wndTree.GetItemText(*iter4);
strFormat.Format("SELECT STRATLEVEL FROM SYS_STDSTRATDESC WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,lStdStratID
,strVal);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
while(!m_AdoConn.m_pRecordset->adoEOF)
{
m_AdoConn.m_pRecordset->GetCollect("STRATLEVEL");
m_AdoConn.m_pRecordset->MoveNext();
}
std::string str1 = "";
str1 = (LPCTSTR)(strVal);
str1 = str1.substr(0,4); strFormat.Format("%d",lIndex3);
if (1 == lstrlen(strFormat))
{
strVal.Format("%s0%d0000",lIndex3);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter5);
// rst.Open(strFormat);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
else
{
strVal.Format("%s%d0000",str1.c_str(),lIndex3);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter5);
// rst.Open(strFormat);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
lIndex3 ++;
}
// m_AdoConn.ExitConnect(); //add
vecString3.clear();
for (std::vector<HTREEITEM>::iterator iter6 = vecRoot3.begin(); iter6 != vecRoot3.end(); iter6 ++)
{
HTREEITEM hItem4;
std::vector<HTREEITEM> vecRoot4; //三级结点根目录
std::vector<CString> vecString4; //三级结点跟内容
long lIndex4 = 1; hItem4 = m_wndTree.GetChildItem(*iter6);
strVal = m_wndTree.GetItemText(hItem4);
vecString4.push_back(strVal); while (NULL != hItem4)
{
vecRoot4.push_back(hItem4);
hItem4 = m_wndTree.GetNextSiblingItem(hItem4);
strVal = m_wndTree.GetItemText(hItem4);
vecString4.push_back(strVal);
} for (std::vector<CString>::iterator iter7 = vecString4.begin(); iter7 != vecString4.end()-1; iter7 ++)
{
strVal = m_wndTree.GetItemText(*iter6);
strFormat.Format("SELECT STRATLEVEL FROM SYS_STDSTRATDESC WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,lStdStratID
,strVal);
// rst.Open(strFormat);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
while(!m_AdoConn.m_pRecordset->adoEOF)
{
m_AdoConn.m_pRecordset->GetCollect("STRATLEVEL");
m_AdoConn.m_pRecordset->MoveNext();
} std::string str2 = "";
str2 = (LPCTSTR)(strVal);
str2 = str2.substr(0,6); strFormat.Format("%d",lIndex4);
if (1 == lstrlen(strFormat))
{
strVal.Format("%s0%d00",str2.c_str(),lIndex4);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter7);
// rst.Open(strFormat);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
else
{
strVal.Format("%s%d00",str2.c_str(),lIndex4);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter7);
// rst.Open(strFormat);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
lIndex4 ++;
}
// m_AdoConn.ExitConnect();
vecString4.clear(); //五级结点
for (std::vector<HTREEITEM>::iterator iter8 = vecRoot4.begin(); iter8 != vecRoot4.end(); iter8 ++)
{
HTREEITEM hItem5;
std::vector<HTREEITEM> vecRoot5; //三级结点根目录
std::vector<CString> vecString5; //三级结点跟内容
long lIndex5 = 1; hItem5 = m_wndTree.GetChildItem(*iter8);
strVal = m_wndTree.GetItemText(hItem5);
vecString5.push_back(strVal); while (NULL != hItem5)
{
vecRoot5.push_back(hItem5);
hItem5 = m_wndTree.GetNextSiblingItem(hItem5);
strVal = m_wndTree.GetItemText(hItem5);
vecString5.push_back(strVal);
} for (std::vector<CString>::iterator iter9 = vecString5.begin(); iter9 != vecString5.end()-1; iter9 ++)
{
strVal = m_wndTree.GetItemText(*iter8);
strFormat.Format("SELECT STRATLEVEL FROM SYS_STDSTRATDESC WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,lStdStratID
,strVal);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
while(!m_AdoConn.m_pRecordset->adoEOF)
{
m_AdoConn.m_pRecordset->GetCollect("STRATLEVEL");
m_AdoConn.m_pRecordset->MoveNext();
} std::string str3 = "";
str3 = (LPCTSTR)(strVal);
str3 = str3.substr(0,8); strFormat.Format("%d",lIndex5);
if (1 == lstrlen(strFormat))
{
strVal.Format("%s0%d",str3.c_str(),lIndex5);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter9);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat);
}
else
{
strVal.Format("%s%d",str3.c_str(),lIndex5);
strFormat.Format("UPDATE SYS_STDSTRATDESC SET STRATLEVEL = '%s' WHERE STDSTRATID = %d AND STRATCODE = '%s'"
,strVal
,lStdStratID
,*iter9);
// rst.Open(strFormat);
m_AdoConn.m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)strFormat); }
lIndex5 ++;
}
vecString5.clear();
}
}
}
}
AfxMessageBox("标准地层级别编码已保存!");//更新数据库已完成!
UpdateData(FALSE);
}