您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页C++???

C++???

来源:化拓教育网
 课程设计说明书 No.1

通讯录管理系统 1.设计目的 本课程设计主要解决通讯录里的联系人的查询、添加、删除、修改等功能的程序设计。在课程设计中,系统开发平台为Windows 2007,程序设计设计语言采用Visual C++,程序运行平台为MicrosoftVisual C++ 6.0。对于通讯录功能的实现采用添加控件的方法,在程序设计中,采用了面向对象解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。本设计通过一个通讯录的制作,介绍单文档界面的读写文档技术以及人性化界面的一般原理。功能如下: (1)、可以通过文件导入导出通讯录信息 (2)、可以向前或向后浏览通讯录信息 (3)、可以添加、修改和删除通讯录信息 2.设计内容和步骤 2.1、系统分析 通讯录与以往编写的程序相比,最大的区别在于它需要再现信息。再现信息值得是当用户何时何地再次启动程序师,程序能恢复到以前的状态或数据。换句话说,我们需要为通讯录提供这样的功能:能将通讯录的数据以某种形式存放,当需要时,可以通过载入来恢复数据。数据存放形式目前有两种:文件和数据库。我们采用文件存取方式。 通常情况下,视图通过GetDocument成员函数获得指向相关联的文档对象的指针,并通过该指针调用文档类的成员函数来从文档中读取数据。从技术方面,是通过VC++来做系统的前台,来实现整系统的功能;从操作方面,基本的录入、查询、修改等都能满足用户的需求;此次设计没有考虑经济可行性。经过这一阶段确定了该系统的粗略系统流程图,如图1所示。 图1 系统流程图 沈 阳 大 学

课程设计说明书 No.2

在Microsoft Visual C++6.0中用MFC可以实现系统程序的编写,实现运行结果可视化,MFC的好处是简化Windows操作,把经常使用而有复杂、烦琐的操作,封装成各种类(MFC程序框架),它使程序员从繁杂的编程中解脱出来,提高了编程和代码效率。用消息驱动机制来实现代码的添加,产生消息。在MFC中建立一个单文档应用程序,加入数据库支持,选择对应的数据源。采用模块化原理可以使软件结构清晰,容易设计也容易阅读和理解,也易于测试和调度,所以它有利于提高软件的可靠性和可修改性。 2.2、项目创建 Visual c++6.0中,新建MFC AppWizard(exe)单文档工程,命名为AddressBook。最后一步中视图基类选择“CFormView”。使用AppWizard配置得到的项目信息如图: 2.3、界面设计 打开对话框资源IDD_ADDRESS_FORM,该对话框将是界面运行时的主界面: 沈 阳 大 学

课程设计说明书 No.3

2.4、代码实现 2.4.1、建立文档类和视图类数据成员之间的联系。 (1)、双击姓名编辑框,进入事件OnChangeEditName的编辑界面,代码更改如下: void CAddressBookView::OnChangeEditName() { } UpdateData(true);//界面的值传递到变量 CAddressBookDoc *pDoc=GetDocument();//获得文档类指针 CPerson *pListDoc=(CPerson*)m_PersonViewList->GetAt(m_Position);//获得当前结点 pListDoc->m_Name=m_strName;//将更改过的姓名添加到结点 pDoc->SetModifiedFlag();//设置文档数据被修改标志 (2)、双击电话编辑框,进入事件OnChangeEditPhone的编辑界面,代码更改如下: void CAddressBookView::OnChangeEditPhone() { UpdateData(true);//界面的值传递到变量 CAddressBookDoc *pDoc=GetDocument();//获得文档类指针 沈 阳 大 学

课程设计说明书 No.4

} CPerson *pListDoc=(CPerson*)m_PersonViewList->GetAt(m_Position);//获得当前结点 pListDoc->m_Phone=m_strPhone;//将更改过的电话添加到结点 pDoc->SetModifiedFlag();//设置文档数据被修改标志 (3)、双击单位编辑框,进入事件OnChangeEditCompany的编辑界面,代码更改如下: void CAddressBookView::OnChangeEditCompany() { UpdateData(true);//界面的值传递到变量 CAddressBookDoc *pDoc=GetDocument();//获得文档类指针 CPerson *pListDoc=(CPerson*)m_PersonViewList->GetAt(m_Position);//获得当前结点 } pListDoc->m_Company=m_strCompany;//将更改过的单位添加到结点 pDoc->SetModifiedFlag();//设置文档数据被修改标志 (4)、双击Email编辑框,进入事件OnChangeEditEmail的编辑界面,代码改如下: void CAddressBookView::OnChangeEditEmail() { } UpdateData(true);//界面的值传递到变量 CAddressBookDoc *pDoc=GetDocument();//获得文档类指针 CPerson *pListDoc=(CPerson*)m_PersonViewList->GetAt(m_Position);//获得当前结点 pListDoc->m_Email=m_strEmail;//将更改过的姓名添加到结点 pDoc->SetModifiedFlag();//设置文档数据被修改标志 2.4.2、编辑命令按钮执行代码 (1)、双击视图中的“添加记录”按钮,进入事件方法OnButtonAdd()的更改界面,代码更改如下: void CAddressBookView::OnButtonAdd() { //界面 沈 阳 大 学

