使用mfc设计一个通讯录管理系统,要求实现通讯录的新建,保存,以及通讯录的增,删,改,查功能,以文件来储存,使用C++流类库中的ifstream和ofstream类实现文件操作
时间: 2023-09-01 11:13:38 浏览: 94
好的,我可以为您设计一个使用 MFC 编写的通讯录管理系统,满足您的要求。
首先,我们需要创建一个 MFC 对话框应用程序,然后在资源视图中添加一个菜单项和一个列表框。
接下来,我们需要在类视图中添加一个类,命名为 Contact,用于存储联系人的姓名、电话、地址等信息。代码如下:
```cpp
class Contact {
public:
CString name;
CString phone;
CString address;
};
```
然后,我们需要在类视图中添加一个类,命名为 ContactList,用于存储通讯录的名称和联系人列表,并且实现通讯录的增、删、改、查等功能。代码如下:
```cpp
class ContactList {
public:
CString name;
vector<Contact> contacts;
// 新建通讯录
void create(CString name);
// 保存通讯录
void save();
// 添加联系人
void add(Contact contact);
// 删除联系人
void remove(int index);
// 修改联系人
void modify(int index, Contact contact);
// 查找联系人
vector<int> search(CString keyword);
};
```
其中,create() 方法用于新建一个通讯录,save() 方法用于保存通讯录到文件中,add() 方法用于添加一个联系人,remove() 方法用于删除一个联系人,modify() 方法用于修改一个联系人,search() 方法用于根据关键字查找联系人,并返回匹配的联系人在联系人列表中的下标。
接下来,我们需要实现以上方法。代码如下:
```cpp
// 新建通讯录
void ContactList::create(CString name) {
this->name = name;
contacts.clear();
}
// 保存通讯录
void ContactList::save() {
CStdioFile file;
if (file.Open(name + ".txt", CFile::modeCreate | CFile::modeWrite)) {
file.WriteString(name + "\n");
for (int i = 0; i < contacts.size(); i++) {
CString line = contacts[i].name + " " + contacts[i].phone + " " + contacts[i].address + "\n";
file.WriteString(line);
}
file.Close();
}
}
// 添加联系人
void ContactList::add(Contact contact) {
contacts.push_back(contact);
}
// 删除联系人
void ContactList::remove(int index) {
contacts.erase(contacts.begin() + index);
}
// 修改联系人
void ContactList::modify(int index, Contact contact) {
contacts[index] = contact;
}
// 查找联系人
vector<int> ContactList::search(CString keyword) {
vector<int> result;
for (int i = 0; i < contacts.size(); i++) {
if (contacts[i].name.Find(keyword) != -1 || contacts[i].phone.Find(keyword) != -1 || contacts[i].address.Find(keyword) != -1) {
result.push_back(i);
}
}
return result;
}
```
以上代码中,save() 方法使用 CStdioFile 类打开文件并写入通讯录名称和联系人列表,add() 方法使用 vector 的 push_back() 方法添加一个联系人,remove() 方法使用 vector 的 erase() 方法删除一个联系人,modify() 方法直接替换指定下标的联系人,search() 方法使用 CString 的 Find() 方法查找匹配的联系人并返回下标列表。
接下来,我们可以在对话框的头文件中定义一个 ContactList 对象,并在对话框的代码中调用以上方法,实现通讯录管理系统的功能。例如,我们可以这样使用:
```cpp
class CMyDlg : public CDialogEx {
public:
ContactList contactList;
// 新建通讯录
void OnNew();
// 保存通讯录
void OnSave();
// 添加联系人
void OnAdd();
// 删除联系人
void OnRemove();
// 修改联系人
void OnModify();
// 查找联系人
void OnSearch();
};
```
以上代码中,我们在对话框类中定义了一个 ContactList 对象 contactList,并定义了 OnNew()、OnSave()、OnAdd()、OnRemove()、OnModify()、OnSearch() 等方法,用于实现通讯录管理系统的功能。
例如,我们可以这样实现 OnNew() 方法:
```cpp
void CMyDlg::OnNew() {
CInputDialog dlg(_T("新建通讯录"), _T("请输入通讯录名称:"));
if (dlg.DoModal() == IDOK) {
CString name = dlg.GetValue();
contactList.create(name);
m_list.ResetContent();
SetWindowText(name);
}
}
```
以上代码中,我们使用 CInputDialog 类创建一个对话框,用于输入通讯录名称,然后调用 contactList 的 create() 方法新建一个通讯录,清空列表框 m_list,并设置对话框标题为通讯录名称。
类似地,我们可以实现其他方法。最后,我们需要在菜单项的响应函数中调用相应的方法。例如,我们可以这样实现响应菜单项“新建”:
```cpp
void CMyDlg::OnNew() {
OnOK();
OnCancel();
OnNew();
}
```
以上代码中,我们使用对话框的 OnOK()、OnCancel() 方法关闭对话框,并重新打开对话框的 OnNew() 方法,以实现新建通讯录的功能。
这就是一个简单的使用 MFC 编写的通讯录管理系统的设计和实现。
阅读全文