第8章习题:8-1、设计Date类,输出合法日期。#includeiostreamusingnamespacestd;//类定义//classDate{intyear;//存储日期的年份intmonth;//存储日期的月份intday;//存储日期的天数public:boolsetDate(constint,constint,constint);voiddisplay(void);char*getMonth(constint);};//类的实现////设置成员变量////mm:月份,dd:天数,yy:年份////返回值:如果成功赋值则返回true,否则返回false。//char*Date::getMonth(constintm){if(m==1)returnJanuary;elseif(m==2)returnFebruary;elseif(m==3)returnMarch;elseif(m==4)returnApril;elseif(m==5)returnMay;elseif(m==6)returnJune;elseif(m==7)returnJuly;elseif(m==8)returnAugust;elseif(m==9)returnSeptember;elseif(m==10)returnOctober;elseif(m==11)returnNovember;elsereturnDecember;}//设置成员变量////参数:mm:月份,dd:天数,yy:年份////返回值:如果成功赋值则返回true,否则返回false//boolDate::setDate(constintmm,constintdd,constintyy){if(mm1||mm12)returnfalse;if(dd1||dd31)returnfalse;year=yy;month=mm;day=dd;returntrue;}//在屏幕上显示日期//voidDate::display(void){//按照12-25-2004的形式输出日期coutmonth-day-year\n;//按照December25,2004的形式输出日期coutgetMonth(month)day,year\n;//按照25December2004的形式输出日期coutdaygetMonth(month)year\n;}voidmain(void){DatemyDate;//存储日期while(true){intyear;//临时存储年份intmonth;//临时存储月份intday;//临时存储天数cout请按YYYY格式输入年:;cinyear;cout请按mm格式输入月:;cinmonth;cout请按dd格式输入日:;cinday;if(myDate.setDate(month,day,year))break;elsecout日期输入错误,请重新输入!endl;}cout您输入的日期是:\n;myDate.display();}8-2、设计一个人口类Population,存储某年的人数、出生的人数和死亡人数,其函数成员能返回出生率和死亡率。#includeiostreamusingnamespacestd;//类定义//classPopulation{intpnum;//存储某年的人数intbirthnum;//存储出生的人数intdeadnum;//存储死亡的人数public:boolsetData(constint,constint,constint);floatbirthrate(){returnbirthnum/float(pnum);}floatdeadrate(){returndeadnum/float(pnum);}intgetpnum(){returnpnum;}intgetbirthnum(){returnbirthnum;}intgetdeadnum(){returndeadnum;}};//返回值:如果成功赋值则返回true,否则返回false//boolPopulation::setData(constintp,constintb,constintd){if(p0)returnfalse;if(bp||b0)returnfalse;if(dp||d0)returnfalse;pnum=p;birthnum=b;deadnum=d;returntrue;}voidmain(void){Populationpeople;intpn,bn,dn;while(true){cout请输入总人数:;cinpn;cout请输入出生的人数:;cinbn;cout请输入死亡的人数:;cindn;if(people.setData(pn,bn,dn))break;elsecout输入错误,请重新输入!endl;}cout出生率是:people.birthrate()endl;cout死亡率是:people.deadrate()endl;}8-3、设计一个类,具有一个float指针成员,且函数成员如下:1)构造函数具有一个整型参数count,为指针成员分配count个元素空间;2)析构函数释放该空间;3)向指针指向的空间存储数据的函数;4)返回空间中这些数的平均值的函数。#includeiostream#includecstdlibusingnamespacestd;classDataArray{intlength;//存储数组元素个数float*fltData;//存储数据public:DataArray(int=1);//构造函数~DataArray();//析构函数boolsetData(constfloat,constint);//设置成员变量floatgetAverage(void);//计算并返回平均值};//构造函数////count:希望创建的动态数组元素个数。//DataArray::DataArray(intcount){cout调用构造函数...endl;if(count0){length=count;fltData=newfloat[length];}else{length=1;fltData=newfloat[length];}for(inti=0;ilength;i++)fltData[i]=0;}//析构函数//DataArray::~DataArray(){cout调用析构函数...endl;delete[]fltData;length=0;}//设置成员变量////tData:要赋给指定变量的值。////subscript:指定要赋值的变量数组元素为第几个。////返回值:如果成功赋值则返回true,否则返回false。//boolDataArray::setData(constfloattData,constintsubscript){if(subscript+1length)returnfalse;elsefltData[subscript]=tData;returntrue;}//计算并返回平均值////返回值:返回数组所存储的数据的平均值。//floatDataArray::getAverage(void){floatsum=0;for(inti=0;ilength;i++)sum+=fltData[i];return(sum/length);}voidmain(void){//对DataArray类进行测试cout创建DataArray对象并初始化...endl;DataArrayObj(3);cout给DataArray对象赋值:endl;for(inti=0;i3;i++){//产生一个随机数floattemp=(float)rand()/10;Obj.setData(temp,i);cout第(i+1)个值为:tempendl;}cout平均值为:Obj.getAverage()endl;}8-4、设计一个薪水类Payroll,数据成员包括单位小时工资、已经工作的小时数、本周应付工资数。在主函数定义一个具有10个元素的对象数组(10个雇员),询问每个雇员本周已经工作的小时数,然后显示应得的工资。输入有效性检验:每周工作的小时数不能大于60,也不能为负数。#includeiostream#includeiomanipusingnamespacestd;//薪水类声明//classPayroll{floatpay_per_hour;//存储每小时的工钱floathours;//存储雇员工作时间floattotal_pay;//存储雇员应得工资public:Payroll(constfloat=0);//构造函数boolsetHours(constfloat);//设置工作时间floatgetPayment(void);//获取应得工资};//构造函数////hour:雇员工作时间。//Payroll::Payroll(constfloathour){pay_per_hour=5.0f;hours=0;total_pay=0;}//设置工作时间////hour:雇员工作时间////返回值:如果变量赋值成功则返回true,否则返回false。//boolPayroll::setHours(constfloathour){//判断工作时间是否介于0至60之间if(hour=0&&hour=60){hours=hour;total_pay=pay_per_hour*hours;returntrue;}elsereturnfalse;}//获取应得工资////返回值:返回计算得到的雇员应得的工资//floatPayroll::getPayment(void){returntotal_pay;}voidmain(void){Payrollemployee[10];//雇员对象数组//对10个雇员对象进行赋值for(inti=0;i10;i++){floattHour;cout请输入第setw(2)(i+1)个雇员本周已工作的时间(0至60之间):;while(true){cintHour;if(employee[i].setHours(tHour))break;elsecout您输入的数据不正确,请重新输入!endl;}}//显示每个雇员应得的工资for(i=0;i10;i++)cout第setw(2)(i+1)个雇员应得工资setiosflags(ios::fixed)setprecision(2)employee[i].getPayment()元endl;}8-5、设计InvoiceItem类和商品销售类,完成如下功能:1)询问客户购买的商品名称和数量;2)从InvoiceItem对象获得每个商品的成本价;3)在成本价基础上加上30%利润,得到每个商品的单价;4)将商品单价与购买数量相乘,得到商品小计;5)将商品小计乘以6%,得到商品的零售税;6)将商品小计加上零售税得到该商品的销售额;7)显示客户本次交易购买商品的小计、零售税和销售额。有效性检验:商品数量不能为负数。#includeiostreamusingnamespacestd;classInvoiceItem{char*desc;intunits;floatcost;public:InvoiceItem(char*d,intu=0,floatc=0){desc=newchar[strlen(d)+1];strcpy(desc,d);units=u;cost=c;}~InvoiceItem(){del