C++ Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。

news2024/11/28 3:43:04

一、问题描述:

  • Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。自定义一个或多个快递公司,自定义计价方法,设计合适、合理的界面文本提示,以广东省内某市为起点,采用用户输入目的地点(省份或省份缩写等)、货物重量和快递时效(类型)的方式,计算快递运费,达到做成一个快递运费查询或者发快递的小软件。
  • 二、目的:
  • 1. 验证private、protect、public继承权限对数据成员和成员函数的权限影响;

    2. 掌握继承的优势,采用合适的继承方法,解决实际问题。

  • 三、问题具体解决方法:

  • 1、首先,创建基类Package,并在构造函数内对变量进行初始化,用a来判断用户所选择的快递为哪个。在各快递函数内定义各种费用。

  • class Package
    {
    public:
    	Package(double weight,int a,int b,int c)//Package的构造函数 
    	{
    		weight_m=weight;
    		this->c = c;
    		firstWeight=1;
    		switch(a)
    		{
    			case 1: EMS();	break;
    			case 2:	YTO();	break;
    			case 3: YUNDA();break;
    			case 4: ZTO();	break;
    			case 5: SF();	break;
    			case 6: STO();	break;
    		}
    	}
    	void EMS()//邮政 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=6;
    		}
    		else//省外包裹 
    		{
    			LandFreight=8;	
    		} 
    		continuationWeight_Price=3;
    		AirFreight=10;
    	}
    	void YTO()//圆通 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=8;
    		}
    		else//省外包裹 
    		{
    			LandFreight=10;	
    		} 
    		continuationWeight_Price=1.5;
    		AirFreight=12;
    	}
    	void YUNDA()//韵达 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=8;
    		}
    		else//省外包裹 
    		{
    			LandFreight=10;	
    		} 
    		continuationWeight_Price=3;
    		AirFreight=9;
    	}		
    	void ZTO()//中通 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=5;
    		}
    		else//省外包裹 
    		{
    			LandFreight=8;	
    		} 
    		continuationWeight_Price=2;
    		AirFreight=14;
    	}
    	void SF()//顺丰 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=7;
    		}
    		else//省外包裹 
    		{
    			LandFreight=9;	
    		} 
    		continuationWeight_Price=2.5;
    		AirFreight=9;
    	}
    	void STO()//申通 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=10;
    		}
    		else//省外包裹 
    		{
    			LandFreight=12;	
    		} 
    		continuationWeight_Price=1.5;
    		AirFreight=15;
    	}
    	double getLandFreight()
    	{
    		return LandFreight;
    	}
    	double getAirFreight()
    	{
    		return AirFreight;
    	}
    	double calculateFees(double firstWeight_Price)//计算快递费 
    	{
    		expressFee = firstWeight_Price+ (weight_m - firstWeight)*continuationWeight_Price;
    		return expressFee;
    	} 
    private:
    	double weight_m;//总重量
    	double firstWeight_Price;//首重价格 
    	double continuationWeight_Price;//续重价格 
    	double firstWeight;	//首重 
    	double continuationWeight;//续重 
    	double expressFee;//快递费 
    	double LandFreight;//陆运首重价格 
    	double AirFreight;//空运首重价格 
    	int c;
    };

    2、空运两日达类,是Package类的派生类,打印输出用户所需支付的快递费用。

  • class twoDayDeliver:protected Package//空运两日达 
    {
    public:	
    	twoDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_)
    	{	
    	}
    	void outputAmount()
    	{
    		cout<<"你所需支付的快递费为(空运): "<<calculateFees(getAirFreight())<<endl;
    	}
    };

    3、陆运三日达类,功能同上。

  • class threeDayDeliver:private Package//陆运三日达 
    {
    public:
    	threeDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_)
    	{	
    	}
    	void outputAmount()
    	{
    		
    		cout<<"你所需支付的快递费为(陆运): "<<calculateFees(getLandFreight())<<endl;
    	}	
    };

    4、测试类的功能。注意:可以增加多一点交互。

  • int main()
    {
    	int k;
    	int a;//记录选择的快递公司的代号 
    	int b;//记录选择的寄件方式(空/陆) 
    	int c;//记录所寄件的省份的是否为省内 
    	string  destination;//记录目的地 
    	double weight;//记录包裹重量  
    	cout<<"********************下面为所提供的快递公司的具体收费情况:********************"<<endl
    		<<"*公司名称(编号):  续重价格:   陆运首重价格(省内/省外):  空运首重价格: *"<<endl 
    		<<"*邮政(1)                   3/斤                        6/8              10 *"<<endl
    		<<"*圆通(2)                 1.5/斤                        8/10             12 *"<<endl
    		<<"*韵达(3)                   3/斤                        8/10              9 *"<<endl
    		<<"*中通(4)                   2/斤                        5/8              14 *"<<endl
    		<<"*顺丰(5)                 2.5/斤                        7/9               9 *"<<endl
    		<<"*申通(6)                 1.5/斤                       10/12             15 *"<<endl
    		<<"******************************************************************************"<<endl;
    	cout<<"请输入你想寄的包裹的个数:"<<endl;
    	cin>>k; 
    	while(k>0)
    	{
    		cout<<"请输入选择的快递公司的代号(1~6):"<<endl;
    		cin>>a;
    		cout<<"请输入所寄包裹的目的地(缩写开头字母):"<<endl;
    		cin>>destination;
    		cout<<"请输入所寄包裹的总重量(以斤为单位):"<<endl;
    		cin>>weight;
    		cout<<"请选择寄件方式(输入编号):1.陆运,2.空运 " <<endl;
    		cin>>b;
    		if(destination=="GD"||destination=="gd")//判断目的地是省内还是省外 
    		{
    			c=1;
    		}
    		else
    		{
    			c=0;
    		} 	
    		if(b==1)//判断选择的是陆运还是空运并计算运费 
    		{		
    			threeDayDeliver t2(weight,a,b,c);//创建了一个threeDayDeliver的对象(陆运) 
    			t2.outputAmount();	
    		}	
    		else
    		{
    			twoDayDeliver t3(weight,a,b,c);//创建了一个twoDayDeliver的对象(空运)
    			t3.outputAmount();
    		}
    		k--;
    		cout<<endl;
    	} 
    	return 0;
    }

    四、完整代码。

  • #include<iostream>
    #include<cstring>
    using namespace std;
    class Package
    {
    public:
    	Package(double weight,int a,int b,int c)//Package的构造函数 
    	{
    		weight_m=weight;
    		this->c = c;
    		firstWeight=1;
    		switch(a)
    		{
    			case 1: EMS();	break;
    			case 2:	YTO();	break;
    			case 3: YUNDA();break;
    			case 4: ZTO();	break;
    			case 5: SF();	break;
    			case 6: STO();	break;
    		}
    	}
    	void EMS()//邮政 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=6;
    		}
    		else//省外包裹 
    		{
    			LandFreight=8;	
    		} 
    		continuationWeight_Price=3;
    		AirFreight=10;
    	}
    	void YTO()//圆通 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=8;
    		}
    		else//省外包裹 
    		{
    			LandFreight=10;	
    		} 
    		continuationWeight_Price=1.5;
    		AirFreight=12;
    	}
    	void YUNDA()//韵达 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=8;
    		}
    		else//省外包裹 
    		{
    			LandFreight=10;	
    		} 
    		continuationWeight_Price=3;
    		AirFreight=9;
    	}		
    	void ZTO()//中通 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=5;
    		}
    		else//省外包裹 
    		{
    			LandFreight=8;	
    		} 
    		continuationWeight_Price=2;
    		AirFreight=14;
    	}
    	void SF()//顺丰 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=7;
    		}
    		else//省外包裹 
    		{
    			LandFreight=9;	
    		} 
    		continuationWeight_Price=2.5;
    		AirFreight=9;
    	}
    	void STO()//申通 
    	{
    		if(c==1)//省内包裹 
    		{
    			LandFreight=10;
    		}
    		else//省外包裹 
    		{
    			LandFreight=12;	
    		} 
    		continuationWeight_Price=1.5;
    		AirFreight=15;
    	}
    	double getLandFreight()
    	{
    		return LandFreight;
    	}
    	double getAirFreight()
    	{
    		return AirFreight;
    	}
    	double calculateFees(double firstWeight_Price)//计算快递费 
    	{
    		expressFee = firstWeight_Price+ (weight_m - firstWeight)*continuationWeight_Price;
    		return expressFee;
    	} 
    private:
    	double weight_m;//总重量
    	double firstWeight_Price;//首重价格 
    	double continuationWeight_Price;//续重价格 
    	double firstWeight;	//首重 
    	double continuationWeight;//续重 
    	double expressFee;//快递费 
    	double LandFreight;//陆运首重价格 
    	double AirFreight;//空运首重价格 
    	int c;
    };
    
    class twoDayDeliver:protected Package//空运两日达 
    {
    public:	
    	twoDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_)
    	{	
    	}
    	void outputAmount()
    	{
    		cout<<"你所需支付的快递费为(空运): "<<calculateFees(getAirFreight())<<endl;
    	}
    };
    
    class threeDayDeliver:private Package//陆运三日达 
    {
    public:
    	threeDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_)
    	{	
    	}
    	void outputAmount()
    	{
    		
    		cout<<"你所需支付的快递费为(陆运): "<<calculateFees(getLandFreight())<<endl;
    	}	
    };
    
    int main()
    {
    	int k;
    	int a;//记录选择的快递公司的代号 
    	int b;//记录选择的寄件方式(空/陆) 
    	int c;//记录所寄件的省份的是否为省内 
    	string  destination;//记录目的地 
    	double weight;//记录包裹重量  
    	cout<<"********************下面为所提供的快递公司的具体收费情况:********************"<<endl
    		<<"*公司名称(编号):  续重价格:   陆运首重价格(省内/省外):  空运首重价格: *"<<endl 
    		<<"*邮政(1)                   3/斤                        6/8              10 *"<<endl
    		<<"*圆通(2)                 1.5/斤                        8/10             12 *"<<endl
    		<<"*韵达(3)                   3/斤                        8/10              9 *"<<endl
    		<<"*中通(4)                   2/斤                        5/8              14 *"<<endl
    		<<"*顺丰(5)                 2.5/斤                        7/9               9 *"<<endl
    		<<"*申通(6)                 1.5/斤                       10/12             15 *"<<endl
    		<<"******************************************************************************"<<endl;
    	cout<<"请输入你想寄的包裹的个数:"<<endl;
    	cin>>k; 
    	while(k>0)
    	{
    		cout<<"请输入选择的快递公司的代号(1~6):"<<endl;
    		cin>>a;
    		cout<<"请输入所寄包裹的目的地(缩写开头字母):"<<endl;
    		cin>>destination;
    		cout<<"请输入所寄包裹的总重量(以斤为单位):"<<endl;
    		cin>>weight;
    		cout<<"请选择寄件方式(输入编号):1.陆运,2.空运 " <<endl;
    		cin>>b;
    		if(destination=="GD"||destination=="gd")//判断目的地是省内还是省外 
    		{
    			c=1;
    		}
    		else
    		{
    			c=0;
    		} 	
    		if(b==1)//判断选择的是陆运还是空运并计算运费 
    		{		
    			threeDayDeliver t2(weight,a,b,c);//创建了一个threeDayDeliver的对象(陆运) 
    			t2.outputAmount();	
    		}	
    		else
    		{
    			twoDayDeliver t3(weight,a,b,c);//创建了一个twoDayDeliver的对象(空运)
    			t3.outputAmount();
    		}
    		k--;
    		cout<<endl;
    	} 
    	return 0;
    }

    五、运行情况展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1168845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『 MySQL数据库 』之数据库基础

