基于visualStudio的C++通讯录管理系统(结构体)

这是一个使用C++编写的简易通讯录管理系统,具备添加、显示、删除、查找和修改联系人信息的功能。系统通过结构体存储联系人详细信息,并通过菜单交互式操作,实现了对通讯录的操作。用户可以按任意键在每个操作后继续或清屏。
#include<iostream>
#include<string>
using namespace std;
#define MAX	1000
//快捷对齐代码ctrl+k+f


//显示菜单
void showMenu() {
	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;
}

//定义联系人结构体
struct Person   //结构体命名最好用大写字母开头
{
	string name;//姓名
	int sex;//性别 1男2女
	int age;//年龄
	string num;//电话
	string address;//地址
};
//定义通讯录结构体 (结构体嵌套 通讯录中有联系人)
struct Addressbooks {
	struct Person personarr[MAX]; //联系人数组
	int size;
};

//1.创建添加联系人函数
void addPerson(Addressbooks* abs) {
	//先判断通讯录是否已满,满则拒绝,未满添加
	if (abs->size == MAX) {        //
		cout << "通讯录已满。" << endl;
		return;
	}
	else
	{
		//添加姓名
		string name;
		cout << "请输入联系人姓名:" << endl;
		cin >> name;
		//把新联系人的名字赋给 通讯录变量abs的联系人数组personarr中所在位置abs->size的联系人名字name
		abs->personarr[abs->size].name = name;

		//性别
		cout << "请输入联系人性别:(1 为 男,2 为 女)" << endl;
		int sex = 0;
		//写一个死循环,只有输入正确格式(1或2)才能出去
		while (true)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				abs->personarr[abs->size].sex = sex;
				break;
			}
			cout << "输入不合法!" << endl;
		}

		//年龄
		cout << "请输入联系人年龄:" << endl;
		int age = 0;
		while (true)
		{
			cin >> age;
			if (age >= 0 && age <= 100)
			{
				abs->personarr[abs->size].age = age;
				break;
			}
			cout << "年龄不对劲!" << endl;
		}

		//电话
		string num;
		cout << "请输入联系人电话:" << endl;
		cin >> num;
		abs->personarr[abs->size].num = num;

		//地址
		string address;
		cout << "请输入联系人地址:" << endl;
		cin >> address;
		abs->personarr[abs->size].address = address;

		//更新通讯录人数
		abs->size++;

		cout << "添加成功!" << endl;
		system("pause");//按任意键继续
		system("cls");//清屏操作
	}

}


//2.显示所有联系人信息
void showPerson(Addressbooks* abs) {
	//判断通讯录中是否为空,空则显示0;不空则显示联系人
	if (abs->size == 0) {
		cout << "联系人为空!" << endl;
	}
	else {
		for (int i = 0; i < abs->size; i++)
		{
			cout << "姓名:" << abs->personarr[i].name <<"\t";
			cout << "性别:" << (abs->personarr[i].sex == 1 ? "男":"女")<< "\t";
			cout << "年龄:" << abs->personarr[i].age << "\t";
			cout << "电话:" << abs->personarr[i].num << "\t";
			cout << "地址:" << abs->personarr[i].address << endl;
		}
	}
	system("pause");
	system("cls");
}


//检测联系人是否存在。存在返回所在位置,不存在返回-1
//参数1 通讯录  参数2  对比姓名
int isExist(Addressbooks* abs, string name) {
	//for循环遍历通讯录,查找联系人名字进行比对
	for (int i = 0; i < abs->size; i++) {
		if (abs->personarr[i].name == name) {
			return i;  //存在返回位置
		}
	}
	return -1;   //不存在返回-1
}

