发布时间:2025-12-10 11:40:20 浏览次数:12
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
一、主要功能介绍
1.1 中文/英文菜单
1.2 创建新通讯录
1.3 添加信息
1.4 查询信息
1.5 修改信息
1.6 删除信息
1.7 显示信息
1.8 保存信息
1.9 获取信息
二、设计思路
2.1 程序流程图
2.2 存储结构
三、功能实现
3.1 中文/英文菜单
3.2 创建新通讯录
3.3 添加信息
3.4 查询信息
3.5 修改信息
3.6 删除信息
3.7 显示信息
3.8 保存信息
3.9 获取信息
本篇文章来讲解下通讯录管理系统,下面就来看下吧!
通讯录管理系统主要包括九大功能,分别是:中文/英文菜单、创建新通讯录、添加信息、查询信息、修改信息、删除信息、显示信息、保存信息以及获取信息。
实现中文/英文两种菜单语言切换,如下图所示。
图1 中文菜单图2 英文菜单
实现创建一个新的通讯录,如下图所示。
图3 创建通讯录添加通讯录信息,包括:用户名、电话号码、地址,如下图所示。
图4 添加信息通过电话号码可以查询对应通讯录的详细信息,如下图所示。
图5 查询信息实现对输入的数据进行修改,如下图所示。
图6 修改信息实现对指定号码的删除,如下图所示。
图7 删除信息显示所有通讯录信息,如下图所示。
图8 显示信息将信息保存到文件,如下图所示。
图9 保存信息从文件读取数据到内存中,如下图所示。
图10 获取信息程序整体的流程如下所示。
图11 程序流程图通过结构 Item 存储每一个用户的信息,如下所示。
struct Item {int p_number;string user_name;string address;int flag;};其中,p_number 存储手机号,user_name 存储用户姓名, address 存储用户地址,flag 是一个标志位,为 0 表示当前位置空闲,为 -1 表示已经删除,为 1 表示正在被占用。
类 Address_List 负责整个通讯录的功能实现,每个功能对应一个函数实现,如下所示。
class Address_List {public:Address_List(); //构造函数void Create(); //创建通讯录void Start_Print(int n, const string &str); //每个函数的开头部分void Space_Print(int n, const string &str);//用于输出空格void Return_Confirm();void Quit(); //退出void Main_Menu(); //主界面void Delete(); //删除信息void Menu(); //英文菜单void Append(); //添加信息void Find(); //查找信息void Alter(); //修改信息void List(); //显示信息void Save(); //保存信息void Load(); //获取信息int Find_Is_No(int p_number); //查看是否存在p_numberint Find_Space(int p_number); //查看是否还有剩余空间~Address_List();private:Item *Head;};其中,存储的信息是通过链表的形式存储起来的。
中文/英文菜单功能实现了中文/英文两种菜单语言的切换,代码实现如下所示。
void Address_List::Main_Menu(){while(1){string str = "通 讯 录\n\n";Start_Print(32, str);int space = 30;Space_Print(space, string("1 : 英文提示选单\n"));Space_Print(space, string("2 : 退出\n"));Space_Print(space, string("3 : 创建新通讯录\n"));Space_Print(space, string("4 : 添加信息\n"));Space_Print(space, string("5 : 查询信息\n"));Space_Print(space, string("6 : 修改信息\n"));Space_Print(space, string("7 : 删除信息\n"));Space_Print(space, string("8 : 显示信息\n"));Space_Print(space, string("9 : 保存信息\n"));Space_Print(space, string("10 : 获取信息\n\n"));Space_Print(space-15, string(""));cout<<"请选择( 1 ~ 10 ): ";int choose;cin>>choose;switch(choose){case 1: Menu(); break;case 2: Quit(); break;case 3: Create(); break;case 4: Append(); break;case 5: Find(); break;case 6: Alter(); break;case 7: Delete(); break;case 8: List(); break;case 9: Save(); break;case 10: Load(); break;default: cout<<"error"<<endl; break;}}}英文菜单实现如下所示。
void Address_List::Menu(){while(1){string str = "Address List\n\n";Start_Print(32, str);int num_pace = 30;Space_Print(num_pace, string("1 : Using Chinese\n"));Space_Print(num_pace, string("2 : Quit\n"));Space_Print(num_pace, string("3 : Create new Address_List\n"));Space_Print(num_pace, string("4 : Append\n"));Space_Print(num_pace, string("5 : Find\n"));Space_Print(num_pace, string("6 : Alter\n"));Space_Print(num_pace, string("7 : Delete\n"));Space_Print(num_pace, string("8 : List\n"));Space_Print(num_pace, string("9 : Save\n"));Space_Print(num_pace, string("10 : Load\n\n"));Space_Print(num_pace-7, string(""));cout<<"choose : ";int choose;cin>>choose;switch(choose){case 1: Main_Menu(); break;case 2: Quit(); break;case 3: Create(); break;case 4: Append(); break;case 5: Find(); break;case 7: Delete(); break;case 8: List(); break;case 9: Save(); break;case 10: Load(); break;default: cout<<"error"<<endl; break;}}}上面的代码还可以进行优化,可以通过一个标志位来判断是中文还是英文,然后显示对应菜单即可。
创建通讯录实现了对存储结构的初始化。最开始需要先创建通讯录,然后才可以进行增加、修改、删除、查询等操作,代码实现如下所示。
//创建通讯录void Address_List::Create(){//输出程序的开头部分Start_Print(30, string("Create New Address_List\n\n"));//为通讯录开辟空间Head = new Item[Mold*2];if(Head == NULL)Space_Print(10, "通讯录创建失败,空间不足!\n\n");else{Space_Print(10, "Create New Address_List success !\n\n");//对通讯录初始化为0for(int i = 0; i < Mold*2; ++i){Head[i].flag = 0;}}//返回条件Return_Confirm();}添加通讯录信息,包括:用户名、电话号码、地址,代码实现如下所示。
//添加信息void Address_List::Append(){//输入基本信息Start_Print(30, "Append Information\n\n");int space = 10;int p_number;string user_name = "";string address = "";Space_Print(space, " 用户名 : ");cin>>user_name;Space_Print(space, " 电话号码 : ");cin>>p_number;Space_Print(space, " 地址 : ");cin>>address;//查看p_number是否已经存入int mid_value = Find_Is_No(p_number);if(mid_value != -1){cout<<endl;Space_Print(10, "");cout<<"电话号码 : "<<p_number<<" 已经存在\n"<<endl;Return_Confirm();return;}//查询是否有空间存入mid_value = Find_Space(p_number);if(mid_value != -1) //还有空余空间{Head[mid_value].flag = 1; //添加相应的信息Head[mid_value].p_number = p_number;Head[mid_value].user_name = user_name;Head[mid_value].address = address;Space_Print(30, "Append success!\n");}else{ //空间不足Space_Print(30, "空间不足!");}Return_Confirm();}通过电话号码可以查询对应通讯录的详细信息,代码实现如下所示。
//查找是否有信息void Address_List::Find(){Start_Print(30, "Find Information\n\n");Space_Print(0, "请输入查询的电话号码 : ");int p_number;cin>>p_number;int mid_val = Find_Is_No(p_number);if(mid_val == -1){cout<<"没有查找到!"<<endl<<endl;}else{Space_Print(28, "查找成功!\n\n");Space_Print(25, "");cout<<" 号码: "<<Head[mid_val].p_number<<endl;Space_Print(25, "");cout<<"用户名: "<<Head[mid_val].user_name<<endl;Space_Print(25, "");cout<<" 地址: "<<Head[mid_val].address<<endl<<endl;}Return_Confirm();}实现对输入的数据进行修改,代码实现如下所示。
//修改指定信息,根据号码修改信息void Address_List::Alter(){Start_Print(30, "Alter Information\n\n");int p_number;Space_Print(10, "请输入号码: ");cin>>p_number;int mid_val = Find_Is_No(p_number);if(mid_val == -1){Space_Print(10, "号码并不存在!\n");}else{//对信息进行修改,然后输出修改的信息Space_Print(10, "查找成功!接下来请修改信息:\n");Space_Print(10, "姓名: ");cin>>Head[mid_val].user_name;Space_Print(10, "地址:");cin>>Head[mid_val].address;Space_Print(23, "修改成功!修改后的信息如下:\n");Space_Print(10, "");cout<<"用户名 : "<<Head[mid_val].user_name<<endl;Space_Print(10, "");cout<<" 号码 : "<<Head[mid_val].p_number<<endl;Space_Print(10, "");cout<<" 地址 : "<<Head[mid_val].address<<endl;}Return_Confirm();}实现对指定号码的删除,代码实现如下所示。
//删除指定信息void Address_List::Delete(){Start_Print(30, "Delete the Information\n\n");int p_number;Space_Print(10, "");cout<<"将要删除的号码 : ";cin>>p_number;int val = Find_Is_No(p_number);if(val == -1 ){Space_Print(10, "号码不存在!\n");}else{Head[val].flag = -1;Space_Print(10, "删除成功!\n");}Return_Confirm();}显示所有通讯录信息,代码实现如下所示。
//显示通讯录信息void Address_List::List(){Start_Print(30, "List All Information\n\n");int num = 0;for(int i = 0; i < Mold; ++i){if(Head[i].flag == 1) //说明信息{num++;Space_Print(10, ""); //前面输出10个空格,美观cout<<"姓名: "<<Head[i].user_name<<endl;Space_Print(10, "");cout<<"号码: "<<Head[i].p_number<<endl;Space_Print(10, "");cout<<"地址: "<<Head[i].address<<endl;cout<<endl;}}Space_Print(28, "");cout<<"Address List 共有 "<<num<<" 条信息"<<endl<<endl;;Return_Confirm();//返回确认}将信息保存到文件,代码实现如下所示。
//保存到文件void Address_List::Save(){Start_Print(30, "Save Information\n\n");ofstream fout("Address_List_C++.txt");if(!fout.is_open()){Space_Print(20, "open Address_List_C++ error\n");return;}char ch = ' ';bool flag = false;for(int i = 0; i < Mold; ++i){if(Head[i].flag == 1){if(flag == true) fout<<ch;flag = true;//保存信息fout<<Head[i].p_number;//保存号码fout<<ch;//隔开信息fout<<Head[i].user_name;//保存用户名fout<<ch;fout<<Head[i].address;//保存地址}}Space_Print(10, "保存成功!\n");fout.close();//关闭文件指针Return_Confirm();}从文件读取数据到内存中,代码实现如下所示。
//获取信息void Address_List::Load(){Start_Print(30, "Loading information\n\n");ifstream fin("Address_List_C++.txt"); //打开指定文件if(!fin.is_open()){Space_Print(10, "open Address_List_C++ error\n");Return_Confirm();return;}int i = 0;while(!fin.eof()){//获取信息int p_number;string user_name = "";string address = "";char ch;fin>>p_number;fin>>user_name;fin>>address;int val = Find_Space(p_number);Head[val].flag = 1;Head[val].p_number = p_number;Head[val].user_name = user_name;Head[val].address = address;i++;}fin.close();Space_Print(10, "Loading Success!\n");Space_Print(10, "");cout<<"Loading "<<i<<" 条信息"<<endl;Return_Confirm();}🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