快递E栈(控制台简易版)

废话不多说,直接上代码。

package homework.chapter2.section2;

import java.util.Scanner;

public class Express {

    /**
     * 快递柜中最多有100个柜子
     */
    static MyPackage[] myPackages = new MyPackage[100];
    
    /**
     * counter变量保存快递柜中现有多少个柜子存放了快递
     */
    static int counter = 0;

    public static void main(String[] args) {
        Menu.mainMenu();
        while (true) {
            int temp = Operator.setSelect();
            if (temp == 1) {
                Menu.courierMenu();
                switch (Operator.setSelect()) {
                    case 1:
                        Courier.add();
                        break;
                    case 2:
                        Courier.deleteByTrackingNumber();
                        break;
                    case 3:
                        Courier.modify();
                        break;
                    case 4:
                        Courier.viewAll();
                        break;
                    default:
                        System.out.println("您输入的操作代码有误!");
                        break;
                }

            } else if (temp == 2) {
                Menu.userMenu();
                User.getPackage();
            } else {
                System.out.println("您输入的用户类型不存在,请重新输入!");
                Menu.mainMenu();
            }
        }
    }
}

/**
 * Menu类存放菜单视图
 */
class Menu {

    /**
     * 主菜单
     */
    public static void mainMenu() {
        System.out.println("=====欢迎使用新职课快递柜=====");
        System.out.println("请输入您的身份:1-快递员,2-用户");
    }

    /**
     * 快递员操作菜单
     */
    public static void courierMenu() {
        System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
    }

    /**
     * 用户操作菜单
     */
    public static void userMenu() {
        System.out.println("请输入取件码:");
    }
}

/**
 * Operator类存放各种通用操作方法
 */
class Operator {

    static private Scanner scanner = new Scanner(System.in);
    static private int select = 0;
    static private String trackingNumber = null;
    static private String company = null;
    static private String code = null;

    /**
     * 定义选择操作者身份的方法
     */
    public static int setSelect() {
        select = scanner.nextInt();
        return select;
    }

    /**
     * 定义输入快递单号的方法
     */
    public static String setTrackingNumber() {
        trackingNumber = scanner.next();
        return trackingNumber;
    }

    /**
     * 定义输入快递公司的方法
     */
    public static String setCompany() {
        company = scanner.next();
        return company;
    }

    /**
     * 定义生成取件码的方法(以生成3位取件码为例,此处假设取件码不会重复输入,判重功能待后期完善)
     */
    public static String setCode() {
        int i1, i2, i3;
        i1 = (int) (Math.random() * 10);
        i2 = (int) (Math.random() * 10);
        i3 = (int) (Math.random() * 10);
        code = Integer.toString(i1) + Integer.toString(i2) + Integer.toString(i3);
        return code;
    }

    /**
     * 定义获取取件码的方法
     */
    public static String getCode() {
        code = scanner.next();
        return code;
    }
}

/**
 * 定义Package快递包裹类
 */
class MyPackage {

    /**
     * 快递单号
     */
    String trackingNumber;

    /**
     * 快递公司名称
     */
    String company;

    /**
     * 取件码
     */
    String code;
}

/**
 * 定义快递员操作类
 */
class Courier {

    /**
     * 定义快递员新增快递信息的方法
     */
    public static void add() {
        if (Express.counter >= 100) {
            System.out.println("快递柜已满,无法放入更多包裹!");
            Menu.mainMenu();
        } else {
            MyPackage myPackage = new MyPackage();
            System.out.println("请输入快递单号:");
            myPackage.trackingNumber = Operator.setTrackingNumber();
            System.out.println("请输入公司名称:");
            myPackage.company = Operator.setCompany();
            myPackage.code = Operator.setCode();
            System.out.println("快递已存入,取件码是:" + myPackage.code);
            Express.myPackages[Express.counter++] = myPackage;
            Menu.mainMenu();
        }
    }

