实验三  通讯簿管理

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值