      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