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();			
	}
}
相关推荐
郝学胜-神的一滴10 分钟前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
2601_9657422210 分钟前
全媒体运营与短视频代运营,两者有什么区别?
大数据·数据结构·人工智能·算法·ai·媒体
MC皮蛋侠客1 小时前
OPC UA 系列(一):标准全景与 Python 最小闭环——让第一条设备数据流动起来
开发语言·python·opcua
wordbaby1 小时前
混合检索:两全其美的艺术
人工智能·算法
彧azz1 小时前
数据结构:关于图的学习
c语言·数据结构·笔记·学习·算法
热心网友俣先生2 小时前
A题-药材的烘干问题-题意逐句翻译
算法·数学建模
SamChan902 小时前
PDF翻译后的格式完整性校验:用Python自动比对译文与原文档的表格与段落结构
开发语言·python·ai·pdf·机器翻译
2601_960356382 小时前
2026秋招运营分析师能力模型:SQL、指标体系、AIGC与业务分析
算法
hetao17338372 小时前
校内场-提高组 ZYZSC-S-Round 4
c++·算法
君顾12 小时前
外卖CPS系统开发实战指南:从架构设计到部署全流程解析
java·开发语言·外卖