Java-使用集合存储快递的信息

还记得之前的快递管理吗?学习了集合以后,使用集合来进行快递信息的存储吧。

在这里插入图片描述
一共分为四个部分:

  • 快递信息部分(Express)
  • 管理员部分(快递员)(Courier)
  • 用户部分(Customer)。
  • 调用部分(Main)
  1. 第一部分是快递信息(Express)

包含了变量的建立,快递单号expressId,快递单公司company,快递柜子号数boxNum,取件码codes。以及它们的getter/setter方法、toString方法。

/**
 * 快递信息部分
 */

import java.util.Objects;

public class Express {
    private int expressId;
    private String company;
    private int boxNum;
    private int codes;
    //柜子数量设置,决定随机到的柜号范围
    int boxNumAll = 100;

    @Override
    public String toString() {
        return "Express{" +
                "expressId=" + expressId +
                ", company='" + company + '\'' +
                ", boxNum=" + boxNum +
                ", codes=" + codes +
                '}';
    }

    public Express() {}

    public Express(int expressId, String company, int boxNum, int codes) {
        this.expressId = expressId;
        this.company = company;
        this.boxNum = boxNum;
        this.codes = codes;
    }

    public int getExpressId() {
        return expressId;
    }

    public void setExpressId(int expressId) {
        this.expressId = expressId;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public int getBoxNum() {
        return boxNum;
    }

    public void setBoxNum(int boxNum) {
        this.boxNum = boxNum;
    }

    public int getCodes() {
        return codes;
    }

    public void setCodes(int codes) {
        this.codes = codes;
    }
}

  1. 第二部分是管理员(快递员)(Courier)

该部分有管理员的增(add)、删(delete)、改(change)、查(viewsAll)方法。

/**
 * 快递员操作
 */

import java.io.IOError;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

//创建Courier类继承Express类
public class Courier extends Express{
    Scanner input = new Scanner(System.in);
    //创建自动生成数据Random类的对象
    Random random = new Random();
    //创建取件码codes和柜号boxNum
    int codes = -1;
    int boxNum = -1;
    int expressNum = -1;
    //boolean类型的q元素用于判断该下面是否符合条件
    boolean q = true;
    //创建一个无参构造
    public Courier() {
    }

    //快递录入add()方法,需要传入一个ArrayList集合
    public void add(ArrayList<Express> array) throws IOError{
        //生成范围100000-999999范围的取件码,要求取件码不能重复
        h:while (true){
            //当传入的array集合为空,不判断
            if(array.size() == 0) {
                codes = random.nextInt(900000)+100000;
                break h;
            }
            //当传入的array集合不为空,进行判断,不能使得取件码重复
            for(int i = 0;i <array.size(); i++){
                //把array集合当中的第i个数据传给exp对象!这一点我也是看书看知识点看了好久,集合忘记的兄弟加油
                //创建Express对象exp,就近原则,指的是进处的exp
                Express exp = array.get(i);
                codes = random.nextInt(900000)+100000;
                if(codes != exp.getCodes()){
                    //随机生成的取件码与array集合里面的取件码不相同时就可以使用该codes
                    break h;
                }
            }
            //该break避免当for循环走完仍未找到合适的取件码时跳出,这是一个bug
            break;
        }

        //系统自动生成柜子号码,且保证不能重复柜子号,原理与生成取件码一样
        k:while (true){
            Express exp = new Express();
            if(array.size() == 0){
                boxNum = random.nextInt(exp.boxNumAll);
                break;
            }
            for(int i = 0;i <array.size(); i++){
                exp = array.get(i);
                boxNum = random.nextInt(exp.boxNumAll);
                if(boxNum != exp.getBoxNum()){
                    break k;
                }
            }
            break;
        }

        //用户输入快递单号、公司名称,写入集合
        System.out.println("请输入快递单号:");
        String num = input.nextLine();
        try{
            expressNum = Integer.parseInt(num);
        }catch (NumberFormatException e){
            System.out.println("输入有误请重新操作!");
        }
        if(expressNum != -1) {
            Express exp = new Express();
            //确保快递单号已写入
            for (int i = 0; i < array.size(); i++) {
                exp = array.get(i);
                if (exp.getExpressId() == expressNum) {
                    System.out.println("该快递已存在,请重新操作");
                    q = false;
                    break;
                }
            }
        }
        if (q == true) {
            Express exp = new Express();
            //注意,前面生成的取件码、柜号,输入的单号都还未存储到集合当中
            System.out.println("请输入快递公司:");
            String company = input.nextLine();
            //把取件码、柜号,输入的单号都存储到对象当中
            exp.setBoxNum(boxNum);
            exp.setCompany(company);
            exp.setExpressId(expressNum);
            exp.setCodes(codes);
            //把对象数据存进array集合
            array.add(exp);
            System.out.println("快递存储成功!");
            //打印快递信息
            System.out.println(exp);
        }
    }

