请基于MFC设计一个通讯录管理系统 要求实现保存 读取 增加 修改 删除 退出 按姓名电话查找功能 给出实现语句及操作过程
时间: 2024-01-22 15:18:31 浏览: 35
设计思路:
1. 使用MFC框架中的对话框模板创建一个对话框程序,包含菜单栏和工具栏。
2. 在对话框中添加文本框、列表框等控件,用于输入和显示通讯录信息。
3. 使用C++语言编写程序逻辑,实现增加、删除、修改、查询、保存、读取、退出等功能。
4. 使用文件存储通讯录数据,使用文件读写函数实现数据的保存和读取。
代码实现:
1. 添加控件:在对话框中添加文本框、列表框等控件,用于输入和显示通讯录信息。
2. 定义数据结构:定义一个结构体,用于存储通讯录数据。每个结构体包含姓名、电话、地址等信息。
3. 实现增加、删除、修改、查询功能:使用列表框显示通讯录数据,在列表框中选中一条数据后,可以进行删除、修改操作。在文本框中输入查询条件,可以进行查找操作。
4. 实现保存、读取功能:使用文件存储通讯录数据,使用文件读写函数实现数据的保存和读取。
5. 实现退出功能:点击菜单栏或工具栏上的退出按钮,程序退出。
下面是代码实现的示例:
```
// 定义通讯录结构体
struct AddressBook
{
CString name; // 姓名
CString phone; // 电话
CString address; // 地址
};
// 声明通讯录列表框控件变量
CListBox m_listAddress;
// 声明通讯录数据变量
vector<AddressBook> m_vecAddress;
// 增加通讯录数据
void AddAddress()
{
// 从文本框中获取姓名、电话、地址等信息
CString strName, strPhone, strAddress;
GetDlgItemText(IDC_EDIT_NAME, strName);
GetDlgItemText(IDC_EDIT_PHONE, strPhone);
GetDlgItemText(IDC_EDIT_ADDRESS, strAddress);
// 创建一个新的通讯录数据结构体
AddressBook address;
address.name = strName;
address.phone = strPhone;
address.address = strAddress;
// 将新的通讯录数据添加到列表框和数据变量中
m_listAddress.AddString(strName);
m_vecAddress.push_back(address);
}
// 删除通讯录数据
void DeleteAddress()
{
// 获取选中的列表框项的索引
int nIndex = m_listAddress.GetCurSel();
if (nIndex == LB_ERR)
return;
// 从列表框和数据变量中删除通讯录数据
m_listAddress.DeleteString(nIndex);
m_vecAddress.erase(m_vecAddress.begin() + nIndex);
}
// 修改通讯录数据
void ModifyAddress()
{
// 获取选中的列表框项的索引
int nIndex = m_listAddress.GetCurSel();
if (nIndex == LB_ERR)
return;
// 从列表框和数据变量中获取通讯录数据
AddressBook& address = m_vecAddress[nIndex];
// 从文本框中获取修改后的姓名、电话、地址等信息
CString strName, strPhone, strAddress;
GetDlgItemText(IDC_EDIT_NAME, strName);
GetDlgItemText(IDC_EDIT_PHONE, strPhone);
GetDlgItemText(IDC_EDIT_ADDRESS, strAddress);
// 修改通讯录数据
address.name = strName;
address.phone = strPhone;
address.address = strAddress;
// 更新列表框中的显示
m_listAddress.DeleteString(nIndex);
m_listAddress.InsertString(nIndex, strName);
m_listAddress.SetCurSel(nIndex);
}
// 查找通讯录数据
void FindAddress()
{
// 从文本框中获取查询条件
CString strFind;
GetDlgItemText(IDC_EDIT_FIND, strFind);
// 遍历数据变量,查找符合条件的通讯录数据
for (int i = 0; i < m_vecAddress.size(); i++)
{
AddressBook& address = m_vecAddress[i];
if (address.name.Find(strFind) != -1 || address.phone.Find(strFind) != -1 || address.address.Find(strFind) != -1)
{
// 在列表框中选中符合条件的通讯录数据
m_listAddress.SetCurSel(i);
break;
}
}
}
// 保存通讯录数据到文件
void SaveAddressToFile()
{
CFile file;
if (!file.Open(_T("address.dat"), CFile::modeCreate | CFile::modeWrite))
return;
// 将数据变量中的通讯录数据写入文件
for (int i = 0; i < m_vecAddress.size(); i++)
{
AddressBook& address = m_vecAddress[i];
CString str;
str.Format(_T("%s,%s,%s"), address.name, address.phone, address.address);
file.Write(str, str.GetLength() * sizeof(TCHAR));
file.Write(_T("\r\n"), 2 * sizeof(TCHAR));
}
file.Close();
}
// 从文件中读取通讯录数据
void LoadAddressFromFile()
{
CFile file;
if (!file.Open(_T("address.dat"), CFile::modeRead))
return;
// 读取文件中的通讯录数据,存储到数据变量中
CString str;
while (file.ReadString(str))
{
AddressBook address;
int nPos = str.Find(',');
address.name = str.Left(nPos);
str = str.Mid(nPos + 1);
nPos = str.Find(',');
address.phone = str.Left(nPos);
str = str.Mid(nPos + 1);
address.address = str;
m_vecAddress.push_back(address);
}
// 在列表框中显示通讯录数据
for (int i = 0; i < m_vecAddress.size(); i++)
{
AddressBook& address = m_vecAddress[i];
m_listAddress.AddString(address.name);
}
file.Close();
}
// 退出程序
void ExitProgram()
{
// 保存通讯录数据到文件
SaveAddressToFile();
// 关闭程序
EndDialog(0);
}
```
以上是通讯录管理系统的基本实现,可以根据需要进行优化和扩展。