#include "stdstuff.h" #include "IntSet.h" int getSetNumber (char prompt[]) { int number; for (;;) { cout << prompt << " (0, 1, or 2): "; cin >> number; if (!cin.fail() && (number >= 0) && (number <= 2)) return number; cout << "Invalid data ignored.\n"; cin.clear(); cin.ignore (INT_MAX, '\n'); } } int getSetNumberAndValue (int &value) { int number; for (;;) { cout << "Enter set number (0, 1, or 2) and value: "; cin >> number >> value; if (!cin.fail() && (number >= 0) && (number <= 2)) return number; cout << "Invalid data ignored.\n"; cin.clear(); cin.ignore (INT_MAX, '\n'); } } void realMain () { IntSet sets[3]; int i, j, k, option, value; bool valueObtained; cout << "This test program uses three sets. They are numbered 0, 1, and 2.\n"; for (;;) { // display current set contents cout << endl; for (i = 0; i < 3; i++) { if (sets[i].size() == 0) { cout << "Set " << i << " is empty.\n"; } else { cout << "Set " << i << ":"; for (valueObtained = sets[i].startWalk(value); valueObtained; valueObtained = sets[i].continueWalk(value)) { cout << " " << value; } cout << endl; } } // get user option cout << endl << "1 - add value to a set 2 - remove value from a set\n" << "3 - see if value is in a set 4 - remove all values\n" << "5 - compare two sets 6 - compute set intersection\n" << "7 - compute set union 9 - quit\n" << "Enter Option: "; cin >> option; switch (option) { case 1: i = getSetNumberAndValue(value); try { sets[i].add(value); } catch (overflow_error &e) { cout << "Operation failed (" << e.what() << ").\n"; } break; case 2: i = getSetNumberAndValue(value); if (sets[i].remove(value)) { cout << "Value successfully removed from set.\n"; } else { cout << "Operation failed (value was not in set).\n"; } break; case 3: i = getSetNumberAndValue(value); if (sets[i].valueExists(value)) { cout << "That value is in the set.\n"; } else { cout << "That value is not in the set.\n"; } break; case 4: i = getSetNumber("Enter set number"); sets[i].removeAll(); break; case 5: i = getSetNumber("Enter first set number"); j = getSetNumber("Enter second set number"); if (sets[i] == sets[j]) { cout << "Those two sets are equal.\n"; } else { cout << "Those two sets are not equal.\n"; } break; case 6: i = getSetNumber("Enter first set number"); j = getSetNumber("Enter second set number"); k = getSetNumber("Enter destination set number"); sets[k] = sets[i].intersect(sets[j]); break; case 7: i = getSetNumber("Enter first set number"); j = getSetNumber("Enter second set number"); k = getSetNumber("Enter destination set number"); try { sets[k] = sets[i].unionWith(sets[j]); } catch (overflow_error &e) { cout << "Operation failed (" << e.what() << ").\n"; } break; case 9: return; default: cout << "\nInvalid option ignored.\n"; break; } } } int main () { try { realMain (); } catch (exception &e) { // catches all uncaught exceptions cout << "\nException <" << e.what() << "> occurred.\n"; } pause (); return 0; }