课程设计说明书 No.5

((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); ((CButton*)GetDlgItem(IDC_BUTTON_ADD))->SetWindowText(_T(\"继续添加\")); ((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->SetWindowText(_T(\"添加完毕\")); ((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); //新建空人员信息添加至链表,并将当前位置移至该处 CAddressBookDoc *pDoc=GetDocument();//获得文档指针 pDoc->SetModifiedFlag();//设置文档被修改标置 } // TODO: Add your control notification handler code here ((CDialog*)this)->GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME));//姓名编辑框获得焦点 沈 阳 大 学

课程设计说明书 No.6

(2)、 双击资源视图中“删除记录”按钮,进入事件方法OnButtonDelete的更改界面,更改界面,代码更改如下: void CAddressBookView::OnButtonDelete() { CString str; GetDlgItem(IDC_BUTTON_DELETE)->GetWindowText(str); if(str==\"删除记录(&D)\") { } 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); CObject *pOld; //临时对象指针 pOld=m_PersonViewList->GetAt(m_Position);//使其指向当前指针 m_PersonViewList->RemoveAt(m_Position); //将当前结点从列表中删除 delete pOld;//释放空间 if(m_PersonViewList->IsEmpty()) //链表若为空,则调用添加生成一个新结点 { } CAddressBookDoc *pDoc=(CAddressBookDoc*)GetDocument(); pDoc->SetModifiedFlag(); //获得文档指针,标志文档已被修改 OnInitialUpdate();//显示列表第一个结点 CAddressBookDoc *pDoc=GetDocument();//获得文档指针 pDoc->OnNewDocument(); m_Position=m_PersonViewList->GetHeadPosition(); 沈 阳 大 学

课程设计说明书 No.7

} } // TODO: Add your control notification handler code here ((CButton*)GetDlgItem(IDC_BUTTON_ADD))->SetWindowText(_T(\"添加记录(&A)\")); ((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->SetWindowText(_T(\"删除记录(&D)\")); ((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); (3)、双击资源视图中“清除记录”按钮,进入事件方法的更改界面OnButtonClear()的更改界面,代码更改如: void CAddressBookView::OnButtonClear() { m_Position=m_PersonViewList->GetHeadPosition(); if(MessageBox(\"所有的记录将被清空!\清空警告\{ CAddressBookDoc *pDoc=GetDocument();//获得文档指针 pDoc->OnNewDocument(); if(m_PersonViewList->GetCount()==1) //链表若为空,则调用添加生成一个新结点 { } AfxMessageBox(\"没有可清空的记录!\"); return; /* while(!pDoc->m_PersonList.IsEmpty()) 沈 阳 大 学

课程设计说明书 No.8

} } {//循环删除最前的结点,直到删尽为止 } delete pDoc->m_PersonList.RemoveHead(); m_strName=\"someone\"; m_strPhone=\"\"; m_strCompany=\"\"; m_strEmail=\"\";//清空编辑框 UpdateData(false);//刷新界面 CPerson *pListDoc=new CPerson(); m_Position=m_PersonViewList->AddTail(pListDoc); //新建空人员信息添加至链表,并将当前位置移至该处 pDoc->SetModifiedFlag();//设置文档被修改标置 ((CDialog*)this)->GotoDlgCtrl(GetDlgItem(IDC_EDIT_NAME));//姓名编辑框获得焦点*/ // TODO: Add your control notification handler code here (4)、双击资源视图中的“向前浏览”按钮,进入事件方法OnButtonPrevious()的更改界面,代码更改如: void CAddressBookView::OnButtonPrevious() { POSITION m_templeposition;//定义一个临时位置指针 m_templeposition=m_Position;//并使其指向当前结点的前驱结点 m_PersonViewList->GetPrev(m_templeposition);//获得当前结点位置的前一个 if(m_templeposition==NULL) {//若到链表头结点 } else AfxMessageBox(_T(\"已到表头!\")); 沈 阳 大 学

课程设计说明书 No.9

} // TODO: Add your control notification handler code here { } m_Position=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);//刷新窗口 (5)、双击资源视图中的“向后浏览”按钮,进入事件方法OnButtonNext()的更改界面,代码更改如: void CAddressBookView::OnButtonNext() { POSITION m_templeposition;//定义一个临时位置指针 m_templeposition=m_Position;//并使其指向当前结点的前驱结点 m_PersonViewList->GetNext(m_templeposition);//获得当前结点位置的后一个 if(m_templeposition==NULL) {//若到链表尾结点 } else { m_Position=m_templeposition;//当前指针定位到后一个 AfxMessageBox(_T(\"已到表尾!\")); 沈 阳 大 学

课程设计说明书 No.10

} // TODO: Add your control notification handler code here } 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);//刷新窗口 (6)、双击资源视图中的“修改记录”按钮,进入事件方法OnButtonPrevious()的更改界面,代码更改如: void CAddressBookView::OnCheckModify() { //CButton a; //a.GetCheck( if(((CButton*)GetDlgItem(IDC_CHECK_MODIFY))->GetCheck()==1) { ((CButton*)GetDlgItem(IDC_BUTTON_ADD))->EnableWindow(false); ((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(false); ((CButton*)GetDlgItem(IDC_BUTTON_CLEAR))->EnableWindow(false); ((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); 沈 阳 大 学

