您的位置:首页 > 编程语言 > C语言/C++

c++利用STL编写简易通讯录

2017-08-16 22:20 253 查看
#include<iostream>

#include<vector>

#include<string>

#include<map>

using namespace std;

//结构体

struct Msg

{
//构造函数
Msg();
Msg(int,const char*,const char*);
int id;
string name;
string tel;

};

Msg::Msg()

{

}

Msg::Msg(int i,const char* n,const char* t):id(i),name(n),tel(t)

{

}

bool operator==(Msg& m,Msg& g)

{
if(m.id==g.id && 0==m.name.compare(g.name) && 0==m.tel.compare(g.tel))
return true;
else
return false;

}

ostream& operator<<(ostream& output,Msg& g)

{
output<<g.id<<'\t';
output<<g.name<<'\t';
output<<g.tel<<'\t';

}

//初始化-(A-Z)

void InitRecord(map< char,vector<Msg> > & rec)//初始化

{
rec['@']=vector<Msg>();//不能识别的
char ch='A';
for(;ch<='Z';ch++)
{
rec[ch]=vector<Msg>();
//rec[key]=value;
}

}

//打印 首字母

void show(map<char,vector<Msg> >&rec)//显示所有人数据

{
map<char,vector<Msg> >::iterator the;

vector<Msg>::iterator va_the;

for(the=rec.begin();the!=rec.end();the++)//迭代器指向是元素(key_value)
{
va_the=the->second.begin();
if(the->second.size()>0)
{
cout<<the->first<<endl;
for(;va_the!=the->second.end();va_the++)
{
cout<<"   "<<"ID:"<<va_the->id<<'\t'\
        <<"姓名: "<<va_the->name<<'\t'\
  <<"电话: "<<va_the->tel<<'\t'\
  <<endl;
}
}
}

}

char charge(char ch)

{
if(ch>='A' && ch<='Z')
return ch;
else
return ch-32;

}

bool AddMember(map< char,vector<Msg> >& rec,struct Msg data)//增加成员

{
//查找
map< char,vector<Msg> >::iterator the;
the=rec.find( charge(data.name.at(0)) );
if(the==rec.end())
the=rec.begin();
//插入元素
the->second.push_back(data);
return true;

}

bool DelMember(map< char,vector<Msg> >& rec,struct Msg data)//删除指定人的数据

{
map< char,vector<Msg> >::iterator the;
the=rec.find( charge(data.name.at(0) ));

if(the==rec.end())
{
the=rec.begin();
}

vector<Msg>::iterator va_the;

va_the=the->second.begin();

for(;va_the!=the->second.end();va_the++)
{
if(*va_the==data)
{
the->second.erase(va_the);
cout<<"删除成功"<<endl;
return true;
}
}
return false;

}

bool FindMembe
a421
r(map< char,vector<Msg> >& rec,string name)//查找指定人的数据

{
map< char,vector<Msg> >::iterator the;
the=rec.find( charge(name.at(0)));

vector<Msg>::iterator va_the;

va_the=the->second.begin();

int i=0;

for(;va_the!=the->second.end();va_the++)
{
if(0==(*va_the).name.compare(name))
{
cout<<"查询结果:"<<endl<<"ID:"<<(*va_the).id<<'\t'<<"姓名:"<<(*va_the).name<<'\t'<<"电话:"<<(*va_the).tel<<endl;
i++;
}
}
if(0==i)
{
cout<<"查无此人!"<<endl;
return false;
}
else
return true;

}

bool FindFname(map< char,vector<Msg> >& rec,char C)//查找名字首字母相同的人的数据

{
map< char,vector<Msg> >::iterator the;

the=rec.find(charge(C));

if(the==rec.end())
{
cout<<"No"<<endl;
return false;
}
vector<Msg>::iterator va_the;

va_the=the->second.begin();

for(;va_the!=the->second.end();va_the++)
{
cout<<*va_the<<endl;
}
return true;

}

bool ModifyMember(map< char,vector<Msg> >& rec,string name)//修改指定人的数据

{
map< char,vector<Msg> >::iterator the;
the=rec.find( charge(name.at(0)));

vector<Msg>::iterator va_the;

va_the=the->second.begin();

int newid=0;
string newname;
string newtel;

for(;va_the!=the->second.end();va_the++)
{
if(0==(*va_the).name.compare(name))
{
cout<<"请输入新名称:";
cin>>newname;
cout<<"请输入新ID:";
cin>>newid;
cout<<"请输入新号码:";
cin>>newtel;

(*va_the).id=newid;
(*va_the).name=newname;
(*va_the).tel=newtel;
return true;

}
}
return false;

}

int main()

{

//键值对
map< char,vector<Msg> > record;

//初始化
InitRecord(record);

AddMember(record,Msg(170201,"#123","1234567"));
AddMember(record,Msg(170201,"&123","1234567"));
AddMember(record,Msg(170202,"lixin","1234567"));
AddMember(record,Msg(170203,"xiaoxin","1234567"));
AddMember(record,Msg(170204,"lijiajun","1234567"));
AddMember(record,Msg(170205,"caijiahao","1234567"));
AddMember(record,Msg(170206,"aidi","1234567"));
AddMember(record,Msg(170207,"clearlove","1234567"));
AddMember(record,Msg(170208,"faker","1234567"));
AddMember(record,Msg(170209,"zhansan","1234567"));
AddMember(record,Msg(1702010,"zhansanfeng","1234567"));

//遍历
cout<<"删除前:"<<endl;
show(record);

cout<<endl<<endl<<"删除后:"<<endl;
DelMember(record,Msg(170204,"lijiajun","1234567"));
show(record);

FindMember(record,"asd");

FindFname(record,'G');

ModifyMember(record,"lixin");
show(record);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: