Java简单项目 水果摊

项目名

水果摊售货系统

项目描述

该系统类似于超市收银系统,由收银员操作,包括添加商品进购物车,结账及找零

控制台界面

具体功能

        1. 查看是水果列表

        2. 购买水果(可以是输入水果名,也可以是输入水果编号)

        3. 查看购物车

        4. 结账

5. 退出

要求

使用数组或集合完成数据存储

使用IO流实现输入的读入和写出

主方法:

我用的是对象流读入和写出,先判断文件是否存在,文件如果存在则将文件的内容暂存到容器arrayList中,并打印文件内容。

如果文件不存在,则在FruitShop//src//Fruit.dat路径下创建一个文件,并把已经写好的对象写出到文件中。

sum用于记录购物车的总金额,BuyShopingList用于暂存购物车内容。

在while(true)循环中 先打印主菜单,接着接收键盘输入的下一行字符串,这里用字符而不是用int是为了防止抛InputMismatchException异常,当然try catch也可以达到同样的效果

接着switch接收f 实现其他的功能

public class Main {
    public static void main(String[] args) {
        File file = new File("FruitShop//src//Fruit.dat");
        //声明一个用于暂时存储水果列表的集合
        ArrayList<Fruit> arrayList;
        //用于记录购物车的总金额
        double sum = 0;
        if (file.exists()) {
            //文件存在则读取文件,将文件内的水果列表存储到集合中
            System.out.println("序号\t\t水果名称\t\t单价(元/斤)   \t \t数量(斤)");
            arrayList = Files.ListFileReader();
        } else {
            //文件不存在则创建文件,将文件初始化,并存储到arrayList中
            arrayList = TemporarilyCollection.FruitList();
        }

        //BuyShoppingList用于存储购物车
        ArrayList BuyShoppingList = new ArrayList();
        while (true) {
            //打印主菜单
            TemporarilyCollection.PriceList();
            Scanner scan = new Scanner(System.in);
            //用于接收用户输入的数字
            String f = scan.nextLine();
            switch (f) {
                case "1":
                    //打印存储在文件中的水果列表
                    TemporarilyCollection.List();
                    break;
                case "2": {
                    //购买水果,将购买的水果存入BuyShoppingList中
                    sum = BuyFruit.BuyFruits(arrayList, BuyShoppingList, scan);
//                    BuyFruit.ShoppingCar(BuyShoppingList);
                    break;
                }
                case "3": {
                    //结账
                    BuyFruit.Checkout(arrayList,BuyShoppingList,sum);
                    System.out.println("结账成功");
                    break;
                }
                case "4": {
                    TemporarilyCollection.Exit();
                    break;
                }
                default:
                    System.out.println("请输入正确的序号");
                    break;
            }

        }
    }
}

package Java;

import java.util.*;

/**
 * @author 小绿龙
 * @date 2022/3/25 10:25
 */