    //快递员的删除操作delete()方法,传入一个ArrayList的集合
    public void delete(ArrayList<Express> array){
        System.out.println("请输入要删除的单号:");
        String num = input.nextLine();
        int expressId = -1;
        try{
            expressId = Integer.parseInt(num);
        }catch (NumberFormatException n){
            System.out.println("输入有误请重新操作");
        }
        if(expressId != -1){
            for(int i = 0;i < array.size(); i++){
                Express exp = new Express();
                exp = array.get(i);
                if(exp.getExpressId() == expressId){
                    //删除快递信息
                    array.remove(i);
                    System.out.println("快递删除成功!");
                    break;
                }else if(i == array.size()-1){
                    //遍历以后未找到快递
                    System.out.println("没有找到快递,请检查单号是否正确,重新进行操作");
                    break;
                }
            }
        }
    }

    //快递员修改信息操作
    public void change(ArrayList<Express> array){
        System.out.println("请输入需要修改的快递的单号:");
        String num = input.nextLine();
        int expressId = -1;
        try{
            expressId = Integer.parseInt(num);
        }catch (NumberFormatException e){
            System.out.println("输入有误,请重新操作");
        }
        if(expressId != -1) {
            for (int i = 0; i < array.size(); i++) {
                Express exp = new Express();
                exp = array.get(i);
                if (exp.getExpressId() == expressId) {
                    System.out.println("请输入要修改的选项\n1.单号\n2.公司");
                    String temp = input.nextLine();
                    int s = -1;
                    try {
                        s = Integer.parseInt(temp);
                    } catch (NumberFormatException n) {
                        System.out.println("输入有误请重新操作");
                    }
                    switch (s) {
                        case 1: {
                            System.out.println("请输入修改后的单号:");
                            int newExpressId = input.nextInt();
                            exp.setExpressId(newExpressId);
                            System.out.println("修改成功");
                            break;
                        }
                        case 2: {
                            System.out.println("请输入修改后的公司:");
                            String newCompany = input.nextLine();
                            exp.setCompany(newCompany);
                            System.out.println("修改成功");
                            break;
                        }
                        default:
                            System.out.println("输入有误请重新操作");
                            break;
                    }
                } else if (i == array.size() - 1) {
                    //遍历结束未找到指定信息
                    System.out.println("没有找到快递,请检查单号是否正确");
                    break;
                }
            }
        }
    }

    //快递员查看所有快递操作
    public void viewsAll(ArrayList<Express> array){
        Express exp = new Express();
        if(array.size() == 0){
            System.out.println("还未存储快递");
        }else{
            //Express exp = new Express();
            for(int i = 0;i < array.size(); i++){
                exp = array.get(i);
                System.out.println(exp);
            }
        }
    }
}
  1. 第三部分是用户(Customer)

该部分就有一个取出快递并且删除快递的功能。

/**
 * 用户部分
 */

import java.util.ArrayList;
import java.util.Scanner;

//继承Express类
public class Customer extends Express {
    Scanner input = new Scanner(System.in);
    Express e = new Express();
    int codes = -1;
    //用来标记柜子是否被存入
    boolean b = false;
    //无参构造
    public Customer() {
    }