    /**
     * 定义快递员根据快递单号删除快递信息的方法
     */
    public static void deleteByTrackingNumber() {
        // 快递柜已空
        if (Express.counter <= 0) {
            System.out.println("快递柜已空,没有待删除的快递信息!");
            Menu.mainMenu();
        } else {    // 快递柜内还有包裹
            boolean flag = false;
            System.out.println("请输入要删除的快递单号:");
            String trackingNumber = Operator.setTrackingNumber();
            for (int i = 0; i < Express.counter; i++) {
                // 找到相应快递单号的快递信息(此处假设快递单号不会重复输入,判重功能待后期完善)
                if (Express.myPackages[i].trackingNumber.equals(trackingNumber)) {
                    // 先把i下标的元素置为null,之后直到counter之间的快递信息在数组中前移一个位置,相当于抹去了i记录
                    Express.myPackages[i] = null;
                    for (int j = i + 1; j < Express.counter; j++) {
                        Express.myPackages[i] = Express.myPackages[j];
                    }
                    // 柜中快递数量减1
                    Express.counter--;
                    flag = true;
                    System.out.println("删除成功。");
                    Menu.mainMenu();
                    break;
                }
            }

            if (!flag) {
                System.out.println("未找到快递。");
                Menu.mainMenu();
            }
        }
    }

    /**
     * 定义快递员根据取件码删除快递信息的方法
     */
    public static void deleteByCode(String code) {
        // 快递柜已空
        if (Express.counter <= 0) {
            System.out.println("快递柜已空,没有待删除的快递信息!");
            Menu.mainMenu();
        } else {    // 快递柜内还有包裹
            for (int i = 0; i < Express.counter; i++) {
                // 找到相应快递单号的快递信息(此处假设快递单号不会重复输入,判重功能待后期完善)
                // 由于是用户取件成功后才调用该方法删除被取出的快递信息,所以取件码一定存在
                if (Express.myPackages[i].code.equals(code)) {
                    // 先把i下标的元素置为null,之后直到counter之间的快递信息在数组中前移一个位置,相当于抹去了i记录
                    Express.myPackages[i] = null;
                    for (int j = i + 1; j < Express.counter; j++) {
                        Express.myPackages[i] = Express.myPackages[j];
                    }
                    // 柜中快递数量减1
                    Express.counter--;
                    break;
                }
            }
        }
    }

    /**
     * 定义快递员修改快递信息的方法
     */
    public static void modify() {
        // 快递柜已空
        if (Express.counter <= 0) {
            System.out.println("快递柜已空,没有待修改的快递信息!");
            Menu.mainMenu();
        } else {    // 快递柜内还有包裹
            boolean flag = false;
            System.out.println("请输入要修改的快递单号:");
            String trackingNumber = Operator.setTrackingNumber();
            for (int i = 0; i < Express.counter; i++) {
                // 找到相应快递单号的快递信息(此处假设快递单号不会重复输入,判重功能待后期完善)
                if (Express.myPackages[i].trackingNumber.equals(trackingNumber)) {
                    System.out.println("请输入新的快递单号:");
                    Express.myPackages[i].trackingNumber = Operator.setTrackingNumber();
                    System.out.println("请输入新的公司名称:");
                    Express.myPackages[i].company = Operator.setCompany();
                    flag = true;
                    System.out.println("修改成功。");
                    Menu.mainMenu();
                    break;
                }
            }

            if (!flag) {
                System.out.println("未找到快递。");
                Menu.mainMenu();
            }
        }
    }

    /**
     * 定义快递员查看所有快递信息的方法
     */
    public static void viewAll() {
        System.out.println("快递单号\t\t" + "公司名称\t\t" + "取件码\t\t");

        for (int i = 0; i < Express.counter; i++) {
            System.out.println(Express.myPackages[i].trackingNumber + "\t\t" +
                    Express.myPackages[i].company + "\t\t" + Express.myPackages[i].code + "\t\t");
        }
        Menu.mainMenu();
    }
}

/**
 * 定义用户操作类
 */
class User {

    public static void getPackage() {
        String code = Operator.getCode();
        // 快递柜已空
        if (Express.counter <= 0) {
            System.out.println("快递柜已空,没有可取出的包裹!");
        } else {    // 快递柜内还有包裹
            for (int i = 0; i < Express.counter; i++) {
                if ((Express.myPackages[i].code).equals(code)) {
                    System.out.println("取件成功。");
                    // 取件成功后要删除该取件码所对应的快递(此处假设取件码不会重复生成,判重功能待后期完善)
                    Courier.deleteByCode(code);
                    Menu.mainMenu();
                    break;
                }
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值