/****************************************************************************************** ex7.cpp Working our way to dynamic criteria Putting state criteria in an array of its own ******************************************************************************************/ #include <iostream> #include <string> #include <fstream> using namespace std; // class definitions class person { public: string first; string last; string state; }; class state { public: string full; string token; int count; float percent; }; // prototypes void readFile(string filename, person [], const int maximum, int& size); int TallyByState(string token, person [], const int size); // MAIN! void main() { const int StateCount=4; state Tally[StateCount]; Tally[0].full = "New York", Tally[0].token = "NY"; Tally[1].full = "New Jersey", Tally[1].token = "NJ"; Tally[2].full = "Connecticut", Tally[2].token = "CT"; Tally[3].full = "Virginia", Tally[3].token = "VA"; int count=0; const int maxsize=100; person census[maxsize]; string filename; cout << "Enter the file to read: "; cin >> filename; readFile(filename, census, maxsize, count); int i; for (i = 0; i < StateCount; i++) { Tally[i].count = TallyByState(Tally[i].token, census, count); Tally[i].percent = (float)Tally[i].count/count; } for (i = 0; i < StateCount; i++) cout << Tally[i].count << " records from "<< Tally[i].full << endl; cout << endl; for (i = 0; i < StateCount; i++) cout << Tally[i].percent*100 << "% of records from "<< Tally[i].full << endl; } //------- return the count of records where state matches the token ------ int TallyByState(string token, person list[], const int size) { int count = 0; for (int i = 0; i < size; i++) if (list[i].state == token) count++; return count; } //------- fill each person in the list from a file ------ void readFile(string filename, person people[], const int maximum, int& size) { ifstream fin(filename.c_str()); for (int i=0; i < maximum; i++) { if(fin >> people[i].first >> people[i].last >> people[i].state) size++; } }