基于MFC的简易通讯录管理系统设计
精选资料,欢迎下载
。
目录
一、引言 ................................................. 1 二、需求分析 ............................................. 1 三、整体设计 ............................................. 2 1、系统框图 ........................................... 2 2、模块功能 ........................................... 2 四、代码编写 ............................................. 2 1、定义一个Cperson类 ................................. 2 2、定义文档类数据成员m_StudengtList ................... 3 3、初始化文档类成员 ................................... 4 4、建立文档类和视图类数据成员之间的关系 ............... 5 五、测试结果 ............................................ 10 1、编译并连接源程序,执行程序后显示的初始界面 ........ 10 2、添加王豆豆的信息显示的界面 ........................ 11 3、删除通讯录中的信息 ................................ 11 4、修改通讯录中的信息 ................................ 12 六、设计小结 ............................................ 12
精选资料,欢迎下载
。
一、引言
21世纪是IT普及的世界,到处都存在IT的身影,实时通讯已是占据它不可或缺的地位。一个好的、强大的通讯录系统的好坏,不但可以直接影响到企业、个人的人际关系,而且会间接的影响到企业、个人经济利益和社会地位。随着社会的发展,科技的进步,计算机的应用在社会各领域中都得到了普及,越来越多的人都感受到利用计算机进行各类管理的科学和便捷,利用计算机进行通讯管理已经是一种趋势。
MFC是Microsoft Foundation Class Library(微软基础类库)的缩写形式。它是C++的类集,提供面向对象框架,利用这个框架,程序员可以轻松的创建Windows应用程序。基于MFC的通讯管理系统具有美观的窗口界面、充足可靠的信息数据、简单方便的维护手段和灵活多变的查询方式以及快捷而准确的查询结果。
二、需求分析
通讯录使我们每个人必不可少的一个工具,利用通讯录我们可以对同学、朋友、同事等信息进行有效的管理,包括查询、添加、删除和修改等。
此通讯录系统利用本着人性化的设计,此系统包括了联系人的姓名、电话、地址、E-mail、和备注等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的需要。
基于MFC简易通讯录管理系统具有以下特点:1,操作简单,所有人不需学习就可以使用的系统;2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息;3,界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。数据库的操作与运行相比文件较复杂,一般对安全性较高的大型信息管理系统采用数据库方式,这里我们采用文件存取方式即可。
精选资料,欢迎下载
。
三、整体设计
1、系统框图
通讯录管理系统查询记录添加记录
修改记录查询记录删除单条记录清除整组记录向前浏览 向后浏览 2、模块功能
(1) 添加记录:可以增加通讯录相关信息; (2) 修改记录:可以修改通讯录相关信息; (3) 查询记录:可以查找通讯录中每个人的信息; (4) 删除记录:可以删除通讯录单条个人信息; (5) 清除记录:可以清除通讯录整个组信息;
四、代码编写
1、定义一个Cperson类
程序中处理的学生信息是一个数据序列,即线性表结构。以Coject为基类,公有派生Cperson类。 Person.h中的代码:
精选资料,欢迎下载
。
class CPerson:public CObject { public:
DECLARE_SERIAL(CPerson) //对类进行串行化宏定义
CPerson();
virtual ~CPerson();
CString m_Name; //姓名 CString m_Phone; //电话 CString m_Company; //公司 CString m_Email; //Email
public: };
Person.cpp中编辑的初始化的代码 CPerson::CPerson() { }
//初始化人员信息(m_Name,m_Phone,m_Company,m_Email) m_Name=\"\"; //姓名 m_Phone=\"\"; //电话 m_Company=\"\"; //公司 m_Email=\"\"; //Email
virtual void Serialize(CArchive& ar);
2、定义文档类数据成员m_StudengtList
在AddressBookview.h中编写代码: class CAddressBookView : public CFormView {
protected: // create from serialization only
CAddressBookView();
精选资料,欢迎下载
。
DECLARE_DYNCREATE(CAddressBookView)
public:
CAddressBookDoc* GetDocument();
public:
virtual ~CAddressBookView();
protected:
POSITION m_Position; //指向链表中当前结点的指针
CObList *m_PersonViewList;//指向文档类成员(双向链表)的指针
protected: };
DECLARE_MESSAGE_MAP()
3、初始化文档类成员
#include \"stdafx.h\" #include \"AddressBook.h\" #include \"Person.h\" #include \"AddressBookDoc.h\" #include \"AddressBookView.h\"
void CAddressBookView::OnInitialUpdate() {
CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit();
CAddressBookDoc *pDoc=GetDocument();//获得文档类指针
m_PersonViewList=&(pDoc->m_PersonList);//视图类指针指向文档类对象 m_Position=m_PersonViewList->GetHeadPosition();//获得头结点位置 CPerson*pListDoc=(CPerson *)m_PersonViewList->GetAt(m_Position);//
获得头一个数据
m_strName=pListDoc->m_Name;
精选资料,欢迎下载
。
m_strPhone=pListDoc->m_Phone; m_strCompany=pListDoc->m_Company;
m_strEmail=pListDoc->m_Email;//将表头结点数据赋给视图类成员变量 UpdateData(false);//刷新窗口
((CDialog*)this)->GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME)); //将光标
停在姓名编辑框 }
4、建立文档类和视图类数据成员之间的关系
编写命令按钮代码: (1)添加记录
void CAddressBookView::OnButtonAdd() {
//界面
((CButton*)GetDlgItem(IDC_CHECK_MODIFY))->EnableWindow(false); ((CButton*)GetDlgItem(IDC_BUTTON_CLEAR))->EnableWindow(false); ((CButton*)GetDlgItem(IDC_BUTTON_PREVIOUS))->EnableWindow(false); ((CButton*)GetDlgItem(IDC_BUTTON_NEXT))->EnableWindow(false);
((CButton*)GetDlgItem(IDC_BUTTON_ADD))->SetWindowText(_T(\"继续添加\"));
((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->SetWindowText(_T(\"添加
完毕\"));
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->EnableWindow(true);
((CEdit*)GetDlgItem(IDC_EDIT_EMAIL))->EnableWindow(true); ((CEdit*)GetDlgItem(IDC_EDIT_PHONE))->EnableWindow(true); ((CEdit*)GetDlgItem(IDC_EDIT_COMPANY))->EnableWindow(true); m_strName=\"\"; m_strPhone=\"\"; m_strCompany=\"\";
精选资料,欢迎下载
。
m_strEmail=\"\";//清空编辑框 UpdateData(false);//刷新界面 CPerson *pListDoc=new CPerson();
m_Position=m_PersonViewList->AddTail(pListDoc);
//新建空人员信息添加至链表,并将当前位置移至该处
CAddressBookDoc *pDoc=GetDocument();//获得文档指针 pDoc->SetModifiedFlag();//设置文档被修改标置
((CDialog*)this)->GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME));//姓名编
辑框获得焦点 }
(2)删除记录
void CAddressBookView::OnButtonDelete() { 除
delete pOld;//释放空间
if(m_PersonViewList->IsEmpty()) //链表若为空,则调用添加生成CString str;
GetDlgItem(IDC_BUTTON_DELETE)->GetWindowText(str); if(str==\"删除记录(&D)\") {
CObject *pOld; //临时对象指针
pOld=m_PersonViewList->GetAt(m_Position);//使其指向当前指针 m_PersonViewList->RemoveAt(m_Position); //将当前结点从列表中删// TODO: Add your control notification handler code here
一个新结点
{
CAddressBookDoc *pDoc=GetDocument();//获得文档指针
精选资料,欢迎下载
。
}
}
pDoc->OnNewDocument();
m_Position=m_PersonViewList->GetHeadPosition();
CAddressBookDoc *pDoc=(CAddressBookDoc*)GetDocument(); pDoc->SetModifiedFlag(); //获得文档指针,标志文档已被修改 OnInitialUpdate();//显示列表第一个结点
else {
AfxMessageBox(\"添加完毕!\");
((CButton*)GetDlgItem(IDC_CHECK_MODIFY))->EnableWindow(true); ((CButton*)GetDlgItem(IDC_BUTTON_CLEAR))->EnableWindow(true);
((CButton*)GetDlgItem(IDC_BUTTON_PREVIOUS))->EnableWindow(true);
((CButton*)GetDlgItem(IDC_BUTTON_NEXT))->EnableWindow(true);
((CButton*)GetDlgItem(IDC_BUTTON_ADD))->SetWindowText(_T(\"添加记录(&A)\"));
((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->SetWindowText(_T(\"
删除记录(&D)\")); }
(3)清除记录
void CAddressBookView::OnButtonClear() {
if(m_PersonViewList->GetCount()==1) //链表若为空,则调用添加生成 }
// TODO: Add your control notification handler code here
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->EnableWindow(false); ((CEdit*)GetDlgItem(IDC_EDIT_EMAIL))->EnableWindow(false); ((CEdit*)GetDlgItem(IDC_EDIT_PHONE))->EnableWindow(false); ((CEdit*)GetDlgItem(IDC_EDIT_COMPANY))->EnableWindow(false);
精选资料,欢迎下载
。
一个新结点
{ }
AfxMessageBox(\"没有可清空的记录!\"); return;
if(MessageBox(\"所有的记录将被清空!\清空警告\
{
CAddressBookDoc *pDoc=GetDocument();//获得文档指针 pDoc->OnNewDocument();
m_Position=m_PersonViewList->GetHeadPosition(); } }
(4)向前浏览
void CAddressBookView::OnButtonPrevious() {
POSITION m_templeposition;//定义一个临时位置指针
m_templeposition=m_Position;//并使其指向当前结点的前驱结点 m_PersonViewList->GetPrev(m_templeposition);//获得当前结点位置的
前一个
CPerson*pListDoc=(CPerson*)m_PersonViewList->GetAt(m_Position);
//获得前一个人员的信息 if(m_templeposition==NULL) {//若到链表头结点 } else {
m_Position=m_templeposition;//当前指针定位到前一个 AfxMessageBox(_T(\"已到表头!\"));
精选资料,欢迎下载
。
}
m_strName=pListDoc->m_Name; m_strPhone=pListDoc->m_Phone; m_strCompany=pListDoc->m_Company;
m_strEmail=pListDoc->m_Email; //赋值给视图类数据成员 UpdateData(false);//刷新窗口
(5)向后浏览
void CAddressBookView::OnButtonNext() {
POSITION m_templeposition;//定义一个临时位置指针
m_templeposition=m_Position;//并使其指向当前结点的前驱结点 m_PersonViewList->GetNext(m_templeposition);//获得当前结点位置的
后一个
CPerson*pListDoc=(CPerson*)m_PersonViewList->GetAt(m_Position); }
//获得前一个人员的信息 m_strName=pListDoc->m_Name; m_strPhone=pListDoc->m_Phone; m_strCompany=pListDoc->m_Company;
m_strEmail=pListDoc->m_Email; //赋值给视图类数据成员 UpdateData(false);//刷新窗口 if(m_templeposition==NULL) {//若到链表尾结点 } else {
m_Position=m_templeposition;//当前指针定位到后一个 AfxMessageBox(_T(\"已到表尾!\"));
精选资料,欢迎下载
。
// TODO: Add your control notification handler code here }
(6)释放链表对象空间
class CAddressBookDoc : public CDocument {
protected: // create from serialization only
CAddressBookDoc();
DECLARE_DYNCREATE(CAddressBookDoc)
// Attributes public:
CObList m_PersonList;//文档类成员
public:
virtual ~CAddressBookDoc();
protected:
DECLARE_MESSAGE_MAP() };
精选资料,欢迎下载
。
五、测试结果
1、编译并连接源程序,执行程序后显示的初始界面
2、添加王豆豆的信息显示的界面
精选资料,欢迎下载
。
3、删除通讯录中的信息
4、修改通讯录中的信息
六、设计小结
在做这个小课题之前,先参考一些书,对整个Windows程序内部运行机制先做一定的了解,整个Windows程序的运行机制是:1,创建窗口:设计一个窗口
精选资料,欢迎下载
。
类、注册窗口类、创建窗口、显示及更新窗口;2,消息循环;3,窗口过程函数,其中窗口过程函数是关键,根据我们的需要来进行编写。
MFC(Microsoft Foundation Class,微软的基础类库),它是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用,利用这些类可以有效地帮助程序员完成Windows应用程序的开发,而MFC AppWizard 是一个辅助我们生成源代码的向导工具,它可以帮助我们自动生成基MFC框架的源代码。该向导的的每一个步骤中,我们都可以根据需要来选择各种特性,从而实现定制应用程序。
对于基于MFC的简易通讯录管理系统的设计,需要对联系人的信息进行管理,需要调用MFC类中的函数,对于这个MFC的应用程序,主要的类有CPerson、CAddressBookView、CAddressBookDoc等几个类,里面封装了一些函数和一些变量,例如CPerson是由Cobject派生出来的,CPerson中的构造函数CPerson()对人员的信息进行初始化;CAddressBookView类封装了函数OnButtonAdd()、OnButtonDelete()、OnButtonPrevious() 、OnChangeEditCompany() 等函数,实现对人员信息的添加,删除,信息的查询,改变工作信息;CAddressBookDoc类封装了OnNewDocument()、DeleteContents()函数,实现对文档类成员的初始化和对文档成员的删除。
基于MFC的简易通讯录管理系统,只是对MFC的简单的应用,通过它,我对MFC的工作机制有了初步的了解,对MFC的深入了解还需要更多的时间和更多的实践,以后会尝试把数据库Microsoft SQL Server 2000或Access 2003和MFC相结合做出功能更强大的应用程序来。
精选资料,欢迎下载
。
Welcome !!!
欢迎您的下载, 资料仅供参考!
精选资料,欢迎下载
因篇幅问题不能全部显示,请点此查看更多更全内容