【c++项目实战】通讯录管理系统

本文详细介绍了如何使用C++编写一个简单的通讯录程序,包括封装菜单、添加联系人、显示联系人、删除、查找、修改和清空等功能。主要涉及结构体定义、数组操作和控制流的使用。
摘要由CSDN通过智能技术生成
//封装函数,然后在main里调用
#include <iostream>
#include <string>
#define MAX 1000

using namespace std;

//菜单界面
void  showmenu()
{
	cout << "1,添加" << endl;
	cout << "2,显示" << endl;
	cout << "3,删除" << endl;
	cout << "4,查找" << endl;
	cout << "5,修改" << endl;
	cout << "6,清空" << endl;
	cout << "0,退出" << endl;
}
//添加联系人结构体>添加通讯录结构>main中创建通讯录>封装联系人>测试添加联系人功能
struct person
{
	int age;
	string name;
	int sex;
	string  phone;
	string address;

};

struct addressbook
{
	struct person personarray[MAX];
	int m_size;
	
};

void addperson(addressbook* addressbs)
{
	//判断通讯录是否已满,如果满了就不添加
	if (addressbs->m_size==MAX)
	{
		cout << "FULL" << endl;
		

	}
	else
	{
		string name;
		cout << "输入姓名" << endl;
		cin >> name;
		addressbs->personarray[addressbs->m_size].name = name;

		cout << "性别1男2女" << endl;
		int sex = 0;
		while (true)
		{
			cin >> sex;
			//如果输入的是1或者2可以退出循环,如果是别的就要重新输入
			if (sex==1||sex==2)
		{
			addressbs->personarray[addressbs->m_size].sex = sex;
			break;

		}
		else {
				cout << "非法操作" << endl;
				break;
		}

		}
		int age = 0;
		cout << "press age年龄" << endl;
		cin >> age;
		addressbs->personarray[addressbs->m_size].age = age;

		string phonenumber;
		cout << "press number手机" << endl;
		cin >> phonenumber;
		addressbs->personarray[addressbs->m_size].phone = phonenumber;

		string address;
		cout << "press adress地址" << endl;
		cin >> address;
		addressbs->personarray[addressbs->m_size].address = address;

		addressbs->m_size++;
		//更新通讯录人数
		cout << "successed成功" << endl;
		system("pause");
		system("cls");
		//清屏操作
	}
}

//显示联系人:封装+测试,没有人显示记录为空,有人显示具体信息
void showperson(addressbook* addressbs)
{
	//判断通讯录中人数是否为0.如果为0提示empty,不为0显示联系人信息
	if (addressbs->m_size==0)
	{
		cout << "当前记录为空!" << endl;
	}
	else
	{
		for (int i = 0; i < addressbs->m_size; i++)
		{
			cout << "姓名" << addressbs->personarray[i].name << endl;
			cout << "性别" << (addressbs->personarray[i].sex==1 ?"男":"女")<< endl;
			cout << "年龄" << addressbs->personarray[i].age << endl;
			cout << "电话" << addressbs->personarray[i].phone << endl;
			cout << "地址" << addressbs->personarray[i].address << endl;

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

//检验是否存在
int checkexist(addressbook* addressbs, string name)//参数1通讯录 参数2对比姓名
{
	//原理:遍历所有人名和所查找人名是否一致
	for (int i = 0; i < addressbs->m_size; i++)
	{
		if (addressbs->personarray[i].name == name)
		{
			return i;
		}
	}
	return -1;
	system("pause");
	system("cls");

}
//删除联系人
//检测联系人是否存在,删除联系人函数,测试删除联系功能
//按照姓名来查信息
void deleteperson(addressbook* addressbs, string name)
{
	cout << "请输入要删除的联系人" << endl;
	string name3;
	cin >> name3;
	int ret=checkexist(addressbs, name3);
	if (ret==-1)
	{
		cout << "没有这个人" << endl;
	}
	else
	{
		//delete the people that found
		for (int i = ret; i < addressbs->m_size; i++)
		{
			addressbs->personarray[i] = addressbs->personarray[i + 1];

		}
		addressbs->m_size--;
		cout << "删除" << name << "成功" << endl;
	}
	system("pause");
	system("cls");


}


//查找
int findperson(addressbook* addressbs)
{
	string name;
	cout << "输入查找姓名";

	cin >> name;

	int ret = checkexist(addressbs, name);
	if (ret == -1)
	{
		cout << "没有这个人" << endl;
	}
	else
	{
		cout << "name姓名" << addressbs->personarray[ret].name << endl;
		cout << "sex性别" << addressbs->personarray[ret].sex << endl;
		cout << "age年龄" << addressbs->personarray[ret].age << endl;
		cout << "phone手机" << addressbs->personarray[ret].phone << endl;
		cout << "address住址" << addressbs->personarray[ret].address << endl;
	}
	return 0;

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

//修改
void modifyperson(addressbook* addressbs)
{
	cout << "输入姓名" << endl;
	string name5;
	cin >> name5;
	int ret=checkexist(addressbs, name5);
	if (ret!=-1)
	{
		string name;
		cout << "输入修改后的姓名" << endl;
		cin >> name;
		addressbs->personarray[ret].name = name;

		int sex;
		cout << "输入修改后的sex,1男2女" << endl;
		cin >> sex;
		addressbs->personarray[ret].sex= sex;

		int age;
		cout << "输入修改后的age" << endl;
		cin >> age;
		addressbs->personarray[ret].age = age;

		string phone;
		cout << "输入修改后的phone" << endl;
		cin >> phone;
		addressbs->personarray[ret].phone = phone;

		string address;
		cout << "输入修改后的address" << endl;
		cin >> address;
		addressbs->personarray[ret].address = address;
	}
	else
	{
		cout << "查无此人" << endl;

	}


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

}

//清空
void clearperson(addressbook* addressbs)
{
	addressbs->m_size = 0;
	cout << "清空成功" << endl;
	system("pause");
	system("cls");
}

int main()
{
	//创建通讯录结构体变量
	addressbook addressbs;
	addressbs.m_size = 0;



	int select = 0;
	while (true)
	{
	showmenu();
	cin >> select;
	switch (select)
	{
	case 1://add
		addperson(&addressbs);//调用添加函数
		break;
	case 2://show
		showperson(&addressbs);
		break;
	case 3://delete
	{
		cout << "请输入姓名" << endl;
		string name3;
		cin >> name3;
		deleteperson(&addressbs, name3);
	}
		break;
	case 4://find
	{
		findperson(&addressbs);
	}
		break;
	case 5://correct
		modifyperson(&addressbs);

		break;
	case 6://clear
		clearperson(&addressbs);

		break;
	case 0://quit
		cout << "欢迎下次使用" << endl;
		return 0;

		break;

	default:
		break;
	}

	}

	system("pause");
	return 0;

}

可能会遇到的问题

代码逻辑:main函数里switch选择语句,根据你输入的东西调用不同的功能函数;在main之前写不同功能。

所有对addressbook结构体之下的addressbs指针,都指向数组里存储的每一项“联系人”,其中联系人的结构体、通讯录的结构体、通讯录数组的内存变动是本项目的基础,在此之上实现所有功能函数。

可能会出现errorC4716“必须返回一个值”,这个报错针对int型函数而非void函数,int函数因为自身数据类型必须有return ()。

switch函数调用&addressbs反指针的值。

system pause/cls的作用是“停止运行”和“清屏”,即清除以上所有的显示,只保留本步操作,为了整洁美观用,不是必须。 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值