/* * Manager.cc Exercise P-E-M-C, CRTP, Step 3. */ #include "CRN.h" #include "Date.h" #include "Manager.h" #include #include #include #include #include #include namespace IDA_Person { using namespace std; using namespace IDA_Date; Manager::Manager(const string& name, const CRN& crn, const Date& e_date, int e_number, double salary, int dept) : Person_Cloneable{ name, crn, e_date, e_number, salary, dept } {} string Manager::str() const { return Person::str() + " (Manager) " + get_employment_date().str() + ' ' + std::to_string(get_department()); } void Manager::add_department_member(Employee* ep) const { // Set employee's department to same as manager's ep->set_department(get_department()); // require friendship // Add employee to department members dept_members_.insert(make_pair(ep->get_employment_number(), ep)); } void Manager::remove_department_member(int e_number) const { auto it = dept_members_.find(e_number); if (it != dept_members_.end()) { it->second->set_department(0); // require friendship dept_members_.erase(it); } } void Manager::print_department_list(ostream& os) const { cout << "Avdelning " << get_department() << "\n" << setfill('-') << setw(60) << '-' << setfill(' ') << "\n"; for (const auto& e : dept_members_) { os << e.second->str() << " [" << e.second->get_salary() << "]\n"; } } void Manager::raise_salary(const double percent) const { for (const auto& e : dept_members_) { double salary = e.second->get_salary(); salary += (percent * salary / 100.0); e.second->set_salary(salary); // require friendship } } } // namespace IDA_Person