使用集合书写快递存取项目

之前的时候用过数组书写快递的存取项目,最近学了集合,开始使用集合来书写快递存取,之后在引入IO流和本地文件联系起来。

首先先写一个Case类,声明快递对象和私有属性
这个类没什么说的,声明之后,生成get,set方法,有参和无参的构造函数,toString方法。
上代码

public class Case2 {
    //快递单号
    private int expressNum;
    //快递公司名称
    private String companyName;
    //柜子号码
    private int boxNum;
    //取件码
    private int  getExpressNum;
    //用来判断柜子是否存放了东西
    boolean []tag =  new boolean[25];

    @Override
    public String toString() {
        return "Case{" +
                "expressNum=" + expressNum +
                ", companyName='" + companyName + '\'' +
                ", boxNum=" + boxNum +
                ", getExpressNum=" + getExpressNum +
                '}';
    }

    public Case2() {
    }

    public Case2(int expressNum, String companyName, int boxNum, int getExpressNum) {
        this.expressNum = expressNum;
        this.companyName = companyName;
        this.boxNum = boxNum;
        this.getExpressNum = getExpressNum;
    }

    public int getExpressNum() {
        return expressNum;
    }

    public void setExpressNum(int expressNum) {
        this.expressNum = expressNum;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public int getBoxNum() {
        return boxNum;
    }

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

    public int getGetExpressNum() {
        return getExpressNum;
    }

    public void setGetExpressNum(int getExpressNum) {
        this.getExpressNum = getExpressNum;
    }
}

既然类和属性生成完了之,个人习惯先写框架,然后根据框架写具体的实现类,不过这样会很多地方爆红,这也是比较头秃的。这里的Text当门口,用于实现具体的门户操作。
这里有个不合适的地方,那么多个if else其实是比较麻烦的,可以用switch case,但是实在不是很习惯这个,就用的if else。读者可以很据这个代码进行具体的优化,本人也是小白一枚,代码很多地方也是不可取的。


import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Text2 {
    public static void main(String[] args) throws IOException {

        ArrayList<Case2> array = new ArrayList<Case2>();

        while(true){
            System.out.println("请输入你的身份:1.管理员,2.顾客,3.退出");
            Scanner input = new Scanner(System.in);
            int a = input.nextInt();
            if(a==1){
                Courier2 co = new Courier2();
                System.out.println("请选择管理员功能:1.快递录入,2.删除快递,3.修改快递,4.查看所有快递,5.退出");
                while (true) {
                    int b = input.nextInt();
                    if (b == 1) {
                        co.add(array);
                        break;
                    } else if (b == 2) {
                        co.delete(array);
                        break;
                    } else if (b == 3) {
                        co.change(array);
                        break;
                    } else if (b == 4) {
                        co.lookup(array);
                        break;
                    }else {
                        break;
                    }
                }
            }else if(a==2){
                Customer2 cu = new Customer2();
                cu.getexpress(array);
            }else if(a==3){
                System.out.println("再见!");
                break;
            }else {
                System.out.println("您输入的号码有误,请重新输入!");
            }
        }

    }
}

门口写好了,接下来就写具体的实现类,先是管理员,因为管理员要实现具体的对快递的增删改查,这里的Courier2就是具体的管理员类,里面包含增加快递,删除快递,修改快递,查看所有快递四种方法。用于对接门口Text。


import com.sun.deploy.util.ArrayUtil;
import com.sun.org.apache.regexp.internal.RE;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Courier2 extends Case2{
    public Courier2() {
    }
    //继承父类的数据
    public Courier2(int expressNum, String companyName, int getExpressNum, int boxNum) {
        super(expressNum, companyName, getExpressNum, boxNum);
    }

    //快递的录入
    public void add(ArrayList<Case2> array) throws IOException {
        int box=0;
        int q = 0;

        //系统自动生成取件码
        Random r = new Random();
        StringBuilder result = new StringBuilder();
        for (int i=0;i<6;i++){
            result.append(r.nextInt(10));
        }
        setGetExpressNum(Integer.parseInt(result.toString()));


        //系统自动生成柜子号码
        for(int i=0;i<tag.length;i++){
            box = r.nextInt(25);
            if(!tag[box]){
                setBoxNum(box);
                /*System.out.println("快递信息已录入。");
                System.out.println("-------感谢使用-------");*/
                tag[box] = true;
                break;
            }
        }
        String b =String.valueOf(box);

        //用户输入快递单号和公司名称,写入集合
        System.out.println("请输入快递单号:");
        Scanner input = new Scanner(System.in);
        int expressNum = input.nextInt();

        for (int i=0;i<array.size();i++){
            Case2 c = array.get(i);
            if(c.getExpressNum()==expressNum){
                System.out.println("输入的快递单号有重复,请检查后重新输入!");
                q++;
                break;
            }
        }
        if(q==0){
            System.out.println("请输入快递公司名:");
            String companyName = input.next();
            Case2 c = new Case2();
            c.setExpressNum(expressNum);
            c.setBoxNum(box);
            c.setCompanyName(companyName);
            c.setGetExpressNum(getGetExpressNum());
            array.add(c);
            System.out.println("快递添加成功!");
            System.out.println("取件码为:"+getGetExpressNum());
        }
    }


    //管理员的删除操作
    void delete(ArrayList<Case2> array){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要删除的快递单号:");
        int expressNum = input.nextInt();
        for (int i=0;i<array.size();i++){
            Case2 c = array.get(i);
            if(c.getExpressNum()==expressNum){
                array.remove(i);
                System.out.println("删除该快递成功!");
                break;
            }else if(i==array.size()-1){
                System.out.println("没有找到该快递,请检查快递单号的输入是否正确!");
                break;
            }
        }
    }

    //管理员的快递信息修改操作
    void change(ArrayList<Case2> array){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要修改的快递单号:");
        int expressNum = input.nextInt();
        for (int i=0;i<array.size();i++){
            Case2 c = array.get(i);
            if(c.getExpressNum()==expressNum){
                System.out.println("请输入要修改的内容");
                System.out.println("1.快递单号  2.快递公司名称");
                String q = input.next();
                System.out.println("请输入修改后的内容:");
                String date = input.next();
                switch (q){
                    case "1":c.setExpressNum(Integer.valueOf(date));
                        System.out.println("修改成功!");
                        break;
                    case "2":c.setCompanyName(date);
                        System.out.println("修改成功!");
                        break;
                }
            }else if(i==array.size()-1){
                System.out.println("没有找到该快递,请检查快递单号的输入是否正确!");
                break;

            }
        }

    }


    //管理员的查看所有快递信息操作
    void lookup(ArrayList<Case2> array){
        if(array.size()==0){
            System.out.println("暂时没有快递!");
        }else {
            System.out.println();
            for (int i=0;i<array.size();i++){
                Case2 c = array.get(i);
                System.out.println("柜子号:"+c.getBoxNum());
                System.out.println("快递单号:"+c.getExpressNum());
                System.out.println("公司名称:"+c.getCompanyName());
                System.out.println("取件码:"+c.getGetExpressNum());
            }
        }

    }
}

最后就是客户的取件操作了,客户通过对集合的读取,根据取件码信息来拿快递。



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

public class Customer2 extends Case2{
    public Customer2() {
    }

