/* C++電話本程式 *//* 1.可實現txt檔案的讀取和儲存。 *//* 2.可實現連絡人的增添、刪除和修改。 *//* 3.可實現通過連絡人查詢號碼。 *//* 4.可實現通過號碼查詢連絡人。 *//* 5.可實現全部連絡人的顯示。 *//* 運行環境vs2010||codeblocks */#include<iostream>#include<string>#include<vector>#include<fstream>#include<set>#include<stdlib.h>using namespace std;#define file_name1 "phonenumin.txt" //使用宏定義輸出檔案名#define file_name2 "phonenumout.txt"class Phonenumtext{ public: string name; string num; Phonenumtext(string mz,string hm){ name=mz; num=hm; }};class all{ public: vector<Phonenumtext> phone; bool addnum(string mz,string hm); bool delnum(int bianhao); void displaynum(vector<Phonenumtext>::iterator iter1); void displayallnum(); int change(int bianhao); void find1(string hm); void find2(string mz); void readfromtxt(); void savetxt();}ans;bool all::addnum(string mz,string hm){ Phonenumtext tmp(mz,hm); for(int i=0;i<phone.size();i++){ if(mz==phone[i].name){ cout<<"該連絡人已經存在!"<<endl; return false; } } phone.push_back(tmp); cout<< "新增連絡人... "<<tmp.name<<" 成功" << endl; return false;}bool all::delnum(int bianhao){ if(bianhao>phone.size() || bianhao<1){ cout << "編號輸入錯誤" << endl; return false; } vector<Phonenumtext>::iterator iter1; iter1=phone.begin()+bianhao-1; phone.erase(iter1); return true;}int all::change(int bianhao){ if(bianhao>phone.size()||bianhao<1){ cout<<"編號輸入錯誤"<<endl; return 0; } vector<Phonenumtext>::iterator iter1; iter1=phone.begin()+bianhao-1; cout<<"輸入需要修改後的新號碼:"<<endl; string str; cin>>str; iter1->num=str; return 1;}void all::displayallnum(){ if(phone.size()==0){ cout << "沒有連絡人資訊" << endl; return; } cout << "編號\t姓名\t號碼" << endl; for(vector<Phonenumtext>::iterator iter1=phone.begin();iter1!=phone.end();iter1++){ displaynum(iter1); }}void all::displaynum(vector<Phonenumtext>::iterator iter1){ cout << (int)(iter1-phone.begin()+1) << "\t" << iter1->name << "\t"; cout << "\t" << iter1->num << "\t\t" <<endl;}void all::find1(string hm){ //輸入號碼查詢連絡人 for(vector<Phonenumtext>::iterator iter1=phone.begin();iter1!=phone.end();iter1++){ if(iter1->num==hm) cout<<"該號碼的連絡人為:"<<iter1->name<<endl; return; } cout<<"無該號碼的連絡人!"<<endl; return ;}void all::find2(string mz){ //輸入連絡人查詢號碼 for(vector<Phonenumtext>::iterator iter1=phone.begin();iter1!=phone.end();iter1++){ if(iter1->name==mz) cout<<"改連絡人的號碼為:"<<iter1->num<<endl; return; } cout<<"無該連絡人的號碼!"<<endl; return;}void all::readfromtxt(){ //從檔案讀取 ifstream fin(file_name1); string mz,hm; while(fin >> mz>>hm){ addnum(mz,hm); } fin.close(); cout << "讀取到" << phone.size() << "組資料" << endl; system("pause");}void all::savetxt(){ //儲存至檔案 ofstream fout(file_name2); for(vector<Phonenumtext>::iterator iter1=phone.begin();iter1!=phone.end();iter1++){ fout << "連絡人" <<"\t"<< iter1->name << endl; fout<<"號碼"<<"\t"<<iter1->num<<endl; } fout.close(); cout << "儲存完畢" << endl;}void menu_add(){ //新增連絡人...菜單 string name,num; cout << "->新增連絡人..." << endl; cout << "您正在添加第 " << ans.phone.size()+1 <<" 個連絡人" << endl; cout << "請輸入連絡人姓名:" << endl; cin >> name; cout<<"請輸入連絡人號碼:"; cin>>num; ans.addnum(name,num); return;}void menu_del(){ //連絡人刪除菜單 cout << "->刪除連絡人" << endl; if( ans.phone.size()==0){ cout << "沒有連絡人資訊,無法執行刪除操作" << endl; return; } ans.displayallnum(); cout << "請輸入要刪除連絡人的編號:" << endl; int ipt; cin >> ipt; if(ans.delnum(ipt)) cout << "刪除成功" << endl; else cout << "刪除失敗" << endl; return;}void menu_change(){ ans.displayallnum(); cout<<"->輸入需要修改連絡人的編號"<<endl; int x; cin>>x; if(ans.change(x)) cout << "您已成功修改第 " << ans.phone.size() <<" 個連絡人" << endl; else menu_change();}void menu_find(){ //查詢菜單 cout<<"->查詢"<<endl; if( ans.phone.size()==0){ cout << "沒有連絡人資訊,無法執行查詢操作" << endl; return; } cout<<"請選擇您要進行的操作:"<<endl; cout<<"\t1.輸入號碼查詢連絡人"<<endl; cout<<"\t2.輸入連絡人查詢號碼"<<endl; cout<<"\t3.返回"<<endl; int x; string str; cin>>x; switch(x){ case 1:cout<<"請輸入需要查詢的連絡人的號碼:"<<endl; cin>>str; ans.find1(str); break; case 2:cout<<"請輸入需要查詢的連絡人的姓名:"<<endl; cin>>str; ans.find2(str); break; case 3: return; default: cout << "輸入有誤" << endl; }}void menu1(){ //主菜單 int ipt; system("cls"); while(true){ cout<<"\t*******************************"<<endl; cout<<"\t\t歡迎使用您的電話本"<<endl; cout<<"\t*******************************"<<endl<<endl; cout << "請選擇您要進行的操作:" << endl; cout << " 1.新增連絡人..." << endl; cout << " 2.刪除連絡人" << endl; cout << " 3.顯示全部連絡人" << endl; cout << " 4.尋找" << endl; cout << " 5.修改" << endl; cout << " 6.儲存到檔案" << endl; cout << " 7.退出程式" << endl; cin >> ipt; switch(ipt){ case 1:menu_add();break; case 2:menu_del();break; case 3:ans.displayallnum();break; case 4:menu_find();break; case 5:menu_change();break; case 6:ans.savetxt();break; case 7:exit(0);break; default:cout << "輸入有誤,請重新輸入" << endl;break; } system("pause"); system("cls"); }}int main(){ int ipt1; string str1; system("color A"); cout<<"\t*******************************"<<endl; cout<<"\t\t歡迎使用您的電話本"<<endl; cout<<"\t*******************************"<<endl<<endl; retry: cout << "請選擇資料來源:" << endl; cout << "1.從檔案讀入" << endl; cout << "2.鍵盤錄入" << endl; cout << "請輸入:" << endl; cin >> ipt1; switch(ipt1){ case 1: ans.readfromtxt();break; case 2:break; default:cout << "輸入錯誤,請重新輸入" << endl;goto retry;break; } menu1(); return 0;}