文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++如何使用链表存储实现通讯录功能管理

2023-07-02 11:20

关注

本文小编为大家详细介绍“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 1using 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++如何使用链表存储实现通讯录功能管理”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