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

using namespace std;

class soldier
    {
    public:
        string first;
        string last;
        string rank;
    };

//prototypes
void readFrom(string file, soldier list[], const int size, int& count);
void showList(soldier [], const int size);
int countPrivates(soldier [], const int size);

void main()
    {
    const int MaxSize = 100;
    soldier volunteers[MaxSize];
    int count = 0;

    string filename;
    cout << "What is the file to read: ";
    cin >> filename;

    readFrom(filename, volunteers, MaxSize, count);

    showList(volunteers, count);
    cout << "-----------------------" << endl
         << "Privates: " << countPrivates(volunteers, count) << endl;

    return;
    }

int countPrivates(soldier list[], const int size)
    {
    int sum = 0;
    for (int i = 0; i < size; i++)
        if (list[i].rank == "Private")
            sum++;
    return sum;
    }

void showList(soldier list[], const int count)
    {
    for (int i = 0; i < count; i++)
        {
        cout << list[i].last << ", " << list[i].first
             << " (" << list[i].rank << ")" << endl;
        }

    return;
    }

void readFrom(string file, soldier list[], const int size, int& count)
    {
    ifstream fin(file.c_str());

    for (int i = 0; i < size; i++)
        {
        if(fin >> list[i].rank >> list[i].first >> list[i].last)
            count++;
        else
            break;
        }

    return;
    }