标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。