public class BuyFruit {
    public static double ShoppingCar(ArrayList BuyShoppingSet) {
        //打印购物车
        Iterator<Fruit> iterator = BuyShoppingSet.iterator();
        double sum = 0;
        System.out.println("序号\t\t水果名称\t\t单价(元/斤)   \t \t数量(斤)   \t \t价格");
        while (iterator.hasNext()) {
            Fruit fruit = iterator.next();
            System.out.printf("%s  \t \t\t%.1f\n",fruit.toString(),(fruit.getFruitNumber() * fruit.getPrice()));
            sum += fruit.getFruitNumber() * fruit.getPrice();
        }
        System.out.printf("\t\t\t\t\t\t\t\t\t\t\t\t\t总计:%.1f\n", sum);
        return sum;
    }
    public static double BuyFruits(ArrayList arrayList, ArrayList BuyShoppingList, Scanner scan) {
        //买水果
        double sum = 0;
        while (true) {
            System.out.println("请输入购买的水果序号或者名称:");
            String str = scan.next();
            Iterator<Fruit> iterator = arrayList.iterator();
            //用于判断用户输入的str是否为集合中的序号或者名称
            boolean b = true;
            //
            boolean b1 = false;
            while (iterator.hasNext()) {
                int i = 0;
                Fruit fruit = iterator.next();
                if (str.equals(fruit.getId()) || str.equals(fruit.getName())) {
                    b = false;
                    b1 = true;
                    double num = 0;
                    while (true) {
                        System.out.println("请输入购买的斤数:");
                        scan = new Scanner(System.in);
                        try {
                            num = scan.nextDouble();
                            if (num < fruit.getFruitNumber() && num > 0){
                                break;
                            }else {
                                System.out.println("超出库存范围");
                            }
                        } catch (InputMismatchException ime) {

                            System.out.println("请输入正确的数字");
                        }
                    }
                    TemporarilyCollection.BuyList(BuyShoppingList, fruit, num);
                    BuyShoppingList.sort(Comparator.naturalOrder());
                    sum = BuyFruit.ShoppingCar(BuyShoppingList);
                    break;
                }

            }
                while (b1) {
                    if (b) {
                        System.out.println("请输入正确的序号或者名称!");
                        break;
                    } else {
                        System.out.println("是否继续购买?(Y / N)");
                        String s = scan.next();//输入Y
                        if (s.toUpperCase().equals("Y")) {
                            b1 = false;
                        } else if (s.toUpperCase().equals("N")) {
                            b = true;
                        } else {
                            System.out.println("请输入(Y / N)!");
                        }
                    }
                    if (b) {
                        break;
                    }
                }
            if (b) {
                break;
            }
            }
        return sum;
        }

    public static void Checkout(ArrayList<Fruit> arrayList,ArrayList<Fruit> BuyShoppingList,double sum){
        int i = 0;
        double buyNum = 0;
        while(true){
            BuyFruit.ShoppingCar(BuyShoppingList);
            System.out.println("本次消费" + sum + "元人民币,请输入结账的金额");
            while (true){
                Scanner scanner = new Scanner(System.in);
                try {
                    buyNum = scanner.nextDouble();
                    break;
                } catch (Exception e) {
                    System.out.println("请输入正确的数字");
                }
            }

            if (buyNum >= sum){
                System.out.println("应找零:" + (buyNum - sum));
                break;
            }else {
                System.out.println("输入的金额不足以结账,请重新输入");
            }
        }
        Iterator<Fruit> iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            Fruit fruit =  iterator.next();
            if(i < BuyShoppingList.size()){
                if (fruit.getId().equals(BuyShoppingList.get(i).getId()) && fruit != null){
                    fruit.setFruitNumber(fruit.getFruitNumber() - BuyShoppingList.get(i++).getFruitNumber());
                }
            }
        }
        Files.ListFileWriter(arrayList);
        Iterator<Fruit> iterator1 = BuyShoppingList.iterator();
        while (iterator1.hasNext()) {
            BuyShoppingList.remove(0);
        }


    }
}

package Java;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author 小绿龙
 * @date 2022/3/22 15:59
 */
