1  #include <iostream>
  2  #include <iomanip>
  3  
  4  using namespace std;
  5  
  6  #include "simpleinvoiceprinter.h"
  7  
  8  SimpleInvoicePrinter::SimpleInvoicePrinter(vector<int> widths)
  9  {
 10     column_widths = widths;
 11     column = 0;
 12  }
 13  
 14  void SimpleInvoicePrinter::print_header(string s)
 15  {
 16     int width = 0;
 17     for (int i = 0; i < column_widths.size(); i++)
 18        width = width + column_widths[i];
 19     for (int j = 0; j < (width - s.length()) / 2; j++)
 20        cout << " ";
 21     cout << s << "\n\n";
 22  }
 23  
 24  void SimpleInvoicePrinter::next_column()
 25  {
 26     column++;
 27     if (column == column_widths.size())
 28     {
 29        cout << "\n";
 30        column = 0;
 31     }
 32  }
 33  
 34  void SimpleInvoicePrinter::print_string(string value, bool pad_right)
 35  {
 36     if (pad_right) cout << value;
 37     // print padding
 38     for (int i = value.length(); i < column_widths[column]; i++)
 39        cout << " ";
 40     if (!pad_right) cout << value;
 41     next_column();
 42  }
 43  
 44  void SimpleInvoicePrinter::print_number(double value, int precision)
 45  {
 46     cout << setw(column_widths[column])
 47        << fixed << setprecision(precision)
 48        << value;
 49     next_column();
 50  }
 51  
 52  void SimpleInvoicePrinter::print_footer(string s, double total)
 53  {
 54     cout << "\n" << s << " " << total << "\n";
 55  }
 56  
 57