问题描述

1、创建一个Date类,能够表示一个日期,除了对日期进行输出、设置的一般成员方法以外,还需要一个方法,能够计算对象所保存日期与参数所给日期之间的差距,计算单位为“月”,同时重载Date类的赋值运算符。
2、创建一个Employee类,能够保存一个企业员工的基本信息,除了基本信息属性以外,还需要属性保存该员工的月工资、开始工作的日期和上一次发放工资的日期。
3、创建一个Salary类,可以用来表示一个工资金额,除基本成员变量和访问方法外,请为Salary类设计+、-运算符的重载函数;
4、上面类所有成员变量使用private修饰,为这些属性编写设置和读取方法,同时在设置方法中还需要对每个属性值的设置范围进行检查,如果超出取值范围,请为该值设置初始值并提示用户;请为两个类编写构造方法,初始化所有属性的值。
编写一个测试main方法,实例化两个员工对象,其月工资分别为1500和2500,工作日期都是2010年2月10日,请计算需要支付给这两个员工的工资。


问题分析

类图设计


源码


//class.h
#include <string>using namespace std;class Date{int year;int month;int day;public:Date();Date(int year,int month,int day);Date(const Date& x);~Date();Date& operator=(const Date& x);int getYear();void setYear(int year);int getMonth();void setMonth(int month);int getDay();void setDay(int day);void pritDate();float returnSub(Date s);
};class Salary{double money;public:Salary();Salary(double money);Salary(const Salary& x);~Salary();Salary& operator=(const Salary& x);Salary& operator+(const Salary& x);Salary& operator-(const Salary& x);double getMoney();void setMoney(double money);
};class Employee{static int counts;int no;string name;Salary sal;Date start;Date last;public:Employee();Employee(string name,Salary sal,Date start,Date last);Employee(const Employee& x);~Employee();Employee& operator=(const Employee& x);int getNo();string getName();void setName(string name);Salary getSalary();void setSalary(Salary sal);Date getStart();void setStart(Date start);Date getLast();void setLast(Date last);
};//class.cpp
#include "classDefine.h"
#include <iostream>using namespace std;Date::Date(){year = 2020;month = 5;day = 19;
}Date::Date(int year,int month,int day){this->year = year;this->month = month;this->day = day;
}Date::Date(const Date& x){year = x.year;month = x.month;day = x.day;
}Date::~Date(){};Date& Date::operator=(const Date& x){if(this == &x)return *this;year = x.year;month = x.month;day = x.day;return *this;
}int Date:: getYear(){return year;
}void Date::setYear(int year){if(year <= 0){cout << "data is illegal!" << endl;this->year = 2020;}elsethis->year = year;
}int Date::getMonth(){return month;
}void Date::setMonth(int month){if(month <= 0 || month >12){cout << "data is illegal!" << endl;this->month = 5;}elsethis->month = month;
}int Date::getDay(){return day;
}void Date::setDay(int day){if(day <= 0 || day > 31){cout << "data is illegal!" << endl;this->day = 19;}elsethis->day = day;
}void Date::pritDate(){cout << year << "-" << month << "-" << day << endl;
}float Date::returnSub(Date s){return ((year-s.year)*12 + ((month+day/30) - (s.month +s.day/30)));
}Salary::Salary(){money = 0.0;
}Salary::Salary(double money){this->money = money;
}Salary::Salary(const Salary& x){money = x.money;
}Salary::~Salary(){};Salary& Salary::operator=(const Salary& x){if(this == &x)return *this;money = x.money;return *this;
}Salary& Salary::operator+(const Salary& x){money += x.money;return *this;
}Salary& Salary::operator-(const Salary& x){money -= x.money;return *this;
}double Salary::getMoney(){return money;
}void Salary::setMoney(double money){if(money < 0){cout << "data is illegal!" << endl;this->money = 0.0;}elsethis->money = money;
}int Employee::counts = 0;Employee::Employee(){no = ++counts;name = "null";sal = 0.0;
}Employee::Employee(string name,Salary sal,Date start,Date last){no = ++counts;this->name = name;this->sal = sal;this->start = start;this->last = last;
}Employee::Employee(const Employee& x){no = ++counts;name = x.name;sal = x.sal;start = x.start;last = x.last;
}
Employee::~Employee(){};Employee& Employee::operator=(const Employee& x){if(this == &x)return *this;no = ++counts;name = x.name;sal = x.sal;start = x.start;last = x.last;return *this;
}int Employee::getNo(){return no;
}string Employee::getName(){return name;
}void Employee::setName(string name){this->name = name;
}Salary Employee:: getSalary(){return sal;
}void Employee::setSalary(Salary sal){double temp = sal.getMoney();if(temp < 0){cout << "date is illegal!" << endl;this->sal = 0.0;}elsethis->sal = sal;
}Date Employee:: getStart(){return start;
}void Employee::setStart(Date start){this->start = start;
}Date Employee::getLast(){return last;
}void Employee::setLast(Date last){this->last = last;
}//main.cpp
#include <iostream>
#include "classDefine.h"using namespace std;int main()
{Date d1;Date d2(2010,2,10);Employee e1("jack",1500,d1,d2);Employee e2("Tom",2500,d1,d2);Date t1 = e1.getStart();Date t2 = e2.getStart();Salary ss1 = e1.getSalary();Salary ss2 = e2.getSalary();double s1 = ss1.getMoney();double s2 = ss2.getMoney();float re1 = t1.returnSub(d2) * s1 ;float re2 = t2.returnSub(d2) * s2;cout << re1 << endl;cout << re2 << endl;return 0;
}

