简易POS系统订单信息展示问题:如何输出用户输入的全部商品?
问题根源
你当前的代码里,订单(Order)类应该是用单个变量存储商品(比如private Product product;),每次添加新商品时都会覆盖之前的对象,导致最终只保留最后一个商品。
修复步骤
- 修改Order类,改用集合存储商品
把原来的单个Product变量换成List集合,这样就能存储多个商品了:
import java.util.ArrayList; import java.util.List; public class Order { private List<Product> products; private double total; public Order() { products = new ArrayList<>(); total = 0.0; } // 新增商品到订单,同时累加总价 public void addProduct(Product product) { products.add(product); total += product.getPrice(); } public List<Product> getProducts() { return products; } public double getTotal() { return total; } }
- 修改收据生成逻辑,遍历所有商品
在打印收据的代码里,遍历Order里的商品集合,逐个输出每个商品的信息:
public void printReceipt(Order order) { System.out.println("===== 收据 ====="); for (Product p : order.getProducts()) { System.out.printf("%-20s $%.2f%n", p.getName(), p.getPrice()); } System.out.println("----------------"); System.out.printf("总计: $%.2f%n", order.getTotal()); System.out.println("==============="); }
- 调整商品添加流程
在用户选择商品的循环里,每次选中商品后调用order.addProduct(selectedProduct),而不是用setter覆盖单个商品:
// 示例流程 Order order = new Order(); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("选择商品(输入编号,输入0结束):"); // 这里写显示商品列表的逻辑 int choice = scanner.nextInt(); if (choice == 0) break; Product selected = getProductById(choice); // 根据编号获取对应商品 if (selected != null) { order.addProduct(selected); System.out.println("已添加:" + selected.getName()); } else { System.out.println("无效选择,请重新输入"); } } // 打印最终收据 printReceipt(order);
验证效果
修改后,收据会正确输出所有添加的商品,比如:
===== 收据 =====
可乐 $3.00
汉堡 $10.00
薯条 $5.00总计: $18.00
内容的提问来源于stack exchange,提问作者Abies
相关产品推荐
相关产品推荐

