C++ 实现PhoneBook类

问题描述

在这里插入图片描述

类图设计

在这里插入图片描述

源代码

//class
#include <vector>
#include <string>
using namespace std;

typedef struct phBook{
    string no;
    string name;
    string number;
}pb;

class PhoneBook{
    vector<pb> arr;
    int size_pb;
public:
    PhoneBook();
    PhoneBook(int size_pb);
    PhoneBook(PhoneBook& x);
    PhoneBook& operator=(PhoneBook& x);
    pb& operator[](string name);
    ~PhoneBook();
    vector<pb>& getArr();
    void add(pb x);
    void serch1(string name);
    void serch2(string number);
    void serch3(string no);
    void del(string no);
    void inCtrl(int n);
    void inFile(string filename);
    void outCtrl();
    void outFile(string filename);
};
//class.cpp
#include "class.h"
#include <iostream>
#include <cstring>
#include <fstream>

PhoneBook::PhoneBook(){
    vector<pb> temp;
    arr = temp;
    size_pb = 0;
}

PhoneBook::PhoneBook(int size_pb){
    vector<pb> temp(size_pb);
    arr = temp;
    this->size_pb = size_pb;
}

vector<pb>& PhoneBook::getArr(){
    return arr;
}

PhoneBook::PhoneBook(PhoneBook& x){
    size_pb = x.size_pb;
    arr = x.getArr();
}

PhoneBook& PhoneBook::operator=(PhoneBook& x){
    if(this == &x)return *this;
    size_pb = x.size_pb;
    arr = x.getArr();
    return *this;
}

pb& PhoneBook::operator[](string name){
    serch2(name);
}

PhoneBook::~PhoneBook(){}

void PhoneBook::add(pb x){
    int num = arr.size();
    if(num == size_pb){
        cout << "this array is full!" << endl;
        return;
    }
    arr.push_back(x);
}

void PhoneBook::serch1(string no){
    int num = arr.size();
    for(int i=0;i<num;i++){
        pb temp = arr[i];
        int n = no.compare(temp.no);
        if(n == 0){
        cout<< "no: " << temp.no << endl;
        cout<< "name: " << temp.name << endl;
        cout<< "number: " << temp.number << endl;
        break;
    }
    }

}

void PhoneBook::serch2(string name){
    int num = arr.size();
    for(int i=0;i<num;i++){
        pb temp = arr[i];
        int n = name.compare(temp.name);
        if(n == 0){
            cout<< "no: " << temp.no << endl;
            cout<< "name: " << temp.name << endl;
            cout<< "number: " << temp.number << endl;
        }
    }
}

void PhoneBook::serch3(string number){
    int num = arr.size();
    for(int i=0;i<num;i++){
        pb temp = arr[i];
        int n = number.compare(temp.number);
        if(n == 0){
            cout<< "no: " << temp.no << endl;
            cout<< "name: " << temp.name << endl;
            cout<< "number: " << temp.number << endl;
        }
    }
}

void PhoneBook::del(string no){
    int num = arr.size();
    for(int i=0;i<num;i++){
        pb temp = arr[i];
        int n = no.compare(temp.no);
        if(n ==0){
            pb t = arr[num-1];
            arr[num-1] = arr[i];
            arr[i] = t;
            arr.pop_back();
            break;
        }
    }
}

void PhoneBook::inCtrl(int n){
    cout << "please input (no name number)" << endl;
    if(size_pb< n){
        cout << "this array is small!" << endl;
        return;
    }
    for(int i=0;i<n;i++){
        pb temp = arr[i];
        cin >> temp.no >> temp.name >> temp.number;
        arr[i] = temp;
    }
    for(int i =0;i<size_pb-n;i++)
        arr.pop_back();
}

void PhoneBook::inFile(string filename){
    ifstream in(filename.c_str());
    string s;
    int m = 1;
    cout << "no\tname\tnumber\n";
    while(in >> s ){
        if(m%3)cout << s << "\t";
        else cout << s <<endl;
        m++;
    }
    in.close();
}

void PhoneBook::outCtrl(){
    int num = arr.size();
    cout << "no\tname\tnumber\n";
    for(int i=0;i<num;i++){
        pb temp = arr[i];
        cout << temp.no<<"\t"<<temp.name << "\t" << temp.number << endl;
    }
}

void PhoneBook::outFile(string filename){
    ofstream out(filename.c_str());
    int num = arr.size();
    for(int i=0;i<num;i++){
        pb temp = arr[i];
        out << temp.no << "\n";
        out << temp.name << "\n";
        out << temp.number << "\n";
    }
    out.close();
}
//main.cpp
#include <iostream>
#include "class.h"

using namespace std;

int main()
{
    PhoneBook b(5);
    string s1 = "out.txt";
    b.inCtrl(2);
    b.outFile(s1);
    return 0;
}

部分测试结果

在这里插入图片描述


更多相关内容请参见

我的博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值