初学者必学项目之C++实现简易通讯录

本期我们利用C++实现简易通讯录

一、基本功能

1、添加联系人
2、显示联系人
3、删除联系人
4、查找联系人
5、修改联系人
6、清空联系人
0、退出通讯录

二、成品展示

在这里插入图片描述

以上为通讯录各功能的详细展示,时长90s,想看的猿友可以看完。
话不多说,直接上代码。

三、注意事项:该代码能在vs2017完美运行

注意:为了代码的可观与其维护性,我们将代码分成三块书写

1、test.cpp用于测试函数功能
2、contact.h用于声明函数和结构体
3、contact.cpp用于函数实现

tip:大家一定要添加两个源文件以及一个头文件哦
如图:
在这里插入图片描述

四、上源码

1、contact.h

#pragma once
#include<iostream>
#include<string>
using namespace std;

#define MAX 1000  //用宏定义定义最大容量,利于后期的维护,可一改全改

//创建联系人结构体
struct Contacts
{
	string name;
	int sex;//1男2女
	int age;
	string phone;
	string address;
};

//创建通讯录结构体
struct AddressBook
{
	struct Contacts People[MAX];  //最多存MAX人
	int size;   //记录当前人数
};


//1、添加联系人
void Addpeople(struct AddressBook* list);

//2、显示联系人
void Showpeople(struct AddressBook* list);

//找一个人是否在,在的话返回下标
int IsExit(struct AddressBook* list, string name);

//3、删除联系人
void Deletepeople(struct AddressBook* list);

//4、查找联系人
void Findpeople(struct AddressBook* list);

//5、修改联系人
void Modifypeople(struct AddressBook* list);

//6、清空联系人
void Emptypeople(struct AddressBook* list);

2、test.cpp

#include"contact.h"

//基本框架
//菜单框架
//test.cpp用于测试
//contact.h用于声明
//contact.cpp用于函数实现
//1、添加联系人
//2、显示联系人
//3、删除联系人
//4、查找联系人
//5、修改联系人
//6、清空联系人
//0、退出通讯录

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

int main()
{
	struct AddressBook list;//创建一个通讯录
	list.size = 0;          //初始化通讯录为0;
         
	int select = 0;
	do 
	{
		menu();//显示菜单
		cin >> select;
		switch (select)
		{
		case 1://1、添加联系人
			Addpeople(&list);
			break;
		case 2://2、显示联系人
			Showpeople(&list);
			break;
		case 3://3、删除联系人
			Deletepeople(&list);
			break;
		case 4://4、查找联系人
			Findpeople(&list);
			break;
		case 5://5、修改联系人
			Modifypeople(&list);
			break;
		case 6://6、清空联系人
			Emptypeople(&list);
			break;
		case 0:
			cout << "按任意键退出,欢迎下次使用" << endl;
			break;
		default:
			cout << "输入错误,请重新输入" << endl;
			break;
		}
	} while (select);
	system("pause");
	return 0;
}

3、contact.cpp

#include"contact.h"

//1、添加联系人
void Addpeople(struct AddressBook* list)
{
	//先判断通讯录是否已满
	if (list->size == MAX)
	{
		cout << "通讯录已满,无法添加" << endl;
		return;
	}
	else
	{
		//添加联系人
		string name;
		int sex;//1男2女
		int age;
		string phone;
		string address;

		cout << "请输入姓名" << endl;
		cin >> name;
		list->People[list->size].name = name;

		cout << "请输入性别" << endl;
		cout << "1---男    2---女" << endl;
		while (1)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				list->People[list->size].sex = sex;
				break;
			}
			else
			{
				cout << "请按提示出入1或2" << endl;
			}
		}

		cout << "请输入年龄" << endl;
		cin >> age;
		list->People[list->size].age = age;

		cout << "请输入手机号" << endl;
		cin >> phone;
		list->People[list->size].phone = phone;

		cout << "请输入地址" << endl;
		cin >> address;
		list->People[list->size].address = address;
	}
	list->size++;
	cout << "添加成功" << endl;
	system("pause");
	system("cls");
}


