博客
关于我
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/

    你可能感兴趣的文章
    打造自己的图像识别模型1— 数据准备-将图像数据转为tfrecord形式——【何之源-21个项目玩转深度学习】
    查看>>
    无法打开文件“opencv_world330d.lib”的解决办法
    查看>>
    maven项目出现 Missing artifact jdk.tools:jdk.tools:jar:1.7
    查看>>
    算法训练 未名湖边的烦恼(递归,递推)
    查看>>
    什么是接口
    查看>>
    记录-基于springboot+vue.js实现的超大文件分片极速上传及流式下载
    查看>>
    JavaScript高级程序设计第四版学习记录-第九章代理与反射
    查看>>
    怎么解决Windows 10文件/文件夹正在使用无法删除
    查看>>
    matlab函数:fix 向0取整
    查看>>
    Allegro中如何消除器件本身Pin间距报错
    查看>>
    Flask--简介
    查看>>
    16 python基础-恺撒密码
    查看>>
    Frame--Api框架
    查看>>
    Boostrap技能点整理之【网格系统】
    查看>>
    新闻发布项目——业务逻辑层(UserService)
    查看>>
    hibernate正向生成数据库表以及配置——hibernate.cfg.xml
    查看>>
    javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
    查看>>
    java实现人脸识别源码【含测试效果图】——Dao层(IUserDao)
    查看>>
    使用ueditor实现多图片上传案例——前台数据层(Index.jsp)
    查看>>
    ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
    查看>>