#include <bits/stdc++.h> using namespace  std; class Informat { private:     string phone;     string address;     string name; public:     Informat():name(""),phone("12345"),address("Anywhere"){}     Informat(string a,string b,string q):name(a),address(q){ setpho(b);}     void setpho(string a)     {         while(a.length()!=11&&a.length()!=5){             cout<<"Please Key Again"<<endl;             cin>>a;         }         phone=a;     }     void setname(string a){ name=a;}     void setaddr(string a){address=a;}     string getpho() const{return phone;}     string getname()const{return name;}     string getaddr()const{return address;}     friend ostream&operator<<(ostream &out,const Informat &ob);     friend istream&operator>>(istream &in, Informat &ob); }; ostream&operator<<(ostream &out,const Informat &ob){     out<<ob.name<<" "<<ob.phone<<" "<<ob.address<<" ";     return out; } istream &operator>>(istream &in,Informat &ob) {     in>>ob.name>>ob.phone;     while(ob.phone.length()!=11&&ob.phone.length()!=5)     {             cout<<"Please Key Again"<<endl;             in>>ob.phone;     }     in>>ob.address;     return in; } /*int main() {     Informat demo("李彦宏","1","中国北京");     cout<<demo<<endl;     Informat demo2;     string tem1,tem2,tem3;    cin>>demo;    cout<<demo.getname()<<' '<<demo.getpho()<<' '<<demo.getaddr()<<endl;    cin>>tem1>>tem2>>tem3;     demo2.setname(tem1);     demo2.setpho(tem2);     demo2.setaddr(tem3);     cout<<demo2<<endl;; }*/ class Contacts {     vector<Informat>infor;     map<string,int>na;     map<string,int>ph; public:     Contacts()     {             load();     }     void create()     {         Informat tem;         cin>>tem;         infor.push_back(tem);         if(!na.insert(make_pair(tem.getname(),infor.size()-1)).second)         {             cout<<infor[na.find(tem.getname())->second]<<endl;             cout<<"Please Key \"Yes\" To Creat name(2) Or Key\"No\"  Update and overwrite "<<endl;             string flag;             cin>>flag;             while(flag!="NO"&&flag!="No"&&flag!="no"&&flag!="YES"&&flag!="yes"&&flag!="Yes") cin>>flag;             if(flag=="NO"||flag=="No"||flag=="no")             {                 na.erase(tem.getname());                 na.insert(make_pair(tem.getname(),infor.size()-1));             }             else {                 tem.setname(tem.getname()+" ");                 na.insert(make_pair(tem.getname(),infor.size()-1));             }         }         if(!ph.insert(make_pair(tem.getpho(),infor.size()-1)).second)         {             cout<<infor[ph.find(tem.getpho())->second]<<endl;             cout<<"Please Key \"Yes\" To Creat Phone(2) Or Key\"No\"  Update and overwrite "<<endl;             string flag;             cin>>flag;             while(flag!="NO"&&flag!="No"&&flag!="no"&&flag!="YES"&&flag!="yes"&&flag!="Yes") cin>>flag;             if(flag=="NO"||flag=="No"||flag=="no")             {                 na.erase(tem.getpho());                 na.insert(make_pair(tem.getpho(),infor.size()-1));             }             else {                 tem.setpho(tem.getpho()+"2");                 na.insert(make_pair(tem.getpho(),infor.size()-1));             }         }     }     void find1(string a)     {         if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null"){             cout<<infor[ph.find(a)->second]<<endl;             if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){                 cout<<infor[na.find(a)->second]<<endl;                 return ;             }         }       else  if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){             cout<<infor[na.find(a)->second]<<endl;         }         else cout<<"查无此人/号"<<endl;     }     void modifyaddr(string a )     {         string w;         if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null"){          cout<<infor[ph.find(a)->second]<<endl;             cin>>w;             {                if(w=="No"||w=="no"||w=="NO")        if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){            cout<<infor[na.find(a)->second]<<endl;            cin>>w;      infor[na.find(a)->second].setaddr(w);      return ;     }                else {                     infor[na.find(a)->second].setaddr(w);                     return ;                }             }         }         if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){    cout<<infor[na.find(a)->second]<<endl;    cin>>w;    infor[na.find(a)->second].setaddr(w);    return ;   }         else cout<<"查无此人"<<endl;     }     void modifyname(string a )     {         string w;         if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null"){         cout<<infor[na.find(a)->second]<<endl;         cin>>w;         infor[na.find(a)->second].setname(w);         na.insert(make_pair(w,na.find(a)->second));         na.erase(a);         }         else cout<<"查无此人"<<endl;     }     void modifyphone(string a )     {         string w;         if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null"){         cout<<infor[ph.find(a)->second]<<endl;         cin>>w;         infor[ph.find(a)->second].setpho(w);         ph.insert(make_pair(w,ph.find(a)->second));         ph.erase(a);         }         else cout<<"查无此号"<<endl;     }     void delph(string a)     {          if(ph.find(a)!=ph.end()&&infor[ph.find(a)->second].getpho()!="Null")          {               infor[ph.find(a)->second].setpho("Null");               infor[ph.find(a)->second].setname("Null");          }           else cout<<"查无此号"<<endl;     }     void delna(string a)     {          if(na.find(a)!=na.end()&&infor[na.find(a)->second].getname()!="Null")          {               infor[na.find(a)->second].setpho("Null");               infor[na.find(a)->second].setname("Null");          }           else cout<<"查无此人"<<endl;     }     ~ Contacts()     {             save();     }     void load()     {         ifstream in("d:\\shuju.txt",ios::in);         infor.clear();         na.clear();         ph.clear();         if(!in)  return ;         Informat ob;         while(in>>ob)         {             infor.push_back(ob);             na.insert(make_pair(ob.getname(),infor.size()-1));             ph.insert(make_pair(ob.getpho(),infor.size()-1));             in.close();         }     }     void save()     {         ofstream out("d:\\shuju.txt",ios::out);         for(auto po=infor.begin();po!=infor.end();po++)         {             if((*po).getname()!="Null")      out<<*po;         }         out.close();     } }; int main() {         Contacts ob;         ob.create();         ob.create();         ob.create();         string tem;         cin>>tem;         ob.find1(tem);         cin>>tem;         ob.find1(tem);         cin>>tem;       ob.  modifyaddr(tem);         ob.find1(tem);         cin>>tem;       ob.  modifyaddr(tem);         ob.find1(tem);         cin>>tem;        ob. modifyname(tem);         ob.find1(tem);         cin>>tem;       ob.  modifyname(tem);         ob.find1(tem);         cin>>tem;        ob. modifyphone(tem);         ob.find1(tem);         cin>>tem;         ob. modifyphone(tem);         ob.find1(tem);         cin>>tem;         ob. delph(tem);         ob.find1(tem);         cin>>tem;         ob.  delph(tem);         ob.find1(tem);         cin>>tem;         ob.  delna(tem);         ob.find1(tem);         cin>>tem;         ob.delna(tem);         ob.find1(tem); }