Java——零钱通(面向对象)

在上一篇文章当中我们实现了如何将该功能实现,但是我们所以的功能和实现都在一个文件里面,这样不利于我们进行管理,或者是不利于使用,那么我们就将各个功能写成方法进行封装,然后进行引用即可,注意我们有的在分支语句当中写的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

如有错误,还望指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值