您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++如何使用鏈表存儲實現通訊錄功能管理”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++如何使用鏈表存儲實現通訊錄功能管理”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
頭文件
#include <iostream> #include <string> #include<malloc.h> //system功能調用 #include <windows.h> //使用本地系統API獲取插入時間 #include <sstream>
基本存儲結構體
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){ //考慮使用數組來賦值 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調用插入時間
SYSTEMTIME sys; GetLocalTime( &sys ); string y = doubleToString(sys.wYear); string m = doubleToString(sys.wMonth); string d = doubleToString(sys.wDay); string ymd = y+"-"+m+"-"+d;
因為獲取的是一個double值,您得對其時間強制類型轉換
string doubleToString(double num) { //強制類型轉換 double強制轉換為string類型 stringstream ss; string str; ss << num; ss >> str; return str; }
數據查詢功能
LinkList SearchElemChar(LinkList L,int i,string e){ //思路,傳遞參數1,2,3,4,eg 1代表name,再分不同的方法在鏈表內循環查找操作 if (i == 1){ //查名字 while(L!= NULL){ if(L->data.name == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout << "未查到數據!"<<endl; } }else if(i == 2){//查生日 while(L!= NULL){ if(L->data.birthday == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } } else if(i == 3){//查地址 while(L!= NULL){ if(L->data.adress == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } }else if(i == 4){//查時間 while(L!= NULL){ if(L->data.date == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } } else if(i == 5){//查電話 while(L!= NULL){ if(L->data.number == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } } }
完整案例
//樂公第二周項目 實現基本通訊錄存儲結構 //基礎鏈表存儲數據 #include <iostream> #include <string> #include<malloc.h> //system功能調用 #include <windows.h> //使用本地系統API獲取插入時間 #include <sstream> #define ERROR 0 #define OK 1 using namespace std; typedef int ElemType; /*定義表元素的類型*/ //結構體文件 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){ //考慮使用數組來賦值 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){ //思路,傳遞參數1,2,3,4,eg 1代表name,再分不同的方法在鏈表內循環查找操作 if (i == 1){ //查名字 while(L!= NULL){ if(L->data.name == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout << "未查到數據!"<<endl; } }else if(i == 2){//查生日 while(L!= NULL){ if(L->data.birthday == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } } else if(i == 3){//查地址 while(L!= NULL){ if(L->data.adress == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } }else if(i == 4){//查時間 while(L!= NULL){ if(L->data.date == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } } else if(i == 5){//查電話 while(L!= NULL){ if(L->data.number == e){ return L; }else{ L = L->next; } } if(L = NULL){ cout <<"未查到數據!"<<endl; } } } LinkList SearchElemBefore(LinkList L,string e){ //刪除結點必須返回前個結點的地址,這里查找前個結點 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<<"------歡迎您使用樂公通訊錄系統!------"<< endl; cout <<"-----請根據功能輸入對應的序號--------" <<endl; cout <<"-----------1.新建聯系人--------------" <<endl; cout <<"--------2.查看所有聯系人-------------" <<endl; cout <<"--------3.修改選定聯系人-------------" <<endl; cout <<"--------4.查詢選定聯系人-------------" <<endl; cout <<"--------5.刪除選定聯系人-------------" <<endl; cout <<"------------6.退出系統---------------" <<endl; cout << "請您輸入序號并按回車進入:" ; cin >> a; return a; } string doubleToString(double num) { //強制類型轉換 double強制轉換為string類型 stringstream ss; string str; ss << num; ss >> str; return str; } void foreachelem(LinkList L){ if(L->next == NULL){ cout<<"通訊錄里還沒有聯系人,快去新建一下吧~"<<endl; }else{ while(L->next!=NULL){ L=L->next; cout<< "聯系人姓名:" << L->data.name <<endl; cout<< "聯系人電話:" << L->data.number<<endl; cout<< "聯系人地址:" << L->data.adress <<endl; cout<< "聯系人生日:" << L->data.birthday <<endl; cout<< "錄入時間:" << L->data.date <<endl; } cout<< "\n"; } //system("pause"); } int serachsamename(LinkList L,string name){ //查找是否存在姓名相同的聯系人 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 << "您選擇了:新建聯系人" <<endl; string number; string date; string time; string name; string adress; string birthday; cout << "請輸入聯系人姓名:"; 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 << "聯系人姓名重復,請刪除舊聯系人或更改姓名!" << endl; }else{ cout << "請輸入聯系人電話:"; cin >> number; if(number.size()!=11){ cout << "手機號輸入有誤,請大于11位!" << endl; }else{ cout << "請輸入聯系人生日:"; cin >> birthday; cout << "請輸入聯系人地址:"; cin >> adress; cout << "聯系人于" << 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 << "您選擇了:遍歷聯系人" <<endl; foreachelem(L); system("pause"); system("cls"); }else if(i==3){ cout << "您選擇了:修改選定聯系人" <<endl; cout <<"請輸入要修改的聯系人姓名:" ; string name; cin >> name; LinkList B; B = SearchElemChar(L,1,name); if(B){ system("cls"); cout << "聯系人查找成功!姓名:" << B->data.name << endl; int select; cout <<"---------修改姓名請輸入1---------" << endl; cout <<"---------修改電話請輸入2---------" << endl; cout <<"---------修改生日請輸入3---------" << endl; cout <<"---------修改地址請輸入4---------" << endl; cout <<"請根據序號輸入對象的選項修改:" ; cin >> select; switch(select){ case 1: { string name; cout <<"請輸入新姓名:"; cin >> name; B->data.name = name; cout <<"修改完成!" << endl; break; } case 2: { string number; cout <<"請輸入新電話:"; cin >> number; if(number.size()!=11){ cout << "手機號輸入有誤,請大于11位!" << endl; }else{ B->data.number = number; cout <<"修改完成!" << endl; } break; } case 3:{ string birthday; cout <<"請輸入新生日:"; cin >> birthday; B->data.birthday = birthday; cout <<"修改完成!" << endl; break; } case 4:{ string adress; cout <<"請輸入新地址:"; cin >> adress; B->data.adress = adress; cout <<"修改完成!" << endl; break; } default:cout <<"序號輸入錯誤,請重新輸入!"<<endl; } }else{ cout << "未查找到聯系人!請重新輸入!" << endl; } system("pause"); system("cls"); }else if(i==4){ system("cls"); cout << "您選擇了:查詢選定聯系人" <<endl; cout <<"---------根據姓名查詢請輸入1---------" << endl; cout <<"---------根據電話查詢請輸入2---------" << endl; cout <<"---------根據生日查詢請輸入3---------" << endl; cout <<"---------根據地址查詢請輸入4---------" << endl; int select; cout <<"請根據序號輸入對象的進行查詢:" ; cin >> select; switch(select){ case 1:{ cout <<"請輸入要查詢的聯系人姓名:" ; string name; cin >> name; LinkList B; B = SearchElemChar(L,1,name); if(B){ cout<<"查詢成功!"<< endl; cout<<"聯系人姓名:"<< B->data.name << endl; cout<<"聯系人電話:"<< B->data.number << endl; cout<<"聯系人生日:"<< B->data.birthday << endl; cout<<"聯系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查詢失敗!請重新輸入!"<< endl; } break; } case 2: { cout <<"請輸入要查詢的聯系人電話:" ; string number; cin >> number; LinkList B; B = SearchElemChar(L,5,number); if(B){ cout<<"查詢成功!"<< endl; cout<<"聯系人姓名:"<< B->data.name << endl; cout<<"聯系人電話:"<< B->data.number << endl; cout<<"聯系人生日:"<< B->data.birthday << endl; cout<<"聯系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查詢失敗!請重新輸入!"<< endl; } break; } case 3:{ cout <<"請輸入要查詢的聯系人生日:" ; string bd; cin >> bd; LinkList B; B = SearchElemChar(L,2,bd); if(B){ cout<<"查詢成功!"<< endl; cout<<"聯系人姓名:"<< B->data.name << endl; cout<<"聯系人電話:"<< B->data.number << endl; cout<<"聯系人生日:"<< B->data.birthday << endl; cout<<"聯系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查詢失敗!請重新輸入!"<< endl; } break; } case 4:{ cout <<"請輸入要查詢的聯系人地址:" ; string ad; cin >> ad; LinkList B; B = SearchElemChar(L,3,ad); if(B){ cout<<"查詢成功!"<< endl; cout<<"聯系人姓名:"<< B->data.name << endl; cout<<"聯系人電話:"<< B->data.number << endl; cout<<"聯系人生日:"<< B->data.birthday << endl; cout<<"聯系人地址:"<< B->data.adress << endl; cout<<"插入日期:"<< B->data.date << endl; }else{ cout<<"查詢失敗!請重新輸入!"<< endl; } break; break; } default:cout <<"序號輸入錯誤,請重新輸入!"<<endl; } system("pause"); system("cls"); }else if(i==5){ cout << "您選擇了:刪除聯系人" <<endl; string name; cout << "請輸入聯系人姓名:" <<endl; cin >> name; LinkList D,P; P = SearchElemBefore(L,name); if(P){ D = P->next; P->next = D->next; delete D; //釋放結點數據 cout << "刪除成功!" <<endl; }else{ cout<<"查詢失敗!未找到指定聯系人!"<< endl; } system("pause"); system("cls"); }else if(i==6){ cout << "系統已退出,歡迎下次使用!" <<endl; } else{ cout <<"輸入異常,請重新選擇輸入!" <<endl; system("pause"); system("cls"); } } return 0; }
讀到這里,這篇“C++如何使用鏈表存儲實現通訊錄功能管理”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。