c++编程实现电话簿管理程序, Mytel类描述单个电话号码,TelManager类负责管理电话号码。把增、删、改、查功能封装到该类中。要求电话号码能从磁盘读写。
时间: 2023-12-28 20:04:07 浏览: 126
好的,以下是C++编程实现电话簿管理程序的代码。
```cpp
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
using namespace std;
// Mytel类描述单个电话号码
class Mytel {
public:
string name; // 姓名
string number; // 电话号码
string address; // 地址
// 构造函数
Mytel(string name = "", string number = "", string address = "") {
this->name = name;
this->number = number;
this->address = address;
}
// 将电话簿信息写入文件
void writeToFile(ofstream& outFile) {
outFile << name << " " << number << " " << address << endl;
}
// 从文件中读取电话簿信息
void readFromFile(ifstream& inFile) {
inFile >> name >> number >> address;
}
// 打印电话簿信息
void printInfo() {
cout << "姓名:" << name << endl;
cout << "电话号码:" << number << endl;
cout << "地址:" << address << endl;
}
};
// TelManager类负责管理电话号码
class TelManager {
public:
vector<Mytel> data; // 存储电话簿信息的容器
// 从文件中读取电话簿信息
void readFromFile(string fileName) {
ifstream inFile(fileName);
if (!inFile.is_open()) {
cout << "文件不存在!" << endl;
return;
}
// 读取直到文件尾
while (!inFile.eof()) {
Mytel m;
m.readFromFile(inFile);
// 如果读到的信息不为空,则加入容器
if (m.name != "" && m.number != "" && m.address != "") {
data.push_back(m);
}
}
inFile.close();
}
// 将电话簿信息写入文件
void writeToFile(string fileName) {
ofstream outFile(fileName);
for (int i = 0; i < data.size(); i++) {
data[i].writeToFile(outFile);
}
outFile.close();
}
// 添加电话簿信息
void addInfo() {
string name, number, address;
cout << "请输入姓名:" << endl;
getline(cin, name);
cout << "请输入电话号码:" << endl;
getline(cin, number);
cout << "请输入地址:" << endl;
getline(cin, address);
Mytel m(name, number, address);
data.push_back(m);
}
// 删除电话簿信息
void deleteInfo() {
string name;
cout << "请输入要删除的联系人姓名:" << endl;
getline(cin, name);
for (int i = 0; i < data.size(); i++) {
if (data[i].name == name) {
data.erase(data.begin() + i);
cout << "删除成功!" << endl;
return;
}
}
cout << "没有找到该联系人!" << endl;
}
// 修改电话簿信息
void modifyInfo() {
string name;
cout << "请输入要修改的联系人姓名:" << endl;
getline(cin, name);
for (int i = 0; i < data.size(); i++) {
if (data[i].name == name) {
cout << "请输入新的电话号码:" << endl;
getline(cin, data[i].number);
cout << "请输入新的地址:" << endl;
getline(cin, data[i].address);
cout << "修改成功!" << endl;
return;
}
}
cout << "没有找到该联系人!" << endl;
}
// 查找电话簿信息
void searchInfo() {
string name;
cout << "请输入要查找的联系人姓名:" << endl;
getline(cin, name);
for (int i = 0; i < data.size(); i++) {
if (data[i].name == name) {
data[i].printInfo();
return;
}
}
cout << "没有找到该联系人!" << endl;
}
};
int main() {
TelManager tm;
tm.readFromFile("telbook.txt"); // 从文件中读取电话簿信息
int choice;
while (true) {
cout << "******************************" << endl;
cout << "1. 添加联系人" << endl;
cout << "2. 删除联系人" << endl;
cout << "3. 修改联系人" << endl;
cout << "4. 查找联系人" << endl;
cout << "5. 显示所有联系人" << endl;
cout << "6. 退出程序" << endl;
cout << "请选择操作(输入数字):" << endl;
cin >> choice;
cin.ignore(); // 忽略输入缓冲区中的换行符
switch (choice) {
case 1:
tm.addInfo();
tm.writeToFile("telbook.txt"); // 将电话簿信息写入文件
break;
case 2:
tm.deleteInfo();
tm.writeToFile("telbook.txt");
break;
case 3:
tm.modifyInfo();
tm.writeToFile("telbook.txt");
break;
case 4:
tm.searchInfo();
break;
case 5:
for (int i = 0; i < tm.data.size(); i++) {
tm.data[i].printInfo();
cout << "******************************" << endl;
}
break;
case 6:
tm.writeToFile("telbook.txt");
return 0;
default:
cout << "请输入正确的操作序号!" << endl;
break;
}
}
return 0;
}
```
该程序中,TelManager类负责管理电话号码,包括从文件中读取电话簿信息、将电话簿信息写入文件、添加电话簿信息、删除电话簿信息、修改电话簿信息以及查找电话簿信息等功能。Mytel类描述单个电话号码,包括姓名、电话号码和地址。程序中采用了容器vector来存储电话簿信息,实现了电话簿信息能从磁盘读写的功能。
阅读全文