课程设计说明书 No.11

} } } else { ((CButton*)GetDlgItem(IDC_BUTTON_ADD))->EnableWindow(true); ((CButton*)GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(true); ((CButton*)GetDlgItem(IDC_BUTTON_CLEAR))->EnableWindow(true); ((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); // TODO: Add your control notification handler code here 2.4.3、主界面形成程序代码 在AddressBookClass中打开Cperson这个成员函数就可以看到代码如下: #if !defined(AFX_PERSON_H__873A555F_8884_4E8F_9C9B_5F8D5AB6CB2A__INCLUDED_) #define AFX_PERSON_H__873A555F_8884_4E8F_9C9B_5F8D5AB6CB2A__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CPerson:public CObject { public: 沈 阳 大 学

课程设计说明书 No.12

DECLARE_SERIAL(CPerson) //对类进行串行化宏定义 CPerson(); virtual ~CPerson(); CString m_Name; //姓名 CString m_Phone; //电话 CString m_Company; //公司 CString m_Email; //Email public: }; #endif // !defined(AFX_PERSON_H__873A555F_8884_4E8F_9C9B_5F8D5AB6CB2A__INCLUDED_) virtual void Serialize(CArchive& ar); 3、程序运行的结果 (1)、在AddressBookClass中打开Cperson这个成员函数,编译,运行就可以得到如下3-1的图形: 沈 阳 大 学

课程设计说明书 No.13

图3-1 编译,运行所得的图形 (2)、点击图3-1中的“添加记录”按钮,即可添加联系人,输入必要的信息,最后点击“添加完毕”按钮,即可得到如下图3-2: 沈 阳 大 学

课程设计说明书 No.14

3-2 点击添加完毕后所得的图形 (3)、当关闭窗口时会出现保存数据的提示,点击保存即可保存到特定的目录下,如下图3-3所示: 3-3 提示是否保存 (4)、若需要继续添加,点击“继续添加”按钮即可,当添加完之后即可向前向后浏览相关的信息,运行结果如下图3-4: 沈 阳 大 学

课程设计说明书 No.15

图3-4 继续添加 4.心得体会 VC++是在Windows平台下构建32位运用程序的强大而又复杂的开发工具,是目前世界上使用最多的开发工具之一,掌握VC++的运用,对我们有很重要的意义。 此次通讯录程序开发课程设计主要是做一个最基本最简单的通讯录,主要功能是添加联系人姓名、电话、单位和Email的信息,和浏览各个通讯录的小功能,界面简洁,操作方面,有很大的改善空间,可视化编程与纯手写的程序体现了它的方便性,很多类、方法只需点击几下就可以自动为你构造出代码,使我们无需敲那么多代码,一些简单的界面也可直接拖拉控件实现,然后在控件的属性上添加一些触发事件及相应的函数方法就可达到点击控件时你想它所能出现的功能,整个过程最核心的还是控件发生的事件的代码实现,个人觉得很多还是蛮难的,实力有限呀,有待提高。 通过本次课程设计,让我掌握了设计的一般步骤,加强了我对VC++的认识,更深刻的体会到做设计的不易,虽然设计过程中我遇到了很多的困难,但在高老师的耐心指导与同学的帮助下,我克服各种难题并完成了自己的设计。通过这次实验,我更是明白了坚持对于一个人的重要性,只有不断地尝试,坦然面对失败,我们才会取得成功。在设计的过程和设计说明书的撰写过程中,老师给予了我热心的帮助和大力的支持,给我提了诸多的宝贵意见,拓宽了我的思 沈 阳 大 学

课程设计说明书 No.16

路。还有很多问题在同学的帮助下得以解决。在此我向老师致以崇高的敬意以及对同学衷心的感谢! 5.参考文献 [1]陈卫卫 .Visual C++数据库编程技术与实例.人民邮电出版社 [2]孙鑫余安萍. VC++深入详解. 电子工业出版社.2006 [3]郑阿奇. Visual C++实用教程(第2版). 电子工业出版社.2003 [4]刘瑞吴跃进王宗越. Visual C++项目开发实用案例. 科学出版社.2006 [5] 杨淑莹.图像模式识别:VC++技术实现.清华大学出版社,北京交通大学出版社 2005年5月1日 [6] 祁云嵩 .VC++程序设计解析与训练.2005

沈 阳 大 学

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务