C++高级编程:第一个有用的C++程序(不带用户界面)

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_41741165/article/details/84836497