address_book.h
#ifndef ADDRESS_BOOK_H
#define ADDRESS_BOOK_H
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
struct contact
{
int id; //序号
string name; //姓名
int relation; //关系(1为“亲人”,2为“朋友”,3为“同事”)
string number; //电话号码
contact() : id(0), name("\0"), relation(0), number("\0") {}
contact(int i, string na, int r, string nu) : id(i), name(na), relation(r), number(nu) {}
};
class address_book
{
public:
address_book();
address_book(vector<contact>& a); //利用数组建立通讯簿
address_book(string& file_name); //利用文件数据建立通讯簿
address_book(address_book& rhs); //复制构造函数
address_book operator=(address_book& rhs); //赋值运算符重载
~address_book() {}
string Find(string& name); //查询联系人
void addition(int i, string na, int r, string& nu); //添加联系人
void change(string& name, int r); //修改联系人关系
void change(string& name, string& nu); //修改联系人电话号码
void remove(string& name); //删除联系人
void print(int r); //按关系输出联系人
void print(); //输出全部联系人
private:
vector<contact> address;
};
address_book::address_book() {}
address_book::address_book(vector<contact>& a) : address(a.size())
{
for (int i = 0; i < a.size(); i++)
{
address[i].id = a[i].id;
address[i].relation = a[i].relation;
address[i].name = a[i].name;
address[i].number = a[i].number;
}
}
address_book::address_book(string& file_name)
{
int address_nums;
ifstream in_file(file_name);
in_file >> address_nums;
if (!address.empty())
{
address.clear();
}
for (int i = 0; i < address_nums; i++)
{
int id, relation;
string name, number;
in_file >> id >> name >> relation >> number;
contact m(id, name, relation, number);
address.push_back(m);
}
}
address_book::address_book(address_book& rhs)
{
if (rhs.address.empty())
{
address.clear();
}
else
{
address = rhs.address;
}
}
address_book address_book::operator=(address_book& rhs)
{
if (rhs.address.empty())
{
address.clear();
return *this;
}
else
{
address = rhs.address;
return *this;
}
}
string address_book::Find(string& name)
{
for (int i = 0; i < address.size(); i++)
{
if (address[i].name == name)
{
return address[i].number;
}
}
cout << "未找到" << endl;
return string(0);
}
void address_book::addition(int i, string na, int r, string& nu)
{
contact m(i, na, r, nu);
address.push_back(m);
}
void address_book::change(string& name, int r)
{
for (int i = 0; i < address.size(); i++)
{
if (address[i].name == name)
{
address[i].relation = r;
}
}
cout << "无匹配联系人" << endl;
}
void address_book::change(string& name, string& nu)
{
for (int i = 0; i < address.size(); i++)
{
if (address[i].name == name)
{
address[i].number = nu;
}
}
cout << "无匹配联系人" << endl;
}
void address_book::remove(string& name)
{
for (int i = 0; i < address.size(); i++)
{
if (address[i].name == name)
{
address.erase(address.begin() + i);
}
}
cout << "无匹配联系人" << endl;
}
void address_book::print(int r)
{
string relation;
switch (r)
{
case 1:
relation = "亲人";
break;
case 2:
relation = "朋友";
break;
case 3:
relation = "同事";
break;
default:
cout << "错误输入" << endl;
return;
}
for (int i = 0; i < address.size(); i++)
{
if (address[i].relation == r)
{
cout << address[i].id << " " << address[i].name << " " << relation << " " << address[i].number << endl;
}
}
}
void address_book::print()
{
for (int i = 0; i < address.size(); i++)
{
cout << address[i].id << " " << address[i].name << " " << address[i].relation << " " << address[i].number << endl;
}
}
#endif
address_book.cpp
#include "address_book.h"
int main()
{
int m;
address_book a_book;
int id, relation;
string name, number;
cout << "请建立通讯簿" << endl << endl;
cout << "建立空通讯簿请输入 0 " << endl;
cout << "由文件建立通讯簿请输 1 " << endl;
cout << "由输入数据建立通讯簿请输 2 " << endl;
cin >> m;
if (m==0){}
else if(m==1)
{
string filename;
cout << "请输入文件地址" << endl;
address_book a_b(filename);
a_book = a_b;
}
else if(m==2)
{
int count;
vector<contact> s;
cout << "请输入通讯簿数据个数" << endl;
cin >> count;
cout << "请依次输入序号,姓名,关系( 1为“亲人”,2为“朋友”,3为“同事” ),电话号码" << endl;
for (int i = 0;i < count;i++)
{
cout << "请输入第 " << i + 1 << " 个联系人" << endl;
cin >> id >> name >> relation >> number;
contact c(id, name, relation, number);
s.push_back(c);
}
address_book a_b(s);
a_book = a_b;
}
else
{
cout << "错误输入,程序中止" << endl;
return 0;
}
cout << "请选择所需要的通讯簿操作 (输入 t 退出)" << endl;
cout << "可选择操作:" << endl << endl;
cout << "添加新联系人信息请输 0 " << endl;
cout << "查询指定联系人号码请输 1 " << endl;
cout << "修改指定联系人信息请输 2 " << endl;
cout << "删除指定联系人信息请输 3" << endl;
cout << "输出同一关系联系人信息请输 4 " << endl;
cout << "输出所有联系人信息请输 5 " << endl;
while (cin >> m)
{
if (m == 0)
{
cout << "请依次输入新联系人序号,姓名,关系( 1为“亲人”,2为“朋友”,3为“同事” ),电话号码" << endl;
cin >> id >> name >> relation >> number;
a_book.addition(id, name, relation, number);
}
else if (m == 1)
{
cout << "请输入所需查询联系人姓名" << endl;
cin >> name;
cout << a_book.Find(name) << endl;
}
else if (m == 2)
{
int k;
cout << "请输入所需修改的数据项( 关系项请输 0 ,号码项请输 1 ,两项均修改请输 2)" << endl;
cin >> k;
if (k==0)
{
cout << "请输入指定联系人姓名和修改后号码" << endl;
cin >> name >> number;
a_book.change(name, number);
}
else if(k==1)
{
cout << "请输入指定联系人姓名和修改后关系" << endl;
cin >> name >> relation;
a_book.change(name, relation);
}
else if (k == 3)
{
cout << "请输入指定联系人姓名,电话号码和修改后关系" << endl;
cin >> name >>number>> relation;
a_book.change(name, number);
a_book.change(name, relation);
}
else
{
cout << "错误输入,请重试" << endl;
continue;
}
}
else if (m == 3)
{
cout << "请输入所需删除联系人姓名" << endl;
cin >> name;
a_book.remove(name);
}
else if (m == 4)
{
cout << "请输入所需输出关系项" << endl;
cin >> relation;
a_book.print(relation);
}
else if (m == 5)
{
a_book.print();
}
else
{
cout << "错误输入,请重试"<<endl;
continue;
}
cout << "请选择所需要的通讯簿操作 (输入 t 退出)" << endl;
}
return 0;
}