iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现简单通讯录管理系统
  • 411
分享到

C++实现简单通讯录管理系统

2024-04-02 19:04:59 411人浏览 独家记忆
摘要

本文实例为大家分享了c++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 一、代码 #include <iOStream> #include <str

本文实例为大家分享了c++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下

一、代码

#include <iOStream>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;

//自定义一个联系人结点类型
typedef struct node1
{
    string name;        //姓名
    string tel;         //手机号
    string email;       //邮箱
    string address;     //地址
    struct node1 *next; //指向下一节点的指针
} Node;

//自定义一个二叉排序树结点类型
typedef struct node2
{
    Node data;
    struct node2 *lchild, *rchild;
} BSTNode;

//构造结点通讯录类
class Fnode
{
public:
    Fnode();                                //构造函数,用于初始化一些变量
    ~Fnode();                               //析构函数,用于程序结束之后对分配的内存进行清理
    void CreateInfo();                      //录入联系人信息
    void InsertInfo();                      //插入联系人信息
    void FindInfoName();                    //按姓名查找联系人信息
    void FindInfoTel();                     //按手机号查找联系人信息
    void DeleteInfoTel();                   //按手机号删除联系人信息
    void DispInfo();                        //打印所有联系人信息
    void DispInfoSort();                    //按姓名排序输出联系人信息
    void SaveInfoToFile();                  //保存联系人信息至文件
    void ReadInfoFromFile();                //从文件读取联系人信息
    void Run();                             //功能函数,包含菜单和相关函数的入口
    bool InsertBST(BSTNode *&bt, Node key); //插入二叉排序树结点,递归实现
    void CreateBST();                       //由链表创建二叉排序树
    void InOrder(BSTNode *b);               //中序遍历输出二叉排序树,递归实现
    void DestroyBST(BSTNode *&b);           //释放二叉排序树,递归实现

private:
    bool opened;     //用于表明文件是否被读取过,未读为0,已读为1
    Node *L, *p, *q; //定义通讯录结点的头指针和其他成员函数中可能用到的指针
    BSTNode *btree;  //二叉排序树头节点
};

//构造函数,用于初始化一些变量
Fnode::Fnode()
{
    L = new Node;
    L->next = NULL;
    p = q = NULL;
    btree = NULL;
    opened = 0;
}

//析构函数,用于程序结束之后对分配的内存进行清理
Fnode::~Fnode()
{
    p = L;
    while (p != NULL)
    {
        delete p;
        p = p->next;
    }
}

void Fnode::CreateInfo() //创建结点
{
    int n;
    q = L, p = NULL;
    while (q->next != NULL)
        q = q->next;
    cout << "请输入您要录入的联系人个数:";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        p = new Node;
        cout << "请输入第" << i + 1 << "位联系人的姓名、手机号、邮箱和地址(用空格隔开):" << endl;
        cin >> p->name >> p->tel >> p->email >> p->address;
        p->next = q->next;
        q->next = p;
        q = p;
    }
}

//插入联系人信息
void Fnode::InsertInfo()
{
    q = L, p = NULL;
    while (q->next != NULL)
        q = q->next;
    p = new Node;
    cout << "请输入您要插入的联系人的姓名、手机号、邮箱和地址(用空格隔开):" << endl;
    cin >> p->name >> p->tel >> p->email >> p->address;
    p->next = q->next;
    q->next = p;
    cout << "插入成功!" << endl;
}

//打印所有联系人信息
void Fnode::DispInfo()
{
    p = L->next;
    if (p == NULL)
        cout << "数据为空,无法打印" << endl;
    else
    {
        cout << "姓名  \t\t"
             << "手机号       \t\t"
             << "邮箱             \t\t"
             << "地址" << endl;
        while (p != NULL)
        {
            cout << p->name << "\t\t" << p->tel << "\t\t" << p->email << "\t\t" << p->address << endl;
            p = p->next;
        }
    }
}

