在上一篇文章当中我们实现了如何将该功能实现,但是我们所以的功能和实现都在一个文件里面,这样不利于我们进行管理,或者是不利于使用,那么我们就将各个功能写成方法进行封装,然后进行引用即可,注意我们有的在分支语句当中写的break,再方法当中不能那样使用,要改写成return。
方法类:
public class PocketMoneyOOP {
//属性:
boolean loop = true;
Scanner myscanner = new Scanner(System.in);
int key = 0;
//第二步:零钱通明细,使用字符串来拼接
String details = "===========零钱通明细============\n";
//第三步:收益入账
double money = 0;
double balance = 0;
//表示当前的日期,date是java.util.Date类型,表示日期
Date date = null;
//可以用于日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm");
//第四步:消费支出
String note ="";
public void mainMenu() {
do {
System.out.println("===========零钱通菜单OOP===========");
System.out.println(" 1 零钱通明细 ");
System.out.println(" 2 收益入账 ");
System.out.println(" 3 消费 ");
System.out.println(" 4 退出 ");
System.out.print("请选择(1-4):");
key = myscanner.nextInt();
switch(key) {
case 1:
this.details();
break;
case 2:
this.income();
break;
case 3:
this.pay();
break;
case 4:
this.quit();
break;
default:
System.out.println("您的选择有误,请重新选择输入...");
}
}while(loop);
}
//显示明细
public void details() {
System.out.println(details);
}
//收入
public void income() {
do {
System.out.println("收益入账金额:");
money = myscanner.nextDouble();
//money要进行校验,是否正确
if(money <= 0 ) {
System.out.println("请输入正确的金额 需要大于0");
}
}while(money <= 0);
balance += money;
//拼接收益入账到details
date = new Date();//获取当前日期
details += "\n收益入账\t+"+money + "\t"+sdf.format(date) + " 余额:"+balance;
}
//消费
public void pay() {
System.out.println("消费金额:");
money = myscanner.nextDouble();
//消费金额的校验
System.out.println("消费方向:");
note = myscanner.next();
if(balance < money) {
System.out.println("余额不足,无法消费此行为..");
return;
}else if(money <= 0) {
System.out.println("您的消费余额应该在0到"+balance+"之间"+"请重新输入:");
return;
}
balance -= money;
//拼接消费支出到details
date = new Date();//获取当前日期
details += "\n"+note+"\t-"+money + "\t"+sdf.format(date) + " 余额:"+balance;
}
//退出
public void quit() {
String choice = "";
do {
System.out.println("是否确定要退出零钱通(y(退出)或者是n(取消退出))");
System.out.print("请输入:");
choice = myscanner.next();
if(choice.equals("y")) {
//选择退出的时候,我们改变整个控制菜单循环的变量,便可以退出
loop = false;
return;
}else if(choice.equals("n")){
return;
}else {
System.out.println("输入有误,请重新输入");
}
//进入循环的条件:当两个条件都为假的时候。取反才为真,才进入循环
}while(!(choice.equals("y") || choice.equals("n")));
}
}
测试类:
public class PocketMoneyAPP {
public static void main(String[] args) {
//直接调用方法
PocketMoneyOOP test = new PocketMoneyOOP();
test.mainMenu();
}
}
测试结果:
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):2
收益入账金额:
1000
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):2
收益入账金额:
500
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):1
===========零钱通明细============
收益入账 +1000.0 2024-06-29 10:23 余额:1000.0
收益入账 +500.0 2024-06-29 10:23 余额:1500.0
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):3
消费金额:
100
消费方向:
gg
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):3
消费金额:
-100
消费方向:
gg
您的消费余额应该在0到1400.0之间请重新输入:
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):3
消费金额:
0
消费方向:
gg
您的消费余额应该在0到1400.0之间请重新输入:
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):3
消费金额:
1500
消费方向:
gg
余额不足,无法消费此行为..
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):1
===========零钱通明细============
收益入账 +1000.0 2024-06-29 10:23 余额:1000.0
收益入账 +500.0 2024-06-29 10:23 余额:1500.0
gg -100.0 2024-06-29 10:23 余额:1400.0
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):4
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:b
输入有误,请重新输入
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:n
===========零钱通菜单OOP===========
1 零钱通明细
2 收益入账
3 消费
4 退出
请选择(1-4):4
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:y
如有错误,还望指正。