返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++使用链表存储实现通讯录功能管理
  • 361
分享到

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

2024-04-02 19:04:59 361人浏览 八月长安
摘要

本文实例为大家分享了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;
}

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C++使用链表存储实现通讯录功能管理

本文链接: https://lsjlt.com/news/152065.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++使用链表存储实现通讯录功能管理
    本文实例为大家分享了C++使用链表存储实现通讯录功能管理的具体代码,供大家参考,具体内容如下 简介 这是第二周老师给的一个小项目要求实现基本通讯录功能,有数据的增删改查,包含插入时间...
    99+
    2024-04-02
  • C++如何使用链表存储实现通讯录功能管理
    本文小编为大家详细介绍“C++如何使用链表存储实现通讯录功能管理”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何使用链表存储实现通讯录功能管理”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码详情头文件...
    99+
    2023-07-02
  • C语言基于单链表实现通讯录功能
    本文实例为大家分享了C语言基于单链表实现通讯录功能的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h&...
    99+
    2024-04-02
  • C语言单链表实现通讯录管理系统
    本文实例为大家分享了C语言单链表实现通讯录管理系统的具体代码,供大家参考,具体内容如下 本人前几天刚刚自学了单链表,趁热打铁,赶紧写一个小小的项目练练手。 单链表的实现在本人之前的博...
    99+
    2024-04-02
  • C++链表实现通讯录设计
    本文实例为大家分享了C++链表实现通讯录设计的具体代码,供大家参考,具体内容如下 功能如下: 1添加学生信息2删除学生信息3显示学生信息4查询学生信息5学生信息排序6清空屏幕信息7清...
    99+
    2024-04-02
  • C++实现通讯录功能
    本文实例为大家分享了C++实现通讯录的具体代码,供大家参考,具体内容如下 简介:通讯录由一个拥有者以及通讯信息组成。 基本功能:增删改查 拥有者和通讯信息的基础结构相同,由struc...
    99+
    2024-04-02
  • C语言单链表如何实现通讯录管理系统
    这篇文章将为大家详细讲解有关C语言单链表如何实现通讯录管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通讯录管理系统保存人的信息有: 名字   name电话 ...
    99+
    2023-06-15
  • C++实现通讯录小功能
    本文实例为大家分享了C++实现通讯录功能的具体代码,供大家参考,具体内容如下 思路: 1.显示菜单栏 void menu() {       cout << "—————...
    99+
    2024-04-02
  • C++类实现通讯录功能
    本文实例为大家分享了C++类实现通讯录功能的具体代码,供大家参考,具体内容如下 软件使用的是Microsoft Visual Studio 编写通讯录之前,先思考一下要实现什么功能,...
    99+
    2024-04-02
  • C语言链表实现简易通讯录
    本文实例为大家分享了C语言链表实现简易通讯录的具体代码,供大家参考,具体内容如下 链表实现通讯录功能: 1.添加–(输入 姓名,电话) 2.删除-- (输入人名,删除该人) 3.查询...
    99+
    2024-04-02
  • C++实现完整功能的通讯录管理系统详解
    目录一、确定结构体二、简易菜单三、为通讯录添加功能四、各功能与实现详解功能之添加联系人功能之显示联系人功能之查找联系人功能之修改联系人功能之删除联系人功能之清空通讯录四、源码五、运行...
    99+
    2024-04-02
  • C++如何实现通讯录功能
    这篇文章主要介绍“C++如何实现通讯录功能”,在日常操作中,相信很多人在C++如何实现通讯录功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何实现通讯录功能”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-02
  • C++实现简易通讯录功能
    目录实现功能一、定义通讯录和通讯录人员结构体二、实现通讯录输入菜单1.定义菜单函数:2.主函数循环体中循环展示菜单信息三、实现增删改查和清空通讯录功能四、运行截图展示本文实例为大家分...
    99+
    2024-04-02
  • C语言实现通讯录小功能
    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 头文件contact.h #pragma once #define _CRT_SECURE_NO_...
    99+
    2024-04-02
  • C++如何实现通讯录小功能
    这篇文章主要介绍“C++如何实现通讯录小功能”,在日常操作中,相信很多人在C++如何实现通讯录小功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何实现通讯录小功能”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • C++类怎么实现通讯录功能
    这篇文章主要介绍了C++类怎么实现通讯录功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++类怎么实现通讯录功能文章都会有所收获,下面我们一起来看看吧。首先,是思考要实现什么功能。一般的通讯录有添加,删除,...
    99+
    2023-07-02
  • 如何使用C语言代码实现通讯录功能
    今天小编给大家分享一下如何使用C语言代码实现通讯录功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先创建一个test.c...
    99+
    2023-07-02
  • 怎么用C++实现通讯录管理系统
    这篇“怎么用C++实现通讯录管理系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用C++实现通讯录管理系统”文章吧。系...
    99+
    2023-07-02
  • C语言实现简单通讯录功能
    本文实例为大家分享了C语言实现简单通讯录功能的具体代码,供大家参考,具体内容如下 1.存放联系人信息 2.信息:名字+年龄+性别+电话+住址 3.增加联系人 4.删除联系人 5.查找...
    99+
    2024-04-02
  • C++如何实现简易通讯录功能
    这篇文章主要讲解了“C++如何实现简易通讯录功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现简易通讯录功能”吧!实现功能提示:这里可以添加本文要记录的大概内容:通过c++语法...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作