快递公司运费计算

  利用C++的多态性,设计一快递运费计算软件。 货物由北京可通过快递公司运往天津、上海、太原、广州、昆明、新疆六个城市,分别用1、2、3、4、5、6作为它们编号。运送货物的重量分为1、2、3公斤。快递公司有四家:E通宝、顺风、EMS和圆通,编号为1、2、3、4。不同城市、不同重量、不同的快递公司所费用由表1给出。当输入快递公司编号、城市编号和货物重量时,屏幕输出货物运送快递公司名称、到达的城市及费用。编程要求如下:

     1.定义一基类为快递公司,类中定义“城市编号”、货物个数、重量等成员,成员函数有基本成员输出函数及两个纯虚函数:求运输费用函数和输出信息函数。

     2.分别定义各快递公司的派生类,在类中参照表中提供的数据,根据自己的实际,编写各自的运输费用函数和输出信息函数。

    3.用实例测试。在主函数中定义一基类的指针数组,使这些指针分别指向不同的快递公司。

测试用例说明: 第一位:快递公司编号;第二位:城市编号;第三位:货物个数;第四位:货物重量。

 基类定义参考:
class Expresscom
{
  protected:
         int No,Num;//城市编号、货物个数
         double zh;//货物重量
  public:
         Expresscom(int no,int num,double zhong);
         virtual double Feiyong()=0;//计算运费函数
         virtual void Disp()=0;//输出全部信息
         void Edisp();//输出货物个数、货物重量信息
 };

 天津上海太原广州昆明新疆
123123123123123123
E邮宝101418151923151923152127152127152535
顺风121416203040202836203446203244203448
EMS263850263850263850294765356595386695
圆通101826101826122436122232152739183348

 

#include<iostream>   
using namespace std;    
class Expresscom  
{    
  protected:    
         int No,Num;    
         double zh;    
  public:  
         Expresscom(int no,int num,double zhong){No=no;Num=num;zh=zhong;}    
         virtual double Feiyong()=0;  
         virtual void Disp()=0;   
         void Edisp()    
         {  cout<<endl<<"目的地:";  
         switch(No)  
            {case 1:cout<< "天津";break;   
             case 2:cout<< "上海";break;   
             case 3:cout<< "太原";break;    
             case 4:cout<< "广州";break;    
             case 5:cout<< "昆明";break;   
             case 6:cout<< "新疆";break;   
            }   
 cout<<endl<<"重量:"<<zh<<"KG"<<endl<<"货物个数:"<<Num<<endl<<"单价:"<<Feiyong()<<endl<<"总运费:"<<Num*Feiyong()<<endl;  
         }   
};    
class ShunF:virtual public Expresscom    
{    
    public:    
        ShunF(int no,int num,double zhong):Expresscom(no,num,zhong){}    
    double Feiyong()    
     {int z=(int)zh;  
     if(No==1) return 2*z+10;    
     else if(No==2) return 10*z+10;    
     else if(No==3) return 8*z+12;    
     else if(No==4) return 17*z+4-z*z;    
     else if(No==5) return 12*z+8;    
     else if(No==6) return 14*z+6;    
     }    
     void Disp()    
     {  cout<<"公司名称:顺风";  }    
 };    
class Etb:virtual public Expresscom    
 {    
    public:    
        Etb(int no,int num,double zhong):Expresscom(no,num,zhong){}    
    double Feiyong()    
     {int z=(int)zh;  
     if(No==1) return 4*z+6;    
     else if(No==2||No==3) return 4*z+11;  
     else if(No==4) return 6*z+9;    
     else if(No==5) return 6*z+9;    
     else if(No==6) return 10*z+5;    
     }    
     void Disp()    
     {  cout<<"公司名称:E通宝";   }    
 };    
class Ems:virtual public Expresscom    
 {    
    public:    
        Ems(int no,int num,double zhong):Expresscom(no,num,zhong){}    
    double Feiyong()    
     {int z=(int)zh;  
     if(No==1) return 12*z+14;    
     else if(No==2||No==3) return 12*z+14;    
     else if(No==4) return 18*z+11;    
     else if(No==5) return 30*z+5;    
     else if(No==6) return 26.5*z+0.5*z*z+11;    
     }    
     void Disp()    
     {  cout<<"公司名称:EMS";  }    
 };    
 class YT:virtual public Expresscom    
 {    
    public:    
        YT(int no,int num,double zhong):Expresscom(no,num,zhong){}    
    double Feiyong()    
     {int z=(int)zh;  
     if(No==1||No==2) return 8*z+2;  
     else if(No==3) return 12*z;    
     else if(No==4) return 10*z+2;    
     else if(No==5) return 12*z+3;    
     else if(No==6) return 15*z+3;    
     }    
    void Disp()    
     {  cout<<"公司名称:圆通";  }    
 };    
 int main()    
 {    
    int a,b,c;    
    double d;    
    cin>>a>>b>>c>>d;  
    Etb etb(b,c,d);  
    ShunF shunf(b,c,d);  
    Ems ems(b,c,d);  
    YT yt(b,c,d);  
    Expresscom *p[4]={&etb,&shunf,&ems,&yt};   
    p[a-1]->Disp();  
    p[a-1]->Edisp();  
 } 

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值