面向对象A面向对象习题南航皮德常资料Word格式文档下载.docx
《面向对象A面向对象习题南航皮德常资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《面向对象A面向对象习题南航皮德常资料Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。
elseif(m==9)
September"
elseif(m==10)
October"
elseif(m==11)
November"
else
December"
}
//参数:
mm:
月份,dd:
天数,yy:
如果成功赋值则返回true,否则返回false//
boolDate:
setDate(constintmm,constintdd,constintyy)
{if(mm<
1||mm>
12)returnfalse;
if(dd<
1||dd>
31)returnfalse;
year=yy;
month=mm;
day=dd;
returntrue;
//在屏幕上显示日期//
voidDate:
display(void)
{//按照"
12-25-2004"
的形式输出日期
cout<
<
month<
"
-"
day<
year<
\n"
//按照"
December25,2004"
getMonth(month)<
"
"
25December2004"
voidmain(void)
{DatemyDate;
//存储日期
while(true)
{intyear;
//临时存储年份
intmonth;
//临时存储月份
intday;
//临时存储天数
cout<
请按YYYY格式输入年:
cin>
>
year;
请按mm格式输入月:
month;
请按dd格式输入日:
day;
if(myDate.setDate(month,day,year))
break;
else
cout<
日期输入错误,请重新输入!
endl;
}
您输入的日期是:
myDate.display();
8-2、设计一个人口类Population,存储某年的人数、出生的人数和死亡人数,其函数成员能返回出生率和死亡率。
classPopulation
{intpnum;
//存储某年的人数
intbirthnum;
//存储出生的人数
intdeadnum;
//存储死亡的人数
boolsetData(constint,constint,constint);
floatbirthrate(){returnbirthnum/float(pnum);
floatdeadrate(){returndeadnum/float(pnum);
intgetpnum(){returnpnum;
intgetbirthnum(){returnbirthnum;
intgetdeadnum(){returndeadnum;
boolPopulation:
setData(constintp,constintb,constintd)
{if(p<
0)returnfalse;
if(b>
p||b<
if(d>
p||d<
pnum=p;
birthnum=b;
deadnum=d;
{Populationpeople;
intpn,bn,dn;
{
请输入总人数:
pn;
请输入出生的人数:
bn;
请输入死亡的人数:
dn;
if(people.setData(pn,bn,dn))
输入错误,请重新输入!
出生率是:
people.birthrate()<
死亡率是:
people.deadrate()<
8-3、设计一个类,具有一个float指针成员,且函数成员如下:
1)构造函数具有一个整型参数count,为指针成员分配count个元素空间;
2)析构函数释放该空间;
3)向指针指向的空间存储数据的函数;
4)返回空间中这些数的平均值的函数。
cstdlib>
classDataArray
{intlength;
//存储数组元素个数
float*fltData;
//存储数据
DataArray(int=1);
//构造函数
~DataArray();
//析构函数
boolsetData(constfloat,constint);
//设置成员变量
floatgetAverage(void);
//计算并返回平均值
//构造函数//
//count:
希望创建的动态数组元素个数。
DataArray:
DataArray(intcount)
{cout<
调用构造函数..."
if(count>
0)
{length=count;
fltData=newfloat[length];
}else
{length=1;
for(inti=0;
i<
length;
i++)
fltData[i]=0;
//析构函数//
~DataArray()
调用析构函数..."
delete[]fltData;
length=0;
//tData:
要赋给指定变量的值。
//subscript:
指定要赋值的变量数组元素为第几个。
boolDataArray:
setData(constfloattData,constintsubscript)
{if(subscript+1>
length)
returnfalse;
fltData[subscript]=tData;
//计算并返回平均值//
返回数组所存储的数据的平均值。
floatDataArray:
getAverage(void)
{floatsum=0;
sum+=fltData[i];
return(sum/length);
{//对DataArray类进行测试
创建DataArray对象并初始化..."
DataArrayObj(3);
给DataArray对象赋值:
3;
{//产生一个随机数
floattemp=(float)rand()/10;
Obj.setData(temp,i);
第"
(i+1)<
个值为:
temp<
平均值为:
Obj.getAverage()<
8-4、设计一个薪水类Payroll,数据成员包括单位小时工资、已经工作的小时数、本周应付工资数。
在主函数定义一个具有10个元素的对象数组(10个雇员),询问每个雇员本周已经工作的小时数,然后显示应得的工资。
输入有效性检验:
每周工作的小时数不能大于60,也不能为负数。
iomanip>
//薪水类声明//
classPayroll
{floatpay_per_hour;
//存储每小时的工钱
floathours;
//存储雇员工作时间
floattotal_pay;
//存储雇员应得工资
Payroll(constfloat=0);
boolsetHours(constfloat);
//设置工作时间
floatgetPayment(void);
//获取应得工资
//hour:
雇员工作时间。
Payroll:
Payroll(constfloathour)
{pay_per_hour=5.0f;
hours=0;
total_pay=0;
//设置工作时间//
雇员工作时间//
如果变量赋值成功则返回true,否则返回false。
boolPayroll:
setHours(constfloathour)
{//判断工作时间是否介于0至60之间
if(hour>
=0&
&
hour<
=60)
{hours=hour;
total_pay=pay_per_hour*hours;
returntrue;
//获取应得工资//
返回计算得到的雇员应得的工资//
floatPayroll:
getPayment(void)
{returntotal_pay;
{Payrollemployee[10];
//雇员对象数组
//对10个雇员对象进行赋值
10;
{floattHour;
请输入第"
setw
(2)<
个雇员本周已工作的时间(0至60之间):
while(true)
{cin>
tHour;
if(employee[i].setHours(tHour))
break;
else
cout<
您输入的数据不正确,请重新输入!
}
//显示每个雇员应得的工资
for(i=0;
个雇员应得工资"
<
setiosflags(ios:
fixed)<
setprecision
(2)
employee[i].getPayment()<
元"
8-5、设计InvoiceItem类和商品销售类,完成如下功能:
1)询问客户购买的商品名称和数量;
2)从InvoiceItem对象获得每个商品的成本价;
3)在成本价基础上加上30%利润,得到每个商品的单价;
4)将商品单价与购买数量相乘,得到商品小计;
5)将商品小计乘以6%,得到商品的零售税;
6)将商品小计加上零售税得到该商品的销售额;
7)显示客户本次交易购买商品的小计、零售税和销售额。
有效性检验:
商品数量不能为负数。
classInvoiceItem
{char*desc;
intunits;
floatcost;
InvoiceItem(char*d,intu=0,floatc=0)
{desc=newchar[strlen(d)+1];
strcpy(desc,d);
units=u;
cost=c;
~InvoiceItem(){delete[]desc;
units=0;
cost=0;
char*getDesc(){returndesc;
intgetUnits(){returnunits;
floatgetCost(){returncost;
classSale{
floatprice,salesum,saletax,totalsum;
intbuynum;
boolsetnum(int,int);
voidcalcSale(floatp)
{price=p;
//单价
salesum=price*buynum;
//商品小计
saletax=salesum*0.06;
//零售税
totalsum=salesum+saletax;
}//销售额
floatgetprice(){returnprice;
intgetbuynum(){returnbuynum;
floatgetsalesum(){returnsalesum;
floatgetsaletax(){returnsaletax;
floatgettotalsum(){returntotalsum;
boolSale:
setnum(intn,intinvoicenum)
{
if(n>
n<
=invoicenum)
{buynum=n;
voidmain()
InvoiceItemInventory[3]={
InvoiceItem("
ABC"
10,0.5f),
DEF"
20,1.2f),
GHI"
30,2.5f),
};
Sales1;
inti,index=-1;
cout<
库存商品列表:
for(i=0;
i<
3;
i++){
cout<
名称:
Inventory[i].getDesc()<
\t数量:
Inventory[i].getUnits()<
\t成本价:
Inventory[i].getCost()<
}//输出库存商品信息
请输入购买的商品名称:
{charname[51];
cin.getline(name,51);
for(i=0;
i++)
if(strcmp(Inventory[i].getDesc(),name)==0)
index=i;
if(index!
=-1)break;
elsecout<
您输入的商品不存在,请重新输入!
请输入购买数量:
{intnum;
num;
if(s1.setnum(num,Inventory[index].getUnits()))break;
您输入的数量不正确,请重新输入!
//计算销售额
s1.calcSale(Inventory[index].getCost()*1.3);
//输出销售信息
本次购买的商品名称:
Inventory[index].getDesc()<
本次购买的商品数量:
s1.getbuynum()<
本次购买的商品单价:
s1.getprice()<
本次购买的商品小计:
s1.getsalesum()<
本次购买的零售税:
s1.getsaletax()<
本次购买的销售额:
s1.gettotalsum()<
第9章习题:
9-1、定义NumDays类,功能是将以小时(hour)为单位的工作时间转换为天数(day)。
构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。
同时,该类需重载+、-、++、――运算符。
9-2、设计TimeOff类,用于计算雇员生病、休假和不支付报酬的时间。
9-3、采用TimeOff类定义一个对象。
要求用户输入某雇员已经工作的月数(months),然后采用TimeOff类对象计算并显示雇员因病休假和正常休假的最多天数。
注意:
雇员每月可以有12小时的带薪休假和8小时的生病休假。
//NumDays.h文件//
classNumDays
{floathour;
//以小时存储工作时间
floatday;
//以天数存储工作时间
NumDays(constfloat=0);
//构造函数
voidsetHours(constfloat);
//以小时为参数设置成员变量
voidsetDays(constfloat);
//以天数为参数设置成员变量
floatgetHours(void);
//返回按小时计的工作时间
floatgetDays(void);
//返回按天数计的工作时间
floatoperator+(NumDays&
);
//重载+操作符
floatoperator-(NumDays&
//重载-操作符
NumDaysoperator++();
//重载++前置操作符
NumDaysoperator++(int);
//重载++后置操作符
NumDaysoperator--();
//重载--前置操作符
NumDaysoperator--(int);
//重载--后置操作符
//tHour:
工作时间(小时)//
NumDays:
NumDays(constfloattHour)
{hour=tHour;
day=tHour/8;
//以小时为参数设置成员变量//
工作时间(小时)。
voidNumDays:
setHours(constfloattHour)
//以天数为参数设置成员变量//
//tDay:
工作时间(天数)//
setDays(constfloattDay)
{hour=tDay*8;
day=tDay;
//返回按小时计的工作时间//
返回工作时间(小时)//
floatNumDays:
getHours(void)
{returnhour;
//返回按天数计的工作时间//
返回工作时间(天数)//
getDays(void)
{returnday;
//重载+操作符//
返回两者相加之和(小时)//
operator+(NumDays&
NumDaysObj)
{return(this->
hour+NumDaysObj.hour);
//重载-操作符//
返回两者相减之差(小时)//
operator-(NumDays&
hour-NumDaysObj.hour);
//重载++前置操作符//
NumDaysNumDays:
operator++()
{hour++;
day=hour/8;
return*this;
//重载++后置操作符//
operator++(int)
{NumDaystemp=*this;
hour++;
day=hour/8;
returntemp;
//重载--前置操作符//
operator--()
{hour--;
//重载--后置操作符//
operator--(int)
hour--;