c++利用STL编写简易通讯录
来源:互联网 发布:销售网络建设与管理 编辑:程序博客网 时间:2024/06/07 16:25
#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 FindMember(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;
}
#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 FindMember(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;
}
阅读全文
0 0
- c++利用STL编写简易通讯录
- C语言编写简易通讯录
- c++:vector类编写简易通讯录
- sqlite3 编写简易通讯录
- 【C语言】 简易通讯录
- C语言简易通讯录
- c语言-简易通讯录
- 完成 简易通讯录 的编写
- 利用C语言编写一个通讯录,包括用户界面
- C编写的通讯录
- C语言通讯录编写
- C语言实现简易通讯录
- C语言的简易通讯录
- 【简易通讯录】-----C语言实现
- C语言实现简易通讯录
- 简单数据库编写的简易通讯录
- Xcode利用CoreData编成简易内置通讯录
- 用C语言编写通讯录
- 网易编程题 交错01串
- Navicat远程连接到云服务器中的MySQL
- 随便写写
- mybatis-generator扩展-自定义代码注释
- VIM命令备忘录
- c++利用STL编写简易通讯录
- RIP1 与RIP2 对比
- LoopViewPager+LoopIndicator
- 我的学习路径
- Squares POJ2002 哈希的应用
- 控制进程结束的时候,后台进程信号处理
- fill_parent、wrap_content和match_parent的区别
- 阿里云新一代关系型数据库 PolarDB 剖析
- 华为机试题