#include #include #include #include using namespace std; class person { public: string fname, lname; double salary; string dept; person(string f, string l, double s, string d); void print(ostream & out) const; bool match(string s); }; person::person(string f, string l, double s, string d) { fname = f; lname = l; salary = s; dept = d; }; void person::print(ostream & out) const { out << fname << " " << lname << " of " << dept << ", $" << setprecision(2) << salary << "."; } bool person::match(string s) { return fname == s || lname == s; } ostream & operator<<(ostream & out, const person & p) { p.print(out); return out; } class database { protected: vector employees; public: void add_employee(person * p); void list_employees(); person * find_employee(string name); }; void database::add_employee(person * p) { employees.push_back(p); } void database::list_employees() { for (person * p: employees) p->print(cout); } person * database::find_employee(string name) { for (person * p: employees) if (p->match(name)) return p; return NULL; } int main() { database db; db.add_employee(new person("Mary", "Marlowe", 123456.00, "Management")); db.add_employee(new person("Dennis", "Dog", 54321.50, "Design")); db.add_employee(new person("Eric", "Earwig", 34567.75, "Engineering")); db.add_employee(new person("Tammy", "Teapot", 23500.00, "Tetrahedrons")); db.add_employee(new person("Francine", "Frogge", 168742.50, "Management")); db.add_employee(new person("Geoffrey", "Georaffe", 21005.99, "Geography")); db.add_employee(new person("Lolita", "Lambchop", 25300.00, "Lighting")); db.add_employee(new person("Indiana", "Impediment", 1500.00, "Intern")); db.add_employee(new person("Germania", "Gastropod", 47299.99, "Geography")); db.add_employee(new person("Olivia", "Ointment", 25000000.00, "Owner")); cout << fixed; // opposite and default is scientific string line, cmd; while (true) { cout << "\n> "; getline(cin, line); if (cin.fail()) { cout << "\n"; break; } istringstream in(line); in >> cmd; if (in.fail()) continue; else if (cmd == "list") db.list_employees(); else if (cmd == "find") { string name; in >> name; if (in.fail()) { cout << "name missing\n"; continue; } person * p = db.find_employee(name); if (p == NULL) cout << "not found\n"; else cout << * p << "\n"; } else if (cmd == "raise") { string name; double percent; in >> name >> percent; if (in.fail()) { cout << "name or percentage or both missing\n"; continue; } person * p = db.find_employee(name); if (p == NULL) cout << "not found\n"; else p->salary *= 1 + percent / 100.0; } else if (cmd == "exit") break; else cout << "command '" << cmd << "' not recognised\n"; } }