问题:已知作者的基本信息有作者的编号、姓名,书籍信息有书号、书名、出版社,一位作者可以出版许多书,最后并打印出作者及其出版的书的信息,用集合类来展示上述关系。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
using namespace std;
class Book
{
public:
Book(const string &id, const string &name, const string &bpublic) :
b_id(id), b_name(name), b_public(bpublic){}
public:
string b_id;
string b_name;
string b_public;
};
class BookShow
{
public:
void operator()(const Book &b)
{
cout << b.b_id << "\t" << b.b_name << "\t" << b.b_public << endl;
}
};
class Writer
{
public:
Writer(const string &id, const string &name):w_id(id), w_name(name){};
void AddBook(const Book &book)
{
m_books.push_back(book);
}
friend ostream &operator<<(ostream &os, const Writer &w);
private:
string w_id;
string w_name;
vector<Book> m_books;
};
ostream &operator<<(ostream &os, const Writer &w)
{
os << w.w_id << w.w_name << endl;
for_each(w.m_books.begin(), w.m_books.end(), BookShow());
return os;
}
class WriterCollect
{
public:
void AddWriter(const Writer &writer)
{
vw.push_back(writer);
}
void showWriterInfo()
{
cout << "作者及其书籍的信息如下:" << endl;
copy(vw.begin(), vw.end(), ostream_iterator<Writer>(cout, "\n"));
}
private:
vector<Writer> vw;
};
int main()
{
Writer w1("1001", "zhangsan");
Book b1("b001", "aaa", "public");
Book b2("b002", "bbb", "public");
w1.AddBook(b1); w1.AddBook(b2);
Writer w2("1002", "lisi");
Book b3("b003", "ccc", "public");
w2.AddBook(b3);
WriterCollect wc;
wc.AddWriter(w1);
wc.AddWriter(w2);
wc.showWriterInfo();
return 0;
}