基于MFC的简易通讯录管理系统设计目录一、引言.................................................1二、需求分析.............................................1三、整体设计.............................................21、系统框图...........................................22、模块功能...........................................2四、代码编写.............................................21、定义一个Cperson类.................................22、定义文档类数据成员m_StudengtList...................33、初始化文档类成员...................................44、建立文档类和视图类数据成员之间的关系...............5五、测试结果............................................101、编译并连接源程序,执行程序后显示的初始界面........102、添加王豆豆的信息显示的界面........................113、删除通讯录中的信息................................114、修改通讯录中的信息................................12六、设计小结............................................121一、引言21世纪是IT普及的世界,到处都存在IT的身影,实时通讯已是占据它不可或缺的地位。一个好的、强大的通讯录系统的好坏,不但可以直接影响到企业、个人的人际关系,而且会间接的影响到企业、个人经济利益和社会地位。随着社会的发展,科技的进步,计算机的应用在社会各领域中都得到了普及,越来越多的人都感受到利用计算机进行各类管理的科学和便捷,利用计算机进行通讯管理已经是一种趋势。MFC是MicrosoftFoundationClassLibrary(微软基础类库)的缩写形式。它是C++的类集,提供面向对象框架,利用这个框架,程序员可以轻松的创建Windows应用程序。基于MFC的通讯管理系统具有美观的窗口界面、充足可靠的信息数据、简单方便的维护手段和灵活多变的查询方式以及快捷而准确的查询结果。二、需求分析通讯录使我们每个人必不可少的一个工具,利用通讯录我们可以对同学、朋友、同事等信息进行有效的管理,包括查询、添加、删除和修改等。此通讯录系统利用本着人性化的设计,此系统包括了联系人的姓名、电话、地址、E-mail、和备注等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的需要。基于MFC简易通讯录管理系统具有以下特点:1,操作简单,所有人不需学习就可以使用的系统;2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息;3,界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。数据库的操作与运行相比文件较复杂,一般对安全性较高的大型信息管理系统采用数据库方式,这里我们采用文件存取方式即可。2三、整体设计1、系统框图通讯录管理系统添加记录删除单条记录清除整组记录修改记录查询记录查询记录向前浏览向后浏览2、模块功能(1)添加记录:可以增加通讯录相关信息;(2)修改记录:可以修改通讯录相关信息;(3)查询记录:可以查找通讯录中每个人的信息;(4)删除记录:可以删除通讯录单条个人信息;(5)清除记录:可以清除通讯录整个组信息;四、代码编写1、定义一个Cperson类程序中处理的学生信息是一个数据序列,即线性表结构。以Coject为基类,公有派生Cperson类。Person.h中的代码:3classCPerson:publicCObject{public:DECLARE_SERIAL(CPerson)//对类进行串行化宏定义CPerson();virtual~CPerson();CStringm_Name;//姓名CStringm_Phone;//电话CStringm_Company;//公司CStringm_Email;//Emailpublic:virtualvoidSerialize(CArchive&ar);};Person.cpp中编辑的初始化的代码CPerson::CPerson(){//初始化人员信息(m_Name,m_Phone,m_Company,m_Email)m_Name=;//姓名m_Phone=;//电话m_Company=;//公司m_Email=;//Email}2、定义文档类数据成员m_StudengtList在AddressBookview.h中编写代码:classCAddressBookView:publicCFormView{protected://createfromserializationonlyCAddressBookView();4DECLARE_DYNCREATE(CAddressBookView)public:CAddressBookDoc*GetDocument();public:virtual~CAddressBookView();protected:POSITIONm_Position;//指向链表中当前结点的指针CObList*m_PersonViewList;//指向文档类成员(双向链表)的指针protected:DECLARE_MESSAGE_MAP()};3、初始化文档类成员#includestdafx.h#includeAddressBook.h#includePerson.h#includeAddressBookDoc.h#includeAddressBookView.hvoidCAddressBookView::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;5m_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)添加记录voidCAddressBookView::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=;6m_strEmail=;//清空编辑框UpdateData(false);//刷新界面CPerson*pListDoc=newCPerson();m_Position=m_PersonViewList-AddTail(pListDoc);//新建空人员信息添加至链表,并将当前位置移至该处CAddressBookDoc*pDoc=GetDocument();//获得文档指针pDoc-SetModifiedFlag();//设置文档被修改标置((CDialog*)this)-GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME));//姓名编辑框获得焦点//TODO:Addyourcontrolnotificationhandlercodehere}(2)删除记录voidCAddressBookView::OnButtonDelete(){CStringstr;GetDlgItem(IDC_BUTTON_DELETE)-GetWindowText(str);if(str==删除记录(&D)){CObject*pOld;//临时对象指针pOld=m_PersonViewList-GetAt(m_Position);//使其指向当前指针m_PersonViewList-RemoveAt(m_Position);//将当前结点从列表中删除deletepOld;//释放空间if(m_PersonViewList-IsEmpty())//链表若为空,则调用添加生成一个新结点{CAddressBookDoc*pDoc=GetDocument();//获得文档指针7pDoc-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_N