public class Files {
    public static void ListFileWriter(ArrayList arrayList) {
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("Fruit.dat"));
            Iterator<Fruit> iterator = arrayList.iterator();
            while (iterator.hasNext()) {
                Fruit fruit = iterator.next();
                oos.writeObject(fruit);
            }//迭代器写出Fruit.dat文件内容
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public static ArrayList<Fruit> ListFileReader(){
        //读入文件
        ObjectInputStream ois = null;
        ArrayList<Fruit> arrayList = new ArrayList();
        try {
            ois = new ObjectInputStream(new FileInputStream("Fruit.dat"));
            while (true){
                Fruit fruit = null;
                try {
                    fruit = (Fruit) ois.readObject();
                } catch (EOFException e) {

                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
                if(fruit != null){
                    arrayList.add(fruit);//用于暂时存储文件中的内容
                    System.out.println(fruit);
                }else{
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return arrayList;
    }
}

package Java;


import java.io.Serializable;

/**
 * @author 小绿龙
 * @date 2022/3/21 19:13
 */
public class Fruit implements Comparable, Serializable,Cloneable{
    private String id;
    private String name;
    private double price;
    private double fruitNumber;
    static final long serialVersionUID = 43541564153L;

    public Fruit(String id, String name, double price,double fruitNumber) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.fruitNumber = fruitNumber;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setFruitNumber(double fruitNumber) {
        this.fruitNumber = fruitNumber;
    }

    public double getPrice() {
        return price;
    }

    public double getFruitNumber() {
        return fruitNumber;
    }

    public String getName() {
        return name;
    }


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

    public String toString() {
        return id +"\t\t" + name + "  \t    " + price + "\t\t     \t" + fruitNumber;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof Fruit){
            Fruit fruit = (Fruit) o;
            return this.id.compareTo(fruit.id);
        }else {
            throw new RuntimeException("输入类型不匹配");
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Fruit fruit1 = (Fruit) o;

        if (Double.compare(fruit1.price, price) != 0) return false;
        if (Double.compare(fruit1.fruitNumber, fruitNumber) != 0) return false;
        if (id != null ? !id.equals(fruit1.id) : fruit1.id != null) return false;
        return name != null ? name.equals(fruit1.name) : fruit1.name == null;
    }

    @Override
    public int hashCode() {
        int result;
        long temp;
        result = id != null ? id.hashCode() : 0;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        temp = Double.doubleToLongBits(price);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(fruitNumber);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    public Fruit() {
    }
}

package Java;

import java.util.*;

/**
 * @author 小绿龙
 * @date 2022/3/22 19:13
 */
public class TemporarilyCollection {
    public static void Fruitadd(ArrayList arrayList){
        //水果列表赋值
        arrayList.add(new Fruit("1","苹果",12.5,1235.3));
        arrayList.add(new Fruit("2","梨",10.8,1324.6));
        arrayList.add(new Fruit("3","水蜜桃",22.8,1465.1));
        arrayList.add(new Fruit("4","车厘子",39.9,4563.1));
        arrayList.add(new Fruit("5","香蕉",18.8,5451.4));
        arrayList.add(new Fruit("6","猕猴桃",38.8,45343.1));
        arrayList.add(new Fruit("7","火龙果",13.3,8345.5));
        arrayList.add(new Fruit("8","红心柚",16.8,458.2));
        arrayList.add(new Fruit("9","葡萄",35.99,6145.5));
        arrayList.add(new Fruit("10","百香果",14.9,4345.2));
        arrayList.add(new Fruit("11","榴莲",89.9,1352.3));
        arrayList.add(new Fruit("12","人参果",9999.0,9999.9));
        arrayList.add(null);
    }
    public static void BuyList(ArrayList<Fruit> BuyShoppingList,Fruit fruit,double num){
        //传入一个集合 给集合中添加水果与水果的斤数 最后将集合返回
        boolean b = true;
        int i = 0;
        Iterator iterator = BuyShoppingList.iterator();//迭代购物车
        while (iterator.hasNext()) {
            Fruit f = (Fruit) iterator.next();
            //寻找购物车中是否有和当前购买的水果相同序号的水果
            if(f.getId().equals(fruit.getId())){
                //如果购物车中有相同的水果的话
                num += BuyShoppingList.get(i).getFruitNumber();

                //修改购物车中水果的斤数
                BuyShoppingList.get(i).setFruitNumber(num);
                b = false;
                break;
            }
            i++;
        }
        if(b){
            BuyShoppingList.add(new Fruit(fruit.getId(),fruit.getName(),fruit.getPrice(),num));
        }
    }
    public static ArrayList FruitList(){
        //打印水果列表
        //给集合赋初值 并返回这个集合
        ArrayList arrayList = new ArrayList();
        TemporarilyCollection.Fruitadd(arrayList);
        Files.ListFileWriter(arrayList);
        return arrayList;
    }
    public static void PriceList(){
        //主菜单
        System.out.println("**********精 品 水 果************");
        System.out.println("1.查看水果列表");
        System.out.println("2.购买水果(输入序号或者水果名称)");
        System.out.println("3.查看购物车");
        System.out.println("4.结账");
        System.out.println("5.退出");
        System.out.println("请输入序号:");
    }
    public static void List(){
        //查看水果列表
        System.out.println("序号\t\t水果名称\t\t单价(元/斤)   \t \t数量(斤)");
        Files.ListFileReader();
    }
    public static void Exit(){
        System.exit(0);
    }//退出
}

Continue.......

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值