C++实现通讯录

简介:通讯录由一个拥有者以及通讯信息组成。

基本功能:增删改查

拥有者和通讯信息的基础结构相同,由struct构成
struct Person {
	int m_id;
	string m_name;
	string m_tele;//手机号码可以作为id,但是过于长(11位)
	//string m_addr;

	Person& operator = (const Person& r) {
		if (this == &r) return *this;
		m_id = r.m_id;
		m_name = r.m_name;
		m_tele = r.m_tele;
		return *this;
	}
};
Person:id+姓名+手机号。还可以添加需要的信息,例如:地址、性别
重载了一个=操作符

通讯录建立class AddressList
class AddressList {
private:
	Person owner;//通讯录拥有者
	vector<Person> information;//通讯录:好友的信息组成
public:
	AddressList();
	AddressList(const Person&, const vector<Person>& info = {});
	AddressList(const AddressList&);

	void Add(const Person&);//添加一个好友信息至通讯录
	void Delete();//通过姓名删除
		      //通过电话号码删除
	void Modify();//输入id 修改姓名and号码
	void Search(int);//1:id搜索
			 //2:姓名搜索
			 //3:号码指定搜索
	void Print()const;
	//查看通讯录所有信息:仅显示id和姓名,详细信息输入id查看	
};
cpp:
#include "AddressList.h"
#include <iostream>
using namespace std;

AddressList::AddressList() {}

AddressList::AddressList(const Person& r, const vector<Person>& info) {
	owner = r;
	for (const auto& i : info) {
		information.push_back(i);
	}
}

AddressList::AddressList(const AddressList& r) {
	owner = r.owner;
	for (const auto& i : r.information) {
		information.push_back(i);
	}
}

void AddressList::Add(const Person& p) {
	//添加一个好友信息至通讯录
	//首先确认不存在:id+tele
	for (const auto& it : information) {
		if (p.m_id == it.m_id) {
			cout << "Id已存在,添加失败!\n";
			return;
		}
		else if (p.m_tele == it.m_tele) {
			cout << "Telephone已存在,添加失败!\n";
			return;
		}
	}
	information.push_back(p);
}

void AddressList::Delete() {
	//通过姓名删除
	//略:通过电话号码删除
	string name;
	cout << "姓名:"; cin >> name;
	cout << "查找到信息如下:";
	auto it = information.begin();
	vector<int> info;//存储下标
	for (int i(0); it != information.end(); ++it,++i) {
		if (it->m_name == name) info.push_back(i);
	}
	if (info.size() == 0) {
		cout << "No such name.\n";
		return;
	}
	for (const auto& i : info) {
		cout << i << ":\t" << information[i].m_id << '\t' << information[i].m_name
			<< '\t' << information[i].m_tele << endl;
	}

	int ind;
	cout << "输入下标(第一列)删除信息:";
	cin>>ind;
	for (const auto& i : info) {
		if (i == ind) {
			information.erase(information.begin() + i);
			return;
		}
	}
	cout << "输入信息错误,删除失败!\n";
}

void AddressList::Modify() {
	//输入id:修改姓名and号码
	long id;
	cout << "Id:"; cin >> id;
	cout << "查找到信息如下:\n";
	auto it = information.begin();
	for (; it != information.end(); ++it) {
		if (it->m_id == id) {
			cout << it->m_id << '\t' << it->m_name << '\t' << it->m_tele << endl;
			break;
		}
	}
	if (it == information.end()) {
		cout << "No such Id.\n";
		return;
	}
	cout << "修改信息:\n";
			string name;
			string tele;
			cout << "新的姓名:"; cin >> name;
			cout << "新的号码:"; cin >> tele;
			char c;
			cout << "确认?<y/n> ";
			cin >> c;
			if (c == 'y' || c == 'Y') {
				it->m_name = name;
				it->m_tele = tele;
				return;
			}
			cout << "取消修改!\n";
			return;
}
void AddressList::Search(int cho) {
	//1:id搜索
	//2:姓名搜索
	//3:号码指定搜索
	int id;
	string name;
	string tele;
	auto it = information.begin();
	switch (cho) {
		case 1:
			cout << "Id:";
			cin >> id;
			cout << "搜索到的信息如下:\n";
			for (it = information.begin(); it != information.end(); ++it) {
				if (it->m_id == id) {
					cout << it->m_id << '\t' << it->m_name << '\t' << it->m_tele << endl;
					break;
				}
			}
			break;
		case 2:
			cout << "Name:";
			cin >> name;
			cout << "搜索到的信息如下:\n";
			for (it = information.begin(); it != information.end(); ++it) {
				if (it->m_name == name)
					cout << it->m_id << '\t' << it->m_name << '\t' << it->m_tele << endl;
			}
			break;
		case 3:
			cout << "Tele:";
			cin >> tele;
			cout << "搜索到的信息如下:\n";
			for (it = information.begin(); it != information.end(); ++it) {
				if (it->m_tele == tele) {
					cout << it->m_id << '\t' << it->m_name << '\t' << it->m_tele << endl;
					break;
				}
			}
			break;
		default:break;
	}
}
void AddressList::Print()const {
	cout << "ID:" << owner.m_id << endl;
	cout << "Owner:" << owner.m_name << endl
		<< "Tele:" << owner.m_tele << endl;
	int n(information.size());
	cout << "通讯录人数:" << n << endl;
	for (int i(0); i < n; ++i) {
		cout << information[i].m_id << '\t' << information[i].m_name << endl;
	}
	while (1) {
		cout << endl
			<< "详细信息,请输入id:-1终止查看\n";
		int id;
		cin >> id;
		if (id == -1) break;
		bool b(false);
		for (const auto& it : information) {
			if (id == it.m_id) {
				b = true;
				cout << it.m_id << '\t' << it.m_name << '\t' << it.m_tele << endl;
				break;
			}
		}
		if (!b) {
			cout << "No such Id.!" << endl;
		}
	}
}

main.cpp:测试

#include"AddressList.h"
#include <iostream>
using namespace std;

int main() {
	Person p;
	{
		p.m_id = 0;
		p.m_name = "一号";
		p.m_tele = "11012011900";//任意
	}
	int I = 1;//m_id编号
	AddressList addr(p);
	{
		cout << "0.退出\n"
			<< "1.添加\n"
			<< "2.删除\n"
			<< "3.修改\n"
			<< "4.搜索\n"
			<< "5.查看\n"
			<< endl
			<< endl;
	}
	int cho2;
	bool b(true);
	while (b) {
		int cho;
		int id;
		string name;
		string tele;

		cout << "Your choose:";
		cin >> cho;
		switch (cho) {
		case 0:
			b = false;
			break;
		case 1:
			cout << "添加信息:\n"
				<< "姓名:";
			cin >> name;
			cout << "号码:";
			cin >> tele;
			id = I++;
			{
				p.m_id = id;
				p.m_name = name;
				p.m_tele = tele;
			}
			addr.Add(p);
			break;
		case 2:
			cout << "删除信息:\n";
			addr.Delete();
			break;
		case 3:
			cout << "修改信息:\n";
			addr.Modify();
			break;
		case 4:
			cout << "搜索信息\n"
				<< "1.Id\n"
				<< "2.Name\n"
				<< "3.Telephone\n";
			cout << "Chosse:";
			cin >> cho2;
			addr.Search(cho2);
			break;
		case 5:
			cout << "查看信息\n";
			addr.Print();
			break;
		default:break;
		}
		cout << endl;
	}
	return 0;
}


截图:


猜你喜欢

转载自blog.csdn.net/qq_31854267/article/details/80414242
今日推荐