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

📄 program79view.cpp

📁 设计一个完整的通讯录应用程序
💻 CPP
字号:
// program79View.cpp : implementation of the CProgram79View class
//

#include "stdafx.h"
#include "program79.h"

#include "program79Doc.h"
#include "program79View.h"
#include "addrlist.h"

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

/////////////////////////////////////////////////////////////////////////////
// CProgram79View

IMPLEMENT_DYNCREATE(CProgram79View, CFormView)

BEGIN_MESSAGE_MAP(CProgram79View, CFormView)
	//{{AFX_MSG_MAP(CProgram79View)
	ON_BN_CLICKED(IDC_BUTADD, OnButadd)
	ON_BN_CLICKED(IDC_BUTDEL, OnButdel)
	ON_BN_CLICKED(IDC_BUTNEXT, OnButnext)
	ON_BN_CLICKED(IDC_BUTPRV, OnButprv)
	ON_BN_CLICKED(IDC_BUTQUERY, OnButquery)
	ON_BN_CLICKED(IDC_BUTTOTAL, OnButtotal)
	ON_CBN_SETFOCUS(IDC_CBQUERY, OnSetfocusCbquery)
	ON_CBN_SELCHANGE(IDC_CBQUERY, OnSelchangeCbquery)
	ON_EN_CHANGE(IDC_EDITADDR, OnChangeEditaddr)
	ON_EN_CHANGE(IDC_EDITNAME, OnChangeEditname)
	ON_EN_CHANGE(IDC_EDITTEL, OnChangeEdittel)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTPICKERBIRTH, OnDatetimechangeDtpickerbirth)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CProgram79View construction/destruction

CProgram79View::CProgram79View()
	: CFormView(CProgram79View::IDD)
{
	//{{AFX_DATA_INIT(CProgram79View)
	m_Address = _T("");
	m_Name = _T("");
	m_Tel = _T("");
	m_Birth = 0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CProgram79View::~CProgram79View()
{
}

void CProgram79View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CProgram79View)
	DDX_Control(pDX, IDC_CBQUERY, m_ctlQuery);
	DDX_Text(pDX, IDC_EDITADDR, m_Address);
	DDX_Text(pDX, IDC_EDITNAME, m_Name);
	DDX_Text(pDX, IDC_EDITTEL, m_Tel);
	DDX_DateTimeCtrl(pDX, IDC_DTPICKERBIRTH, m_Birth);
	//}}AFX_DATA_MAP
}

BOOL CProgram79View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CProgram79View::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	CProgram79Doc * pDoc=GetDocument();	//获取文档指针
	m_listAddr=&(pDoc->m_listAddr);		//获取列表对象
	m_pos=m_listAddr->GetHeadPosition();	//获取列表头指针
	//获取列表第一个元素
	CAddrlist * pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
	//为对话框控件变量赋值
	m_Name=pAddrDoc->Name;	
	m_Tel=pAddrDoc->Tel;
	m_Address=pAddrDoc->Address;
	m_Birth=pAddrDoc->Birth;

	UpdateData(FALSE);//更新对话框控件
	//将焦点设置在姓名控件上
	((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));

}

/////////////////////////////////////////////////////////////////////////////
// CProgram79View printing

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

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

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

void CProgram79View::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CProgram79View diagnostics

#ifdef _DEBUG
void CProgram79View::AssertValid() const
{
	CFormView::AssertValid();
}

void CProgram79View::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CProgram79View message handlers

void CProgram79View::OnButadd() 
{
	// TODO: Add your control notification handler code here
		
	if(m_Name=="")		//确定记录的姓名不能为空
	{
		MessageBox("姓名不能为空!");
		((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));
		return;
	}
	//创建新的列表元素
	CAddrlist * pAddrDoc=new CAddrlist;
	m_Name=pAddrDoc->Name;
	m_Tel=pAddrDoc->Tel;
	m_Address=pAddrDoc->Address;
	m_Birth=pAddrDoc->Birth;

	UpdateData(FALSE);
	//将新元素添加到列表并获取在列表中的位置
	m_pos=m_listAddr->AddTail(pAddrDoc);

	((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));	
}

void CProgram79View::OnButdel() 
{
	int flag;	//存储消息对话框的返回值
	
	CObject * pOld=m_listAddr->GetAt(m_pos);//获取当前元素指针
	int listCount=m_listAddr->GetCount();	//统计列表元素总数
	flag=MessageBox("删除当前记录?","提示",MB_YESNO);
	if(IDYES==flag)
	{
		if(listCount>1)
		{
			m_listAddr->RemoveAt(m_pos);//从列表中移除元素	
			delete pOld;				//销毁元素
			CProgram79Doc * pDoc=GetDocument();
			pDoc->SetModifiedFlag();	//设置修改标志
			OnInitialUpdate();
		}
		else
		{	//如果列表中只有表头元素,则清空该元素内容
			m_Name="";
			m_Tel="";
			m_Birth=CTime::GetCurrentTime();
			m_Address="";
			CProgram79Doc * pDoc=GetDocument();
			CAddrlist *pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
			pAddrDoc->Name=m_Name;
			pAddrDoc->Address=m_Address;
			pAddrDoc->Tel=m_Tel;
			pAddrDoc->Birth=m_Birth;
			pDoc->SetModifiedFlag();	//设置修改标志

		}
	UpdateData(FALSE);
	}
	((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));
}

