C++怎么实现简单通讯录管理系统
发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,本篇内容介绍了"C++怎么实现简单通讯录管理系统"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、代
千家信息网最后更新 2024年10月24日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安全错误
数据库的锁怎样保障安全
首届网络安全大赛
服务器里面的沙雕图片
数据库比对工具使用
数据库三级模式有利于
射频识别卡怎么用数据库
我的世界ftp服务器
同态加密软件开发
网络中心管理服务器平台
四川++网络安全
计算机网络安全的防护措施有
深圳迪蒙软件开发
东城区专业软件开发口碑推荐
python做服务器端
西安android软件开发价格
国外主机服务器
云服务器怎么可以使用
后端用什么软件开发
网络技术的现状和发展趋势
保障网络安全维护和国家安全
技术标包含哪些内容软件开发
视频翻译软件开发
appdrr网络安全模型
锡山区运营软件开发成本
网络安全与实际结合
数据库系统外键怎么弄
数据库新增多次请求
戴尔t410服务器加硬盘
PHPCMS模板软件开发
服务器拒绝发布离线文件请求
为什么服务器只能连接一台电脑