4004:账单:虚函数应用
Problem Description
超市管理系统需要计算每个商品销售额(商品单价*销售量)。因此需要定义一个sale类,数据成员包括名称、单价(实数)、销售量(实数)。成员函数包括构造函数、计算销售额函数bill()和输出商品信息函数show().
现在决定部分商品打折,需要计算打折商品的销售额(商品单价销售量折扣率)。因此需要从sale类派生一个折扣销售类discountSale,新增数据成员折扣率(实数),成员函数包括构造函数、计算销售额函数bill()和输出商品信息函数show().
每位顾客购买的商品可能有打折的商品,也可能没有打折的商品,需要计算该顾客所购商品的总金额。
请定义sale类和discountSale类,并将main()函数补充完整。
int main()
{
sale *ps[20];
int n=0; //购买商品种数
string name; //商品名称
double price; //单价
double count; //销售量
double discount; //折扣率
int flag;
while(cin>>flag)
{
if(flag==0) //不打折商品
{
cin>>name>>price>>count;
//补充完整
}
else if(flag==1) //打折商品
{
cin>>name>>price>>count>>discount;
//补充完整
}
}
double total=0;
for(int i=0;i<n;i++)
{
ps[i]->show(); //显示第i个商品信息
total+=ps[i]->bill(); //累计总金额
delete ps[i];
}
cout<<"Total:"<<total<<endl;
return 0;
}
Input
输入数据有多行,代表一位顾客购买的多种商品。每一行代表一种商品的信息。
每行第一个整数为商品是否打折的标志。0代表不打折,1代表打折。
不打折商品信息包括商品名称、单价(实数)、销售量(实数)。
打折商品信息包括商品名称、单价(实数)、销售量(实数),折扣率(实数)。
具体格式见示例。
Output
输出每个商品的信息以及总金额。
不打折商品信息包括商品名称、单价(实数)、销售量(实数)、销售额(实数)。以”\t”隔开。
打折商品信息包括商品名称、单价(实数)、销售量(实数),折扣率(实数)、销售额(实数)。以”\t”隔开。
具体格式见示例。
Sample Input
0 apple 5.2 3
1 rice 3.5 2 0.85
0 pear 3 2
0 grape 8 1.5
Sample Output
apple 5.2 3 15.6
rice 3.5 2 0.85 5.95
pear 3 2 6
grape 8 1.5 12
Total:39.55
心得
比较基本的补充代码的题目,因为题目已经将类内该有的东西全部讲出来了,所以答题时只要按照要求来基本就没可能错了(毕竟主函数都全部出来了)。注意输出格式。
答案
#include <iostream>
#include <string>
using namespace std;
class sale
{
protected:
string name;
double price,sales;
public:
sale() {}
sale(string name,double price,double sales):
name(name),sales(sales),price(price) {}
virtual double bill()
{
return sales*price;
}
virtual void show()
{
cout<<name<<"\t"<<price<<"\t"<<sales<<"\t"
<<bill()<<endl;
}
};
class discountSale:public sale
{
private:
double count;
public:
discountSale(string name,double price,double sales,double count):
sale(name,price,sales),count(count) {}
double bill()
{
return sales*price*count;
}
void show()
{
cout<<name<<"\t"<<price<<"\t"<<sales<<"\t"
<<count<<"\t"<<bill()<<endl;
}
};
int main()
{
sale *ps[20];
int n=0; //购买商品种数
string name; //商品名称
double price; //单价
double count; //销售量
double discount; //折扣率
int flag;
while(cin>>flag)
{
if(flag==0) //不打折商品
{
cin>>name>>price>>count;
ps[n++]=new sale(name,price,count);
}
else if(flag==1) //打折商品
{
cin>>name>>price>>count>>discount;
ps[n++]=new discountSale(name,price,count,discount);
}
}
double total=0;
for(int i=0; i<n; i++)
{
ps[i]->show(); //显示第i个商品信息
total+=ps[i]->bill(); //累计总金额
delete ps[i];
}
cout<<"Total:"<<total<<endl;
return 0;
}