java水果摊增删改查(集合与IO流的配合)

项目名
水果摊售货系统
项目描述
该系统类似于超市收银系统,由收银员操作,包括添加商品进购物车,结账以及找零
控制台界面
具体功能

  1. 查看水果列表

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

  3. 查看购物车

  4. 结账

  5. 退出

要求
使用数组或集合完成数据存储
使用IO流实现数据的读入和写出

我打算分为两个包1.fruitsMenu 2.IOmreq(数据录入又多建了一个包)
唯一需要注意的是包名
一.fruitsMenu
1.主函数包
代码如下:

package fruits_menu;

public class Fruits_main {
	public static void main(String[] args) {
		System.out.println("This is fruits shop!");
		System.out.println("Welcome to our shop!");
		System.out.println("Please enter what you need"
		+" to query");
		System.out.println("fruits menu:");
		while(true) {
			Fruits_menu.menu();//调用主菜单
			Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
		}
	}
}

2.主菜单

package fruits_menu;
import java.text.SimpleDateFormat;
import java.util.Date;//使用 Date 类及 SimpleDateFormat 类的 format(date) 方法来输出当前时间
public class Fruits_menu {
	public static void menu() {
		// TODO Auto-generated constructor stub
		System.out.println(" ________ ________  ___  ___  ___  _________  ________      \n" +
				"|\\  _____\\\\   __  \\|\\  \\|\\  \\|\\  \\|\\___   ___\\\\   ____\\     \n" +
				"\\ \\  \\__/\\ \\  \\|\\  \\ \\  \\\\\\  \\ \\  \\|___ \\  \\_\\ \\  \\___|_    \n" +
				" \\ \\   __\\\\ \\   _  _\\ \\  \\\\\\  \\ \\  \\   \\ \\  \\ \\ \\_____  \\   \n" +
				"  \\ \\  \\_| \\ \\  \\\\  \\\\ \\  \\\\\\  \\ \\  \\   \\ \\  \\ \\|____|\\  \\  \n" +
				"   \\ \\__\\   \\ \\__\\\\ _\\\\ \\_______\\ \\__\\   \\ \\__\\  ____\\_\\  \\ \n" +
				"    \\|__|    \\|__|\\|__|\\|_______|\\|__|    \\|__| |\\_________\\\n" +
				"                                                \\|_________|\n");
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
		System.out.println("1.View the fruit list.");
		System.out.println("2.To buy fruits.");
		System.out.println("3.View shopping cart.");
		System.out.println("4.Delete Fruits");
		System.out.println("5.Exit.");
	}
}

3.输入功能

package fruits_menu;
import I0mreq.IOread;

import java.io.IOException;
import java.util.Scanner;
public class Menu_input {
	public static void input(){
		Scanner scanner =new Scanner(System.in);
		int user = scanner.nextInt();
		switch(user) {
		case 1: Fruits_List.List();break;
		case 2: Fruits_buy.buy();break;
		case 3: Fruits_cart.cart();break;
		case 4:
			try {
				Fruits_clearing.clearing();
			} catch (IOException e) {
				e.printStackTrace();
			}
			break;
		case 5: System.out.println("Thanks for your patronage!");
			IOread.read();
			    System.exit(0);/*status是状态码,0表示正常退出程序,其他值表示异常退出,return 只能退出方法*/
		default: Fruits_menu.menu();//调用主菜单
			Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
		}
	}
}

4.第一个功能水果列表展示

package fruits_menu;

import java.util.Scanner;

public class Fruits_List {
	static double apple=5.0,pear=6.0,banana=7.0,grape=10.0;
	public static void view(){
		System.out.println("Fruits\t\tUnit");
		System.out.println("1.apple\t\t"+apple+"yuan/0.5kg");
		System.out.println("2.pear\t\t"+pear+"yuan/0.5kg");
		System.out.println("3.banana\t"+banana+"yuan/0.5kg");
		System.out.println("4.grape\t\t"+grape+"yuan/0.5kg");
		System.out.println("----------------------------");

	}
		public static void  List() {
			 view();//水果单价数据表
			System.out.println("if you enter 1,you will return to the main menu");
			System.out.println("if you enter 2,you will into your select buy");
			 Scanner user = new Scanner(System.in);
			 int Use =user.nextInt();
				if(Use==1) {//调用主菜单
					Fruits_menu.menu();
					while(true) {
						Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
					}
				}
				else if(Use==2) {//进入购买界面
					Fruits_buy.buy();
				}

		}


}



