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;
}
#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;
}
相关文章推荐
- c++:vector类编写简易通讯录
- 利用C/C++编写node.js原生模块的方法教程
- Java中利用通讯API编写短信软件
- [z]c++ 和 java 利用protobuf 通讯
- 【C++】【网络】利用Socket 编写SMTP 发送邮件程序
- C++编写简易的飞机大战
- 从易到难编写C++程序,(7)问题:利用问题(6)的发牌,实现24点游戏
- C++ 利用STL中vector实现通讯录功能Console
- Java利用JNI调用c++代码简易例子演示
- 不再依赖A*,利用C++编写全新寻路算法
- 期末考试 编程题#11:数据库内的学生信息(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;STL编写)
- 问题:利用 C++的各种控制语句编写一个万年历程序。 要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一 般挂历上的格式。
- C++编写利用数据结构中队列(Queue)打印出用户所指定长度的杨辉三角
- C++ 利用socket实现TCP,UDP网络通讯
- 不再依赖A*,利用C++编写全新寻路算法
- 利用socket编写windows和linux通讯程序
- 利用socket编写windows和linux通讯程序
- 初探利用C++的STL实现数学四则运算计算结果
- 利用vs 2017 编写 C++程序常用调试工具快捷键
- 利用通讯api编写短信软件