Figure 5: Static member functions of class CMortCalcDlg

// Define static class members

int CMortCalcDlg::month(1);
int CMortCalcDlg::year(1);

// not shown: vTitleLine(ostream &stream, void *data, int page_num)
// ...

void CMortCalcDlg::vPaymentLine(ostream &stream, void *data)
{
    LoanPayment *payment = (LoanPayment *)data;

    stream << "<TR align=right>" << endl;

    stream <<"<TD>" << "Year " << year << " Month " << month 
           << "</TD>" <<endl;
    stream << "<TD>" << payment->dPrincipal << "</TD>" << endl;
    stream << "<TD>" << payment->dInterest << "</TD>" << endl;
    stream << "<TD>" << payment->dAmountRemaining << "</TD>" 
           << endl;
    stream << "</TR>" << endl;
    month++;

    // Use static class members to keep track of the current month
    // and year.
    if (month == 12)
    {
        month = 1;
        year++;
    }

}

void CMortCalcDlg::vTotalLine(ostream &stream, void *data)
{
    CMortTotal *total = (CMortTotal *)data;

    stream << "<TR align=right>" << endl;
    stream <<"<TH>" << total->GetPaymentInfo() << "</TH>" <<endl;
    stream << "<TH>" << total->GetTotalPrincipal() << "</TH>" 
           << endl;
    stream << "<TH>" << total->GetTotalInterest() << "</TH>" 
           << endl;
    stream << "<TH>" << "" << "</TH>" << endl;
    stream << "</TR>" << endl;
}

void 
CMortCalcDlg::vFooterLine(ostream &stream, 
    void *data, int page_num)
{
    // There is no Footer for this report
}