// SAmountItem.h: interface for the SAmountItem class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_SAMOUNTITEM_H__E504668B_4AAD_45AB_862B_E4A6311E65C6__INCLUDED_) #define AFX_SAMOUNTITEM_H__E504668B_4AAD_45AB_862B_E4A6311E65C6__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class TELAPI SAmountItem { // Construction public: SAmountItem(int iItem, const TCHAR* szBlkName, const TCHAR* szName, const TCHAR* szSpec, const TCHAR* szUnit, double nNum, const TCHAR* szDemo); SAmountItem(){}; virtual ~SAmountItem(){}; SAmountItem & operator = (const SAmountItem &src) { m_csBlkName = src.m_csBlkName; m_csName = src.m_csName; m_csSpec = src.m_csSpec; m_csUnit = src.m_csUnit; m_csDemo = src.m_csDemo; m_nNum = src.m_nNum; m_iType = src.m_iType; return *this; } CString m_csBlkName; CString m_csName; CString m_csSpec; CString m_csUnit; CString m_csDemo; CString m_csAttribText; double m_nNum; int m_iType; // 0:管线 1:阀门 2:管道设备 3:管道附件 4:洁具 5:其他设备 static int SortByItem(const SAmountItem *, const SAmountItem *); }; inline int IntCmp(const int *i, const int *j) { if(*i < *j) return -1; else if(*i > *j) return 1; else return 0; } inline int SAmountItem::SortByItem(const SAmountItem *p1, const SAmountItem *p2) { SAmountItem *pp1 = (SAmountItem *)p1, *pp2 = (SAmountItem *)p2; int ret = IntCmp(&pp1->m_iType, &pp2->m_iType); if(ret != 0) return ret; if(pp1->m_iType == 0 && pp2->m_iType == 0){ //双方都是管线,要比较材质和管径 CString csName1 = pp1->m_csName; CString csName2 = pp2->m_csName; ret = _tcscmp(csName1, csName2); if(ret != 0) return ret; CString csSpec1 = pp1->m_csSpec; CString csSpec2 = pp2->m_csSpec; TCHAR cName1[256]=_T(""), eName1[256]=_T(""); TCHAR cName2[256]=_T(""), eName2[256]=_T(""); CT_strnth(csSpec1, 1, cName1); CT_strnth(csSpec1, 2, eName1); CT_strnth(csSpec2, 1, cName2); CT_strnth(csSpec2, 2, eName2); if(_tcscmp(eName1, _T(""))!=0 && _tcscmp(eName2, _T(""))!=0 ) //有空格,说明管材和规格写在一起了 { ret = _tcscmp(cName1, cName2); if(ret != 0) return ret; } int num1, num2, numWith; XString xsText; StringAnalysis((const TCHAR*)csSpec1, xsText, &num1, &numWith); StringAnalysis((const TCHAR*)csSpec2, xsText, &num2, &numWith); return IntCmp(&num1, &num2); } else if((pp1->m_iType == 3 && pp2->m_iType == 3) || (pp1->m_iType == 2 && pp2->m_iType == 2) || (pp1->m_iType == 1 && pp2->m_iType == 1)) //双方都是附件,要比较材质和管径 { CString csName1 = pp1->m_csName; CString csName2 = pp2->m_csName; ret = _tcscmp(csName1, csName2); if(ret != 0) return ret; return _tcscmp(pp1->m_csSpec, pp2->m_csSpec); } else return _tcscmp(pp1->m_csSpec, pp2->m_csSpec); return 0; } inline SAmountItem::SAmountItem(int iItem, const TCHAR* szBlkName, const TCHAR* szName, const TCHAR* szSpec, const TCHAR* szUnit, double nNum, const TCHAR* szDemo) { m_iType = iItem; m_csBlkName = szBlkName; m_csName = szName; m_csSpec = szSpec; m_csUnit = szUnit; m_nNum = nNum; m_csDemo = szDemo; } #endif // !defined(AFX_SAMOUNTITEM_H__E504668B_4AAD_45AB_862B_E4A6311E65C6__INCLUDED_)