精华内容
下载资源
问答
  • 2019-09-12 15:28:20
    #include<iostream>
    #include<string>
    #include<fstream>
    #include<iomanip>
    using namespace std;
    
    #define MAXPEOPLE 100
    static int scount=0;
    class telephone
    {
        char name[20];                                         //姓名
        char number[12];                                       //电话号码
        char addr[20];                                         //地址
    	
    public:
        
        telephone(){};
    	
        void instial(char na[20],char nu[20],char ad[20]){
    	 strcpy_s(name,na);
         strcpy_s(number,nu);
    	 strcpy_s(addr,ad);
    };
    
        void setname(char na[20]){
    		strcpy_s(name,na);
    	}
             
    	void setnumber(char nu[20]){
    		strcpy_s(number,nu);
    	}
    	void setaddr(char ad[20]){
    		 strcpy_s(addr,ad);
    	}
    
       char*  getname()                                       //获得姓名
    {
        return name;//数组返回类型通过指针来实现
    };
    	 char*  getnumber()                                     //获得电话号码
    {
        return number;
    };
        char*  getaddr(){
    
    	return addr;
    };
    
    };
    
    class manage{
    
    	 telephone tel[MAXPEOPLE];
    public:
    	 
    	
         void input();                                         //添加1
    	 void read();                                          //读入2
    	 void save();                                          //保存3
    	 void search();                                        //查询4
    	 void sort();                                          //排序5
         void insert();                                        //插入6
    	 void Delete();                                        //删除7
    	 void change();                                       //修改8
         void display();                                       //显示0
       
    
    };
    
    void menu()                                                     //定义菜单函数
    {
        cout<<"***********1.添加联系人*************"<<endl;
        cout<<"***********2.读入联系人信息*********"<<endl;
        cout<<"***********3.保存联系人信息*********"<<endl;
        cout<<"***********4.查询联系人*************"<<endl;
        cout<<"***********5.排序联系人*************"<<endl;
    	cout<<"***********6.插入联系人*************"<<endl;
        cout<<"***********7.删除联系人*************"<<endl;
    	cout<<"***********8.修改联系人*************"<<endl;
        cout<<"***********0.显示联系人*************"<<endl;
    }
    
    void manage::input(){                    //添加1
    	char name[20],number[20],addr[20];
    	cout<<"输入姓名:"<<endl;
        cin>>name;
         
        cout<<"输入号码:"<<endl;
        cin>>number;
    
    	 cout<<"输入单位:"<<endl;
        cin>>addr;
    	tel[scount].instial(name,number,addr);
    	scount++;
    	display();
    }
      
    void manage::read()     {   //读入2
    	 
    	 ifstream ifile;
    	 ifile.open("e:\\tel.txt");
    	 for(int i=0;!ifile.eof();i++){
    	ifile>>tel[i].getname()>>tel[i].getnumber()>>tel[i].getaddr();
    	 scount++; 
    	 }
    	
    	 ifile.close();
        cout<<"读入成功"<<endl;
    	display();
     }
    
                                           
        
     void manage::save()
    {                                                  //保存3
    	 ofstream ofile;
    	 ofile.open("e:\\tel1.txt");
        
        
        for(int i=0;i<scount;i++)
        {
            
      ofile<<"名字:"<<tel[i].getname()<<setw(10)<<"号码:"<<tel[i].getnumber()<<setw(10)<<"单位:"<<tel[i].getaddr()<<endl;
      
        }
    	
        ofile.close ();
    }
    
     void manage::search(){                                        //查询4
    	 char name1[20];
    	 char name2[20];
    	 int q=-1;
    	 cout<<"请输入要查询人姓名:"<<endl;
    	 cin>>name1;
    	  for(int i=0;i<scount;i++)
        {
    		strcpy_s(name2,tel[i].getname());
    		if(strcmp(name1,name2)==0){
    			cout<<"名字:"<<tel[i].getname()<<setw(10)<<"号码:"<<tel[i].getnumber()<<setw(10)<<"单位:"<<tel[i].getaddr()<<endl;  q=1;
    		}
    	
    	}
    	  if(q!=1) {cout<<"该用户不存在!"<<endl;}
    	  
     }
    
    void manage::sort(){                                          //排序5
    	telephone var;
     for(int i=0;i<scount;i++){
         for(int j=i+1;j<scount;j++){
        
    		 if(strcmp(tel[j].getnumber(),tel[i].getnumber())<0){
    			 var=tel[i];tel[i]=tel[j];tel[j]=var;
    		 }
    	 }
      }
    	display();
    }
    
    void manage::insert(){                                        //插入6
    	int h;
    	char name[20],number[20],addr[20];
    
    	cout<<"请选择插入到第几行"<<endl;
    	cin>>h;
    
    	cout<<"输入姓名:"<<endl;
        cin>>name;
         
        cout<<"输入号码:"<<endl;
        cin>>number;
    
    	cout<<"输入单位:"<<endl;
        cin>>addr;
    	scount++;
    	telephone var;
    
    	for(int i=scount-1;i>h-1;i--){   //关键排序
    		tel[i]=tel[i-1];
    	}
    
    	tel[h-1].instial(name,number,addr);
    	display();
    }
    void manage::Delete(){                                        //删除7
    	int index=0;
    	cout<<"请输入要删除的号码数:"<<endl;
    	cin>>index;
    	 for(int i=index-1;i<scount;i++)
        {
    		tel[i]=tel[i+1];
    	 }
    	 scount=scount-1;
    }
    void manage::change(){                                       //修改8
    	char name[20];int index=0;
    	char number[20],addr[20];int q=-1;
    	cout<<"请输入要修改人姓名:"<<endl;
    	 cin>>name;
    	  for(int i=0;i<scount;i++)
        {
    		if(strcmp(name,tel[i].getname())==0){
    			index=i; q=1;
    		}
    	}
    	  if(q!=1) {
    		  index=scount;
    		  scount++;
    		  cout<<"联系人不存在,自动创建新用户!"<<endl;
    	      tel[index].setname(name);
    	  }
    	  cout<<"请输入电话:"<<endl;
    	  cin>>number;
    	  tel[index].setnumber(number);
    	   cout<<"请输入地址:"<<endl;
    	  cin>>addr;
    	  tel[index].setaddr(addr);
    	  cout<<"修改成功!"<<endl;
    	  display();
    }
    void manage::display(){                                       //显示0
    
    	 for(int i=0;i<scount;i++)
        {
            
     cout<<i+1<<setw(10)<<"名字:"<<tel[i].getname()<<setw(10)<<"号码:"<<tel[i].getnumber()<<setw(10)<<"单位:"<<tel[i].getaddr()<<endl;
      
        }
    
    }
    
    	
    
    int main()
    {
    	manage manager;                                        //读入选项
        while(1)
        {
    		int choice;
    		
            menu();
            cout<<"please input your choice:";
            cin>>choice;
                switch(choice)
            {
    			case 1:manager.input(); break;
    		    case 2:manager.read(); break;
                case 3:manager.save();break;
    		    case 4:manager.search();break;
                case 5:manager.sort(); break;
    	       	case 6:manager.insert();break;
    		    case 7:manager.Delete();break;
                case 8:manager.change();break;
    	        case 0:manager.display(); break;
    	        default:break;
    			}      
        }
    	return 0;
    }
    
    
    更多相关内容
  • 通讯录管理系统C++

    2018-04-21 08:59:00
    通讯录管理系统C++编写,利用链表对通讯录进行增加、删除、修改、查询
  • 通讯录管理系统C++

    2021-08-01 15:56:11
    系统中需要实现的功能如下: * 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 * 显示联系人:显示通讯录中所有联系人信息 * 删除联系人:按照姓名进行删除指定...
  • 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: * 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 * 显示联系人:显示通讯录中所有...
  • 本项目主要利用C++来实现一个通讯录管理系统,系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录100人 显示联系人:显示通讯录中所有联系人...
  • 适合c++初学者
  • 本文实例为大家分享了C++通讯录管理系统的具体代码,供大家参考,具体内容如下 #include #include using namespace std; #define MAX 1000 struct Person { string m_Name; int m_Sex; int m_Age; string m_...
  • 11 通讯录管理系统C++

    2022-01-17 20:41:38
    通讯录管理系统,根据黑马C++入门视频学习的,做了少许改动。
  • } 封装添加联系人函数 //添加联系人的函数 void addpeson(addressbook * abs) { //判断通讯录是否满了,满了不加 if(abs->size == 1000){ cout通讯录已满,无法添加加"; return; } //未满则...


    前言

    功能:
    1.添加联系人:新建联系人信息(包括姓名,性别,电话,年龄,家庭住址)最多记录一千人
    2.显示联系人:显示通讯录中所有联系人的信息
    3.删除联系人:按照姓名直接指定删除联系人
    4.查找联系人:按照姓名直接查找联系人信息
    5.修改联系人:按照姓名重新修改指定联系人信息
    6.清空联系人:格式化通信录
    7.退出通讯录:退出当前通讯录


    制作

    1.菜单函数

    代码如下(示例):

    void show()
    {                              //菜单页面 
    	cout<<"************************"<<endl;
    	cout<<"***** 1.添加联系人 *****"<<endl;
    	cout<<"***** 2.显示联系人 *****"<<endl;
    	cout<<"***** 3.删除联系人 *****"<<endl;
    	cout<<"***** 4.查找联系人 *****"<<endl;
    	cout<<"***** 5.修改联系人 *****"<<endl;
    	cout<<"***** 6.清空联系人 *****"<<endl;
    	cout<<"***** 0退出通讯录  *****"<<endl;
    	cout<<"************************"<<endl;
    	}
    

    2.框架搭建

    用 switch分支结构完成框架搭建。
    用户选择0 是不会退出程序也不会有其他操作。
    代码如下(示例):

    int main()
    {	
    	show(); 
    	int select = 0;
    	while(1){
    	
    	cin>>select;
    	switch(select)
    	{
    		case 1:             //1.添加联系人 
    			break;
    		case 2:             //2.显示联系人 
    			break;
    		case 3:             //3.删除联系人 
    			break;
    		case 4:             //4.查找联系人 
    			break;
    		case 5:             //5.修改联系人 
    			break;
    		case 6:             //6.清空联系人 
    			break;
    		case 0:             //0.退出通讯录 
    		cout<<"***** 欢迎下次使用 *****"<<endl; 
    			break;
    	 } 
    }
    	system("pause");//防止闪退 
    	return 0;
    } 
    

    3.添加联系人

    上限为1000,包含姓名,性别,电话,年龄,家庭住址信息;
    实现步骤:
    1.设计联系人结构体
    2.设计通讯录结构体
    3.main函数中创建通讯录
    4.封装添加联系人
    5.测试添加联系人功能

    代码如下(示例):

    		//创建联系人结构体
    	struct person
    	{
    		string name;//名字 
    		int sex;    //性别 
    		int age;    //年龄 
    		string phone;//电话 
    		string add;//地址 
    	 };
    	 //通讯录结构体 
    	 struct addressbook
    	 {
    	 	struct person arr[max];
    	 	int size;
    	  }; 
    		
    	  
    

    main函数创建通讯录

    int main()
    {	
    	//创建通讯录变量
    	 addressbook abs;
    	 //初始化通讯录人数
    	 abs.size =0;
    	show(); 
    	int select = 0;
    	while(1){
    	
    	cin>>select;
    	switch(select)
    	{
    		case 1:           //1.添加联系人 
    		addpeson(&abs);
    			break;
    		case 2:           //2.显示联系人 
    			break;
    		case 3:           //3.删除联系人 
    			break;
    		case 4:           //4.查找联系人 
    			break;
    		case 5:           //5.修改联系人 
    			break;
    		case 6:           //6.清空联系人 
    			break;
    		case 0:           //0.退出通讯录 
    		cout<<"***** 欢迎下次使用 *****"<<endl; 
    			break;
    	 } 
    }
    	system("pause");//防止闪退 
    	return 0;
    } 
    

    封装添加联系人函数

    	 //添加联系人的函数
    	 void addpeson(addressbook * abs)
    	 {
    	 	//判断通讯录是否满了,满了不加
    		  if(abs->size == 1000){
    		  cout<<"通讯录已满,无法添加加"<<endl;
    		   return; 
    	    }
    	    //未满则添加新人 
    	    else{
    	    	//添加人的姓名
    	    	string name;
    			cout<<"请输入姓名"<<endl;
    			cin>>name; 
    			abs->arr[abs->size].name =name;
    			//性别
    			string sex; 
    			cout<<"请输入性别"<<endl;
    			cin>>sex; 
    			abs->arr[abs->size].sex =sex;
    			int age;
    			cout<<"请输入年龄"<<endl;
    			cin>>age;
    			abs->arr[abs->size].age =age;	  
    			string phone; 
    			cout<<"请输入电话"<<endl;
    			cin>>phone;
    			abs->arr[abs->size].phone =phone;
    			string address;
    			cout<<"请输入住址"<<endl;
    			cin>>address;
    			abs->arr[abs->size].address =address;
    			 //更新通讯录人数
    			 abs->size++;
    			 cout<<"添加成功"<<endl;
    			 system("pause"); 
    			 system("cls");//清屏操作 
    		}
    	  } 
    

    测试添加联系人
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    3.显示联系人

    代码如下

     void showperson(addressbook * abs)
    	   {
    	   	//判断当前通讯录是不是空的 
    	   	if(abs->size == 0){
    		  cout<<"通讯录为空,请添加加"<<endl;
    		   return; 
    	    }
    	    else{
    	    	for(int i=0;i<abs->size;i++)
    	    	cout<<"姓名:"<<abs->arr[i].name<<"   性别:"<<abs->arr[i].sex<<"   年龄:"<<abs->arr[i].age<<"   电话:"<<abs->arr[i].phone<<"   住址:"<<abs->arr[i].address<<endl;
    		} 
    	   }
    

    4.删除联系人

    找到要删除的联系人在数组的坐标,让后面的信息把他覆盖达到删除的目的

    代码如下

     void deleteperson(addressbook * abs) 
    	   {
    	   	cout<<"请输入要删除的联系人"<<endl;
    	   	int j;
    	   	string name;
    	   	cin>>name;
    	   	j=isexist(abs,name);
    		   if(j==-1)
    		   {
    		   	cout<<"查无此人"<<endl; 
    		   }
    		   else//查到了,数据迁移进行覆盖,实现删除操作 
    		   {
    		   	
    			  		 for (int i = j; i < abs->size; i++)
    					   {
            				abs->arr[i] = abs->arr[i + 1];
    						}
    					
     
    			abs->size--;
    		   }
    		    
    	   }
    

    5.查找联系人

    代码如下

     //查找联系人 
    	   int isexist(addressbook * abs)
    	   {
    	    
    	   	string name;
    		cin>>name;
    	   	for(int i=0;i<abs->size;i++)
    	   	{
    	   		if(abs->arr[i].name==name){
    	   			//找到用户了
    				   return i;//返回在数组中的坐标 
    			   }
    			   
    		   }
    		   
    			   return -1;
    		   
    	   }
    

    6.修改联系人

    找到要修改的联系人在数组的坐标,把信息在输入一遍达到修改的目的

     //修改联系人
    	    
    	    void modifyperson(addressbook * abs) 
    	    {
    	    	cout<<"请输入要修改的联系人"<<endl;
    		   int j; 
    	   	j=isexist(abs);
    		   if(j==-1)
    		   {
    		   	cout<<"查无此人"<<endl; 
    		   }
    		   else//查到了,进行修改
    		   {
    		   	string name;
    			cout<<"请输入姓名"<<endl;
    			cin>>name; 
    			abs->arr[j].name =name;
    			//性别
    			string sex; 
    			cout<<"请输入性别"<<endl;
    			cin>>sex; 
    			abs->arr[j].sex =sex;
    			int age;
    			cout<<"请输入年龄"<<endl;
    			cin>>age;
    			abs->arr[j].age =age;	  
    			string phone; 
    			cout<<"请输入电话"<<endl;
    			cin>>phone;
    			abs->arr[j].phone =phone;
    			string address;
    			cout<<"请输入住址"<<endl;
    			cin>>address;
    			abs->arr[j].address =address;
    			cout<<"已修改"<<endl; 
    		   }
    		    
    		}
    
    
    

    6.清空通讯录

    	void clean(addressbook * abs)
    		{
    			abs->size=0;
    		}
    

    总结

    完整代码:

    #include<bits/stdc++.h>
    #define max 1000 
    using namespace std;
    void showmenu()
    {                              //菜单页面 
    	cout<<"************************"<<endl;
    	cout<<"***** 1.添加联系人 *****"<<endl;
    	cout<<"***** 2.显示联系人 *****"<<endl;
    	cout<<"***** 3.删除联系人 *****"<<endl;
    	cout<<"***** 4.查找联系人 *****"<<endl;
    	cout<<"***** 5.修改联系人 *****"<<endl;
    	cout<<"***** 6.清空联系人 *****"<<endl;
    	cout<<"***** 0.退出通讯录 *****"<<endl;
    	cout<<"************************"<<endl;
    	}
    	//创建联系人结构体
    	struct person
    	{
    		string name;//名字 
    		string sex;    //性别 
    		int age;    //年龄 
    		string phone;//电话 
    		string address;//地址 
    	 };
    	 //通讯录结构体 
    	 struct addressbook
    	 {
    	 	struct person arr[max];
    	 	int size;
    	  };
    	 //添加联系人的函数
    	 void addpeson(addressbook * abs)
    	 {
    	 	//判断通讯录是否满了,满了不加
    		  if(abs->size == 1000){
    		  cout<<"通讯录已满,无法添加加"<<endl;
    		   return; 
    	    }
    	    //未满则添加新人 
    	    else{
    	    	//添加人的姓名
    	    	string name;
    			cout<<"请输入姓名"<<endl;
    			cin>>name; 
    			abs->arr[abs->size].name =name;
    			//性别
    			string sex; 
    			cout<<"请输入性别"<<endl;
    			cin>>sex; 
    			abs->arr[abs->size].sex =sex;
    			int age;
    			cout<<"请输入年龄"<<endl;
    			cin>>age;
    			abs->arr[abs->size].age =age;	  
    			string phone; 
    			cout<<"请输入电话"<<endl;
    			cin>>phone;
    			abs->arr[abs->size].phone =phone;
    			string address;
    			cout<<"请输入住址"<<endl;
    			cin>>address;
    			abs->arr[abs->size].address =address;
    			 //更新通讯录人数
    			 abs->size++;
    			 cout<<"添加成功"<<endl;
    			 system("pause"); 
    			
    		}
    	  } 
    	  //显示联系人 
    	   void showperson(addressbook * abs)//把地址给了指针,就能用->了 
    	   {
    	   	//判断当前通讯录是不是空的 
    	   	if(abs->size == 0){
    		  cout<<"通讯录为空,请添加加"<<endl;
    		   return; 
    	    }
    	    else{
    	    	for(int i=0;i<abs->size;i++)
    	    	cout<<"姓名:"<<abs->arr[i].name<<"   性别:"<<abs->arr[i].sex<<"   年龄:"<<abs->arr[i].age<<"   电话:"<<abs->arr[i].phone<<"   住址:"<<abs->arr[i].address<<endl; 
    		} 
    	   }
    	   //查找联系人 
    	   int isexist(addressbook * abs)
    	   {
    	    
    	   	string name;
    		cin>>name;
    	   	for(int i=0;i<abs->size;i++)
    	   	{
    	   		if(abs->arr[i].name==name){
    	   			//找到用户了
    				   return i;//返回在数组中的坐标 
    			   }
    			   
    		   }
    		   
    			   return -1;
    		   
    	   }
    	   //删除指定联系人
    	   void deleteperson(addressbook * abs) 
    	   {
    	   	cout<<"请输入要删除的联系人"<<endl;
    		   int j; 
    	   	j=isexist(abs);
    		   if(j==-1)
    		   {
    		   	cout<<"查无此人"<<endl; 
    		   }
    		   else//查到了,数据迁移进行覆盖,实现删除操作 
    		   {
    		   	
    			  		 for (int i = j; i < abs->size; i++)
    					   {
            				abs->arr[i] = abs->arr[i + 1];
    						}
    					
     
    			abs->size--;
    			cout<<"已删除"<<endl; 
    		   }
    		    
    	   }
    	   //修改联系人
    	    
    	    void modifyperson(addressbook * abs) 
    	    {
    	    	cout<<"请输入要修改的联系人"<<endl;
    		   int j; 
    	   	j=isexist(abs);
    		   if(j==-1)
    		   {
    		   	cout<<"查无此人"<<endl; 
    		   }
    		   else//查到了,进行修改
    		   {
    		   	string name;
    			cout<<"请输入姓名"<<endl;
    			cin>>name; 
    			abs->arr[j].name =name;
    			//性别
    			string sex; 
    			cout<<"请输入性别"<<endl;
    			cin>>sex; 
    			abs->arr[j].sex =sex;
    			int age;
    			cout<<"请输入年龄"<<endl;
    			cin>>age;
    			abs->arr[j].age =age;	  
    			string phone; 
    			cout<<"请输入电话"<<endl;
    			cin>>phone;
    			abs->arr[j].phone =phone;
    			string address;
    			cout<<"请输入住址"<<endl;
    			cin>>address;
    			abs->arr[j].address =address;
    			cout<<"已修改"<<endl; 
    		   }
    		    
    		}
    		void clean(addressbook * abs)
    		{
    			abs->size=0;
    		}
    int main()
    {	
    	showmenu();
    	//创建通讯录变量
    	addressbook abs;//abs是对象,不是指针哦 
    	 //初始化通讯录人数
    	abs.size =0; 
    	int select = 0;
    	while(1){
    	cout<<"请输入你的选项"<<endl;
    	cin>>select;
    	cin.clear();
    	cin.ignore();
    	switch(select)
    	{
    		
    		case 1:           //1.添加联系人 
    		{addpeson(&abs);
    			break;
    		}
    		case 2:           //2.显示联系人 
    		{showperson(&abs);
    			break;
    		}
    		case 3:           //3.删除联系人 
    		{deleteperson(&abs);
    			break;
    		}
    		case 4:           //4.查找联系人 
    		{
    		cout<<"请输入需要查找的联系人"<<endl;
    		int i;
    		i=isexist(&abs);
    		if(i==-1){
    			cout<<"查无此人"<<endl;
    		}
    		else{
    			cout<<"姓名:"<<abs.arr[i].name<<"   性别:"<<abs.arr[i].sex<<"   年龄:"<<abs.arr[i].age<<"   电话:"<<abs.arr[i].phone<<"   住址:"<<abs.arr[i].address<<endl;//不是指针不能用-> 
    
    		}
    		break;
    		}
    			
    		case 5:           //5.修改联系人 
    			{
    				modifyperson(&abs);
    				 
    			break;
    			}
    		case 6:           //6.清空联系人 
    			{
    			clean(&abs);
    			break;
    			}
    		case 0:        //0.退出通讯录 
    		{cout<<"***** 欢迎下次使用 *****"<<endl; 
    			break;
    		}
    	 } 
    }
    	system("pause");//防止闪退 
    	return 0;
    } 
    
    展开全文
  • 通讯录管理系统-C++程序源代码。
  • 学生通讯系统的设计与实现 学生通讯系统信息包括:姓名、学号、性别、家庭住址、联系电话、等信息。现要求编写程序来完成如下功能: 1.学生通讯信息的输入 2.学生通讯信息的显示 3.学生通讯信息的统计 4.学生...
  • 具有数据的插入、修改、删除、显示和查询功能的通讯录管理系统。 (1)数据包括:人名、城市、省、国家、电话号码等。 (2)可对记录中的姓名进行查询。 (3)可对记录中的姓名进行删除。 (4)可显示所有的保存记录。 ...
  • 通讯录管理系统c++

    2021-04-17 13:18:21
    这两天在巩固c++的知识,刚复习完结构体就拿它来写一个简单的通讯录管理系统。 希望路过的大佬可以提一点意见,感激不尽 这是程序运行出来的界面 其他效果就不展示了,感兴趣的朋友可以复制粘贴自己运行试试,文章...

    这两天在巩固c++的知识,刚复习完结构体就拿它来写一个简单的通讯录管理系统。
    希望路过的大佬可以提一点意见,感激不尽

    这是程序运行出来的界面
    在这里插入图片描述
    其他效果就不展示了,感兴趣的朋友可以复制粘贴自己运行试试,文章末尾有完整代码,可以直接复制,已经在vs2017编译运行成功了

    先是头文件和定义结构体变量,运用了一个嵌套结构体的知识,有朋友如果不理解可以上网搜一下

    #include<iostream>
    
    using namespace std;
    #include<string>
    
    #define MAX 1000
    
    struct Person
    {
    	//成员列表
    	string name;//姓名
    	string sex;//性别
    	int age;//年龄
    	int contactNumber;//联系电话
    	string Address;//家庭住址
    
    };
    
    struct AddressBooks
    {
    	struct Person personArray[MAX];
    
    	//通讯录人数
    	int m_size;
    };
    

    创建菜单

    //创建菜单列表
    void Menu()
    {
    	cout << "*****通讯录管理系统*****" << endl;
    	cout << "*****1、添加联系人******" << endl;
    	cout << "*****2、显示联系人******" << endl;
    	cout << "*****3、删除联系人******" << endl;
    	cout << "*****4、查找联系人******" << endl;
    	cout << "*****5、修改联系人******" << endl;
    	cout << "*****6、清空联系人******" << endl;
    	cout << "*****7、退出通讯录******" << endl;
    }
    

    添加联系人

    //添加联系人
    void AddContacts(AddressBooks *abs)
    {
    	int len = sizeof(abs->personArray) / sizeof(abs->personArray[0]);
    
    	if (abs->m_size > len)
    	{
    		cout << "通讯录人数已满!" << endl;
    
    	}
    
    	cout << "请输入联系人的姓名:" << endl;
    	cin >> abs->personArray[abs->m_size].name;
    
    	cout << "请输入联系人的性别:" << endl;
    	cin >> abs->personArray[abs->m_size].sex;
    
    	cout << "请输入联系人的年龄:" << endl;
    	cin >> abs->personArray[abs->m_size].age;
    
    	cout << "请输入联系人的联系电话:" << endl;
    	cin >> abs->personArray[abs->m_size].contactNumber;
    
    	cout << "请输入联系人的家庭住址:" << endl;
    	cin >> abs->personArray[abs->m_size].Address;
    
    	abs->m_size++;
    
    	cout << "添加成功!" << endl;
    
    	system("pause");//暂停窗口
    	system("cls");//清屏操作
    
    }
    

    显示联系人

    //显示联系人
    void ShowContacts(AddressBooks *abs)
    {
    	cout <<"************************"
    		 << "所有联系人的信息如下:" 
    		 << "************************" << endl;
    
    	for (int i = 0; i < abs->m_size; i++)
    	{
    		cout << "姓名:" << abs->personArray[i].name
    			 << "\t性别:" << abs->personArray[i].sex
    			 << "\t年龄:" << abs->personArray[i].age
    			 << "\t联系电话:" << abs->personArray[i].contactNumber
    			 << "\t家庭住址:" << abs->personArray[i].Address
    			 << endl;
    	}
    
    	system("pause");
    	system("cls");
    }
    

    删除联系人

    //删除联系人
    void DeleteContacts(AddressBooks *abs)
    {
    	int i;
    
    	//存放删除联系人的姓名
    	string Name;
    
    	cout << "请输入要删除联系人的姓名:" << endl;
    	cin >> Name;
    
    	//找到删除联系人的位置
    	for (i = 0; i < abs->m_size; i++)
    	{
    		if (abs->personArray[i].name == Name)
    			break;
    	}
    
    	//开始删除该联系人
    	for (; i < abs->m_size; i++)
    	{
    		abs->personArray[i].name = abs->personArray[i + 1].name;
    		abs->personArray[i].sex = abs->personArray[i+1].sex;
    		abs->personArray[i].age = abs->personArray[i+1].age;
    		abs->personArray[i].contactNumber = abs->personArray[i+1].contactNumber;
    		abs->personArray[i].Address = abs->personArray[i+1].Address;
    	}
    
    	cout << "删除成功!" << endl;
    
    	abs->m_size--;
    
    	system("pause");
    	system("cls");
    }
    

    查找联系人

    //查找联系人
    void FindContacts(AddressBooks *abs)
    {
    	int i;
    	string Name;
    
    	cout << "请输入要查找的联系人的姓名:" << endl;
    	cin >> Name;
    
    	for (i = 0; i < abs->m_size; i++)
    	{
    		if (abs->personArray[i].name == Name)
    		{
    			cout << "查找成功!" << endl;
    
    			cout << "姓名:" << abs->personArray[i].name
    				<< " 性别:" << abs->personArray[i].sex
    				<< " 年龄:" << abs->personArray[i].age
    				<< " 联系电话:" << abs->personArray[i].contactNumber
    				<< " 家庭住址:" << abs->personArray[i].Address
    				<< endl;
    
    			break;
    		}
    	}
    
    	system("pause");
    	system("cls");
    }
    

    修改联系人

    //修改联系人
    void ModifyContacts(AddressBooks *abs)
    {
    	int i;
    	string Name;
    
    	string m_name;
    	string m_sex;
    	int m_age;
    	int m_Number;
    	string m_Address;
    
    	cout << "请输入要修改联系人的姓名:" << endl;
    
    	cin >> Name;
    
    	for (i = 0; i < abs->m_size; i++)
    	{
    		if (abs->personArray[i].name == Name)
    		{
    			cout << "请输入联系人的姓名:" << endl;
    			cin >> abs->personArray[i].name;
    
    			cout << "请输入联系人的性别:" << endl;
    			cin >> abs->personArray[i].sex;
    
    			cout << "请输入联系人的年龄:" << endl;
    			cin >> abs->personArray[i].age;
    
    			cout << "请输入联系人的联系电话:" << endl;
    			cin >> abs->personArray[i].contactNumber;
    
    			cout << "请输入联系人的家庭住址:" << endl;
    			cin >> abs->personArray[i].Address;
    			
    			cout << "修改成功!" << endl;
    
    			break;
    		}
    		else
    		{
    			cout << "没有该联系人!" << endl;
    		}
    
    	}
    
    	system("pause");
    	system("cls");
    }
    

    清空联系人

    /清空联系人
    void EmptyContacts(AddressBooks *abs)
    {
    	for (int i = 0; i < abs->m_size; i++)
    	{
    		abs->personArray[i].name = abs->personArray[i + 1].name;
    		abs->personArray[i].sex = abs->personArray[i + 1].sex;
    		abs->personArray[i].age = abs->personArray[i + 1].age;
    		abs->personArray[i].contactNumber = abs->personArray[i + 1].contactNumber;
    		abs->personArray[i].Address = abs->personArray[i + 1].Address;
    	}
    
    	abs->m_size = 0;
    
    	cout << "通讯录已清空" << endl;
    
    	system("pause");
    	system("cls");
    }
    

    退出通讯录

    //退出通讯录
    void Quit()
    {
    	cout << "欢迎下次使用" << endl;
    }
    

    主函数
    主函数里面使用了switch语句来运行各函数

    int main()
    {
    	//定义结构体变量为abs
    	AddressBooks abs;
    	//初始化通讯录人数
    	abs.m_size = 0;
    
    	while (true)
    	{	
    		Menu();//创建菜单
    		
    		int select;
    		cout << "请输入要执行的菜单行:";
    		cin >> select;
    		
    		switch (select)
    		{
    		case 1:
    			AddContacts(&abs);//添加联系人
    			break;
    		case 2:
    		{
    			if (abs.m_size == 0)
    			{
    				cout << "您还未添加联系人。" << endl;
    
    				system("pause");
    				system("cls");
    			}
    			else
    			{
    				ShowContacts(&abs);//显示联系人
    			}
    		}
    			break;
    		case 3:
    			DeleteContacts(&abs);//删除联系人
    			break;
    		case 4:
    			FindContacts(&abs);//查找联系人
    			break;
    		case 5:
    			ModifyContacts(&abs);//修改联系人
    			break;
    		case 6:
    			EmptyContacts(&abs);//清空联系人
    			break;
    		case 7:
    			Quit();//退出通讯录
    			
    			system("pause");
    			return 0;
    			
    			break;
    		default:
    			break;
    		}
    	}
    }
    

    这就是一个通讯录系统,大家如果想添加其他模块可以自行添加,希望路过的大佬可以提一点意见,互帮互助

    希望感觉不错的朋友可以点赞,感激不尽

    最后附上完整代码

    #include<iostream>
    
    using namespace std;
    #include<string>
    
    #define MAX 1000
    
    struct Person
    {
    	//成员列表
    	string name;//姓名
    	string sex;//性别
    	int age;//年龄
    	int contactNumber;//联系电话
    	string Address;//家庭住址
    
    };
    
    struct AddressBooks
    {
    	struct Person personArray[MAX];
    
    	//通讯录人数
    	int m_size;
    };
    
    //创建菜单列表
    void Menu()
    {
    	cout << "*****通讯录管理系统*****" << endl;
    	cout << "*****1、添加联系人******" << endl;
    	cout << "*****2、显示联系人******" << endl;
    	cout << "*****3、删除联系人******" << endl;
    	cout << "*****4、查找联系人******" << endl;
    	cout << "*****5、修改联系人******" << endl;
    	cout << "*****6、清空联系人******" << endl;
    	cout << "*****7、退出通讯录******" << endl;
    }
    
    //添加联系人
    void AddContacts(AddressBooks *abs)
    {
    	int len = sizeof(abs->personArray) / sizeof(abs->personArray[0]);
    
    	if (abs->m_size > len)
    	{
    		cout << "通讯录人数已满!" << endl;
    
    	}
    
    	cout << "请输入联系人的姓名:" << endl;
    	cin >> abs->personArray[abs->m_size].name;
    
    	cout << "请输入联系人的性别:" << endl;
    	cin >> abs->personArray[abs->m_size].sex;
    
    	cout << "请输入联系人的年龄:" << endl;
    	cin >> abs->personArray[abs->m_size].age;
    
    	cout << "请输入联系人的联系电话:" << endl;
    	cin >> abs->personArray[abs->m_size].contactNumber;
    
    	cout << "请输入联系人的家庭住址:" << endl;
    	cin >> abs->personArray[abs->m_size].Address;
    
    	abs->m_size++;
    
    	cout << "添加成功!" << endl;
    
    	system("pause");
    	system("cls");//清屏操作
    
    }
    
    //显示联系人
    void ShowContacts(AddressBooks *abs)
    {
    	cout <<"************************"
    		 << "所有联系人的信息如下:" 
    		 << "************************" << endl;
    
    	for (int i = 0; i < abs->m_size; i++)
    	{
    		cout << "姓名:" << abs->personArray[i].name
    			 << "\t性别:" << abs->personArray[i].sex
    			 << "\t年龄:" << abs->personArray[i].age
    			 << "\t联系电话:" << abs->personArray[i].contactNumber
    			 << "\t家庭住址:" << abs->personArray[i].Address
    			 << endl;
    	}
    
    	system("pause");
    	system("cls");
    }
    
    //删除联系人
    void DeleteContacts(AddressBooks *abs)
    {
    	int i;
    
    	//存放删除联系人的姓名
    	string Name;
    
    	cout << "请输入要删除联系人的姓名:" << endl;
    	cin >> Name;
    
    	//找到删除联系人的位置
    	for (i = 0; i < abs->m_size; i++)
    	{
    		if (abs->personArray[i].name == Name)
    			break;
    	}
    
    	//开始删除该联系人
    	for (; i < abs->m_size; i++)
    	{
    		abs->personArray[i].name = abs->personArray[i + 1].name;
    		abs->personArray[i].sex = abs->personArray[i+1].sex;
    		abs->personArray[i].age = abs->personArray[i+1].age;
    		abs->personArray[i].contactNumber = abs->personArray[i+1].contactNumber;
    		abs->personArray[i].Address = abs->personArray[i+1].Address;
    	}
    
    	cout << "删除成功!" << endl;
    
    	abs->m_size--;
    
    	system("pause");
    	system("cls");
    }
    
    //查找联系人
    void FindContacts(AddressBooks *abs)
    {
    	int i;
    	string Name;
    
    	cout << "请输入要查找的联系人的姓名:" << endl;
    	cin >> Name;
    
    	for (i = 0; i < abs->m_size; i++)
    	{
    		if (abs->personArray[i].name == Name)
    		{
    			cout << "查找成功!" << endl;
    
    			cout << "姓名:" << abs->personArray[i].name
    				<< " 性别:" << abs->personArray[i].sex
    				<< " 年龄:" << abs->personArray[i].age
    				<< " 联系电话:" << abs->personArray[i].contactNumber
    				<< " 家庭住址:" << abs->personArray[i].Address
    				<< endl;
    
    			break;
    		}
    	}
    
    	system("pause");
    	system("cls");
    }
    
    //修改联系人
    void ModifyContacts(AddressBooks *abs)
    {
    	int i;
    	string Name;
    
    	string m_name;
    	string m_sex;
    	int m_age;
    	int m_Number;
    	string m_Address;
    
    	cout << "请输入要修改联系人的姓名:" << endl;
    
    	cin >> Name;
    
    	for (i = 0; i < abs->m_size; i++)
    	{
    		if (abs->personArray[i].name == Name)
    		{
    			cout << "请输入联系人的姓名:" << endl;
    			cin >> abs->personArray[i].name;
    
    			cout << "请输入联系人的性别:" << endl;
    			cin >> abs->personArray[i].sex;
    
    			cout << "请输入联系人的年龄:" << endl;
    			cin >> abs->personArray[i].age;
    
    			cout << "请输入联系人的联系电话:" << endl;
    			cin >> abs->personArray[i].contactNumber;
    
    			cout << "请输入联系人的家庭住址:" << endl;
    			cin >> abs->personArray[i].Address;
    			
    			cout << "修改成功!" << endl;
    
    			break;
    		}
    		else
    		{
    			cout << "没有该联系人!" << endl;
    		}
    
    	}
    
    	system("pause");
    	system("cls");
    }
    
    //清空联系人
    void EmptyContacts(AddressBooks *abs)
    {
    	for (int i = 0; i < abs->m_size; i++)
    	{
    		abs->personArray[i].name = abs->personArray[i + 1].name;
    		abs->personArray[i].sex = abs->personArray[i + 1].sex;
    		abs->personArray[i].age = abs->personArray[i + 1].age;
    		abs->personArray[i].contactNumber = abs->personArray[i + 1].contactNumber;
    		abs->personArray[i].Address = abs->personArray[i + 1].Address;
    	}
    
    	abs->m_size = 0;
    
    	cout << "通讯录已清空" << endl;
    
    	system("pause");
    	system("cls");
    }
    
    //退出通讯录
    void Quit()
    {
    	cout << "欢迎下次使用" << endl;
    }
    
    int main()
    {
    	//定义结构体变量为abs
    	AddressBooks abs;
    	//初始化通讯录人数
    	abs.m_size = 0;
    
    	while (true)
    	{	
    		Menu();//创建菜单
    		
    		int select;
    		cout << "请输入要执行的菜单行:";
    		cin >> select;
    		
    		switch (select)
    		{
    		case 1:
    			AddContacts(&abs);//添加联系人
    			break;
    		case 2:
    		{
    			if (abs.m_size == 0)
    			{
    				cout << "您还未添加联系人。" << endl;
    
    				system("pause");
    				system("cls");
    			}
    			else
    			{
    				ShowContacts(&abs);//显示联系人
    			}
    		}
    			break;
    		case 3:
    			DeleteContacts(&abs);//删除联系人
    			break;
    		case 4:
    			FindContacts(&abs);//查找联系人
    			break;
    		case 5:
    			ModifyContacts(&abs);//修改联系人
    			break;
    		case 6:
    			EmptyContacts(&abs);//清空联系人
    			break;
    		case 7:
    			Quit();//退出通讯录
    			
    			system("pause");
    			return 0;
    			
    			break;
    		default:
    			break;
    		}
    	}
    }
    
    展开全文
  • C++通讯录管理系统(对文件进行增删改查).pdf
  • 同学通讯录管理系统C++课程设计.pdf
  • 建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。 功能要求: (1) 通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、...
  • 基于MFC的C++通讯录管理系统,支持数组保存数据和文件操作保存数据,可以进行增删改查,功能齐全,代码简单易懂,一编译即可运行
  • 通讯录管理 问题描述 编写一个简单的通讯录管理程序通讯录记录有姓名地址(省市(县)街道)电话号码邮政编码等四项 基本要求 程序应提供的基本管理功能有 添加即增加一个人的记录到通信录中 显示即在屏幕上显示所有...
  • MFC实现的通讯录管理系统,数据库使用的是ACCESS,并且打包了,有详细的注释说明。课程设计必备
  • 通讯录管理系统 C++实验报告 C++数据结构 课程设计 班 级 信管 1123 指导老师 吴卫祖 学 号 201211671330 姓 名 易梓麒 2014年7 月7 日 目录 目录 . 4 通讯录管理系统 . 5 一. 问题描述 . 5 1.1 系统总体描述 . 5 ...
  • 通讯录管理系统C++版本(自学实现)
  • 包含了基本的功能
  • c++通讯录管理系统课程设计,个人通讯录管理系统的功能有: 1.增加联系人; 2.查询联系人
  • C++数据结构 课程设计 班 级 信管 1123 指导老师 吴卫祖 学 号 201211671330 姓 名 易梓麒 2014 年 7 月 7 日 目录 通讯录管理系统 一.问题描述 1.1 系统总体描述 本系统是一款基于对通讯录中联系人进行管理的系统可...
  • 手机通讯录管理系统C++程序设计 (1)
  • 通讯录管理系统 c++课程设计

    千次阅读 多人点赞 2018-06-23 20:18:53
    通讯录管理系统手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机中的...

    通讯录管理系统

    手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机中的联系人的信息只包含用户名和电话号码两项信息。存储在电话卡上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。

    根据通用的手机通讯录的使用方式,采用OOP(ObjectOriented Programming,面向对象编程)方法编写一个手机通讯录管理。

    要求:

    1.  创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。

    2.  以菜单方式工作(字符界面即可)

    3.  存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息

    4.  管理系统的功能包括:

    a)  新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)

    b)  删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)

    c)  修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)

    d)      查询:根据名字查询联系人信息(查询结果不唯一)

    e)      浏览:显示所有联系人的信息

    f)       将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)

    g)      将联系人的信息从手机卡上准存到手机上(同时要避免重复数据的存在)

    5.      要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点

    6.      提交程序源码和课程设计报告。

    7.      课程设计评分说明:实现功能:通过;使用了继承技术:中;实现了运算符的重载:良;支持多态:优


     


    实现过程分析:

    建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息

    建立以下几个类:

    1. 手机联系人类:表示一个联系人

              数据成员包括:

    姓名

    电话号码

    成员函数包括

    带参并带默认值的构造函数

    一组set函数为数据成员赋值

    一组modify函数,修改数据成员的值

    重载>>,<<运算符,完成对象的输入和输出操作

     

    2. 手机卡联系人(继承于手机联系人类):

    新增数据成员:

    籍贯

    QQ号
    成员函数包括

    一组set函数为数据成员赋值

    一组modify函数,修改数据成员的值

    重载>>,<<运算符,完成数据成员的输入输出操作

    3. 定义一个通讯簿抽象类,用来封装以下函数(为支持多态,可以将以下函数封装为纯虚函数)

                             增加函数:增加一个联系人

                             删除操作:删除一个联系人

                             Display:显示所有联系人的信息

                             修改某一联系人的信息:

                             查询并显示某一联系人的信息:

    4. 手机通讯簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息

                     数据成员包括:

                             手机联系人的数量

                             手机联系人对象数组

                     成员函数包括

                             构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组

                             析构函数:将对象数组中的内容写入到文本文件中。

                             增加函数:增加一个联系人

                             删除操作:删除一个联系人

                             Display:显示所有联系人的信息

                             修改某一联系人的信息:

                             查询并显示某一联系人的信息:

    5. 手机卡通信簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机卡中存储的所有联系人的信息

                     数据成员包括:

                             手机联系人的数量

                             手机联系人对象数组

                     成员函数包括

                             构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组

                             析构函数:将对象数组中的内容写入到文本文件中。

                             增加函数:增加一个联系人

                             删除操作:删除一个联系人

                             Display:显示所有联系人的信息

                             修改某一联系人的信息:

                             查询并显示某一联系人的信息:

    6. 用户类(这是一个操作类,完成通讯簿的操作):用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理

                     数据成员包括:

                             两个通讯簿对象

                     成员函数包括(成员函数体现用户的行为):

                             添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)

                             删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人

                             Display:显示相应的通讯簿中联系人的信息

                             修改某一联系人的信息:调用通讯簿对象的函数完成操作

                             查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作

                             将手机卡中的存储的联系人的信息移动到手机中

                             将手机中存储的联系人的信息移动到手机卡中

                             将手机卡中的存储的联系人的信息复制到手机中

                             将手机中存储的联系人的信息复制到手机卡中

    7. 界面菜单类:用来给出操作提示

                     数据成员:可以不定义数据成员

                     成员函数:

                             Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。


    代码实现:

     

    #include<iostream>
    #include<fstream>
    #include<string.h>
    #include<vector>
    #include<algorithm>
    using namespace std;
     bool vis;     //移动复制是否有重复数据的标志

    界面菜单类

    /*****************************界面菜单类*****************************************/
    
    class menu
    {
    	public:
         void mainmenu();   //主菜单
         void intmenu();    //介绍菜单
         void addmenu();    //添加菜单
         void delmenu();    //删除菜单
         void modmenu();    //修改菜单
         void inqmenu();    //查询菜单
         void dismenu();    //显示菜单  
         void mocomenu();    //移动复制菜单 
         void sortmenu();    //排序菜单
         void filemenu();    //文件操作菜单        
    };
    void menu::mainmenu()
    {
        cout<<"*****************************************************************"<<endl;  
        cout<<"*                   通讯录管理系统主菜单                        *"<<endl;  
        cout<<"*---------------------------------------------------------------*"<<endl;  
        cout<<"*                                                               *"<<endl;  
        cout<<"*  1.新建联系人.                            2.删除联系人.       *"<<endl;
    	cout<<"*                                                               *"<<endl;
        cout<<"*  3.修改联系人的信息.                      4.查询联系人信息.   *"<<endl;  
        cout<<"*                                                               *"<<endl;
        cout<<"*  5.浏览所有联系人的信息.                  6.移动、复制操作.   *"<<endl;
        cout<<"*                                                               *"<<endl;  
        cout<<"*  7.读写文件                               8.退出系统,并保存. *"<<endl;
    	cout<<"*                                                               *"<<endl;
    	cout<<"*****************************************************************"<<endl;
        cout<<"请输入您的选择:"<<endl;	
    }
    void menu::addmenu()
    {
    	cout<<"**************************************************"<<endl;  
        cout<<"*         请选择添加联系人到哪一个通讯录:       *"<<endl; 
    	cout<<"*                                                *"<<endl; 
        cout<<"*             1.手机通讯录.                      *"<<endl;
        cout<<"*                                                *"<<endl;  
        cout<<"*             2.手机卡通讯录.                    *"<<endl;
        cout<<"*                                                *"<<endl;
    	cout<<"*             3.两个通讯录都添加.                *"<<endl;
    	cout<<"*                                                *"<<endl;
    	cout<<"*             4.返回主菜单.                      *"<<endl;
        cout<<"**************************************************"<<endl;  
        cout<<"请输入您的选择:"<<endl; 
    }
    void menu::delmenu()  
    {  
        cout<<"**************************************************"<<endl;  
        cout<<"*           请选择在哪个通讯录删除联系人:       *"<<endl;
        cout<<"*                                                *"<<endl;  
        cout<<"*             1.手机通讯录.                      *"<<endl;
        cout<<"*                                                *"<<endl;
        cout<<"*             2.手机卡通讯录.                    *"<<endl;
        cout<<"*                                                *"<<endl;  
        cout<<"*             3.两个通讯录都删除                 *"<<endl;
        cout<<"*                                                *"<<endl;
    	cout<<"*             4.返回主菜单.                      *"<<endl;  
        cout<<"**************************************************"<<endl;  
        cout<<"请输入您的选择:"<<endl;  
    }  
    void menu::modmenu()  
    {  
        cout<<"**************************************************"<<endl;  
        cout<<"*         请选择在哪个通讯录中修改联系人:       *"<<endl; 
        cout<<"*                                                *"<<endl; 
        cout<<"*             1.手机通讯录.                      *"<<endl;
        cout<<"*                                                *"<<endl;  
        cout<<"*             2.手机卡通讯录.                    *"<<endl;
        cout<<"*                                                *"<<endl;
    	cout<<"*             3.两个通讯录都修改                 *"<<endl;
    	cout<<"*                                                *"<<endl;
    	cout<<"*             4.返回主菜单.                      *"<<endl;
        cout<<"**************************************************"<<endl;  
        cout<<"请输入您的选择:"<<endl;  
    }  
    void menu::inqmenu()  
    {  
        cout<<"**************************************************"<<endl;  
        cout<<"*           请选择在哪个通讯录查询:             *"<<endl;
        cout<<"*                                                *"<<endl;  
        cout<<"*             1.手机通讯录.                      *"<<endl; 
        cout<<"*                                                *"<<endl; 
        cout<<"*             2.手机卡通讯录.                    *"<<endl;
        cout<<"*                                                *"<<endl;
    	cout<<"*             3.两个通讯录都查询.                *"<<endl;
        cout<<"*                                                *"<<endl;
        cout<<"*             4.返回主菜单.                      *"<<endl;  
        cout<<"**************************************************"<<endl;  
        cout<<"请输入您的选择:"<<endl;  
    }  
    void menu::dismenu()  
    {  
        cout<<"********************************************"<<endl;  
        cout<<"*           请选择浏览位置                 *"<<endl; 
    	cout<<"*                                          *"<<endl; 
        cout<<"*            1.手机通讯录.                 *"<<endl;  
        cout<<"*                                          *"<<endl;  
        cout<<"*            2.手机卡通讯录.               *"<<endl;
        cout<<"*                                          *"<<endl;
        cout<<"*            3.返回主菜单.                 *"<<endl;    
        cout<<"********************************************"<<endl;
         cout<<"请输入您的选择:"<<endl;    
    } 
    void menu::mocomenu()
    {  
    	 cout<<"***************************************************************"<<endl;
        cout<<"*                     请选择要进行的操作.                     *"<<endl; 
        cout<<"*                                                             *"<<endl;  
    	cout<<"*        1.将联系人的信息从手机移动到手机卡上.                *"<<endl;
        cout<<"*                                                             *"<<endl;  
        cout<<"*        2.将联系人的信息从手机卡上移动到手机上.              *"<<endl;
    	cout<<"*                                                             *"<<endl;
        cout<<"*        3.将手机卡中的存储的联系人的信息复制到手机中         *"<<endl;
        cout<<"*                                                             *"<<endl;
        cout<<"*        4.将手机中存储的联系人的信息复制到手机卡中           *"<<endl; 
        cout<<"*                                                             *"<<endl;
        cout<<"*                     5.返回主菜单.                           *"<<endl; 
        cout<<"***************************************************************"<<endl; 
        cout<<"请输入您的选择:"<<endl;  	
    } 
    void menu::sortmenu()
    {
    	
    	 cout<<"**************************************"<<endl;
    	 cout<<"*         请选择输出排序方式         *"<<endl;
    	 cout<<"*                                    *"<<endl;
    	 cout<<"*            1.降序输出              *"<<endl;
    	 cout<<"*                                    *"<<endl;
    	 cout<<"*            2.升序输出              *"<<endl;
    	 cout<<"*                                    *"<<endl;
    	 cout<<"*            3.退出                  *"<<endl; 
    	 cout<<"**************************************"<<endl; 
    	 cout<<"请输入您的选择:"<<endl;  
    }
    void menu::filemenu()
    {
    	cout<<"************************************************"<<endl;
        cout<<"*           请选择要进行的操作.                *"<<endl; 
        cout<<"*                                              *"<<endl;  
    	cout<<"*           1.读取手机通讯录文件.              *"<<endl;
        cout<<"*                                              *"<<endl;  
        cout<<"*           2.写入手机通讯录文件               *"<<endl;
    	cout<<"*                                              *"<<endl;
        cout<<"*           3.读取手机卡通讯录文件             *"<<endl;
        cout<<"*                                              *"<<endl;
        cout<<"*           4.写入手机卡通讯录文件             *"<<endl; 
        cout<<"*                                              *"<<endl;
        cout<<"*           5.返回主菜单.                      *"<<endl; 
        cout<<"************************************************"<<endl; 
        cout<<"请输入您的选择:"<<endl;  	
    }
    
    menu m;  //创建全局菜单对象,便于调用

    手机联系人类

    
    /***************************手机联系人类*****************************************/
    
    class Phone_contact   
    {
    	protected:
    	string name,tel;
    public:
    	Phone_contact(string i="无姓名",string j="无电话号码")//构造函数
    	{
    		name=i;tel=j;
    	}
    	//Phone_contact(){}
    	
    	int set(string i,string j);//成员赋值函数
    	int modify();//修改成员函数
    	friend ostream&operator <<(ostream&out,Phone_contact&p); //重载<<
    	friend istream&operator >>(istream&in, Phone_contact&p);  //重载>>
    	string getname();  //获得姓名
    	string gettel();   //获得电话号码
    	
    };
    int Phone_contact::set(string i,string j)
    	{
    		name=i;tel=j;
    		return 0;
    	}
    istream&operator >>(istream&in,Phone_contact&p)  
    	{
    		cout<<"请输入姓名:";in>>p.name;		
    		cout<<"请输入电话号码:";in>>p.tel;
    		return in;
    	}
    ostream&operator <<(ostream&out,Phone_contact&p) 
    	{
    		
    		
    		out<<"姓名:"<<p.name;
    		out<<"   电话号码:"<<p.tel<<endl;
    		return out;
    	}
    string Phone_contact::getname()
    {
    	return name;
    }
    string Phone_contact::gettel()
    {
    	return tel;
    }
    int Phone_contact::modify()
    {  
    	  cout<<endl;
    	  cout<<"*************************************"<<endl;
    	  cout<<"* 1.修改姓名        2.修改电话号码  *"<<endl;
    	  cout<<"*                                   *"<<endl;
    	  cout<<"* 3.全部修改        4.退出此次修改  *"<<endl;
    	  cout<<"*************************************"<<endl;
    	  cout<<endl;
    	  cout<<"请输入选择"<<endl;
    			char choice;
    			while(cin>>choice)
    			{
    			switch(choice)
    			{
    			 case '1':
    				 {
    				  string ss;
    				  cout<<"请输入在手机通讯录该联系人要修改的姓名:"<<endl;
    				  cin>>ss;
    				  name=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    				 }
    				 
    						
    		     case '2':
    		    	{
    				  string ss;
    				  cout<<"请输入在手机通讯录该联系人要修改的电话号码:"<<endl;
    				  cin>>ss;
    				  tel=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    		    	}
    			 case '3':
    	            {
    		          string ss;
    				  cout<<"请输入在手机通讯录该联系人要修改的姓名:"<<endl;
    				  cin>>ss;
    				  name=ss;
    				  cout<<"请输入在手机通讯录该联系人要修改的电话号码:"<<endl;
    				  cin>>ss;
    				  tel=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    	            }			 
    			 case '4':{cout<<"退出修改"<<endl;break;}
    			 default: 
    	           cout<<"输入错误,请重新输入"<<endl;
    			 }
    			 cout<<"修改后信息"<<endl;              
    			  cout<<"姓名:"<<name<<"  电话号码:"<<tel<<endl<<endl;
    			cout<<endl;
    			cout<<"*************************************"<<endl;
    	        cout<<"* 1.修改姓名        2.修改电话号码  *"<<endl;
    	        cout<<"*                                   *"<<endl;
    	        cout<<"* 3.全部修改        4.退出修改系统  *"<<endl;
    			cout<<"*************************************"<<endl;
    			cout<<endl;
    			cout<<"请输入选择"<<endl;
    			 if(choice=='4') break;
    			}
    			return 0;
    }

    手机卡联系人类

    /***************************手机卡联系人类*****************************************/
    
    class SIM_contact:public Phone_contact  //手机卡联系人类
    {
    	string origo,qq;
    public:
    	SIM_contact(string i="无姓名",string j="无电话号码",string a="无籍贯",string b="无qq"):Phone_contact(i,j) //构造函数
    	{
    		Phone_contact::set(i,j);origo=a;qq=b;
    	}
    	//SIM_contact(){}
    	
    	int set(string i,string j,string a,string b);//成员赋值函数
    	int modify();//修改成员函数
    	friend ostream&operator <<(ostream&out,SIM_contact&s); //重载<<
    	friend istream&operator >>(istream&in, SIM_contact&s);  //重载>>
    	string getorigo();
    	string getqq();
    };
    int  SIM_contact::set(string i,string j,string a,string b)
    {
    	Phone_contact::set(i,j);origo=a;qq=b;
    	return 0;
    }
    int SIM_contact::modify()
    {
    	  cout<<endl;
    	  cout<<"*************************************"<<endl;
    	  cout<<"* 1.修改姓名        2.修改电话号码  *"<<endl;
    	  cout<<"*                                   *"<<endl;
    	  cout<<"* 3.修改籍贯        4.修改QQ号码    *"<<endl;
    	  cout<<"*                                   *"<<endl;
    	  cout<<"* 5.全部修改        6.退出修改系统  *"<<endl;
    	  cout<<"*************************************"<<endl;
    	  cout<<endl;
    	   cout<<"请输入选择"<<endl;
    			char choice;
    			while(cin>>choice)
    			{
    			switch(choice)
    			{
    			 case '1':
    				 {
    				  string ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的姓名:"<<endl;
    				  cin>>ss;
    				  name=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    				 }
    				 
    						
    		     case '2':
    		    	{
    				  string ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的电话号码:"<<endl;
    				  cin>>ss;
    				  tel=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    		    	}
    		    	case '3':
    		    	{
    				  string ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的籍贯:"<<endl;
    				  cin>>ss;
    				  origo=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    		    	}
    		    	case '4':
    		    	{
    				  string ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的QQ号码:"<<endl;
    				  cin>>ss;
    				  qq=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    		    	}
    			 case '5':
    	            {
    		          string ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的姓名:"<<endl;
    				  cin>>ss;
    				  name=ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的电话号码:"<<endl;
    				  cin>>ss;
    				  tel=ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的籍贯:"<<endl;
    				  cin>>ss;
    				  origo=ss;
    				  cout<<"请输入在手机卡通讯录该联系人要修改的QQ号码:"<<endl;
    				  cin>>ss;
    				  qq=ss;
    				  cout<<"更改成功"<<endl;
    				  break;
    	            }			 
    			 case '6':{cout<<"退出修改"<<endl;break;}
    			 default: 
    	           cout<<"输入错误,请重新输入"<<endl;
    			 }
    			 cout<<"修改后信息"<<endl;              
    			 cout<<"姓名:";
    			 cout.width(25);
    			 cout.setf(ios::left);
    			 cout<<name<<"  电话号码:"<<tel<<endl;
    			 cout<<"籍贯:" ;
    			 cout.width(25);
    			 cout<<name<<"   QQ号码:"<<tel<<endl<<endl;
    			 
    			 cout<<endl;
    	         cout<<"*************************************"<<endl;
    	         cout<<"* 1.修改姓名        2.修改电话号码  *"<<endl;
    			 cout<<"*                                   *"<<endl;
    	         cout<<"* 3.修改籍贯        4.修改QQ号码    *"<<endl;
    	         cout<<"*                                   *"<<endl;
    	         cout<<"*         0.退出此次修改            *"<<endl;
    	         cout<<"*************************************"<<endl;
    	         cout<<endl;
    	          cout<<"请输入选择"<<endl;
    			 if(choice=='4') break;
    			}
    			return 0;  
    }
    istream&operator >>(istream&in,SIM_contact&s)  
    	{
    		string pname,ptel;
    		cout<<"请输入姓名:";    in>>pname;		
    		cout<<"请输入电话号码:";in>>ptel;
    		s.Phone_contact::set(pname,ptel);
    		cout<<"请输入籍贯:";    in>>s.origo;
    		cout<<"请输入qq:";      in>>s.qq;
    		return in;
    	}
    ostream&operator <<(ostream&out,SIM_contact&s) 
    	{    
    		out<<"*姓名:";
    		out.width(25);
    		out.setf(ios::left);
    		out<<s.getname()<<"   *电话号码:"<<s.gettel()<<endl;
    		out<<"*籍贯:";
    		out.width(25);
    		out<<s.origo<<"   *qq:"<<s.qq<<endl;
    		return out;
    	}
    string SIM_contact::getorigo()
    {
    	return origo;
    }
    string SIM_contact::getqq()
    {
    	return qq;
    }

    通讯簿抽象类

    /***************************通讯簿抽象类*****************************************/
    
    class Book
    {
    	public:
    	virtual int add()=0;      //增加函数:增加一个联系人
    	virtual int del(string Tel)=0;      //删除操作:删除一个联系人
    	virtual int display()=0;  //Display:显示所有联系人的信息
    	virtual int modify(string Tel)=0;   //修改某一联系人的信息:
        virtual int inquire(string Name)=0;  //查询并显示某一联系人的信息
        virtual int read()=0;                //读文件
    	virtual int write()=0;                //读文件
        //virtual ~Book();
    };
    
    

    手机通讯簿类

    /***************************手机通讯簿类*****************************************/
    
    bool cmp1( Phone_contact a, Phone_contact b)   //按姓名降序排列 函数   ?引用为什么不对
    {
    	   return a.getname() > b.getname();
    }
    class Phone_book:public Book
    {
    	int sum;                  //手机联系人的数量,
    	vector<Phone_contact> p;  //vector实现手机联系人动态数组
    public:
    	 Phone_book();
    	 ~Phone_book();
    	 int add();                //增加函数:增加一个联系人
    	 int del(string Tel);      //删除操作:删除一个联系人
    	 int del(int i);            //移动时删除手机通讯录数据
    	 int display();            //Display:显示所有联系人的信息
    	 int modify(string Tel);   //修改某一联系人的信息:
         int inquire(string Name); //查询并显示某一联系人的信息
    	 int getsum();             //获取已有联系人数量
    	 int moco(string sname,string stel);               //移动复制操作
    	 string getname(int i);     //获取手机第i个姓名p[i].name
    	 string gettel(int i);      //获取手机卡第i个电话号码s[i].tel
    	 int read();               //读取手机通讯录文件
    	 int write();              //读取手机通讯录文件
    	 
    };
    Phone_book::Phone_book()
    {
    	sum=-1;                                      //vector从0开始
    	char s[100];
    	char  pname[30],ptel[30];
    	Phone_contact t;                            //创建手机联系人临时对象
    	//ofstream out("d://Phone book.txt",ios::out);
    	ifstream in("d://Phone book.txt",ios::in); //读的方式打开文件,读取文本文件中的数据
    	if(!in)
    	{
    		cerr<<"无法打开手机通讯录文件"<<endl;
    		return ;
    	}
    	 in.getline(s,100);
    	 in.getline(s,100);
    	 in.getline(s,100);
    	 in.getline(s,100);           //省略标题行 
    	  
    	 while(in>>pname>>ptel&&pname!="无姓名")
    	 { 
    	 	t.set(pname,ptel);
    	 	p.push_back(t);
    	 	sum++;
    	 }
    	 in.close();
    }
    Phone_book::~Phone_book()
    {
    	///Phone_contact t;
       ofstream out("d://Phone book.txt",ios::out); //写的方式打开文件
       if(!out)
    	{
    		cerr<<"无法打开手机通讯录文件"<<endl;
    		return ;
    	}
    	out<<"********************************************"<<endl;
    	out<<"*            ^ ^手机通讯簿 ^ ^             *"<<endl;
        out<<"********************************************"<<endl;
        out<<"姓名"<<"\t"<<"电话号码"<<endl;       
    	for(int i=0;i<=sum;i++)     //注意这里是小于等于
    	{
         out<<p[i].getname()<<"\t"<<p[i].gettel()<<endl;
    	}
    	out.close();
    }
    int Phone_book::read()
    {
    	                                
    	char s[100];
    	char  pname[30],ptel[30];
    	ifstream in("d://Phone book.txt",ios::in); //读的方式打开文件,读取文本文件中的数据
    	if(!in)
    	{
    		cerr<<"无法打开手机通讯录文件"<<endl;
    		return 0;
    	}
    	 in.getline(s,100);
    	 in.getline(s,100);
    	 in.getline(s,100);
    	 in.getline(s,100);    //省略标题行
    	 	 
    	 cout.width(20); 
         cout.setf(ios::left);     
    	 cout<<"姓名";  
    	 cout<<"电话号码"<<endl;
    	 while(in>>pname>>ptel&&pname!="无姓名")
    	 {
    	  cout.width(20);
    	  cout<<pname<<ptel<<endl;
    	 }
    }
    int Phone_book::write()
    {
    	Phone_contact t;
       ofstream out("d://Phone book.txt",ios::out); //写的方式打开文件
       if(!out)
    	{
    		cerr<<"无法打开手机通讯录文件"<<endl;
    		return 1;
    	}
    	 cin>>t;
         out<<t.getname()<<"\t"<<t.gettel()<<endl;
         p.push_back(t);
         sum++;
    	 out.close();
    }
    int Phone_book::add()
    {
    	if(sum>999){cout<<"手机通讯容量已满,无法添加,即将返回"<<endl;return 0;}
    	Phone_contact t;
    	cin>>t;
    	cout<<t<<endl;
    	cout<<"该联系人是否添加到手机,Y/N"<<endl;
    	string s;
    	cin>>s;
    	if(s[0]=='Y')
    	{
    	p.push_back(t);
    	sum++;
    	cout<<"手机添加联系人成功"<<endl;
    	}
    	else if(s[0]=='N') cout<<"已经取消操作"<<endl;
    	else cout<<"输入错误,本次操作无效"<<endl;
    }
    int Phone_book::del(string Tel)
    {
    	if(sum<0) {cout<<"手机通讯容量已空,无法删除,即将返回"<<endl;return 0;}
    	bool flag=0;
    
    	while(1)
    	{
       
    	 for(int i=0;i<=sum;i++)        //注意这里是<=,sum从-1开始
    	  {   
    	  	if(p[i].gettel()==Tel)
    	  	{  
    	  		 flag=1;
    	  		cout<<"将要删除手机联系人的信息"<<endl;
    	  		cout<<p[i];
    	  		cout<<"是否在手机上删除该联系人信息,Y/N"<<endl;
    	  		string s;
    	  		cin>>s;
    	  		if(s[0]=='Y')
    	  		{
    	  			p.erase(p.begin()+i);
    	  			sum--;
    	  			cout<<"在手机上删除该联系人成功"<<endl;
    	  			cout<<"是否在手机继续寻找具有相同电话号码的联系人,Y/N"<<endl;
    	  			cin>>s;
    	  			if(s[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(s[0]=='N') break;
    	  		}	
    	  		else 
    			{
                   cout<<"是否在手机继续寻找具有相同电话号码的联系人,Y/N"<<endl;
    	  			cin>>s;
    	  			if(s[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(s[0]=='N') {break;}
    			}
    	  	}
    	  	
    	  	cout<<"搜索结束"<<endl;
    	  	
    	  }
    	  if(flag==0)           //容错性
    	  {
    		cout<<"在手机通讯录无法找到具有该电话号码的联系人,是否重新输入?Y/N"<<endl;
    		string s;
    		cin>>s;
    		if(s[0]=='N')       
    		break;
    		else if(s[0]=='Y')
    		{cout<<"请重新输入要删除联系人的电话号码"<<endl;cin>>Tel;continue;}
    		else  
    		{cout<<"输入错误,本次删除取消"<<endl;break;}
    	  }
    	  else break;
    	 }
    	 
    	
    	
    }
    int Phone_book::modify(string Tel)
    {
       if(sum<0) {cout<<"手机通讯容量已空,无法修改,即将返回"<<endl;return 0;}
    	bool flag=0;
    
    	while(1)
    	{
       
    	 for(int i=0;i<=sum;i++)        //注意这里是<=,sum从-1开始
    	  {   
    	  	if(p[i].gettel()==Tel)
    	  	{  
    	  		 flag=1;
    	  		cout<<"将要修改手机通讯录联系人的信息"<<endl;
    	        cout<<p[i]<<endl;
    	  		cout<<"是否在手机通讯录上修改该联系人信息,Y/N"<<endl;
    	  		cout<<"?";
    	  		string ss;
    	  		cin>>ss;
    	  		if(ss[0]=='Y')
    	  		{
    			    p[i].modify();
    				cout<<p[i]<<endl;
    				cout<<"验证修改信息,是否重新修改。Y/N"<<endl;
    				cout<<"?";
    				string sss;
    				cin>>sss;
    				if(sss[0]=='Y') {p[i].modify();}
    	  			cout<<"是否在手机继续寻找具有相同电话号码的联系人,Y/N"<<endl;
    	  			cout<<"?";
    	  			cin>>ss;
    	  			if(ss[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(ss[0]=='N') break;
    	  		}	
    	  		else 
    			{
                   cout<<"是否在手机继续寻找具有相同电话号码的联系人,Y/N"<<endl;
                   cout<<"?";
    	  			cin>>ss;
    	  			if(ss[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(ss[0]=='N') {break;}
    			}
    	  	}
    	  	
    	  	cout<<"搜索结束:无"<<endl;
    	  	
    	  }
    	  if(flag==0)           //容错性
    	  {
    		cout<<"在手机通讯录无法找到具有该电话号码的联系人,是否重新输入?Y/N"<<endl;
    		cout<<"?";
    		string ss;
    		cin>>ss;
    		if(ss[0]=='N')       
    		break;
    		else if(ss[0]=='Y')
    		{cout<<"请重新输入要删除联系人的电话号码"<<endl;cin>>Tel;continue;}
    		else  
    		{cout<<"输入错误,本次删除取消"<<endl;break;}
    	  }
    	  else break;
    	 }
    }
    int Phone_book::inquire(string Name)
    {
    	if(sum<0) {cout<<"手机通讯容量已空,无法查询,即将返回"<<endl;return 0;}
    	bool flag=0;
    
    	while(1)
    	{
         cout<<"手机通讯录查询到的联系人信息"<<endl;  
    	 for(int i=0;i<=sum;i++)        //注意这里是<=,sum从-1开始
    	  { 
    	  	
    	  	if(p[i].getname()==Name)
    	  	{  
    	  		 flag=1;
    	        cout<<p[i]<<endl;
    	  	}
    	  }
    	  if(flag==0)           //容错性
    	  {
    	  	cout<<"搜索结束:无"<<endl;
    		cout<<"在手机通讯录无法找到具有该电话号码的联系人,是否重新输入?Y/N"<<endl;
    		cout<<"?";
    		string ss;
    		cin>>ss;
    		if(ss[0]=='N')       
    		break;
    		else if(ss[0]=='Y')
    		{cout<<"请重新输入要查询联系人的电话号码"<<endl;cin>>Name;continue;}
    		else  
    		{cout<<"输入错误,本次查询取消"<<endl;break;}
    	  }
    	  else break;
    	 }
    }
    int Phone_book::display()
    {
    	if(sum<0) {cout<<"手机通讯容量已空,即将返回"<<endl;return 0;}
    
    	 cout<<"目前手机通讯录人数:"<<sum+1<<endl;
    	 m.sortmenu();
    	 char ch;
    	 cin>>ch;
    	 sort(p.begin(),p.end(),cmp1);//按姓名降序排列 ,一次就够,省时间
    	 cout<<"**************************************"<<endl;
    	 cout<<"*            手机通讯录              *"<<endl;
    	 cout<<"**************************************"<<endl;
    	 switch(ch)
    	 {
    	case '1':
    	   {
    		 for(int i=0;i<=sum;i++)
    		 	cout<<p[i]<<endl;
    		 	break;
    	   }	
    	case '2':
    		{
    			 for(int i=sum;i>=0;i--)
    		 	cout<<p[i]<<endl;
    		 	break;
    		}
    	case '3':break;	
    	default:
    	cout<<"操作错误,退出显示菜单"<<endl;	
    	 }
    
    }
    int Phone_book::getsum()
    {
    	return sum;
    }
    string Phone_book::getname(int i)
    {
    	return p[i].getname();
    }
    string Phone_book::gettel(int i)
    {
    	 return p[i].gettel();
    }
    int Phone_book::del(int i)
    {
    	p.erase(p.begin()+i);  //删除移动数据
    	sum--;
    	return 0;
    }
    int Phone_book::moco(string sname,string stel)
    {
    	for(int i=0;i<=sum;i++)
    	{
    		if(sname==p[i].getname()&&stel==p[i].gettel())
    		{
    			cout<<"姓名:"<<sname<<"    电话号码:"<<stel<<endl;
    			cout<<"手机已经存在联系人,取消操作"<<endl;
    			cout<<endl;
    			return 0;
    		}
    	}
    	vis=1;         //标记删除成功
    	
    	Phone_contact t;
    	t.set(sname,stel);
    	p.push_back(t);    //添加
    	sum++;
    	return 0;
    	
    }
    

    手机卡通讯簿类

    /***************************手机卡通讯簿类*****************************************/
    
    class SIM_book:public Book      //手机卡通讯簿录基于手机通讯簿录 ,实现基本相同
    {
    	int sum;                   //手机联系人的数量
    	vector<SIM_contact>s;     //vector实现手机卡联系人动态数组
    public:
    	 SIM_book();
    	 ~SIM_book();
    	 int add();                 //增加函数:增加一个联系人
    	 int del(string Tel);       //删除操作:删除一个联系人
    	 int del(int i);             //移动时删除手机卡通讯录数据
    	 int display();             //Display:显示所有联系人的信息
    	 int modify(string Tel);    //修改某一联系人的信息:
         int inquire(string Name);  //查询并显示某一联系人的信息
         int moco(string pname,string ptel);             //复制移动函数
         int getsum();               //获取已有联系人数量
         string getname(int i);       //获取手机卡第i个姓名s[i].name
         string gettel(int i);       //获取手机卡第i个电话号码s[i].tel
         string getorigo(int i);     //获取手机卡第i个籍贯s[i].origo
         string getqq(int i);        //获取手机卡第i个QQs[i].qq
         int read();                 //读取手机卡通讯录文件
         int write();                //写入手机卡通讯录文件
    
    };
    SIM_book::SIM_book()
    {
    	sum=-1;   
    	char ss[100];
    	string  sname,stel,sorigo,sqq;
    	SIM_contact t;                            //创建手机联系人临时对象
    	 //ofstream out("d://SIM book.txt",ios::out);
    	 ifstream in("d://SIM book.txt",ios::in); //读的方式打开文件,读取文本文件中的数据
    	 if(!in)
    	{
    		cerr<<"无法打开手机卡通讯录文件"<<endl;
    		return ;
    	}
    	 in.getline(ss,100);
    	 in.getline(ss,100);
    	 in.getline(ss,100);
    	 in.getline(ss,100);           //省略标题行 
    	 while(in>>sname>>stel>>sorigo>>sqq&&sname!="无姓名")
    	 {
    	 	t.set(sname,stel,sorigo,sqq);
    	 	s.push_back(t);
    	 	sum++;
    	 }
    	 in.close();
    }
    SIM_book::~SIM_book()
    {
    	SIM_contact t;
    	if(sum>999) {cout<<"手机卡通讯录文件已满"<<endl;cout<<endl;}
        ofstream out("d://SIM book.txt",ios::out); //写的方式打开文件
       if(!out)
    	{
    		cerr<<"无法打开手机卡通讯录文件"<<endl;
    		return ;
    	}
    	out<<"********************************************"<<endl;
    	out<<"*            ^ ^手机卡通讯簿 ^ ^             *"<<endl;
        out<<"********************************************"<<endl;
         out.setf(ios::left);
    	out.width(20);
        out<<"姓名";
        out.width(20);
        out<<"电话号码";
         out.width(20); 
        out<<"籍贯";
        out<<"qq"<<endl;      
    	for(int i=0;i<=sum;i++)
    	{
    		
    		out.setf(ios::left);
    		out.width(20);
    		out<<s[i].getname();
    		out.width(20);
    		out<<s[i].gettel();
    		out.width(20);
    		out<<s[i].getorigo();
    		out<<s[i].getqq()<<endl;
    	}
    	out.close();
    
    }
    int SIM_book::read()
    {
    	char ss[100];
    	string  sname,stel,sorigo,sqq;
    	 ifstream in("d://SIM book.txt",ios::in); //读的方式打开文件,读取文本文件中的数据
    	 if(!in)
    	{
    		cerr<<"无法打开手机卡通讯录文件"<<endl;
    		return 0;
    	}
    	 in.getline(ss,100);
    	 in.getline(ss,100);
    	 in.getline(ss,100);
    	 in.getline(ss,100);           //省略标题行 
    	 cout.width(20); 
         cout.setf(ios::left);     
    	 cout<<"姓名";
    	 cout.width(20);  
    	 cout<<"电话号码";
    	 cout.width(20);
    	 cout<<"籍贯";
    	 cout.width(20);
    	 cout<<"QQ"<<endl;
    	 while(in>>sname>>stel>>sorigo>>sqq&&sname!="无姓名")
    	 {
    	 cout.setf(ios::left);   
    	 cout.width(20);   
    	 cout<<sname;
    	 cout.width(20);  
    	 cout<<stel;
    	 cout.width(20);
    	 cout<<sorigo;
    	 cout.width(20);
    	 
    	 cout<<sqq<<endl;;
    	 }
    	 in.close();
    }
    int SIM_book::write()
    {
       SIM_contact t;
       ofstream out("d://Phone book.txt",ios::out); //写的方式打开文件
       if(!out)
    	{
    		cerr<<"无法打开手机通讯录文件"<<endl;
    		return 1;
    	}
    	 cin>>t;
         out.setf(ios::left);   
    	 out.width(20);   
    	 out<<t.getname();
    	 out.width(20);  
    	 out<<t.gettel();
    	 out.width(20);
    	 out<<t.getorigo();
    	 out.width(20);
         s.push_back(t);
         sum++;
    	 out.close();
    }
    int SIM_book::add()
    {
    	if(sum>999){cout<<"手机卡通讯容量已满,无法添加,即将返回"<<endl;return 0;}
    	SIM_contact t;
    	cin>>t;
    	cout<<t;
    	cout<<"该联系人是否添加到手机卡,Y/N"<<endl;
    	string ss;
    	cin>>ss;
    	if(ss[0]=='Y')
    	{
    	s.push_back(t);
    	sum++;
    	cout<<"手机卡添加联系人成功"<<endl;
    	}
    	else if(ss[0]=='N') cout<<"已经取消操作"<<endl;
    	else cout<<"输入错误,本次操作无效"<<endl;
    }
    int SIM_book::del(string Tel)
    {
    	if(sum<0) {cout<<"手机通讯容量已空,无法删除,即将返回"<<endl;return 0;}
    	bool flag=0;
    	while(1)
    	{
          
    	 for(int i=0;i<=sum;i++)
    	  {
    	  	if(s[i].gettel()==Tel)
    	  	{    flag=1;
    	  		cout<<"将要删除手机联系人的信息"<<endl;
    	  		cout<<s[i];
    	  		cout<<"是否在手机卡上删除该联系人信息,Y/N"<<endl;
    	  		string ss;
    	  		cin>>ss;
    	  		if(ss[0]=='Y')
    	  		{
    	  			s.erase(s.begin()+i);
    	  			sum--;
    	  			cout<<"在手机卡上删除该联系人成功"<<endl;
    	  			cout<<"是否在手机卡继续寻找具有相同电话号码的联系人,Y/N"<<endl;
    	  			cin>>ss;
    	  			if(ss[0]=='N') break;
    				if(ss[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  		}
    	  		else  
    			{
    				cout<<"是否在手机卡继续寻找具有相同电话号码的联系人,Y/N"<<endl;
    	  			cin>>ss;
    	  			if(ss[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(ss[0]=='N') break;
    			}	
    	  	}
    	  		cout<<"搜素结束"<<endl;
    	    } 
    	    if(flag==0)
    	    {
    		cout<<"在手机卡通讯录无法找到具有该电话号码的联系人,是否重新输入?Y/N"<<endl;
    		string ss;
    		cin>>ss;
    		if(ss[0]=='N')       
    		break;
    		else if(ss[0]=='Y')
    		{cout<<"请重新输入要删除联系人的电话号码"<<endl;cin>>Tel;continue;}
    		else  
    		{cout<<"输入错误,本次删除取消"<<endl;break;}
    	  }
    	  else break;
    	 
    	}
    }
    int SIM_book::modify(string Tel)
    {
      if(sum<0) {cout<<"手机卡通讯容量已空,无法修改,即将返回"<<endl;return 0;}
    	bool flag=0;
    	while(1)
    	{
       
    	 for(int i=0;i<=sum;i++)        //注意这里是<=,sum从-1开始
    	  {   
    	  	if(s[i].gettel()==Tel)
    	  	{  
    	  		 flag=1;
    	  		cout<<"将要修改手机通讯录联系人的信息"<<endl;
    	        cout<<s[i]<<endl;
    	  		cout<<"是否在手机卡通讯录上修改该联系人信息,Y/N"<<endl;
    	  		cout<<"?";
    	  		string ss;
    	  		cin>>ss;
    	  		if(ss[0]=='Y')
    	  		{
    			    s[i].modify();
    				cout<<s[i]<<endl;
    				cout<<"验证修改信息,是否重新修改。Y/N"<<endl;
    				cout<<"?";
    				string sss;
    				cin>>sss;
    				if(sss[0]=='Y') {s[i].modify();}
    	  			cout<<"是否在手机卡继续寻找具有相同电话号码的联系人,Y/N"<<endl;
    	  			cout<<"?";
    	  			cin>>ss;
    	  			if(ss[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(ss[0]=='N') break;
    	  		}	
    	  		else 
    			{
                   cout<<"是否在手机卡继续寻找具有相同电话号码的联系人,Y/N"<<endl;
                   cout<<"?";
    	  			cin>>ss;
    	  			if(ss[0]=='Y'){cout<<"继续搜素......"<<endl;}
    	  			else if(ss[0]=='N') {break;}
    			}
    	  	}
    	  	
    	  	cout<<"搜索结束:无"<<endl;
    	  	
    	  }
    	  if(flag==0)           //容错性
    	  {
    		cout<<"在手机卡通讯录无法找到具有该电话号码的联系人,是否重新输入?Y/N"<<endl;
    		cout<<"?";
    		string ss;
    		cin>>ss;
    		if(ss[0]=='N')       
    		break;
    		else if(ss[0]=='Y')
    		{cout<<"请重新输入要删除联系人的电话号码"<<endl;cin>>Tel;continue;}
    		else  
    		{cout<<"输入错误,本次删除取消"<<endl;break;}
    	  }
    	  else break;
    	 }	
    }
    int SIM_book::inquire(string Name)
    {
    	 if(sum<0) {cout<<"手机卡通讯录容量已空,无法查询,即将返回"<<endl;return 0;}
    	bool flag=0;
    
    	while(1)
    	{
         cout<<"手机卡通讯录查询到的联系人信息"<<endl;  
    	 for(int i=0;i<=sum;i++)        //注意这里是<=,sum从-1开始
    	  { 
    	  	
    	  	if(s[i].getname()==Name)
    	  	{  
    	  		 flag=1;
    	        cout<<s[i]<<endl;
    	  	}
    	  }
    	  if(flag==0)           //容错性
    	  {
    	  	cout<<"搜索结束:无"<<endl;
    		cout<<"在手机卡通讯录无法找到具有该电话号码的联系人,是否重新输入?Y/N"<<endl;
    		cout<<"?";
    		string ss;
    		cin>>ss;
    		if(ss[0]=='N')       
    		break;
    		else if(ss[0]=='Y')
    		{cout<<"请重新输入要查询联系人的电话号码"<<endl;cin>>Name;continue;}
    		else  
    		{cout<<"输入错误,本次查询取消"<<endl;break;}
    	  }
    	  else break;
    	 }
    }
    bool cmp2( SIM_contact a, SIM_contact b)   //按姓名降序排列 函数   ?引用为什么不对
    {
    	   return a.getname() > b.getname();
    }
    int SIM_book::display()
    {
    	if(sum<0) {cout<<"手机卡通讯容量已空,即将返回"<<endl;return 0;}
    
    	 cout<<"目前手机卡通讯录人数:"<<sum+1<<endl;
    	 m.sortmenu();
    	 char ch;
    	 cin>>ch;
    	 sort(s.begin(),s.end(),cmp1);//按姓名降序排列 ,一次就够,省时间
    	 cout<<"**************************************"<<endl;
    	 cout<<"*           手机通卡讯录             *"<<endl;
    	 cout<<"**************************************"<<endl;
    	 switch(ch)
    	 {
    	case '1':
    	   {
    		 for(int i=0;i<=sum;i++)
    		 	cout<<s[i]<<endl;;
    		 	break;
    	   }	
    	case '2':
    		{
    			 for(int i=sum;i>=0;i--)
    		 	cout<<s[i]<<endl;;
    		 	break;
    		}
    	case '3':break;	
    	default:
    	cout<<"操作错误,退出显示菜单"<<endl;	
    	 }
    }
    int SIM_book::getsum()
    {return sum;}
    int SIM_book::moco(string pname,string ptel)
    {
    	for(int i=0;i<=sum;i++)
    	{
    		if(pname==s[i].getname()&&ptel==s[i].gettel())
    		{
    			cout<<"姓名:"<<pname<<"     电话号码:"<<ptel<<endl;
    			cout<<"手机卡已经存在联系人,取消操作"<<endl;
    			cout<<endl;
    			return 0;
    		}
    	}
    	vis=1;         //标记删除成功
    	SIM_contact t;
    	t.set(pname,ptel,"无籍贯","无QQ");
    	s.push_back(t);    //添加
    	sum++;
    	return 0;
    }
    string SIM_book::getname(int i)
    {
    	return s[i].getname();
    }
    string SIM_book::gettel(int i)
    {
    	return s[i].gettel();
    }
    string SIM_book::getorigo(int i)
    {
    	return s[i].getorigo();
    }
    string SIM_book::getqq(int i)
    {
    	return s[i].getqq();
    }
    int SIM_book::del(int i)
    {
    	s.erase(s.begin()+i);  //删除移动数据
    	sum--;
    	return 0;
    }
    
    

    用户类

    /*******************************用户类*******************************************/
    
    class user
     {
     	Phone_book p;
     	SIM_book s;
    public:
    	 user() ;
    	 int add();       //添加联系人
    	 int del();       //删除联系人
     	 int modify();    //修改联系人
     	 int inquire();   //查询联系人
     	 int display();   //显示联系人
     	 int moco();      //移动复制
     	 int movp_s();    //把联系人信息从手机移动到手机卡
     	 int movs_p();    //把联系人信息从手机卡移动到手机
     	 int copyp_s();   //把联系人信息从手机移动到手机卡
     	 int copys_p();   //把联系人信息从手机卡复制到手机
    	 int file();
     	 ~user();
     };
     user::user()
     {  cout<<"             **********************************"<<endl;
     	cout<<"             ** ^ ^欢迎来到通讯录管理系统^ ^ **"<<endl;
        cout<<"             **********************************"<<endl;
     	cout<<endl;
     }
    user::~user()
     {
        cout<<"               *********************************"<<endl;
      	cout<<"               ** ^ ^ 退出通讯录管理系统  ^ ^ **"<<endl;
        cout<<"               *********************************"<<endl;
     	cout<<endl;
     }
    int user::add()
    {
    	char ch;
    	Book *q;   //创建基类指针
    	while(cin>>ch)
    	{
    	 switch(ch)
    	 {
    	 case '1':
    	  q=&p;       //基类指针指向派生类对象 ,实现多态
    	  q->add(); 
    	  break;
    	 case '2':
    	   q=&s;
    	   q->add();
    	   break;
    	 case '3':
    	   q=&p;      //基类指针指向派生类对象 ,实现多态
    	   q->add(); 
    	   q=&s;
    	   q->add();
    	   break;
    	 case '4':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 if(ch=='4') break;
    	  m.addmenu();
    	}
    	return 0;
    	
    }
    int user::del()
    {
    	char ch;
    	Book *q;   //创建基类指针
    	
    	while(cin>>ch)
    	{
    		
    	 switch(ch)
    	 {
    	 case '1':
    	  {
    	  q=&p;     //基类指针指向派生类对象 ,实现多态
    	  string ss;
    	  cout<<"请输入在手机通讯录要删除联系人的电话号码:"<<endl;
    	  cin>>ss;
    	  q->del(ss); 
    	  break; 
    	  }
    	 case '2':
    	   {
    	   	q=&s;
    	   string ss;
    	   cout<<"请输入在手机卡通讯录要删除联系人的电话号码:"<<endl;
    	   cin>>ss;
    	   q->del(ss);
    	   break;
    	   }
    	 case '3':
    	   {
    	   	q=&p; 
    	   string ss;
    	   cout<<"请输入在手机和手机卡通讯录要删除联系人的电话号码:"<<endl;
    	   cin>>ss;    //基类指针指向派生类对象 ,实现多态
    	   q->del(ss); 
    	   q=&s;
    	   q->del(ss);
    	   break;
    	   }
    	 case '4':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 
    	 if(ch=='4') break;
    	 m.delmenu();
    	}
    	return 0;
    }
    int user::modify()
    {
    	char ch;
    	Book *q;   //创建基类指针
    	
    	while(cin>>ch)
    	{
    	 switch(ch)
    	 {
    	 case '1':
    	  {
    	  q=&p;     //基类指针指向派生类对象 ,实现多态
    	  string ss;
    	  cout<<"请输入在手机通讯录要修改联系人的电话号码:"<<endl;
    	  cin>>ss;
    	  q->modify(ss); 
    	  break; 
    	  }
    	 case '2':
    	   {
    	   	q=&s;
    	   string ss;
    	   cout<<"请输入在手机卡通讯录要修改联系人的电话号码:"<<endl;
    	   cin>>ss;
    	   q->modify(ss);
    	   break;
    	   }
    	 case '3':
    	   {
    	   	q=&p; 
    	   string ss;
    	   cout<<"请输入在手机和手机卡通讯录要修改联系人的电话号码:"<<endl;
    	   cin>>ss;    //基类指针指向派生类对象 ,实现多态
    	   q->modify(ss); 
    	   q=&s;
    	   q->modify(ss);
    	   break;
    	   }
    	 case '4':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 
    	 if(ch=='4') break;
    	 m.delmenu();
    	}
    	return 0;
    }
    int user::inquire()
    {
    	 char ch;
    	 Book *q;   //创建基类指针
    	
    	 while(cin>>ch)
    	 {
    	 switch(ch)
    	 {
    	 case '1':
    	  {
    	  q=&p;     //基类指针指向派生类对象 ,实现多态
    	  string ss;
    	  cout<<"请输入在手机通讯录要修改联系人的姓名:"<<endl;
    	  cin>>ss;
    	  q->inquire(ss); 
    	  break; 
    	  }
    	 case '2':
    	   {
    	   	q=&s;
    	   string ss;
    	   cout<<"请输入在手机卡通讯录要查询联系人的姓名:"<<endl;
    	   cin>>ss;
    	   q->inquire(ss);
    	   break;
    	   }
    	 case '3':
    	   {
    	   	q=&p; 
    	   string ss;
    	   cout<<"请输入在手机和手机卡通讯录要查询联系人的姓名:"<<endl;
    	   cin>>ss;    //基类指针指向派生类对象 ,实现多态
    	   q->inquire(ss); 
    	   q=&s;
    	   q->inquire(ss);
    	   break;
    	   }
    	 case '4':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 
    	 if(ch=='4') break;
    	 m.inqmenu();
    	}
    	return 0;
    }
    int user::display()
    {
    	 char ch;
    	 Book *q;   //创建基类指针
    	
    	 while(cin>>ch)
    	 {
    	 switch(ch)
    	 {
    	 case '1':
    	  {
    	  q=&p;     //基类指针指向派生类对象 ,实现多态
    	  q->display(); 
    	  break; 
    	  }
    	 case '2':
    	   {
    	   	q=&s;
    	   q->display();
    	   break;
    	   
    	   }
    	 case '3':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 
    	 if(ch=='3') break;
    	 m.dismenu();
    	 }
    	return 0;    
    }
    int user::moco()
    {
    	 char ch;
    	 while(cin>>ch)
    	 {
    	 switch(ch)
    	 {
    	 case '1':
    	  {
    	  movp_s();	
    	  break; 
    	  }
    	 case '2':
    	   {
    	   movs_p();
    	   break;
    	   } 
    	 case'3':
    	 	{
    	   copyp_s();
    	   break;
    	 	}
    	 case'4':
    	 	{
    	  copys_p();
    	   break;
    	 	}	 
    	 case '5':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 
    	 if(ch=='5') break;
    	 m.mocomenu();
    	}
    	return 0;    
    	
    }
    int user::movp_s()
    {
    	cout<<"******手机联系人信息移动到手机卡中******"<<endl;
    	
    	if(p.getsum()<0){cout<<"手机通讯录无联系人,无法移动,即将返回"<<endl;return 0;} 
    	int sum=p.getsum();         //手机通讯录的联系人是变化的
    	for(int i=0;i<=sum;i++)
    	{    vis=0;     //标记是否成功移动
    		if(s.getsum()>999) {cout<<"手机卡通讯录已满,无法移动,即将返回"<<endl;return 0;}
    		s.moco(p.getname(i),p.gettel(i));     //函数调用Phone_book中数组,这里p和Phone_book 中存放联系人vector的p是不一样的
    		if(vis==1)  p.del(i);   //成功移动,删除
    		
    	}
    	cout<<"操作完成"<<endl<<endl;
    	return 0;
    }
    int user::movs_p()
    {
    	cout<<"******手机卡联系人信息移动到手机中******"<<endl;
    	if(s.getsum()<0){cout<<"手机卡通讯录无联系人,无法移动,即将返回"<<endl;return 0;} 
    	int sum=s.getsum();         //手机卡通讯录的联系人是变化的
    	for(int i=0;i<=sum;i++)
    	{    vis=0;         //标记是否成功移动
    		if(p.getsum()>999) {cout<<"手机通讯录已满,无法移动,即将返回"<<endl;return 0;}
    		
    		p.moco(s.getname(i),s.gettel(i));     //函数调用SIM_book中数组,这里s和PSIM_book 中存放联系人vector的s是不一样的
    		if(vis==1)  s.del(i);     //成功移动,删除
    	}
    	cout<<"操作完成"<<endl<<endl;
    	return 0;
    }
    int user::copyp_s()
    {
    	cout<<"******手机联系人信息复制到手机卡中******"<<endl;
    	if(p.getsum()<0){cout<<"手机通讯录无联系人,无法复制,即将返回"<<endl;return 0;} 
    	for(int i=0;i<=p.getsum();i++)
    	{
    		if(s.getsum()>999) {cout<<"手机卡通讯录已满,无法复制,即将返回"<<endl;return 0;}
    		s.moco(p.getname(i),p.gettel(i));     //函数调用Phone_book中数组,这里p和Phone_book 中存放联系人vector的p是不一样的
    	}
    	cout<<"操作完成"<<endl<<endl;
    	return 0;
    }
    int user::copys_p()
    {
    	cout<<"******手机卡联系人信息复制到手机中******"<<endl;
    	if(s.getsum()<0){cout<<"手机卡通讯录无联系人,无法复制,即将返回"<<endl;return 0;} 
    	for(int i=0;i<=s.getsum();i++)
    	{  
    		if(p.getsum()>999) {cout<<"手机通讯录已满,无法复制,即将返回"<<endl;return 0;}
    		p.moco(s.getname(i),s.gettel(i));     //函数调用SIM_book中数组,这里s和PSIM_book 中存放联系人vector的s是不一样的
    		
    	}
    	cout<<"操作完成"<<endl<<endl;
    	return 0;
    
    }
    int user::file()
    {
    	char ch;
    	Book *q;   //创建基类指针
    	while(cin>>ch)
    	{
    	 switch(ch)
    	 {
    	 case '1':
    	  q=&p;       //基类指针指向派生类对象 ,实现多态
    	  q->read(); 
    	  break;
    	 case '2':
    	   q=&p;
    	   q->write();
    	   break;
    	 case '3':
    	   q=&s;      //基类指针指向派生类对象 ,实现多态
    	   q->read(); 
    	   break;
    	 case '4':
    	   q=&s;
    	   q->write();
    	   break;
    	 case '5':
    		break;
    	 default:
    	   cout<<"操作错误,请重新输入"<<endl;
    	 }
    	 if(ch=='5') break;
    	  m.filemenu();
    	}
    	return 0;
    }

    主函数

    /***************************主函数*****************************************/
    
    int main()
    {
    	
    	user u;
    	m.mainmenu();
    	char ch;
    	while(cin>>ch)
    	{
    		switch(ch)
    		{
    			case '0':break;
    			case '1':m.addmenu();
    			         u.add();
    				     break;
    			case '2':m.delmenu();
    				     u.del();
    					 break;
    			case '3':m.modmenu();
    			         u.modify();
    			         break;
    			case '4':m.inqmenu();
    				     u.inquire();
    			         break;
    			case '5':m.dismenu();
    			         u.display();
    					break;
    	        case '6':m.mocomenu();
    	                 u.moco();
    		    		 break;
    			case '7':m.filemenu();
    					 u.file();
    					 break;
    			case '8':break;
    			default:   
    	        cout<<"选择错误,请重新输入"<<endl;			
    		}
    		if(ch=='8') break;
    		m.mainmenu();
    	}
    	return 0;
    }

    
                                            
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,549
精华内容 2,219
关键字:

通讯录管理系统c++

c++ 订阅