C++怎么实现简单通讯录管理系统
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"C++怎么实现简单通讯录管理系统"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、代
千家信息网最后更新 2025年01月19日C++怎么实现简单通讯录管理系统
本篇内容介绍了"C++怎么实现简单通讯录管理系统"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、代码
#include#include #include #include 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;}
二、功能展示
"C++怎么实现简单通讯录管理系统"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
联系人
联系
信息
姓名
手机
手机号
菜单
排序
文件
函数
地址
邮箱
输出
通讯
通讯录
数据
结点
管理系统
系统
管理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技最新资讯
软件开发中 数字签名
数据库日志log增大的原因
青浦区创新数据库服务商活动简介
数据库加锁可以重入吗
手机热点网络安全密钥不匹配
服务器的性能指标
主题商店显示服务器正忙稍后重试
搅拌站机组数据库包含哪些
hp服务器管理口忘记密码
计算机网络技术哪个吃香
扶绥天气预报软件开发
mysql 自带数据库删了
在事业单位做软件开发好吗
网络安全工程师学哪些
excel显示链接数据库
服务器手机版指令
湖南外贸软件开发公司
手机远程下载数据库用什么技术好
oem服务器
怎样画网络安全
网络安全应用专业前景
中科北优软件开发有限公司
sql2008导出数据库
网络安全 谁管理谁负责
网络安全发展的目标
java分布式服务器实现
网络安全知识感想200字
银行储蓄系统数据库组成
浪潮服务器总冠军