建立工资计算系统(1)——员工和工资

问题描述

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


问题分析

类图设计
DateSalaryEmployee


源码


//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;
    }
    else
        this->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;
    }
    else
        this->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;
    }
    else
        this->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;
    }
    else
        this->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;
    }
    else
        this->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;
}


测试

result


更多相关内容请参见

我的博客

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工资发放系统 某公司按月给其雇员发放工资,该公司有4种雇员:  固定薪金的雇员:不管工作多长时间,总拿固定月薪;(但如果请假,要扣除相应的薪金,请假次数×每次扣除金额30)  小时工:以小时计算,加上加班费;(每月基本工作时间为160小时,其余为加班时间)  销售员:按销售收入提成计算;(每月基本销售额度为30000元,低于此额度,在月薪里扣除少于30000部分的千分之二)  带薪销售员:底薪加上销售收入提成(要求同上,若有请假,也要扣除相应的薪金) 如果雇员的生日所在的月份在本月,那么公司无条件补贴200元。 设计一工资发放系统,完成各种工资计算,并实现以下功能: 1) 初始化系统 创建存储该公司职工信息的存储系统Employee.dat),并进行职工信息的输入,注意:公司的职工编号由系统按顺序自动生成,并且员工号一旦分配好就不可以再修改! 第一次运行系统,根据系统提示从键盘输入员工的相应信息进行初始化操作,并保存至Employee.dat文件中。以后每次运行程序,初始化时都从文件Employee.dat中读取员工数据即可。 2) 职工信息输出 要求可以输出: 某职工当月的薪水发放信息 分输出全体职工当月的薪水发放信息 某一名职工当月的薪水发放信息 格式如下: ******************************** 固定薪金职员********************************* 编号 姓名 出生年月 工种 奖励薪金 固定月薪 请假天数 应扣 实发工资 是否领取 **********************************计时职员*********************************** 编号 姓名 出生年月 工种 奖励薪金 工作时长 时薪 加班时长 实发工资 是否领取 **********************************普通销售员*********************************** 编号 姓名 出生年月 工种 奖励薪金 销售额 提成比例 应扣 实发工资 是否领取*********************************带薪销售员************************************ 编号 姓名出生年月工种奖励薪金固定月薪销售额提成比例请假天数应扣实发工资是否领取 3) 添加职工 通过键盘输入相应的职工信息,添加职工,并保存至Employee.dat文件中。 4) 删除职工 通过输入职工的工号,首先输出要删除的职工相应的信息,经确认后删除,要考虑职工不存在的情况。删除后保存至Employee.dat文件中。 5) 修改信息 要求可以修改: 除编号外的所有职工信息,包括工种以及由修改工种带来的各项操作 修改某一工种的信息,如销售人员的提成比例,统一提高0.05; 输出修改前的职工信息,经确认后修改后,输出修改后的职工信息,考虑职工不存在的情况,修改后保存至Employee.dat文件中。 6) 工资发放 通过输入职工号方式,输出查询到的职工相应的信息,经确认发放工资,将员工是否领取工资信息设置为是(即真),考虑所要查询的职工编号不存在和已经发放过工资的情况。 7) 保存退出 通过确认,保存修改的信息至文件Employee.dat中,退出系统,结束运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值