Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtCalc/CalcFeedResidenceDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

653 lines
23 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// CalcFeedResidenceDlg.cpp : implementation file
//
#include "stdafx.h"
#include <MSWORD8.h>
#include "CalcFeedResidenceDlg.h"
#include "SanitaryDangDlg.h"
#include "twtdef.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//#ifdef _WIN64
#include"TGAs.h"
//#endif
void FeedResidenceSysCalc()
{
CTemporaryResourceOverride vTemp;
CCalcFeedResidenceDlg dlg;
dlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CCalcFeedResidenceDlg dialog
//BOOL GetPipeMaterialList(XStringList &lstMat)
//{
// CodeBase db;
// XString fullFile;
// if(!FindFile(_T("pipe.dbf"), fullFile)) {
// AfxMessageBox(_T("对不起,没有发现pipe.dbf文件!"));
// return FALSE;
// }
//
// XDbfTable *pTable = db.Open(fullFile);
// if(!pTable)
// return FALSE;
// XString xsMaterial;
// for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
// GET_FIELD(pTable, _T("GC"), xsMaterial);
// if(xsMaterial != _T("") && lstMat.Index(xsMaterial) < 0)
// lstMat.Append(tstrnew(xsMaterial));
// }
// return TRUE;
//}
//
CCalcFeedResidenceDlg::CCalcFeedResidenceDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCalcFeedResidenceDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCalcFeedResidenceDlg)
m_iPipeMat = 0;
m_nFactor = 2.8;
m_nNumPeople = 3;
m_iRation = 250;
m_iNumHour = 24;
m_nNg = 4;
m_iNumDoor = 1;
m_csU0 = _T("");
m_csAc = _T("");
m_iNumFloor = 10;
//}}AFX_DATA_INIT
}
void CCalcFeedResidenceDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCalcFeedResidenceDlg)
DDX_Control(pDX, IDC_COMBO_PIPETYPE, m_comboMat);
DDX_Control(pDX, IDC_LIST_CALC, m_listCalc);
DDX_CBIndex(pDX, IDC_COMBO_PIPETYPE, m_iPipeMat);
DDX_Text(pDX, IDC_EDIT_HOUR_FACTOR, m_nFactor);
DDX_Text(pDX, IDC_EDIT_PEOPLE_NUM, m_nNumPeople);
DDX_Text(pDX, IDC_EDIT_RATION, m_iRation);
DDX_Text(pDX, IDC_EDIT_HOUR_NUM, m_iNumHour);
DDX_Text(pDX, IDC_EDIT_ALL_DANG, m_nNg);
DDX_Text(pDX, IDC_EDIT_DOOR_NUM, m_iNumDoor);
DDX_Text(pDX, IDC_STATIC_U0, m_csU0);
DDX_Text(pDX, IDC_STATIC_AC, m_csAc);
DDX_Text(pDX, IDC_EDIT_FLOOR_NUM, m_iNumFloor);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCalcFeedResidenceDlg, CDialog)
//{{AFX_MSG_MAP(CCalcFeedResidenceDlg)
ON_BN_CLICKED(IDC_BUTTON_RATION, OnButtonRation)
ON_BN_CLICKED(IDC_BUTTON_FACTOR, OnButtonFactor)
ON_BN_CLICKED(IDC_BUTTON_DANG, OnButtonDang)
ON_BN_CLICKED(IDC_BUTTON_WORD, OnButtonWord)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCalcFeedResidenceDlg message handlers
BOOL CCalcFeedResidenceDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_listCalc.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
XStringList lstMat;
GetPipeMaterialList(lstMat);
for(int i=0;i<lstMat.Length();i++){
m_comboMat.AddString(lstMat[i]);
}
m_listCalc.InsertColumn ( 0, _T("楼层"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 1, _T("∑Ng"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 2, _T("U"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 3, _T("q(l/s)"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 4, _T("DN(mm)"), LVCFMT_CENTER, 60 );
// m_listCalc.InsertColumn ( 5, _T("内径(mm)"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 5, _T("v(m/s)"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 6, _T("i(m/m)"), LVCFMT_CENTER, 60 );
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//extern double GetValBetween2(double n1, double n2, double nRange1, double nRange2, double nFactor);
//extern void GetPipeSpecList(DList<int> &lstSpec, const TCHAR* szMat);
//double GetPipeDjByDn(const TCHAR* szMat, int iDnIn)
//{
// int nRet(-1);
// CodeBase db;
// XString fullFile;
// if(!FindFile(_T("pipe.dbf"), fullFile)) {
// AfxMessageBox(_T("对不起,没有发现pipe.dbf文件!"));
// return nRet;
// }
// XDbfTable *pTable = db.Open(fullFile);
// if(!pTable)
// return nRet;
// XString xsMaterial;
// int iDn(0);
// double nDj(0);
// for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
// GET_FIELD(pTable, _T("GC"), xsMaterial);
// GET_FIELD(pTable, _T("DN"), iDn);
// GET_FIELD(pTable, _T("DJ"), nDj);
// nDj = nDj/1000;
// if(_tcsicmp((const TCHAR*)xsMaterial, szMat) == 0 && iDn == iDnIn)
// return nDj;
// }
// return nRet;
//}
int GetPipeDnByQ(double nQ, CString csMat, double &nI, double &nSpeed, double &nRetDj)
{
int nRet(-1);
double nCh(0); // 海澄-威廉系数
if(csMat == _T("镀锌钢管") || csMat == _T("给水铸铁管") || csMat == _T("排水铸铁管") || csMat == _T("焊接钢管") || csMat == _T("无缝钢管"))
nCh = 100;
else
nCh = 140;
DList<int> lstSpec;
DList<double> lstSpecDj;
GetPipeSpecList(lstSpec, csMat);
// Q = 1/4 * PI * Dj * Dj * V
nQ = nQ / 1000;
for(int j=0;j<lstSpec.Length();j++){
int iDnTmp = *lstSpec[j];
nRetDj = GetPipeDjByDn(csMat, iDnTmp);
nSpeed = nQ / (0.25*PI*nRetDj*nRetDj);
if(nRetDj < 0)
continue;
nI = 105 * (pow(nRetDj, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85)) / 10;
if(iDnTmp <= 20 && nSpeed <= 1)
return iDnTmp;
else if(iDnTmp <= 40 && iDnTmp > 20 && nSpeed <= 1.2)
return iDnTmp;
else if(iDnTmp < 80 && iDnTmp > 40 && nSpeed <= 1.5)
return iDnTmp;
else if(iDnTmp >= 80 && nSpeed <= 1.8)
return iDnTmp;
}
return nRet;
}
int GetPipeDnByQ2(double nQ, CString csMat, double &nI, double &nSpeed, double &nRetDe)
{
int nRet(-1);
CodeBase db;
XString fullFile;
if(!FindFile(_T("pipe.dbf"), fullFile)) {
AfxMessageBox(_T("对不起,没有发现pipe.dbf文件!"));
return nRet;
}
double nCh(0); // 海澄-威廉系数
if(csMat == _T("镀锌钢管") || csMat == _T("给水铸铁管") || csMat == _T("排水铸铁管") || csMat == _T("焊接钢管") || csMat == _T("无缝钢管"))
nCh = 100;
else
nCh = 140;
DList<int> lstSpec;
DList<double> lstSpecDj;
GetPipeSpecList(lstSpec, csMat);
XDbfTable *pTable = db.Open(fullFile);
if(!pTable)
return nRet;
CString csMaterial;
int iDn(0);
double nDj(0);
double nDj15(-1), nDj20(-1), nDj25(-1), nDj32(-1), nDj40(-1), nDj50(-1), nDj65(-1), nDj70(-1), nDj80(-1), nDj100(-1), nDj125(-1), nDj150(-1);
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
GET_FIELD(pTable, _T("GC"), csMaterial);
GET_FIELD(pTable, _T("DN"), iDn);
GET_FIELD(pTable, _T("DJ"), nDj);
nDj = nDj/1000;
if(_tcsicmp((const TCHAR*)csMaterial, (const TCHAR*)csMat) == 0 )
{
for(int j=0;j<lstSpec.Length();j++){
}
}
// if(_tcsicmp((const TCHAR*)xsMaterial, (const TCHAR*)csMat) == 0 )
// {
// if(iDn == 15)
// nDj15 = nDj;
// else if(iDn == 20)
// nDj20 = nDj;
// else if(iDn == 25)
// nDj25 = nDj;
// else if(iDn == 32)
// nDj32 = nDj;
// else if(iDn == 40)
// nDj40 = nDj;
// else if(iDn == 50)
// nDj50 = nDj;
// else if(iDn == 65)
// nDj65 = nDj;
// else if(iDn == 70)
// nDj70 = nDj;
// else if(iDn == 80)
// nDj80 = nDj;
// else if(iDn == 100)
// nDj100 = nDj;
// else if(iDn == 125)
// nDj125 = nDj;
// else if(iDn == 150)
// nDj150 = nDj;
// }
}
// Q = 1/4 * PI * Dj * Dj * V
nQ = nQ / 1000;
double nSpeed15 = nQ / (0.25*PI*nDj15*nDj15);
double nSpeed20 = nQ / (0.25*PI*nDj20*nDj20);
double nSpeed25 = nQ / (0.25*PI*nDj25*nDj25);
double nSpeed32 = nQ / (0.25*PI*nDj32*nDj32);
double nSpeed40 = nQ / (0.25*PI*nDj40*nDj40);
double nSpeed50 = nQ / (0.25*PI*nDj50*nDj50);
double nSpeed65 = nQ / (0.25*PI*nDj65*nDj65);
double nSpeed70 = nQ / (0.25*PI*nDj70*nDj70);
double nSpeed80 = nQ / (0.25*PI*nDj80*nDj80);
double nSpeed100 = nQ / (0.25*PI*nDj100*nDj100);
double nSpeed125 = nQ / (0.25*PI*nDj125*nDj125);
double nSpeed150 = nQ / (0.25*PI*nDj150*nDj150);
double nI15 = 105 * (pow(nDj15, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI20 = 105 * (pow(nDj20, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI25 = 105 * (pow(nDj25, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI32 = 105 * (pow(nDj32, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI40 = 105 * (pow(nDj40, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI50 = 105 * (pow(nDj50, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI65 = 105 * (pow(nDj65, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI70 = 105 * (pow(nDj70, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI80 = 105 * (pow(nDj80, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI100 = 105 * (pow(nDj100, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI125 = 105 * (pow(nDj125, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
double nI150 = 105 * (pow(nDj150, -4.87)) * (pow(nQ, 1.85)) * (pow(nCh, -1.85));
if(nSpeed15 <= 1 && nDj15 > 0){
nSpeed = nSpeed15;
nRetDe = nDj15;
nI = nI15/10;
return 15;
}
if(nSpeed20 <= 1 && nDj20 > 0){
nSpeed = nSpeed20;
nRetDe = nDj20;
nI = nI20/10;
return 20;
}
if(nSpeed25 <= 1.2 && nDj25 > 0){
nSpeed = nSpeed25;
nRetDe = nDj25;
nI = nI25/10;
return 25;
}
if(nSpeed32 <= 1.2 && nDj32 > 0){
nSpeed = nSpeed32;
nI = nI32/10;
nRetDe = nDj32;
return 32;
}
if(nSpeed40 <= 1.2 && nDj40 > 0){
nSpeed = nSpeed40;
nI = nI40/10;
nRetDe = nDj40;
return 40;
}
if(nSpeed50 <= 1.5 && nDj50 > 0){
nSpeed = nSpeed50;
nRetDe = nDj50;
nI = nI50/10;
return 50;
}
if(nSpeed65 <= 1.5 && nDj65 > 0){
nSpeed = nSpeed65;
nRetDe = nDj65;
nI = nI65/10;
return 65;
}
if(nSpeed70 <= 1.5 && nDj70 > 0){
nSpeed = nSpeed70;
nRetDe = nDj70;
nI = nI70/10;
return 70;
}
if(nSpeed80 <= 1.8 && nDj80 > 0){
nSpeed = nSpeed80;
nRetDe = nDj80;
nI = nI80/10;
return 80;
}
if(nSpeed100 <= 1.8 && nDj100 > 0){
nSpeed = nSpeed100;
nRetDe = nDj100;
nI = nI100/10;
return 100;
}
if(nSpeed125 <= 1.8 && nDj125 > 0){
nSpeed = nSpeed125;
nI = nI125/10;
nRetDe = nDj125;
return 125;
}
if(nSpeed150 <= 1.8 && nDj150 > 0){
nSpeed = nSpeed150;
nRetDe = nDj150;
nI = nI150/10;
return 150;
}
return nRet;
}
void CCalcFeedResidenceDlg::OnOK()
{
UpdateData(TRUE);
double nU0 = m_iRation * m_nNumPeople * m_nFactor / (0.2 * m_nNg * m_iNumHour * 3600);
m_csU0.Format(_T("U0 = %.4f"), nU0);
nU0 = nU0 * 100;
double nAc = GetValBetween2(0.01939, 0.02374, 3.0, 3.5, nU0);
if(nU0 <= 1)
nAc = 0.00323;
else if(nU0 > 1 && nU0 <= 1.5)
nAc = GetValBetween2(0.00323, 0.00697, 1.0, 1.5, nU0);
else if(nU0 > 1.5 && nU0 <= 2.0)
nAc = GetValBetween2(0.00697, 0.01097, 1.5, 2.0, nU0);
else if(nU0 > 2.0 && nU0 <= 2.5)
nAc = GetValBetween2(0.01097, 0.01512, 2.0, 2.5, nU0);
else if(nU0 > 2.5 && nU0 <= 3.0)
nAc = GetValBetween2(0.01512, 0.01939, 2.5, 3.0, nU0);
else if(nU0 > 3.0 && nU0 <= 3.5)
nAc = GetValBetween2(0.01939, 0.02374, 3.0, 3.5, nU0);
else if(nU0 > 3.5 && nU0 <= 4.0)
nAc = GetValBetween2(0.02374, 0.02816, 3.5, 4.0, nU0);
else if(nU0 > 4.0 && nU0 <= 4.5)
nAc = GetValBetween2(0.02816, 0.03263, 4.0, 4.5, nU0);
else if(nU0 > 4.5 && nU0 <= 5.0)
nAc = GetValBetween2(0.03263, 0.03715, 4.5, 5.0, nU0);
else if(nU0 > 5.0 && nU0 <= 6.0)
nAc = GetValBetween2(0.03715, 0.04629, 5.0, 6.0, nU0);
else if(nU0 > 6.0 && nU0 <= 7.0)
nAc = GetValBetween2(0.04629, 0.05555, 6.0, 7.0, nU0);
else if(nU0 > 7.0 && nU0 <= 8.0)
nAc = GetValBetween2(0.05555, 0.06489, 7.0, 8.0, nU0);
else if(nU0 > 8.0 )
nAc = 0.06489;
m_listCalc.DeleteAllItems();
CString csMat;
m_comboMat.GetLBText(m_iPipeMat, csMat);
for(int i=m_iNumFloor;i>0;i--){
CString csFloor, csAllNg, csU, csQ, csDn, csSpeed, csI, csDe;
csFloor.Format(_T("楼层%d"), i);
double nAllNg = m_nNg * m_iNumDoor * i;
double nU = (1 + nAc * pow((nAllNg -1), 0.49)) / sqrt(nAllNg);
csU.Format(_T("%.3f"), nU);
csAllNg.Format(_T("%.2f"), nAllNg);
csQ.Format(_T("%.2f"), 0.2*nU*nAllNg);
double nI(-1), nSpeed(-1), nDe(-1);
int iDn = GetPipeDnByQ(0.2*nU*nAllNg, csMat, nI, nSpeed, nDe);
csDn.Format(_T("DN%d"), iDn);
csSpeed.Format(_T("%.2f"), nSpeed);
csDe.Format(_T("%.1f"), nDe*1000);
csI.Format(_T("%.3f"), nI);
m_listCalc.InsertItem ( 0, csFloor, 0 );
m_listCalc.SetItemText ( 0, 1, csAllNg);
m_listCalc.SetItemText ( 0, 2, csU);
m_listCalc.SetItemText ( 0, 3, csQ);
m_listCalc.SetItemText ( 0, 4, csDn);
// m_listCalc.SetItemText ( 0, 5, csDe);
m_listCalc.SetItemText ( 0, 5, csSpeed);
m_listCalc.SetItemText ( 0, 6, csI);
}
m_csAc.Format(_T("αc = %.4f"), nAc);
UpdateData(FALSE);
}
void CCalcFeedResidenceDlg::OnButtonRation()
{
AfxMessageBox(_T("住宅最高日生活用水定额\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 85~150\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 130~300\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 180~320\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 200~350\n\n"));
}
void CCalcFeedResidenceDlg::OnButtonFactor()
{
AfxMessageBox(_T("住宅最高日生活用水小时变化系数Kh\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 3.0~2.5\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 2.8~2.3\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 2.5~2.0\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 2.3~1.8\n\n"));
}
void CCalcFeedResidenceDlg::OnButtonDang()
{
CTemporaryResourceOverride vTemp;
CSanitaryDangDlg dlg;
dlg.DoModal();
}
void CCalcFeedResidenceDlg::OnButtonWord()
{
//初始化
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR), vtTrue((short)TRUE), vtFalse((short)FALSE);
_Application wordApplication;
Documents wordDocuments;
_Document activeDocument;
Paragraphs wordParagraphs;
Selection wordSelection;
if (!wordApplication.CreateDispatch(_T("Word.Application")))
{
AfxMessageBox(_T("不能执行Microsoft Word 8.0!"));
return;
}
UpdateData(TRUE);
double nU0 = m_iRation * m_nNumPeople * m_nFactor / (0.2 * m_nNg * m_iNumHour * 3600);
m_csU0.Format(_T("U0 = %.4f"), nU0);
nU0 = nU0 * 100;
double nAc = GetValBetween2(0.01939, 0.02374, 3.0, 3.5, nU0);
if(nU0 <= 1)
nAc = 0.00323;
else if(nU0 > 1 && nU0 <= 1.5)
nAc = GetValBetween2(0.00323, 0.00697, 1.0, 1.5, nU0);
else if(nU0 > 1.5 && nU0 <= 2.0)
nAc = GetValBetween2(0.00697, 0.01097, 1.5, 2.0, nU0);
else if(nU0 > 2.0 && nU0 <= 2.5)
nAc = GetValBetween2(0.01097, 0.01512, 2.0, 2.5, nU0);
else if(nU0 > 2.5 && nU0 <= 3.0)
nAc = GetValBetween2(0.01512, 0.01939, 2.5, 3.0, nU0);
else if(nU0 > 3.0 && nU0 <= 3.5)
nAc = GetValBetween2(0.01939, 0.02374, 3.0, 3.5, nU0);
else if(nU0 > 3.5 && nU0 <= 4.0)
nAc = GetValBetween2(0.02374, 0.02816, 3.5, 4.0, nU0);
else if(nU0 > 4.0 && nU0 <= 4.5)
nAc = GetValBetween2(0.02816, 0.03263, 4.0, 4.5, nU0);
else if(nU0 > 4.5 && nU0 <= 5.0)
nAc = GetValBetween2(0.03263, 0.03715, 4.5, 5.0, nU0);
else if(nU0 > 5.0 && nU0 <= 6.0)
nAc = GetValBetween2(0.03715, 0.04629, 5.0, 6.0, nU0);
else if(nU0 > 6.0 && nU0 <= 7.0)
nAc = GetValBetween2(0.04629, 0.05555, 6.0, 7.0, nU0);
else if(nU0 > 7.0 && nU0 <= 8.0)
nAc = GetValBetween2(0.05555, 0.06489, 7.0, 8.0, nU0);
else if(nU0 > 8.0 )
nAc = 0.06489;
wordApplication.SetVisible(TRUE);
wordDocuments = wordApplication.GetDocuments();
activeDocument = wordDocuments.Add(vtOptional,vtOptional);
//写一行字
wordSelection = wordApplication.GetSelection();
wordParagraphs = wordSelection.GetParagraphs();
wordParagraphs.SetAlignment(0); // 0: 居左 1:居中 2:居右
wordSelection.TypeText(_T("按照建筑给水排水设计规范 (GB 50015-2003)进行计算 \n"));
wordSelection.TypeText(_T("计算公式: \n"));
wordSelection.TypeText((const TCHAR*)XString(_T("1:计算U0 = (q0*m*Kh)/(0.2*Ng*T*3600) = %.4f \n"), nU0));
wordSelection.TypeText((const TCHAR*)XString(_T("αc = %.4f 对应于不同U0的系数 \n"), nAc));
wordSelection.TypeText(_T("式中: \n"));
wordSelection.TypeText(_T("U0 -- 生活给水管道的最大用水时卫生器具给水当量平均出流概率(%) \n"));
wordSelection.TypeText((const TCHAR*)XString(_T("q0-- 最高用水日的用水定额 = %d \n"), m_iRation));
wordSelection.TypeText((const TCHAR*)XString(_T("m-- 每户用水人数 = %.0f \n"), m_nNumPeople));
wordSelection.TypeText((const TCHAR*)XString(_T("Kh-- 小时变化系数 = %.1f \n"), m_nFactor));
wordSelection.TypeText((const TCHAR*)XString(_T("Ng-- 每户设置的卫生器具给水当量数 = %.2f\n"), m_nNg));
wordSelection.TypeText((const TCHAR*)XString(_T("T-- 用水时数(h)= %d \n"), m_iNumHour));
wordSelection.TypeText(_T("0.2-- 一个卫生器具给水当量的额定流量(L/s) \n\n"));
wordSelection.TypeText(_T("2:计算U = (1 + αc * pow((Ng - 1), 0.49)) / SQRT(Ng) \n"));
wordSelection.TypeText(_T("式中: \n"));
wordSelection.TypeText(_T("U--计算管段的卫生器具给水当量同时出流概率(%) \n"));
wordSelection.TypeText(_T("αc对应于不同U0的系数 \n"));
wordSelection.TypeText(_T("Ng--计算管段的卫生器具给水当量总数 \n\n"));
wordSelection.TypeText(_T("3:计算管段的设计秒流量Qg = 0.2*U*Ng \n\n"));
wordSelection.TypeText(_T("各楼层计算结果如下 \n"));
CString csMat;
m_comboMat.GetLBText(m_iPipeMat, csMat);
wordSelection.TypeText((const TCHAR*)XString(_T("管材:%s\n\n"), csMat));
//画表格
int rows(m_iNumFloor+1), columns(7);
Selection wSelection = wordApplication.GetSelection();
Range oRange = wSelection.GetRange();
Tables oTables = activeDocument.GetTables();
_Table oTable = oTables.Add(oRange, rows, columns);
// cet 2010.3.25 add
Borders oBorders = oTable.GetBorders();
oBorders.SetInsideLineStyle(1); // 设置表格线型
oBorders.SetOutsideLineStyle(1);
Columns oColumns;
Column oColumn;
oColumns = oTable.GetColumns();
oColumn = oColumns.Item(1);
oColumn.SetWidth(45, 0); // 0 = wdAdjustNone
oColumn = oColumns.Item(2);
oColumn.SetWidth(70, 0);
oColumn = oColumns.Item(3);
oColumn.SetWidth(90, 0);
oColumn = oColumns.Item(4);
oColumn.SetWidth(60, 0);
oColumn = oColumns.Item(5);
oColumn.SetWidth(40, 0);
oColumn = oColumns.Item(6);
oColumn.SetWidth(65, 0);
oColumn = oColumns.Item(7);
oColumn.SetWidth(85, 0);
Cell oCell;
oCell = oTable.Cell(1, 1);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("楼层"));
oCell = oTable.Cell(1, 2);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("总当量∑Ng"));
oCell = oTable.Cell(1, 3);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("同时出流概率U"));
oCell = oTable.Cell(1, 4);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("流量(l/s)"));
oCell = oTable.Cell(1, 5);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("管径"));
oCell = oTable.Cell(1, 6);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("流速v(m/s)"));
oCell = oTable.Cell(1, 7);
oRange = oCell.GetRange();
oRange.InsertAfter(_T("水力坡降i(m/m)"));
for(int i=1;i<=m_iNumFloor;i++){
CString csFloor, csAllNg, csU, csQ, csDn, csSpeed, csI, csDe;
csFloor.Format(_T("楼层%d"), i);
double nAllNg = m_nNg * m_iNumDoor * i;
double nU = (1 + nAc * pow((nAllNg -1), 0.49)) / sqrt(nAllNg);
csU.Format(_T("%.3f"), nU);
csAllNg.Format(_T("%.2f"), nAllNg);
csQ.Format(_T("%.2f"), 0.2*nU*nAllNg);
double nI(-1), nSpeed(-1), nDe(-1);
int iDn = GetPipeDnByQ(0.2*nU*nAllNg, csMat, nI, nSpeed, nDe);
csDn.Format(_T("DN%d"), iDn);
csSpeed.Format(_T("%.2f"), nSpeed);
csDe.Format(_T("%.1f"), nDe*1000);
csI.Format(_T("%.3f"), nI);
oCell = oTable.Cell(i+1, 1); //楼层
oRange = oCell.GetRange();
oRange.InsertAfter(csFloor);
oCell = oTable.Cell(i+1, 2); //总当量
oRange = oCell.GetRange();
oRange.InsertAfter(csAllNg);
oCell = oTable.Cell(i+1, 3); //
oRange = oCell.GetRange();
oRange.InsertAfter(csU);
oCell = oTable.Cell(i+1, 4); //
oRange = oCell.GetRange();
oRange.InsertAfter(csQ);
oCell = oTable.Cell(i+1, 5); //
oRange = oCell.GetRange();
oRange.InsertAfter(csDn);
oCell = oTable.Cell(i+1, 6); //
oRange = oCell.GetRange();
oRange.InsertAfter(csSpeed);
oCell = oTable.Cell(i+1, 7); //
oRange = oCell.GetRange();
oRange.InsertAfter(csI);
// m_listCalc.InsertItem ( 0, csFloor, 0 );
// m_listCalc.SetItemText ( 0, 1, csAllNg);
// m_listCalc.SetItemText ( 0, 2, csU);
// m_listCalc.SetItemText ( 0, 3, csQ);
// m_listCalc.SetItemText ( 0, 4, csDn);
// m_listCalc.SetItemText ( 0, 5, csDe);
// m_listCalc.SetItemText ( 0, 6, csSpeed);
// m_listCalc.SetItemText ( 0, 7, csI);
}
}