通讯录管理系统(c++数组实现)

#include<iostream>
using namespace std;
#define max 1000
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;
	int age;
	long long phone;
	string addr;
};
struct Addressbooks//创建联系人电话簿结构体,以便修改和访问
{
	Person arr[max];
	int size;
};
void addPerson(Addressbooks* p) {//添加联系人方法
	if (p->size <= max) {
		string name;
		int sex;
		int age = 0;
		long long phone;
		string addr;
		cout << "请输入添加联系人的姓名:" << endl;
		cin >> name;
		p->arr[p->size].name = name;
		cout << "请输入添加联系人的性别:" << endl;
		cout << "1、男" << endl;
		cout << "2、女" << endl;
		while (1) {
			cin >> sex;
			if (sex == 1 || sex == 2) {
				p->arr[p->size].sex = sex;
				break;
			}
			else {
				cout << "输入格式错误,请重新输入:" << endl;
				cout << "1、男" << endl;
				cout << "2、女" << endl;
			}
		}
		cout << "请输入添加联系人的年龄:" << endl;
		while (1) {
			cin >> age;
			if (age > 0 && age <= 150) {
				p->arr[p->size].age = age;
				break;
			}
			else {
				cout << "输入年龄有误,请重新输入:" << endl;
			}
		}
		cout << "请输入添加联系人的手机号:" << endl;
		cin >> phone;
		p->arr[p->size].phone = phone;
		cout << "请输入添加联系人的住址:" << endl;
		cin >> addr;
		p->arr[p->size].addr = addr;
		p->size++;
		cout << "添加成功!!!" << endl;
	}
	else {
		cout << "通讯录已满,无法添加!!!" << endl;
	}
}
void showPerson(Addressbooks* p) {//显示当前电话簿里所有联系人
	if (p->size == 0 || p->arr[0].name == "") {
		cout << "当前的通讯录为空,无法显示联系人。" << endl;
		return;
	}
	cout << "当前通讯录的联系人如下:" << endl;
	for (int i = 0; i < p->size; i++) {
		cout << "姓名:" << p->arr[i].name
			<< "  性别:" << (p->arr[i].sex == 1 ? "男" : "女")
			<< "  年龄:" << p->arr[i].age
			<< "  手机号:" << p->arr[i].phone
			<< "  住址:" << p->arr[i].addr << endl;
	}
}
int exist(Addressbooks* p, string* name) {//查找联系人是否存在,返回联系人所在电话簿的位置
	int flag = 0;
	if (p->size == 0) {
		cout << "通讯录为空,无法查找联系人。" << endl;
	}
	else {
		for (int i = 0; i < p->size; i++) {
			if (*name == (p->arr[i].name)) {
				flag = 1;
				return i;
			}
		}
		if (flag == 0) {
			cout << "通讯录没有找到这个人。" << endl;
		}
	}
	return -1;
}
void delPerson(Addressbooks* p, string* name) {//删除指定联系人

	int position;
	int flag = 0;
	if (p->size == 0) {
		cout << "通讯录为空,无法查找联系人。" << endl;
	}
	else {
		for (int i = 0; i < p->size; i++) {
			if (*name == (p->arr[i].name)) {
				position = i;
				flag = 1;
				break;
			}
		}
		if (flag == 0) {
			cout << "通讯录没有找到这个人。" << endl;
		}
	}
	if (flag == 1) {
		for (int j = position; j < p->size; j++) {
			p->arr[j] = p->arr[j + 1];
		}
		p->size--;
	}
}
int repairPerson(Addressbooks* p, string* name) {//修改指定联系人的信息
	int n = exist(p, name);
	if (n == -1) {
		cout << "没有找到要修改的联系人。" << endl;
	}
	else {
		cout << "请输入要修改的联系人的内容:" << endl;
		cout << " ****************** " << endl;
		cout << " *** 1、姓名 ****** " << endl;
		cout << " *** 2、性别 ****** " << endl;
		cout << " *** 3、年龄 ****** " << endl;
		cout << " *** 4、手机号 **** " << endl;
		cout << " *** 5、住址 ****** " << endl;
		cout << " ****************** " << endl;
		int number;
		cin >> number;
		switch (number)
		{
		case 1: {
			string Name;
			cout << "请输入要修改联系人的姓名:" << endl;
			cin >> Name;
			p->arr[n].name = Name;
			cout << "联系人姓名修改成功!!!" << endl;
			break;
		}
		case 2: {
			int Sex;
			cout << "请输入要修改的性别:" << endl;
			cout << "1、男" << endl;
			cout << "2、女" << endl;
			while (1) {
				cin >> Sex;
				if (Sex == 1 || Sex == 2) {
					p->arr[p->size].sex = Sex;
					break;
				}
				else {
					cout << "输入格式错误,请重新输入:" << endl;
					cout << "1、男" << endl;
					cout << "2、女" << endl;
				}
			}
			cout << "联系人性别修改成功!!!" << endl;
			break;
		}
		case 3: {
			int Age;
			cout << "请输入要修改联系人的年龄:" << endl;
			cin >> Age;
			p->arr[n].age = Age;
			cout << "联系人年龄修改成功!!!" << endl;
			break;
		}
		case 4: {
			long long Phone;
			cout << "请输入要修改联系人的手机号:" << endl;
			cin >> Phone;
			p->arr[n].phone = Phone;
			cout << "联系人手机号修改成功!!!" << endl;
			break;
		}
		case 5: {
			string Addr;
			cout << "请输入要修改联系人的住址:" << endl;
			cin >> Addr;
			p->arr[n].addr = Addr;
			cout << "联系人住址修改成功!!!" << endl;
			break;
		}
		default:
			break;
		}
	}
	return n;
}
void cleanPerson(Addressbooks* p) {
	p->size = 0;
}
int main() {
	Addressbooks p;
	p.size = 0;
	int select;
	while (1) {
		showMenu();
		cin >> select;
		switch (select)
		{
		case 1:
			addPerson(&p);
			break;
		case 2:
			showPerson(&p);
			break;
		case 3: {
			string Name;
			string judge;
			int n;
			cout << "请输入要删除的人的名字:" << endl;
			cin >> Name;
			n = exist(&p, &Name);
			if (n == -1) {
				cout << "查无此人!!!" << endl;
			}
			else {
				cout << "已找到要删除的联系人,即将删除的联系人信息如下:" << endl;
				cout << "姓名:" << p.arr[n].name
					<< "  性别:" << (p.arr[n].sex == 1 ? "男" : "女")
					<< "  年龄:" << p.arr[n].age
					<< "  手机号:" << p.arr[n].phone
					<< "  住址:" << p.arr[n].addr << endl;
				cout << "请确认是否删除(Y:Yes,N:No(不区分大小写)):" << endl;
				cin >> judge;
				if (judge == "Y" || judge == "y") {
					delPerson(&p, &Name);
					cout << "删除联系人成功!!!" << endl;
				}
				else if (judge == "N" || judge == "n") {
					cout << "取消删除成功!!!" << endl;
				}
			}
			break;
		}
		case 4: {
			string Name;
			int n;
			cout << "请输入要查找的人的名字:" << endl;
			cin >> Name;
			n = exist(&p, &Name);
			if (n == -1) {
				cout << "查无此人!!!";
			}
			else {
				cout << "已找到联系人,该联系人信息如下:" << endl;
				cout << "姓名:" << p.arr[n].name
					<< "  性别:" << (p.arr[n].sex == 1 ? "男" : "女")
					<< "  年龄:" << p.arr[n].age
					<< "  手机号:" << p.arr[n].phone
					<< "  住址:" << p.arr[n].addr << endl;
			}
			break;
		}
		case 5: {
			string nameContacts;
			string d;
			cout << "请问您想修改哪位联系人的信息?(请输入要修改的联系人的名字)" << endl;
			cin >> nameContacts;
			repairPerson(&p, &nameContacts);
			break;
		}
		case 6:
			cleanPerson(&p);
			cout << "通讯录已清空!!!" << endl;
			break;
		case 0:
			cout << "通讯录已退出!!!";
			return 0;
			break;
		default:
			break;
		}
		system("pause");
		system("cls");
	}
}
通讯录的功能在菜单都显示了。最后两行的功能为暂停,按任意键继续,以及清屏操作
效果如图:

在这里插入图片描述
再按一次回车,效果如下:
在这里插入图片描述

该通讯录管理系统使用的是数组来存储,实现较为简单,增删改的效率都比较低,查找效率较高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值