通讯录管理系统(黑马程序员C++)

#include<iostream>
#include<string>
using namespace std;
#define MAX 1000

//联系人结构
struct Person
{
	string m_name;
	int m_Sex;
	int m_Age;
	string m_Phone;
	string m_Addr;
};

//通讯录结构
struct Addressbooks
{
	struct Person personArray[MAX];
	int m_Size;
};

//现实菜单
void showmanu()
{
	cout<<"******************" << endl;
	cout<<"***1.添加联系人***" << endl;
	cout<<"***2.显示联系人***" << endl;
	cout<<"***3.删除联系人***" << endl;
	cout<<"***4.查找联系人***" << endl;
	cout<<"***5.修改联系人***" << endl;
	cout<<"***6.清空联系人***" << endl;
	cout<<"***0.退出通讯录***" << endl;
	cout<<"******************" << endl;
}

//1.添加联系人
void addPerson(Addressbooks *abs)
{
	if (abs->m_Size == MAX)
	{
		cout << "通讯录已满,无法添加!" << endl;
		return;
	} 
	else
	{
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personArray[abs->m_Size].m_name = name;

		cout << "请输入性别:" << endl;
		cout << "1--男" << endl;
		cout << "2--女" << endl;
		int sex = 0;
		while (true)
		{
			cin >> sex;
			if (sex == 1||sex==2)
			{
				abs->personArray[abs->m_Size].m_Sex = sex;
				break;
			}
			else
			{
				cout << "输入错误,请重新输入!" << endl;
			}
		}

		cout << "请输入年龄:" << endl;
		int age;
		cin >> age;
		abs->personArray[abs->m_Size].m_Age = age;

		cout << "请输入电话:" << endl;
		string phonenumber;
		cin >> phonenumber;
		abs->personArray[abs->m_Size].m_Phone = phonenumber;

		cout << "请输入家庭住址:" << endl;
		string address;
		cin >> address;
		abs->personArray[abs->m_Size].m_Addr = address;

		abs->m_Size++;

		cout << "添加成功!" << endl;

		system("pause");
		system("cls");
	}
}

//2.显示联系人
void showPeoson(Addressbooks *abs)
{
	if (abs->m_Size == 0)
	{
		cout << "当前记录为空" << endl;
	}
	else
	{
		for (int i = 0; i < abs->m_Size; i++)
		{
			cout << "姓名:" << abs->personArray[i].m_name << endl;
			cout << "性别:" << abs->personArray[i].m_Sex << endl;
			cout << "年龄:" << abs->personArray[i].m_Age << endl;
			cout << "电话:" << abs->personArray[i].m_Phone << endl;
			cout << "住址:" << abs->personArray[i].m_Addr << endl;

		}
	}
	system("pause");
	system("cls");
}

//判断联系人是否存在
int isExist(Addressbooks* abs, string name)
{
	for (int i = 0; i < abs->m_Size;i++)
	{
		if (abs->personArray[i].m_name == name)
		{
			return i;
		}
	}
	return -1;
}

//3.删除联系人
void deletePerson(Addressbooks * abs)
{
	cout << "请输入您要删除的联系人:" << endl;

	string name;
	cin >> name;

	int ret = isExist(abs, name);
	if (ret != -1)
	{
		for (int i=ret; i < abs->m_Size; i++)
		{
			abs->personArray[i]=abs->personArray[i+1];
		}
		abs->m_Size--;
		cout << "删除成功!" << endl;
	}
	else
	{
		cout << "查无此人!"<<endl;
	}
}

