#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); }
简易通讯录类实现原理
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
简易通讯录
简易通讯录制作
数组 i++ 封装 c++ 指针 -
C++实验:简易通讯录
编写程序
结构体 简易通讯录 #include ios i++