通讯录管理系统要求:1.创建文本文件,记录联系人的信息。
2.以菜单方式工作3.联系人的信息包括:姓名,籍贯,电话号码,QQ号等信息4.管理系统的功能包括:a)增加:添加新的联系人b)删除:删除一个联系人(输入电话号码,删除该联系人)c)修改:修改某个联系人的信息i.修改姓名ii.修改电话号码iii.修改籍贯iv.修改QQ号d)查询i.根据名字查询联系人信息(查询结果不唯一)ii.根据电话号码查询联系人信息iii.根据QQ号查询联系人信息实现过程分析:建立一个文本文件,记录联系人的基本信息建立以下几个类:1.联系人类:表示一个联系人数据成员包括:姓名籍贯电话号码QQ号成员函数包括一组set函数为数据成员赋值一组modify函数,修改数据成员的值Display函数:显示联系人的信息2.通讯簿类(这是一个数据库类):用于记录所有联系人的信息数据成员包括:联系人的数量联系人对象数组成员函数包括构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人删除操作:删除一个联系人Display:显示所有联系人的信息修改某一联系人的信息:查询并显示某一联系人的信息:3.用户类(这是一个操作类,完成通讯簿的操作):用户拥有一个通讯簿,并且可以对通讯录进行管理数据成员包括:通讯簿对象成员函数包括(成员函数体现用户的行为):添加联系人:调用通讯簿对象的增加函数完成联系人的添加删除联系人:调用通讯簿对象的删除操作删除一个联系人Display:显示所有联系人的信息修改某一联系人的信息:调用通讯簿对象的函数完成操作查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作4.界面菜单类:用来给出操作提示数据成员:可以不定义数据成员成员函数:Display函数:显示操作菜单的提示。
说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。
#include<iostream>#include<string.h>#include<fstream.h>#include<windows.h>class person{int tel;int QQ;char name[20];char nplace[40];public:int set_tel(){return tel;}int set_QQ(){return QQ;}char *set_name(){char *p=new char[strlen(name)+1];strcpy(p, name);return p;}char*set_nplace(){char *p=new char[strlen(nplace)+1];strcpy(p, nplace);return p;}friend istream & operator >>(istream &in,person&b);friend ostream & operator <<(ostream &out,person&b);void disp(){cout<<"联系人姓名:"<<this->name<<endl;cout<<"联系人电话:"<<this->tel<<endl;cout<<"联系人籍贯:"<<this->nplace<<endl;cout<<"联系人QQ:"<<this->QQ<<endl;}void luru(){cout<<"请输入姓名、籍贯、电话、QQ"<<endl;cin>>this->name;cin>>this->nplace;cin>>this->tel;cin>>this->QQ;}friend class addbook;};istream & operator >> (istream &in,person&p){in>>;in>>p.tel;in>>p.nplace;in>>p.QQ;return in;}ostream & operator << (ostream &out,person&p){out<<"姓名:"<<<<endl;out<<"籍贯:"<<p.nplace<<endl;out<<"电话:"<<p.tel<<endl;out<<" QQ : "<<p.QQ<<endl;return out;}class addbook{person *book;int n;public:addbook();~addbook();void add();void display();void del();void modify();void searchbyname();void searchbytel();void searchbyQQ();void Luru(){for(int j=0;j<n;j++)book[j].luru();}};addbook::addbook(){book = new person[1000];fstream fin("person.dat",ios::in|ios::binary);int i=0;n=i;if(!fin){cout<<"文件打开失败"<<endl;return ;}fin.read ((char *)&book[i],sizeof(person));while(!fin.eof()){i++;fin.read ((char *)&book[i],sizeof(person));}n=i;fin.close ();return ;}addbook::~addbook(){fstream fout("person.dat",ios::out|ios::binary);if(!fout){cout<<"文件打开失败"<<endl;return;}for(int i=0;i<n;i++)fout.write((char *)&book[i],sizeof(person));fout.close();}void addbook::add(){n++;book[n-1].luru();}void addbook::display(){for(int j=0;j<n;j++){cout<<j<<" ";book[j].disp();}}void addbook::modify(){int a;int b;int c;int t;int Tel;int qq;char Name[20];char Nplace[30];display();cout<<"请输入要修改的联系人的序号:"<<endl;cout<<"1.修改姓名2.修改籍贯3.修改电话4.修改QQ"<<endl; cin>>b;do{switch(b){case 1:cout<<"输入新姓名:"<<endl;cin>>Name;strcpy(book[a].name,Name);break;case 2:cout<<"输入新籍贯:"<<endl;cin>>Nplace;strcpy(book[a].nplace,Nplace);break;case 3:cout<<"输入新电话:"<<endl;cin>>Tel;book[a].tel=Tel;break;case 4:cout<<"输入新QQ:"<<endl;cin>>qq;book[a].QQ=qq;break;}cout<<"是否确认所修改的信息:1.是2 重新修改"<<endl;cin>>c;}while(c==2);cout<<"浏览修改后的所有通讯录信息"<<endl;display();cout<<"继续修改请按1,不再修改请按2"<<endl;cin>>t;switch(t){case 1:modify();break;case 2:break;default:break;}}void addbook::del(){char NAme[20];int k;display();cout<<"请输入要删除联系人的姓名:"<<endl;cin>>NAme;for(int m=0;m<n;m++){if(strcmp(book[m].name,NAme)==0){k=m;}}for(;k<m-1;k++){book[k]=book[k+1];}n=n-1;}void addbook::searchbyname(){char NAMe[20];int i,t;cout<<"请输入要查找的联系人姓名"<<endl;cin>>NAMe;for(i=0;i<n;i++)if(strcmp(book[i].name,NAMe)==0){cout<<"该联系人信息如下"<<endl;cout<<book[i]<<endl;break;}if(i==n)cout<<"查无此人"<<endl;cout<<"1.退出2.继续查询"<<endl;cin>>t;switch(t){case 1:break;case 2:system("cls");searchbyname();break;default:break;}}void addbook::searchbytel(){int TEL;int i,t;cout<<"请输入要查找的联系人电话"<<endl;cin>>TEL;for(i=0;i<n;i++)if(book[i].tel==TEL){cout<<"该联系人信息如下"<<endl;cout<<book[i]<<endl;break;}if(i==n)cout<<"查无此人"<<endl;cout<<"1.退出2.继续查询"<<endl;cin>>t;switch(t){case 1:break;case 2:system("cls");searchbytel();break;default:break;}}void addbook::searchbyQQ(){int qq;int i,t;cout<<"请输入要查找的联系人电话"<<endl;cin>>qq;for(i=0;i<n;i++)if(book[i].QQ==qq)cout<<"该联系人信息如下"<<endl;cout<<book[i]<<endl;break;}if(i==n)cout<<"查无此人"<<endl;cout<<"1.退出2.继续查询"<<endl;cin>>t;switch(t){case 1:break;case 2:system("cls");searchbytel();break;default:break;}}class manage{addbook a;public:void Add(){a.add();}void Del(){a.del();}void Modify(){a.modify();}void Search(){int i;cout<<"请输入查询方式"<<endl;cout<<"1.按姓名查询2.按电话号码查询3.按QQ查询"<<endl;cin>>i;switch(i)case 1:a.searchbyname();break;case 2:a.searchbytel();break;case 3:a.searchbyQQ();break;default:break;}}void Display(){a.display();}};class caidan:public manage{public:void menu(){cout<<"===================通讯录管理系统================"<<endl;cout<<"| |"<<endl;cout<<"| 1.浏览通讯录 2.查询联系人信息|"<<endl;cout<<"| |"<<endl;cout<<"| 3.增加联系人信息 4.删除联系人信息|"<<endl;cout<<"| |"<<endl;cout<<"| 5.修改联系人信息 6.exit |"<<endl;cout<<"================================================="<<endl;int n,flag;char ask;cout<<"\n"<<endl;do{cout<<"☆☆☆请选择需要操作的步骤(1--6)☆☆☆"<<endl;cin>>n;if(n>=1&&n<=6){flag=1; break;}else{flag=0;cout<<endl;cout<<"输入错误,重新选择1-6"<<endl;cout<<endl;}} while(flag==0);while(flag==1){switch(n){case 1:cout<<" ☆☆☆通讯录☆☆☆"<<endl;cout<<endl;Display();break;case 2:cout<<" ☆☆☆查询联系人信息☆☆☆"<<endl;Search();break;case 3:cout<<" ☆☆☆增加联系人信息☆☆☆"<<endl;Add();break;case 4:cout<<" ☆☆☆删除联系人信息☆☆☆"<<endl;Del();break;case 5:cout<<" ☆☆☆修改联系人信息☆☆☆"<<endl;Modify();break;case 6:exit(0);break;default :break;}cout<<"是否返回菜单(y or n):\n"<<endl;cin>>ask;if(ask=='y'){flag=1;system("cls"); /*清屏*/menu(); /*调用菜单函数*/cout<<"再次选择操作步骤(1--6):"<<endl;cin>>n;}else{system("cls");exit(0);}}}};void main(){caidan h;h.menu();}。