要求:
完成以下功能,实现效果如图(要求:1.添加商品编号不能重复2.删除和退出时都应给出提示,用户确定后,再删除3.可借用我们的Utility来优化用户体验)
大概功能:

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
1

==========商品库存清单==========
商品编号	    商品名称			  商品单价
9001	 少林寺酥饼核桃	       120.0	
9002	 尚康杂粮牡丹饼	       20.0	
9003	 新疆原产哈蜜瓜	       7.0	

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
2

请输入新水果的名称:
红心柚子
请输入新水果的编号:
9004
请输入新水果的单价:
16
新商品已添加成功!

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
1

==========商品库存清单==========
商品编号	   商品名称			商品单价
9001	少林寺酥饼核桃	    120.0	
9002	尚康杂粮牡丹饼		20.0	
9003	新疆原产哈蜜瓜		7.0	
9004	红心柚子			    16.0	

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
3

请输入您要删除的水果编号
9004
你确定要删除该水果吗?(y/n)
Y
水果信息删除完毕!

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
1

==========商品库存清单==========
商品编号	  商品名称			商品单价
9001	少林寺酥饼核桃	     120.0	
9002	尚康杂粮牡丹饼		 20.0	
9003	新疆原产哈蜜瓜		 7.0	

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
4

请输入您要修改信息的水果编号:
9003
请输入新的水果编号:
9004
请输入新的水果名称:
究极哈密瓜
请输入新的水果单价:
25
水果信息更新完毕!

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
1

==========商品库存清单==========
商品编号  	商品名称			商品单价
9001	少林寺酥饼核桃		120.0	
9002	尚康杂粮牡丹饼		20.0	
9004	究极哈密瓜			25.0	

==========欢迎光临 oracle 超市==========
1:货物清单 2:添加新货物 3:删除货物 4:修改货物
5:退出系统
请您输入要操作的功能序号:
5
你确定要退出吗?(y/n)
Y    
您已退出系统

在这里因为有增删改查的功能,所以我们先创建一个类,来定义这些属性。
定义类:

public class Pro {
    private String num;  //商品编号
    private String name; //商品名称
    private double price; //商品单价

    public Pro() {
    }