    public Customer2(int expressNum, String companyName, int boxNum, int getExpressNum) {
        super(expressNum, companyName, boxNum, getExpressNum);
    }

    //客户取件
    public void getexpress(ArrayList<Case2> array){
        System.out.println("--------------");
        Scanner input = new Scanner(System.in);
        System.out.println("欢迎取件,请输入6位取件码");
        /*String expressNum = input.next();
        int ex = Integer.parseInt(expressNum);*/
        int expressNum = input.nextInt();
        //flag定义的是一个有25个长度的布尔类型的数组,用来标记存入柜子的类型
        boolean flag = true;
        for(int i=0;i<array.size();i++){
            Case2 c = array.get(i);
            if(c.getExpressNum()!=0){
                if(c.getExpressNum()==expressNum){
                    System.out.println("您的快递单号为:"+c.getExpressNum()+",在第:"+c.getBoxNum()+"号柜,快递柜已经成功打开");
                    tag[i] = false;
                    flag = false;
                    System.out.println("------欢迎下次使用------");
                }
            }
        }
        if(flag){
            System.out.println("未找到指定快递,请尝试重新输入或联系快递公司");
        }
    }
}

以上就是用集合存储快递的全部代码,一共是四部分,简单的面向对象和集合知识点,欢迎大家在学习的同时给予指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值