2. 实现电话簿管理程序, Mytel类描述单个电话号码,TelManager类负责管理电话号码。把增、删、改、查功能封装到该类中。要求电话号码能从磁盘读写。 class TelManager { private: Mytel a[1000]; int count;//当前电话号码个数 } ;
时间: 2024-02-21 20:02:08 浏览: 66
c++电话簿数据系统,用类实现,文件读写,数据段增、删、查、显示
以下是实现电话簿管理程序的示例代码:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Mytel {
private:
string name;
string number;
public:
Mytel(string n, string num) {
name = n;
number = num;
}
string getName() {
return name;
}
string getNumber() {
return number;
}
void setName(string n) {
name = n;
}
void setNumber(string num) {
number = num;
}
};
class TelManager {
private:
Mytel a[1000];
int count;
public:
TelManager() {
count = 0;
}
int getCount() {
return count;
}
void add(Mytel t) {
if (count >= 1000) {
cerr << "电话簿已满,无法添加!" << endl;
return;
}
a[count++] = t;
}
void remove(string name) {
for (int i = 0; i < count; i++) {
if (a[i].getName() == name) {
for (int j = i + 1; j < count; j++) {
a[j - 1] = a[j];
}
count--;
cout << "删除成功!" << endl;
return;
}
}
cout << "未找到该联系人,删除失败!" << endl;
}
void update(string name, Mytel t) {
for (int i = 0; i < count; i++) {
if (a[i].getName() == name) {
a[i] = t;
cout << "修改成功!" << endl;
return;
}
}
cout << "未找到该联系人,修改失败!" << endl;
}
Mytel* find(string name) {
for (int i = 0; i < count; i++) {
if (a[i].getName() == name) {
return &a[i];
}
}
cout << "未找到该联系人!" << endl;
return NULL;
}
void save(string filename) {
ofstream outfile(filename);
if (!outfile) {
cerr << "无法保存文件!" << endl;
exit(1);
}
outfile << count << endl;
for (int i = 0; i < count; i++) {
outfile << a[i].getName() << " " << a[i].getNumber() << endl;
}
outfile.close();
cout << "保存成功!" << endl;
}
void load(string filename) {
ifstream infile(filename);
if (!infile) {
cerr << "无法打开文件!" << endl;
exit(1);
}
infile >> count;
for (int i = 0; i < count; i++) {
string name, number;
infile >> name >> number;
Mytel t(name, number);
add(t);
}
infile.close();
cout << "加载成功!" << endl;
}
};
int main() {
TelManager tm;
string filename;
cout << "请输入电话簿文件名:";
cin >> filename;
tm.load(filename);
int choice;
while (true) {
cout << "请选择操作:1-添加联系人 2-删除联系人 3-修改联系人 4-查找联系人 5-保存电话簿 6-退出" << endl;
cin >> choice;
switch (choice) {
case 1: {
string name, number;
cout << "请输入姓名:";
cin >> name;
cout << "请输入电话号码:";
cin >> number;
Mytel t(name, number);
tm.add(t);
break;
}
case 2: {
string name;
cout << "请输入姓名:";
cin >> name;
tm.remove(name);
break;
}
case 3: {
string name, number;
cout << "请输入姓名:";
cin >> name;
Mytel* t = tm.find(name);
if (t != NULL) {
cout << "请输入新的电话号码:";
cin >> number;
t->setNumber(number);
tm.update(name, *t);
}
break;
}
case 4: {
string name;
cout << "请输入姓名:";
cin >> name;
Mytel* t = tm.find(name);
if (t != NULL) {
cout << "电话号码为:" << t->getNumber() << endl;
}
break;
}
case 5: {
tm.save(filename);
break;
}
case 6: {
cout << "退出程序!" << endl;
return 0;
}
default:
cout << "输入有误,请重新输入!" << endl;
break;
}
}
}
```
在上述代码中,Mytel类表示单个电话号码,包含姓名和电话号码两个成员变量,提供了设置和获取姓名和电话号码的函数。TelManager类负责管理电话号码,包含一个Mytel类型的数组以及一个count计数器,提供了添加、删除、修改、查找等功能。在TelManager中,使用add函数向数组中添加电话号码,使用remove函数从数组中删除电话号码,使用update函数修改电话号码,使用find函数查找电话号码。此外,还提供了save和load函数,用于将电话簿保存到磁盘和从磁盘加载电话簿。在main函数中,首先要求用户输入电话簿文件名,并根据文件内容初始化TelManager对象。然后,循环提示用户选择操作,并根据用户输入调用对应的函数。
阅读全文