//按姓名查找联系人信息
void Fnode::FindInfoName()
{
    string name;
    p = L->next;
    if (p == NULL)
        cout << "数据为空,无法查找" << endl;
    else
    {
        cout << "请输入要查找的联系人的姓名:";
        cin >> name;
        while (p->name != name)
        {
            p = p->next;
            if (p == NULL)
            {
                cout << "没有找到相关联系人信息" << endl;
                return;
            }
        }
        cout << "该联系人的信息如下" << endl;
        cout << "姓名  \t\t"
             << "手机号       \t\t"
             << "邮箱             \t\t"
             << "地址" << endl;
        cout << p->name << "\t\t" << p->tel << "\t\t" << p->email << "\t\t" << p->address << endl;
    }
}

//按手机号查找联系人信息
void Fnode::FindInfoTel()
{
    string tel;
    p = L->next;
    if (p == NULL)
        cout << "数据为空,无法查找" << endl;
    else
    {
        cout << "请输入要查找的联系人的手机号:";
        cin >> tel;
        while (p->tel != tel)
        {
            p = p->next;
            if (p == NULL)
            {
                cout << "没有找到相关信息" << endl;
                return;
            }
        }
        cout << "该联系人的信息如下" << endl;
        cout << "姓名  \t\t"
             << "手机号       \t\t"
             << "邮箱             \t\t"
             << "地址" << endl;
        cout << p->name << "\t\t" << p->tel << "\t\t" << p->email << "\t\t" << p->address << endl;
    }
}

//按手机号删除联系人信息
void Fnode::DeleteInfoTel()
{
    string tel;
    p = L->next, q = L;
    if (p == NULL)
        cout << "数据为空,无法删除" << endl;
    else
    {
        cout << "请输入要删除的联系人的手机号" << endl;
        cin >> tel;
        while (p->tel != tel)
        {
            p = p->next;
            q = q->next;
            if (p == NULL)
            {
                cout << "没有找到相关信息" << endl;
                return;
            }
        }
        q->next = p->next;
        delete p;
        cout << "手机号为" << tel << "的联系人删除成功!" << endl;
    }
}

//按姓名排序输出联系人信息
void Fnode::DispInfoSort()
{
    CreateBST();
    cout << "姓名  \t\t"
         << "手机号       \t\t"
         << "邮箱             \t\t"
         << "地址" << endl;
    InOrder(btree);
    DestroyBST(btree);
}

//保存联系人信息至文件
void Fnode::SaveInfoToFile()
{
    p = L->next;
    if (p == NULL)
        cout << "数据为空,无法写入!" << endl;
    else
    {
        ofstream outfile("./联系人.csv");
        if (!outfile)
        {
            cout << "无法打开文件!";
            return;
        }
        outfile << "姓名,"
                << "手机号,"
                << "邮箱,"
                << "地址" << endl;
        while (p->next != NULL)
        {
            outfile << p->name << "," << p->tel << "," << p->email << "," << p->address << endl;
            p = p->next;
        }
        outfile << p->name << "," << p->tel << "," << p->email << "," << p->address;
        outfile.close();
        cout << "保存联系人信息成功!请查看当前目录下的“联系人.csv文件”" << endl;
    }
}

//从文件读取联系人信息
void Fnode::ReadInfoFromFile()
{
    ifstream infile("./联系人.csv");
    if (!infile)
    {
        cout << "无法打开文件!";
        return;
    }
    else if (opened == 1)
    {
        cout << "文件已经被读取,不能够重复读取!" << endl;
        return;
    }
    else
    {
        char str[500];
        q = L, p = NULL;
        while (q->next != NULL)
            q = q->next;
        infile.getline(str, sizeof(str));
        while (!infile.eof())
        {
            p = new Node;
            infile.getline(str, sizeof(str));
            p->name = strtok(str, ",");
            p->tel = strtok(NULL, ",");
            p->email = strtok(NULL, ",");
            p->address = strtok(NULL, ",");
            p->next = q->next;
            q->next = p;
            q = p;
        }
        infile.close();
        cout << "读取数据成功!" << endl;
        opened = 1;
    }
}

//插入二叉排序树结点
bool Fnode::InsertBST(BSTNode *&bt, Node key)
{
    if (bt == NULL)
    {
        bt = new BSTNode;
        bt->data = key;
        bt->lchild = bt->rchild = NULL;
        return true;
    }
    else if (key.name == bt->data.name)
        return false;
    else if (key.name < bt->data.name)
        return InsertBST(bt->lchild, key);
    else
        return InsertBST(bt->rchild, key);
}

