9-1、定义NumDays类,功能是将以小时(hour)为单位的工作时间转换为天数(day)。构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。同时,该类需重载+、-、++、――运算符。
9-2、设计TimeOff类,用于计算雇员生病、休假和不支付报酬的时间。
9-3、采用TimeOff类定义一个对象。要求用户输入某雇员已经工作的月数(months),然后采用TimeOff类对象计算并显示雇员因病休假和正常休假的最多天数。注意:雇员每月可以有12小时的带薪休假和8小时的生病休假。 //NumDays.h文件// class NumDays
{ float hour; //以小时存储工作时间 float day; //以天数存储工作时间 public:
NumDays(const float =0);//构造函数
void setHours(const float);//以小时为参数设置成员变量 void setDays(const float);//以天数为参数设置成员变量 float getHours(void);//返回按小时计的工作时间 float getDays(void);//返回按天数计的工作时间 float operator +(NumDays &);//重载+操作符 float operator -(NumDays &);//重载-操作符 NumDays operator ++(); //重载++前置操作符 NumDays operator ++(int);//重载++后置操作符 NumDays operator --();//重载--前置操作符 NumDays operator --(int);//重载--后置操作符 };
//构造函数//
//tHour:工作时间(小时)//
NumDays::NumDays(const float tHour) { hour=tHour; day=tHour/8; }
//以小时为参数设置成员变量// //tHour:工作时间(小时)。//
void NumDays::setHours(const float tHour) { hour=tHour; day=tHour/8; }
//以天数为参数设置成员变量// //tDay:工作时间(天数)//
void NumDays::setDays(const float tDay) { hour=tDay*8; day=tDay; }
//返回按小时计的工作时间//
//返回值:返回工作时间(小时)// float NumDays::getHours(void) { return hour; }
//返回按天数计的工作时间//
//返回值:返回工作时间(天数)// float NumDays::getDays(void) { return day; }
//重载+操作符//
//返回值:返回两者相加之和(小时)//
float NumDays::operator +(NumDays &NumDaysObj) { return(this->hour+NumDaysObj.hour); }
//重载-操作符//
//返回值:返回两者相减之差(小时)//
float NumDays::operator -(NumDays &NumDaysObj) { return(this->hour-NumDaysObj.hour); }
//重载++前置操作符//
NumDays NumDays::operator ++() { hour++; day=hour/8; return *this; }
//重载++后置操作符//
NumDays NumDays::operator ++(int) { NumDays temp=*this; hour++;
}
//重载--前置操作符//
NumDays NumDays::operator --() { hour--;
day=hour/8; return *this; }
//重载--后置操作符//
NumDays NumDays::operator --(int) { NumDays temp=*this; hour--;
day=hour/8; return temp; }
//TimeOff.h文件
#include\class TimeOff {
char name[20],id[10]; NumDays maxSickDays; NumDays sickTaken; NumDays maxVacation; NumDays vacTaken; NumDays maxUnpaid; NumDays unpaidTaken; public:
TimeOff(float,float,float,char *,char *); //设置允许的最多小时数及雇员姓名工号
void setSickTaken(NumDays &sickObj); void setVacTaken(NumDays &vacObj);
void setUnpaidTaken(NumDays &unpaidObj); char * getName() {return name;} char * getId() {return id;}
day=hour/8; return temp;
NumDays getMaxSickDays(){return maxSickDays;} NumDays getSickTaken() {return sickTaken;} NumDays getMaxVacation(){return maxVacation;} NumDays getVacTaken() {return vacTaken;} NumDays getMaxUnpaid() {return maxUnpaid;} NumDays getUnpaidTaken(){return unpaidTaken;} };
TimeOff::TimeOff(float maxSickh,float maxVach,float maxUnph,char *n,char *i) :maxSickDays(maxSickh),maxVacation(maxVach),maxUnpaid(maxUnph) {
strcpy(name,n); strcpy(id,i); }
void TimeOff::setSickTaken(NumDays &sickObj) { float sickhours;
sickhours=sickTaken+sickObj; sickTaken.setHours(sickhours); }
void TimeOff::setVacTaken(NumDays &vacObj) {
float vachours;
vachours=vacTaken+vacObj; vacTaken.setHours(vachours); }
void TimeOff::setUnpaidTaken(NumDays &unpaidObj) {
float unpaidhours;
unpaidhours=unpaidTaken+unpaidObj; unpaidTaken.setHours(unpaidhours); }
//main.cpp
#include
void main() {
TimeOff employee(8,12,24,\张三\ int months;
cout<<\请输入\已经工作的月数:\\n\ cin>>months;
for(int i=1;i<=months;i++) {
float hours;
NumDays offObj;
cout<<\请输入第\个月生病休假的累计小时数:\\n\ cin>>hours;
if(hours>employee.getMaxSickDays().getHours())
cout<<\该月超过标准的生病休假小时数\小时!\\n\ offObj.setHours(hours);
employee.setSickTaken(offObj);
cout<<\请输入第\个月带薪休假的累计小时数:\\n\ cin>>hours;
if(hours>employee.getMaxVacation().getHours())
cout<<\该月超过标准的带薪休假小时数\小时!\\n\ offObj.setHours(hours);
employee.setVacTaken(offObj);
cout<<\请输入第\个月不带薪休假的累计小时数:\\n\ cin>>hours;
if(hours>employee.getMaxUnpaid().getHours())
cout<<\该月超过标准的不带薪休假小时数\小时!\\n\ offObj.setHours(hours);
employee.setUnpaidTaken(offObj); }
cout< cout<<\因病休假的天数为:\\t\ cout<<\带薪休假的天数为:\\t\ cout<<\不带薪休假的天 : : : 数