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