My First C++ Program in Professional C++

来源:互联网 发布:华为软件市场 编辑:程序博客网 时间:2024/05/08 07:58
//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 employeevoid fire();//Dismiss the employeevoid display();//Outputs employee info//Accessors and settersvoid 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 settersvoid 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