前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++实现通讯录管理系统(源码)

C++实现通讯录管理系统(源码)

作者头像
杨鹏伟
发布2022-05-05 20:27:30
8920
发布2022-05-05 20:27:30
举报
文章被收录于专栏:ypw

C++实现通讯录管理系统

实现思路:

1.基于打印的一个界面供用户选择。

代码语言:javascript
复制
*********通讯录管理系统*********
******       1.添加联系人       ******
******       2.显示联系人       ******
******       3.删除联系人       ******
******       4.查找联系人       ******
******       5.修改联系人       ******
******       6.清空联系人       ******
******       0.退出通讯录       ******
********************************

2.用户按键输入0~6选择相应功能。

3.通讯录采用结构体和数组实现。

  • 其中AddressBooks为通讯录结构体,其中包含结构体Person[]数组跟size表示其中人的数量。
  • Person表示联系人结构体,其中包含联系人姓名,性别,年龄,电话,住址。

4.在main()函数里面。 我们采用switch to 语句来实现用户的选择,并不断轮询直到用户输入指令0退出通讯录系统。我们还可以用cls实现清屏操作以保持美观。

5.添加联系人 实现添加联系人操作,我们首先要判断通讯录是否已经满(后面一系列操作我们都要考虑联系人是否满,或者空)。 若没满,我们便执行添加操作,这里可以打印一些提示,“请输入添加联系人姓名”,“请输入添加联系人性别” 了等等。 我们还可以对用户的输入实现一些常规的控制,例如性别一项我们只允许用户输入(男/女),若用户输入不正确,我们便提醒用户让其继续输入。(详细见代码) 后续其余信息项也可以,本文代码没有过多实现。

6.显示联系人 显示联系人的操作比较简单,我们遍历一遍通讯录即可。然后遍历过程中打印联系人的各项信息。

7.删除联系人 因为我们是采用数组的方式实现通讯录,所以我们可以采用覆盖的方式删除联系人。 首先,我们要根据姓名遍历通讯录然后找到这个人(可能存在同名)。 同名的话我们就将其所有名为这个的人打印出来,供用户选择删除。 找到之后,我们就从当前位置往后进行覆盖操作,最后size–;

8.查找联系人 遍历通讯录即可,看姓名是否匹配。一样,同名的全部打印出来给用户。

9.修改联系人 修改联系人,一样我们需要先根据姓名找到这个联系人,然后进行修改即可。

10.清空通讯录 这里操作比较简单,我们只需要逻辑上实现清空操作即可,令size = 0;

这也是为什么一些文件被删除以后我们还能进行恢复,因为物理磁盘上还存贮有,并没有实际删除,除非后续下载东西将其覆盖了。

11.退出通讯录 这里是程序出口,因为我们上面一直是轮询着等待用户输入操作的,这里直姐return0即可。

code如下:

代码语言:javascript
复制
#include<iostream>
#include<string>
using namespace std;

#define maxn 1000
//设计联系人结构体
struct Person{
	string name;//名字
	int age;//年龄
	string sex;//性别
	string Phone;//电话
	string Adress;//住址
};

//设计通讯录结构体
struct AddressBooks {
	struct Person p[maxn];//通讯录中保存联系人数组
	int size;//通讯录中当前记录联系人的个数
};

