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();			
	}
}
相关推荐
脆皮炸鸡7556 分钟前
STL中list的模拟实现
c++·windows·list
浮尘笔记10 分钟前
go语言简单快速的按顺序遍历kv结构(map)
开发语言·后端·golang
老大白菜13 分钟前
使用 Go 语言调用 SiliconFlow 语音生成 API 的脚本,用于将文本转换为 MP3 格式的语音文件。
开发语言·后端·golang
CodeJourney.16 分钟前
DeepSeek免费部署到WPS或Office
数据库·人工智能·算法·架构·wps
向哆哆32 分钟前
基于Java的分布式系统架构设计与实现
java·开发语言
Monkey_Jun37 分钟前
《Python百炼成仙》11-20章(不定时跟新)
开发语言·python·小说·修仙
蕴微轩41 分钟前
通过openresty和lua实现随机壁纸
开发语言·lua·openresty
qy发大财41 分钟前
分发饼干(力扣455)
算法·leetcode·职场和发展
付宇轩1 小时前
leetcode 3271.哈希表分割字符串
java·开发语言·算法
Zaralike1 小时前
SpringBoot项目练习
java·开发语言