zoukankan      html  css  js  c++  java
  • 简易通讯录类实现原理

    #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);
    }
    
  • 相关阅读:
    React 生命周期
    css 多行文本以...代替
    微信JSSDK配置文件说明
    zepto阻止事件冒泡
    PHP 图片处理PNG颜色丢失
    React 学习笔记(一)
    webpack webpack-dev-server使用指南
    为什么需要使用模块打包工具?
    如何实现微信公户绑定公众号业务
    iOS 手势
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798950.html
Copyright © 2011-2022 走看看