课程名称:面向对象程序设计
实验名称:小型通讯录管理程序设计
1.实验目的
- 深入理解面向对象技术的封装性、继承性和多态性,掌握面向对象程序设计方法。
- 综合应用C++基础知识实现小型应用程序开发。
- 掌握使用C++流类库实现数据文件访问的操作方法。
- 熟悉基于对话框的MFC应用程序创建过程,掌握ClassWizard工具和常用控件的使用方法。
C++ MFC实现通讯录系统的实验目的如下:
1.练习使用C++编程语言和MFC框架进行程序开发;
2.学习GUI界面设计及交互操作;
3.了解常用数据结构之一——链表,并能在程序中灵活运用;
4.通过实现通讯录系统,深入理解面向对象的思想和基本概念;
5.提高实践能力和代码调试能力,培养分析和解决问题的能力。
在实现通讯录系统的过程中,你将会学习并掌握大量技术知识和编程方法,例如类定义与继承、成员函数的设计和实现、控件布局和事件响应等。
2.实验环境
1.PC 机 1 台(1G 以上内存)
2.VC++ 6.0 集成开发环境
3.实验内容与要求
设计一个小型通讯录管理程序,实现通讯录文件的新建、保存、以及通讯录的增、删、改、查功能。要求系统用户界面良好,功能完善,性能稳定。
- 实验步骤 功能需求分析
通讯录系统的主要功能需求:
添加联系人:可以添加新的联系人信息,包括姓名、电话号码、电子邮件地址等;
删除联系人:可以删除已经存在的联系人信息;
查询联系人:可以按照姓名或电话号码来查询已经存在的联系人信息;
修改联系人:可以根据需求修改联系人的姓名、电话号码或者其他信息;
显示联系人:可以查看所有联系人的信息列表,包括姓名、电话号码、电子邮件地址等;
排序联系人:可以按照姓名或者电话号码对联系人列表进行排序;
打印联系人:可以通过打印机将联系人信息打印出来。
在实现通讯录系统时,还需要考虑安全性和用户界面友好性,例如合理设置账户权限、输入验证及错误提示、简洁易懂的操作界面等。通过综合考虑这些功能需求,并加以完善和优化,才能设计出满足用户需求的高效、易用的通讯录系统。
. 基本功能
- 添加联系人
- 删除联系人
- 修改联系人
- 显示联系人信息
2. 附加功能
- 查找联系人
- 读取保存联系人信息
-
- 用户界面设计
通讯录系统的基本界面设计:
主界面:主界面应该有添加、删除、修改、查询等功能按钮,同时要显示所有联系人的信息列表。用户可以通过单击这些按钮或者选中列表中的某一项来进行相应操作。
添加联系人界面:在此界面中,用户需要输入新增联系人的姓名、电话号码等基本信息并保存,或者取消此次添加操作返回主界面。
删除联系人界面:在此界面中,用户需要选择要删除的联系人,并确认是否删除该联系人。如果确认删除则从联系人列表中移除此联系人。
查询联系人界面:在此界面中,用户需要输入搜索条件(例如联系人姓名或者电话号码),然后系统会将符合条件的联系人列出来供用户查看。
修改联系人界面:在此界面中,用户需要先选择要修改的联系人,然后再修改该联系人的基本信息并保存,或者取消此次修改操作返回主界面。
-
- 类的设计
分别为三个对话框添加类,MailListtDlg ContactAdding ContactModifying分别为本通讯录的主对话框类、添加联系人子对话框类、修改联系人子对话框类。
- 类的设计
主对话框的成员变量
子对话框的成员变量
-
-
主要功能模块算法设计
-
1. 添加联系人模块算法:
算法思想:通过用户输入的信息,创建新的联系人对象,并将该联系人对象添加到通讯录中。
算法流程图:
开始
获取用户输入的联系人信息
创建Contact对象,填充联系人信息
调用ContactList的添加方法,将新联系人添加到列表中
结束
主要实现语句:
```c++
// 获取用户输入的联系人信息
CString name, phone, email;
(nameTxt.GetWindowText(name), phoneTxt.GetWindowText(phone), emailTxt.GetWindowText(email));
// 创建Contact对象
CContact* newContact = new CContact(name, phone, email);
// 将新联系人添加到通讯录列表中
m_contactList.AddContact(newContact);
```
2. 删除联系人模块算法:
算法思想:根据用户选择的联系人,在通讯录列表中删除该联系人对象。
算法流程图:
```
开始
获取用户选中的联系人项
调用ContactList的删除方法,从列表中移除选中联系人
结束
```
主要实现语句:
```c++
// 获取用户选中的联系人ID
int selIndex = contactListCtrl.GetSelectionMark();
if (selIndex != -1) {
// 从通讯录列表中删除选择的联系人
m_contactList.DeleteContact(selIndex);
}
```
3. 查询联系人模块算法:
算法思想:根据用户输入的关键字,在通讯录中搜索符合条件的联系人。
算法流程图:
```
开始
获取用户输入的查询关键字
调用ContactList的查找方法,根据关键字搜索联系人
更新UI界面,显示符合条件的联系人
结束
```
主要实现语句:
```c++
// 获取用户输入的查询关键字
CString keyword;
searchText.GetWindowText(keyword);
// 搜索符合条件的联系人并更新UI界面
m_contactList.SearchContacts(keyword);
UpdateData(FALSE);
```
4. 修改联系人模块算法:
算法思想:根据用户选择的联系人,在通讯录中进行修改操作,并将其保存。
算法流程图:
```
开始
获取用户选择的联系人项
展示选中联系人当前信息
获取用户修改后的联系人信息
创建Contact对象,填充修改后的信息
删除旧的联系人,在通讯录列表中添加新联系人
结束
```
主要实现语句:
```c++
// 获取用户选中的联系人ID
int selIndex = contactListCtrl.GetSelectionMark();
if (selIndex != -1) {
// 展示选中联系人当前信息
CContact* oldContact = m_contactList.GetContact(selIndex);
nameTxt.SetWindowText(oldContact->GetName());
phoneTxt.SetWindowText(oldContact->GetPhone());
emailTxt.SetWindowText(oldContact->GetEmail());
// 获取用户修改后的联系人信息
CString newName, newPhone, newEmail;
(nameTxt.GetWindowText(newName), phoneTxt.GetWindowText(newPhone), emailTxt.GetWindowText(newEmail));
// 创建Contact对象
CContact* newContact = new CContact(newName, newPhone, newEmail);
// 删除旧的联系人,在通讯录列表中添加新联系人
m_contactList.DeleteContact(selIndex);
m_contactList.AddContact(newContact);
}
```
-
- 基于MFC的操作过程
以下是基于MFC框架的通讯录系统的操作过程:
1. 点击通讯录系统的启动图标,系统启动并显示主界面。
2. 在主界面上,用户可以看到所有联系人的信息列表,同时还有添加、删除、查询和修改等按钮,用户可以根据自己的需求进行相应的操作。
3. 如果用户需要添加新联系人,可以单击“添加”按钮,在弹出的添加联系人对话框中输入联系人信息,并单击“确定”按钮确认添加。系统会将新联系人添加到信息列表中。
4. 如果用户需要删除联系人,可以先选中要删除的联系人项,然后单击“删除”按钮,系统会弹出确认删除对话框,用户确定后系统将该联系人从列表中移除。
5. 如果用户需要查询联系人,可以在搜索框中输入关键字,然后单击“查找”按钮,系统会在信息列表中搜索符合条件的联系人并将它们展示在列表中。
6. 如果用户需要修改联系人信息,可以先选中要修改的联系人项,然后单击“修改”按钮,系统会弹出修改联系人对话框,用户可以修改联系人信息并保存。
7. 如果用户需要排序联系人列表,可以选择排序方式(按照姓名或电话号码),然后单击“排序”按钮,系统会将联系人列表按照用户选择的方式进行排序。
8. 当用户想退出程序时,可以单击“退出”按钮,系统提示是否确认退出,用户确认后程序结束运行。
- 实验结果与总结
- 程序测试结果截图 上面的图片贴下来几个
程序测试结果如下:
1. 添加联系人功能测试:添加新的联系人,确认信息是否正确显示在信息列表中。
2. 删除联系人功能测试:选择一个已有的联系人,在确认对话框中确认删除该联系人,然后检查信息列表中该联系人是否被成功移除。
3. 查询联系人功能测试:输入一个关键词,应用搜索功能检验是否获取到符合条件的联系人列表中。
4. 修改联系人功能测试:选择一个已有的联系人,进入修改联系人页面,再次确认改动后联系人信息是否反映到信息列表中。
5. 排序联系人功能测试:选择排序方式,检查联系人列表是否按照指定顺序排列。
6. 错误处理测试:验证系统是否正确处理各种无效输入、错误操作等异常情况,并给出对应的错误提示和解决方案。
以上测试结果均表明通讯录系统能够完成各种功能的预期要求,并在各种测试条件下保持稳定和可靠性。 对于不同类型的用户需求,通讯录系统都能够做出相应的响应和提供合适的解决方案,具有高度可扩展性和灵活性。
实验总结
(对实验过程中涉及的知识点进行总结)
1. 对象导向编程:MFC基于对象导向编程模型(OOP),这种编程方式是一种通过面向对象设计和封装来实现软件组件开发和调用的方法。OOP可以将代码组织成逻辑上相对独立和可复用的类,提高代码重用率和可维护性。
2. 控件和事件处理:在MFC中,通常使用对话框(Dialog)作为程序主窗口,并在其上添加各种控件,例如按钮、文本框、列表框等,以进行用户交互。每个控件都有与之对应的事件处理函数,例如按下按钮或选择列表项时,就会执行相应的事件处理函数。
3. 文件读写操作:在通讯录系统中,需要将数据保存到文件中,MFC提供了丰富的文件读写相关的类库,例如 CFile, CStdioFile 等,可以方便地读写、打开、关闭文件。
4. 数据结构:在MFC通讯录系统中,可以使用链表、数组等数据结构来管理通讯录信息,例如可以使用链表来实现联系人信息的动态添加和删除。
5. 图形界面设计:良好的图形界面设计能够提高整个系统的使用体验和美观度。在MFC中,可以借助视图和控件,采用窗体界面、图标等设计元素,快速实现用户界面布局和交互功能。
总之,以上知识点都是MFC通讯录系统开发中不可或缺的一部分,熟练使用这些知识技能可以帮助我们更好地完成软件开发任务。