//4.查找联系人
void findPerson(Addressbooks* abs)
{
	cout << "请输入您要查找的联系人:" << endl;
	string name;
	cin >> name;

	int ret = isExist(abs, name);

	if (ret != -1)
	{
		cout << "姓名:" << abs->personArray[ret].m_name << "\t";
		cout << "性别:" << abs->personArray[ret].m_Sex << "\t";
		cout << "年龄:" << abs->personArray[ret].m_Age << "\t";
		cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
		cout << "住址:" << abs->personArray[ret].m_Addr << "\t";
	}
	else
	{
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

//5.修改联系人
void modifyPerson(Addressbooks* abs)
{
	cout << "请输入您要修改的联系人:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs,name);
	if (ret != -1)
	{
		cout << "请输入姓名:" << endl;
		string name;
		cin >> name;
		abs->personArray[ret].m_name = name;

		cout << "请输入性别:" << endl;
		cout << "1.---男" << endl;
		cout << "2.---女" << endl;
		int number;
		
		while (true)
		{
			cin >> number;
			if (number == 1 || number == 2)
			{
				abs->personArray[ret].m_Sex = number;
				break;
			}
			else
			{
				cout << "输入有误,请重新输入!" << endl;
			}
		}

		cout << "请输入年龄" << endl;
		int age;
		cin >> age;
		abs->personArray[ret].m_Age = age;

		cout << "请输入联系电话:" << endl;
		string phonenumber;
		cin >> phonenumber;
		abs->personArray[ret].m_Phone = phonenumber;

		cout << "请输入家庭住址:" << endl;
		string add;
		cin >> add;
		abs->personArray[ret].m_Addr = add;

		cout << "修改成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

//6.清空联系人
void cleanPerson(Addressbooks* abs)
{
	abs->m_Size = 0;
	cout << "通讯录已清空!" << endl;
	system("pause");
	system("cls");
}
int main()
{
	Addressbooks abs;
	abs.m_Size = 0;
	while (true)
	{
		showmanu();
		int select;
		cin >> select;
		switch (select)
		{
		case 1:
			addPerson(&abs);
			break;
		case 2:
			showPeoson(&abs);
			break;
		case 3:
			deletePerson(&abs);
			break;
		case 4:
			findPerson(&abs);
			break;
		case 5:
			modifyPerson(&abs);
			break;
		case 6:
			cleanPerson(&abs);
			break;
		case 0:
			cout << "欢迎下次使用!" << endl;
			system("pause");
			return 0;
			break;
		}
	}
}

<think>好的,我现在需要帮助用户找到关于黑马程序员C++通讯录系统的资料或教程。用户提到了源码和实现,所以首先我应该回忆一下之前提供的引用内容。引用[1]和[2]都提到了通讯录管理系统,其中引用[2]包含了结构体的定义,比如Person和Addressbooks,这些是源码的关键部分。 用户可能需要完整的源码示例,或者教程链接。但根据现有的引用,只能提供结构体设计和部分代码片段。可能需要指导用户如何构建整个系统,比如添加、显示、删除联系人等功能。此外,用户可能对如何编译运行或者分步实现感兴趣。 需要注意的是,用户提到的引用中有一个C++的cout语句,可能涉及到菜单界面的实现。而结构体部分展示了数据存储的方式。接下来应该分步骤说明如何实现通讯录系统,结合已有的代码片段,并建议用户参考相关教程进行深入学习。 还需要检查是否有其他资源或建议,比如推荐黑马程序员的官方网站或课程平台,但由于当前信息有限,可能需要引导用户根据提供的结构体和函数框架自行扩展,或者搜索更详细的教程。同时,确保回答符合格式要求,使用正确的中文,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要关注代码和结构。 最后,生成相关问题,帮助用户进一步探索,比如系统功能扩展、数据持久化存储、界面优化等。确保问题与通讯录系统相关,并基于已有信息合理引导。</think>关于黑马程序员C++通讯录系统的实现,以下是基于公开资料的实现要点解析: ### 一、系统设计框架 通讯录系统采用结构体封装数据,通过分层设计实现功能模块化: ```cpp // 联系人结构体(引用[2]) struct Person { string m_Name; int m_sex; // 1男 2女 int m_age; string m_Phone; string m_Addr; }; // 通讯录结构体(引用[2]) #define MAX 1000 struct Addressbooks { struct Person personArray[MAX]; int m_Size; // 当前联系人数量 }; ``` 该设计通过$O(1)$时间复杂度访问数组元素,MAX常量控制存储容量[^2]。 ### 二、核心功能实现 1. **菜单界面**(引用[1]) ```cpp void showMenu() { cout << "***** 0、退出通讯录 *****" << endl; cout << "***** 1、添加联系人 *****" << endl; cout << "***** 2、显示联系人 *****" << endl; // ...其他菜单项 } ``` 2. **添加联系人函数** ```cpp void addPerson(Addressbooks *abs) { if (abs->m_Size == MAX) { cout << "通讯录已满!" << endl; return; } // 获取用户输入并写入结构体 abs->personArray[abs->m_Size].m_Name = "张三"; abs->m_Size++; } ``` ### 三、系统优化建议 1. **数据持久化**:添加文件读写功能 2. **检索优化**:实现哈希表快速查找 3. **界面美化**:使用NCurses库增强交互
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值