//由链表创建二叉排序树
void Fnode::CreateBST()
{
    btree = NULL;
    p = L->next;
    while (p != NULL)
    {
        InsertBST(btree, *p);
        p = p->next;
    }
}

//中序遍历输出二叉排序树
void Fnode::InOrder(BSTNode *b)
{
    if (b != NULL)
    {
        InOrder(b->lchild);
        cout << b->data.name << "\t\t" << b->data.tel << "\t\t" << b->data.email << "\t\t" << b->data.address << endl;
        InOrder(b->rchild);
    }
}

//释放二叉排序树
void Fnode::DestroyBST(BSTNode *&b)
{
    if (b != NULL)
    {
        DestroyBST(b->lchild);
        DestroyBST(b->rchild);
        delete b;
    }
}

//菜单
void Fnode::Run()
{
    int item;
    do
    {
        cout << "\t\t\t==================通讯录管理系统==================" << endl;
        cout << "\t\t\t# \t                                         #" << endl;
        cout << "\t\t\t# \t1)联系人信息的逐条录入。                 #" << endl;
        cout << "\t\t\t# \t2)插入某个联系人的信息。                 #" << endl;
        cout << "\t\t\t# \t3)按手机号查找某个联系人的信。           #" << endl;
        cout << "\t\t\t# \t4)按姓名查询某个联系人。                 #" << endl;
        cout << "\t\t\t# \t5)按手机号删除某个联系人的信息           #" << endl;
        cout << "\t\t\t# \t6)所有联系人信息的输出显示。             #" << endl;
        cout << "\t\t\t# \t7)所有联系人按姓名排序并输出显示。       #" << endl;
        cout << "\t\t\t# \t8)所有联系人信息的文件保存。             #" << endl;
        cout << "\t\t\t# \t9)所有联系人信息的文件读取。             #" << endl;
        cout << "\t\t\t# \t0)退出管理系统。                         #" << endl;
        cout << "\t\t\t==================================================" << endl;
        cout << "请输入相应的命令,执行相应的功能:";
        cin >> item;
        system("cls");
        switch (item)
        {
        case 1:
            CreateInfo();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 2:
            InsertInfo();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 3:
            FindInfoTel();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 4:
            FindInfoName();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 5:
            DeleteInfoTel();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 6:
            DispInfo();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 7:
            DispInfoSort();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 8:
            SaveInfoToFile();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 9:
            ReadInfoFromFile();
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
            break;
        case 0:
            cout << "即将退出通讯录管理系统......" << endl;
            cout << "谢谢您的使用!";
            exit(0);
            break;
        default:
            cout << "您输入的指令错误,请重新输入!" << endl;
            getchar();
            cout << "\n按任意键返回主菜单" << endl;
            getchar();
            system("cls");
        }
    } while (item);
}

//主函数
int main()
{
    Fnode f;
    system("cls");
    f.Run();
    return 0;
}

二、功能展示

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

--结束END--