文章目录 mysql的登陆选项什么是数据库mysql与mysqld的区别mysql与数据库为什么存储数据时不用文件而用数据库? 在Linux中如何显式观察数据库?在Linux中如何使用mysql建立一个数据库,建立一张表结构,插入一些数据;服务器与数据库、表之间的关系SQL分类 mysql的登陆选项 mysq…

httpclient工具类(支持泛型转换)

1、网上搜到的httpclient工具类的问题&#xff1a; 1.1、如下图我们都能够发现这种封装的问题&#xff1a; 代码繁杂、充斥了很多重复性代码返回值单一&#xff0c;无法拿到对应的Java Bean对象及List对象集合实际场景中会对接大量第三方的OPEN API&#xff0c;下述方法的扩展…

最亮那颗星的中年危机 —— 程序员的职场困境与破局

如果说最近的这十年国内市场什么工作是最受瞩目的&#xff0c;那么程序员绝对算得上是夜空中最闪亮的那颗星。 伴随科技的迅猛发展&#xff0c;计算机走进千家万户&#xff0c;智能终端深深融入每个人的生活&#xff0c;程序员这一职业群体也逐渐成为了现代社会中不可或缺的一…

分享一个抖音视频解析神器~

怎么样下载抖音视频&#xff1f;相信很多人都有过这样的困惑。作为一个资深短视频剪辑工作者&#xff0c;常常需要用到各种视频素材&#xff0c;其中不乏需要从抖音上下载的&#xff0c;因此我也尝试过许多下载工具&#xff0c;但是效果都不大满意&#xff0c;直到有一次朋友给…

