基于C++结构体的通讯录系统

基于C++结构体的通讯录系统

说明

该程序系统并不完美,存在一定的缺陷,仅供初学者参考,不论是功能上,还是界面上,读者可自行修改,创新。

核心代码块即功能展示

1.添加联系人功能

//添加联系人
void Add(Addressbook *p)
{
	if (p->size == MAX)
	{
		cout << "通讯录已满,请删除后在进行添加!" << endl;
		return;
	}
	else
	{
		cout << "<----------系统提醒:如有同名则请加标识符予以区分---------->" << endl;
		//注意该模块并没有设置不允许同名,所以如果添加同名后,后续其他操作可能不一定全能实现(如:修改),所以尽量加标识符予以区分
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		p->Parry[p->size].name = name;

		string sex;
		cout << "请输入性别:" << endl;
		while (true)
		{
			cin >> sex;
			if ((sex == "男") || (sex == "女"))
			{
				p->Parry[p->size].sex = sex;
				break;
			}
			else
			{
				cout << "输入有误,请重新输入!" << endl;
			}
		}
		

		int age;
		cout << "请输入年龄:" << endl;
		while (true)
		{
			cin >> age;
			if (age >= 0 && age <= 120)
			{
				p->Parry[p->size].age = age;
				break;
			}
			else
			{
				cout << "输入有误,请重新输入!注意:年龄范围[0,120]" << endl;
			}
		}

		long long int phone;
		cout << "请输入联系方式:" << endl;
		while (true)
		{
			cin >> phone;
			//除了判定号码长度以外喜欢的朋友还可以进行判定手机号是否正确(即是否有前三位这样开头的手机号)
			//亦或者是否存在相同手机号
			if (int(log10(phone) + 1)==11)//公式计算号码长度
			{
				p->Parry[p->size].phone = phone;
				break;
			}
			else
			{
				cout << "手机号码共十一位,请重新输入!" << endl;
			}
		}
		
		string address;
		cout << "请输入家庭住址:" << endl;
		cin >> address;
		p->Parry[p->size].address = address;

		//更新数组长度
		p->size++;
		cout << "系统提示:联系人成功添加!" << endl;
		//请按任意键继续
		system("pause");
		//清屏操作
		system("cls");
	}
}

添加联系人功能,如果输入有限制,会有错误提示,可重新输入。

2.删除联系人功能

//删除指定的联系人
void deletPerson(Addressbook *p)
{
	if(p->size==0)
	{
		cout << "联系人为空!" << endl;
	}
	else
	{
		string name;
		cout << "请输入要删除的联系人姓名:" << endl;
		cin >> name;
		for (int i = 0; i < p->size; i++)
		{
			if (name == p->Parry[i].name)
			{
				for (int j = i; j < p->size; j++)
				{
					p->Parry[j] = p->Parry[j + 1];//数据向前移动
				}
				p->size--;//删除之后更新数组的值
				cout << "系统提示:联系人删除成功!" << endl;
				break;
			}
			if((name != p->Parry[i].name) && (i == p->size-1))//已经查找完整个数组依然没有找到删除人的姓名
			{
				cout << "不存在该联系人!!!" << endl;
			}
		}
	}
	//请按任意键继续
	system("pause");
	//清屏操作
	system("cls");
}

在这里插入图片描述在这里插入图片描述删除联系人功能,如果不存在则显示不存在,否则删除成功。

3.修改联系人

