快递公司运费计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fiverya/article/details/88884714

  利用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();//输出货物个数、货物重量信息
 };

  天津 上海 太原 广州 昆明 新疆
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
E邮宝 10 14 18 15 19 23 15 19 23 15 21 27 15 21 27 15 25 35
顺风 12 14 16 20 30 40 20 28 36 20 34 46 20 32 44 20 34 48
EMS 26 38 50 26 38 50 26 38 50 29 47 65 35 65 95 38 66 95
圆通 10 18 26 10 18 26 12 24 36 12 22 32 15 27 39 18 33 48
#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();  
 } 

猜你喜欢

转载自blog.csdn.net/Fiverya/article/details/88884714