5.水果数据录入

package com.vector.pojo;

public class FruitsData {
	//定义ID
	private String id;
	//定义名称
	private String name;
	//定义数量
	private  double unit;
	private double weight;
	private  double price;
	public FruitsData(String id, String name, Double weight,double unit) {//无参构造器是必要的,所以定义有参构造器,还要再写一遍
		super();
		this.id = id;
		this.name = name;
		this.weight = weight;
	}
	public FruitsData() {//无参构造器是必要的,所以定义有参构造器,还要再写一遍
		super();
		// TODO Auto-generated constructor stub
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getId() {
		return id;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	public  double getWeight() {
		return weight;
	}
	//获取价格
	public  void setUnit(double unit){ this.unit =unit;}
	public  double getUnit(){ return  unit;}
	public  void setPrice(double price){this.price = price;}
	public double getPrice(){
		return price;
	}

}


6.购买功能

package fruits_menu;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import I0mreq.CreateFile;
import I0mreq.IOwrite;
import com.vector.pojo.FruitsData;

public class Fruits_buy {
    static ArrayList<FruitsData> list = new ArrayList<>();//容器存放某种水果及其属性
    static void buy() {//添加水果系统
        CreateFile.file();//创建文件
        Fruits_List.view();//调用水果单价数据表
        System.out.println("Please select the item you "
                + "want to buy,and please input fruits number or name");
        System.out.println("Please input enterKey to confirm.");
        addFruits(list);
        IOwrite.write(list);
        System.out.println("If you enter 1,you will return to the main menu");
        System.out.println("If you enter 2,you will into your cart");
        Scanner user = new Scanner(System.in);
        int User = user.nextInt();
        if (User == 1) {//调用主菜单
            Fruits_menu.menu();
            while (true) {
                Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
            }
        } else if (User == 2) {//进行购物车筛选界面
            Fruits_cart.cart();
        } else Fruits_buy.buy();
    }

    public static void addFruits(ArrayList<FruitsData> arrayList) {
        Map<String, Double> fruitsBuy = new HashMap<>();//map实现键值对应
        fruitsBuy.put("1", Fruits_List.apple);
        fruitsBuy.put("2", Fruits_List.pear);
        fruitsBuy.put("3", Fruits_List.banana);
        fruitsBuy.put("4", Fruits_List.grape);
        Scanner sc = new Scanner(System.in);
        Map<String, String> Name = new HashMap<>();//map实现键值对应
        Name.put("1", "apple");
        Name.put("2", "pear");
        Name.put("3", "banana");
        Name.put("4", "grape");
        System.out.println("Please input fruits id.");
        String id = sc.nextLine();
        System.out.println("Please input fruits weight.");
        double weight = sc.nextDouble();
        FruitsData s = new FruitsData();
        s.setId(id);
        s.setName(Name.get(id));
        s.setWeight(weight);
        s.setUnit(fruitsBuy.get(id));
        s.setPrice(weight * fruitsBuy.get(id));
        arrayList.add(s);//引用类型 集合追加
        System.out.println("Added fruit successfully!");
        System.out.println("if you want to exit,please input enter");
        System.out.println("input other keyboard is continue.");
        sc.nextLine();
        if (!sc.nextLine().equals("")) {//输入回车退出
            addFruits(arrayList);
        }
    }
}



7.购物车功能

package fruits_menu;

import java.util.Scanner;
import I0mreq.IOread;
import com.vector.pojo.FruitsData;

public class Fruits_cart {
	public  static void cart(){
		IOread.read();//读取文件
		System.out.println("If you press 1,you could enter the down layer.");
		System.out.println("If you press 2,you could enter main menu!");
		System.out.println("If you press 3,you could enter delete function!");
		System.out.println("If you want delete or modify data,you could enter other.");
			Scanner scanner = new Scanner(System.in);
			int  user = scanner.nextInt();
			switch (user) {
				case 1:
					System.out.print("Please pay:");
					double sumMoney = 0;
					for(int i=0;i<Fruits_buy.list.size();i++){
						FruitsData f = Fruits_buy.list.get(i);
						sumMoney= sumMoney + f.getPrice();
					}//统计金额
					System.out.println(sumMoney);
					Scanner sc = new Scanner(System.in);
					double s =sc.nextDouble();
					if(s==sumMoney)
					{
						IOread.read();
						System.out.println("Pay"+sumMoney);
						System.out.println("Order has been confirmed!");
					}
					else
				{
					System.out.println("Payment failure.");
					Fruits_main.main();
				}
					break;
				case 2:Fruits_menu.menu();
					Menu_input.input();/*调用选择输入,调用谁的方法,创建哪个类的对象,不能调用无对象的方法.静态方法直接类名.方法*/
					break;
				case 3:
					Fruits_clearing.clearing(Fruits_buy.list);
					break;
				default:System.out.println("Sorry,you input number is error!");
			}
			if(user!=1){
				System.out.println("Order has been confirmed!");
				IOread.read();
			}

	}
}

8.删除功能

package fruits_menu;
import I0mreq.IOread;
import I0mreq.IOwrite;
import com.vector.pojo.FruitsData;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Fruits_clearing {
	 public static void clearing() throws IOException {
		Scanner sc = new Scanner(System.in);
		IOread.read();
		System.out.println("请输入要删除的水果ID: ");
		String id = sc.nextLine();
		for (int i = 0; i < Fruits_buy.list.size(); i++) {
			FruitsData f = Fruits_buy.list.get(i);
			if(f.getId().equals(id)){
				Fruits_buy.list.remove(i);
				IOwrite.write(Fruits_buy.list);
				System.out.println("删除成功");
				return;
			}
		}
		System.out.println("找不到要删除的水果ID!");
}

	private static void write(ArrayList<FruitsData> list) {
		// TODO Auto-generated method stub

	}

	private static void print(ArrayList<FruitsData> list) {
		// TODO Auto-generated method stub

	}

	public static void clearing(ArrayList<FruitsData> list) {
		// TODO Auto-generated method stub

	}


	}


二.第二部分IOmreq
1.创建目录

package I0mreq;

import java.io.File;

public class IOmkdirs {
	public static void mkdirs() {
		//创建目录文件夹
		File FruitDatabase = new File("C:/MyPro01_fruits/FruitDatabase");//设置目录路径
		FruitDatabase.mkdirs();//创建目录
		
	}
	
}


2.创建文件

package I0mreq;
import java.io.File;
public class CreateFile {
	public static void file() {
		IOmkdirs.mkdirs();//创建path目录
		try {
			
			File file = new File("C:/MyPro01_fruits/FruitDatabase/Data.txt");//设置文件路径
			file.createNewFile();		//创建文件
			
		} catch (Exception e) {//捕捉异常
			// TODO: handle exception
			e.printStackTrace();//深度分析异常产生的原因并打印出来
		}
	}
}

3.写入文件

package I0mreq;

import java.util.ArrayList;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import com.vector.pojo.FruitsData;

public class IOwrite {
	public static void write(ArrayList<FruitsData> list){
		BufferedWriter fos = null;
		
		try {
			// true表示内容会追加到文件末尾;false表示重写整个文件内容。
			fos = new BufferedWriter(new FileWriter("C:/MyPro01_fruits/FruitDatabase/Data.txt"));//字符缓冲流
			
			for (int i = 0; i < list.size(); i++) {
				FruitsData f = list.get(i);
				fos.write(f.getId()+" " + f.getName() + " " + f.getUnit() + " " + f.getPrice());
				fos.newLine();
			}
	
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (fos != null) {
					fos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

4.读取文件

package I0mreq;
import java.io.FileInputStream;

public class IOread {
	public static void read(){	
		FileInputStream fis = null;//全局变量,fileInputStream字节流.可能会编码异常.FileReader字符流
		try {
			fis  = new FileInputStream("C:/MyPro01_fruits/FruitDatabase/Data.txt");//创建对象
			StringBuilder sBuilder = new StringBuilder();//字符输出
			int temp = 0;
			while((temp = fis.read()) != -1) {//read是一个字符字符的读,读完为-1
				sBuilder.append((char)temp);//append读取追加,sB动态数组
			}
			System.out.println(sBuilder);
		}catch (Exception e) {//捕获异常结果
			e.printStackTrace();
		}finally {//绝对执行
			try {
				if(fis != null) {
					fis.close();//关闭流对象
				}
			} catch (Exception e) {
				e.printStackTrace();
				// TODO: handle exception
			}
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最难不过坚持丶渊洁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值