课程设计 - 通讯录管理系统

发布时间: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.1 中文/英文菜单

实现中文/英文两种菜单语言切换,如下图所示。

图1 中文菜单

  

图2 英文菜单

1.2 创建新通讯录

实现创建一个新的通讯录,如下图所示。

图3 创建通讯录

1.3 添加信息

添加通讯录信息,包括:用户名、电话号码、地址,如下图所示。

图4 添加信息

1.4 查询信息

通过电话号码可以查询对应通讯录的详细信息,如下图所示。

图5 查询信息

1.5 修改信息

实现对输入的数据进行修改,如下图所示。

图6 修改信息

1.6 删除信息

实现对指定号码的删除,如下图所示。

图7 删除信息

1.7 显示信息

显示所有通讯录信息,如下图所示。

图8 显示信息

1.8 保存信息

将信息保存到文件,如下图所示。

图9 保存信息

1.9 获取信息

从文件读取数据到内存中,如下图所示。

图10 获取信息

二、设计思路

2.1 程序流程图

程序整体的流程如下所示。

图11 程序流程图

 2.2 存储结构

通过结构 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;};

其中,存储的信息是通过链表的形式存储起来的。 

三、功能实现

3.1 中文/英文菜单

中文/英文菜单功能实现了中文/英文两种菜单语言的切换,代码实现如下所示。

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;}}}

 上面的代码还可以进行优化,可以通过一个标志位来判断是中文还是英文,然后显示对应菜单即可。

3.2 创建新通讯录

创建通讯录实现了对存储结构的初始化。最开始需要先创建通讯录,然后才可以进行增加、修改、删除、查询等操作,代码实现如下所示。

//创建通讯录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();}

3.3 添加信息

添加通讯录信息,包括:用户名、电话号码、地址,代码实现如下所示。

//添加信息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();}

3.4 查询信息

通过电话号码可以查询对应通讯录的详细信息,代码实现如下所示。

//查找是否有信息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();}

3.5 修改信息

实现对输入的数据进行修改,代码实现如下所示。

//修改指定信息,根据号码修改信息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();}

3.6 删除信息

实现对指定号码的删除,代码实现如下所示。

//删除指定信息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();}

3.7 显示信息

显示所有通讯录信息,代码实现如下所示。

//显示通讯录信息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();//返回确认}

3.8 保存信息

将信息保存到文件,代码实现如下所示。

//保存到文件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();}

3.9 获取信息

从文件读取数据到内存中,代码实现如下所示。

//获取信息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();}

🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


需要做网站?需要网络推广?欢迎咨询客户经理 13272073477