Java销售结算代码查询总销售额显示为0,如何实现数据保存与多输入
问题修复与优化方案
1. 总销售额返回0的修复
根因
你在密码校验通过后重新实例化了一个Main对象c,而用户选购商品的数据都存在之前创建的store实例中,新实例的购物车所有商品购买数量均为0,调用getTotal()自然返回0。
修复代码
把main方法中密码校验通过后的逻辑修改为直接调用原有store实例的totalSales():
if(check) { System.out.println("Correct password.Here is the access"); // 删掉Main c=new Main();这行无效代码 store.totalSales(); }
2. 累计总销售额实现
当前代码没有跨订单的销售额累计逻辑,新增静态累计变量即可实现,静态变量属于类全局共享,不会随实例销毁丢失:
新增代码
在Main类中添加静态累计变量:
// 新增全局累计销售额变量 private static double totalSalesAmount = 0.0;
修改结算方法,每次订单结算时将当前订单金额累加:
public void finnishPurchase() { double currentTotal = getTotal(); System.out.println("---------------------"); System.out.println("Subtotal: " + getSubtotal()); System.out.println("Vat: " + vat); System.out.println("Total: " + currentTotal); // 累加当前订单到总销售额 totalSalesAmount += currentTotal; }
修改totalSales方法直接输出累计值:
public void totalSales(){ System.out.println("Total sales is "+ totalSalesAmount); }
3. 菜单多输入功能实现
可以修改交互逻辑,新增主菜单循环,支持用户多次选择操作:
public void showMenu() { System.out.println("\n===== 销售结算系统 ====="); System.out.println("1. 选择商品添加到购物车"); System.out.println("2. 查看购物车"); System.out.println("3. 结算当前订单"); System.out.println("4. 退出系统"); System.out.print("请输入操作序号:"); }
将main方法的循环逻辑修改为根据菜单选择执行对应操作,直到用户选择退出为止,同时新增异常处理避免输入非法值导致程序崩溃。
4. 其他代码优化点
- 修正
Product类的select方法逻辑:原有逻辑是直接覆盖购买数量,改为累加更符合使用习惯:public void select(int quantity) { quantitySelected += quantity; } - 修正拼写错误:
finnishPurchase改为finishPurchase - 把VAT税率定义为常量:
private static final double VAT = 0.13;,你代码中0.5的税率不符合实际业务逻辑 - 删除无用变量:类中定义的
static double a从未使用,直接删除 - 不要重复创建
Scanner实例:main方法中无需再new新的Scanner,直接复用类中的scanner属性即可 - 给类成员添加访问修饰符,符合Java封装规范:比如把
cart、vat等属性改为private,必要的方法提供public访问入口 - 新增商品序号越界异常处理:当用户输入的商品序号超过购物车范围时,捕获
IndexOutOfBoundsException给出友好提示,避免程序直接崩溃
内容的提问来源于stack exchange,提问作者shad A
相关产品推荐
相关产品推荐

