📄 resultpage.cpp
字号:
// ResultPage.cpp : implementation file
//
#include "stdafx.h"
#include "智能岩土工程.h"
#include "ResultPage.h"
#include "BPSheet.h"
#include "fstream.h"
#include "io.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CResultPage property page
IMPLEMENT_DYNCREATE(CResultPage, CPropertyPage)
CResultPage::CResultPage() : CPropertyPage(CResultPage::IDD)
{
//{{AFX_DATA_INIT(CResultPage)
m = 0;
n = 0;
m_Error = 0.0;
Data = NULL;
Result = NULL;
//}}AFX_DATA_INIT
}
CResultPage::~CResultPage()
{
if (Data != NULL)
{
for (int ii=0; ii<m; ii++)
{
delete []Data[ii];
Data[ii] = NULL;
}
delete []Data;
Data = NULL;
}
if (Result != NULL)
{
for (int ii=0; ii<m; ii++)
{
delete []Result[ii];
Result[ii] = NULL;
}
delete []Result;
Result = NULL;
}
}
void CResultPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CResultPage)
DDX_Control(pDX, IDC_LIST, m_DataList);
DDX_Text(pDX, IDC_ERROR, m_Error);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CResultPage, CPropertyPage)
//{{AFX_MSG_MAP(CResultPage)
ON_BN_CLICKED(IDC_DATA, OnData)
ON_BN_CLICKED(IDC_COUNT, OnCount)
ON_BN_CLICKED(IDC_SAVE, OnSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CResultPage message handlers
void CResultPage::OnData()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CBPSheet* MyBPSheet;
MyBPSheet = (CBPSheet*)this->GetParent();
n = MyBPSheet->m_Modle.m_InputNum;
q = MyBPSheet->m_Modle.m_OutputNum;
//删除原有记录
if(m_DataList.GetItemCount()!=0)
m_DataList.DeleteAllItems();
for(int ii=n+q; ii>=0; ii--)
m_DataList.DeleteColumn(ii);
CFileDialog FileDlg(TRUE, "txt", "Data.txt", OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,
"文本文件(*.txt)|*.txt||");
FileDlg.m_ofn.lpstrTitle = "打开";
FileDlg.m_ofn.lpstrInitialDir = "";//"C:\\Documents and Settings\\Administrator\\桌面";
if(FileDlg.DoModal()!=IDOK)
{
return;
}
CString strFileName;
strFileName = FileDlg.m_ofn.lpstrFile;
ifstream myfile;
myfile.open(strFileName, ios::in | ios::nocreate);
if (myfile.fail())
{
return ;
}
//delete原有new的空间 再分配空间
if (Data != NULL)
{
for (int ii=0; ii<m; ii++)
{
delete []Data[ii];
Data[ii] = NULL;
}
delete []Data;
Data = NULL;
}
if (Result != NULL)
{
for (int ii=0; ii<m; ii++)
{
delete []Result[ii];
Result[ii] = NULL;
}
delete []Result;
Result = NULL;
}
//先分配地址再读取得数据(输入层和输出层的数据)
myfile>>m;//先读取源数据个数
Data = new double *[m];
for(ii=0; ii<m; ii++)
{
Data[ii] = new double[n];
}
Result = new double *[m];
for(ii=0; ii<m; ii++)
{
Result[ii] = new double[q];
}
for (ii=0; ii<m; ii++)
{
for (int jj=0; jj<n; jj++)
{
myfile>>Data[ii][jj];
}
}
myfile.close();
//写入界面
LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
lvColumn.fmt = LVCFMT_LEFT;
lvColumn.cx = 100;
for(ii=0; ii<=n+q; ii++)
{
if(ii==0)
{
lvColumn.iSubItem = ii;
lvColumn.pszText = "源数据";
m_DataList.InsertColumn(0,&lvColumn);
}
else
{
if(ii<=n)
{
lvColumn.iSubItem = ii;
lvColumn.pszText = "输入分量";
m_DataList.InsertColumn(ii,&lvColumn);
}
else
{
lvColumn.iSubItem = ii;
lvColumn.pszText = "预测分量";
m_DataList.InsertColumn(ii,&lvColumn);
}
}
}
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT;
lvItem.iSubItem = 0;
for(ii=0; ii<m; ii++)
{
lvItem.iItem = ii;
CString str;
str.Format("%d", ii+1);
m_DataList.InsertItem(ii,str);
for(int jj=1; jj<=n; jj++)
{
CString strData;
strData.Format("%f",Data[ii][jj-1]);
m_DataList.SetItemText(ii,jj,strData);
};
}
}
void CResultPage::OnCount()
{
// TODO: Add your control notification handler code here
CBPSheet* MyBPSheet;
MyBPSheet = (CBPSheet*)this->GetParent();
if(MyBPSheet->m_Study.W==NULL)
return ;
for(int ii=0; ii<m; ii++)
{
for(int jj=0; jj<n; jj++)
MyBPSheet->m_Study.A[jj] = Data[ii][jj];
MyBPSheet->m_Study.GetS();
MyBPSheet->m_Study.GetB();
MyBPSheet->m_Study.GetL();
MyBPSheet->m_Study.GetC();
for(jj=0; jj<q; jj++)
Result[ii][jj] = MyBPSheet->m_Study.C[jj];
}
for(ii=0; ii<m; ii++)
m_Error = MyBPSheet->m_Study.Error[ii];
ShowResult();
UpdateData(FALSE);
}
void CResultPage::ShowResult()
{
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT;
lvItem.iSubItem = 0;
for(int ii=0; ii<m; ii++)
{
for(int jj=0; jj<=q; jj++)
{
CString strData;
strData.Format("%f",Result[ii][jj]);
m_DataList.SetItemText(ii,jj+n+1,strData);
};
}
}
void CResultPage::OnSave()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CBPSheet* MyBPSheet;
MyBPSheet = (CBPSheet*)this->GetParent();
n = MyBPSheet->m_Modle.m_InputNum;
q = MyBPSheet->m_Modle.m_OutputNum;
CFileDialog FileDlg(FALSE, "xls", "Result.xls", OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,
"Microsoft Excle 工作表(*.xls)|*.xls||",this);
FileDlg.m_ofn.lpstrTitle = "另存为";
FileDlg.m_ofn.lpstrInitialDir = "";//"C:\\Documents and Settings\\Administrator\\桌面";
if(FileDlg.DoModal()!=IDOK)
{
return;
}
CString strFileName;
strFileName = FileDlg.m_ofn.lpstrFile;
if(!access(strFileName,0))
{
if(MessageBox("该文件已存在,是否要替换它!","提示",1)!=IDOK)
{
MessageBox(" 保 存 失 败! ","提示");
return ;
}
}
ofstream myfile;
myfile.open(strFileName,ios::out);
if (myfile.fail())
{
return ;
}
//输入数据
for(int ii=0; ii<=n+q; ii++)
{
if(ii==0)
myfile<<"编号"<<" ";
else
{
if(ii<=n)
myfile<<ii<<" ";
else
{
myfile<<"输出分量"<<" ";
if(ii==n+q)
myfile<<"\n";
}
}
}
for (ii=0; ii<m; ii++)
{
for (int jj=0; jj<=n+q; jj++)
{
if(jj<=n)
{
if(jj==0)
myfile<<ii+1<<" ";
else
myfile<<Data[ii][jj-1]<<" ";
}
else
{
myfile<<Result[ii][jj-n-1]<<" ";
if(jj==n+q)
myfile<<"\n";
}
}
}
myfile.close();
MessageBox(" 保 存 成 功! ","提示");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -