ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

练习——定义一个员工类

2020-04-21 13:05:31  阅读:235  来源: 互联网

标签:const 定义 int 练习 员工 Employee year Date using


demo.cpp

#include <iostream>
#include <iomanip>
#include <vector>
using std::cout;
using std::endl;
using std::left;
using std::setw;
using std::vector;
#include "employee.h"
#include "employee.cpp"
#include "date.cpp"
int main()
{
  try
  {
    Date wkHd1(2011, 9, 2);
    Worker wk1("w0001", wkHd1, 2000);
    wk1.setWage(30);
    wk1.setWkHour(8);

    Date wkHd2(2014, 4, 20);
    Worker wk2("w0002", wkHd2, 3000);
    wk2.setWage(35);
    wk2.setWkHour(8);

    Date salHd1(2003, 7, 2);
    Salesman sal1("s0001", salHd1, 2000);
    sal1.setWage(50);
    sal1.setWkHour(8);
    sal1.setSales(5000);

    Date salHd2(2004, 3, 21);
    Salesman sal2("s0002", salHd2, 2500);
    sal2.setWage(50);
    sal2.setWkHour(8);
    sal2.setSales(8000);

    Date mgHd1(2001, 5, 10);
    Manager mg1("m0001", mgHd1, 5000);

    Date salMgHd(2001, 5, 15);
    SalesManager salMg("s0002", salMgHd, 5000);
    salMg.setWage(50);
    salMg.setWkHour(8);
    salMg.setSales(8000);

    vector<Employee> emps = {wk1, wk2, sal1, sal2, mg1, salMg};
    SalSystem sm(emps);
    sm.print();
  }
  catch (const char *exp)
  {
    cout << exp << endl;
  }
  system("Pause");
  return 0;
}

date.h

#pragma once
#include <string>
using std::string;
class Date
{
public:
    Date(int, int, int);
    Date();
    void addDay(int);
    string toString(char);
    bool setYear(int year_);
    int getYear() const;
    bool setMon(int month_);
    int getMon() const;
    bool setDay(int day_);
    int getDay() const;

private:
    int year;
    int month;
    int day;
    static const int maxDay[2][13];
};

date.cpp

