溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++如何使用鏈表存儲(chǔ)實(shí)現(xiàn)通訊錄功能管理

發(fā)布時(shí)間:2022-06-21 09:19:07 來(lái)源:億速云 閱讀:149 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“C++如何使用鏈表存儲(chǔ)實(shí)現(xiàn)通訊錄功能管理”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C++如何使用鏈表存儲(chǔ)實(shí)現(xiàn)通訊錄功能管理”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

代碼詳情

頭文件

#include <iostream>
#include <string>
#include<malloc.h> //system功能調(diào)用 
#include <windows.h> //使用本地系統(tǒng)API獲取插入時(shí)間 
#include <sstream>

基本存儲(chǔ)結(jié)構(gòu)體

typedef struct info{
    string number;
    string date;
    string name;
    string adress;
    string birthday; 
}A;
typedef struct LNode{
    A data; 
    struct LNode *next;
}LNode,*LinkList;

鏈表數(shù)據(jù)初始化
用前插法插入數(shù)據(jù)

int InitList(LinkList &L){ //初始化鏈表 
    L = new LNode;
    L->next = NULL;
    return OK;
}
int ListInsert(LinkList &L,string name,string adress,string birthday,string date,string number){ //考慮使用數(shù)組來(lái)賦值 
    LinkList p; p= new LNode;
    p->data.name = name;
    p->data.adress = adress;
    p->data.date = date;
    p->data.birthday = birthday;
    p->data.number = number;
    p->next = L->next;
    L->next = p;
    return OK;
}

本地WindowsAPI調(diào)用插入時(shí)間

SYSTEMTIME sys; 
GetLocalTime( &sys );
string y = doubleToString(sys.wYear);
string m = doubleToString(sys.wMonth);
string d = doubleToString(sys.wDay);
string ymd = y+"-"+m+"-"+d;

因?yàn)楂@取的是一個(gè)double值,您得對(duì)其時(shí)間強(qiáng)制類型轉(zhuǎn)換

string doubleToString(double num)
{ //強(qiáng)制類型轉(zhuǎn)換 double強(qiáng)制轉(zhuǎn)換為string類型 
    stringstream ss;
    string str;
    ss << num;
    ss >> str;
    return str;
}

數(shù)據(jù)查詢功能