void CorrectPerson(Addressbook *p)
{
	if (p->size == 0)
	{
		cout << "通讯录为空!" << endl;
	}
	else
	{
		int CorArry[5];
		string name;
		string sex;
		int age;
		long long int phone;
		string address;
		cout << "请输入要修改的联系人姓名:" << endl;
		cin >> name;
		for (int i = 0; i < p->size; i++)
		{
			if (p->Parry[i].name == name)
			{
				cout << "修改前该联系人的所有信息为:" << endl;
				cout << "姓名:" << p->Parry[i].name << "\t";
				cout << "性别:" << p->Parry[i].sex << "\t";
				cout << "年龄:" << p->Parry[i].age << "\t";
				cout << "联系方式:" << p->Parry[i].phone << "\t";
				cout << "家庭住址:" << p->Parry[i].address << endl;
				//}
				cout << "请按姓名,性别,年龄,联系方式,家庭住址的顺序依次输入(1/0),1代表要修改此处且每个数字间以空格隔开!" << endl;
				for (int j = 0; j < 5; j++)
				{
					cin >> CorArry[j];
				}
				for (int k = 0; k < 5; k++)
				{
					if ((CorArry[k] == 1) && (k == 0))
					{
						cout << "请输入修改后的姓名:" << endl;
						cin >> name;
						p->Parry[i].name = name;
					}
					else if ((CorArry[k] == 1) && (k == 1))
					{
						cout << "请输入修改后的性别:" << endl;
						while (true)
						{
							cin >> sex;
							if (sex == "男" || sex == "女")
							{
								p->Parry[i].sex = sex;
								break;
							}
							else {
								cout << "输入有误请重新输入!" << endl;
							}
						}
					}
					else if ((CorArry[k] == 1) && (k == 2))
					{
						cout << "请输入修改后的年龄:" << endl;
						while (true)
						{
							cin >> age;
							if (age > 0 && age < 120)
							{
								p->Parry[i].age = age;
								break;
							}
							else
							{
								cout << "输入有误请重新输入!" << endl;
							}
							
						}
					}
					else if ((CorArry[k] == 1) && (k == 3))
					{
						cout << "请输入修改后的联系方式:" << endl;
						while (true)
						{
							cin >> phone;
							if (int(log10(phone) + 1) == 11)
							{
								p->Parry[i].phone = phone;
								break;
							}	
							else
							{
								cout << "输入有误请重新输入!" << endl;
							}
						}
					}
					else if ((CorArry[k] == 1) && (k == 4))
					{
						cout << "请输入修改后的家庭住址:" << endl;
						cin >> address;
						p->Parry[i].address = address;
					}
				}
				cout << "修改成功!" << endl;
			}
			else
			{
				cout << "不存在该联系人!" << endl;
				break;
			}
		}
	}
	//请按任意键继续
	system("pause");
	//清屏操作
	system("cls");
}

在这里插入图片描述在这里插入图片描述输入姓名查找到联系人进行修改,不存在该姓名,则显示不存在该联系人,若存在则先显示了基本信息,通过提示进行修改信息,此处只展示修改姓名的方式,其余信息的修改与修改姓名的方式一样。

4.查找联系人

void FindPerson(Addressbook *p)
{
	string name;
	int flag = 0;
	int flag1 = 0;
	if (p->size == 0)
	{ 
		flag1 = 1;
		cout << "通讯录为空!" << endl;
	}
	else
	{
		cout << "请输入要查找的联系人的姓名:" << endl;
		cin >> name;
		for (int i = 0; i < p->size; i++)
		{
			if (p->Parry[i].name == name)
			{
				flag = 1;
				cout << "姓名:" << p->Parry[i].name << "\t";
				cout << "性别:" << p->Parry[i].sex << "\t";
				cout << "年龄:" << p->Parry[i].age << "\t";
				cout << "联系方式:" << p->Parry[i].phone << "\t";
				cout << "家庭住址:" << p->Parry[i].address << endl;
			}
		}
	}
	if (flag == 0 && flag1 == 0)
	{
		cout << "不存在该联系人!" << endl;
	}

	//请按任意键继续
	system("pause");
	//清屏操作
	system("cls");
}

在这里插入图片描述在这里插入图片描述通过姓名查找联系人显示联系人的基本信息。

5.显示通讯录

void  showPerson(Addressbook *p)
{
	if (p->size == 0)
	{
		cout << "联系人为空!!" << endl;
	}
	else
	{
		for (int i = 0; i < p->size; i++)
		{
			cout << "姓名:" << p->Parry[i].name << "\t";
			cout << "性别:" << p->Parry[i].sex << "\t";
			cout << "年龄:" << p->Parry[i].age << "\t";
			cout << "联系方式:" << p->Parry[i].phone << "\t";
			cout << "家庭住址:" << p->Parry[i].address << endl;
		}
	}
	//请按任意键继续
	system("pause");
	//清屏操作
	system("cls");
}

在这里插入图片描述在这里插入图片描述如果未添加联系人则显示为空,否则正确显示全部联系人的所有信息。

6.清空通讯录

void CleanPerson(Addressbook *p)
{
	//将size置为零即可。
	int num = 0;
	cout << "确定清空请按-->1" << endl;
	cin >> num;
	if (num == 1)
	{
		p->size = 0;
		cout << "联系人已经清空!" << endl;
	}
	//请按任意键继续
	system("pause");
	//清屏操作
	system("cls");
}

在这里插入图片描述在这里插入图片描述清空通讯录之前有个确定操作,为避免不小心使用了该功能,造成不必要的麻烦。

7.退出程序

cout << "系统提示:通讯录系统已退出,欢迎继续使用!" << endl;
			system("pause");
			return 0;

在这里插入图片描述

执行此处之后,运行窗口将会关闭,结束程序。

为了读者更好地理解和实际操作此程序,在此奉上源码。
https://github.com/LeeQi007/AddressBook/tree/master

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值