(考试)2017年大一下学期C++期末考试题目四

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;
}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值