测试


更多相关内容请参见

我的博客

建立工资计算系统(1)——员工和工资相关推荐

  1. java开发绩效奖金_基于jsp的员工绩效工资-JavaEE实现员工绩效工资 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的员工绩效工资, 该项目可用各类java课程设计大作业中, 员工绩效工资的系统架构分为前后台两部分, 最终实现在线上 ...

  2. mysql 部门工资_哪些员工的工资大于所在部门的平均工资?用mysql查询语句

    1这是表的数据:createtableemp_hiloo(empnoint(8),enamevarchar(20),jobvarchar(15),salaryint(8),bonusint(8),hi ...

  3. 建立工资计算系统(2)

    问题描述 某企业为了提升自身管理效率,特别委托你为企业设计一个自动计算和发放员工工资的软件,具体设计内容包括: 1.随着该企业规模的扩展,企业的员工类型逐渐多样化,工资系统的管理方式要随之发生改变.企 ...

  4. C++ 建立工资计算系统(3)

    需求描述 1.企业增加了一种全新的工种,称为销售顾问,其工资按照顾问咨询次数和销售产品的数量共同计算,每咨询一次报酬300元,每销售一件产品提成50元,请在已有类的基础上设计该员工类: 2.由于员工类 ...

  5. c语言 建立一个企业人事工资系统并能够实现工资的信息管理系统,工资管理系统的设计与实现...

    摘要: 传统的工资管理系统通常采用固定的工资计算公式和固定的工资项目,难于适应市场经济条件下工资政策和工资制度的变化.现有的柔性工资结构的工资管理系统虽然可以自定义帐套,工资项目和计算公式等,但往往操 ...

  6. 为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资?

    有朋友问到: 为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资? 俺的建议: 先从这位被低薪压制的老员工角度说说: 决定你的薪资水平的根本原因是你的实力,而影响因素是你的性格.为什么说是你的性格 ...

  7. 又一个创业者自杀:心生郁结,被曝曾卖房给员工发工资

    创业之路到底有多艰难,竟让许多创业者最后走向轻生之路? 2019年12月底,在即将进入新年之际,网传山西好车容易创始人闫宝才于12月26日下午,在家中服用头孢等药物及白酒自杀,后被紧急送往附近医院抢救 ...

  8. 库克工资是普通员工201倍,纳德拉年薪三个亿,大公司贫富差距榜出炉

    郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一年一度的美国大公司"贫富差距"排行榜又来了. 根据美国证券交易委员会(SEC)2015年的规定,上市公司必须披露CE ...

  9. MySQL_项目7: 各部门工资最高的员工(难度:中等)

    项目七: 各部门工资最高的员工(难度:中等) 创建Employee 表,包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--- ...

最新文章

  1. python 流程控制语句
  2. 赚到!4个Python初学者必学的Numpy小技巧
  3. Codeforces 337D Book of Evil:树的直径【结论】
  4. LT8920无线通讯程序
  5. 读取外部配置文件_SpringBoot外部配置、优先级及配置详解
  6. python-删除非空目录-shutil模块-rmtree方法
  7. Notification小案例
  8. PostgreSQL在何处处理 sql查询之五十四
  9. char与byte差异
  10. sql聚合函数及分组的注意事项
  11. tensorflow2.0:tf.keras.callbacks.EarlyStopping
  12. 教你如何使用ip地址进行高精度定位
  13. winform图片操作
  14. html 分割字符串,详解js常用分割取字符串的方法
  15. BZOJ1059 [ZJOI2007]矩阵游戏
  16. 微信小程序—带qq表情的评论输入框
  17. Pascal小游戏 俄罗斯方块怀旧版
  18. 2 snippets vue 修改配置_VSCode 自定义Vue snippets, 快速生成Vue模板
  19. 云-移动手机端项目总结
  20. RabbitMQ学习之旅

热门文章

  1. 2021年5月22日 星期六 霾 高温
  2. 基于事件的视觉传感器及其应用综述
  3. KVM虚拟化产品-iVCS介绍
  4. uni showModeal
  5. 计算机二级Word第四套
  6. 机器学习画图工具(1)
  7. Ubuntu 16.04 LTS 安装libvips出现”Package vips was not found in the pkg-config search path”
  8. 基于MATLAB的手写体数字识别算法的实现
  9. html 里面的 role 属性是什么意思
  10. 演员选择框三级联动(原生javascript和jquery实现)