⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resultpage.cpp

📁 bp神经网络应用程序
💻 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 + -