//1.添加联系人
void addPerson(AddressBooks* abs) {
	 //先判断通讯录是否满
	if (abs->size == maxn) {
		cout << "通讯录已经满了,无法继续添加!!!";
		return;
	}
	else {
		//添加具体联系人
		string add_name;
		string  add_sex;
		int add_age;
		string add_phone;
		string add_address;
		cout << "请输入联系人姓名:" << endl; 
		cin >> add_name;
		abs->p[abs->size].name = add_name; 

		while (1) {
			cout << "请输入联系人性别(男/女):" << endl;
			cin >> add_sex;
			if (add_sex == "男" || add_sex == "女") {
				abs->p[abs->size].sex = add_sex;
				break;
			}
			else {
				cout << "输入有误!请重新输入!" << endl;
			}
		}
		
		cout << "请输入联系人年龄:" << endl;
		cin >> add_age;
		abs->p[abs->size].age = add_age;

		cout << "请输入联系人电话:" << endl;
		cin >> add_phone;
		abs->p[abs->size].Phone = add_phone;

		cout << "请输入联系人住址:" << endl;
		cin >> add_address;
		abs->p[abs->size].Adress = add_address;

		abs->size++;
		//cout << abs->size << endl;
		cout << "o(* ̄︶ ̄*)o  添加成功!" << endl;
		system("pause");
		system("cls");
	}
}
//2.显示联系人
void showPerson(AddressBooks* abs) {
	if (abs->size == 0) {
		cout << "当前通讯录为空!" << endl;
	 }
	else {
		for (int i = 0; i < abs->size; i++) {
			cout << "当前联系人序号:" << i+1 <<"\t"<< "姓名:" << abs->p[i].name <<"\t"<< "性别:" << abs->p[i].sex<<"\t" << "年龄:" << abs->p[i].age<<"\t" <<" 电话:"<< abs->p[i].Phone<<"\t" << "住址:" << abs->p[i].Adress << endl;
		//	cout << "姓名:" << abs->p->name << endl;
		//	cout << "性别:" << abs->p->sex << endl;
		//	cout << "年龄:" << abs->p->age << endl;
		//	cout << "电话:" << abs->p->Phone << endl;
		//	cout << "住址:" << abs->p->Adress << endl;
		//	cout << endl;
		}
		cout << "o(* ̄︶ ̄*)o  显示成功!" << endl;
		//system("cls");
	}
	system("pause");
	system("cls");
}
//3.删除联系人
void deletePerson(AddressBooks* abs,string name) {
	bool flag = 0;
	if (abs->size == 0) {
		cout << "当前通讯录为空,无法删除!" << endl;
	 }
	else {
		for (int i = 0; i < abs->size; i++) {
			if (abs->p[i].name == name) {
				flag = 1;
				cout << "检测到如下联系人,请选择删除联系人的序号:" << endl;
				cout << "当前联系人序号:" << i + 1 << "\t" << "姓名:" << abs->p[i].name << "\t" << "性别:" << abs->p[i].sex << "\t" << "年龄:" << abs->p[i].age << "\t" << " 电话:" << abs->p[i].Phone << "\t" << "住址:" << abs->p[i].Adress << endl;
			}
	    }
		if (!flag) {
			cout << "查无此人,删除失败!!" << endl;
		}
		else {
			int l;
			cin >> l;
			for (int i = l; i < abs->size; i++) {
				abs->p[i - 1].name = abs->p[i].name;
				abs->p[i - 1].sex = abs->p[i].sex;
				abs->p[i - 1].age = abs->p[i].age;
				abs->p[i - 1].Phone = abs->p[i].Phone;
				abs->p[i - 1].Adress = abs->p[i].Adress;
			}
			abs->size--;
			cout << "删除成功!!!" << endl;
		}
	}
	system("pause");
	system("cls");
}
//4 查找联系人(根据联系人姓名查询)
void  findPerson(AddressBooks* abs,string name) {
	bool flag = 0;
	if (abs->size == 0) {
		cout << "查无此人!" << endl;
	 }
	else {
		for (int i = 0; i < abs->size; i++) {
			if (abs->p[i].name == name) {
				flag = 1;
				cout << "o(* ̄︶ ̄*)o 查找成功!!!" << endl;
				cout << "当前联系人序号:" << i + 1 << "\t" << "姓名:" << abs->p[i].name << "\t" << "性别:" << abs->p[i].sex << "\t" << "年龄:" << abs->p[i].age << "\t" << " 电话:" << abs->p[i].Phone << "\t" << "住址:" << abs->p[i].Adress << endl;
				//break; 这里显示所有名字为
			}
		}
	}
	if (!flag) cout << "查无此人!!!" << endl;
	system("pause");
	system("cls");
}
//5.修改联系人
void rewritePerson(AddressBooks* abs,string name) {
	bool flag = 0;
	if (abs->size == 0) {
		cout << "当前通讯录为空" << endl;
	 }
	else {
		for (int i = 0; i < abs->size; i++) {
			if (abs->p[i].name == name) {
				flag = 1;
				cout << "检测到如下联系人,请选择要修改联系人的序号:" << endl;
				cout << "当前联系人序号:" << i + 1 << "\t" << "姓名:" << abs->p[i].name << "\t" << "性别:" << abs->p[i].sex << "\t" << "年龄:" << abs->p[i].age << "\t" << " 电话:" << abs->p[i].Phone << "\t" << "住址:" << abs->p[i].Adress << endl;
			}
		}
		if (!flag) {
			cout << "查无此人,修改失败!!" << endl;
		}
		else {
			int l;
			cin >> l;
			string ss;
			//修改姓名
			cout << "请输入要修改的联系人的姓名:";
			cin >> ss;
			abs->p[l - 1].name = ss;
			//修改性别
			while (1) {
				cout << "请输入要修改的联系人性别(男/女):" << endl;
				cin >> ss;
				if (ss == "男" || ss == "女") {
					abs->p[l - 1].sex = ss;
					break;
				}
				else {
					cout << "输入有误!请重新输入!" << endl;
				}
			}
			//修改年龄
			int n;
			cout << "请输入要修改的联系人的年龄:";
			cin >> n;
			abs->p[l - 1].age = n;

			//修改电话
			cout << "请输入要修改的联系人电话:";
			cin >> ss;
			abs->p[l - 1].Phone = ss;

			//修改地址
			cout << "请输入要修改联系人的住址:";
			cin >> ss;
			abs->p[l - 1].Adress = ss;
			cout << "修改成功!!!" << endl;
		}
	}
		system("pause");
		system("cls");
}
//6.清空联系人
void clearPerson(AddressBooks* abs) {
	abs->size = 0;
	cout << "通讯录已空!" << endl;
	system("pause");
	system("cls");
}

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;
	cout << "****请按照上述提示输入0~6进行操作!****" << endl;
}

int main() {
	AddressBooks abs;//创建通讯录结构体变量
	abs.size = 0;//初始化通讯录人数为0
	string s;
	//菜单的调用
	while (1) {
		showMenu();
		int select = 0;
		cin >> select;
		switch (select) {
		case 1://添加联系人
			addPerson(&abs);//利用地址传递可以修饰
			break;
		case 2://显示联系人
			showPerson(&abs);
			break;
		case 3://删除联系人
			cout << "请输入要删除联系人姓名:";
			cin >> s;
			deletePerson(&abs,s);
			break;
		case 4://查找联系人
			cout << "请输入要查找的联系人姓名:";
			cin >> s;
			findPerson(&abs,s);
			break;
		case 5://修改联系人
			cout << "请输入要修改的联系人的姓名:";
			cin >> s;
			rewritePerson(&abs, s);
			break;
		case 6://清空联系人
			clearPerson(&abs);
			break;
		case 0://清空通讯录
			cout << "欢迎下次使用!!!" << endl;
			system("pause");
			return 0;
			break;

		}
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++实现通讯录管理系统
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档