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

📄 heartdmview.cpp

📁 一个含有朴素贝耶斯分类方法和决策树分类方法的源代码
💻 CPP
字号:
// HeartDMView.cpp : implementation of the CHeartDMView class
//

#include "stdafx.h"
#include "HeartDM.h"

#include "HeartDMDoc.h"
#include "HeartDMView.h"

#include "UserRecordSet.h"
#include "MainFrm.h"

#include "PrepareRecordSet.h"
#include "PrepareData.h"

#include "UserInputDlg.h"
#include "Baye.h"

#include "Tree.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHeartDMView

IMPLEMENT_DYNCREATE(CHeartDMView, CListView)

BEGIN_MESSAGE_MAP(CHeartDMView, CListView)
	//{{AFX_MSG_MAP(CHeartDMView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHeartDMView construction/destruction
class CPrepareData;
CHeartDMView::CHeartDMView()
{
	// TODO: add construction code here
	lpBuffer=NULL;
	nFileLength=0;

}

CHeartDMView::~CHeartDMView()
{
	delete []lpBuffer;
}

BOOL CHeartDMView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style|=LVS_REPORT|LVS_SINGLESEL;
	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CHeartDMView drawing

void CHeartDMView::OnDraw(CDC* pDC)
{
	CHeartDMDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CHeartDMView::OnInitialUpdate()
{
	CListCtrl *ctl;
	ctl=&GetListCtrl();
	ctl->InsertColumn(0,"id",LVCFMT_LEFT,50);
	ctl->InsertColumn(1,"age",LVCFMT_LEFT,50);
	ctl->InsertColumn(2,"sex",LVCFMT_LEFT,50);
	ctl->InsertColumn(3,"cpt",LVCFMT_LEFT,50);
	ctl->InsertColumn(4,"rbp",LVCFMT_LEFT,50);
	ctl->InsertColumn(5,"sci",LVCFMT_LEFT,50);
	ctl->InsertColumn(6,"fbu",LVCFMT_LEFT,50);
	ctl->InsertColumn(7,"rer",LVCFMT_LEFT,50);
	ctl->InsertColumn(8,"mhra",LVCFMT_LEFT,50);
	ctl->InsertColumn(9,"eia",LVCFMT_LEFT,50);
	ctl->InsertColumn(10,"op",LVCFMT_LEFT,50);
	ctl->InsertColumn(11,"sope",LVCFMT_LEFT,50);
	ctl->InsertColumn(12,"nomv",LVCFMT_LEFT,50);
	ctl->InsertColumn(13,"thal",LVCFMT_LEFT,50);
	ctl->InsertColumn(14,"y/n",LVCFMT_LEFT,50);

	CMainFrame* m_Frm=(CMainFrame*)::AfxGetMainWnd();
	m_Frm->m_ListView=this;

	CListView::OnInitialUpdate();


	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
}

/////////////////////////////////////////////////////////////////////////////
// CHeartDMView printing

BOOL CHeartDMView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CHeartDMView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CHeartDMView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CHeartDMView diagnostics

#ifdef _DEBUG
void CHeartDMView::AssertValid() const
{
	CListView::AssertValid();
}

void CHeartDMView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CHeartDMDoc* CHeartDMView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHeartDMDoc)));
	return (CHeartDMDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHeartDMView message handlers

//显示表记录
void CHeartDMView::ListUser()
{
	RemoveAll();
	CListCtrl* ctl;
	ctl=&GetListCtrl();
	//创建CUserRecordSet的实例
	CUserRecordSet m_UserRecordSet;
	//记录用户序号
	int i=0;
	CString strTemp;
	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();

		m_UserRecordSet.Open(CRecordset::snapshot,_T("select * from heart"));
		//输出所有用户记录,直到记录为空
		while(!m_UserRecordSet.IsEOF())
		{
			//将RID从整型转化为CString,	以便输出
			strTemp.Format("%d",m_UserRecordSet.m_id);
			//设置ListCtrl记录的Item值
			ctl->InsertItem(i,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_age);
			ctl->SetItemText(i,1,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_sex);
			ctl->SetItemText(i,2,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_cpt);
			ctl->SetItemText(i,3,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_rbp);
			ctl->SetItemText(i,4,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_sci);
			ctl->SetItemText(i,5,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_fbu);
			ctl->SetItemText(i,6,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_rer);
			ctl->SetItemText(i,7,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_mhra);
			ctl->SetItemText(i,8,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_eia);
			ctl->SetItemText(i,9,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_op);
			ctl->SetItemText(i,10,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_sope);
			ctl->SetItemText(i,11,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_nomv);
			ctl->SetItemText(i,12,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_thal);
			ctl->SetItemText(i,13,strTemp);
			strTemp.Format("%d",m_UserRecordSet.m_y_n);
			ctl->SetItemText(i,14,strTemp);

			m_UserRecordSet.MoveNext();
			i++;
		}
		//关闭记录集
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
	}
	//意外捕获
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
}

