用c++设计一个小型通讯录管理程序,实现通讯录文件的新建、保存、以及通讯录的增、删、改、查功能。要求系统用户界面良好,功能完善,性能稳定。
时间: 2023-07-10 13:08:52 浏览: 34
好的,下面是一个简单的通讯录管理程序的设计:
### 1. 定义联系人结构体
```c++
struct Contact {
string name; // 姓名
string phoneNum; // 电话号码
int age; // 年龄
string address; // 地址
};
```
### 2. 定义通讯录类
```c++
class AddressBook {
public:
AddressBook(); // 构造函数
void addContact(); // 添加联系人
void deleteContact(); // 删除联系人
void modifyContact(); // 修改联系人
void searchContact(); // 查找联系人
void showAllContacts();// 显示所有联系人
void saveToFile(); // 保存到文件
void readFromFile(); // 从文件中读取
private:
vector<Contact> contacts; // 联系人列表
string fileName; // 文件名
};
```
### 3. 实现通讯录类的方法
#### 3.1 构造函数
```c++
AddressBook::AddressBook() {
fileName = "contacts.txt";
readFromFile();
}
```
#### 3.2 添加联系人
```c++
void AddressBook::addContact() {
cout << "请输入姓名:";
string name;
cin >> name;
// 判断联系人是否已存在
for (auto c : contacts) {
if (c.name == name) {
cout << "联系人已存在!" << endl;
return;
}
}
cout << "请输入电话号码:";
string phoneNum;
cin >> phoneNum;
cout << "请输入年龄:";
int age;
cin >> age;
cout << "请输入地址:";
string address;
cin >> address;
Contact c = { name, phoneNum, age, address };
contacts.push_back(c);
cout << "添加联系人成功!" << endl;
}
```
#### 3.3 删除联系人
```c++
void AddressBook::deleteContact() {
cout << "请输入要删除的联系人姓名:";
string name;
cin >> name;
int index = -1;
for (int i = 0; i < contacts.size(); i++) {
if (contacts[i].name == name) {
index = i;
break;
}
}
if (index == -1) {
cout << "联系人不存在!" << endl;
} else {
contacts.erase(contacts.begin() + index);
cout << "删除联系人成功!" << endl;
}
}
```
#### 3.4 修改联系人
```c++
void AddressBook::modifyContact() {
cout << "请输入要修改的联系人姓名:";
string name;
cin >> name;
int index = -1;
for (int i = 0; i < contacts.size(); i++) {
if (contacts[i].name == name) {
index = i;
break;
}
}
if (index == -1) {
cout << "联系人不存在!" << endl;
} else {
cout << "请输入新的电话号码:";
string phoneNum;
cin >> phoneNum;
cout << "请输入新的年龄:";
int age;
cin >> age;
cout << "请输入新的地址:";
string address;
cin >> address;
Contact& c = contacts[index];
c.phoneNum = phoneNum;
c.age = age;
c.address = address;
cout << "修改联系人成功!" << endl;
}
}
```
#### 3.5 查找联系人
```c++
void AddressBook::searchContact() {
cout << "请输入要查找的联系人姓名:";
string name;
cin >> name;
for (auto c : contacts) {
if (c.name == name) {
cout << "姓名:" << c.name << endl;
cout << "电话号码:" << c.phoneNum << endl;
cout << "年龄:" << c.age << endl;
cout << "地址:" << c.address << endl;
return;
}
}
cout << "联系人不存在!" << endl;
}
```
#### 3.6 显示所有联系人
```c++
void AddressBook::showAllContacts() {
if (contacts.empty()) {
cout << "通讯录为空!" << endl;
} else {
cout << "通讯录列表:" << endl;
for (auto c : contacts) {
cout << "姓名:" << c.name << endl;
cout << "电话号码:" << c.phoneNum << endl;
cout << "年龄:" << c.age << endl;
cout << "地址:" << c.address << endl;
cout << endl;
}
}
}
```
#### 3.7 保存到文件
```c++
void AddressBook::saveToFile() {
ofstream out(fileName);
if (out.is_open()) {
for (auto c : contacts) {
out << c.name << " " << c.phoneNum << " " << c.age << " " << c.address << endl;
}
out.close();
cout << "保存到文件成功!" << endl;
} else {
cout << "无法打开文件!" << endl;
}
}
```
#### 3.8 从文件中读取
```c++
void AddressBook::readFromFile() {
ifstream in(fileName);
if (in.is_open()) {
while (!in.eof()) {
Contact c;
in >> c.name >> c.phoneNum >> c.age >> c.address;
if (!c.name.empty()) {
contacts.push_back(c);
}
}
in.close();
cout << "从文件中读取成功!" << endl;
} else {
cout << "无法打开文件!" << endl;
}
}
```
### 4. 用户界面
```c++
int main() {
AddressBook ab;
while (true) {
cout << "------------------------------------" << endl;
cout << "1. 添加联系人" << endl;
cout << "2. 删除联系人" << endl;
cout << "3. 修改联系人" << endl;
cout << "4. 查找联系人" << endl;
cout << "5. 显示所有联系人" << endl;
cout << "6. 保存到文件" << endl;
cout << "0. 退出" << endl;
cout << "------------------------------------" << endl;
cout << "请选择操作:";
int choice;
cin >> choice;
switch (choice) {
case 0:
cout << "退出成功!" << endl;
return 0;
case 1:
ab.addContact();
break;
case 2:
ab.deleteContact();
break;
case 3:
ab.modifyContact();
break;
case 4:
ab.searchContact();
break;
case 5:
ab.showAllContacts();
break;
case 6:
ab.saveToFile();
break;
default:
cout << "无效操作!" << endl;
break;
}
}
return 0;
}
```
以上就是一个简单的通讯录管理程序的设计。你可以根据自己的需求进行修改和扩展。