#include <iostream>
#include <ctime>
#include <cassert>
#include "date.h"
using std::cout;
using std::endl;
const int Date::maxDay[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
Date::Date(int year_, int month_ = 1, int day_ = 1)
{
    if (year_ >= 1900 && year_ <= 9999)
        if (month_ >= 1 && month_ <= 12)
            if (day_ >= 1 && day_ <= maxDay[(year_ % 4 == 0 && year_ % 100 != 0) || year_ % 400 == 0][month_])
            {
                year = year_;
                month = month_;
                day = day_;
            }
            else
                throw "day is invalid";
        else
            throw "month is invalid!";
    else
        throw "year is invalid!";
}

Date::Date()
{
    time_t now;
    time(&now);
    struct tm *t_now;
    t_now = localtime(&now);
    year = t_now->tm_year + 1900;
    month = t_now->tm_mon + 1;
    day = t_now->tm_mday;
}
void Date::addDay(int n)
{
    day += n;
    if (day > maxDay[(year % 4 == 0 && year % 100 != 0) || year % 400 == 0][month])
    {
        day %= maxDay[(year % 4 == 0 && year % 100 != 0) || year % 400 == 0][month];
        month++;
        if (month > 12)
        {
            year++;
            month %= 12;
        }
    }
}
string Date::toString(char spor)
{
    return std::to_string(year) + spor + std::to_string(month) + spor + std::to_string(day);
}
bool Date::setYear(int year_)
{
    if (year_ >= 1900 && year_ <= 2120)
    {
        year = year_;
        return true;
    }
    else
        return false;
}
int Date::getYear() const
{
    return year;
}
bool Date::setMon(int month_)
{
    if (month_ >= 1 && month_ <= 12)
    {
        month = month_;
        return true;
    }
    else
        return false;
}
int Date::getMon() const
{
    return month;
}
bool Date::setDay(int day_)
{
    if (day_ >= 1 && day_ <= maxDay[(year % 4 == 0 && year % 100 != 0) || year % 400 == 0][month])
    {
        day = day_;
        return true;
    }
    else
        return false;
}
int Date::getDay() const
{
    return day;
}

employee.h

#pragma once
#include "date.h"
#include <vector>
using std::vector;
class Employee
{
public:
    Employee(string, Date, int);
    string getEno() const;
    virtual int getSalary() const;

protected:
    int getWkYear() const;
    string eno;
    Date hiredate;
    int bsSalary;
};
class Worker : virtual public Employee
{
public:
    using Employee::Employee;
    void setWage(int);
    void setWkHour(int);
    int getSalary() const;

protected:
    float wkHour = 0;
    int wage = 0;
};
class Salesman : virtual public Employee
{
public:
    using Employee::Employee;
    void setWage(int);
    void setWkHour(int);
    void setSales(int);
    int getSalary() const;

protected:
    float wkHour = 0;
    int wage = 0;
    int sales = 0;
};
class Manager : virtual public Employee
{
public:
    using Employee::Employee;
    int getSalary() const;

protected:
    static int bsWage;
};
class SalesManager : public Salesman, public Manager
{
public:
    SalesManager(string _eno, Date hdate, int bsSal);
    int getSalary() const;
};
class SalSystem
{
private:
    vector<Employee> emp;

public:
    SalSystem(vector<Employee>);
    void print();
};

employee.cpp

#include "employee.h"
#include <iostream>
#include <iomanip>
using std::cout;
using std::endl;
using std::left;
using std::setw;
Employee::Employee(string eno_, Date hdate, int bsSal) : hiredate(hdate)
{
    eno = eno_;
    bsSalary = bsSal;
}
int Employee::getWkYear() const
{
    Date today;
    return today.getYear() - hiredate.getYear();
}

int Employee::getSalary() const
{
    return 0;
}

string Employee::getEno() const
{
    return eno;
}

void Worker::setWage(int _wage)
{
    wage = _wage;
}

void Worker::setWkHour(int _hour)
{
    wkHour = _hour;
}

int Worker::getSalary() const
{
    int wkYear = getWkYear();
    return (bsSalary + wkYear * 200) + wkHour * wage;
}

void Salesman::setWage(int _wage)
{
    wage = _wage;
}

void Salesman::setWkHour(int _hour)
{
    wkHour = _hour;
}

void Salesman::setSales(int _sales)
{
    sales = _sales;
}

int Salesman::getSalary() const
{
    int wkYear = getWkYear();
    return (bsSalary + wkYear * 200) + wkHour * wage + sales;
}

int Manager::bsWage = 5000;

int Manager::getSalary() const
{
    int wkYear = getWkYear();
    return bsWage + (bsSalary + wkYear * 200);
}

SalesManager::SalesManager(string _eno, Date hdate, int bsSal)
    : Employee(_eno, hdate, bsSal), Salesman(_eno, hdate, bsSal), Manager(_eno, hdate, bsSal)
{
}
int SalesManager::getSalary() const
{
    int wkYear = Manager::getWkYear();
    return bsWage + (bsSalary + wkYear * 200) + wkHour * wage + sales;
}
SalSystem::SalSystem(vector<Employee> emp_) : emp(emp_)
{
}
void SalSystem::print()
{
    cout << left << setw(15) << "ENO" << setw(15) << "SALARY" << endl;
    cout << "----------------------" << endl;
    for (auto e : emp)
        cout << left << setw(15) << e.getEno() << setw(15) << e.getSalary() << endl;
}

 

 

标签:const,定义,int,练习,员工,Employee,year,Date,using
来源: https://www.cnblogs.com/stu-jyj3621/p/12743823.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有