#include <iostream>
#include <stdexcept>
#include <exception>
//#include <format>
#include <string>
#include "Database.h"
#include "Employee.h"
using namespace std;
using namespace Records;
int displayMenu();
void doHire(Database& db);
void doFire(Database & db);
void doPromote(Database& db);
int main()
{
Database employeeDB;
bool done{ false };
while (!done) {
int selection{ displayMenu() };
switch (selection) {
case 0:
done = true;
break;
case 1:
doHire(employeeDB);
break;
case 2:
doFire(employeeDB);
break;
case 3:
doPromote(employeeDB);
break;
case 4:
employeeDB.displayAll();
break;
case 5:
employeeDB.displayCurrent();
break;
case 6:
employeeDB.displayFormer();
break;
default:
cerr << "Unknown command." << endl;
break;
}
}
}
int displayMenu()
{
int selection;
cout << endl;
cout << "Employee Database" << endl;
cout << "-----------------" << endl;
cout << "1) Hire a new employee" << endl;
cout << "2) Fire an employee" << endl;
cout << "3) Promote an employee" << endl;
cout << "4) List all employees" << endl;
cout << "5) List all current employees" << endl;
cout << "6) List all former employees" << endl;
cout << "0) Quit" << endl;
cout << endl;
cout << "---> ";
cin >> selection;
return selection;
}
// Database.cpp
#include <iostream>
#include <stdexcept>
#include "Database.h"
using namespace std;
namespace Records
{
Employee& Database::addEmployee(const string &firstName,
const string &lastName)
{
Employee theEmployee{firstName, lastName};
theEmployee.setEmployeeNumber(m_nextEmployeeNumber++);
theEmployee.hire();
m_employees.push_back(theEmployee);
return m_employees.back();
}
Employee& Database::getEmployee(int employeeNumber)
{
for (auto &employee : m_employees)
{
if (employee.getEmployeeNumber() == employeeNumber)
{
return employee;
}
}
throw logic_error{"No employee found."};
}
Employee& Database::getEmployee(const std::string& firstName, const std::string& lastName)
{
for (auto& employee : m_employees)
{
if (employee.getFirstName() == firstName && employee.getLastName() == lastName)
{
return employee;
}
}
throw logic_error{ "No employee found." };
}
void Database::displayAll() const
{
for (const auto& employee : m_employees) { employee.display(); }
}
void Database::displayCurrent() const
{
for (const auto& employee : m_employees) {
if (employee.isHired()) { employee.display(); }
}
}
void Database::displayFormer() const
{
for (const auto& employee : m_employees) {
if (!employee.isHired()) { employee.display(); }
}
}
}
#include "Employee.h"
#include <iostream>
using namespace std;
namespace Records
{
Employee::Employee(const std::string &firstName, const std::string &lastName)
: m_firstName(firstName), m_lastName(lastName), m_employeeNumber(-1),
m_salary(DefaultStartingSalary), m_hired(false)
{
}
void Employee::promote(int raiseAmount)
{
setSalary(getSalary() + raiseAmount);
}
void Employee::demote(int demeritAmount)
{
setSalary(getSalary() - demeritAmount);
}
void Employee::hire()
{
m_hired = true;
}
void Employee::fire()
{
m_hired = false;
}
void Employee::display() const
{
cout << "Employee: " << getLastName() << ", " << getFirstName() << endl;
cout << "-------------------------" << endl;
cout << (isHired() ? "Current Employee" : "Former Employee") << endl;
cout << "Employee Number: " << getEmployeeNumber() << endl;
cout << "Salary: $" << getSalary() << endl;
cout << endl;
}
void Employee::setFirstName(const std::string &firstName)
{
m_firstName = firstName;
}
const std::string &Employee::getFirstName() const
{
return m_firstName;
}
void Employee::setLastName(const std::string &lastName)
{
m_lastName = lastName;
}
const std::string &Employee::getLastName() const
{
return m_lastName;
}
void Employee::setEmployeeNumber(int employeeNumber)
{
m_employeeNumber = employeeNumber;
}
int Employee::getEmployeeNumber() const
{
return m_employeeNumber;
}
void Employee::setSalary(int newSalary)
{
m_salary = newSalary;
}
int Employee::getSalary() const
{
return m_salary;
}
bool Employee::isHired() const
{
return m_hired;
}
} // namespace Records
// Database.h
#pragma once
#include <iostream>
#include "Employee.h"
#include "vector"
#include "string"
namespace Records
{
const int FirstEmployeeNumber{1'000};
class Database
{
public:
Employee &addEmployee(const std::string &firstName,
const std::string &lastName);
Employee &getEmployee(int employeeNumber);
Employee &getEmployee(const std::string &firstName,
const std::string &lastName);
void displayAll() const;
void displayCurrent() const;
void displayFormer() const;
private:
std::vector<Employee> m_employees;
int m_nextEmployeeNumber{FirstEmployeeNumber};
};
}
#pragma once
#include <string>
namespace Records
{
const int DefaultStartingSalary{30'000};
const int DefaultRaiseAndDemeritAmount{1'000};
class Employee
{
public:
Employee(const std::string &firstName, const std::string &lastName);
void promote(int raiseAmount = DefaultRaiseAndDemeritAmount);
void demote(int demeritAmount = DefaultRaiseAndDemeritAmount);
void hire();
void fire();
void display() const;
void setFirstName(const std::string &firstName);
const std::string &getFirstName() const;
void setLastName(const std::string &lastName);
const std::string &getLastName() const;
void setEmployeeNumber(int employeeNumber);
int getEmployeeNumber() const;
void setSalary(int newSalary);
int getSalary() const;
bool isHired() const;
private:
std::string m_firstName;
std::string m_lastName;
int m_employeeNumber;
int m_salary;
bool m_hired;
};
} // namespace Records