
c++链表实现通讯录管理系统
添加联系人 显示联系人 删除联系人 查找联系人 修改联系人信息 清空通讯录 退出系统
发布日期:2021-05-15 08:08:01
浏览次数:11
分类:精选文章
本文共 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++实现,分析了系统的架构与功能实现方法。通过对链表数据结构的应用,本系统能够有效地实现联系人信息的存储与管理,为用户提供便捷的通讯录服务。系统的功能模块清晰,架构合理,可通过合理的优化与扩展提升系统性能与实用性。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月03日 19时03分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
主线程中Looper的轮询死循环为何没有阻塞主线程?
2019-03-11
Gradle实战四:Jenkins持续集成
2019-03-11
使用RestTemplate,显示请求信息,响应信息
2019-03-11
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
2019-03-11
为什么WGCLOUD安装完后,启动服务端打不开网页
2019-03-11
wgcloud网络监控出现负值
2019-03-11
ios 官方sample
2019-03-11
iOS 开发官方文档链接收集
2019-03-11
网易云面试(Android岗)之旅,差点被这些基础题绊了跟头。
2019-03-11
Android音视频开发之——音频非压缩编码和压缩编码
2019-03-11
linux学习笔记(四)基本用户管理与帮助命令
2019-03-11
小程序:防止父方法被子方法冒泡,使用catchtap
2019-03-11
vue报错 created hook错误
2019-03-11
单选框点击文字也能选中
2019-03-11
此主机支持Intel VT-x,但Intel VT-x 处于禁用状态。
2019-03-11
06-局部变量和全局变量
2019-03-11
12-面向对象1
2019-03-11
python基础总结 异常处理
2019-03-11
解决Vue源码运行错误
2019-03-11