基于MFC的简易通讯录管理系统设计精品Word下载.docx
《基于MFC的简易通讯录管理系统设计精品Word下载.docx》由会员分享,可在线阅读,更多相关《基于MFC的简易通讯录管理系统设计精品Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
二、需求分析
通讯录使我们每个人必不可少的一个工具,利用通讯录我们可以对同学、朋友、同事等信息进行有效的管理,包括查询、添加、删除和修改等。
此通讯录系统利用本着人性化的设计,此系统包括了联系人的姓名、电话、地址、E-mail、和备注等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的需要。
基于MFC简易通讯录管理系统具有以下特点:
1,操作简单,所有人不需学习就可以使用的系统;
2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息;
3,界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。
数据库的操作与运行相比文件较复杂,一般对安全性较高的大型信息管理系统采用数据库方式,这里我们采用文件存取方式即可。
三、整体设计
1、系统框图
2、模块功能
(1)添加记录:
可以增加通讯录相关信息;
(2)修改记录:
可以修改通讯录相关信息;
(3)查询记录:
可以查找通讯录中每个人的信息;
(4)删除记录:
可以删除通讯录单条个人信息;
(5)清除记录:
可以清除通讯录整个组信息;
四、代码编写
1、定义一个Cperson类
程序中处理的学生信息是一个数据序列,即线性表结构。
以Coject为基类,公有派生Cperson类。
Person.h中的代码:
classCPerson:
publicCObject
{
public:
DECLARE_SERIAL(CPerson)//对类进行串行化宏定义
CPerson();
virtual~CPerson();
CStringm_Name;
//姓名
CStringm_Phone;
//电话
CStringm_Company;
//公司
CStringm_Email;
//Email
virtualvoidSerialize(CArchive&
ar);
};
Person.cpp中编辑的初始化的代码
CPerson:
:
CPerson()
//初始化人员信息(m_Name,m_Phone,m_Company,m_Email)
m_Name="
"
;
m_Phone="
m_Company="
m_Email="
}
2、定义文档类数据成员m_StudengtList
在AddressBookview.h中编写代码:
classCAddressBookView:
publicCFormView
protected:
//createfromserializationonly
CAddressBookView();
DECLARE_DYNCREATE(CAddressBookView)
CAddressBookDoc*GetDocument();
virtual~CAddressBookView();
POSITIONm_Position;
//指向链表中当前结点的指针
CObList*m_PersonViewList;
//指向文档类成员(双向链表)的指针
DECLARE_MESSAGE_MAP()
3、初始化文档类成员
#include"
stdafx.h"
AddressBook.h"
Person.h"
AddressBookDoc.h"
AddressBookView.h"
voidCAddressBookView:
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)添加记录
OnButtonAdd()
//界面
((CButton*)GetDlgItem(IDC_CHECK_MODIFY))->
EnableWindow(false);
((CButton*)GetDlgItem(IDC_BUTTON_CLEAR))->
((CButton*)GetDlgItem(IDC_BUTTON_PREVIOUS))->
((CButton*)GetDlgItem(IDC_BUTTON_NEXT))->
((CButton*)GetDlgItem(IDC_BUTTON_ADD))->
SetWindowText(_T("
继续添加"
));
((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->
添加完毕"
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->
EnableWindow(true);
((CEdit*)GetDlgItem(IDC_EDIT_EMAIL))->
((CEdit*)GetDlgItem(IDC_EDIT_PHONE))->
((CEdit*)GetDlgItem(IDC_EDIT_COMPANY))->
m_strName="
m_strPhone="
m_strCompany="
m_strEmail="
//清空编辑框
//刷新界面
CPerson*pListDoc=newCPerson();
AddTail(pListDoc);
//新建空人员信息添加至链表,并将当前位置移至该处
//获得文档指针
pDoc->
SetModifiedFlag();
//设置文档被修改标置
//姓名编辑框获得焦点
//TODO:
Addyourcontrolnotificationhandlercodehere
(2)删除记录
OnButtonDelete()
CStringstr;
GetDlgItem(IDC_BUTTON_DELETE)->
GetWindowText(str);
if(str=="
删除记录(&
D)"
)
{
CObject*pOld;
//临时对象指针
pOld=m_PersonViewList->
//使其指向当前指针
m_PersonViewList->
RemoveAt(m_Position);
//将当前结点从列表中删除
deletepOld;
//释放空间
if(m_PersonViewList->
IsEmpty())//链表若为空,则调用添加生成一个新结点
{
CAddressBookDoc*pDoc=GetDocument();
pDoc->
OnNewDocument();
m_Position=m_PersonViewList->
}
CAddressBookDoc*pDoc=(CAddressBookDoc*)GetDocument();
pDoc->
//获得文档指针,标志文档已被修改
OnInitialUpdate();
//显示列表第一个结点
}
else
AfxMessageBox("
添加完毕!
);
((CButton*)GetDlgItem(IDC_CHECK_MODIFY))->
((CButton*)GetDlgItem(IDC_BUTTON_CLEAR))->
((CButton*)GetDlgItem(IDC_BUTTON_NEXT))->
添加记录(&
A)"
((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->
((CEdit*)GetDlgItem(IDC_EDIT_EMAIL))->
((CEdit*)GetDlgItem(IDC_EDIT_PHONE))->
((CEdit*)GetDlgItem(IDC_EDIT_COMPANY))->
(3)清除记录
OnButtonClear()
if(m_PersonViewList->
GetCount()==1)//链表若为空,则调用添加生成一个新结点
没有可清空的记录!
return;
if(MessageBox("
所有的记录将被清空!
"
清空警告"
MB_YESNO)==IDYES)
}
}
(4)向前浏览
OnButtonPrevious()
POSITIONm_templeposition;
//定义一个临时位置指针
m_templeposition=m_Position;
//并使其指向当前结点的前驱结点
m_PersonViewList->
GetPrev(m_templeposition);
//获得当前结点位置的前一个
if(m_templeposition==NULL)
{//若到链表头结点
AfxMessageBox(_T("
已到表头!
m_Position=m_templeposition;
//当前指针定位到前一个
CPerson*pListDoc=(CPerson*)m_PersonViewList->
//获得前一个人员的信息
m_strName=pListDoc->
m_strPhone=pListDoc->
m_strCompany=pListDoc->
m_strEmail=pListDoc->
//赋值给视图类数据成员
UpdateData(false);
(5)向后浏览
OnButtonNext()
GetNext(m_templeposition);
//获得当前结点位置的后一个
{//若到链表尾结点
已到表尾!
//当前指针定位到后一个
//TODO:
(6)释放链表对象空间
classCAddressBookDoc:
publicCDocument
CAddressBookDoc();
DECLARE_DYNCREATE(CAddressBookDoc)
//Attributes
CObListm_PersonList;
//文档类成员
virtual~CAddressBookDoc();
DECLARE_MESSAGE_MAP()
五、测试结果
1、编译并连接源程序,执行程序后显示的初始界面
2、添加王豆豆的信息显示的界面
3、删除通讯录中的信息
4、修改通讯录中的信息
六、设计小结
在做这个小课题之前,先参考一些书,对整个Windows程序内部运行机制先做一定的了解,整个Windows程序的运行机制是:
1,创建窗口:
设计一个窗口类、注册窗口类、创建窗口、显示及更新窗口;
2,消息循环;
3,窗口过程函数,其中窗口过程函数是关键,根据我们的需要来进行编写。
MFC(MicrosoftFoundationClass,微软的基础类库),它是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用,利用这些类可以有效地帮助程序员完成Windows应用程序的开发,而MFCAppWizard是一个辅助我们生成源代码的向导工具,它可以帮助我们自动生成基MFC框架的源代码。
该向导的的每一个步骤中,我们都可以根据需要来选择各种特性,从而实现定制应用程序。
对于基于MFC的简易通讯录管理系统的设计,需要对联系人的信息进行管理,需要调用MFC类中的函数,对于这个MFC的应用程序,主要的类有CPerson、CAddressBookView、CAddressBookDoc等几个类,里面封装了一些函数和一些变量,例如CPerson是由Cobject派生出来的,CPerson中的构造函数CPerson()对人员的信息进行初始化;
CAddressBookView类封装了函数OnButtonAdd()、OnButtonDelete()、OnButtonPrevious()、OnChangeEditCompany()等函数,实现对人员信息的添加,删除,信息的查询,改变工作信息;
CAddressBookDoc类封装了OnNewDocument()、DeleteContents()函数,实现对文档类成员的初始化和对文档成员的删除。
基于MFC的简易通讯录管理系统,只是对MFC的简单的应用,通过它,我对MFC的工作机制有了初步的了解,对MFC的深入了解还需要更多的时间和更多的实践,以后会尝试把数据库MicrosoftSQLServer2000或Access2003和MFC相结合做出功能更强大的应用程序来。