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();			
	}
}
相关推荐
珂朵莉MM3 分钟前
2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家
开发语言·人工智能·算法·leetcode·职场和发展·深度优先·图论
菥菥爱嘻嘻7 分钟前
JS手写代码篇---手写 new 操作符
开发语言·javascript·原型模式
小智学长 | 嵌入式12 分钟前
进阶-数据结构部分:2、常用排序算法
java·数据结构·算法
少了一只鹅12 分钟前
字符函数和字符串函数
c语言·算法
*才华有限公司*17 分钟前
gRPC开发指南:Visual Studio 2022 + Vcpkg + Windows全流程配置
c++·ide·visual studio
_龙小鱼_33 分钟前
Kotlin变量与数据类型详解
开发语言·微信·kotlin
保利九里37 分钟前
java中的包机制
java·开发语言
SRC_BLUE_171 小时前
VulnHub | Breach - 1
开发语言·php·dreamweaver
橘子海全栈攻城狮1 小时前
【源码+文档+调试讲解】党员之家服务系统小程序1
java·开发语言·spring boot·后端·小程序·旅游
Stringzhua1 小时前
JavaScript【7】BOM模型
开发语言·前端·javascript