本文标题: C++实现简单通讯录管理系统

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现简单通讯录管理系统
    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 一、代码 #include <iostream> #include <str...
    99+
    2024-04-02
  • C++实现简单的通讯录管理系统
    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 案例描述: 通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理...
    99+
    2024-04-02
  • C++实现简单版通讯录管理系统
    这个通讯录管理系统是我听课后做的笔记,都是很基础的逻辑实现,第一次动手写了一个小案例感觉找到了一点方向,也希望能帮到一点忙! 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。...
    99+
    2024-04-02
  • C语言实现简单通讯录管理系统
    C语言实现的通讯录管理系统,供大家参考,具体内容如下 设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号、姓名、电话号码、所在班级、寝室地址等),通信录数据类型定义为...
    99+
    2024-04-02
  • C++怎么实现简单通讯录管理系统
    本篇内容介绍了“C++怎么实现简单通讯录管理系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、代码#include <i...
    99+
    2023-06-29
  • python实现简单通讯录管理系统
    本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下 =====欢迎使用通讯录管理系统=====1.添加2.修改3.册除4.查询5.排序6.退出==...
    99+
    2024-04-02
  • Java实现简单通讯录管理系统
    本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 题目: 1、完成一个通讯录,需求: (1)添加联系人(联系人:编号,姓名,手机号,QQ,邮箱地址)...
    99+
    2024-04-02
  • C语言实现简单的通讯录管理系统
    本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下 要实现一个通讯录管理系统,需要用到结构体、指针、文件操作、动态管理等内容。 效果展示: 实现思路 ...
    99+
    2024-04-02
  • C++实现简易通讯录管理系统
    目录前言结构体联系人结构体通讯录结构体函数模块菜单添加联系人显示联系人判断联系人删除联系人查找联系人清空所有联系人main函数源代码运行结果本文实例为大家分享了C++实现简易通讯录管...
    99+
    2024-04-02
  • C++实现简单通讯录系统
    本文实例为大家分享了C++实现简单通讯录系统的具体代码,供大家参考,具体内容如下 需求分析: 1.通讯录可以添加联系人。 2.通讯录可以显示所有联系人。 3.通讯录可以查找联系人。 ...
    99+
    2024-04-02
  • C++实现简易的通讯录管理系统
    本文实例为大家分享了C++实现简易通讯录管理系统的具体代码,供大家参考,具体内容如下 1. 效果图 2. 需要的知识 C++基础知识(包括变量,运算符,顺序,分支,循环)数组函数指...
    99+
    2024-04-02
  • 怎么用C语言实现简单通讯录管理系统
    本篇内容主要讲解“怎么用C语言实现简单通讯录管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C语言实现简单通讯录管理系统”吧!C语言实现的通讯录管理系统,供大家参考,具体内容如下设计...
    99+
    2023-06-20
  • python怎么实现简单通讯录管理系统
    要实现简单的通讯录管理系统,可以使用Python的字典来存储联系人的信息。以下是一个简单的实现示例:```pythoncontact...
    99+
    2023-08-18
    python
  • C语言怎么实现简单的通讯录管理系统
    下面是一个使用C语言实现简单通讯录管理系统的示例代码: #include <stdio.h> #include <...
    99+
    2024-03-08
    c语言
  • C++如何实现简易通讯录管理系统
    这篇文章主要介绍“C++如何实现简易通讯录管理系统”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++如何实现简易通讯录管理系统”文章能帮助大家解决问题。前言建议收藏,亲手写一遍代码,感受指针神奇的...
    99+
    2023-07-02
  • C语言实现简单通讯录系统
    本文实例为大家分享了C语言通讯录系统(增删改查),供大家参考,具体内容如下 全部代码如下所示: #include <iostream> #include <s...
    99+
    2024-04-02
  • C语言单链表实现通讯录管理系统
    本文实例为大家分享了C语言单链表实现通讯录管理系统的具体代码,供大家参考,具体内容如下 本人前几天刚刚自学了单链表,趁热打铁,赶紧写一个小小的项目练练手。 单链表的实现在本人之前的博...
    99+
    2024-04-02
  • C++实现通讯录管理系统项目
    本文实例为大家分享了C++实现通讯录管理系统的具体代码,供大家参考,具体内容如下 1、通讯录设计要点 1:添加联系人:向通讯录中添加新人(包括:性别,年龄,联系电话,家庭住址),并且...
    99+
    2024-04-02
  • C++实现通讯录管理系统设计
    本文实例为大家分享了C++实现通讯录管理系统的具体代码,供大家参考,具体内容如下 最核心的内容是结构体,结构体数组与指针 主要功能包括:添加联系人 ;显示联系人;删除联系人 ;查找联...
    99+
    2024-04-02
  • C/C++实现通讯录管理系统(附源码)
    目录程序部分功能展示各个功能的代码实现菜单添加联系人显示联系人完整源码首先是程序的功能,该程序主要可以实现以下功能:一)添加联系人 二)显示联系人 三)删除联系人 四)查找联系人 五...
    99+
    2022-12-15
    C++实现通讯录管理系统 C++通讯录管理系统 C++通讯录
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作