void CProgram79View::OnButnext() 
{
	if(m_Name=="")
	{
		MessageBox("姓名不能为空!");
		((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));
		return;
	}

	if(m_pos!=m_listAddr->GetTailPosition())//判断是否已到列表尾位置
	{
		if(m_listAddr->GetNext(m_pos)!=NULL)//获取列表下一元素位置
		{	CAddrlist * pAddrDoc=(CAddrlist * )	m_listAddr->GetAt(m_pos);

			m_Name=pAddrDoc->Name;
			m_Tel=pAddrDoc->Tel;
			m_Address=pAddrDoc->Address;
			m_Birth=pAddrDoc->Birth;
			UpdateData(FALSE);
		}
		else 
			MessageBox("已到尾记录!","提示",MB_ICONWARNING);
	}
	else
		MessageBox("已到尾记录!","提示",MB_ICONWARNING);
	((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));	
}

void CProgram79View::OnButprv() 
{
	if(m_Name=="")
	{
		MessageBox("姓名不能为空!");
		((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));
		return;
	}

	if(m_pos!=m_listAddr->GetHeadPosition())//判断是否已到表头
	{	if(m_listAddr->GetPrev(m_pos)!=NULL)//获取前一元素位置
		{
			CAddrlist * pAddrDoc=(CAddrlist * )	m_listAddr->GetAt(m_pos);
			m_Name=pAddrDoc->Name;
			m_Tel=pAddrDoc->Tel;
			m_Address=pAddrDoc->Address;
			m_Birth=pAddrDoc->Birth;
			UpdateData(FALSE);
		}
		else 
			MessageBox("已到首记录!","提示",MB_ICONWARNING);
	}
	else
		MessageBox("已到首记录!","提示",MB_ICONWARNING);
	((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));	
}

void CProgram79View::OnButquery() 
{
	POSITION	postemp;	//记录临时位置
	CAddrlist * pAddrDoc;	

	if(!(m_listAddr->IsEmpty()))	//判断列表是否为空
	{
		postemp=m_listAddr->GetHeadPosition();//取得表头位置
		while(postemp!=NULL)		//如果没到表尾
		{
			pAddrDoc=(CAddrlist * )m_listAddr->GetAt(postemp);
			if(m_strQuery==pAddrDoc->Name )//判断姓名是否相等
			{	//显示找到的记录
				m_Name=pAddrDoc->Name;
				m_Tel=pAddrDoc->Tel;
				m_Address=pAddrDoc->Address;
				m_Birth=pAddrDoc->Birth;
				m_pos=postemp;
				UpdateData(FALSE);
				break;
			}
			m_listAddr->GetNext(postemp);//向后移动位置

		}

		if(postemp==NULL)	//如果已到表尾
		{
			MessageBox("没有符合条件的记录!");
			//恢复到查询前的记录
			pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
			m_Name=pAddrDoc->Name;
			m_Tel=pAddrDoc->Tel;
			m_Address=pAddrDoc->Address;
			m_Birth=pAddrDoc->Birth;
			UpdateData(FALSE);
		}
	}
	else
		MessageBox("此文档为空!");

	((CDialog *)this)->GotoDlgCtrl(GetDlgItem(IDC_EDITNAME));
}

void CProgram79View::OnButtotal() 
{
	CString str;
	str.Format("共计%d条记录。",m_listAddr->GetCount());		
	MessageBox(str);	
}

void CProgram79View::OnSetfocusCbquery() 
{
	POSITION	postemp;	//记录临时位置
	CAddrlist * pAddrDoc;

	m_ctlQuery.ResetContent();//清空组合框内容
	
	if(!(m_listAddr->IsEmpty()))//判断列表不为空
	{
		postemp=m_listAddr->GetHeadPosition();//取得表头位置
		while(postemp!=NULL)		//如果未到表尾
		{	//增加当前记录的姓名到组合框
			pAddrDoc=(CAddrlist * )m_listAddr->GetAt(postemp);
			m_ctlQuery.AddString(pAddrDoc->Name);
			m_listAddr->GetNext(postemp);//取得下一记录位置
		}
	}
	else
		MessageBox("此文档为空!");
	UpdateData(FALSE);	
}

void CProgram79View::OnSelchangeCbquery() 
{	//取得组合框所选择记录的姓名
	m_ctlQuery.GetLBText(m_ctlQuery.GetCurSel(),m_strQuery);	
}


void CProgram79View::OnChangeEditaddr() 
{
	UpdateData(TRUE);
	CProgram79Doc * pDoc=GetDocument();
	CAddrlist *pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
	pAddrDoc->Address=m_Address;
	pDoc->SetModifiedFlag();	
}

void CProgram79View::OnChangeEditname() 
{
	UpdateData(TRUE);
	CProgram79Doc * pDoc=GetDocument();
	CAddrlist *pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
	pAddrDoc->Name=m_Name;
	pDoc->SetModifiedFlag();
}

void CProgram79View::OnChangeEdittel() 
{
	UpdateData(TRUE);
	CProgram79Doc * pDoc=GetDocument();
	CAddrlist *pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
	pAddrDoc->Tel=m_Tel;
	pDoc->SetModifiedFlag();	
}

void CProgram79View::OnDatetimechangeDtpickerbirth(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UpdateData(TRUE);
	CProgram79Doc * pDoc=GetDocument();
	CAddrlist * pAddrDoc=(CAddrlist * )m_listAddr->GetAt(m_pos);
	pAddrDoc->Birth=m_Birth;
	pDoc->SetModifiedFlag();
	
	*pResult = 0;
}

⌨️ 快捷键说明

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