//从文本文件中导入数据到lpBuffer中
void CHeartDMView::OnFileImport()
{
	CFile cf("heart.txt",CFile::modeRead);
	nFileLength=cf.GetLength();
	lpBuffer=new char[nFileLength+1];
	try{
		cf.Read(lpBuffer,nFileLength);
	}
	catch(CFileException* e){
		e->ReportError();
		delete []lpBuffer;
		return;
	}
	lpBuffer[nFileLength]=0;
}

//分行往数据库中添加数据
void CHeartDMView::InDatabase()
{
	OnFileImport();
	int i=0;
	int n=0;


	CString s[14]={"","","","","","","","","","","","","",""};
	while(i<nFileLength)
	{
		if(lpBuffer[i]=='\n')
		{
			UserAdd(s);
			for(int j=0;j<14;j++)
			{
				s[j]="";
			}
			i++;
			n=0;
			continue;
		}
		if(lpBuffer[i]==' ')
		{
			i++;
			n++;
			continue;
		}

		s[n]+=lpBuffer[i];
		i++;

	}
	UserAdd(s);

}

//把一行数据加入数据库中
void CHeartDMView::UserAdd(CString s[])
{
	CUserRecordSet m_UserRecordSet;

	char *p[14];
	int i;
	int j;
	for(i=0;i<14;i++)
	{
		p[i]=new char[20];
	}
	for(i=0;i<14;i++)
	{
		for(j=0;j<s[i].GetLength();j++)
		{
			p[i][j]=s[i].GetAt(j);
		}
		p[i][j+1]='\0';
	}

	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
		m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
		m_UserRecordSet.AddNew();
		m_UserRecordSet.m_age=(float)atof(p[0]);
		m_UserRecordSet.m_sex=(float)atof(p[1]);
		m_UserRecordSet.m_cpt=(float)atof(p[2]);
		m_UserRecordSet.m_rbp=(float)atof(p[3]);
		m_UserRecordSet.m_sci=(float)atof(p[4]);
		m_UserRecordSet.m_fbu=(float)atof(p[5]);
		m_UserRecordSet.m_rer=(float)atof(p[6]);
		m_UserRecordSet.m_mhra=(float)atof(p[7]);
		m_UserRecordSet.m_eia=(float)atof(p[8]);
		m_UserRecordSet.m_op=(float)atof(p[9]);
		m_UserRecordSet.m_sope=(float)atof(p[10]);
		m_UserRecordSet.m_nomv=(float)atof(p[11]);
		m_UserRecordSet.m_thal=(float)atof(p[12]);
		m_UserRecordSet.m_y_n=atoi(p[13]);
		if(m_UserRecordSet.CanAppend())
		{
			m_UserRecordSet.Update();
		}
	
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
	}
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
	for(i=0;i<14;i++)
	{
		delete [](p[i]);
	}


}

//删除表heart中的所有记录
void CHeartDMView::UserDelete()
{
	CUserRecordSet m_UserRecordSet;
	
	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
		m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
		while(m_UserRecordSet.IsOpen()&&!m_UserRecordSet.IsEOF())
		{
			m_UserRecordSet.Delete();
			m_UserRecordSet.MoveNext();
		}
		AfxMessageBox("删除成功!");
		if(m_UserRecordSet.IsOpen())
			
			m_UserRecordSet.Close();

	}
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
}

//清除用户视图中的内容
void CHeartDMView::RemoveAll()
{
	CListCtrl *ctl;
	ctl=&GetListCtrl();
	ctl->DeleteAllItems();

}