//3.删除联系人信息
void deletePerson(Addressbooks* abs) {
	cout << "请输入您要删除的联系人姓名:" << endl;
	string name;
	cin >> name;

	int ret = isExist(abs, name);//设置一个ret接收 检测联系人是否存在结果
	if (ret != -1) {
		//查到该联系人进行删除操作,即把后面所有数据往前移一个
		for (int i = ret; i < abs->size; i++) {
			abs->personarr[i] = abs->personarr[i + 1];
			abs->size--;
			cout << "删除成功!" << endl;
		}
	}
	else
	{
		cout << "联系人不存在" << endl;
	}

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


//4.查找联系人信息
void findPerson(Addressbooks* abs) {
	cout << "请输入查找的联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		cout << "所查找联系人信息如下:" << endl;
		cout << "姓名:" << abs->personarr[ret].name << "\t";
		cout << "性别:" << (abs->personarr[ret].sex == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << abs->personarr[ret].age << "\t";
		cout << "电话:" << abs->personarr[ret].num << "\t";
		cout << "地址:" << abs->personarr[ret].address << endl;
	}
	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) {
		//分别修改各个信息
		//修改姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personarr[ret].name = name;

		//修改性别
		cout << "请输入联系人性别:(1 为 男,2 为 女)" << endl;
		int sex = 0;
		//写一个死循环,只有输入正确格式(1或2)才能出去
		while (true)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				abs->personarr[ret].sex = sex;
				break;
			}
			cout << "输入不合法!" << endl;
		}

		//修改年龄
		cout << "请输入联系人年龄:" << endl;
		int age = 0;
		while (true)
		{
			cin >> age;
			if (age >= 0 && age <= 100)
			{
				abs->personarr[ret].age = age;
				break;
			}
			cout << "年龄不对劲!" << endl;
		}

		//修改电话
		string num;
		cout << "请输入联系人电话:" << endl;
		cin >> num;
		abs->personarr[ret].num = num;

		//修改地址
		string address;
		cout << "请输入联系人地址:" << endl;
		cin >> address;
		abs->personarr[ret].address = address;

		cout << "修改成功!" << endl;
	}
	else
	{
		cout << "联系人不存在!" << endl;
	}
	system("pause");
	system("cls");
}



//6.清空联系人信息
void noPerson(Addressbooks* abs) {
	cout << "确认清空联系人吗?(1.确认  2.取消)" << endl;
	int a;
	cin >> a;
	if (a == 1) {
		if (abs->size = 0) {
			cout << "联系人为空!" << endl;
			system("pause");
			system("cls");
		}

		else
		{
			abs->size == 0;
			cout << "清空成功!" << endl;
		}
		system("pause");
		system("cls");
	}
	else
	{
		system("pause");
		system("cls");
	}
}

	int main() {

		//创建通讯录结构体变量:
		Addressbooks abs;
		//初始化通讯录中联系人人数
		abs.size = 0;


		int select = 0;
		while (true)
		{
			//菜单调用
			showMenu();

			cin >> select;
			//switch语句分别调用菜单
			switch (select)
			{
			case 1:  //1、添加联系人
				addPerson(&abs);
				break;
			case 2:  //2、显示联系人
				showPerson(&abs);
				break;
			case 3:  //3、删除联系人
			/*{
				cout << "请输入要删除的联系人名字:" << endl;
				string name;
				cin >> name;
				if (isExist(&abs, name) == -1) {
					cout << "联系人不存在:" << endl;
					system("pause");
					system("cls");
				}
				else {
					cout << "联系人已经找到,是否确认删除?(1-确认,2-取消)" << endl;
				}
			}*/
				deletePerson(&abs);
				break;
			case 4:  //4、查找联系人
				findPerson(&abs);
				break;
			case 5:  //5、修改联系人
				modifyPerson(&abs);
				break;
			case 6:  //6、清空联系人
				noPerson(&abs);
				break;
			case 0:  //0、退出通讯录
				cout << "欢迎下次使用!" << endl;
				system("pause");
				return 0;
				break;
			default:
				break;
			}
		}

		system("pause");
		return 0;
	}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值