//2、显示联系人
void Showpeople(struct AddressBook* list)
{
	//先判断联系人是否为空
	if (list->size == 0)
	{
		cout << "通讯录为空" << endl;
	}
	else
	{
		//显示联系人,遍历联系人数组即可
		for (int i = 0; i < list->size; i++)
		{
			cout << "姓名:" << list->People[i].name <<"    "
				 << "性别:" << (list->People[i].sex==1?"男":"女") << "    "
				 << "年龄:" << list->People[i].age << "    "
				 << "电话:" << list->People[i].phone << "    "
				 << "地址:" << list->People[i].address << endl;
		}
	}
	system("pause");
	system("cls");
}

//找一个人是否在,在的话返回下标
int IsExit(struct AddressBook* list, string name)
{
	for (int i = 0; i < list->size; i++)
	{
		if (list->People[i].name == name)
		{
			return i;
		}
	}
	return -1;
}

//3、删除联系人
void Deletepeople(struct AddressBook* list)
{
	string name;
	cout << "请输入要删除联系人的姓名:" << endl;
	cin >> name;
	int pos = IsExit(list, name);
	if (pos!=-1)
	{
		for (int i = pos; i < list->size - 1; i++)
		{
			list->People[i] = list->People[i + 1];
		}
		list->size--;
		cout << "删除成功!" << endl;
	}
	else
	{
		cout << "搜索结果为空!" << endl;
	}
	system("pause");
	system("cls");
}

//4、查找联系人
void Findpeople(struct AddressBook* list)
{
	string name;
	cout << "请输入要查找联系人的姓名:" << endl;
	cin >> name;
	int pos = IsExit(list, name);
	if (pos != -1)
	{
		//找到此人,显示其信息
		cout << "姓名:" << list->People[pos].name << "    "
			<< "性别:" << (list->People[pos].sex == 1 ? "男" : "女") << "    "
			<< "年龄:" << list->People[pos].age << "    "
			<< "电话:" << list->People[pos].phone << "    "
			<< "地址:" << list->People[pos].address << endl;
	}
	else
	{
		cout << "查找结果为空!" << endl;
	}
	system("pause");
	system("cls");
}

//5、修改联系人
void Modifypeople(struct AddressBook* list)
{
	string name1;
	cout << "请输入要修改联系人的姓名:" << endl;
	cin >> name1;
	int pos = IsExit(list, name1);
	if (pos != -1)
	{
		//找到此人,修改其信息
		string name;
		int sex;//1男2女
		int age;
		string phone;
		string address;

		cout << "请输入姓名" << endl;
		cin >> name;
		list->People[pos].name = name;

		cout << "请输入性别" << endl;
		cout << "1、男     2、女" << endl;
		while (1)
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				list->People[pos].sex = sex;
				break;
			}
			else
			{
				cout << "请按提示出入1或2" << endl;
			}
		}

		cout << "请输入年龄" << endl;
		cin >> age;
		list->People[pos].age = age;

		cout << "请输入手机号" << endl;
		cin >> phone;
		list->People[pos].phone = phone;

		cout << "请输入地址" << endl;
		cin >> address;
		list->People[pos].address = address;
		cout << "修改成功!" << endl;
	}
	else
	{
		cout << "搜索结果为空!" << endl;
	}
	system("pause");
	system("cls");
}

//6、清空联系人
void Emptypeople(struct AddressBook* list)
{
	cout << "确认清空吗?" << endl;
	int ret = 0;
	cout << "1、确认清空    2、考虑考虑" << endl;
	cin >> ret;
	if (list->size == 0)
	{
		cout << "通讯录已空,无需清空!" << endl;
	}
	else
	{
		if (ret == 1)
		{
			list->size = 0;
			cout << "通讯录已清空!" << endl;
		}
	}
	system("pause");
	system("cls");
}

本期通讯录代码分享就到这啦,欢迎各位看官留下你们宝贵的意见!
下期出QT实战项目——翻金币。

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小猿桥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值