#include <iostream>#include <fstream>#include <string>#include<iomanip>#include<stdlib.h>using namespace std;#define FILENAME "C:\\phonebook.txt"class Person{public:string name;string sex;string address;stringtel;stringshuxing;Person(string na){name=na;}Person(string na,stringse,stringadd,stringte,stringsx){name=na;sex=se;address=add;tel=te;shuxing=sx;}void display(){cout<<name<<" "<<sex<<" "<<address<<" "<<tel<<" "<<shuxing<<endl;}void add_Person1();void add_Person2();voidlist_Person();void Reach();voiddelete_Person();voiddisplay_diff();voidrenew_Person();};int main(){Person person1("hh");loop:cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\t"<<endl;cout<<"\t★★**********************欢迎使用通讯录系统******************* ★★\t"<<endl;cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\t"<<endl;cout<<"\t★★************************************************************★★"<<endl;cout<<"\t★★ 1.查看所有联系人 2.查找联系人 3.添加联系人★★\t"<<endl;cout<<"\t★★************************************************************★★\t"<<endl;cout<<"\t★★ 4.删除联系人 5.修改联系人 6.显示类别联系人★★\t"<<endl;cout<<"\t★★************************************************************★★\t"<<endl;cout<<"\t★★7.退出程序★★\t"<<endl;cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\t"<<endl;cout<<"\t 开发者:"<<"黄龙吉"<<" "<<"张帆"<<" "<<"陈续旭"<<" "<<"程传奇"<<endl;cout<<"请输入菜单选项:";int a;do{cin>>a;if(a<0||a>8)cout<<"输入有误请重新输入!(1-7)"<<endl;} while(a<0||a>8);switch(a){case 1: //显示所有联系人{system("cls");person1.list_Person();system("pause");system("cls");break;}case 2: //按姓名搜索 {system("cls");person1.Reach();system("pause");system("cls");break;}case 3: //添加联系人 { system("cls");person1.add_Person2();system("pause");system("cls");break;}case 4: //删除联系人{ system("cls");person1.delete_Person();system("pause");system("cls");break;}case 5: //修改联系人信息 { system("cls");person1.renew_Person();system("pause");system("cls");break;}case 6: //按类别显示{ system("cls");person1.display_diff();system("pause");system("cls");break;}case 7:{//退出break;}default:break;}if (a!=7){goto loop;}return 0;}void Person::add_Person1(){ofstreamfout;fout.open(FILENAME,ios::app);//文件不存在时会主动创建if (fout.fail()){cerr<<"open file with write error"<<endl;}fout<<name<<" "<<sex<<" "<<address<<" "<<tel<<" "<<shuxing<<endl;fout.close();}void Person::add_Person2(){string name;string sex;string address;stringtel;stringshuxing;ofstreamfout;fout.open(FILENAME,ios::app);//文件不存在时会主动创建if (fout.fail()){cerr<<"open file with write error"<<endl;}cout<<"请输入姓名:"<<endl;cin>>name;cout<<"请输入性别:"<<endl;cin>>sex;cout<<"请输入地址:"<<endl;cin>>address;cout<<"请输入电话:"<<endl;cin>>tel;cout<<"请输入属性:"<<endl;cin>>shuxing;fout<<setw(19)<<left<<name<<setw(5)<<left<<sex<<setw(13)<<left<<addr ess<<setw(14)<<left<<tel<<setw(10)<<left<<shuxing<<endl;fout.close();}void Person::list_Person(){ //全部显示记录//read from fileifstream fin(FILENAME);if (fin.fail()){cerr<< "open file with read error" <<endl;_exit(-127);}//////////////////////////string s;//存储返回的字符串,即一行的内容//fin.seekg(20,ios::cur);cout<<"====================================================="<<endl;cout<<setw(19)<<left<<"姓名"<<setw(8)<<left<<"性别"<<setw(14)<<left<<"地址"<<setw(9)<<left<<"电话"<<setw(15)<<left<<"属性"<<endl<<endl;while(getline(fin,s)){//cout<<s.length()<<endl;cout<<s<<endl;}cout<<"====================================================="<<endl; fin.close();}void Person::Reach(){ //查找记录ifstreaminput_file;char h[100];string s;string name;cout<<"请输入要查找人的姓名:"<<endl;cin>>name;input_file.open(FILENAME);if(!input_file){cout<<"Codefile.txt can't open file!"<<endl;return ;}int flag=0;while(input_file>>h){ //使用文件读取来判断文件是否到末尾//字符串运算使用双等于来比较比使用函数更方便if(h==name){cout<< h;getline(input_file,s);cout<<s<<endl;}else{flag=1;}}if(flag)cout<<"对不起通讯录中没有"+name+"的信息!"<<endl;input_file.close();//在c++中字符数组可以直接跟字符串作比较}void Person::delete_Person() //删除记录{ifstream fin(FILENAME);ofstreamfout("temp.txt");if (fin.fail()){cerr<< "open file with read error" <<endl;_exit(-127);}charch;//fin.seekg(20,ios::cur);while(fin.get(ch))//cout<<s.length()<<endl;fout.put(ch);cout<<endl;//将来本来的文件中的内容写入新的文件中暂存为了新的删除做准备cout<<"====================================================="<<endl; fin.close();fout.close();ifstreamfinfile("temp.txt");ofstreamfoutfile(FILENAME);char h[100];string s;string name;cout<<"请输入要删除人的姓名:"<<endl;cin>>name;string name1;if(!finfile){cout<<"Codefile.txt can't open file!"<<endl;return ;}int flag=0;while(finfile>>h){ //使用文件读取来判断文件是否到末尾//字符串运算使用双等于来比较比使用函数更方便if(h!=name){foutfile<<h<<" ";getline(finfile,s);foutfile<<s<<endl;}else{flag=1;name1=name;getline(finfile,s);}}if(flag==1)cout<<"联系人"+name1+"已经被删除!"<<endl;elsecout<<"对不起通讯录中无联系人"+name+"!"<<endl;}void Person::renew_Person(){ifstream fin(FILENAME);ofstreamfout("temp.txt");if (fin.fail()){cerr<< "open file with read error" <<endl;_exit(-127);}charch;//fin.seekg(20,ios::cur);while(fin.get(ch))//cout<<s.length()<<endl;fout.put(ch);cout<<endl;//将来本来的文件中的内容写入新的文件中暂存为了新的删除做准备cout<<"====================================================="<<endl; fin.close();fout.close();ifstreamfinfile("temp.txt");ofstreamfoutfile(FILENAME);char h[100];string s;string name;cout<<"请输入要修改的姓名:"<<endl;cin>>name;string name1;int flag;if(!finfile){cout<<"Codefile.txt can't open file!"<<endl;return ;}while(finfile>>h){ //使用文件读取来判断文件是否到末尾//字符串运算使用双等于来比较比使用函数更方便if(h!=name){foutfile<<h;getline(finfile,s);foutfile<<s<<endl;}else{flag=1;getline(finfile,s);string name;string sex;stringtel;string address;stringshuxing;cout<<"请输入记录:"<<endl;cout<<"姓名:";cin>>name;name1=name;cout<<"性别:";cin>>sex;cout<<"地址:";cin>>address;cout<<"电话:";cin>>tel;cout<<"属性:";cin>>shuxing;foutfile<<setw(19)<<left<<name<<setw(5)<<left<<sex<<setw(13)<<left<< address<<setw(14)<<left<<tel<<setw(10)<<left<<shuxing<<endl;}}if(flag==1)cout<<"联系人"+name+"已经成功修改为"+name1+"!"<<endl;elsecout<<"通讯录中没有联系人"+name+" 无法进行修改!"<<endl;}void Person::display_diff(){//分类显示函数ifstreaminfile(FILENAME);char name[100];char sex[100];chartel[100];charsx[100];char add[100];stringshuxing;cout<<"请输入想要查询的类型:"<<endl;cin>>shuxing;while(infile>>name){infile>>sex;infile>>add;infile>>tel;infile>>sx;if(sx==shuxing){cout<<setw(19)<<left<<name<<setw(5)<<left<<sex<<setw(13)<<left<<addr ess<<setw(14)<<left<<tel<<setw(10)<<left<<shuxing<<endl;}}infile.close();}。