实现电话簿管理程序, Mytel类描述单个电话号码,TelManager类负责管理电话号码。把增、删、改、查功能封装到该类中。要求电话号码能从磁盘读写。

1.设计原理:

1)类的设计,运用Mytel类和TelManager类的组合关系管理电话号码;在类外定义电话号码的增删查改等功能函数;

2)文件流的操作,用ifstream以输入的方式打开文件加载数据;用ofstream以输出的方式打开文件并保存数据;

3)用到容器vector类似数组表示法表达列表元素的对象;

2.设计步骤:

1)构造一个Mytel类,用来描述单个电话号码;

class Mytel

{

public:

void getdata()

{

    cin>>name>>telno;

}

void setname(char a[]){strcpy(name,a);}

void settelno(char a[]){strcpy(telno,a);}

void disp()

{

    cout<<name<<setw(12)<<telno<<endl;

}

    string getname()

{

     return name;

}

string gettelno()

{

return telno;

}

private:

    char name[12];

    char telno[12];

};

 2)设计一个TelManager类,来存多个电话号码。Vector<Mytel> a;//Mytel类向量,长度为零;在类中分别声明具有增、删、查、改等功能的公有成员函数;定义静态成员count来统计电话号码的数量;

class telManager

{

private:

vector<Mytel> a;

static int count; //电话号码数量

public:

void loadfile(); //加载数据

void display(); //输出数据

void search(); //按姓名查询

void add(); //添加数据

void writefile(); //保存数据

void del(); //按姓名删除数据

void modify(); // 按姓名修改号码

};

int telManager::count=0;

3)对类中的函数进行定义;

4)编写主函数,先构建一个菜单,用while(1)作真循环,switch语句中包含case(0-1)的各个功能选择;完成程序的编写;

完整代码如下:

#include<iostream>

#include<fstream>

#include <string>

#include<vector>

#include <iomanip>

#include <cstring>

using namespace std;

class Mytel

{

public:

void getdata()

{

    cin>>name>>telno;

}

void setname(char a[]){strcpy(name,a);}

void settelno(char a[]){strcpy(telno,a);}

void disp()

{

    cout<<name<<setw(12)<<telno<<endl;

}

    string getname()

{

     return name;

}

string gettelno()

{

return telno;

}

private:

    char name[12];

    char telno[12];

};

class telManager

{

private:

vector<Mytel> a;

static int count; //电话号码数量

public:

void loadfile(); //加载数据

void display(); //输出数据

void search(); //按姓名查询

void add(); //添加数据

void writefile(); //保存数据

void del(); //按姓名删除数据

void modify(); // 按姓名修改号码

};

int telManager::count=0;

void telManager::loadfile()

{

ifstream input("phone.txt");

if(!input)

{

cout<<"File cannot be opened."<<endl;

return ;

}

Mytel s;

char name[12],telno[12];

while(input>>name>>telno)

{

s.setname(name);s.settelno(telno);

a.push_back(s);//a[n]=s;

count++;

}

input.close( );

}

void telManager::display()

{

int i;

cout<<"姓名"<<setw(8)<<"电话"<<endl;

for(i=0;i<a.size();i++)

{

cout<<a[i].getname()<<setw(12)<<a[i].gettelno()<<endl;

}

cout<<"电话号码总数为:"<<count<<endl;

}

void telManager::search()

{

string sname;

Mytel one;

int i;

cout<<"输入要查询的姓名(可只输入姓氏):";

cin>>sname;

cout<<"输出查询结果:"<<endl;

cout<<"姓名"<<setw(8)<<"电话"<<endl;

for(i=0;i<a.size();i++)

{

if(a[i].getname()==sname)

a[i].disp( );

}

}

void telManager::add()

{

  Mytel one;

cout<<"姓名"<<setw(8)<<"电话"<<endl;

one.getdata();

a.push_back(one);

count++;

}

void telManager::del()

{

string sname;

Mytel one;

cout<<"输入要删除的姓名(可只输入姓氏):";

cin>>sname;

for(int i=0;i<a.size();i++)

{

if(a[i].getname()==sname)

{

a.erase(a.begin()+i);

count--;

}

}

}

void telManager::modify()

{

string sname;

char stelno[12];

Mytel one;

cout<<"输入要修改号码的人的姓名及修改后的号码:";

cin>>sname>>stelno;

for(int i=0;i<a.size();i++)

{

if(a[i].getname()==sname)

{

a[i].settelno(stelno);

}

}

}

void telManager::writefile()

{

int i;

ofstream file("phone.txt" );

for(i=0;i<a.size();i++)

file<<a[i].getname()<<"\t"<<a[i].gettelno()<<endl;

file.close();

}

int main()

{

int sel;

telManager m;

while(1)

{

cout<<"***********************电话薄管理系统**********************";

cout<<endl<<endl;

cout<<"1:加载数据      2:输出数据      3:按姓名查询     4:添加数据" <<endl

<<"5:按姓名删除    6:修改数据      7:保存数据       0:退出"<<endl;

cout<<"***********************************************************";

        cout<<"\n请选择(0-7)";

cin>>sel;

switch(sel)

{

case 1:m.loadfile();break;

            case 2:m.display();break;

    case 3:m.search();break;

    case 4:m.add();break;

case 5:m.del();break;

case 6:m.modify();break;

case 7:m.writefile();break;

    case 0:exit(1);

}

    }

return 0;

}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是基于Python实现电话管理程序: ```python import json class Mytel: def __init__(self, name, number): self.name = name self.number = number def __repr__(self): return f"{self.name}: {self.number}" def to_dict(self): return {"name": self.name, "number": self.number} class TelManager: def __init__(self, filepath): self.filepath = filepath self.telbook = [] self.load_telbook() def load_telbook(self): try: with open(self.filepath, "r") as f: data = json.load(f) for entry in data: mytel = Mytel(entry["name"], entry["number"]) self.telbook.append(mytel) except FileNotFoundError: pass def save_telbook(self): with open(self.filepath, "w") as f: data = [entry.to_dict() for entry in self.telbook] json.dump(data, f) def add_entry(self, name, number): mytel = Mytel(name, number) self.telbook.append(mytel) self.save_telbook() def remove_entry(self, name): self.telbook = [entry for entry in self.telbook if entry.name != name] self.save_telbook() def update_entry(self, name, number): for entry in self.telbook: if entry.name == name: entry.number = number break self.save_telbook() def get_entry(self, name): for entry in self.telbook: if entry.name == name: return entry return None def list_entries(self): for entry in self.telbook: print(entry) ``` 上述代码,`Mytel`类描述单个电话号码,包含联系人姓名和电话号码。`to_dict`方法将`Mytel`对象转换成字典,方便在保存电话薄时使用。 `TelManager`类负责管理电话号码,包括从磁盘取、保存到磁盘加、除、修询、列出所有电话号码功能。在初始化时会磁盘上的电话薄文件,如果文件不存在则忽略。`add_entry`、`remove_entry`、`update_entry`和`get_entry`分别用于加、除、修询单个电话号码。`list_entries`用于列出所有电话号码。 下面是一个简单的使用示例: ```python tel_manager = TelManager("telbook.json") tel_manager.add_entry("Alice", "123456") tel_manager.add_entry("Bob", "789012") tel_manager.list_entries() # 输出: # Alice: 123456 # Bob: 789012 tel_manager.remove_entry("Bob") tel_manager.update_entry("Alice", "111111") alice = tel_manager.get_entry("Alice") if alice: print(alice.number) # 输出:111111 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值