My First C++ Program in Professional C++

//employee.h
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include<string>
#include<iosfwd>
namespace Records{
	int const kDefaultStartingSalary=30000;
	class Employee
	{
		public:
			Employee();

			void promote(int inRaiseAmount=1000);
			void demote(int inDemeritAmount=1000);
			void hire();//Hires or rehires the employee
			void fire();//Dismiss the employee
			void display();//Outputs employee info

			//Accessors and setters
			void setFirstName(std::string inFirstName);
			std::string getFirstName();
			void setLastName(std::string inLastName);
			std::string getLastName();
			void setEmployeeNumber(int inEmployeeNumber);
			int getEmployeeNumber();
			void setSalary(int inNewSalary);
			int getSalary();
			bool getIsHired();
		private:
			std::string mFirstName;
			std::string mLastName;
			int mEmployeeNumber;
			int mSalary;
			bool fHired;
	};
}
#endif

//employee.cpp
#include<iostream>
#include"employee.h"
#include<string>

using namespace std;

namespace Records{

	Employee::Employee():mFirstName(""),
						mLastName(""),
						mEmployeeNumber(-1),
						mSalary(kDefaultStartingSalary),
						fHired(false){}
	void Employee::promote(int inRaiseAmount)
	{
		setSalary(getSalary()+inRaiseAmount);
	}

	void Employee::demote(int inDemeritAmount)
	{
		setSalary(getSalary()-inDemeritAmount);
	}

	void Employee::hire()
	{
		fHired=true;
	}

	void Employee::fire()
	{
		fHired=false;
	}

	void Employee::display()
	{
		cout<<"Employee: "<<getLastName()<<","<<getFirstName()<<endl;
		cout<<"--------------------------------"<<endl;
		cout<<(fHired?"Current Employee":"Former Employee")<<endl;
		cout<<"Employee Number: "<<getEmployeeNumber()<<endl;
		cout<<"Salary: $"<<getSalary()<<endl;
		cout<<endl;
	}

	//Accessors and setters
	void Employee::setFirstName(string inFirstName)
	{
		mFirstName=inFirstName;
	}

	string Employee::getFirstName()
	{
		return mFirstName;
	}

	void Employee::setLastName(string inLastName)
	{
		mLastName=inLastName;
	}

	string Employee::getLastName()
	{
		return mLastName;
	}

	void Employee::setEmployeeNumber(int inEmployeeNumber)
	{
		mEmployeeNumber=inEmployeeNumber;
	}

	int Employee::getEmployeeNumber()
	{
		return mEmployeeNumber;
	}

	void Employee::setSalary(int inSalary)
	{
		mSalary=inSalary;
	}

	int Employee::getSalary()
	{
		return mSalary;
	}

	bool Employee::getIsHired()
	{
		return fHired;
	}

}


//database.h
#ifndef DATABASE
#define DATABASE

#include<iostream>
#include"employee.h"
#include<string>
namespace Records{
	int const kMaxEmployee=100;
	const int kFirstEmployeeNumber=1000;

	class Database
	{
		public:
			Database();
			~Database();

			Employee &addEmployee(std::string inFirstName,std::string inLastName);
			Employee &getEmployee(int inEmployeeNumber);
			Employee &getEmployee(std::string inFirstName,std::string inLastName);

			void displayAll();
			void displayCurrent();
			void displayFormer();

		protected:
			Employee mEmployees[kMaxEmployee];
			int mNextSlot;
			int mNextEmployeeNumber;
	};
}

#endif

//database.cpp
#include<iostream>
#include<stdexcept>

#include"database.h"

using namespace std;

namespace Records
{

	Database::Database()
	{
		mNextSlot=0;
		mNextEmployeeNumber=kFirstEmployeeNumber;
	}

	Database::~Database(){}

	Employee& Database::addEmployee(string inFirstName,string inLastName)
	{
		if(mNextSlot >= kMaxEmployee)
		{
			cerr<<"There is no more room to add the new employee";
			throw exception();
		}

		Employee &theEmployee=mEmployees[mNextSlot++];
		theEmployee.setFirstName(inFirstName);
		theEmployee.setLastName(inLastName);
		theEmployee.setEmployeeNumber(mNextEmployeeNumber++);
		theEmployee.hire();

		return theEmployee;
	}

	Employee &Database::getEmployee(int inEmployeeNumber)
	{
		for(int i=0;i<mNextSlot;++i)
		{
			if(mEmployees[i].getEmployeeNumber()==inEmployeeNumber)
				return mEmployees[i];
		}

		cerr<<"No employee with employee number"<<inEmployeeNumber<<endl;
		throw exception();
	}

	Employee &Database::getEmployee(string inFirstName,string inLastName)
	{
		for(int i=0;i<mNextSlot;++i)
		{
			if(mEmployees[i].getFirstName()==inFirstName &&
				mEmployees[i].getLastName()==inLastName)
			{
				return mEmployees[i];
			}
		}

		cerr<<"No match with name "<<inFirstName<<" "<<inLastName<<endl;
		throw exception();
	}

	void Database::displayAll()
	{
		for(int i=0;i<mNextSlot;++i)
		{
			mEmployees[i].display();
		}
	}

	void Database::displayCurrent()
	{
		for(int i=0;i<mNextSlot;++i)
		{
			if(mEmployees[i].getIsHired())
			{
				mEmployees[i].display();
			}
		}
	}

	void Database::displayFormer()
	{
		for(int i=0;i<mNextSlot;++i)
		{
			if(!mEmployees[i].getIsHired())
			{
				mEmployees[i].display();
			}
		}
	}

}

//userInterface.cpp
#include<iostream>
#include<stdexcept>

#include"database.h"

using namespace std;
using namespace Records;

int displayMenu();
void doHire(Database &inDB);
void doFire(Database &inDB);
void doPromote(Database &inDB);

int main(int argc,char **argv)
{
	Database employeeDB;
	bool done=false;

	while(!done)
	{
		int selection=displayMenu();

		switch(selection)
		{
			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;
			case 0:
				done =true;
				break;
			default:
				cerr<<"Unknow command."<<endl;
		}
	}
	return 0;
}

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 previous employees"<<endl;
	cout<<"0) Quit"<<endl;
	cout<<"---> "<<endl;

	cin>>selection;

	return selection;
}


void doHire(Database &inDB)
{
	string firstName;
	string lastName;

	cout<<"First name?";
	cin>>firstName;
	cout<<"Last name?";
	cin>>lastName;

	try
	{
		inDB.addEmployee(firstName,lastName);
	}
	catch(std::exception ex)
	{
		cerr<<"unable to add new employee!"<<endl;
	}
}

void doFire(Database &inDB)
{
	int employeeNumber;

	cout<<"Employee number? ";
	cin>>employeeNumber;

	try
	{
		Employee &emp=inDB.getEmployee(employeeNumber);
		emp.fire();
		cout<<"Employee "<<employeeNumber<<" has been teminated."<<endl;
	}
	catch(std::exception ex)
	{
		cerr<<"Unable to teminate employee!"<<endl;
	}
}

void doPromote(Database &inDB)
{
	int employeeNumber;
	int raiseAmount;

	cout<<"Employee number? ";
	cin>>employeeNumber;

	cout<<"How much of a raise? ";
	cin>>raiseAmount;

	try
	{
		Employee &emp=inDB.getEmployee(employeeNumber);
		emp.promote(raiseAmount);
	}
	catch(std::exception)
	{
		cerr<<"unable to promote employee!"<<endl;
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值