#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
namespace Records
{
constexpr int kDefaultStartingSalary = 30000;
class Employee
{
public:
Employee() :
mFirstName(""),
mLastName(""),
mEmployeeNumber(-1),
mSalary(kDefaultStartingSalary),
mHired(false)
{}
void promote(int raiseAmount = 1000)
{
setSalary(getSalary() + raiseAmount);
}
void demote(int demeritAmount = 1000)
{
setSalary(getSalary() - demeritAmount);
}
void hire()
{
mHired = true;
}
void fire()
{
mHired = false;
}
void display() const
{
std::cout << "Employee: " << getLastName() << ", " << getFirstName() << std::endl;
std::cout << "------------------------------" << std::endl;
std::cout << (mHired ? "Current Employee" : "Former Employee") << std::endl;
std::cout << "Employee Number: " << getEmployeeNumber() << std::endl;
std::cout << "Salary: $" << getSalary() << std::endl;
std::cout << std::endl;
}
void setFirstName(const std::string& firstName)
{
mFirstName = firstName;
}
const std::string& getFirstName() const
{
return mFirstName;
}
void setLastName(const std::string& lastName)
{
mLastName = lastName;
}
const std::string& getLastName() const
{
return mLastName;
}
void setEmployeeNumber(int employeeNumber)
{
mEmployeeNumber = employeeNumber;
}
int getEmployeeNumber() const
{
return mEmployeeNumber;
}
void setSalary(int newSalary)
{
mSalary = newSalary;
}
int getSalary() const
{
return mSalary;
}
bool getIsHired() const
{
return mHired;
}
private:
std::string mFirstName;
std::string mLastName;
int mEmployeeNumber;
int mSalary;
bool mHired;
};
constexpr int kFirstEmployeeNumber = 1000;
class Database
{
public:
Database() : mNextEmployeeNumber(kFirstEmployeeNumber)
{}
Employee& addEmployee(const std::string& firstName,
const std::string& lastName)
{
Employee theEmployee;
theEmployee.setFirstName(firstName);
theEmployee.setLastName(lastName);
theEmployee.setEmployeeNumber(++mNextEmployeeNumber);
theEmployee.hire();
mEmployees.push_back(theEmployee);
return mEmployees[mEmployees.size() - 1];
}
Employee& getEmployee(int employeeNumber)
{
for (auto& employee : mEmployees)
{
if (employee.getEmployeeNumber() == employeeNumber)
{
return employee;
}
}
throw std::runtime_error("No employee found.");
}
Employee& getEmployee(const std::string& firstName,
const std::string& lastName)
{
for (auto& employee : mEmployees)
{
if (employee.getFirstName() == firstName && employee.getLastName() == lastName)
{
return employee;
}
}
throw std::runtime_error("No employee found.");
}
void displayAll() const
{
for (const auto& employee : mEmployees)
{
employee.display();
}
}
void displayCurrent() const
{
for (const auto& employee : mEmployees)
{
if (employee.getIsHired())
{
employee.display();
}
}
}
void displayFormer() const
{
for (const auto& employee : mEmployees)
{
if (!employee.getIsHired())
{
employee.display();
}
}
}
private:
std::vector<Employee> mEmployees;
int mNextEmployeeNumber;
};
}
int main()
{
/*std::cout << "Testing the Employee class." << std::endl;
Records::Employee emp;
emp.setFirstName("John");
emp.setLastName("Doe");
emp.setEmployeeNumber(71);
emp.setSalary(50000);
emp.promote();
emp.promote(50);
emp.hire();
emp.display();*/
Records::Database myDB;
Records::Employee& emp1 = myDB.addEmployee("Greg", "Wallis");
emp1.fire();
Records::Employee& emp2 = myDB.addEmployee("Marc", "Gregoire");
emp2.setSalary(100000);
Records::Employee& emp3 = myDB.addEmployee("John", "Doe");
emp3.setSalary(10000);
emp3.promote();
std::cout << "all employees: " << std::endl << std::endl;
myDB.displayAll();
std::cout << std::endl << "current employees: " << std::endl << std::endl;
myDB.displayCurrent();
std::cout << std::endl << "former employees: " << std::endl << std::endl;
myDB.displayFormer();
system("pause");
return 0;
}
C++高级编程:第一个有用的C++程序(不带用户界面)
猜你喜欢
转载自blog.csdn.net/qq_41741165/article/details/84836497
今日推荐
周排行