【案例4-8】模拟物流快递系统程序设计
欢迎点赞收藏关注
【案例介绍】
- 案例描述
网购已成为人们生活的重要组成部分,当人们在购物网站中下订单后,订单中的货物就会在经过一系列的流程后,送到客户的手中。而在送货期间,物流管理人员可以在系统中查看所有物品的物流信息。编写一个模拟物流快递系统的程序,模拟后台系统处理货物的过程。
- 运行结果
【案例分析】
(1)运输货物首先需要有交通工具,所以需要定义一个交通工具类。由于交通工具可能有很多,所以可以将该交通工具类定义成一个抽象类,类中需要包含该交通工具的编号,型号以及运货负责人等属性,还需要定义一个抽象的运输方法。
(2)当运输完成后,需要对交通工具进行保养,所以需要定义保养接口,具备交通工具的保养功能。
(3)交通工具可能有很多种,这里可以定义一个专用运输车类,该类需要继承交通工具类,并实现保养接口。
(4)有了运输的交通工具后,就可以开始运送货物了。货物在运输前,运输时和运输后,都需要检查和记录,并且每一个快递都有快递单号,这时可以定义一个快递任务类包含快递单号和货物重量的属性,以及送前、发送货物途中和送后的方法。
(5)在货物运输过程中,需要对运输车辆定位,以便随时跟踪货物的位置信息。定位功能可以使用GPS,而考虑到能够实现定位功能的设备可能有很多(如手机、专用定位仪器等),这时可以定义一个包含定位功能的GPS接口,以及实现了该接口的仪器类(如Phone等)。
(6)编写测试类,运行查看结果。
【案例实现】
定义交通工具类Transportation,该类是一个抽象类,包含交通工具信息和运输货物方法,其代码如文件4-26所示。
Transportation.java
- /*
- * 交通工具类
- */
- public abstract class Transportation {
- private String number; // 编号
- private String model; // 型号
- private String admin; // 运货负责人
- public Transportation() {
- super();//可省略
- }
- public Transportation(String number, String model, String admin) {
- this.number = number;
- this.model = model;
- this.admin = admin;
- }
- // 运输方法
- public abstract void transport();
- // 编号
- public void setNumber(String number) {
- this.number = number;
- }
- public String getNumber() {
- return number;
- }
- // 型号
- public void setModel(String model) {
- this.model = model;
- }
- public String getModel() {
- return model;
- }
- // 负责人
- public void setAdmin(String admin) {
- this.admin = admin;
- }
- public String getAdmin() {
- return admin;
- }
- }
在上述代码中,分别定义了车辆编号、车辆型号和车辆负责人的属性,以及其各自的getter和setter方法,同时还定义了一个抽象的运输方法transport()。
定义交通工具保养接口Careable,该接口中包含车辆保养的方法,其实现代码如下所示。
Careable.java
- /*
- * 定义保养接口,具备保养功能。
- */
- public interface Careable{
- //保养方法
- public abstract void upKeep();
- }
定义专用运输车类Ztransportation,该类继承了交通工具类,并实现了保养接口,其实现代码如下所示。
Ztransportation.java
- /*
- * 专用运输车类
- */
- public class ZTransportation extends Transportation implements Careable{
- //无参构造
- public ZTransportation() {
- super();
- }
- //有参构造:车辆编号、型号、负责人
- public ZTransportation(String number, String model, String admin) {
- super(number, model, admin);
- }
- // 运输方法
- public void transport() {
- System.out.println("运输进行中。。。");
- }
- // 重写车辆保养方法
- public void upKeep() {
- System.out.println("货物运输车辆保养完毕!");
- }
- }
定义快递任务类SendTask,该类的具体实现代码如下所示。
SendTask.java
- /*
- * 快递任务类
- */
- public class SendTask {
- private String number; // 快递单号
- private double goodsWeight; // 货物重量
- public SendTask() {
- super(); //可省略
- }
- public SendTask(String number, double goodsWeight) {
- this.number = number;
- this.goodsWeight = goodsWeight;
- }
- //送前准备
- public void sendBefore () {
- System.out.println("订单开始处理,仓库验货中。。。");
- System.out.println("货物重量:"+this.getGoodsWeight()+"kg");
- System.out.println("货物检验完毕!");
- System.out.println("货物填装完毕!");
- System.out.println("运货人已通知!");
- System.out.println("快递单号:"+this.getNumber());
- }
- //发送货物
- public void send(Transportation t,GPS tool) {
- System.out.println("运货人"+t.getAdmin()
- +"正在驾驶编号为"+t.getNumber()
- +"的"+t.getModel()+"发送货物!");
- t. transport();
- String showCoordinate = tool.showCoordinate();
- System.out.println("货物当前的坐标为:"+showCoordinate);
- }
- //送后操作
- public void sendAfter(Transportation t) {
- System.out.println("货物运输任务已完成!");
- System.out.println("运货人"+t.getAdmin()
- +"所驾驶的编号为"+t.getNumber()
- +"的"+t.getModel()+"已归还!");
- }
- public String getNumber() {
- return number;
- }
- public void setNumber(String number) {
- this.number = number;
- }
- public double getGoodsWeight() {
- return goodsWeight;
- }
- public void setGoodsWeight(double goodsWeight) {
- this.goodsWeight = goodsWeight;
- }
- }
定义包含显示位置功能的GPS接口和实现类Phone,其实现代码如GPS.java和Phone.java所示。
GPS.java
- /*
- * 定义GPS接口,具备GPS定位功能。
- */
- public interface GPS{
- //显示坐标的方法
- public String showCoordinate();
- }
Phone.java
- /*
- *定义一个手机类,实现GPS接口,拥有定位功能。
- */
- class Phone implements GPS{
- public Phone() { //空参构造
- super();
- }
- //定位方法
- public String showCoordinate() {
- String location = "193,485";
- return location;
- }
- }
定义测试类,实例化对象并传入数据,测试运行结果,其代码如下所示。
Task02Test.java
- /*
- * 定义测试类
- */
- public class Task02Test {
- public static void main(String[] args) {
- // 快递任务类对象
- SendTask task = new SendTask("HYX600235",6.34);
- // 调用送前准备方法
- task.sendBefore();
- System.out.println("======================");
- // 创建交通工具对象
- ZTransportation t = new ZTransportation("Z025","大奔","小韩");
- //创建GPS工具对象
- Phone p = new Phone();
- // 将交通工具与GPS工具传入送货方法
- task.send(t,p);
- System.out.println("======================");
- // 调用送后操作方法
- task.sendAfter(t);
- t.upKeep();
- }
- }