//显示预处理后表pheart中的记录
void CHeartDMView::ListPrepareRecord()
{
	RemoveAll();
	CListCtrl* ctl;
	ctl=&GetListCtrl();
	//创建CUserRecordSet的实例
	CPrepareRecordSet m_UserRecordSet;
	//记录用户序号
	int i=0;
	CString strTemp;
	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();

		m_UserRecordSet.Open(CRecordset::snapshot,_T("select * from pheart"));
		//输出所有用户记录,直到记录为空
		while(!m_UserRecordSet.IsEOF())
		{
			//将RID从整型转化为CString,	以便输出
			strTemp.Format("%d",m_UserRecordSet.m_pid);
			//设置ListCtrl记录的Item值
			ctl->InsertItem(i,strTemp);
//			strTemp.Format("%f",m_UserRecordSet.m_page);
			ctl->SetItemText(i,1,m_UserRecordSet.m_page);
			strTemp.Format("%f",m_UserRecordSet.m_psex);
			ctl->SetItemText(i,2,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_pcpt);
			ctl->SetItemText(i,3,strTemp);
//			strTemp.Format("%f",m_UserRecordSet.m_prbp);
			ctl->SetItemText(i,4,m_UserRecordSet.m_prbp);
//			strTemp.Format("%f",m_UserRecordSet.m_psci);
			ctl->SetItemText(i,5,m_UserRecordSet.m_psci);
			strTemp.Format("%f",m_UserRecordSet.m_pfbu);
			ctl->SetItemText(i,6,strTemp);
			strTemp.Format("%f",m_UserRecordSet.m_prer);
			ctl->SetItemText(i,7,strTemp);
//			strTemp.Format("%f",m_UserRecordSet.m_pmhra);
			ctl->SetItemText(i,8,m_UserRecordSet.m_pmhra);
			strTemp.Format("%f",m_UserRecordSet.m_peia);
			ctl->SetItemText(i,9,strTemp);
//			strTemp.Format("%f",m_UserRecordSet.m_pop);
			ctl->SetItemText(i,10,m_UserRecordSet.m_pop);
//			strTemp.Format("%f",m_UserRecordSet.m_psope);
			ctl->SetItemText(i,11,m_UserRecordSet.m_psope);
//			strTemp.Format("%f",m_UserRecordSet.m_pnomv);
			ctl->SetItemText(i,12,m_UserRecordSet.m_pnomv);
			strTemp.Format("%f",m_UserRecordSet.m_pthal);
			ctl->SetItemText(i,13,strTemp);
			strTemp.Format("%d",m_UserRecordSet.m_py_n);
			ctl->SetItemText(i,14,strTemp);

			m_UserRecordSet.MoveNext();
			i++;
		}
		//关闭记录集
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
	}
	//意外捕获
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
}

//删除表pheart中的所有记录
void CHeartDMView::PrepareDataDel()
{
	CPrepareRecordSet m_UserRecordSet;
	
	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
		m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
		while(m_UserRecordSet.IsOpen()&&!m_UserRecordSet.IsEOF())
		{
			m_UserRecordSet.Delete();
			m_UserRecordSet.MoveNext();
		}
		AfxMessageBox("删除成功!");
		if(m_UserRecordSet.IsOpen())
			
			m_UserRecordSet.Close();

	}
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
}

//对数据进行预处理
void CHeartDMView::PrepareData()
{
	CPrepareData m_PrepareData;
	m_PrepareData.PrepareData();
}

//输入数据
void CHeartDMView::InputData()
{
	UserInputDlg m_InputData;
	if(m_InputData.DoModal()!=IDOK)
	{
		return;
	}
	bayesian.DoLayer(m_InputData.m_PAge,m_InputData.m_PSex,m_InputData.m_PCPT,m_InputData.m_PRBP,m_InputData.m_PSCI,m_InputData.m_PFBU,m_InputData.m_PRER,m_InputData.m_PMHRA,m_InputData.m_PEIA,m_InputData.m_POP,m_InputData.m_PSOPE,m_InputData.m_PNOMV,m_InputData.m_PTHAL);
	C5tree.addValue(m_InputData.m_PAge,m_InputData.m_PSex,m_InputData.m_PCPT,m_InputData.m_PRBP,m_InputData.m_PSCI,m_InputData.m_PFBU,m_InputData.m_PRER,m_InputData.m_PMHRA,m_InputData.m_PEIA,m_InputData.m_POP,m_InputData.m_PSOPE,m_InputData.m_PNOMV,m_InputData.m_PTHAL);


	
}

void CHeartDMView::BayesianClass()
{
	int y_n;
	CString str="是否心脏病患者:";
	y_n=bayesian.DoBayesianClass();
 
	if(y_n==1)
	{
		str+="是";
	}
	else if(y_n==2)
	{
		str+="不是";
	}
	else if(y_n==-1) 
	{
		str+="难以确定";
	}
	CString s;
	s.Format("%f",bayesian.accurate);
	str+="\n准确率:";
	str+=s;

	AfxMessageBox(str);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -