建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。
时间: 2023-10-20 21:10:17 浏览: 194
好的,这是一个比较复杂的项目,需要涉及到文件读写、数据结构等知识,我会尽可能详细地给出代码和解释,希望能帮到你。
首先,我们需要定义一个联系人的结构体,其中包括姓名、电话号码、住址等信息:
```c++
struct Contact {
string name;
string phone;
string address;
};
```
接下来,我们需要实现一个通讯录类,其中包括显示、查找、添加、修改和删除联系人的功能。为了方便起见,我们将通讯录保存在一个文本文件中,每一行表示一个联系人,各个信息之间用逗号分隔。
```c++
class AddressBook {
public:
// 构造函数,从文件中读取联系人信息
AddressBook(string fileName) : m_fileName(fileName) {
ifstream fin(fileName);
if (fin) {
string line;
while (getline(fin, line)) {
Contact contact = parseLine(line);
m_contacts.push_back(contact);
}
fin.close();
}
else {
cerr << "Error: Failed to open file " << fileName << endl;
}
}
// 显示所有联系人
void displayAll() {
for (const auto& contact : m_contacts) {
cout << contact.name << "\t" << contact.phone << "\t" << contact.address << endl;
}
}
// 查找联系人
void search(string name) {
bool found = false;
for (const auto& contact : m_contacts) {
if (contact.name == name) {
cout << contact.name << "\t" << contact.phone << "\t" << contact.address << endl;
found = true;
}
}
if (!found) {
cout << "Contact not found" << endl;
}
}
// 添加联系人
void add(Contact contact) {
m_contacts.push_back(contact);
writeToFile(); // 将联系人信息写入文件
}
// 修改联系人
void modify(string name, Contact newContact) {
for (auto& contact : m_contacts) {
if (contact.name == name) {
contact = newContact;
writeToFile(); // 将联系人信息写入文件
return;
}
}
cout << "Contact not found" << endl;
}
// 删除联系人
void remove(string name) {
for (auto it = m_contacts.begin(); it != m_contacts.end(); ++it) {
if (it->name == name) {
m_contacts.erase(it);
writeToFile(); // 将联系人信息写入文件
return;
}
}
cout << "Contact not found" << endl;
}
private:
string m_fileName; // 保存通讯录的文件名
vector<Contact> m_contacts; // 所有联系人的信息
// 将一行字符串解析为一个联系人的信息
Contact parseLine(string line) {
Contact contact;
stringstream ss(line);
getline(ss, contact.name, ',');
getline(ss, contact.phone, ',');
getline(ss, contact.address, ',');
return contact;
}
// 将所有联系人信息写入文件
void writeToFile() {
ofstream fout(m_fileName);
if (fout) {
for (const auto& contact : m_contacts) {
fout << contact.name << "," << contact.phone << "," << contact.address << endl;
}
fout.close();
}
else {
cerr << "Error: Failed to write to file " << m_fileName << endl;
}
}
};
```
最后,我们可以在主函数中创建一个 AddressBook 对象,并使用它的各个方法进行通讯录的操作:
```c++
int main() {
AddressBook addressBook("contacts.txt");
addressBook.displayAll();
addressBook.search("Alice");
addressBook.add({"Bob", "123456789", "123 Main St"});
addressBook.modify("Bob", {"Bob", "987654321", "456 Oak St"});
addressBook.remove("Alice");
return 0;
}
```
这样就完成了一个简单的通讯录程序。需要注意的是,这里只是一个简单的示例,实际的通讯录程序可能需要更多的功能和错误处理。
阅读全文