    public Pro(String num, String name, double price) {
        this.num = num;
        this.name = name;
        this.price = price;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

创建完定义类后,我们在创建一个java文件用来做测试,在这里我们先定义属性,在构造有参无参方法,在构造get、set方法。
随后我们按照它的要求一步一步的来,首先我们将它要求的基本信息录入,因为在这里这个商品信息是不确定的,所以我们不能有数组来录入它的信息,在这里我们用ArrayList创建集合,因为集合的底层是数组实现的,长度可以变化 。
然后录入:

public static void main(String[] args) {
        ArrayList<Pro> array = new ArrayList<>();
        Pro p1 = new Pro();
        p1.setName("少林寺酥饼核桃");
        p1.setNum("9001");
        p1.setPrice(120.0);

        Pro p2 = new Pro();
        p2.setName("尚康杂粮牡丹饼");
        p2.setNum("9002");
        p2.setPrice(20.0);

        Pro p3 = new Pro();
        p3.setName("新疆原产哈蜜瓜");
        p3.setNum("9003");
        p3.setPrice(7.0);

然后将录入的信息添加到集合中去:

array.add(p1);
        array.add(p2);
        array.add(p3);

之后我们再实现商品查看功能,还有程序选择功能,因为在这里我们要多次进行增删改查功能,所以在这里我们用死循环,先输出程序开始界面,在这里我们在进行选择:
之后通过条件语句Switch,根据用户不同的选择,调用不同的方法从而实现不同的功能,

while (true) {
            System.out.println("==========欢迎光临 oracle 超市==========");
            System.out.println("1. 货物清单");
            System.out.println("2. 添加新货物");
            System.out.println("3. 删除货物");
            System.out.println("4. 修改货物");
            System.out.println("5. 退出系统");
            System.out.println("请您输入要操作的功能序号:");
            Scanner sc = new Scanner(System.in);
            int i = sc.nextInt();
            switch (i) {
                case 1:
                    findarray(array);
                    break;
                case 2:
                    addarray(array);
                    break;
                case 3:
                    deletearray(array);
                    break;
                case 4:
                    updateStudent(array);
                    break;
                case 5:
                    tui();
            }
        }

功能1:货物清单。按照要求,将初始页面输出,这里我们通过遍历集合就可以得到集合中的所有数据。

private static void findarray(ArrayList<Pro> array) {
        System.out.println("==========商品库存清单==========");
        System.out.println("商品编号\t\t\t商品名称\t\t\t\t商品价格");
        for (int i = 0; i < array.size(); i++) {
            Pro s = array.get(i);
            System.out.println(s.getNum() + "\t\t\t" + s.getName() + "\t\t" + s.getPrice());
        }
    }

功能2:添加新货物。在这里我是用了两个方法,第一个方法是通过创建对象,通过set方法给这个对象赋值,最后天极爱到这个集合中去,而第二个方法就是判断,新添加的商品的编号,是否重复,在这里我们也是通过一个死循环来方便我们的添加。

public static void addarray(ArrayList<Pro> array) {
        //键盘录入商品对象所需要的数据,显示提示信息,提示要输入何种信息
        Scanner sc = new Scanner(System.in);
        String num;
        while (true) {
            System.out.println("请输入新水果的商品编号:");
            num = sc.nextLine();

            boolean flag = isUsed(array, num);
            if (flag) {
                System.out.println("你输入的商品编号已经被占用,请重新输入!");
            } else {
                break;
            }
        }
        System.out.println("请输入新水果的名称:");
        String name = sc.nextLine();
        System.out.println("请输入新水果的价格:");
        double price = sc.nextDouble();
        //创建新的对象,把键盘录入的数据赋值给对象的成员变量
        Pro p = new Pro();
        p.setName(name);
        p.setNum(num);
        p.setPrice(price);
        array.add(p);
        System.out.println("新商品已添加成功!");
    }

    //定义一个方法,判断商品编号是否被使用
    public static boolean isUsed(ArrayList<Pro> array, String num) {
        //如果与集合中的某一个商品编号相同,返回true;如果都不相同,返回false
        boolean flag = false;

        for (int i = 0; i < array.size(); i++) {
            Pro s = array.get(i);
            if (s.getNum().equals(num)) {
                flag = true;
                break;
            }
        }
        return flag;
    }

功能3:删除货物信息。首先接受要删除的货物编号,通过遍历集合进行寻找,如果找的这个信息,就往下执行,没有就输出编号错误。根据要求,在删除前再次进行删除询问,然后给出提示信息。

public static void deletearray(ArrayList<Pro> array) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要删除的水果编号:");
        String s = sc.nextLine();
        int a = -1;
        for (int i = 0; i < array.size(); i++) {
            Pro p = array.get(i);
            if (p.getNum().equals(s)) {
                a = i;
                break;
            }
        }

        if (a == -1) {
            System.out.println("你输入的编号有误!");
            return;
        }
        System.out.println("你确定要删除该水果吗?(y/n)");
        String ss = sc.nextLine();
        if (ss.equals("y")) {
            array.remove(a);
            System.out.println("水果信息删除完毕!");
        } else {
            return;
        }
    }

功能4:修改货物信息。大体方法一致,首先通过键盘录入接受这些数据,其次创建一个对象,通过set方法进行赋值,在通过遍历寻找要修改的信息再用array.set方法添加到集合中去。

public static void updateStudent(ArrayList<Pro> array) {
        Scanner sc = new Scanner(System.in);
        //键盘录入要修改的水果编号,显示提示信息
        System.out.println("请输入您要修改信息的水果编号:");
        String s = sc.nextLine();

        //录入修改的信息
        System.out.println("请输入新的水果编号:");
        String num = sc.nextLine();
        System.out.println("请输入新的水果名称:");
        String name = sc.nextLine();
        System.out.println("请输入新的水果单价:");
        double price = sc.nextDouble();

        //创建对象
        Pro a = new Pro();
        a.setNum(num);
        a.setName(name);
        a.setPrice(price);

        for (int i = 0; i < array.size(); i++) {
            Pro p = array.get(i);
            if (p.getNum().equals(s)) {
                array.set(i, a);
            }
        }
        System.out.println("水果信息更新完毕!");
    }

功能5:退出系统。在这里根据要求给与相应的提示,通过键盘录入得到结果,而System.exit(0);是退出JVM的代码,用户确定退出,则输出提示语句,进行退出。

public static void tui() {
        Scanner sc = new Scanner(System.in);
        System.out.println("你确定要退出吗?(y/n)");
        String s = sc.nextLine();
        if (s.equals("y")) {
            System.out.println("您已退出系统");
            System.exit(0);
        } else if (s.equals("n")) {
            return;
        }
    }