C++通讯录管理系统

网上看到的一个小需求,练练手

代码如下:

cpp 复制代码
#include <iostream>
#include <string>
#include <vector>


//联系人
class Contact {
public:
	Contact(const std::string& _name = "无名氏", const std::string& _phoneNumber = "00000") :name(_name), phoneNumber(_phoneNumber) {};		//初始化构造函数

	bool operator == (const Contact contact) {
		return (this->name == contact.name);
	}

	//展示信息
	void showMsg() {
		std::cout << "姓名:" << name << std::endl;
		std::cout << "电话:" << phoneNumber << '\n' << std::endl;
	}

	//修改电话
	void changeNumber(const std::string& _number) {
		phoneNumber = _number;	
	}



private:
	std::string name;			//姓名
	std::string phoneNumber;	//联系方式
};



//第四个模块 通讯录
class Contacts {
public:

	//第五个模块 在通讯录的末尾写入信息并返回选单
	void Add(const std::string& name, const std::string& phoneNumber);

	

	//函数重载
	bool Find(const std::string& name);
	

	//第七个模块 修改某人信息,未找到则提示通讯录中无此人信息,并返回选单
	void Alter(const std::string & name);

	//第八个模块 删除某人信息,如果未找到要删除的人,则提示通讯录中没有此人信息,并返回选单
	void Delete(const std::string & name);

	//第九个模块 显示通讯录中的所有记录
	void List();

private:
	//第六个模块 查询某人信息,找到了,返回某人信息,未找到,则提示通讯录中没有此人信息并返回选单。
	auto inFind(const std::string& name);

private:
	std::vector <Contact> ContactVec;
};


Contacts contacts;

//清空缓冲区
void clearInputBuffer() {
	int c;
	while ((c = getchar()) != '\n' && c != EOF) {}  // 清空直到遇到换行符或文件结束
}



//第二个模块 - Menu
void menu()
{
	std::cout << "Creat please enter 1" << std::endl;
	std::cout << "Add please enter 2" << std::endl;
	std::cout << "Find please enter 3" << std::endl;
	std::cout << "Alter please enter 4" << std::endl;
	std::cout << "Delete please enter 5" << std::endl;
	std::cout << "List please enter 6" << std::endl;
	std::cout << "Quit please enter 0" << std::endl;


	char ch;			//等待用户输入
		
	ch = getchar();		//获取用户输入
	clearInputBuffer();

	std::string inName;		//名字
	std::string inNumber;	//号码

	switch (ch) {
	case '0':		//退出系统
		std::cout << "通讯系统已退出" << std::endl;
		return;
	case '1':		//创建通讯录
		std::cout << "通讯录已创建" << std::endl; 
		clearInputBuffer();
		menu();
		break;
	case '2':		//添加联系人
		std::cout << "请输入名字" << std::endl;
		std::getline(std::cin, inName);
		std::cout << "请输入号码" << std::endl;
		std::getline(std::cin, inNumber);
		contacts.Add(inName,inNumber);
		clearInputBuffer();
		menu();
		break;
	case '3':		//查找联系人
		std::cout << "请输入名字" << std::endl;
		std::getline(std::cin, inName);
		contacts.Find(inName);
		clearInputBuffer();
		menu();
		break;
	case '4':
		std::cout << "请输入要修改联系人姓名" << std::endl;
		std::getline(std::cin, inName);
		contacts.Alter(inName);
		clearInputBuffer();
		menu();
		break;
	case '5':
		std::cout << "请输入要删除的联系人姓名" << std::endl;
		std::getline(std::cin, inName);
		contacts.Delete(inName);
		clearInputBuffer();
		menu();
		break;
	case '6':
		contacts.List();
		clearInputBuffer();
		menu();
		break;
	}

}

//第一个模块
int main()
{
	menu();

	return 0;
}


auto Contacts::inFind(const std::string& name)
{
	Contact contact(name);
	auto it = ContactVec.begin();
	while (it != ContactVec.end())
	{
		if (*it == contact)
		{
			return it;
		}
		it++;
	}

}

void Contacts::Add(const std::string& name, const std::string& phoneNumber)
{
	auto it = inFind(name);

	if (it != ContactVec.end())
	{
		std::cout << "联系人已存在" << std::endl;
	}
	else {
		Contact contact(name, phoneNumber);		//初始化联系人
		ContactVec.push_back(contact);			//插入联系人
		std::cout << "联系人添加成功" << std::endl;
	}
}



bool Contacts::Find(const std::string& name)
{
	auto it = inFind(name);
	if (it != ContactVec.end())
	{
		it->showMsg();
		return true;
	}
	else {
		std::cout << "通讯录中无此人信息" << std::endl;
		return false;
	}
}

void Contacts::Alter(const std::string& name)
{
	auto it = inFind(name);
	if (it != ContactVec.end() )
	{
		std::string inputPhoneNumber;
		std::cout << "请输入要修改的电话号码" << std::endl;
		std::getline(std::cin, inputPhoneNumber);
		it->changeNumber(inputPhoneNumber);
		std::cout << "修改后的信息如下" << std::endl;
		it->showMsg();
	}
	else {
		std::cout << "通讯录中没有此人信息" << std::endl;
	}
}

void Contacts::Delete(const std::string& name)
{
	auto it = inFind(name);

	if (it != ContactVec.end())
	{
		ContactVec.erase(it);					
	}
	else {
		std::cout << "通讯录中没有此人信息" << std::endl;
	}
}

void Contacts::List()
{
	for (auto it : ContactVec)
	{
		it.showMsg();			
	}
}
相关推荐
鹿角片ljp13 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技13 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
剩下了什么13 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.14 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解14 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
吴声子夜歌14 小时前
Java面试题——基础(一)
java·开发语言
别动我齐刘海15 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
小庞在加油15 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars15 小时前
C#中的delegate委托
开发语言·c#
傻啦嘿哟15 小时前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