C++ 通讯录管理系统实验报告
【概述】
手機(jī)通訊錄中的聯(lián)系人的信息既可以存儲在手機(jī)中,也可以存儲在手機(jī)卡中,也可以同時(shí)存儲在兩個(gè)位置上(每個(gè)位置上的存儲容量為1000,即手機(jī)卡中或手機(jī)上最多只能存儲1000個(gè)聯(lián)系人)。
存儲在手機(jī)中的聯(lián)系人的信息只包含用戶名和電話號碼兩項(xiàng)信息。存儲在電話卡上的聯(lián)系人的信息除了上面提到的兩項(xiàng)信息外,還包含籍貫,QQ號等信息。
根據(jù)通用的手機(jī)通訊錄的使用方式,采用OOP(Object Oriented Programming,面向?qū)ο缶幊?#xff09;方法編寫一個(gè)手機(jī)通訊錄管理。
【要求】
1.創(chuàng)建文本文件,記錄聯(lián)系人的信息(需要?jiǎng)?chuàng)建兩個(gè)文本文件,分別存儲手機(jī)和手機(jī)卡上的存儲的聯(lián)系人的信息)。
2.以菜單方式工作(字符界面即可)
3.存儲在手機(jī)上的聯(lián)系人的信息包括:姓名和電話號碼;存儲在手機(jī)卡上的聯(lián)系人的信息包括姓名,籍貫,電話號碼,QQ號等信息
4.管理系統(tǒng)的功能包括:
????a)新建聯(lián)系人:添加新的聯(lián)系人(添加時(shí)確定是添加到手機(jī)上還是手機(jī)卡中)
????b)刪除:刪除一個(gè)聯(lián)系人(輸入電話號碼,刪除該聯(lián)系人。說明,如果兩個(gè)存儲位置上都存在該聯(lián)系人的話,需要在兩個(gè)存儲位置上都要進(jìn)行刪除操作)
????c)修改:修改某個(gè)聯(lián)系人的信息(輸入電話號碼,查詢到聯(lián)系人之后進(jìn)行信息的修改。說明,如果兩個(gè)存儲位置上都存在該聯(lián)系人的話,需要在兩個(gè)存儲位置上都要進(jìn)行修改操作)
????d)查詢:根據(jù)名字查詢聯(lián)系人信息(查詢結(jié)果不唯一)
????e)瀏覽:顯示所有聯(lián)系人的信息
????f)將聯(lián)系人的信息從手機(jī)轉(zhuǎn)存到手機(jī)卡上(同時(shí)要避免重復(fù)數(shù)據(jù)的存在。并且在轉(zhuǎn)存是要檢查容量是否受限。下同。)
????g)將聯(lián)系人的信息從手機(jī)卡上準(zhǔn)存到手機(jī)上(同時(shí)要避免重復(fù)數(shù)據(jù)的存在)
5.要支持繼承、多態(tài)、重載(運(yùn)算符重載、函數(shù)重載)等面向?qū)ο蟮幕咎攸c(diǎn)
6.提交程序源碼和課程設(shè)計(jì)報(bào)告。
7.課程設(shè)計(jì)評分說明:實(shí)現(xiàn)功能:通過;使用了繼承技術(shù):中;實(shí)現(xiàn)了運(yùn)算符的重載:良;支持多態(tài):優(yōu)
【實(shí)驗(yàn)過程分析】
一開始思路沒捋清楚,就簡單的分為聯(lián)系人類、通訊錄類、菜單類、用戶類四個(gè)類,然后在一個(gè)文件里按照功能一個(gè)個(gè)硬寫,敲了500多行發(fā)現(xiàn)不僅思路跑偏了而且代碼亂的寫不下去了,看了老師發(fā)的實(shí)驗(yàn)過程分析有了新思路,于是用多文件結(jié)構(gòu)的寫法,將下述的七個(gè)類分拆成聲明的頭文件和實(shí)現(xiàn)的源文件,成功實(shí)現(xiàn)。
說明:
1.實(shí)驗(yàn)過程分析為老師所發(fā)的過程分析+自己理解整合而成;
2.為了便于數(shù)據(jù)存儲與使用,聯(lián)系人姓名、號碼、籍貫、QQ均使用string類進(jìn)行操作;
3.為了易于進(jìn)行聯(lián)系人新建、刪除、修改、查詢等操作,故將手機(jī)通訊簿類和手機(jī)卡通訊簿類中的對象數(shù)組改用 STL 容器中的 vector 動(dòng)態(tài)數(shù)組;
4.為避免一個(gè)源文件中實(shí)現(xiàn)所有功能使得代碼冗長復(fù)雜,故使用多文件結(jié)構(gòu)進(jìn)行功能實(shí)現(xiàn);
5.程序的核心為手機(jī)通訊簿類與手機(jī)卡通訊簿類,實(shí)質(zhì)是具有手機(jī)聯(lián)系人對象與具有手機(jī)卡聯(lián)系人對象的兩個(gè)數(shù)據(jù)庫,其成員函數(shù)用于實(shí)現(xiàn)通訊錄系統(tǒng)的增刪改查;
6.程序的操作由菜單類與用戶類實(shí)現(xiàn),菜單類提供操作界面,用戶類提供操作;用戶類中兩個(gè)對象分別為手機(jī)通訊簿類與手機(jī)卡通訊簿類,通過在用戶類對這兩個(gè)類的動(dòng)態(tài)聯(lián)編,從而實(shí)現(xiàn)在兩個(gè)文本文件中的操作;
7.程序開始時(shí),用戶類及其對象的構(gòu)造函數(shù)會自動(dòng)打開文件進(jìn)行數(shù)據(jù)讀入,結(jié)束時(shí)會自動(dòng)關(guān)閉文件進(jìn)行數(shù)據(jù)寫入并保存;
8.本程序大量使用了轉(zhuǎn)向語句,只有按0才會結(jié)束。
?
————————————————————————————————————————————————
?
建立兩個(gè)文本文件:記錄存儲在手機(jī)上聯(lián)系人的基本信息(文本文件:手機(jī).txt)和存儲在手機(jī)卡上的聯(lián)系人的信息(文本文件:手機(jī)卡.txt)。
建立以下幾個(gè)類:
1.手機(jī)聯(lián)系人類(PhoneContact):表示一個(gè)手機(jī)聯(lián)系人
????數(shù)據(jù)成員:
????????姓名:string name;
????????電話號碼:string tel_num;
????成員函數(shù):
????????并帶默認(rèn)值參數(shù)的構(gòu)造函數(shù):PhoneContact(string rname = "新聯(lián)系人", string rtel_num = "無號碼");
? ? ? ? 修改數(shù)據(jù)成員值的函數(shù):void modify();
????????重載>>運(yùn)算符,完成對象的輸入操作:friend istream &operator >>(istream &input, PhoneContact &obj);
????????重載<<運(yùn)算符,完成對象的輸出操作:friend ostream &operator <<(ostream &output, PhoneContact &obj);
????? ? 獲取姓名的函數(shù):get_name();
? ??? ? 獲取號碼的函數(shù):string get_tel_num();
? ??? ? 為數(shù)據(jù)成員賦值的函數(shù):void set(string rname, string rtel_num);
2.手機(jī)卡聯(lián)系人(CardContact):繼承于手機(jī)聯(lián)系人類,表示一個(gè)手機(jī)卡聯(lián)系人
????新增數(shù)據(jù)成員:
????????籍貫:string homeland;
????????QQ號:string QQ;
? ? 成員函數(shù):
????????并帶默認(rèn)值參數(shù)的構(gòu)造函數(shù):CardContact(string rname = "新聯(lián)系人", string rtel_num = "無號碼", string rhomeland = "無地址", string rQQ = "無QQ");
? ? ? ??修改數(shù)據(jù)成員值的函數(shù):void?modify();
????????重載>>運(yùn)算符,完成對象的輸入操作:friend istream & operator >>(istream &input, CardContact &obj);
????????重載<<運(yùn)算符,完成對象的輸出操作:friend ostream & operator <<(ostream &output, CardContact &obj);
????? ? 獲取籍貫的函數(shù):string get_homeland();
? ??? ? 獲取QQ的函數(shù):string get_QQ();
? ??? ? 為數(shù)據(jù)成員賦值的函數(shù):void set(string rname, string rtel_num,string rhomeland,string rQQ);
3.通訊簿抽象類(Maillist):為支持多態(tài),將函數(shù)封裝為純虛函數(shù)
? ? 數(shù)據(jù)成員:無
? ? 成員函數(shù):
????????新建聯(lián)系人的函數(shù):virtual void add() = 0;
????? ? 刪除聯(lián)系人的函數(shù):virtual void Delete(string rtel_num) = 0;
????????修改聯(lián)系人的信息:virtual void change(string rtel_num) = 0;
? ? ? ? 查詢并顯示某一聯(lián)系人的信息的函數(shù):virtual void inquiry(string rname) = 0;
????? ? 顯示所有聯(lián)系信息的函數(shù):virtual void display() = 0;
4.手機(jī)通訊簿類(PhoneMaillist):繼承于通訊簿抽象類,用于記錄手機(jī)中存儲的所有聯(lián)系人的信息
????數(shù)據(jù)成員:
????????手機(jī)聯(lián)系人的數(shù)量:int phone_contact_num;
????????手機(jī)聯(lián)系人對象數(shù)組:vector <PhoneContact>?phone_contact;
????成員函數(shù):
????????構(gòu)造函數(shù):PhoneMaillist(); ? ?//讀取文本文件(手機(jī).txt)中的數(shù)據(jù),并根據(jù)文件內(nèi)容創(chuàng)建聯(lián)系人對象數(shù)組
????????析構(gòu)函數(shù):~PhoneMaillist();? ? //將對象數(shù)組中的內(nèi)容寫入到文本文件(手機(jī).txt)中
????????新建聯(lián)系人的函數(shù):void add();
????? ? 刪除聯(lián)系人的函數(shù):void Delete(string rtel_num);
????????修改聯(lián)系人的信息:void change(string rtel_num);
? ? ? ? 查詢并顯示某一聯(lián)系人的信息的函數(shù):void inquiry(string rname);
????? ? 顯示所有聯(lián)系信息的函數(shù):void display();
? ? ? ? 獲取手機(jī)通訊錄聯(lián)系人數(shù)量的函數(shù):int get_phone_contact_num();
? ? ? ? 獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的姓名的函數(shù): string get_name(int i);????//用于查詢聯(lián)系人信息
????????獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的號碼的函數(shù):string get_tel_num(int i);? ? //用于查詢聯(lián)系人信息
? ? ? ? 將姓名、號碼壓入動(dòng)態(tài)數(shù)組的函數(shù):void copy(string rname, string rtel_num);????//用于兩個(gè)通訊簿之間數(shù)據(jù)復(fù)制、移動(dòng)
????? ? 清空手機(jī)通訊錄的函數(shù):void clear();????//用于兩個(gè)通訊簿之間數(shù)據(jù)復(fù)制、移動(dòng)
5.手機(jī)卡通信簿類(CardMaillist):繼承于通訊簿抽象類,用于記錄手機(jī)卡中存儲的所有聯(lián)系人的信息
????數(shù)據(jù)成員:
????????手機(jī)卡聯(lián)系人的數(shù)量:int card_contact_num;
????????手機(jī)卡聯(lián)系人對象數(shù)組:vector <CardContact> card_contact;
????成員函數(shù):
????????構(gòu)造函數(shù):CardMaillist(); ? ?//讀取文本文件(手機(jī)卡.txt)中的數(shù)據(jù),并根據(jù)文件內(nèi)容創(chuàng)建聯(lián)系人對象數(shù)組
????????析構(gòu)函數(shù):~CardMaillist();? ? //將對象數(shù)組中的內(nèi)容寫入到文本文件(手機(jī)卡.txt)中
????????新建聯(lián)系人的函數(shù):void add();
????? ? 刪除聯(lián)系人的函數(shù):void Delete(string rtel_num);
????????修改聯(lián)系人的信息:void change(string rtel_num);
? ? ? ? 查詢并顯示某一聯(lián)系人的信息的函數(shù):void inquiry(string rname);
????? ? 顯示所有聯(lián)系信息的函數(shù):void display();
? ? ? ? 獲取手機(jī)卡通訊錄聯(lián)系人數(shù)量的函數(shù):int get_card_contact_num();
? ? ? ? 獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的姓名的函數(shù): string get_name(int i);????//用于查詢聯(lián)系人信息
????????獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的號碼的函數(shù):string get_tel_num(int i);????//用于查詢聯(lián)系人信息
? ? ? ? 將姓名、號碼壓入動(dòng)態(tài)數(shù)組的函數(shù):void copy(string rname, string rtel_num);? ? //用于兩個(gè)通訊簿之間數(shù)據(jù)復(fù)制、移動(dòng)
????? ? 清空手機(jī)卡通訊錄的函數(shù):void clear();? ? //用于兩個(gè)通訊簿之間數(shù)據(jù)復(fù)制、移動(dòng)
6.用戶類(User):對通訊錄進(jìn)行管理,利用基類指針,調(diào)用相應(yīng)的通訊簿對象,從而實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編。
? ? 數(shù)據(jù)成員:
? ? ? ? 手機(jī)通訊簿:phonemaillist;
? ? ? ? 手機(jī)卡通訊簿:cardmaillist;
? ? ? ? 菜單類對象:uimenu;
????成員函數(shù):
????????新建聯(lián)系人的函數(shù):void add();
????? ? 刪除聯(lián)系人的函數(shù):void Delete();
????????修改聯(lián)系人的信息:void change();
? ? ? ? 查詢并顯示某一聯(lián)系人的信息的函數(shù):void inquiry();
????? ? 顯示所有聯(lián)系信息的函數(shù):void display();
????????移動(dòng)手機(jī)卡通訊錄到手機(jī)通訊錄:void move_card_to_phone();
????????移動(dòng)手機(jī)通訊錄到手機(jī)卡通訊錄:void move_phone_to_card();
????????復(fù)制手機(jī)卡通訊錄到手機(jī)通訊錄:void copy_card_to_phone();
? ? ? ? 復(fù)制手機(jī)通訊錄到手機(jī)卡通訊錄:void copy_phone_to_card();
7.界面菜單類(Uimenu):用來給出操作提示
? ? 數(shù)據(jù)成員:無
? ? 成員函數(shù):
????? ? 主菜單:void MainUimenu();
? ? ? ? ?添加菜單:void AddUimenu();
? ? ? ? ?刪除菜單:void DeleteUimenu();
? ? ? ? ?修改菜單:void ChangeUimenu();
? ? ? ? ?修改手機(jī)聯(lián)系人菜單:void ChangePhoneUimenu();
? ? ? ? ?修改手機(jī)卡聯(lián)系人菜單:void ChangeCardUimenu();
? ? ? ? ?查詢菜單:void InquiryUimenu();
? ? ? ? ?顯示菜單:void DisplayUimenu();
? ? ? ? ?轉(zhuǎn)存菜單:void TransferredMethod();
【源程序】
1.頭文件
1)手機(jī)聯(lián)系人類
//phonecontact.h
/*手機(jī)聯(lián)系人類*/#ifndef PHONECONTACT_H #define PHONECONTACT_H#include<iostream> #include<string> using namespace std; class PhoneContact { protected:string name;string tel_num; public:PhoneContact(string rname = "新聯(lián)系人", string rtel_num = "無號碼");??? //有參構(gòu)造函數(shù)void modify();????????????????????????????????????????????????????????//修改數(shù)據(jù)成員的值friend istream &operator >>(istream &input, PhoneContact &obj);???????//重載>>運(yùn)算符friend ostream &operator <<(ostream &output, PhoneContact &obj);??? ?//重載<<運(yùn)算符string get_name();????????????????????????????????????????????????????//獲取姓名string get_tel_num();???????????????????????????????????????????????? //獲取號碼void set(string rname, string rtel_num);??????????????????????????????//為數(shù)據(jù)成員賦值 };#endif2)手機(jī)卡聯(lián)系人類
//cardcontact.h
/*手機(jī)卡聯(lián)系人類*/#ifndef CARDCONTACT_H #define CARDCONTACT_H#include"phonecontact.h" class CardContact : public PhoneContact{ protected:string homeland;string QQ; public:CardContact(string rname = "新聯(lián)系人", string rtel_num = "無號碼", string rhomeland = "無地址", string rQQ = "無QQ");????//有參構(gòu)造函數(shù)void modify();????//修改數(shù)據(jù)成員的值friend istream & operator >>(istream &input, CardContact &obj);?? ??????//重載>>運(yùn)算符friend ostream & operator <<(ostream &output, CardContact &obj);????????//重載<<運(yùn)算符string get_homeland();??????????????????????????????????????????????????//獲取籍貫string get_QQ();????????????????????????????????????????????????????????//獲取QQvoid set(string rname, string rtel_num,string rhomeland,string rQQ);????//為數(shù)據(jù)成員賦值 };#endif3)通訊簿抽象類
//maillist.h
/*通訊簿抽象類*/#ifndef MAILLIST_H #define MAILLIST_H#include<iostream> #include<string> using namespace std; class Maillist { public:virtual void add() = 0; //新建聯(lián)系人virtual void Delete(string rtel_num) = 0; //刪除聯(lián)系人virtual void change(string rtel_num) = 0; //修改聯(lián)系人信息 virtual void inquiry(string rname) = 0; //查詢聯(lián)系人信息 virtual void display() = 0; //顯示所有聯(lián)系人信息 };#endif4)手機(jī)通訊簿類
//phonemaillist.h
/*手機(jī)通訊簿類*/#ifndef PHONEMAILLIST_H #define PHONEMAILLIST_H#include"cardcontact.h" #include"maillist.h" #include<vector> class PhoneMaillist:public Maillist { protected:int phone_contact_num; //手機(jī)聯(lián)系人數(shù)量vector <PhoneContact> phone_contact; ??//手機(jī)聯(lián)系人對象動(dòng)態(tài)數(shù)組 public:PhoneMaillist(); //構(gòu)造函數(shù),讀取文本文件中的數(shù)據(jù),并根據(jù)文件內(nèi)容創(chuàng)建聯(lián)系人對象數(shù)組~PhoneMaillist(); //析構(gòu)函數(shù),將對象數(shù)組中的內(nèi)容寫入到文本文件中void add(); //新建聯(lián)系人void Delete(string rtel_num); //刪除聯(lián)系人void change(string rtel_num); //修改聯(lián)系人信息 void inquiry(string rname); //查詢聯(lián)系人信息 void display(); //顯示所有聯(lián)系人信息int get_phone_contact_num(); //獲取手機(jī)通訊錄聯(lián)系人數(shù)量void copy(string rname, string rtel_num); //將姓名、號碼壓入動(dòng)態(tài)數(shù)組string get_name(int i); //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的姓名string get_tel_num(int i); //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的號碼void clear(); //清空手機(jī)通訊錄 };#endif5)手機(jī)卡通訊簿類
//cardmaillist.h
#ifndef CARDMAILLIST_H #define CARDMAILLIST_H#include"cardcontact.h" #include"maillist.h" #include<vector> class CardMaillist :public Maillist { protected:int card_contact_num; //手機(jī)卡聯(lián)系人數(shù)量vector <CardContact> card_contact; //手機(jī)卡聯(lián)系人對象動(dòng)態(tài)數(shù)組 public:CardMaillist(); //構(gòu)造函數(shù),讀取文本文件中的數(shù)據(jù),并根據(jù)文件內(nèi)容創(chuàng)建聯(lián)系人對象數(shù)組~CardMaillist(); //析構(gòu)函數(shù),將對象數(shù)組中的內(nèi)容寫入到文本文件中void add() ; //新建聯(lián)系人void Delete(string rtel_num) ; //刪除聯(lián)系人void change(string rtel_num) ; //修改聯(lián)系人信息 void inquiry(string rname) ; //查詢聯(lián)系人信息 void display() ; //顯示所有聯(lián)系人信息int get_card_contact_num(); //獲取手機(jī)卡通訊錄聯(lián)系人數(shù)量void copy(string rname, string rtel_num); //將姓名、號碼壓入動(dòng)態(tài)數(shù)組string get_name(int i); //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的姓名string get_tel_num(int i); //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的號碼void clear(); //清空手機(jī)卡通訊錄 };#endif6)用戶類
//user.h
#ifndef USER_H #define USER_H#include"cardmaillist.h" #include"phonemaillist.h" #include"uimenu.h" class User {PhoneMaillist phonemaillist;CardMaillist cardmaillist;Uimenu uimenu; public:User(); //構(gòu)造函數(shù)~User(); //析構(gòu)函數(shù)void add(); //新建聯(lián)系人void Delete(); //刪除聯(lián)系人void change(); //修改聯(lián)系人信息 void inquiry(); //查詢聯(lián)系人信息 void display(); //顯示所有聯(lián)系人信息void move_card_to_phone(); //移動(dòng)手機(jī)卡通訊錄到手機(jī)通訊錄void move_phone_to_card(); //移動(dòng)手機(jī)通訊錄到手機(jī)卡通訊錄void copy_card_to_phone(); //復(fù)制手機(jī)卡通訊錄到手機(jī)通訊錄void copy_phone_to_card(); //復(fù)制手機(jī)通訊錄到手機(jī)卡通訊錄 };#endif7)菜單類
//uimenu.h
/*菜單類*/#ifndef UIMENU_H #define UIMENU_H#include<iostream> using namespace std; class Uimenu { public:void MainUimenu(); //主菜單void AddUimenu(); //添加菜單void DeleteUimenu(); //刪除菜單void ChangeUimenu(); //修改菜單void ChangePhoneUimenu(); //修改手機(jī)聯(lián)系人菜單void ChangeCardUimenu(); //修改手機(jī)卡聯(lián)系人菜單void InquiryUimenu(); //查詢菜單void DisplayUimenu(); //顯示菜單void TransferredMethod(); //轉(zhuǎn)存菜單 }; #endif2.除主函數(shù)外的源文件
1)手機(jī)聯(lián)系人類的實(shí)現(xiàn)
//PhoneContact.cpp
/*手機(jī)聯(lián)系人類的實(shí)現(xiàn)*/#include"PhoneContact.h" #include"Uimenu.h" PhoneContact::PhoneContact(string rname , string rtel_num ) {//有參構(gòu)造函數(shù)name = rname;tel_num = rtel_num; } void PhoneContact::modify() {//修改數(shù)據(jù)成員的值int n;Uimenu obj;change1:{obj.ChangePhoneUimenu();cin >> n;switch (n){case 1: {cout << "請重新輸入聯(lián)系人姓名:";cin >> name;cout << "請重新輸入聯(lián)系人號碼:";cin >> tel_num;break;}case 2: {cout << "請重新輸入聯(lián)系人姓名:";cin >> name;break;}case 3: {cout << "請重新輸入聯(lián)系人號碼:";cin >> tel_num;break;}case 0: {return;}default:{cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change1;}}} } istream &operator >>(istream &input, PhoneContact &obj) {//重載>>運(yùn)算符cout << "請輸入聯(lián)系人姓名:";input >> obj.name;cout << "請輸入聯(lián)系人號碼:";input >> obj.tel_num;return input; } ostream &operator <<(ostream &output, PhoneContact &obj) {//重載<<運(yùn)算符output << "聯(lián)系人姓名:" << obj.name << "\t";output << "聯(lián)系人號碼:" << obj.tel_num << endl;return output; } string PhoneContact::get_name() { //獲取姓名return name; } string PhoneContact::get_tel_num() { //獲取號碼return tel_num; } void PhoneContact::set(string rname, string rtel_num) {//為數(shù)據(jù)成員賦值name = rname;tel_num = rtel_num; }2)手機(jī)卡聯(lián)系人類的實(shí)現(xiàn)
//CardContact.cpp
/*手機(jī)卡聯(lián)系人類的實(shí)現(xiàn)*/#include"cardcontact.h" #include"Uimenu.h" CardContact::CardContact(string rname, string rtel_num, string rhomeland, string rQQ) :PhoneContact(rname, rtel_num){//有參構(gòu)造函數(shù)homeland = rhomeland; QQ = rQQ; } void CardContact::modify() {//修改數(shù)據(jù)成員的值int n;Uimenu obj;change2: {obj.ChangeCardUimenu();cin >> n;switch (n){case 1: {cout << "請重新輸入聯(lián)系人姓名:";cin >> name;cout << "請重新輸入聯(lián)系人號碼:";cin >> tel_num;cout << "請重新輸入聯(lián)系人籍貫:";cin >> homeland;cout << "請重新輸入聯(lián)系人QQ:";cin >> QQ;break;}case 2: {cout << "請重新輸入聯(lián)系人姓名:";cin >> name;break;}case 3: {cout << "請重新輸入聯(lián)系人號碼:";cin >> tel_num;break;}case 4: {cout << "請重新輸入聯(lián)系人籍貫:";cin >> homeland;break;}case 5: {cout << "請重新輸入聯(lián)系人QQ:";cin >> QQ;break;}case 0: {return;}default: {cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change2;}}} } istream & operator >> (istream & input, CardContact & obj){//重載>>運(yùn)算符cout << "請輸入聯(lián)系人姓名:";input >> obj.name;cout << "請輸入聯(lián)系人號碼:";input >> obj.tel_num;cout << "請輸入籍貫:";input >> obj.homeland;cout << "請輸入QQ:";input >> obj.QQ;return input; } ostream & operator << (ostream &output, CardContact &obj){//重載<<運(yùn)算符output << "聯(lián)系人姓名:" << obj.name << "\t";output << "聯(lián)系人號碼:" << obj.tel_num << "\t";output << "聯(lián)系人籍貫:" << obj.homeland << "\t";output << "聯(lián)系人QQ:" << obj.QQ << endl;return output; } string CardContact::get_homeland() { //獲取籍貫return homeland; } string CardContact::get_QQ() { //獲取QQreturn QQ; } void CardContact::set(string rname, string rtel_num, string rhomeland, string rQQ) { //為數(shù)據(jù)成員賦值PhoneContact::set(rname,rtel_num);//調(diào)用基類set函數(shù)homeland = rhomeland;QQ = rQQ; }3)手機(jī)通訊簿類的實(shí)現(xiàn)
//PhoneMaillist.cpp
/*手機(jī)通訊簿類的實(shí)現(xiàn)*/#include"phonemaillist.h" #include"uimenu.h" #include<fstream> PhoneMaillist::PhoneMaillist() { //構(gòu)造函數(shù),讀取文本文件中的數(shù)據(jù),并根據(jù)文件內(nèi)容創(chuàng)建聯(lián)系人對象數(shù)組ifstream fin("手機(jī).txt");//打開文件 /*吸收標(biāo)題行*/char str[100];fin.getline(str, 100);fin.getline(str, 100);fin.getline(str, 100);fin.getline(str, 100);phone_contact_num = -1;string rname, rtel_num;while (fin >> rname >> rtel_num )//讀取文件中的聯(lián)系人姓名與號碼,且跳過姓名為“新聯(lián)系人”的聯(lián)系人{(lán)PhoneContact temp; //建立手機(jī)聯(lián)系人臨時(shí)對象temp.set(rname, rtel_num); //存儲聯(lián)系人姓名和號碼phone_contact.push_back(temp); //壓入vector容器phone_contact_num++; //聯(lián)系人數(shù)量+1}fin.close();//關(guān)閉文件 } PhoneMaillist::~PhoneMaillist() { //析構(gòu)函數(shù),將對象數(shù)組中的內(nèi)容寫入到文本文件中ofstream fout("手機(jī).txt");//打開文件 /*寫入文件標(biāo)題*/fout << " ----------------------------------------------- " << endl;fout << "| 手機(jī)聯(lián)系人 |" << endl;fout << " ----------------------------------------------- " << endl;fout << " 姓名\t\t\t號碼\t\t\t" << endl;for (int i = phone_contact_num; i >= 0; i--){fout.setf(ios::left); //設(shè)置左對齊fout.width(24); //設(shè)置域?qū)?#xff0c;與上述三個(gè)/t對應(yīng)fout << phone_contact[i].get_name(); //寫入姓名fout.width(24); //設(shè)置域?qū)?#xff0c;與上述三個(gè)/t對應(yīng)fout << phone_contact[i].get_tel_num() << endl; //寫入號碼}phone_contact_num = -1; //待存儲聯(lián)系人數(shù)量清空phone_contact.clear(); //vector容器清空fout.close(); //關(guān)閉文件 } void PhoneMaillist::add() { //新建聯(lián)系人if (phone_contact_num>1000) { //當(dāng)達(dá)到容量上限時(shí)不再添加cout << "手機(jī)通訊錄容量已滿,無法新建聯(lián)系人!" << endl; cout << "請嘗試在手機(jī)卡通訊錄新建聯(lián)系人" << endl;return; } PhoneContact temp; //建立臨時(shí)對象cin >> temp; //使用重載 >> 輸入數(shù)據(jù) phone_contact.push_back(temp); //壓入vector容器phone_contact_num++; //手機(jī)聯(lián)系人個(gè)數(shù)+1cout << "新建聯(lián)系人成功!" << endl; } void PhoneMaillist::Delete(string rtel_num) { //刪除聯(lián)系人if (phone_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}while (true) {bool flag = false;for (int i = 0; i <= phone_contact_num; i++) { //枚舉所有聯(lián)系人if (phone_contact[i].get_tel_num() == rtel_num) { //如果號碼相同flag = true;cout << "該聯(lián)系人信息為:" << endl;cout << phone_contact[i];cout << "是否刪除該聯(lián)系人?" << endl;cout << "1.確定刪除" << endl;cout << "2.取消刪除" << endl;int t;cin >> t;if (t == 1){phone_contact.erase(phone_contact.begin() + i);phone_contact_num--;cout << "刪除成功!" << endl;}else //如果取消刪除,繼續(xù)向下枚舉continue;}}if (flag == false) { //如果未找到相應(yīng)聯(lián)系人cout << "在手機(jī)通訊錄未找到相應(yīng)聯(lián)系人!" << endl;cout << "是否重新輸入號碼?" << endl;cout << "1.重新輸入" << endl;cout << "2.不重新輸入" << endl;int t; cin >> t;if (t == 1) {cout << "請重新輸入號碼 :";cin >> rtel_num;continue;}else { cout << "輸入取消" << endl;return;}}else { //如果找到相應(yīng)聯(lián)系人cout << "搜索結(jié)束,刪除完畢!" << endl; return; }} } void PhoneMaillist::change(string rtel_num) { //修改聯(lián)系人信息 if (phone_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}while (true){bool flag = false;for (int i = 0; i <= phone_contact_num; i++) { //枚舉所有聯(lián)系人if (phone_contact[i].get_tel_num() == rtel_num) { //如果號碼相同flag = true;cout << "該聯(lián)系人信息為:" << endl;cout << phone_contact[i];cout << "是否修改該聯(lián)系人?" << endl;cout << "1.確定修改" << endl;cout << "2.取消修改" << endl;int t;cin >> t;if (t == 1) {phone_contact[i].modify(); cout << "修改成功!" << endl;cout << "是否尋找相同姓名聯(lián)系人?" << endl;cout << "1.確定尋找" << endl;cout << "2.取消尋找" << endl;int t;cin >> t;if (t == 1)continue;elsebreak;}else { //如果取消修改,繼續(xù)向下枚舉cout << "是否尋找相同姓名聯(lián)系人?" << endl;cout << "1.確定尋找" << endl;cout << "2.取消尋找" << endl;int t;cin >> t;if (t == 1)continue;elsebreak;}}}if (flag == false) { //如果未找到相應(yīng)聯(lián)系人cout << "在手機(jī)通訊錄未找到相應(yīng)聯(lián)系人!" << endl;cout << "是否重新輸入號碼?" << endl;cout << "1.重新輸入" << endl;cout << "2.不重新輸入" << endl;int t;cin >> t;if (t == 1) {cout << "請重新輸入號碼 :";cin >> rtel_num;continue;}else {cout << "輸入取消" << endl;return;}}else { //如果找到相應(yīng)聯(lián)系人cout << "搜索結(jié)束,修改完畢!" << endl;return;}} } void PhoneMaillist::inquiry(string rname) { //查詢聯(lián)系人信息 if (phone_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}while (true){bool flag = false;for (int i = 0; i <= phone_contact_num; i++) { //枚舉所有聯(lián)系人if (phone_contact[i].get_name() == rname) { //如果姓名相同flag = true;cout << "該聯(lián)系人信息為:" << endl;cout << phone_contact[i];cout << "是否尋找相同姓名聯(lián)系人?" << endl;cout << "1.確定尋找" << endl;cout << "2.取消尋找" << endl;int t;cin >> t;if (t==1) continue;else break;}}if (flag == false) { //如果未找到相應(yīng)聯(lián)系人cout << "在手機(jī)通訊錄未找到相應(yīng)聯(lián)系人!" << endl;cout << "是否重新輸入姓名?" << endl;cout << "1.重新輸入" << endl;cout << "2.不重新輸入" << endl;int t;cin >> t;if (t == 1) {cout << "請重新輸入姓名 :";cin >> rname;continue;}else {cout << "輸入取消" << endl;return;}}else { //如果找到相應(yīng)聯(lián)系人cout << "搜索結(jié)束,查詢完畢!" << endl;return;}} } void PhoneMaillist::display() { //顯示所有聯(lián)系人信息if (phone_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return; }cout << "手機(jī)通訊錄中共有" << phone_contact_num + 1 << "個(gè)聯(lián)系人." << endl;cout << "信息如下:" << endl;vector <PhoneContact>::iterator temp; //vector迭代器for (temp = phone_contact.begin(); temp != phone_contact.end(); temp++) //顯示vector容器內(nèi)的所有信息cout << (*temp); } int PhoneMaillist::get_phone_contact_num() { //獲取手機(jī)通訊錄聯(lián)系人數(shù)量return phone_contact_num; } void PhoneMaillist::copy(string rname, string rtel_num) { //將姓名、號碼壓入動(dòng)態(tài)數(shù)組for (int i = 0; i <= phone_contact_num; i++) { //枚舉所有聯(lián)系人 if (phone_contact[i].get_name() == rname && phone_contact[i].get_tel_num() == rtel_num) { //避免存在相同的聯(lián)系人cout << "姓名為:" << rname << " 電話為:" << rtel_num << " 的聯(lián)系人已存在!" << endl;return;}}PhoneContact temp; //建立手機(jī)聯(lián)系人臨時(shí)對象temp.set(rname, rtel_num); //將聯(lián)系人信息賦給臨時(shí)對象phone_contact.push_back(temp); //壓入動(dòng)態(tài)數(shù)組phone_contact_num++; //手機(jī)聯(lián)系人數(shù)量+1cout << "已存入姓名為:" << rname << " 電話為:" << rtel_num << " 的聯(lián)系人!" << endl; } string PhoneMaillist::get_name(int i) { //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的姓名return phone_contact[i].get_name(); } string PhoneMaillist::get_tel_num(int i) { //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的號碼return phone_contact[i].get_tel_num(); } void PhoneMaillist::clear() { //清空手機(jī)通訊錄phone_contact.clear();phone_contact_num = -1; }4)手機(jī)卡通訊簿類的實(shí)現(xiàn)
//CardMaillist.cpp
/*手機(jī)卡通訊簿類的實(shí)現(xiàn)*/#include"cardmaillist.h" #include"uimenu.h" #include<fstream>CardMaillist::CardMaillist() { //構(gòu)造函數(shù),讀取文本文件中的數(shù)據(jù),并根據(jù)文件內(nèi)容創(chuàng)建聯(lián)系人對象數(shù)組ifstream fin("手機(jī)卡.txt");//打開文件 /*吸收標(biāo)題行*/char str[100];fin.getline(str, 100);fin.getline(str, 100);fin.getline(str, 100);fin.getline(str, 100);card_contact_num = -1;string rname, rtel_num,rhomeland,rQQ;while (fin >> rname >> rtel_num >> rhomeland >> rQQ)//讀取文件中的聯(lián)系人姓名、號碼、籍貫與QQ{ CardContact temp; //建立手機(jī)卡聯(lián)系人臨時(shí)對象temp.set(rname, rtel_num , rhomeland , rQQ); //存儲聯(lián)系人姓名和號碼card_contact.push_back(temp); //壓入vector容器card_contact_num++; //聯(lián)系人數(shù)量+1}fin.close();//關(guān)閉文件 } CardMaillist::~CardMaillist() { //析構(gòu)函數(shù),將對象數(shù)組中的內(nèi)容寫入到文本文件中ofstream fout("手機(jī)卡.txt");//打開文件 /*寫入文件標(biāo)題*/fout << " ----------------------------------------------------------------------- " << endl;fout << "| 手機(jī)卡聯(lián)系人 |" << endl;fout << " ----------------------------------------------------------------------- " << endl;fout << " 姓名\t\t號碼\t\t籍貫\t\tQQ\t\t" << endl;for (int i = card_contact_num; i >= 0; i--){fout.setf(ios::left); //設(shè)置左對齊fout.width(16); //設(shè)置域?qū)?#xff0c;與上述2個(gè)/t對應(yīng)fout << card_contact[i].get_name(); //寫入姓名fout.width(16); //設(shè)置域?qū)?#xff0c;與上述2個(gè)/t對應(yīng)fout << card_contact[i].get_tel_num(); //寫入號碼fout.width(16); //設(shè)置域?qū)?#xff0c;與上述2個(gè)/t對應(yīng)fout << card_contact[i].get_homeland(); //寫入籍貫fout.width(16); //設(shè)置域?qū)?#xff0c;與上述2個(gè)/t對應(yīng)fout << card_contact[i].get_QQ() << endl; //寫入QQ}card_contact_num = -1; //待存儲聯(lián)系人數(shù)量清空card_contact.clear(); //vector容器清空fout.close(); //關(guān)閉文件 } void CardMaillist::add() { //新建聯(lián)系人if (card_contact_num>1000) { //當(dāng)達(dá)到容量上限時(shí)不再添加cout << "手機(jī)通訊錄容量已滿,無法新建聯(lián)系人!" << endl;cout << "請嘗試在手機(jī)卡通訊錄新建聯(lián)系人" << endl;return;}CardContact temp; //建立臨時(shí)對象cin >> temp; //使用重載 >> 輸入數(shù)據(jù) card_contact.push_back(temp); //壓入vector容器card_contact_num++; //手機(jī)聯(lián)系人個(gè)數(shù)+1cout << "新建聯(lián)系人成功!" << endl; } void CardMaillist::Delete(string rtel_num) { //刪除聯(lián)系人if (card_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}while (true) {bool flag = false;for (int i = 0; i <= card_contact_num; i++) { //枚舉所有聯(lián)系人if (card_contact[i].get_tel_num() == rtel_num) { //如果號碼相同flag = true;cout << "該聯(lián)系人信息為:" << endl;cout << card_contact[i];cout << "是否刪除該聯(lián)系人?" << endl;cout << "1.確定刪除" << endl;cout << "2.取消刪除" << endl;int t;cin >> t;if (t == 1){card_contact.erase(card_contact.begin() + i);card_contact_num--;cout << "刪除成功!" << endl;}else //如果取消刪除,繼續(xù)向下枚舉continue;}}if (flag == false) { //如果未找到相應(yīng)聯(lián)系人cout << "在手機(jī)通訊錄未找到相應(yīng)聯(lián)系人!" << endl;cout << "是否重新輸入號碼?" << endl;cout << "1.重新輸入" << endl;cout << "2.不重新輸入" << endl;int t;cin >> t;if (t == 1) {cout << "請重新輸入號碼 :";cin >> rtel_num;continue;}else {cout << "輸入取消" << endl;return;}}else { //如果找到相應(yīng)聯(lián)系人cout << "搜索結(jié)束,刪除完畢!" << endl;return;}} } void CardMaillist::change(string rtel_num) { //修改聯(lián)系人信息 if (card_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}while (true){bool flag = false;for (int i = 0; i <= card_contact_num; i++) { //枚舉所有聯(lián)系人if (card_contact[i].get_tel_num() == rtel_num) { //如果號碼相同flag = true;cout << "該聯(lián)系人信息為:" << endl;cout << card_contact[i];cout << "是否修改該聯(lián)系人?" << endl;cout << "1.確定修改" << endl;cout << "2.取消修改" << endl;int t;cin >> t;if (t == 1) {card_contact[i].modify();cout << "修改成功!" << endl;cout << "是否尋找相同姓名聯(lián)系人?" << endl;cout << "1.確定尋找" << endl;cout << "2.取消尋找" << endl;int t;cin >> t;if (t == 1)continue;elsebreak;}else { //如果取消修改,繼續(xù)向下枚舉cout << "是否尋找相同姓名聯(lián)系人?" << endl;cout << "1.確定尋找" << endl;cout << "2.取消尋找" << endl;int t;cin >> t;if (t == 1)continue;elsebreak;}}}if (flag == false) { //如果未找到相應(yīng)聯(lián)系人cout << "在手機(jī)通訊錄未找到相應(yīng)聯(lián)系人!" << endl;cout << "是否重新輸入號碼?" << endl;cout << "1.重新輸入" << endl;cout << "2.不重新輸入" << endl;int t;cin >> t;if (t == 1) {cout << "請重新輸入號碼 :";cin >> rtel_num;continue;}else {cout << "輸入取消" << endl;return;}}else { //如果找到相應(yīng)聯(lián)系人cout << "搜索結(jié)束,修改完畢!" << endl;return;}} } void CardMaillist::inquiry(string rname) { //查詢聯(lián)系人信息 if (card_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}while (true){bool flag = false;for (int i = 0; i <= card_contact_num; i++) { //枚舉所有聯(lián)系人if (card_contact[i].get_name() == rname) { //如果姓名相同flag = true;cout << "該聯(lián)系人信息為:" << endl;cout << card_contact[i];cout << "是否尋找相同姓名聯(lián)系人?" << endl;cout << "1.確定尋找" << endl;cout << "2.取消尋找" << endl;int t;cin >> t;if (t == 1)continue;elsebreak;}}if (flag == false) { //如果未找到相應(yīng)聯(lián)系人cout << "在手機(jī)通訊錄未找到相應(yīng)聯(lián)系人!" << endl;cout << "是否重新輸入姓名?" << endl;cout << "1.重新輸入" << endl;cout << "2.不重新輸入" << endl;int t;cin >> t;if (t == 1) {cout << "請重新輸入姓名 :";cin >> rname;continue;}else {cout << "輸入取消" << endl;return;}}else { //如果找到相應(yīng)聯(lián)系人cout << "搜索結(jié)束,查詢完畢!" << endl;return;}} } void CardMaillist::display() { //顯示所有聯(lián)系人信息if (card_contact_num<0) { //手機(jī)通訊錄沒有聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}cout << "手機(jī)通訊錄中共有" << card_contact_num + 1 << "個(gè)聯(lián)系人." << endl;cout << "信息如下:" << endl;vector <CardContact>::iterator temp; //vector迭代器for (temp = card_contact.begin(); temp != card_contact.end(); temp++) //顯示vector容器內(nèi)的所有信息cout << (*temp); } int CardMaillist::get_card_contact_num() { //獲取手機(jī)卡通訊錄聯(lián)系人數(shù)量return card_contact_num; } void CardMaillist::copy(string rname, string rtel_num) { //將姓名、號碼壓入動(dòng)態(tài)數(shù)組for (int i = 0; i <= card_contact_num; i++) { //枚舉所有聯(lián)系人 if (card_contact[i].get_name() == rname && card_contact[i].get_tel_num() == rtel_num) { //避免存在相同的聯(lián)系人cout << "姓名為:" << rname << " 電話為:" << rtel_num << " 的聯(lián)系人已存在!" << endl;return;}}CardContact temp; //建立手機(jī)卡聯(lián)系人臨時(shí)對象temp.set(rname, rtel_num, "無地址", "無QQ"); //將聯(lián)系人信息賦給臨時(shí)對象card_contact.push_back(temp); //壓入動(dòng)態(tài)數(shù)組card_contact_num++; //手機(jī)卡聯(lián)系人數(shù)量+1cout << "已存入姓名為:" << rname << " 電話為:" << rtel_num << " 的聯(lián)系人!" << endl; } string CardMaillist::get_name(int i) { //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的姓名return card_contact[i].get_name(); } string CardMaillist::get_tel_num(int i) { //獲取動(dòng)態(tài)數(shù)組第i個(gè)聯(lián)系人的號碼return card_contact[i].get_tel_num(); } void CardMaillist::clear() { //清空手機(jī)卡通訊錄card_contact.clear();card_contact_num = -1; }5)用戶類的實(shí)現(xiàn)
//User.cpp
/*用戶類的實(shí)現(xiàn)*/#include"user.h" #include<iostream> using namespace std; User::User() { //構(gòu)造函數(shù)cout << "****************************************" << endl;cout << "* 歡迎使用通訊錄管理系統(tǒng) *" << endl;cout << "* 手機(jī)通訊錄目前有" << phonemaillist.get_phone_contact_num() + 1 << "個(gè)聯(lián)系人 *" << endl;cout << "* 手機(jī)卡通訊錄目前有" << cardmaillist.get_card_contact_num() + 1 << "個(gè)聯(lián)系人 *" << endl;cout << "****************************************" << endl; } User::~User() { //析構(gòu)函數(shù)cout << "****************************************" << endl;cout << "* 感謝您使用本通訊錄管理系統(tǒng) *" << endl;cout << "* 手機(jī)通訊錄目前有" << phonemaillist.get_phone_contact_num() + 1 << "個(gè)聯(lián)系人 *" << endl;cout << "* 手機(jī)卡通訊錄目前有" << cardmaillist.get_card_contact_num() + 1 << "個(gè)聯(lián)系人 *" << endl;cout << "****************************************" << endl;/*顯示控制,使界面更友好*/system("pause");system("cls"); } void User::add() { //新建聯(lián)系人change3: {uimenu.AddUimenu(); //新建菜單Maillist *temp; //通訊簿基類指針int t;cin >> t;switch (t) {case 1: { //新建聯(lián)系人到手機(jī)temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> add(); //調(diào)用手機(jī)通訊簿對象函數(shù) break;}case 2: { //新建聯(lián)系人到手機(jī)卡temp = &cardmaillist; //指針指向手機(jī)卡通訊簿對象 temp -> add(); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 0: { //返回上一級return;}default: { //選擇錯(cuò)誤cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change3;}}} } void User::Delete() { //刪除聯(lián)系人change4: {uimenu.DeleteUimenu(); //刪除菜單Maillist *temp; //通訊簿基類指針string rtel_num;int t;cin >> t;switch (t){case 1: { //在手機(jī)通訊錄刪除聯(lián)系人cout << "請輸入要?jiǎng)h除的聯(lián)系人的號碼:";cin >> rtel_num;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> Delete(rtel_num); //調(diào)用手機(jī)通訊簿對象函數(shù) break;}case 2: { //在手機(jī)卡通訊錄刪除聯(lián)系人cout << "請輸入要?jiǎng)h除的聯(lián)系人的號碼:";cin >> rtel_num;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp -> Delete(rtel_num); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 3: { //在兩個(gè)通訊錄都進(jìn)行刪除cout << "請輸入要?jiǎng)h除的聯(lián)系人的號碼:";cin >> rtel_num;cout << "--------------手機(jī)通訊錄----------------" << endl;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> Delete(rtel_num); //調(diào)用手機(jī)通訊簿對象函數(shù) cout << "--------------手機(jī)卡通訊錄----------------" << endl;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp -> Delete(rtel_num); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 0: { //返回上一級return;}default: { //選擇錯(cuò)誤cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change4;}}}} void User::change() { //修改聯(lián)系人信息 change5: {uimenu.ChangeUimenu(); //修改菜單Maillist *temp; //通訊簿基類指針string rtel_num;int t;cin >> t;switch (t){case 1: { //在手機(jī)通訊錄修改聯(lián)系人cout << "請輸入要修改的聯(lián)系人的號碼:";cin >> rtel_num;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> change(rtel_num); //調(diào)用手機(jī)通訊簿對象函數(shù) break;}case 2: { //在手機(jī)卡通訊錄修改聯(lián)系人cout << "請輸入要修改的聯(lián)系人的號碼:";cin >> rtel_num;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp -> change(rtel_num); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 3: { //在兩個(gè)通訊錄都進(jìn)行修改cout << "請輸入要修改的聯(lián)系人的號碼:";cin >> rtel_num;cout << "--------------手機(jī)通訊錄----------------" << endl;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> change(rtel_num); //調(diào)用手機(jī)通訊簿對象函數(shù) cout << "--------------手機(jī)卡通訊錄----------------" << endl;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp -> change(rtel_num); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 0: { //返回上一級return;}default: { //選擇錯(cuò)誤cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change5;}}} } void User::inquiry() { //查詢聯(lián)系人信息 change6: {uimenu.InquiryUimenu(); //查詢菜單Maillist *temp; //通訊簿基類指針string rname;int t;cin >> t;switch (t){case 1: { //在手機(jī)通訊錄查詢聯(lián)系人cout << "請輸入要查詢的聯(lián)系人的姓名:";cin >> rname;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> inquiry(rname); //調(diào)用手機(jī)通訊簿對象函數(shù) break;}case 2: { //在手機(jī)卡通訊錄查詢聯(lián)系人cout << "請輸入要查詢的聯(lián)系人的姓名:";cin >> rname;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp ->inquiry(rname); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 3: { //在兩個(gè)通訊錄都進(jìn)行修改cout << "請輸入要查詢的聯(lián)系人的姓名:";cin >> rname;cout << "--------------手機(jī)通訊錄----------------" << endl;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp ->inquiry(rname); //調(diào)用手機(jī)通訊簿對象函數(shù) cout << "--------------手機(jī)卡通訊錄----------------" << endl;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp ->inquiry(rname); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 0: { //返回上一級return;}default: { //選擇錯(cuò)誤cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change6;}}} } void User::display() { //顯示所有聯(lián)系人信息change6: {uimenu.DisplayUimenu(); //顯示菜單Maillist *temp; //通訊簿基類指針int t;cin >> t;switch (t){case 1: { //顯示手機(jī)通訊錄所有聯(lián)系人cout << "--------------手機(jī)通訊錄----------------" << endl;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> display(); //調(diào)用手機(jī)通訊簿對象函數(shù) break;}case 2: { //顯示手機(jī)卡通訊錄所有聯(lián)系人cout << "--------------手機(jī)卡通訊錄----------------" << endl;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp -> display(); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 3: { //顯示兩個(gè)通訊錄的所有聯(lián)系人cout << "--------------手機(jī)通訊錄----------------" << endl;temp = &phonemaillist; //指針指向手機(jī)通訊簿對象 temp -> display(); //調(diào)用手機(jī)通訊簿對象函數(shù) cout << "--------------手機(jī)卡通訊錄----------------" << endl;temp = &cardmaillist; //指針指向手機(jī)通訊簿對象 temp -> display(); //調(diào)用手機(jī)卡通訊簿對象函數(shù) break;}case 0: { //返回上一級return;}default: { //選擇錯(cuò)誤cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change6;}}} } void User::move_card_to_phone() { //移動(dòng)手機(jī)卡通訊錄到手機(jī)通訊錄if (cardmaillist.get_card_contact_num()<0) { //手機(jī)卡通訊錄無聯(lián)系人時(shí)cout << "手機(jī)卡通訊錄無聯(lián)系人!" << endl;return;}for (int i = 0; i <= cardmaillist.get_card_contact_num(); i++) { //枚舉手機(jī)卡通訊錄所有聯(lián)系人if (phonemaillist.get_phone_contact_num() >= 1000) { //當(dāng)手機(jī)通訊錄容量滿時(shí)cout << "手機(jī)通訊錄已滿!無法增加新聯(lián)系人!" << endl;return;}phonemaillist.copy(cardmaillist.get_name(i), cardmaillist.get_tel_num(i)); //將手機(jī)卡通訊錄的第i個(gè)用戶存入手機(jī)通訊錄}cardmaillist.clear(); //清空手機(jī)卡通訊錄cout << "移動(dòng)成功!" << endl; } void User::move_phone_to_card() { //移動(dòng)手機(jī)通訊錄到手機(jī)卡通訊錄if (phonemaillist.get_phone_contact_num()<0) { //手機(jī)通訊錄無聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}for (int i = 0; i <= phonemaillist.get_phone_contact_num(); i++) { //枚舉手機(jī)通訊錄所有聯(lián)系人if (cardmaillist.get_card_contact_num() >= 1000) { //當(dāng)手機(jī)卡通訊錄容量滿時(shí)cout << "手機(jī)卡通訊錄已滿!無法增加新聯(lián)系人!" << endl;return;}cardmaillist.copy(phonemaillist.get_name(i), phonemaillist.get_tel_num(i)); //將手機(jī)通訊錄的第i個(gè)用戶存入手機(jī)卡通訊錄}phonemaillist.clear(); //清空手機(jī)通訊錄cout << "移動(dòng)成功!" << endl; } void User::copy_card_to_phone() { //復(fù)制手機(jī)卡通訊錄到手機(jī)通訊錄if (cardmaillist.get_card_contact_num()<0) { //手機(jī)卡通訊錄無聯(lián)系人時(shí)cout << "手機(jī)卡通訊錄無聯(lián)系人!" << endl;return;}for (int i = 0; i <= cardmaillist.get_card_contact_num(); i++) { //枚舉手機(jī)卡通訊錄所有聯(lián)系人if (phonemaillist.get_phone_contact_num() >= 1000) { //當(dāng)手機(jī)通訊錄容量滿時(shí)cout << "手機(jī)通訊錄已滿!無法增加新聯(lián)系人!" << endl;return;}phonemaillist.copy(cardmaillist.get_name(i), cardmaillist.get_tel_num(i)); //將手機(jī)卡通訊錄的第i個(gè)用戶存入手機(jī)通訊錄}cout << "復(fù)制成功!" << endl; } void User::copy_phone_to_card() { //復(fù)制手機(jī)通訊錄到手機(jī)卡通訊錄if (phonemaillist.get_phone_contact_num()<0) { //手機(jī)通訊錄無聯(lián)系人時(shí)cout << "手機(jī)通訊錄無聯(lián)系人!" << endl;return;}for (int i = 0; i <= phonemaillist.get_phone_contact_num(); i++) { //枚舉手機(jī)通訊錄所有聯(lián)系人if (cardmaillist.get_card_contact_num() >= 1000) { //當(dāng)手機(jī)卡通訊錄容量滿時(shí)cout << "手機(jī)卡通訊錄已滿!無法增加新聯(lián)系人!" << endl;return;}cardmaillist.copy(phonemaillist.get_name(i), phonemaillist.get_tel_num(i)); //將手機(jī)通訊錄的第i個(gè)用戶存入手機(jī)卡通訊錄}cout << "復(fù)制成功!" << endl; }6)菜單類的實(shí)現(xiàn)
//Uimenu.cpp
/*菜單類的實(shí)現(xiàn)*/#include"uimenu.h" void Uimenu::MainUimenu() { //主菜單cout << "***********************************************" << endl;cout << "* 1.新建聯(lián)系人 *" << endl;cout << "* 2.刪除聯(lián)系人 *" << endl;cout << "* 3.查詢聯(lián)系人 *" << endl;cout << "* 4.修改聯(lián)系人信息 *" << endl;cout << "* 5.瀏覽所有聯(lián)系人信息 *" << endl;cout << "* 6.將聯(lián)系人的信息從手機(jī)轉(zhuǎn)存到手機(jī)卡上 *" << endl;cout << "* 7.將聯(lián)系人的信息從手機(jī)卡轉(zhuǎn)存到手機(jī)上 *" << endl;cout << "* 0.退出 *" << endl;cout << "***********************************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::AddUimenu() { //添加聯(lián)系人菜單cout << "***********************************" << endl;cout << "* 1.新建聯(lián)系人到手機(jī) *" << endl;cout << "* 2.新建聯(lián)系人到手機(jī)卡 *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "***********************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::DeleteUimenu() { //刪除菜單cout << "************************************" << endl;cout << "* 1.在手機(jī)通訊錄刪除聯(lián)系人 *" << endl;cout << "* 2.在手機(jī)卡通訊錄刪除聯(lián)系人 *" << endl;cout << "* 3.在兩個(gè)通訊錄都進(jìn)行刪除 *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "************************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::ChangeUimenu() { //修改菜單cout << "************************************" << endl;cout << "* 1.在手機(jī)通訊錄修改聯(lián)系人 *" << endl;cout << "* 2.在手機(jī)卡通訊錄修改聯(lián)系人 *" << endl;cout << "* 3.在兩個(gè)通訊錄都進(jìn)行修改 *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "************************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::ChangePhoneUimenu() { //修改手機(jī)聯(lián)系人菜單cout << "**********************************" << endl;cout << "* 1.修改聯(lián)系人姓名和號碼 *" << endl;cout << "* 2.修改聯(lián)系人姓名 *" << endl;cout << "* 3.修改聯(lián)系人號碼 *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "**********************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::ChangeCardUimenu() { //修改手機(jī)卡聯(lián)系人菜單cout << "**********************************" << endl;cout << "* 1.修改聯(lián)系人全部信息 *" << endl;cout << "* 2.修改聯(lián)系人姓名 *" << endl;cout << "* 3.修改聯(lián)系人號碼 *" << endl;cout << "* 4.修改聯(lián)系人籍貫 *" << endl;cout << "* 5.修改聯(lián)系人QQ *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "**********************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::InquiryUimenu() { //查詢菜單cout << "************************************" << endl;cout << "* 1.在手機(jī)通訊錄查詢聯(lián)系人 *" << endl;cout << "* 2.在手機(jī)卡通訊錄查詢聯(lián)系人 *" << endl;cout << "* 3.在兩個(gè)通訊錄都進(jìn)行查詢 *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "************************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::DisplayUimenu() { //顯示菜單cout << "************************************" << endl;cout << "* 1.顯示手機(jī)通訊錄所有聯(lián)系人 *" << endl;cout << "* 2.顯示手機(jī)卡通訊錄所有聯(lián)系人 *" << endl;cout << "* 3.顯示兩個(gè)通訊錄的所有聯(lián)系人 *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "************************************" << endl;cout << "請選擇要進(jìn)行的操作:"; } void Uimenu::TransferredMethod() { //轉(zhuǎn)存菜單cout << "************************************" << endl;cout << "* 1.復(fù)制 *" << endl;cout << "* 2.移動(dòng) *" << endl;cout << "* 0.返回上一級 *" << endl;cout << "************************************" << endl;cout << "請選擇要進(jìn)行的操作:"; }3.主函數(shù)源文件
//Main.cpp
/*主函數(shù)*/#include"uimenu.h" #include"phonecontact.h" #include"cardcontact.h" #include"maillist.h" #include"phonemaillist.h" #include"cardmaillist.h" #include"user.h" int main() {User user; //創(chuàng)建用戶對象Uimenu uimenu; //創(chuàng)建菜單對象int m=1;while (m != 0) {change_begin: {/*顯示控制,使界面更友好*/system("pause");system("cls");uimenu.MainUimenu(); //顯示主菜單cin >> m;switch (m) { //對主菜單操作選擇case 1: { //新建聯(lián)系人user.add();goto change_begin;}case 2: { //刪除聯(lián)系人user.Delete();goto change_begin;}case 3: { //查詢聯(lián)系人user.inquiry();goto change_begin;}case 4: { //修改聯(lián)系人信息user.change();goto change_begin;}case 5: { //瀏覽所有聯(lián)系人信息user.display();goto change_begin;}case 6: { //將聯(lián)系人的信息從手機(jī)轉(zhuǎn)存到手機(jī)卡上Transferred1: {uimenu.TransferredMethod();int n;cin >> n;switch (n) {case 1: {user.copy_phone_to_card();goto change_begin;}case 2: {user.move_phone_to_card();goto change_begin;}case 0: {goto change_begin;}default: {cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto Transferred1;}}}}case 7: { //將聯(lián)系人的信息從手機(jī)卡轉(zhuǎn)存到手機(jī)上 Transferred2: {uimenu.TransferredMethod();int n;cin >> n;switch (n) {case 1: {user.copy_card_to_phone();goto change_begin;}case 2: {user.move_card_to_phone();goto change_begin;}case 0: {goto change_begin;}default: {cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto Transferred2;}}}}case 0: { //退出/*顯示控制,使界面更友好*/system("pause");system("cls");break;}default: {cout << "選擇錯(cuò)誤,請重新選擇!" << endl;goto change_begin;}}}}getchar();return 0; }?
總結(jié)
以上是生活随笔為你收集整理的C++ 通讯录管理系统实验报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拦截导弹(信息学奥赛一本通-T1289)
- 下一篇: 装箱问题(信息学奥赛一本通-T1226)