面向过程方式代码如下:

package SmallChangesSys;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class SmallChangeSys {

    //1.完成显示菜单
    //2.完成零钱通明细显示
    //3.收益入账:用字符串
    public static void main(String[] args) {
        boolean loop=true;
        Scanner input=new Scanner(System.in);//创建一个Scanner对象,从键盘上获取输入流
        int balance=0;//余额
        int money=0;//收益
        Date date=new Date();
//        System.out.println(date);//Sun Aug 29 20:17:40 CST 2021   需要转换格式
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  HH:mm");
//        System.out.println(sdf.format(date));//2021-08-29  20:22
        String details=new String();

        do {
            System.out.println("\n==============零钱通菜单============");
            System.out.println("1 零钱通明细");
            System.out.println("2 收益入账");
            System.out.println("3 消费");
            System.out.println("4 退出");
            System.out.print("请输入需要进行的操作:");
            int choice = input.nextInt();

            switch (choice){
                case 1:
                    System.out.println("----------收益明细----------");
                    System.out.println(details);
                    break;
                case 2:
                    System.out.print("请输入收益金额:");
                    money=input.nextInt();
                    if (money<0){//设置限定条件
                        System.out.println("你的输入有误,收益不能小于零,自动退出菜单页面!");
                        break;
                    }

                    balance+=money;
                    String temp="\n收益入账\t+" + money +"\t"+sdf.format(date)+"\t"+balance;
                    details+=temp;

                    break;
                case 3:
                    System.out.print("请输入消费主题:");
                    String inputString=input.next();
                    System.out.print("请输入消费金额:");
                    money=input.nextInt();
                    while(money>balance){
                        System.out.print("你的钱包支付不起这笔钱,请重新输入消费金额:");
                        money=input.nextInt();
                    }
                    while(money<0){
                        System.out.print("商家不会付你钱哦,请重新输入消费金额:");
                        money=input.nextInt();
                    }

                    balance-=money;
                    details+="\n"+inputString+"\t-" + money +"\t"+sdf.format(date)+"\t"+balance;
                    break;
                case 4:
                    String exit=new String();

                    while(true){//这段代码只做一件事:将输入的字符限定在y或n
                        System.out.print("你确定要退出吗[y/n]:");
                        exit=input.next();
                        if("y".equals(exit)||"n".equals(exit)){
                            break;//输入y或n,退出循环
                        }
                    }

                    if ("y".equals(exit)) {
                        loop=false;
                    }
                    break;
            }
        }while (loop);
    }
}

面向对象实现(基于上述代码):

属性类:存放属性和方法

package SmallChangesSys;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class SmallChangeSysOOP {

    boolean loop=true;
    Scanner input=new Scanner(System.in);//创建一个Scanner对象,从键盘上获取输入流
    int balance=0;//余额
    int money=0;//收益
    Date date=new Date();
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  HH:mm");
    String details=new String();

    void showMap(){//显示零钱通界面

        do {
            System.out.println("\n==============零钱通菜单============");
            System.out.println("1 零钱通明细");
            System.out.println("2 收益入账");
            System.out.println("3 消费");
            System.out.println("4 退出");
            System.out.print("请输入需要进行的操作:");
            int choice = input.nextInt();

            switch (choice){
                case 1:
                    showDetails();
                    break;
                case 2:
                    addMoney();
                    break;
                case 3:
                    comsumption();
                    break;
                case 4:
                    exitSys();
                    break;
                default:
                    System.out.println("你的输入有误,请重新输入!");
                    break;
            }
        }while (loop);
    }

    //显示零钱通收益明细
    void showDetails(){
        System.out.println("----------收益明细----------");
        System.out.println(details);
    }

    //收益
    void addMoney(){
        System.out.print("请输入收益金额:");
        money=input.nextInt();
        if (money<0){
            System.out.println("你的输入有误,收益不能小于零,自动退出菜单页面!");
            return;//从原来的循环中移植的代码,原来都是break用于跳出循环体,这里要改成return跳出方法体
        }

        balance+=money;
        String temp="\n收益入账\t+" + money +"\t"+sdf.format(date)+"\t"+balance;
        details+=temp;
    }

    //消费
    void comsumption(){
        System.out.print("请输入消费主题:");
        String inputString=input.next();
        System.out.print("请输入消费金额:");
        money=input.nextInt();
        while(money>balance){
            System.out.print("你的钱包支付不起这笔钱,请重新输入消费金额:");
            money=input.nextInt();
        }
        while(money<0){
            System.out.print("商家不会付你钱哦,请重新输入消费金额:");
            money=input.nextInt();
        }

        balance-=money;
        details+="\n"+inputString+"\t-" + money +"\t"+sdf.format(date)+"\t"+balance;
    }

    //退出
    void exitSys(){
        String exit=new String();

        while(true){//这段代码只做一件事:将输入的字符限定在y或n
            System.out.print("你确定要退出吗[y/n]:");
            exit=input.next();
            if("y".equals(exit)||"n".equals(exit)){
                break;//输入y或n,退出循环
            }
        }

        if ("y".equals(exit)) {
            loop=false;
        }
    }

}

main方法类:

package SmallChangesSys;

public class SmallChangeSysOOPmain {
    public static void main(String[] args) {
        new SmallChangeSysOOP().showMap();//调用显示菜单方法
    }
}

学习总结:
1、在退出功能中,实现限定输入内容的功能。其中,限定内容的功能与判断功能分开实现,而不是在一个while循环中实现所有的东西。这种思维有利于项目的开发,增强代码的可读性。
2、获取时间==>使用Date类、SimpleDateFormat类

Date date=new Date();
        System.out.println(date);//Sun Aug 29 20:17:40 CST 2021   需要转换格式
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  HH:mm");
        System.out.println(sdf.format(date));//2021-08-29  20:22