/*******************************************************************************************
08rev1.cpp
    read data into an array of objects, then display them and some calculations
*******************************************************************************************/
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

#include "safearray.h"

//prototypes
void readFrom(string file, safearray& list);
float subTotal(const safearray& list);
void showList(const safearray& list);

void main() {
    safearray goods;

    string filename;
    cout << "Enter the filename to read: ";
    cin >> filename;
    readFrom(filename, goods);

    float subtotal, total;
    subtotal = subTotal(goods);

    float taxRate, tax;
    cout << "Enter the tax rate (as a percent): ";
    cin >> taxRate;
    tax = subtotal * taxRate/100.0;
    total = subtotal + tax;

    showList(goods);
    cout << "----------------------------------" << endl
         << "Subtotal: $" << subtotal << endl
         << "Tax (" << taxRate << "%): $" << tax << endl
         << "Total: $" << total << endl;
}

float subTotal(const safearray& list) {
    float sum = 0.;

    for (int i = 0; i < list.count(); i++)
        sum += list[i].price;

    return sum;
}

void showList(const safearray& list) {
    for (int i = 0; i < list.count(); i++) {
        cout << list[i].desc << " (" << list[i].part << ") $" << list[i].price << endl;
    }
}

void readFrom(string file, safearray& list) {
    ifstream fin(file.c_str());

    for (int i = 0; i < list.maxsize; i++) {
        int P;
        if(fin >> P) {
            list[i].part = P;
            fin >> list[i].desc >> list[i].price;
        }
        else
            break;
    }
}