3 面向对象方式实现
🍑 在该部分,我们只需要将面向过程实现部分的代码进行优化即可。
首先我们创建一个类 SmallChange,里面需要包含该程序的基础属性以及基础功能的方法 ,参考代码如下:
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class SmallChange { Scanner in = new Scanner(System.in); // 相关属性 // 菜单部分相关变量 boolean loop = true; // 用于控制循环 String key = ""; // 菜单选项 // 零钱通明细相关变量 String details = "=================零钱通明细================="; // 展示明细 // 收益入账相应的变量 double money = 0; // 入账金额 double balance = 0; // 余额 Date date = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 日期格式化 // 消费部分 String note = ""; // 用于存储消费说明 // 显示菜单 public void mainMenu(){ do{ // 具体菜单 System.out.println("=================选择零钱通菜单================="); System.out.println("\t\t\t\t1 零钱通明细"); System.out.println("\t\t\t\t2 消费入账"); System.out.println("\t\t\t\t3 消费"); System.out.println("\t\t\t\t4 退出"); System.out.println("请选择(1-4): "); key = in.next(); switch (key){ case "1": // 零钱通明细部分 this.detail(); break; case "2": // 收益入账 this.income(); break; case "3": // 消费 this.pay(); break; case "4": // 退出零钱通 this.exit(); break; default: System.out.println("输入有误!"); } }while (loop); } // 零钱通明细 public void detail(){ System.out.println(details); } // 收益入账 public void income(){ System.out.println("=================收益入账================="); System.out.println("收益入账金额: "); money = in.nextDouble(); // 校验money范围 if(money <= 0){ System.out.println("入账信息有误!"); // 提示错误信息 return; } balance += money; // 拼接入账信息到 details date = new Date(); // 获取当前日期 details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance; return; } // 消费 public void pay(){ System.out.println("消费金额: "); money = in.nextDouble(); // money 校验 if(money <= 0 || balance < money){ System.out.println("消费金额不正确或余额不足,无法进行消费!"); return; } System.out.println("消费说明: "); note = in.next(); balance -= money; // 拼接消费信息到 details date = new Date(); // 获取当前日期 details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance; return; } // 退出 public void exit(){ // 询问用户是否退出 String choice = ""; while (true){ System.out.println("你确定要退出吗?y/n: "); choice = in.next(); if("y".equals(choice) || "n".equals(choice)){ break; } } // 用户输入 y 则退出, 输入 n 则不退出 if(choice.equals("y")){ loop = false; } return; } }
🍎 而后,我们只需要在主函数中创建对象,来调用相应的方法,即可实现零钱通功能,相关代码如下:
public class ShowSmallChange { public static void main(String[] args) { SmallChange sc = new SmallChange(); sc.mainMenu(); } }
4 功能展示
⭐️ Star 1: 输入 2 ,收账 100,再次输入 2,收账 200;
Star 2: 输入 3,消费 99,消费信息为 肯德基;
⭐️ Star 3: 输入 1,展示一下零钱明细;
⭐️ Star 4: 输入 4,而后输入 y,退出程序。