Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtCalc/CalcFeedResidenceDlg.cpp
T

652 lines
23 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
// CalcFeedResidenceDlg.cpp : implementation file
2026-09-28 15:28:50 +08:00
//
#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)) {
2026-10-04 00:04:20 +08:00
// AfxMessageBox(_T("对不起,没有发现pipe.dbf文件!"));
2026-09-28 15:28:50 +08:00
// 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]);
}
2026-10-04 00:04:20 +08:00
m_listCalc.InsertColumn ( 0, _T("楼层"), LVCFMT_CENTER, 60 );
m_listCalc.InsertColumn ( 1, _T("∑Ng"), LVCFMT_CENTER, 60 );
2026-09-28 15:28:50 +08:00
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 );
2026-10-04 00:04:20 +08:00
// m_listCalc.InsertColumn ( 5, _T("内径(mm)"), LVCFMT_CENTER, 60 );
2026-09-28 15:28:50 +08:00
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)) {
2026-10-04 00:04:20 +08:00
// AfxMessageBox(_T("对不起,没有发现pipe.dbf文件!"));
2026-09-28 15:28:50 +08:00
// 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);
2026-10-04 00:04:20 +08:00
double nCh(0); // 海澄-威廉系数
if(csMat == _T("镀锌钢管") || csMat == _T("给水铸铁管") || csMat == _T("排水铸铁管") || csMat == _T("焊接钢管") || csMat == _T("无缝钢管"))
2026-09-28 15:28:50 +08:00
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)) {
2026-10-04 00:04:20 +08:00
AfxMessageBox(_T("对不起,没有发现pipe.dbf文件!"));
2026-09-28 15:28:50 +08:00
return nRet;
}
2026-10-04 00:04:20 +08:00
double nCh(0); // 海澄-威廉系数
if(csMat == _T("镀锌钢管") || csMat == _T("给水铸铁管") || csMat == _T("排水铸铁管") || csMat == _T("焊接钢管") || csMat == _T("无缝钢管"))
2026-09-28 15:28:50 +08:00
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;
2026-10-04 00:04:20 +08:00
csFloor.Format(_T("楼层%d"), i);
2026-09-28 15:28:50 +08:00
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);
}
2026-10-04 00:04:20 +08:00
m_csAc.Format(_T("αc = %.4f"), nAc);
2026-09-28 15:28:50 +08:00
UpdateData(FALSE);
}
void CCalcFeedResidenceDlg::OnButtonRation()
{
2026-10-04 00:04:20 +08:00
AfxMessageBox(_T("住宅最高日生活用水定额\n\n1.普通住宅Ⅰ (有大便器、洗涤盆) 85~150\n2.普通住宅Ⅱ(有大便器、洗脸盆、洗涤盆、洗衣机、 热水器和沐浴设备) 130~300\n3.普通住宅Ⅲ(有大便器、洗脸盆、洗涤盆、洗衣机、 集中热水供应和沐浴设备) 180~320\n4.别墅 (有大便器、洗脸盆、洗涤盆、洗衣机、洒水栓,家用热水机组和沐浴设备) 200~350\n\n"));
2026-09-28 15:28:50 +08:00
}
void CCalcFeedResidenceDlg::OnButtonFactor()
{
2026-10-04 00:04:20 +08:00
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"));
2026-09-28 15:28:50 +08:00
}
void CCalcFeedResidenceDlg::OnButtonDang()
{
CTemporaryResourceOverride vTemp;
CSanitaryDangDlg dlg;
dlg.DoModal();
}
void CCalcFeedResidenceDlg::OnButtonWord()
{
2026-10-04 00:04:20 +08:00
//初始化
2026-09-28 15:28:50 +08:00
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")))
{
2026-10-04 00:04:20 +08:00
AfxMessageBox(_T("不能执行Microsoft Word 8.0!"));
2026-09-28 15:28:50 +08:00
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);
2026-10-04 00:04:20 +08:00
//写一行字
2026-09-28 15:28:50 +08:00
wordSelection = wordApplication.GetSelection();
wordParagraphs = wordSelection.GetParagraphs();
2026-10-04 00:04:20 +08:00
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"));
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
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"));
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
wordSelection.TypeText(_T("3:计算管段的设计秒流量Qg = 0.2*U*Ng \n\n"));
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
wordSelection.TypeText(_T("各楼层计算结果如下 \n"));
2026-09-28 15:28:50 +08:00
CString csMat;
m_comboMat.GetLBText(m_iPipeMat, csMat);
2026-10-04 00:04:20 +08:00
wordSelection.TypeText((const TCHAR*)XString(_T("管材:%s\n\n"), csMat));
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
//画表格
2026-09-28 15:28:50 +08:00
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();
2026-10-04 00:04:20 +08:00
oBorders.SetInsideLineStyle(1); // 设置表格线型
2026-09-28 15:28:50 +08:00
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();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("楼层"));
2026-09-28 15:28:50 +08:00
oCell = oTable.Cell(1, 2);
oRange = oCell.GetRange();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("总当量∑Ng"));
2026-09-28 15:28:50 +08:00
oCell = oTable.Cell(1, 3);
oRange = oCell.GetRange();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("同时出流概率U"));
2026-09-28 15:28:50 +08:00
oCell = oTable.Cell(1, 4);
oRange = oCell.GetRange();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("流量(l/s)"));
2026-09-28 15:28:50 +08:00
oCell = oTable.Cell(1, 5);
oRange = oCell.GetRange();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("管径"));
2026-09-28 15:28:50 +08:00
oCell = oTable.Cell(1, 6);
oRange = oCell.GetRange();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("流速v(m/s)"));
2026-09-28 15:28:50 +08:00
oCell = oTable.Cell(1, 7);
oRange = oCell.GetRange();
2026-10-04 00:04:20 +08:00
oRange.InsertAfter(_T("水力坡降i(m/m)"));
2026-09-28 15:28:50 +08:00
for(int i=1;i<=m_iNumFloor;i++){
CString csFloor, csAllNg, csU, csQ, csDn, csSpeed, csI, csDe;
2026-10-04 00:04:20 +08:00
csFloor.Format(_T("楼层%d"), i);
2026-09-28 15:28:50 +08:00
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);
2026-10-04 00:04:20 +08:00
oCell = oTable.Cell(i+1, 1); //楼层
2026-09-28 15:28:50 +08:00
oRange = oCell.GetRange();
oRange.InsertAfter(csFloor);
2026-10-04 00:04:20 +08:00
oCell = oTable.Cell(i+1, 2); //总当量
2026-09-28 15:28:50 +08:00
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);
}
}