    //取件getExpress()方法,传入一个ArrayList集合
    public void getExpress(ArrayList<Express> array){
        System.out.println("-----进入取件系统-----");
        System.out.println("请输入6位取件码");
        String c = input.nextLine();
        try{
            codes = Integer.parseInt(c);
        }catch (NumberFormatException n){
            System.out.println("输入有误,请根据提示重新操作");
            getExpress(array);
        }
        for(int i=0;i<array.size();i++){
            e = array.get(i);
            if(e.getCodes() == codes){
                System.out.println(e+"柜门已打卡,请取走快递!");
                //删除快递
                array.remove(i);
                b = true;
            }
        }
        if(b == false){
            System.out.println("为找到该快递,请联系快递公司或重新操作!");
        }
    }
}

功能方法都写出来了,剩下就是调用了:

4. Main函数调用部分:

/**
 * main函数部分
 */

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        ///创建Scanner对象input支持输入
        Scanner input = new Scanner(System.in);
        //创建ArrayList<>集合对象,存储数据
        ArrayList<Express> array = new ArrayList<>();

        //使用while(true)死循环不断的纠正用户输入
        p:while (true){
            //提示用户输入
            System.out.println("请输入选项\n1.快递员\n2.用户\n0.退出");
            //创建Courier、Custoer对象
            Courier co = new Courier();
            Customer cu = new Customer();
            //全局使用input.nextLine()接收不会导致接收错误
            String a = input.nextLine();
            //用于检验接收输入是否成功,使用try-catch判断
            int index = -1;
            try {
                //使用Integer.parseInt()方法转化为int类型的数据
                index = Integer.parseInt(a);
            }catch (NumberFormatException e){
                System.out.println("输入有误,请重新输入");
            }
            //赋值成功进入下一步
            if(index != -1) {
                //使用switch()分支语执行用户选项
                switch (index) {
                    case 0:
                        //退出,直接终止死循环while(true)
                        System.out.println("退出成功,再见");
                        break p;
                    case 1: {
                        //快递员选项,功能列表
                        System.out.println("选择快递员功能:\n1.录入快递\n2.修改快递\n" +
                                "3.删除快递\n4.查看所有快递\n0.退出");
                        //接收选项
                        String num = input.nextLine();
                        int temp = -1;
                        try {
                            temp = Integer.parseInt(num);
                        } catch (NumberFormatException n) {
                            System.out.println("输入有误,请重新操作");
                        }
                        //再次使用switch()分支语句接收用户输入选项
                        switch (temp) {
                            case 0:
                                //直接退出该分支语句
                                break;
                            case 1:
                                //录入快递,调用Curier类的add方法,传入一个ArrayList集合
                                co.add(array);
                                break;
                            case 2:
                                //修改快递,调用Curier类的change()方法,传入一个ArrayList集合
                                co.change(array);
                                break;
                            case 3:
                                //删除快递,调用Curier类的delete()方法,传入一个ArrayList集合
                                co.delete(array);
                                break;
                            case 4:
                                //查看所有快递,调用Curier类的viewAll()方法,传入一个ArrayList集合
                                co.viewsAll(array);
                                break;
                            default:
                                //选项都不能匹配,输入有误,回到首页菜单
                                System.out.println("输入有误,请重新操作");
                        }
                    }
                        //该break的存在是以为得符合switch语法规则
                        break;
                    case 2:
                        //选择用户,传入一个ArrayList集合
                        cu.getExpress(array);
                        break;
                    default:
                        System.out.println("您的输入有误,请重新操作!");
                        break;
                }
            }
        }
    }
}

有些有bug的地方,希望大家多多指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值