博客
关于我
c++链表实现通讯录管理系统
阅读量:593 次
发布时间:2019-03-12

本文共 4532 字,大约阅读时间需要 15 分钟。

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

系统概述

本文将介绍一个使用链表数据结构实现的通讯录管理系统。该系统能够支持联系人信息的添加、删除、查询及修改等基本操作。通过对系统的架构设计与实现过程进行分析,本文将详细介绍系统的各个功能模块,包括主功能菜单、联系人信息管理等核心功能的实现方法与原理。

系统架构

本通讯录管理系统采用链表数据结构来存储联系人信息。链表是一种高效的动态内存管理方式,在这一实现中,主要用于联系人信息的单向存储与操作。通过链表技术,系统能够快速地支持联系人信息的增删查改操作。

主功能模块

一、主功能菜单

系统的主要操作菜单包括以下几个功能项:

  • 添加联系人
  • 显示联系人
  • 删除联系人
  • 查找联系人
  • 修改联系人信息
  • 清空通讯录
  • 退出系统
  • 每个功能项都会对应一个子功能模块,用户可以通过输入相应的功能编号选择要执行的操作。系统的主界面采用简单直观的menu.C++程序设计,给用户提供便捷的操作选择。

    二、联系人信息存储与管理

  • 添加联系人

    添加联系人信息的函数addpeople通过输入联系人姓名、年龄、电话号码以及性别信息进行信息录入,并将新录入的联系人信息按照链表的方式添加到通讯录的末尾。

  • 显示联系人

    函数printpeople用于遍历链表中的所有节点,输出每个联系人的详细信息,包括姓名、年龄、电话号码以及性别。

  • 删除联系人

    函数deletpeople支持按照联系人电话号码进行查找,并删除对应的节点。删除操作需要注意的是,链表节点的删除需要谨慎处理,避免指针泄漏或悬链问题。

  • 查找联系人

    函数findpeople根据输入的联系人姓名,查找对应的节点并输出联系人信息。查找操作采用线性遍历的方式,复杂度为O(n),适用于小型通讯录数据。

  • 修改联系人信息

    系统的修改功能尚未实现,未来开发中将完善该模块,支持用户对各类联系人信息进行单项或多项修改。

  • 清空通讯录

    函数deletlist用于清空链表中的所有节点,释放已分配的内存空间。需要注意的是,在清空操作期间,需确保通讯录指针置为空,防止指向悬链节点。

  • 退出系统

    系统支持单击退出当前状态,返回主功能菜单或结束程序运行。

  • 功能实现细节

    链表节点结构

    通讯录的联系人信息以链表形式存储,定义如下:

    struct people {    string name;    int age;    string phonenumber;    char sex;    people *p = NULL;};

    代码实现

    #include 
    #include
    using namespace std;struct people * addpeople(struct people *head) { struct people *newpeople = new people; cout << "请输入联系人姓名(拼音):" << endl; cin >> newpeople->name; cout << "请输入联系人年龄:" << endl; cin >> newpeople->age; cout << "请输入联系人电话:" << endl; cin >> newpeople->phonenumber; cout << "请输入联系人性别(M or W):" << endl; cin >> newpeople->sex; newpeople->p = NULL; struct people *pt = head; struct people *q = head; if (head == NULL) { head = newpeople; } else { while (pt != NULL) { q = pt; pt = pt->p; } q->p = newpeople; } return head;}void printpeople(struct people *head) { struct people *ptb = head; if (ptb == NULL) { cout << "通讯录无联系人" << endl; } else { while (ptb != NULL) { cout << "联系人姓名(拼音):" << ptb->name << endl; cout << "联系人年龄:" << ptb->age << endl; cout << "联系人电话:" << ptb->phonenumber << endl; cout << "联系人性别(M or W):" << ptb->sex << endl << endl; ptb = ptb->p; } }}struct people * deletpeople(struct people *head) { struct people delpeople; cout << "请输入联系人姓名(拼音):" << endl; cin >> delpeople.name; cout << "请输入联系人年龄:" << endl; cin >> delpeople.age; cout << "请输入联系人电话:" << endl; cin >> delpeople.phonenumber; cout << "请输入联系人性别(M or W):" << endl; cin >> delpeople.sex; delpeople.p = NULL; struct people *ptb = head; struct people *qtb = head; if (ptb == NULL) { cout << "通讯录为空" << endl; } else { if (ptb->phonenumber == delpeople.phonenumber) { head = head->p; cout << "已删除该联系人" << endl; delete ptb; } else { qtb = ptb; ptb = ptb->p; while (ptb != NULL) { if (ptb->phonenumber == delpeople.phonenumber) { qtb->p = ptb->p; cout << "已删除该联系人" << endl; delete ptb; break; } ptb = ptb->p; } if (ptb == NULL) { cout << "无此联系人" << endl; } } } return head;}void findpeople(struct people *head) { string name; cout << "请输入联系人姓名:" << endl; cin >> name; struct people *ptb = head; if (head != NULL) { while (ptb != NULL) { if (ptb->name == name) { cout << "联系人姓名(拼音):" << ptb->name << endl; cout << "联系人年龄:" << ptb->age << endl; cout << "联系人电话:" << ptb->phonenumber << endl; cout << "联系人性别(M or W):" << ptb->sex << endl << endl; break; } ptb = ptb->p; } if (ptb == NULL) { cout << "无此联系人" << endl; } } else { cout << "通讯录为空" << endl; }}

    系统使用说明

  • 运行环境

    该通讯录管理系统开发为C++语言,支持Linux系统及支持g++编译环境的操作系统。用户可以将源代码编译并运行,shore程序运行后即可进入主功能菜单。

  • 使用方法

    从命令行输入功能编号即可选择相应选项。需要注意的是联系人电话号码及其他敏感信息应定义为可变长字符串,以便于用户输入。

  • 系统优势

    • 高效存储:链表数据结构支持高效的插入与删除操作,占用内存按需分配,避免预定义数组的内存浪费。
    • 易于扩展:系统架构对应模块化设计,便于加入新的功能模块,扩展通讯录的功能属性。
    • 稳定性:链表实现避免了动态内存管理的潜在问题,提高了系统运行的稳定性。

    未来优化方向

    未来版本将完善系统功能,包括但不限于以下方面:

    • 修改功能:增加联系人信息的修改功能,支持用户对记录的联系人信息进行部分或全部修改。
    • 通讯录导入导出:增加把通讯录数据导入或导出到文件的功能,方便数据的批量处理和传输。
    • 多平台支持:针对不同移动端设备或嵌入式系统进行系统优化,实现通讯录管理的跨平台功能。
    • 用户权限控制:引入用户认证与权限控制功能,提升系统安全性,实现多用户登录 Logout 机制。

    结论

    本文详细介绍了一个通讯录管理系统的C++实现,分析了系统的架构与功能实现方法。通过对链表数据结构的应用,本系统能够有效地实现联系人信息的存储与管理,为用户提供便捷的通讯录服务。系统的功能模块清晰,架构合理,可通过合理的优化与扩展提升系统性能与实用性。

    转载地址:http://nccxz.baihongyu.com/

    你可能感兴趣的文章
    注册页面案例
    查看>>
    np.bincount(x)的简单解释
    查看>>
    LeetCode Top-100 T22-括号生成
    查看>>
    vscode设置eslint保存文件时自动修复eslint错误
    查看>>
    JAVA 多线程
    查看>>
    牛客-链表中环的入口节点(Java)
    查看>>
    堆的应用_topK算法和堆排序
    查看>>
    最大半连通子图
    查看>>
    Remove Extra one 维护前缀最大最小值
    查看>>
    另类加法,走方格的方案数,最近公共祖先
    查看>>
    [Java Path Finder][JPF学习笔记][7]JPF输出详细程度设置
    查看>>
    GitHub完整记录数据库GHTorrent的下载和安装经验
    查看>>
    设计模式—— 三:依赖倒置原则
    查看>>
    因SGA分配错误无法启动数据库
    查看>>
    ORA-00020 超过当前最大连接数
    查看>>
    喝红茶是否会上火
    查看>>
    Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
    查看>>
    Android进阶解密读书笔记3——第2章:Android系统启动——第3、4、5、6小节
    查看>>
    GreenDao之注解
    查看>>
    Android使用Font Awesome
    查看>>