最近面试者对接口测试的理解真把我给笑拥了~

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

建议收藏《2023华为海思实习笔试-数字芯片真题+解析》(附下载)

华为海思一直以来是从业者想要进入的热门公司。但是岗位就那么多&#xff0c;在面试的时候&#xff0c;很多同学因为准备不充分&#xff0c;与岗位失之交臂&#xff0c;无缘进入该公司。今天为大家带来《2023华为海思实习笔试-数字芯片真题解析》题目来源于众多网友对笔试的记录…

CSS基础知识点速览

1 基础认识 1.1 css的介绍 CSS:层叠样式表(Cascading style sheets) CSS作用&#xff1a; 给页面中的html标签设置样式 css写在style标签里&#xff0c;style标签一般在head标签里&#xff0c;位于head标签下。 <style>p{color: red;background-color: green;font-size…

路由器基础(五): OSPF原理与配置

开放式最短路径优先 (Open Shortest Path First,OSPF) 是一个内部网关协议 (Interior Gateway Protocol,IGP),用于在单一自治系统(Autonomous System,AS) 内决策路由。OSPF 适合小型、中型、较大规模网络。OSPF 采用Dijkstra的最短路径优先算法 (Shortest Pat…

Go Gin中间件

Gin是一个用Go语言编写的Web框架&#xff0c;它提供了一种简单的方式来创建HTTP路由和处理HTTP请求。中间件是Gin框架中的一个重要概念&#xff0c;它可以用来处理HTTP请求和响应&#xff0c;或者在处理请求之前和之后执行一些操作。 以下是关于Gin中间件开发的一些基本信息&am…

【计算机网络 - 自顶向下方法】第一章习题答案

P2 Question&#xff1a;   式 (1-1) 给出了经传输速率为 R 的 N 段链路发送长度为 L 的一个分组的端到端时延。 对于经过 N 段链路一个接一个地发送 P 个这样的分组&#xff0c;一般化地表示出这个公式。 Answer&#xff1a;    N ∗ L R \frac{N*L}{R} RN∗L​ 时&…

【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取(北斗、GPS和GNSS)

【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取&#xff08;北斗、GPS和GNSS&#xff09; 测试视频&#xff08;其中的恶性BUG会在下一篇文章阐述&#xff09;&#xff1a; 【移远QuecPython】EC800M物联网开发板的内置GNSS定位的恶性BUG&#xff08;目前没有完全的…

Python语言:容器操作知识点总结清单

容器通用操作表格&#xff1a; 列表知识点清单&#xff1a; 元组知识点清单&#xff1a; 字典知识点清单&#xff1a; 集合知识点清单&#xff1a; 字符串知识点清单&#xff1a; 说明&#xff1a;本次知识点总结可能会有遗漏&#xff0c;没有做到面面俱到。

联通智网科技正式入选国家级专精特新“小巨人”企业

近日&#xff0c;北京市经济和信息化局发布《第五批专精特新“小巨人”企业公告名单》&#xff0c;根据工业和信息化部发布的《工业和信息化部关于公布第五批专精特新“小巨人”企业和通过复核的第二批专精特新“小巨人”企业名单的通告》&#xff0c;联通智网科技股份有限公司…

Java自学第3课:Java语言流程控制和字符串

1 复合语句 复合语句是以区块为单位的语句&#xff0c;也就是{}内的内容。 2 条件语句 if (布尔表达式){语句序列}else{语句序列} 有个好玩的是&#xff0c;对年龄段的分段&#xff0c;其实以前的思维是有点冗余的&#xff0c;比如a<100 & a>90&#xff0c;在复合…

蛋白质N端测序服务

表达纯化后的蛋白产物&#xff0c;特别是蛋白品的分析过程中&#xff0c;需要对蛋白的末端进行验证&#xff0c;以保证表达纯化产物的N端和C端序列准确。Edman降解法是蛋白的N端序列分析中非常成熟的方法之一&#xff0c;有着广泛的应用。卡梅德生物采用岛津公司Edman测序系统&…

C++定义一个 Student 类,在该类定义中包括:一个数据成员 score(分数)及两个静态数据 成员 total(总分)和学生人数 count

完整代码&#xff1a; /*声明一个Student类&#xff0c;在该类中包括一个数据成员score&#xff08;分数&#xff09;、两个静态数据成员total_score&#xff08;总分&#xff09;和count&#xff08;学生人数&#xff09;&#xff1b;还包括一个成员函数account&#xff08;&…

Redis缓存穿透、击穿、雪崩问题原理和解决方案

目录 一、Redis缓存穿透1.1、缓存穿透原理1.2、缓存穿透代码演示1.3、缓存穿透解决方案解决方案一&#xff08;数据库中查询不到数据也将key进行缓存&#xff09;解决方案二&#xff08;使用布隆过滤器&#xff09; 二、Redis缓存击穿&#xff08;缓存失效&#xff09;三、Redi…

KV STUDIO对plc的读取与电焊机的配料设置

今天又开始了明天的工作总结&#xff0c;希望对于看小编博客的粉丝有所帮助&#xff0c;前程似锦&#xff01;&#xff01;&#xff01; KV STUDIO对plc的读取 一&#xff0c;先将电脑与设备相连接&#xff0c;有许多种发生&#xff0c;小编这使用的是以太网方式 二&#xff0…

倒计时丨距离RestCloud新品发布仅有6天!

6天倒计时&#xff0c;RestCloud零代码集成自动化平台重磅发布 ⏰11月9日14:00&#xff0c;期待您的参与&#xff01; 点击报名&#xff1a;http://c.nxw.so/dfaJ9