面向对象A面向对象习题南航皮德常资料.docx
《面向对象A面向对象习题南航皮德常资料.docx》由会员分享,可在线阅读,更多相关《面向对象A面向对象习题南航皮德常资料.docx(13页珍藏版)》请在冰豆网上搜索。
![面向对象A面向对象习题南航皮德常资料.docx](https://file1.bdocx.com/fileroot1/2023-1/7/e55b37c6-3c50-4c1a-83ee-4e276a06cded/e55b37c6-3c50-4c1a-83ee-4e276a06cded1.gif)
面向对象A面向对象习题南航皮德常资料
第8章习题:
8-1、设计Date类,输出合法日期。
#include
usingnamespacestd;
12-25-2004."<:
if(count>0)
{length=count;
fltData=newfloat[length];
}else
{length=1;
;
fltData=newfloat[length];
}
for(inti=0;ifltData[i]=0;
}
#
."<delete[]fltData;
length=0;
}
."<%
DataArrayObj(3);
cout<<"给DataArray对象赋值:
"<for(inti=0;i<3;i++)
{5.0fetHours(tHour))
break;
)
else
cout<<"您输入的数据不正确,请重新输入!
"<}
}
etPayment()<<"元"<,
}
8-5、设计InvoiceItem类和商品销售类,完成如下功能:
1)询问客户购买的商品名称和数量;
2)从InvoiceItem对象获得每个商品的成本价;
:
3)在成本价基础上加上30%利润,得到每个商品的单价;
4)将商品单价与购买数量相乘,得到商品小计;
5)将商品小计乘以6%,得到商品的零售税;
6)将商品小计加上零售税得到该商品的销售额;
7)显示客户本次交易购买商品的小计、零售税和销售额。
}
有效性检验:
商品数量不能为负数。
#include
usingnamespacestd;
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(){delete[]desc;units=0;cost=0;}
%
char*getDesc(){returndesc;}
intgetUnits(){returnunits;}
floatgetCost(){returncost;}
};
classSale{
—
floatprice,salesum,saletax,totalsum;
intbuynum;
public:
boolsetnum(int,int);
voidcalcSale(floatp)
>
{price=p;0.5f1.2f2.5fSaleetDesc()<<"\t数量:
";
cout<";
cout<}etDesc(),name)==0)
index=i;
&
if(index!
=-1)break;
elsecout<<"您输入的商品不存在,请重新输入!
"<}
cout<<"请输入购买数量:
";
while(true)
<
{intnum;
cin>>num;
if(num,Inventory[index].getUnits()))break;
elsecout<<"您输入的数量不正确,请重新输入!
"<}
,
etCost()*;
etDesc()<cout<<"本次购买的商品数量:
"<<()<cout<<"本次购买的商品单价:
"<<()<<"元"<cout<<"本次购买的商品小计:
"<<()<<"元"<^
cout<<"本次购买的零售税:
"<<()<<"元"<cout<<"本次购买的销售额:
"<<()<<"元"<}
第9章习题:
)
9-1、定义NumDays类,功能是将以小时(hour)为单位的工作时间转换为天数(day)。
构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。
同时,该类需重载+、-、++、――运算符。
9-2、设计TimeOff类,用于计算雇员生病、休假和不支付报酬的时间。
9-3、采用TimeOff类定义一个对象。
要求用户输入某雇员已经工作的月数(months),然后采用TimeOff类对象计算并显示雇员因病休假和正常休假的最多天数。
注意:
雇员每月可以有12小时的带薪休假和8小时的生病休假。
etHours())
cout<<"该月超过标准的生病休假小时数:
"<<().getHours()<<"小时!
\n";
:
(hours);
(offObj);
cout<<"请输入第"<
\n";
cin>>hours;
if(hours>().getHours())
@
cout<<"该月超过标准的带薪休假小时数:
"<<().getHours()<<"小时!
\n";
(hours);
(offObj);
cout<<"请输入第"<
\n";
cin>>hours;
$
if(hours>().getHours())
cout<<"该月超过标准的不带薪休假小时数:
"<<().getHours()<<"小时!
\n";
(hours);
(offObj);
}
*
cout<<()<<"的休假天数统计如下:
\n";
cout<<"因病休假的天数为:
\t"<<().getDays()<cout<<"带薪休假的天数为:
\t"<<().getDays()<cout<<"不带薪休假的天数为:
\t"<<().getDays()<}
\
第10章习题:
10-2、设计Employee类,其数据成员能保存如下信息:
雇员姓名:
char*指针;
雇员编号:
格式为XXX-L,X是0~9之间的数字,L是A~M之间的字母;
@
受雇日期:
向该类增加构造函数、析构函数和其他相关函数成员。
设计Employee类的子类EmployeePay,其具有如下数据成员:
月工资:
double型变量;
部门号:
int型变量;
【
编写完整的程序,要求用户从键盘输入雇员信息,然后在屏幕上显示这些信息。
."<CirclemyCircle(0,0,;
cout<<"centerX="<<()<cout<<"centerY="<<()<\
cout<<"radius="<cout<<"Area="<<()<."<RectanglemyRectangle(12,15);
cout<<"width="<<()<)
cout<<"length="<<()<cout<<"Area="<<()<}
10-9、编写具有排序功能的类模板SortableArray,其是FreewillArray类模板的子类,具有一个函数成员,实现对数组元素的升序排列。
编写一个完整的程序测试该模板。
)
template
FreewillArray:
:
FreewillArray(ints)
{
arraySize=s;
…
aptr=newT[s];
if(aptr==0)memError();
for(intcount=0;count*(aptr+count)=0;
}
】
template
FreewillArray:
:
FreewillArray(
constFreewillArray&obj)
{
arraySize=;
;
aptr=newT[arraySize];
if(aptr==0)memError();
for(intcount=0;count*(aptr+count)=*+count);
}
/
template
FreewillArray:
:
~FreewillArray()
{if(arraySize>0)
delete[]aptr;
)
}
template
voidFreewillArray:
:
memError()
{cout<<"ERROR:
allocatememory.\n";
$
exit(0);
}
template
voidFreewillArray:
:
subError(void)
(
{cout<<"ERROR:
Subscriptoutofrange.\n";
exit(0);
}
template
T&FreewillArray:
:
operator[](constint&sub)
@
{if(sub<0||sub>arraySize)subError();
returnaptr[sub];
}
#endif
]
//
#include""
template
classSortableArray:
publicFreewillArray
{public:
—
SortableArray(ints):
FreewillArray(s){}
SortableArray(FreewillArray&obj):
FreewillArray(obj){}
voidSelectionSort();
};
template
》
voidSortableArray:
:
SelectionSort()//选择排序
{inti,j,t,minIndex;
for(i=0;i{
minIndex=i;
`
for(j=i+1;jif(aptr[j]minIndex=j;
if(minIndex!
=i)
{t=aptr[minIndex];
*
aptr[minIndex]=aptr[i];
aptr[i]=t;
}
}
}
)
//
#include
usingnamespacestd;
#include""
>
voidmain(void)
{FreewillArrayintTable(10);
SortableArraysortTable(intTable);
inti,x;
for(i=0;i<10;i++){
,
cout<<"请输入第"<
\n";
cin>>x;
sortTable[i]=x;
}
cout<<"排序前:
\n";
¥
for(i=0;i<10;i++)
cout<cout<cout<<"排序后:
\n";
();
*
for(i=0;i<10;i++)
cout<}
第11章习题:
@
11-1、Date类异常。
#include
usingnamespacestd;
classDate
{public:
【
boolsetDate(constint,constint,constint);
voiddisplay(void);
char*getMonth(constint);
classInvalidDay{};//异常类
classInvalidMonth{};//异常类
~
private:
intyear;//存储日期的年份
intmonth;//存储日期的月份
intday;//存储日期的天数
};
》
//设置成员变量
//参数:
mm:
月份。
dd:
天数。
yy:
年份。
//
//返回值:
如果成功赋值则返回true,否则返回false//
char*Date:
:
getMonth(constintm)
{if(m==1)
*
return"January";
elseif(m==2)
return"February";
elseif(m==3)
return"March";
~
elseif(m==4)
return"April";
elseif(m==5)
return"May";
elseif(m==6)
)
return"June";
elseif(m==7)
return"July";
elseif(m==8)
return"August";
^
elseif(m==9)
return"September";
elseif(m==10)
return"October";
elseif(m==11)
&
return"November";
else
return"December";
}
//设置成员变量
//参数:
mm:
月份。
dd:
天数。
yy:
年份。
//
//返回值:
如果成功赋值则返回true,否则返回false//
boolDate:
:
setDate(constintmm,constintdd,constintyy)
{if(mm<1||mm>12)
throwInvalidMonth();//抛出异常
if(dd<1||dd>31)
throwInvalidDay();//抛出异常
year=yy;
month=mm;
day=dd;
returntrue;
}
//在屏幕上显示日期//
voidDate:
:
display(void)
{//按照"12-25-2004"的形式输出日期
cout<<<//按照"December25,2004"的形式输出日期
cout<<<//按照"25December2004"的形式输出日期
cout<<<}
voidmain(void)
{DatemyDate;//存储日期
intyear;//临时存储年份
intmonth;//临时存储月份
intday;//临时存储天数
try
{
cout<<"请按YYYY格式输入年:
";
cin>>year;
cout<<"请按mm格式输入月:
";
cin>>month;
cout<<"请按dd格式输入日:
";
cin>>day;
(month,day,year);
cout<<"您输入的日期是:
"<();
cout<}catch(Date:
:
InvalidDay)
{cout<<"您输入的日期天数错误!
\n"<}catch(Date:
:
InvalidMonth)
{cout<<"您输入的日期月份错误!
\n"<}
}