LinkList SearchElemChar(LinkList L,int i,string e){ //思路,傳遞參數(shù)1,2,3,4,eg 1代表name,再分不同的方法在鏈表內(nèi)循環(huán)查找操作 
 if (i == 1){ //查名字 
     while(L!= NULL){
         if(L->data.name == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
             cout << "未查到數(shù)據(jù)!"<<endl;
         }
 }else if(i == 2){//查生日 
     while(L!= NULL){
         if(L->data.birthday == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }
 else if(i == 3){//查地址 
     while(L!= NULL){
         if(L->data.adress == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }else if(i == 4){//查時(shí)間 
     while(L!= NULL){
         if(L->data.date == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }
 else if(i == 5){//查電話 
     while(L!= NULL){
         if(L->data.number == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }
 
}

完整案例

//樂(lè)公第二周項(xiàng)目 實(shí)現(xiàn)基本通訊錄存儲(chǔ)結(jié)構(gòu) 
//基礎(chǔ)鏈表存儲(chǔ)數(shù)據(jù)
#include <iostream>
#include <string>
#include<malloc.h> //system功能調(diào)用 
#include <windows.h> //使用本地系統(tǒng)API獲取插入時(shí)間 
#include <sstream>
#define ERROR 0
#define OK 1
using namespace std;
typedef  int ElemType; /*定義表元素的類型*/
//結(jié)構(gòu)體文件
typedef struct info{
    string number;
    string date;
    string name;
    string adress;
    string birthday; 
}A;
typedef struct LNode{
    A data; 
    struct LNode *next;
}LNode,*LinkList;

int InitList(LinkList &L){ //初始化鏈表 
    L = new LNode;
    L->next = NULL;
    return OK;
}
int ListInsert(LinkList &L,string name,string adress,string birthday,string date,string number){ //考慮使用數(shù)組來(lái)賦值 
    LinkList p; p= new LNode;
    p->data.name = name;
    p->data.adress = adress;
    p->data.date = date;
    p->data.birthday = birthday;
    p->data.number = number;
    p->next = L->next;
    L->next = p;
    return OK;
} 
//查找元素 (難題需要解決)
 
LinkList SearchElemChar(LinkList L,int i,string e){ //思路,傳遞參數(shù)1,2,3,4,eg 1代表name,再分不同的方法在鏈表內(nèi)循環(huán)查找操作 
 if (i == 1){ //查名字 
     while(L!= NULL){
         if(L->data.name == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
             cout << "未查到數(shù)據(jù)!"<<endl;
         }
 }else if(i == 2){//查生日 
     while(L!= NULL){
         if(L->data.birthday == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }
 else if(i == 3){//查地址 
     while(L!= NULL){
         if(L->data.adress == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }else if(i == 4){//查時(shí)間 
     while(L!= NULL){
         if(L->data.date == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }
 else if(i == 5){//查電話 
     while(L!= NULL){
         if(L->data.number == e){
             return L; 
         }else{
         L = L->next;
         }
         }
         if(L = NULL){
         cout <<"未查到數(shù)據(jù)!"<<endl;
         }
 }
 
} 

LinkList SearchElemBefore(LinkList L,string e){ //刪除結(jié)點(diǎn)必須返回前個(gè)結(jié)點(diǎn)的地址,這里查找前個(gè)結(jié)點(diǎn) 
     LinkList P; 
     while(L!= NULL){
         if(L->data.name == e){
             return P; 
         }else{
         P = L;
         L = L->next;
         }
         }
         if(L = NULL){
             return L; 
         }
} 
int ShowMenu(){ //主菜單 
    int a;
    cout<<"------歡迎您使用樂(lè)公通訊錄系統(tǒng)!------"<< endl;
    cout <<"-----請(qǐng)根據(jù)功能輸入對(duì)應(yīng)的序號(hào)--------" <<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.退出系統(tǒng)---------------" <<endl; 
    cout << "請(qǐng)您輸入序號(hào)并按回車進(jìn)入:" ; 
    cin >> a;
    return a;
}

string doubleToString(double num)
{ //強(qiáng)制類型轉(zhuǎn)換 double強(qiáng)制轉(zhuǎn)換為string類型 
    stringstream ss;
    string str;
    ss << num;
    ss >> str;
    return str;
}
void foreachelem(LinkList L){
    if(L->next == NULL){
        cout<<"通訊錄里還沒(méi)有聯(lián)系人,快去新建一下吧~"<<endl; 
    }else{
    while(L->next!=NULL){
        L=L->next;
        cout<< "聯(lián)系人姓名:" << L->data.name <<endl;
        cout<< "聯(lián)系人電話:" << L->data.number<<endl;
        cout<< "聯(lián)系人地址:" << L->data.adress <<endl;
        cout<< "聯(lián)系人生日:" << L->data.birthday <<endl;
        cout<< "錄入時(shí)間:" << L->data.date <<endl;
    }
    cout<< "\n";
}
//system("pause");
}
int serachsamename(LinkList L,string name){ //查找是否存在姓名相同的聯(lián)系人 
    while(L->next!=NULL){
        L=L->next;
        if(L->data.name==name)return 0;
    }
    return 1;
} 
int main(){
    int i;
    LinkList L;
    InitList(L);
    while(i!=6){
        i = ShowMenu();
        if(i ==1){
            cout << "您選擇了:新建聯(lián)系人" <<endl; 
            string number;
            string date;
            string time;
            string name;
            string adress;
            string birthday; 
            cout << "請(qǐng)輸入聯(lián)系人姓名:"; 
            cin >> name;
             SYSTEMTIME sys; 
             GetLocalTime( &sys );
             string y = doubleToString(sys.wYear);
             string m = doubleToString(sys.wMonth);
             string d = doubleToString(sys.wDay);
             string ymd = y+"-"+m+"-"+d;
            int repeat = serachsamename(L,name); 
            if(repeat == 0){
                cout << "聯(lián)系人姓名重復(fù),請(qǐng)刪除舊聯(lián)系人或更改姓名!" << endl; 
             }else{
                 cout << "請(qǐng)輸入聯(lián)系人電話:"; 
                cin >> number;
            if(number.size()!=11){
                cout << "手機(jī)號(hào)輸入有誤,請(qǐng)大于11位!" << endl;    
            }else{
                cout << "請(qǐng)輸入聯(lián)系人生日:"; 
            cin >> birthday;
            cout << "請(qǐng)輸入聯(lián)系人地址:"; 
            cin >> adress;
                cout << "聯(lián)系人于" << ymd;
                int ok;
            ok =  ListInsert(L,name,adress,birthday,ymd,number);
            if(ok == 1){
                cout << "日新建成功!" << endl; 
            }else{ 
            cout << "新建失??!" << endl;
            } 
            }
        }
            system("pause");
            system("cls");
        }else if(i==2){
            cout << "您選擇了:遍歷聯(lián)系人" <<endl; 
            foreachelem(L);
            system("pause");
            system("cls");
            
        }else if(i==3){
            cout << "您選擇了:修改選定聯(lián)系人" <<endl; 
            cout <<"請(qǐng)輸入要修改的聯(lián)系人姓名:" ;
            string name;
            cin >> name;
            LinkList B;
            B = SearchElemChar(L,1,name);
             if(B){
                 system("cls");
                 cout << "聯(lián)系人查找成功!姓名:" << B->data.name << endl; 
                 int select;
                 cout <<"---------修改姓名請(qǐng)輸入1---------" << endl;
                cout <<"---------修改電話請(qǐng)輸入2---------" << endl; 
                cout <<"---------修改生日請(qǐng)輸入3---------" << endl; 
                cout <<"---------修改地址請(qǐng)輸入4---------" << endl; 
                 cout <<"請(qǐng)根據(jù)序號(hào)輸入對(duì)象的選項(xiàng)修改:" ;
                 cin >> select;
                 switch(select){
                     case 1: 
                     {    string name;
                    cout <<"請(qǐng)輸入新姓名:"; 
                    cin >> name;
                    B->data.name = name;
                    cout <<"修改完成!" << endl;
                    break; 
                     }
                    case 2: {
                    string number;
                    cout <<"請(qǐng)輸入新電話:"; 
                    cin >> number;
                    if(number.size()!=11){
                    cout << "手機(jī)號(hào)輸入有誤,請(qǐng)大于11位!" << endl;    
                    }else{
                    B->data.number = number;
                    cout <<"修改完成!" << endl;
                    }
                    break;
                    }
                     case 3:{
                         string birthday;
                         cout <<"請(qǐng)輸入新生日:"; 
                         cin >> birthday;
                         B->data.birthday = birthday;
                        cout <<"修改完成!" << endl;
                        break;
                     }
                     case 4:{
                         string adress;
                         cout <<"請(qǐng)輸入新地址:"; 
                         cin >> adress;
                         B->data.adress = adress;
                        cout <<"修改完成!" << endl;
                        break;
                     }
                     default:cout <<"序號(hào)輸入錯(cuò)誤,請(qǐng)重新輸入!"<<endl; 
                 }
             }else{
                 cout << "未查找到聯(lián)系人!請(qǐng)重新輸入!" << endl; 
             }
              
            system("pause");
            system("cls");
        }else if(i==4){
            system("cls");
            cout << "您選擇了:查詢選定聯(lián)系人" <<endl; 
                cout <<"---------根據(jù)姓名查詢請(qǐng)輸入1---------" << endl;
                cout <<"---------根據(jù)電話查詢請(qǐng)輸入2---------" << endl; 
                cout <<"---------根據(jù)生日查詢請(qǐng)輸入3---------" << endl; 
                cout <<"---------根據(jù)地址查詢請(qǐng)輸入4---------" << endl;
                int select;
                cout <<"請(qǐng)根據(jù)序號(hào)輸入對(duì)象的進(jìn)行查詢:" ;
                 cin >> select;
                 switch(select){
                     case 1:{
                         cout <<"請(qǐng)輸入要查詢的聯(lián)系人姓名:" ;
                        string name;
                        cin >> name;
                        LinkList B;
                        B = SearchElemChar(L,1,name);
                        if(B){
                            cout<<"查詢成功!"<< endl; 
                            cout<<"聯(lián)系人姓名:"<< B->data.name << endl;
                            cout<<"聯(lián)系人電話:"<< B->data.number << endl;
                            cout<<"聯(lián)系人生日:"<< B->data.birthday << endl;
                            cout<<"聯(lián)系人地址:"<< B->data.adress << endl;
                            cout<<"插入日期:"<< B->data.date << endl;
                         }else{
                             cout<<"查詢失??!請(qǐng)重新輸入!"<< endl; 
                         }
                        break;
                     }
                     case 2:
                         {
                         cout <<"請(qǐng)輸入要查詢的聯(lián)系人電話:" ;
                        string number;
                        cin >> number;
                        LinkList B;
                        B = SearchElemChar(L,5,number);
                        if(B){
                            cout<<"查詢成功!"<< endl; 
                            cout<<"聯(lián)系人姓名:"<< B->data.name << endl;
                            cout<<"聯(lián)系人電話:"<< B->data.number << endl;
                            cout<<"聯(lián)系人生日:"<< B->data.birthday << endl;
                            cout<<"聯(lián)系人地址:"<< B->data.adress << endl;
                            cout<<"插入日期:"<< B->data.date << endl;
                         }else{
                             cout<<"查詢失??!請(qǐng)重新輸入!"<< endl; 
                         }
                        break;
                         }
                        case 3:{
                            cout <<"請(qǐng)輸入要查詢的聯(lián)系人生日:" ;
                        string bd;
                        cin >> bd;
                        LinkList B;
                        B = SearchElemChar(L,2,bd);
                        if(B){
                            cout<<"查詢成功!"<< endl; 
                            cout<<"聯(lián)系人姓名:"<< B->data.name << endl;
                            cout<<"聯(lián)系人電話:"<< B->data.number << endl;
                            cout<<"聯(lián)系人生日:"<< B->data.birthday << endl;
                            cout<<"聯(lián)系人地址:"<< B->data.adress << endl;
                            cout<<"插入日期:"<< B->data.date << endl;
                         }else{
                             cout<<"查詢失??!請(qǐng)重新輸入!"<< endl; 
                         }
                        break;
                        }
                        case 4:{
                        cout <<"請(qǐng)輸入要查詢的聯(lián)系人地址:" ;
                        string ad;
                        cin >> ad;
                        LinkList B;
                        B = SearchElemChar(L,3,ad);
                        if(B){
                            cout<<"查詢成功!"<< endl; 
                            cout<<"聯(lián)系人姓名:"<< B->data.name << endl;
                            cout<<"聯(lián)系人電話:"<< B->data.number << endl;
                            cout<<"聯(lián)系人生日:"<< B->data.birthday << endl;
                            cout<<"聯(lián)系人地址:"<< B->data.adress << endl;
                            cout<<"插入日期:"<< B->data.date << endl;
                         }else{
                             cout<<"查詢失?。≌?qǐng)重新輸入!"<< endl; 
                         }
                        break;
                            break;
                        }
                     default:cout <<"序號(hào)輸入錯(cuò)誤,請(qǐng)重新輸入!"<<endl; 
                 } 
            system("pause");
            system("cls");
        }else if(i==5){
            cout << "您選擇了:刪除聯(lián)系人" <<endl; 
            string name;
            cout << "請(qǐng)輸入聯(lián)系人姓名:" <<endl; 
            cin >> name;
            LinkList D,P;
            P = SearchElemBefore(L,name); 
            if(P){
                D = P->next;
            P->next = D->next;
            delete D; //釋放結(jié)點(diǎn)數(shù)據(jù) 
            cout << "刪除成功!" <<endl;
            }else{
                cout<<"查詢失??!未找到指定聯(lián)系人!"<< endl; 
            }
            system("pause");
            system("cls");
        }else if(i==6){
            cout << "系統(tǒng)已退出,歡迎下次使用!" <<endl;
        }
        else{
            cout <<"輸入異常,請(qǐng)重新選擇輸入!" <<endl;
            system("pause");
            system("cls");
        }
    } 
    return 0;
}

讀到這里,這篇“C++如何使用鏈表存儲(chǔ)實(shí)現(xiàn)通訊錄功能管理”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI