JAVA 技术方向赏金任务-快递 E 栈训练任务

用数组实现以下截图功能,作为用户或者快递员实现快递存储和拿取功能

 

 

 

代码如下:

import java.util.Scanner;

public class Delivery {

    //默认存储1000条记录
    static int length = 1000;
    static int[] deliveryNumber = new int[length];
    static String[] companys = new String[length];
    static int[] deliveryCode = new int[length];
    //用于存储快递的index
    static int index = 0;

    public static void main(String args[]) {
        startSession();
    }

    private static void startSession() {
        System.out.println("=====欢迎使用新职课快递柜=====");
        System.out.println("请输入您的身份:1-快递员,2-用户");
        Scanner sc = new Scanner(System.in);
        int type = sc.nextInt();
        switch (type) {
            case 1:
                deliveryChoose();
            case 2:
                userChoose();
            default:
                System.out.println("输入您的身份请选择1或者2!");
                startSession();
        }
    }

    private static void deliveryChoose() {
        System.out.println("请选择操作:1-存快递 2-删除快递 3-修改快递信息 4-查看所有快递");
        Scanner delivertCho = new Scanner(System.in);
        int decision = delivertCho.nextInt();
        switch (decision) {
            case 1:
                saveDelivery();
            case 2:
                deleteDelivery();
            case 3:
                modifyDelivery();
            case 4:
                checkDelivery();
            default:
                System.out.println("输入有误,请重新开始");
                startSession();
        }
    }

    private static void saveDelivery() {
        System.out.println("请输入快递单号: ");
        Scanner deliverNumber = new Scanner(System.in);
        deliveryNumber[index] = deliverNumber.nextInt();
        System.out.println("请输入公司名称: ");
        Scanner companyStr = new Scanner(System.in);
        companys[index] = companyStr.next();
        int randomNum = (int) Math.round((Math.random() + 1) * 1000);
        deliveryCode[index] = randomNum;
        System.out.println("快递已存入,取件码是: " + randomNum);
        index++;
        startSession();
    }

    private static void deleteDelivery() {
        boolean isDelete = false;
        System.out.println("请输入要删除的快递单号: ");
        Scanner delete = new Scanner(System.in);
        int deleteNumber = delete.nextInt();
        for (int i = 0; i < length - 1; i++) {
            if (deliveryNumber[i] == deleteNumber) {
                deliveryNumber[i] = 0;
                companys[i] = "";
                deliveryCode[i] = 0;
                isDelete = true;
                break;
            }
        }
        if (isDelete)
            System.out.println("删除成功");
        else
            System.out.println("未找到快递");
        startSession();
    }

    private static void modifyDelivery() {
        boolean isModify = false;
        System.out.println("请输入要修改的快递单号: ");
        Scanner modify = new Scanner(System.in);
        int modifyNumber = modify.nextInt();
        for (int i = 0; i < length - 1; i++) {
            if (deliveryNumber[i] == modifyNumber) {
                System.out.println("请输入新的快递单号: ");
                Scanner newNumber = new Scanner(System.in);
                int newModifyNumber = newNumber.nextInt();
                System.out.println("请输入新的公司名称: ");
                Scanner newCompany = new Scanner(System.in);
                String newModifyCompany = newCompany.next();
                deliveryNumber[i] = newModifyNumber;
                companys[i] = newModifyCompany;
                isModify = true;
                break;
            }
        }
        if(isModify)
            System.out.println("修改成功");
        else
            System.out.println("未找到对应快递");
        startSession();
    }

    private static void checkDelivery() {
        System.out.println("所有快递信息如下: ");
        System.out.printf("%-9s%-9s%-9s\n", "快递单号", "公司名称", "取件码");
        for (int i = 0; i < length - 1; i++) {
            if (deliveryNumber[i] != 0 && deliveryCode[i] != 0) {
                System.out.printf("%-9d%-9s%-9d\n", deliveryNumber[i], companys[i], deliveryCode[i]);
            }
        }
        startSession();
    }

    private static void userChoose() {
        boolean isPick = false;
        System.out.println("请输入取件码:");
        Scanner userCho = new Scanner(System.in);
        int code = userCho.nextInt();
        for (int i = 0; i < length - 1; i++) {
            if (code == deliveryCode[i]) {
                deliveryNumber[i] = 0;
                companys[i] = "";
                deliveryCode[i] = 0;
                isPick = true;
                break;
            }
        }
        if(isPick)
            System.out.println("取件成功");
        else
            System.out.println("未找到该快递");
        startSession();
    }
}

实现效果如上,可改进的地方:

1. 可以用"\t"实现输出全部快递保持对齐,\t即tab

2. 删除我用0或者""替代,可以用null或者前一个替代后一个移位处理,但是会更花费时间,后续可以考虑绑定,用map(key-value)来存储

3. Scanner 可以不用每次都new,浪费资源,直接一开始new的一直用sc.next()取下一个值即可,如果同时使用nextLine()注意换行符的问题,这也是IO机考会出现的问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值